00001 #include "springel.h"
00002 #include "global.h"
00003 #include "globmat.h"
00004 #include "element.h"
00005 #include "matrix.h"
00006 #include "vector.h"
00007 #include "gtopology.h"
00008 #include <math.h>
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 springel::springel (void)
00019 {
00020 long i;
00021
00022 nne=1; ndofe=-1; tncomp=1; napfun=0;
00023 ssst = bar;
00024
00025 nb=1;
00026
00027 ncomp = new long [nb];
00028 ncomp[0]=1;
00029
00030 cncomp = new long [nb];
00031 cncomp[0]=0;
00032
00033 nip = new long* [nb];
00034 intordsm = new long* [nb];
00035 for (i=0;i<nb;i++){
00036 nip[i] = new long [nb];
00037 intordsm[i] = new long [nb];
00038 }
00039
00040 nip[0][0]=1;
00041 tnip=1;
00042
00043 intordsm[0][0]=1;
00044 }
00045
00046
00047
00048
00049
00050
00051
00052
00053 springel::~springel (void)
00054 {
00055 long i;
00056
00057 for (i=0;i<nb;i++){
00058 delete [] nip[i];
00059 delete [] intordsm[i];
00060 }
00061 delete [] nip;
00062 delete [] intordsm;
00063
00064 delete [] cncomp;
00065 delete [] ncomp;
00066 }
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 long springel::give_ndofe (long eid)
00083 {
00084 if ((Gtm->give_ndofe(eid) == 0) && (Gtm->give_nne(eid) > 0))
00085 {
00086 ivector enodes(1);
00087 Mt->give_elemnodes (eid, enodes);
00088 Gtm->gelements[eid].ndofe = Mt->give_ndofn(enodes[0]);
00089 }
00090
00091 return Gtm->give_ndofe(eid);
00092 }
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 void springel::stiffness_matrix (long eid,long ri,long ci,matrix &sm)
00112 {
00113 matrix d(1, 1);
00114 Mm->matstiff (d,Mt->elements[eid].ipp[ri+0][ci+0]);
00115 switch (Mt->elements[eid].te)
00116 {
00117 case spring_1:
00118 sm[0][0] = d[0][0];
00119 break;
00120 case spring_2:
00121 sm[1][1] = d[0][0];
00122 break;
00123 case spring_3:
00124 sm[2][2] = d[0][0];
00125 break;
00126 case spring_4:
00127 sm[3][3] = d[0][0];
00128 break;
00129 case spring_5:
00130 sm[4][4] = d[0][0];
00131 break;
00132 case spring_6:
00133 sm[5][5] = d[0][0];
00134 break;
00135 default:{break;}
00136 }
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 void springel::res_stiffness_matrix (long eid,matrix &sm)
00152 {
00153 stiffness_matrix (eid,0,0,sm);
00154 }
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 void springel::mass_matrix (long eid,matrix &mm)
00169 {
00170 fillm (0.0,mm);
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 void springel::strains (long eid,long lcid)
00187 {
00188 long n = Mt->give_ndofe(eid);
00189 vector r(n);
00190 vector sig(n);
00191 vector eps(1);
00192 long ii;
00193
00194 eldispl (0,eid,r.a);
00195 ii = Mt->elements[eid].ipp[0][0];
00196 switch (Mt->elements[eid].te)
00197 {
00198 case spring_1:
00199 eps[0] = r[0];
00200 break;
00201 case spring_2:
00202 eps[0] = r[1];
00203 break;
00204 case spring_3:
00205 eps[0] = r[2];
00206 break;
00207 case spring_4:
00208 eps[0] = r[3];
00209 break;
00210 case spring_5:
00211 eps[0] = r[4];
00212 break;
00213 case spring_6:
00214 eps[0] = r[5];
00215 break;
00216 default:{break;}
00217 }
00218 Mm->storestrain (lcid,ii,eps);
00219 }
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 void springel::stresses (long eid,long lcid)
00234 {
00235 long n = Mt->give_ndofe(eid);
00236 ivector cn(n);
00237 vector r(n);
00238 vector sig(1);
00239 vector eps(1);
00240 matrix d(1,1);
00241 long ii;
00242
00243 ii = Mt->elements[eid].ipp[0][0];
00244 Mm->givestrain(lcid,ii,eps);
00245 Mm->matstiff(d, ii);
00246 mxv(d, eps, sig);
00247 Mm->storestress(lcid, ii, sig);
00248 }
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265 void springel::internal_forces (long lcid,long eid,long ri,long ci,vector &ifor)
00266 {
00267 long ii;
00268 matrix d(1,1);
00269 vector sig(1);
00270
00271 ii = Mt->elements[eid].ipp[ri+0][ci+0];
00272 if (Mp->strcomp==1)
00273 Mm->computenlstresses (ii);
00274 Mm->givestress (lcid,ii, sig);
00275 fillv(0.0, ifor);
00276 switch (Mt->elements[eid].te)
00277 {
00278 case spring_1:
00279 ifor[0] = sig[0];
00280 break;
00281 case spring_2:
00282 ifor[1] = sig[0];
00283 break;
00284 case spring_3:
00285 ifor[2] = sig[0];
00286 break;
00287 case spring_4:
00288 ifor[3] = sig[0];
00289 break;
00290 case spring_5:
00291 ifor[4] = sig[0];
00292 break;
00293 case spring_6:
00294 ifor[5] = sig[0];
00295 break;
00296 default:{break;}
00297 }
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321 }
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336 void springel::res_internal_forces (long lcid,long eid,vector &ifor)
00337 {
00338 internal_forces (lcid,eid,0,0,ifor);
00339 }
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354 void springel::intpointval (long eid,vector &nodval,vector &ipval)
00355 {
00356 copyv(nodval, ipval);
00357 }
00358