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