00001 #include "quadrilatc.h"
00002 #include "quadlineart.h"
00003 #include "plelemlq.h"
00004 #include "plelemqq.h"
00005 #include "global.h"
00006 #include "globalt.h"
00007 #include "globalc.h"
00008 #include "element.h"
00009 #include "intpoints.h"
00010 #include "globmatt.h"
00011
00012
00013 quadrilatc::quadrilatc (void)
00014 {
00015 long i;
00016
00017 if (Cp->lbb==lin_lin){
00018
00019 mnb=Pelq->nb;
00020
00021 mndofe=Pelq->ndofe;
00022
00023 tnmcomp=Pelq->tncomp;
00024
00025 nnemp = Pelq->nne;
00026
00027 nnetp = Lqt->nne;
00028
00029 tndofe = Lqt->ndofe;
00030 }
00031
00032 if (Cp->lbb==quad_lin){
00033
00034 mnb=Peqq->nb;
00035
00036 mndofe=Peqq->ndofe;
00037
00038 tnmcomp=Peqq->tncomp;
00039
00040 nnemp = Peqq->nne;
00041
00042 nnetp = Lqt->nne;
00043
00044 tndofe = Lqt->ndofe;
00045 }
00046
00047 if (Cp->lbb==quad_quad){
00048
00049 mnb=Peqq->nb;
00050
00051 mndofe=Peqq->ndofe;
00052
00053 tnmcomp=Peqq->tncomp;
00054
00055 nnemp = Peqq->nne;
00056
00057 nnetp = Qqt->nne;
00058
00059 tndofe = Qqt->ndofe;
00060 }
00061
00062
00063
00064 ntm=Tp->ntm;
00065
00066
00067
00068 intordvum=NULL; intordvlm=NULL;
00069 nipu=NULL; nipl=NULL;
00070
00071
00072 dofe = new long [ntm];
00073
00074 nipu = new long* [mnb];
00075
00076 nipl = new long* [ntm];
00077
00078 intordvum = new long* [mnb];
00079
00080 intordvlm = new long* [ntm];
00081
00082 for (i=0;i<mnb;i++){
00083 nipu[i] = new long [ntm];
00084 intordvum[i] = new long [ntm];
00085 }
00086 for (i=0;i<ntm;i++){
00087 nipl[i] = new long [mnb];
00088 intordvlm[i] = new long [mnb];
00089 }
00090
00091
00092 mordering = new long [mndofe];
00093
00094 for (i=0;i<mndofe;i++){
00095 mordering[i]=i+1;
00096 }
00097
00098
00099 if (Cp->lbb==lin_lin){
00100 switch (Tp->tmatt){
00101 case onemedium:{
00102 intordvum[0][0]=2; intordvlm[0][0]=2;
00103 nipu[0][0]=4; nipl[0][0]=4;
00104 dofe[0]=nnetp;
00105 break;
00106 }
00107 case twomediacoup:{
00108 intordvum[0][0]=2; intordvum[0][1]=2;
00109 intordvlm[0][0]=2; intordvlm[1][0]=2;
00110
00111 if (Cp->savemode==0){
00112 nipu[0][0]=4; nipu[0][1]=4;
00113 nipl[0][0]=4; nipl[1][0]=4;
00114 }
00115 if (Cp->savemode==1){
00116 nipu[0][0]=4; nipu[0][1]=0;
00117 nipl[0][0]=4; nipl[1][0]=0;
00118 }
00119
00120 dofe[0]=nnetp; dofe[1]=nnetp;
00121 break;
00122 }
00123 case threemediacoup:{
00124 intordvum[0][0]=2; intordvum[0][1]=2; intordvum[0][2]=2;
00125 intordvlm[0][0]=2; intordvlm[1][0]=2; intordvlm[2][0]=2;
00126
00127 if (Cp->savemode==0){
00128 nipu[0][0]=4; nipu[0][1]=4; nipu[0][2]=4;
00129 nipl[0][0]=4; nipl[1][0]=4; nipl[2][0]=4;
00130 }
00131 if (Cp->savemode==1){
00132 nipu[0][0]=4; nipu[0][1]=0; nipu[0][2]=0;
00133 nipl[0][0]=4; nipl[1][0]=0; nipl[2][0]=0;
00134 }
00135
00136 dofe[0]=nnetp; dofe[1]=nnetp; dofe[2]=nnetp;
00137 break;
00138 }
00139 default:{
00140 fprintf (stderr,"\n\n unknown type of transported matter is required");
00141 fprintf (stderr,"\n in function quadrilatc::quadrilatc (file %s, line %d).\n",__FILE__,__LINE__);
00142 }
00143 }
00144 }
00145
00146 if (Cp->lbb==quad_lin){
00147 switch (Tp->tmatt){
00148 case onemedium:{
00149 intordvum[0][0]=2; intordvlm[0][0]=2;
00150 nipu[0][0]=4; nipl[0][0]=4;
00151 dofe[0]=nnetp;
00152 break;
00153 }
00154 case twomediacoup:{
00155 intordvum[0][0]=2; intordvum[0][1]=2;
00156 intordvlm[0][0]=2; intordvlm[1][0]=2;
00157
00158 if (Cp->savemode==0){
00159 nipu[0][0]=4; nipu[0][1]=4;
00160 nipl[0][0]=4; nipl[1][0]=4;
00161 }
00162 if (Cp->savemode==1){
00163 nipu[0][0]=4; nipu[0][1]=0;
00164 nipl[0][0]=4; nipl[1][0]=0;
00165 }
00166
00167 dofe[0]=nnetp; dofe[1]=nnetp;
00168 break;
00169 }
00170 case threemediacoup:{
00171 intordvum[0][0]=2; intordvum[0][1]=2; intordvum[0][2]=2;
00172 intordvlm[0][0]=2; intordvlm[1][0]=2; intordvlm[2][0]=2;
00173
00174 if (Cp->savemode==0){
00175 nipu[0][0]=4; nipu[0][1]=4; nipu[0][2]=4;
00176 nipl[0][0]=4; nipl[1][0]=4; nipl[2][0]=4;
00177 }
00178 if (Cp->savemode==1){
00179 nipu[0][0]=4; nipu[0][1]=0; nipu[0][2]=0;
00180 nipl[0][0]=4; nipl[1][0]=0; nipl[2][0]=0;
00181 }
00182
00183 dofe[0]=nnetp; dofe[1]=nnetp; dofe[2]=nnetp;
00184 break;
00185 }
00186 default:{
00187 fprintf (stderr,"\n\n unknown type of transported matter is required");
00188 fprintf (stderr,"\n in function quadrilatc::quadrilatc (file %s, line %d).\n",__FILE__,__LINE__);
00189 }
00190 }
00191 }
00192
00193 if (Cp->lbb==quad_quad){
00194 switch (Tp->tmatt){
00195 case onemedium:{
00196 intordvum[0][0]=3; intordvlm[0][0]=3;
00197 nipu[0][0]=9; nipl[0][0]=9;
00198 dofe[0]=nnetp;
00199 break;
00200 }
00201 case twomediacoup:{
00202 intordvum[0][0]=3; intordvum[0][1]=3;
00203 intordvlm[0][0]=3; intordvlm[1][0]=3;
00204
00205 if (Cp->savemode==0){
00206 nipu[0][0]=9; nipu[0][1]=9;
00207 nipl[0][0]=9; nipl[1][0]=9;
00208 }
00209 if (Cp->savemode==1){
00210 nipu[0][0]=9; nipu[0][1]=0;
00211 nipl[0][0]=9; nipl[1][0]=0;
00212 }
00213
00214 dofe[0]=nnetp; dofe[1]=nnetp;
00215 break;
00216 }
00217 case threemediacoup:{
00218 intordvum[0][0]=3; intordvum[0][1]=3; intordvum[0][2]=3;
00219 intordvlm[0][0]=3; intordvlm[1][0]=3; intordvlm[2][0]=3;
00220
00221 if (Cp->savemode==0){
00222 nipu[0][0]=9; nipu[0][1]=9; nipu[0][2]=9;
00223 nipl[0][0]=9; nipl[1][0]=9; nipl[2][0]=9;
00224 }
00225 if (Cp->savemode==1){
00226 nipu[0][0]=9; nipu[0][1]=0; nipu[0][2]=0;
00227 nipl[0][0]=9; nipl[1][0]=0; nipl[2][0]=0;
00228 }
00229
00230 dofe[0]=nnetp; dofe[1]=nnetp; dofe[2]=nnetp;
00231 break;
00232 }
00233 default:{
00234 fprintf (stderr,"\n\n unknown type of transported matter is required");
00235 fprintf (stderr,"\n in function quadrilatc::quadrilatc (file %s, line %d).\n",__FILE__,__LINE__);
00236 }
00237 }
00238 }
00239
00240
00241 }
00242
00243 quadrilatc::~quadrilatc (void)
00244 {
00245 long i;
00246
00247 for (i=0;i<ntm;i++){
00248 delete [] nipl[i];
00249 delete [] intordvlm[i];
00250 }
00251 for (i=0;i<mnb;i++){
00252 delete [] nipu[i];
00253 delete [] intordvum[i];
00254 }
00255 delete [] dofe;
00256 delete [] nipu;
00257 delete [] nipl;
00258 delete [] intordvum;
00259 delete [] intordvlm;
00260 }
00261
00262 void quadrilatc::eleminit (long eid)
00263 {
00264 long ii,jj;
00265
00266
00267 Ct->elements[eid].intordvum = new long* [mnb];
00268 Ct->elements[eid].intordvlm = new long* [ntm];
00269 Ct->elements[eid].nipu = new long* [mnb];
00270 Ct->elements[eid].nipl = new long* [ntm];
00271
00272 for (ii=0;ii<mnb;ii++){
00273 Ct->elements[eid].intordvum[ii] = new long [ntm];
00274 Ct->elements[eid].nipu[ii] = new long [ntm];
00275 for (jj=0;jj<ntm;jj++){
00276 Ct->elements[eid].intordvum[ii][jj]=intordvum[ii][jj];
00277 Ct->elements[eid].nipu[ii][jj]=nipu[ii][jj];
00278 }
00279 }
00280 for (ii=0;ii<ntm;ii++){
00281 Ct->elements[eid].intordvlm[ii] = new long [mnb];
00282 Ct->elements[eid].nipl[ii] = new long [mnb];
00283 for (jj=0;jj<mnb;jj++){
00284 Ct->elements[eid].intordvlm[ii][jj]=intordvlm[ii][jj];
00285 Ct->elements[eid].nipl[ii][jj]=nipl[ii][jj];
00286 }
00287 }
00288 }
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300 void quadrilatc::upper_cond_coup_matrix (long eid,long ri,long ci,matrix &vm)
00301 {
00302 long i,j,ii;
00303 double thick,xi,eta,jac;
00304 ivector nodes(nnetp);
00305 vector x(nnemp),y(nnemp),w(intordvum[ri][ci]),gp(intordvum[ri][ci]),t(nnetp);
00306 matrix gm(tnmcomp,mndofe),d(tnmcomp,1),n(1,nnetp);
00307
00308 Tt->give_elemnodes (eid,nodes);
00309 Tc->give_thickness (eid,nodes,t);
00310
00311 Mt->give_node_coord2d (x,y,eid);
00312 gauss_points (gp.a,w.a,intordvum[ri][ci]);
00313
00314 fillm (0.0,vm);
00315
00316 if (Cp->savemode==0){
00317 ii=Ct->elements[eid].ippu[ri][ci];
00318 }
00319 if (Cp->savemode==1){
00320 ii=Ct->elements[eid].ippu[0][0];
00321 }
00322
00323 for (i=0;i<intordvum[ri][ci];i++){
00324 xi=gp[i];
00325 for (j=0;j<intordvum[ri][ci];j++){
00326 eta=gp[j];
00327
00328 if (Cp->lbb==lin_lin){
00329 Pelq->geom_matrix (gm,x,y,xi,eta,jac);
00330 Lqt->bf_matrix (n,xi,eta);
00331 }
00332 if (Cp->lbb==quad_lin){
00333 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00334 Lqt->bf_matrix (n,xi,eta);
00335 }
00336 if (Cp->lbb==quad_quad){
00337 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00338 Qqt->bf_matrix (n,xi,eta);
00339 }
00340
00341
00342 Cmu->matcond (d,ii,ri,ci);
00343
00344 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00345 thick = Lqt->approx (xi,eta,t);
00346 else
00347 thick = Qqt->approx (xi,eta,t);
00348
00349 jac*=thick*w[i]*w[j];
00350
00351
00352 bdbjac (vm,gm,d,n,jac);
00353
00354 ii++;
00355 }
00356 }
00357
00358 }
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370 void quadrilatc::lower_cond_coup_matrix (long eid,long ri,long ci,matrix &vm)
00371 {
00372 long i,j,ii;
00373 double thick,xi,eta,ww1,ww2,jac;
00374 ivector nodes(nnetp);
00375 vector x(nnemp),y(nnemp),w(intordvlm[ri][ci]),gp(intordvlm[ri][ci]),t(nnetp);
00376 matrix gm(tnmcomp,mndofe),d(1,tnmcomp),n(1,nnetp);
00377
00378 Tt->give_elemnodes (eid,nodes);
00379 Tc->give_thickness (eid,nodes,t);
00380
00381 Mt->give_node_coord2d (x,y,eid);
00382 gauss_points (gp.a,w.a,intordvum[ri][ci]);
00383
00384 fillm (0.0,vm);
00385
00386 if (Cp->savemode==0){
00387 ii=Ct->elements[eid].ippl[ri][ci];
00388 }
00389 if (Cp->savemode==1){
00390 ii=Ct->elements[eid].ippl[0][0];
00391 }
00392
00393 for (i=0;i<intordvlm[ri][ci];i++){
00394 xi=gp[i]; ww1=w[i];
00395 for (j=0;j<intordvlm[ri][ci];j++){
00396 eta=gp[j]; ww2=w[j];
00397
00398 if (Cp->lbb==lin_lin){
00399 Pelq->geom_matrix (gm,x,y,xi,eta,jac);
00400 Lqt->bf_matrix (n,xi,eta);
00401 }
00402 if (Cp->lbb==quad_lin){
00403 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00404 Lqt->bf_matrix (n,xi,eta);
00405 }
00406 if (Cp->lbb==quad_quad){
00407 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00408 Qqt->bf_matrix (n,xi,eta);
00409 }
00410
00411
00412 Cml->matcond (d,ii,ri,ci);
00413
00414 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00415 thick = Lqt->approx (xi,eta,t);
00416 else
00417 thick = Qqt->approx (xi,eta,t);
00418
00419 jac*=thick*ww1*ww2;
00420
00421
00422 bdbjac (vm,n,d,gm,jac);
00423
00424 ii++;
00425 }
00426 }
00427
00428 }
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439 void quadrilatc::upper_cap_coup_matrix (long eid,long ri,long ci,matrix &vm)
00440 {
00441 long i,j,ii;
00442 double thick,xi,eta,ww1,ww2,jac;
00443 ivector nodes(nnetp);
00444 vector x(nnemp),y(nnemp),w(intordvum[ri][ci]),gp(intordvum[ri][ci]),t(nnetp);
00445 matrix gm(tnmcomp,mndofe),d(tnmcomp,1),n(1,nnetp);
00446
00447 Tt->give_elemnodes (eid,nodes);
00448 Tc->give_thickness (eid,nodes,t);
00449
00450 Mt->give_node_coord2d (x,y,eid);
00451 gauss_points (gp.a,w.a,intordvum[ri][ci]);
00452
00453 fillm (0.0,vm);
00454
00455 if (Cp->savemode==0){
00456 ii=Ct->elements[eid].ippu[ri][ci];
00457 }
00458 if (Cp->savemode==1){
00459 ii=Ct->elements[eid].ippu[0][0];
00460 }
00461
00462 for (i=0;i<intordvum[ri][ci];i++){
00463 xi=gp[i]; ww1=w[i];
00464 for (j=0;j<intordvum[ri][ci];j++){
00465 eta=gp[j]; ww2=w[j];
00466
00467 if (Cp->lbb==lin_lin){
00468 Pelq->geom_matrix (gm,x,y,xi,eta,jac);
00469 Lqt->bf_matrix (n,xi,eta);
00470 }
00471 if (Cp->lbb==quad_lin){
00472 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00473 Lqt->bf_matrix (n,xi,eta);
00474 }
00475 if (Cp->lbb==quad_quad){
00476 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00477 Qqt->bf_matrix (n,xi,eta);
00478 }
00479
00480
00481
00482 Cmu->matcap (d,ii,ri,ci);
00483
00484 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00485 thick = Lqt->approx (xi,eta,t);
00486 else
00487 thick = Qqt->approx (xi,eta,t);
00488
00489 jac*=thick*ww1*ww2;
00490
00491
00492 bdbjac (vm,gm,d,n,jac);
00493
00494 ii++;
00495 }
00496 }
00497
00498 }
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510 void quadrilatc::lower_cap_coup_matrix (long eid,long ri,long ci,matrix &vm)
00511 {
00512 long i,j,ii;
00513 double thick,xi,eta,ww1,ww2,jac;
00514 ivector nodes(nnetp);
00515 vector x(nnemp),y(nnemp),w(intordvlm[ri][ci]),gp(intordvlm[ri][ci]),t(nnetp);
00516 matrix gm(tnmcomp,mndofe),d(1,tnmcomp),n(1,nnetp);
00517
00518 Tt->give_elemnodes (eid,nodes);
00519 Tc->give_thickness (eid,nodes,t);
00520
00521 Mt->give_node_coord2d (x,y,eid);
00522 gauss_points (gp.a,w.a,intordvum[ri][ci]);
00523
00524 fillm (0.0,vm);
00525
00526 if (Cp->savemode==0){
00527 ii=Ct->elements[eid].ippl[ri][ci];
00528 }
00529 if (Cp->savemode==1){
00530 ii=Ct->elements[eid].ippl[0][0];
00531 }
00532
00533 for (i=0;i<intordvlm[ri][ci];i++){
00534 xi=gp[i]; ww1=w[i];
00535 for (j=0;j<intordvlm[ri][ci];j++){
00536 eta=gp[j]; ww2=w[j];
00537
00538 if (Cp->lbb==lin_lin){
00539 Pelq->geom_matrix (gm,x,y,xi,eta,jac);
00540 Lqt->bf_matrix (n,xi,eta);
00541 }
00542 if (Cp->lbb==quad_lin){
00543 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00544 Lqt->bf_matrix (n,xi,eta);
00545 }
00546 if (Cp->lbb==quad_quad){
00547 Peqq->geom_matrix (gm,x,y,xi,eta,jac);
00548 Qqt->bf_matrix (n,xi,eta);
00549 }
00550
00551
00552 Cml->matcap (d,ii,ri,ci);
00553
00554 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00555 thick = Lqt->approx (xi,eta,t);
00556 else
00557 thick = Qqt->approx (xi,eta,t);
00558
00559 jac*=thick*ww1*ww2;
00560
00561
00562 bdbjac (vm,n,d,gm,jac);
00563
00564 ii++;
00565 }
00566 }
00567
00568 }
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581 void quadrilatc::res_upper_cond_coup_matrix (long eid,matrix &vm)
00582 {
00583 long i,j,*ccn;
00584 matrix lvm(mndofe,nnetp);
00585
00586 ccn = new long [nnetp];
00587
00588 fillm(0.0,vm);
00589
00590 for (i=0;i<mnb;i++){
00591 for (j=0;j<ntm;j++){
00592
00593
00594 upper_cond_coup_matrix (eid,i,j,lvm);
00595
00596 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00597 Lqt->codnum (ccn,j);
00598 if (Cp->lbb==quad_quad)
00599 Qqt->codnum (ccn,j);
00600
00601 mat_localize (vm,lvm,mordering,ccn);
00602 }
00603 }
00604 delete [] ccn;
00605 }
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615 void quadrilatc::res_lower_cond_coup_matrix (long eid,matrix &vm)
00616 {
00617 long i,j,*rcn;
00618 matrix lvm(nnetp,mndofe);
00619
00620 rcn = new long [nnetp];
00621
00622 fillm(0.0,vm);
00623
00624 for (i=0;i<ntm;i++){
00625 for (j=0;j<mnb;j++){
00626
00627
00628 lower_cond_coup_matrix (eid,i,j,lvm);
00629
00630 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00631 Lqt->codnum (rcn,j);
00632 else
00633 Qqt->codnum (rcn,j);
00634
00635 mat_localize (vm,lvm,rcn,mordering);
00636 }
00637 }
00638 delete [] rcn;
00639 }
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649 void quadrilatc::res_upper_cap_coup_matrix (long eid,matrix &vm)
00650 {
00651 long i,j,*ccn;
00652 matrix lvm(mndofe,nnetp);
00653
00654 ccn = new long [nnetp];
00655
00656 fillm(0.0,vm);
00657
00658 for (i=0;i<mnb;i++){
00659 for (j=0;j<ntm;j++){
00660
00661
00662 upper_cap_coup_matrix (eid,i,j,lvm);
00663
00664 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00665 Lqt->codnum (ccn,j);
00666 else
00667 Qqt->codnum (ccn,j);
00668
00669 mat_localize (vm,lvm,mordering,ccn);
00670 }
00671 }
00672 delete [] ccn;
00673 }
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683 void quadrilatc::res_lower_cap_coup_matrix (long eid,matrix &vm)
00684 {
00685 long i,j,*rcn;
00686 matrix lvm(nnetp,mndofe);
00687
00688 rcn = new long [nnetp];
00689
00690 fillm(0.0,vm);
00691
00692 for (i=0;i<ntm;i++){
00693 for (j=0;j<mnb;j++){
00694
00695
00696 lower_cap_coup_matrix (eid,i,j,lvm);
00697
00698 if (Cp->lbb==lin_lin || Cp->lbb==quad_lin)
00699 Lqt->codnum (rcn,j);
00700 else
00701 Qqt->codnum (rcn,j);
00702
00703 mat_localize (vm,lvm,rcn,mordering);
00704 }
00705 }
00706 delete [] rcn;
00707 }
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733 void quadrilatc::mefel_metr (long eid)
00734 {
00735 long i,j,ippm,ippcu,ippcl;
00736
00737
00738
00739
00740 if (Cp->savemode==1){
00741
00742
00743 ippm = Mt->elements[eid].ipp[0][0];
00744
00745
00746
00747 ippcu = Ct->elements[eid].ippu[0][0];
00748
00749
00750
00751 ippcl = Ct->elements[eid].ippl[0][0];
00752
00753 for (j=0;j<nipu[0][0];j++){
00754 for (i=0;i<tnmcomp;i++){
00755 Cmu->ip[ippcu].strains[i] = Mm->ip[ippm].strain[i];
00756 Cmu->ip[ippcu].stresses[i] = Mm->ip[ippm].stress[i];
00757 }
00758 ippm++; ippcu++;
00759 }
00760
00761
00762
00763 ippm = Mt->elements[eid].ipp[0][0];
00764 for (j=0;j<nipl[0][0];j++){
00765 for (i=0;i<tnmcomp;i++){
00766 Cml->ip[ippcl].strains[i] = Mm->ip[ippm].strain[i];
00767 Cml->ip[ippcl].stresses[i] = Mm->ip[ippm].stress[i];
00768 }
00769 ippm++; ippcl++;
00770 }
00771 }
00772
00773
00774
00775
00776
00777
00778 if (Cp->savemode==0){
00779 fprintf (stderr,"\n\n not implemented at this moment (file %s, line %d).\n",__FILE__,__LINE__);
00780 }
00781
00782 }
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792 void quadrilatc::trfel_metr (long eid)
00793 {
00794 long i,j,ippt,ippcu,ippcl;
00795
00796
00797
00798
00799 if (Cp->savemode==1){
00800
00801 ippt = Tt->elements[eid].ipp[0][0];
00802
00803
00804
00805 ippcu = Ct->elements[eid].ippu[0][0];
00806
00807
00808
00809 ippcl = Ct->elements[eid].ippl[0][0];
00810
00811 for (j=0;j<nipu[0][0];j++){
00812 for (i=0;i<ntm;i++){
00813 Cmu->ip[ippcu].av[i] = Tm->ip[ippt].av[i];
00814
00815 }
00816 ippt++; ippcu++;
00817 }
00818
00819
00820 ippt = Mt->elements[eid].ipp[0][0];
00821 for (j=0;j<nipl[0][0];j++){
00822 for (i=0;i<ntm;i++){
00823 Cml->ip[ippcl].av[i] = Tm->ip[ippt].av[i];
00824
00825 }
00826 ippt++; ippcl++;
00827 }
00828 }
00829
00830
00831
00832
00833
00834
00835 if (Cp->savemode==0){
00836 fprintf (stderr,"\n\n not implemented at this moment (file %s, line %d).\n",__FILE__,__LINE__);
00837 }
00838
00839 }
00840
00841
00842
00843
00844
00845
00846
00847
00848 void quadrilatc::trfel_mefel (long eid)
00849 {
00850 long i,j,k,ipp,into;
00851 double xi,eta,val;
00852 ivector cn(tndofe);
00853 vector r(tndofe),t(nnetp),gp,w;
00854
00855
00856 Tt->give_code_numbers (eid,cn.a);
00857
00858 nodalvalues (0,r.a,cn.a,tndofe);
00859
00860
00861 k=Tp->ntm-1;
00862
00863
00864 for (i=0;i<dofe[k];i++){
00865 t[i]=r[Lqt->ordering[k][i]-1];
00866 }
00867
00868
00869 into = Peqq->intordsm[0][0];
00870
00871 allocv (into,gp);
00872 allocv (into,w);
00873 gauss_points (gp.a,w.a,into);
00874
00875
00876 ipp=Mt->elements[eid].ipp[0][0];
00877
00878 for (i=0;i<into;i++){
00879 xi=gp[i];
00880 for (j=0;j<into;j++){
00881 eta=gp[j];
00882
00883 val = Lqt->approx (xi,eta,t);
00884 Mm->tempr[ipp]=val;
00885 ipp++;
00886 }
00887 }
00888
00889 destrv (gp); destrv (w);
00890
00891 }