00001 #include "vecttens.h"
00002 #include "matrix.h"
00003 #include "vector.h"
00004 #include "alias.h"
00005 #include <stdio.h>
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 void vector_tensor (vector &v,matrix &t,strastrestate ssst,strastre ss)
00021 {
00022 fillm (0.0,t);
00023
00024 if (ss==strain){
00025 switch (ssst){
00026 case bar:{
00027 t[0][0]=v[0];
00028 break;
00029 }
00030 case plbeam:{
00031 break;
00032 }
00033 case planecontact:{
00034 t[0][0] = v[0];
00035 t[1][1] = v[1];
00036 break;
00037 }
00038 case planestress:{
00039 t[0][0]=v[0]; t[0][1]=v[2]/2.0; t[0][2]=0.0;
00040 t[1][0]=v[2]/2.0; t[1][1]=v[1]; t[1][2]=0.0;
00041 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[3];
00042 break;
00043 }
00044 case planestrain:{
00045 t[0][0]=v[0]; t[0][1]=v[2]/2.0; t[0][2]=0.0;
00046 t[1][0]=v[2]/2.0; t[1][1]=v[1]; t[1][2]=0.0;
00047 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[3];
00048 break;
00049 }
00050 case axisymm:{
00051 t[0][0]=v[0]; t[0][1]=v[3]/2.0; t[0][2]=0.0;
00052 t[1][0]=v[3]/2.0; t[1][1]=v[1]; t[1][2]=0.0;
00053 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[2];
00054 break;
00055 }
00056 case spacestress:{
00057 t[0][0]=v[0]; t[0][1]=v[5]/2.0; t[0][2]=v[4]/2.0;
00058 t[1][0]=v[5]/2.0; t[1][1]=v[1]; t[1][2]=v[3]/2.0;
00059 t[2][0]=v[4]/2.0; t[2][1]=v[3]/2.0; t[2][2]=v[2];
00060 break;
00061 }
00062 default:
00063 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00064 }
00065 }
00066
00067 if (ss==stress){
00068 switch (ssst){
00069 case bar:{
00070 t[0][0]=v[0];
00071 break;
00072 }
00073 case plbeam:{
00074 break;
00075 }
00076 case planecontact:{
00077 t[0][0] = v[0];
00078 t[1][1] = v[1];
00079 break;
00080 }
00081 case planestress:{
00082 t[0][0]=v[0]; t[0][1]=v[2]; t[0][2]=0.0;
00083 t[1][0]=v[2]; t[1][1]=v[1]; t[1][2]=0.0;
00084 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[3];
00085 break;
00086 }
00087 case planestrain:{
00088 t[0][0]=v[0]; t[0][1]=v[2]; t[0][2]=0.0;
00089 t[1][0]=v[2]; t[1][1]=v[1]; t[1][2]=0.0;
00090 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[3];
00091 break;
00092 }
00093 case axisymm:{
00094 t[0][0]=v[0]; t[0][1]=v[3]; t[0][2]=0.0;
00095 t[1][0]=v[3]; t[1][1]=v[1]; t[1][2]=0.0;
00096 t[2][0]=0.0; t[2][1]=0.0; t[2][2]=v[2];
00097 break;
00098 }
00099 case spacestress:{
00100 t[0][0]=v[0]; t[0][1]=v[5]; t[0][2]=v[4];
00101 t[1][0]=v[5]; t[1][1]=v[1]; t[1][2]=v[3];
00102 t[2][0]=v[4]; t[2][1]=v[3]; t[2][2]=v[2];
00103 break;
00104 }
00105 default:
00106 print_err("unknown stress state is required", __FILE__, __LINE__, __func__);
00107 }
00108 }
00109
00110 }
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 void tensor_vector (vector &v,matrix &t,strastrestate ssst,strastre ss)
00127 {
00128 fillv (0.0,v);
00129
00130 if (ss==strain){
00131 switch (ssst){
00132 case bar:{
00133 v[0]=t[0][0];
00134 break;
00135 }
00136 case plbeam:{
00137 break;
00138 }
00139 case planecontact:{
00140 v[0] = t[0][0];
00141 v[1] = t[1][1];
00142 break;
00143 }
00144 case planestress:{
00145 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[0][1]*2.0; v[3]=t[2][2];
00146 break;
00147 }
00148 case planestrain:{
00149 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[0][1]*2.0; v[3]=t[2][2];
00150 break;
00151 }
00152 case axisymm:{
00153 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2]; v[3]=t[0][1]*2.0;
00154 break;
00155 }
00156 case spacestress:{
00157 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2];
00158 v[3]=t[1][2]*2.0; v[4]=t[0][2]*2.0; v[5]=t[0][1]*2.0;
00159 break;
00160 }
00161 default:
00162 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00163 }
00164 }
00165
00166 if (ss==stress){
00167 switch (ssst){
00168 case bar:{
00169 v[0]=t[0][0];
00170 break;
00171 }
00172 case plbeam:{
00173 break;
00174 }
00175 case planecontact:{
00176 v[0] = t[0][0];
00177 v[1] = t[1][1];
00178 break;
00179 }
00180 case planestress:{
00181 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[0][1]; v[3]=t[2][2];
00182 break;
00183 }
00184 case planestrain:{
00185 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[0][1]; v[3]=t[2][2];
00186 break;
00187 }
00188 case axisymm:{
00189 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2]; v[3]=t[0][1];
00190 break;
00191 }
00192 case spacestress:{
00193 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2];
00194 v[3]=t[1][2]; v[4]=t[0][2]; v[5]=t[0][1];
00195 break;
00196 }
00197 default:
00198 print_err("unknown stress state is required", __FILE__, __LINE__, __func__);
00199 }
00200 }
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 void tensor_vector_full (vector &v, matrix &t, strastre ss)
00219 {
00220 fillv (0.0,v);
00221
00222 if (ss==strain){
00223 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2];
00224 v[3]=t[1][2]*2.0; v[4]=t[0][2]*2.0; v[5]=t[0][1]*2.0;
00225 }
00226
00227 if (ss==stress){
00228 v[0]=t[0][0]; v[1]=t[1][1]; v[2]=t[2][2];
00229 v[3]=t[1][2]; v[4]=t[0][2]; v[5]=t[0][1];
00230 }
00231 }
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 void give_red_vector(const vector &fv, vector &rv, strastrestate ssst)
00248 {
00249 switch (ssst){
00250 case bar:{
00251 rv[0]=fv[0];
00252 break;
00253 }
00254 case plbeam:{
00255 break;
00256 }
00257 case planecontact:{
00258 rv[0] = fv[0];
00259 rv[1] = fv[1];
00260 break;
00261 }
00262 case planestress:{
00263 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[5]; rv[3]=fv[2];
00264 break;
00265 }
00266 case planestrain:{
00267 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[5]; rv[3]=fv[2];
00268 break;
00269 }
00270 case axisymm:{
00271 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[2]; rv[3]=fv[5];
00272 break;
00273 }
00274 case spacestress:{
00275 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[2];
00276 rv[3]=fv[3]; rv[4]=fv[4]; rv[5]=fv[5];
00277 break;
00278 }
00279 default:
00280 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00281 }
00282 }
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299 void give_full_vector(vector &fv, const vector &rv, strastrestate ssst)
00300 {
00301 switch (ssst){
00302 case bar:{
00303 fv[0]=rv[0];
00304 break;
00305 }
00306 case plbeam:{
00307 break;
00308 }
00309 case planecontact:{
00310 fv[0] = rv[0];
00311 fv[1] = rv[1];
00312 break;
00313 }
00314 case planestress:{
00315 fv[0]=rv[0]; fv[1]=rv[1]; fv[5]=rv[2]; fv[2]=rv[3];
00316 break;
00317 }
00318 case planestrain:{
00319 fv[0]=rv[0]; fv[1]=rv[1]; fv[5]=rv[2]; fv[2]=rv[3];
00320 break;
00321 }
00322 case axisymm:{
00323 fv[0]=rv[0]; fv[1]=rv[1]; fv[2]=rv[2]; fv[5]=rv[3];
00324 break;
00325 }
00326 case spacestress:{
00327 fv[0]=rv[0]; fv[1]=rv[1]; fv[2]=rv[2];
00328 fv[3]=rv[3]; fv[4]=rv[4]; fv[5]=rv[5];
00329 break;
00330 }
00331 default:
00332 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00333 }
00334 }
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350 void give_red_vector(double *fv, double *rv, strastrestate ssst)
00351 {
00352 switch (ssst){
00353 case bar:{
00354 rv[0]=fv[0];
00355 break;
00356 }
00357 case plbeam:{
00358 break;
00359 }
00360 case planecontact:{
00361 rv[0] = fv[0];
00362 rv[1] = fv[1];
00363 break;
00364 }
00365 case planestress:{
00366 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[5]; rv[3]=fv[2];
00367 break;
00368 }
00369 case planestrain:{
00370 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[5]; rv[3]=fv[2];
00371 break;
00372 }
00373 case axisymm:{
00374 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[2]; rv[3]=fv[5];
00375 break;
00376 }
00377 case spacestress:{
00378 rv[0]=fv[0]; rv[1]=fv[1]; rv[2]=fv[2];
00379 rv[3]=fv[3]; rv[4]=fv[4]; rv[5]=fv[5];
00380 break;
00381 }
00382 default:
00383 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00384 }
00385 }
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 void give_full_vector(double *fv, double *rv, strastrestate ssst)
00403 {
00404 switch (ssst){
00405 case bar:{
00406 fv[0]=rv[0];
00407 break;
00408 }
00409 case plbeam:{
00410 break;
00411 }
00412 case planecontact:{
00413 fv[0] = rv[0];
00414 fv[1] = rv[1];
00415 break;
00416 }
00417 case planestress:{
00418 fv[0]=rv[0]; fv[1]=rv[1]; fv[5]=rv[2]; fv[2]=rv[3];
00419 break;
00420 }
00421 case planestrain:{
00422 fv[0]=rv[0]; fv[1]=rv[1]; fv[5]=rv[2]; fv[2]=rv[3];
00423 break;
00424 }
00425 case axisymm:{
00426 fv[0]=rv[0]; fv[1]=rv[1]; fv[2]=rv[2]; fv[5]=rv[3];
00427 break;
00428 }
00429 case spacestress:{
00430 fv[0]=rv[0]; fv[1]=rv[1]; fv[2]=rv[2];
00431 fv[3]=rv[3]; fv[4]=rv[4]; fv[5]=rv[5];
00432 break;
00433 }
00434 default:
00435 print_err("unknown strain state is required", __FILE__, __LINE__, __func__);
00436 }
00437 }
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452 void tensor_vector_matrix (strastrestate ssst,matrix &m)
00453 {
00454 fillm (0.0,m);
00455
00456 switch (ssst){
00457 case bar:{
00458 m[0][0]=1.0;
00459 break;
00460 }
00461 case planestress:{
00462 m[0][0]=1.0;
00463 m[1][0]=1.0;
00464 m[2][0]=0.0;
00465 break;
00466 }
00467 case axisymm:{
00468 m[0][0]=1.0;
00469 m[1][0]=1.0;
00470 m[2][0]=1.0;
00471 m[3][0]=0.0;
00472 break;
00473 }
00474 case spacestress:{
00475 m[0][0]=1.0;
00476 m[1][0]=1.0;
00477 m[2][0]=1.0;
00478 m[3][0]=0.0;
00479 m[4][0]=0.0;
00480 m[5][0]=0.0;
00481 break;
00482 }
00483 default:
00484 print_err("unknown stress state is required", __FILE__, __LINE__, __func__);
00485 }
00486 }
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501 void tensor4_matrix (matrix &m, const matrix &t, strastrestate ssst)
00502 {
00503 fillm (0.0, m);
00504
00505 switch (ssst){
00506 case bar:{
00507 m[0][0]=t[0][0];
00508 break;
00509 }
00510 case plbeam:{
00511 break;
00512 }
00513 case planestress:{
00514 m[0][0]=t[0][0]; m[0][1]=t[0][1]; m[0][2]=t[0][5]; m[0][3]=0.0;
00515 m[1][0]=t[1][0]; m[1][1]=t[1][1]; m[1][2]=t[1][5]; m[1][3]=0.0;
00516 m[2][0]=t[5][0]; m[2][1]=t[5][1]; m[2][2]=t[5][5]; m[2][3]=0.0;
00517 m[3][0]=0.0; m[3][1]=0.0; m[3][2]=0.0; m[3][3]=0.0;
00518 break;
00519 }
00520 case planestrain:{
00521 m[0][0]=t[0][0]; m[0][1]=t[0][1]; m[0][2]=t[0][2]; m[0][3]=t[0][5];
00522 m[1][0]=t[1][0]; m[1][1]=t[1][1]; m[1][2]=t[1][2]; m[1][3]=t[1][5];
00523 m[2][0]=t[2][0]; m[2][1]=t[2][1]; m[2][2]=t[2][2]; m[2][3]=t[2][5];
00524 m[3][0]=t[5][0]; m[3][1]=t[5][1]; m[3][2]=t[5][2]; m[3][3]=t[5][5];
00525 break;
00526 }
00527 case axisymm:{
00528 m[0][0]=t[0][0]; m[0][1]=t[0][1]; m[0][2]=t[0][2]; m[0][3]=t[0][5];
00529 m[1][0]=t[1][0]; m[1][1]=t[1][1]; m[1][2]=t[1][2]; m[1][3]=t[1][5];
00530 m[2][0]=t[2][0]; m[2][1]=t[2][1]; m[2][2]=t[2][2]; m[2][3]=t[2][5];
00531 m[3][0]=t[5][0]; m[3][1]=t[5][1]; m[3][2]=t[5][2]; m[3][3]=t[5][5];
00532 break;
00533 }
00534 case spacestress:{
00535 copym(t,m);
00536 break;
00537 }
00538 default:
00539 print_err("unknown strain/stress state is required", __FILE__, __LINE__, __func__);
00540 }
00541 }
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557 void matrix_tensor4 (const matrix &m, matrix &t, strastrestate ssst)
00558 {
00559 fillm (0.0, t);
00560
00561 fillm(0.0, t);
00562 switch (ssst){
00563 case bar:{
00564 t[0][0] = m[0][0];
00565 break;
00566 }
00567 case plbeam:{
00568 break;
00569 }
00570 case planestress:{
00571 t[0][0]=m[0][0]; t[0][1]=m[0][1]; t[0][5]=m[0][2];
00572 t[1][0]=m[1][0]; t[1][1]=m[1][1]; t[1][5]=m[1][2];
00573 t[5][0]=m[2][0]; t[5][1]=m[2][1]; t[5][5]=m[2][2];
00574 break;
00575 }
00576 case planestrain:{
00577 t[0][0]=m[0][0]; t[0][1]=m[0][1]; t[0][2]=m[0][2]; t[0][5]=m[0][3];
00578 t[1][0]=m[1][0]; t[1][1]=m[1][1]; t[1][2]=m[1][2]; t[1][5]=m[1][3];
00579 t[2][0]=m[2][0]; t[2][1]=m[2][1]; t[2][2]=m[2][2]; t[2][5]=m[2][3];
00580 t[5][0]=m[3][0]; t[5][1]=m[3][1]; t[5][2]=m[3][2]; t[5][5]=m[3][3];
00581 break;
00582 }
00583 case axisymm:{
00584 t[0][0]=m[0][0]; t[0][1]=m[0][1]; t[0][2]=m[0][2]; t[0][5]=m[0][3];
00585 t[1][0]=m[1][0]; t[1][1]=m[1][1]; t[1][2]=m[1][2]; t[1][5]=m[1][3];
00586 t[2][0]=m[2][0]; t[2][1]=m[2][1]; t[2][2]=m[2][2]; t[2][5]=m[2][3];
00587 t[5][0]=m[3][0]; t[5][1]=m[3][1]; t[5][2]=m[3][2]; t[5][5]=m[3][3];
00588 break;
00589 }
00590 case spacestress:{
00591 copym(m,t);
00592 break;
00593 }
00594 default:
00595 print_err("unknown strain/stress state is required", __FILE__, __LINE__, __func__);
00596 }
00597 }
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612 void gentensor_matrix (matrix &m, matrix &t, strastrestate ssst)
00613 {
00614 long i,n;
00615 fillm (0.0,m);
00616
00617 n=t.n;
00618
00619 switch (ssst){
00620 case bar:{
00621 for (i=0;i<n;i++){
00622 m[0][i]=t[0][i];
00623 }
00624 break;
00625 }
00626 case plbeam:{
00627 break;
00628 }
00629 case planestress:{
00630 for (i=0;i<n;i++){
00631 m[0][i]=t[0][i];
00632 m[1][i]=t[1][i];
00633 m[2][i]=t[5][i];
00634 }
00635 break;
00636 }
00637 case planestrain:{
00638 for (i=0;i<n;i++){
00639 m[0][i]=t[0][i];
00640 m[1][i]=t[1][i];
00641 m[2][i]=t[2][i];
00642 m[3][i]=t[5][i];
00643 }
00644 break;
00645 }
00646 case axisymm:{
00647 for (i=0;i<n;i++){
00648 m[0][i]=t[0][i];
00649 m[1][i]=t[1][i];
00650 m[2][i]=t[2][i];
00651 m[3][i]=t[5][i];
00652 }
00653 break;
00654 }
00655 case spacestress:{
00656 copym(t,m);
00657 break;
00658 }
00659 default:
00660 print_err("unknown strain/stress state is required", __FILE__, __LINE__, __func__);
00661 }
00662
00663 }
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684 strastrestate guess_ssst(long ncomp)
00685 {
00686 switch (ncomp)
00687 {
00688 case 1:
00689 return bar;
00690 case 2:
00691 return planecontact;
00692 case 3:
00693 case 4:
00694 return planestrain;
00695 case 6:
00696 return spacestress;
00697 default:
00698 return strastrestate(-1);
00699 }
00700 return strastrestate(-1);
00701 }
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718 void lg_engvectortransf (vector &g, const vector &l, const matrix &tmat, strastrestate ssst, strastre stra)
00719 {
00720 matrix t(6,6);
00721 vector lf(6), gf(6);
00722
00723 give_full_vector(lf, l, ssst);
00724
00725 switch (stra)
00726 {
00727 case strain:
00728 {
00729
00730
00731
00732 t(0,0) = tmat(0,0)*tmat(0,0);
00733 t(0,1) = tmat(0,1)*tmat(0,1);
00734 t(0,2) = tmat(0,2)*tmat(0,2);
00735 t(0,3) = tmat(0,1)*tmat(0,2);
00736 t(0,4) = tmat(0,0)*tmat(0,2);
00737 t(0,5) = tmat(0,0)*tmat(0,1);
00738
00739
00740 t(1,0) = tmat(1,0)*tmat(1,0);
00741 t(1,1) = tmat(1,1)*tmat(1,1);
00742 t(1,2) = tmat(1,2)*tmat(1,2);
00743 t(1,3) = tmat(1,1)*tmat(1,2);
00744 t(1,4) = tmat(1,0)*tmat(1,2);
00745 t(1,5) = tmat(1,0)*tmat(1,1);
00746
00747
00748 t(2,0) = tmat(2,0)*tmat(2,0);
00749 t(2,1) = tmat(2,1)*tmat(2,1);
00750 t(2,2) = tmat(2,2)*tmat(2,2);
00751 t(2,3) = tmat(2,1)*tmat(2,2);
00752 t(2,4) = tmat(2,0)*tmat(2,2);
00753 t(2,5) = tmat(2,0)*tmat(2,1);
00754
00755
00756 t(3,0) = 2.0*tmat(2,0)*tmat(1,0);
00757 t(3,1) = 2.0*tmat(2,1)*tmat(1,1);
00758 t(3,2) = 2.0*tmat(2,2)*tmat(1,2);
00759 t(3,3) = tmat(2,1)*tmat(1,2)+tmat(2,2)*tmat(1,1);
00760 t(3,4) = tmat(2,0)*tmat(1,2)+tmat(2,2)*tmat(1,0);
00761 t(3,5) = tmat(2,0)*tmat(1,1)+tmat(2,1)*tmat(1,0);
00762
00763
00764 t(4,0) = 2.0*tmat(2,0)*tmat(0,0);
00765 t(4,1) = 2.0*tmat(2,1)*tmat(0,1);
00766 t(4,2) = 2.0*tmat(2,2)*tmat(0,2);
00767 t(4,3) = tmat(2,1)*tmat(0,2)+tmat(2,2)*tmat(0,1);
00768 t(4,4) = tmat(2,0)*tmat(0,2)+tmat(2,2)*tmat(0,0);
00769 t(4,5) = tmat(2,0)*tmat(0,1)+tmat(2,1)*tmat(0,0);
00770
00771
00772 t(5,0) = 2.0*tmat(1,0)*tmat(0,0);
00773 t(5,1) = 2.0*tmat(1,1)*tmat(0,1);
00774 t(5,2) = 2.0*tmat(1,2)*tmat(0,2);
00775 t(5,3) = tmat(1,1)*tmat(0,2)+tmat(1,2)*tmat(0,1);
00776 t(5,4) = tmat(1,0)*tmat(0,2)+tmat(1,2)*tmat(0,0);
00777 t(5,5) = tmat(1,0)*tmat(0,1)+tmat(1,1)*tmat(0,0);
00778
00779 break;
00780 }
00781 case stress:
00782 {
00783
00784
00785
00786 t(0,0) = tmat(0,0)*tmat(0,0);
00787 t(0,1) = tmat(0,1)*tmat(0,1);
00788 t(0,2) = tmat(0,2)*tmat(0,2);
00789 t(0,3) = 2.0*tmat(0,1)*tmat(0,2);
00790 t(0,4) = 2.0*tmat(0,0)*tmat(0,2);
00791 t(0,5) = 2.0*tmat(0,0)*tmat(0,1);
00792
00793
00794 t(1,0) = tmat(1,0)*tmat(1,0);
00795 t(1,1) = tmat(1,1)*tmat(1,1);
00796 t(1,2) = tmat(1,2)*tmat(1,2);
00797 t(1,3) = 2.0*tmat(1,1)*tmat(1,2);
00798 t(1,4) = 2.0*tmat(1,0)*tmat(1,2);
00799 t(1,5) = 2.0*tmat(1,0)*tmat(1,1);
00800
00801
00802 t(2,0) = tmat(2,0)*tmat(2,0);
00803 t(2,1) = tmat(2,1)*tmat(2,1);
00804 t(2,2) = tmat(2,2)*tmat(2,2);
00805 t(2,3) = 2.0*tmat(2,1)*tmat(2,2);
00806 t(2,4) = 2.0*tmat(2,0)*tmat(2,2);
00807 t(2,5) = 2.0*tmat(2,0)*tmat(2,1);
00808
00809
00810 t(3,0) = tmat(2,0)*tmat(1,0);
00811 t(3,1) = tmat(2,1)*tmat(1,1);
00812 t(3,2) = tmat(2,2)*tmat(1,2);
00813 t(3,3) = tmat(2,1)*tmat(1,2)+tmat(2,2)*tmat(1,1);
00814 t(3,4) = tmat(2,0)*tmat(1,2)+tmat(2,2)*tmat(1,0);
00815 t(3,5) = tmat(2,0)*tmat(1,1)+tmat(2,1)*tmat(1,0);
00816
00817
00818 t(4,0) = tmat(2,0)*tmat(0,0);
00819 t(4,1) = tmat(2,1)*tmat(0,1);
00820 t(4,2) = tmat(2,2)*tmat(0,2);
00821 t(4,3) = tmat(2,1)*tmat(0,2)+tmat(2,2)*tmat(0,1);
00822 t(4,4) = tmat(2,0)*tmat(0,2)+tmat(2,2)*tmat(0,0);
00823 t(4,5) = tmat(2,0)*tmat(0,1)+tmat(2,1)*tmat(0,0);
00824
00825
00826 t(5,0) = tmat(1,0)*tmat(0,0);
00827 t(5,1) = tmat(1,1)*tmat(0,1);
00828 t(5,2) = tmat(1,2)*tmat(0,2);
00829 t(5,3) = tmat(1,1)*tmat(0,2)+tmat(1,2)*tmat(0,1);
00830 t(5,4) = tmat(1,0)*tmat(0,2)+tmat(1,2)*tmat(0,0);
00831 t(5,5) = tmat(1,0)*tmat(0,1)+tmat(1,1)*tmat(0,0);
00832
00833 break;
00834 }
00835 default:
00836 print_err("unknown type of tensor quantity is required", __FILE__, __LINE__, __func__);
00837 }
00838 mxv(t,lf,gf);
00839 give_red_vector(gf, g, ssst);
00840 }
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858 void gl_engvectortransf (const vector &g, vector &l, const matrix &tmat, strastrestate ssst, strastre stra)
00859 {
00860 matrix t(6,6);
00861 vector lf(6), gf(6);
00862
00863 give_full_vector(gf, g, ssst);
00864
00865 switch (stra)
00866 {
00867 case strain:
00868 {
00869
00870
00871
00872 t(0,0) = tmat(0,0)*tmat(0,0);
00873 t(0,1) = tmat(1,0)*tmat(1,0);
00874 t(0,2) = tmat(2,0)*tmat(2,0);
00875 t(0,3) = tmat(1,0)*tmat(2,0);
00876 t(0,4) = tmat(0,0)*tmat(2,0);
00877 t(0,5) = tmat(0,0)*tmat(1,0);
00878
00879
00880 t(1,0) = tmat(0,1)*tmat(0,1);
00881 t(1,1) = tmat(1,1)*tmat(1,1);
00882 t(1,2) = tmat(2,1)*tmat(2,1);
00883 t(1,3) = tmat(1,1)*tmat(2,1);
00884 t(1,4) = tmat(0,1)*tmat(2,1);
00885 t(1,5) = tmat(0,1)*tmat(1,1);
00886
00887
00888 t(2,0) = tmat(0,2)*tmat(0,2);
00889 t(2,1) = tmat(1,2)*tmat(1,2);
00890 t(2,2) = tmat(2,2)*tmat(2,2);
00891 t(2,3) = tmat(1,2)*tmat(2,2);
00892 t(2,4) = tmat(0,2)*tmat(2,2);
00893 t(2,5) = tmat(0,2)*tmat(1,2);
00894
00895
00896 t(3,0) = 2.0*tmat(0,2)*tmat(0,1);
00897 t(3,1) = 2.0*tmat(1,2)*tmat(1,1);
00898 t(3,2) = 2.0*tmat(2,2)*tmat(2,1);
00899 t(3,3) = tmat(1,2)*tmat(2,1)+tmat(2,2)*tmat(1,1);
00900 t(3,4) = tmat(0,2)*tmat(2,1)+tmat(2,2)*tmat(0,1);
00901 t(3,5) = tmat(0,2)*tmat(1,1)+tmat(1,2)*tmat(0,1);
00902
00903
00904 t(4,0) = 2.0*tmat(0,2)*tmat(0,0);
00905 t(4,1) = 2.0*tmat(1,2)*tmat(1,0);
00906 t(4,2) = 2.0*tmat(2,2)*tmat(2,0);
00907 t(4,3) = tmat(1,2)*tmat(2,0)+tmat(2,2)*tmat(1,0);
00908 t(4,4) = tmat(0,2)*tmat(2,0)+tmat(2,2)*tmat(0,0);
00909 t(4,5) = tmat(0,2)*tmat(1,0)+tmat(1,2)*tmat(0,0);
00910
00911
00912 t(5,0) = 2.0*tmat(0,1)*tmat(0,0);
00913 t(5,1) = 2.0*tmat(1,1)*tmat(1,0);
00914 t(5,2) = 2.0*tmat(2,1)*tmat(2,0);
00915 t(5,3) = tmat(1,1)*tmat(2,0)+tmat(2,1)*tmat(1,0);
00916 t(5,4) = tmat(0,1)*tmat(2,0)+tmat(2,1)*tmat(0,0);
00917 t(5,5) = tmat(0,1)*tmat(1,0)+tmat(1,1)*tmat(0,0);
00918
00919 break;
00920 }
00921 case stress:
00922 {
00923
00924
00925
00926 t(0,0) = tmat(0,0)*tmat(0,0);
00927 t(0,1) = tmat(1,0)*tmat(1,0);
00928 t(0,2) = tmat(2,0)*tmat(2,0);
00929 t(0,3) = 2.0*tmat(1,0)*tmat(2,0);
00930 t(0,4) = 2.0*tmat(0,0)*tmat(2,0);
00931 t(0,5) = 2.0*tmat(0,0)*tmat(1,0);
00932
00933
00934 t(1,0) = tmat(0,1)*tmat(0,1);
00935 t(1,1) = tmat(1,1)*tmat(1,1);
00936 t(1,2) = tmat(2,1)*tmat(2,1);
00937 t(1,3) = 2.0*tmat(1,1)*tmat(2,1);
00938 t(1,4) = 2.0*tmat(0,1)*tmat(2,1);
00939 t(1,5) = 2.0*tmat(0,1)*tmat(1,1);
00940
00941
00942 t(2,0) = tmat(0,2)*tmat(0,2);
00943 t(2,1) = tmat(1,2)*tmat(1,2);
00944 t(2,2) = tmat(2,2)*tmat(2,2);
00945 t(2,3) = 2.0*tmat(1,2)*tmat(2,2);
00946 t(2,4) = 2.0*tmat(0,2)*tmat(2,2);
00947 t(2,5) = 2.0*tmat(0,2)*tmat(1,2);
00948
00949
00950 t(3,0) = tmat(0,2)*tmat(0,1);
00951 t(3,1) = tmat(1,2)*tmat(1,1);
00952 t(3,2) = tmat(2,2)*tmat(2,1);
00953 t(3,3) = tmat(1,2)*tmat(2,1)+tmat(2,2)*tmat(1,1);
00954 t(3,4) = tmat(0,2)*tmat(2,1)+tmat(2,2)*tmat(0,1);
00955 t(3,5) = tmat(0,2)*tmat(1,1)+tmat(1,2)*tmat(0,1);
00956
00957
00958 t(4,0) = tmat(0,2)*tmat(0,0);
00959 t(4,1) = tmat(1,2)*tmat(1,0);
00960 t(4,2) = tmat(2,2)*tmat(2,0);
00961 t(4,3) = tmat(1,2)*tmat(2,0)+tmat(2,2)*tmat(1,0);
00962 t(4,4) = tmat(0,2)*tmat(2,0)+tmat(2,2)*tmat(0,0);
00963 t(4,5) = tmat(0,2)*tmat(1,0)+tmat(1,2)*tmat(0,0);
00964
00965
00966 t(5,0) = tmat(0,1)*tmat(0,0);
00967 t(5,1) = tmat(1,1)*tmat(1,0);
00968 t(5,2) = tmat(2,1)*tmat(2,0);
00969 t(5,3) = tmat(1,1)*tmat(2,0)+tmat(2,1)*tmat(1,0);
00970 t(5,4) = tmat(0,1)*tmat(2,0)+tmat(2,1)*tmat(0,0);
00971 t(5,5) = tmat(0,1)*tmat(1,0)+tmat(1,1)*tmat(0,0);
00972
00973 break;
00974 }
00975 default:
00976 print_err("unknown type of tensor quantity is required", __FILE__, __LINE__, __func__);
00977 }
00978 mxv(t,gf,lf);
00979 give_red_vector(lf, l, ssst);
00980 }
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999 void gl_comp_engvectortransf (const vector &g, double &l, long i, const matrix &tmat, strastrestate ssst, strastre stra)
01000 {
01001 matrix t(6,6);
01002 vector gf(6);
01003
01004 give_full_vector(gf, g, ssst);
01005
01006 switch (stra)
01007 {
01008 case strain:
01009 {
01010
01011
01012
01013 t(0,0) = tmat(0,0)*tmat(0,0);
01014 t(0,1) = tmat(1,0)*tmat(1,0);
01015 t(0,2) = tmat(2,0)*tmat(2,0);
01016 t(0,3) = tmat(1,0)*tmat(2,0);
01017 t(0,4) = tmat(0,0)*tmat(2,0);
01018 t(0,5) = tmat(0,0)*tmat(1,0);
01019
01020
01021 t(1,0) = tmat(0,1)*tmat(0,1);
01022 t(1,1) = tmat(1,1)*tmat(1,1);
01023 t(1,2) = tmat(2,1)*tmat(2,1);
01024 t(1,3) = tmat(1,1)*tmat(2,1);
01025 t(1,4) = tmat(0,1)*tmat(2,1);
01026 t(1,5) = tmat(0,1)*tmat(1,1);
01027
01028
01029 t(2,0) = tmat(0,2)*tmat(0,2);
01030 t(2,1) = tmat(1,2)*tmat(1,2);
01031 t(2,2) = tmat(2,2)*tmat(2,2);
01032 t(2,3) = tmat(1,2)*tmat(2,2);
01033 t(2,4) = tmat(0,2)*tmat(2,2);
01034 t(2,5) = tmat(0,2)*tmat(1,2);
01035
01036
01037 t(3,0) = 2.0*tmat(0,2)*tmat(0,1);
01038 t(3,1) = 2.0*tmat(1,2)*tmat(1,1);
01039 t(3,2) = 2.0*tmat(2,2)*tmat(2,1);
01040 t(3,3) = tmat(1,2)*tmat(2,1)+tmat(2,2)*tmat(1,1);
01041 t(3,4) = tmat(0,2)*tmat(2,1)+tmat(2,2)*tmat(0,1);
01042 t(3,5) = tmat(0,2)*tmat(1,1)+tmat(1,2)*tmat(0,1);
01043
01044
01045 t(4,0) = 2.0*tmat(0,2)*tmat(0,0);
01046 t(4,1) = 2.0*tmat(1,2)*tmat(1,0);
01047 t(4,2) = 2.0*tmat(2,2)*tmat(2,0);
01048 t(4,3) = tmat(1,2)*tmat(2,0)+tmat(2,2)*tmat(1,0);
01049 t(4,4) = tmat(0,2)*tmat(2,0)+tmat(2,2)*tmat(0,0);
01050 t(4,5) = tmat(0,2)*tmat(1,0)+tmat(1,2)*tmat(0,0);
01051
01052
01053 t(5,0) = 2.0*tmat(0,1)*tmat(0,0);
01054 t(5,1) = 2.0*tmat(1,1)*tmat(1,0);
01055 t(5,2) = 2.0*tmat(2,1)*tmat(2,0);
01056 t(5,3) = tmat(1,1)*tmat(2,0)+tmat(2,1)*tmat(1,0);
01057 t(5,4) = tmat(0,1)*tmat(2,0)+tmat(2,1)*tmat(0,0);
01058 t(5,5) = tmat(0,1)*tmat(1,0)+tmat(1,1)*tmat(0,0);
01059
01060 break;
01061 }
01062 case stress:
01063 {
01064
01065
01066
01067 t(0,0) = tmat(0,0)*tmat(0,0);
01068 t(0,1) = tmat(1,0)*tmat(1,0);
01069 t(0,2) = tmat(2,0)*tmat(2,0);
01070 t(0,3) = 2.0*tmat(1,0)*tmat(2,0);
01071 t(0,4) = 2.0*tmat(0,0)*tmat(2,0);
01072 t(0,5) = 2.0*tmat(0,0)*tmat(1,0);
01073
01074
01075 t(1,0) = tmat(0,1)*tmat(0,1);
01076 t(1,1) = tmat(1,1)*tmat(1,1);
01077 t(1,2) = tmat(2,1)*tmat(2,1);
01078 t(1,3) = 2.0*tmat(1,1)*tmat(2,1);
01079 t(1,4) = 2.0*tmat(0,1)*tmat(2,1);
01080 t(1,5) = 2.0*tmat(0,1)*tmat(1,1);
01081
01082
01083 t(2,0) = tmat(0,2)*tmat(0,2);
01084 t(2,1) = tmat(1,2)*tmat(1,2);
01085 t(2,2) = tmat(2,2)*tmat(2,2);
01086 t(2,3) = 2.0*tmat(1,2)*tmat(2,2);
01087 t(2,4) = 2.0*tmat(0,2)*tmat(2,2);
01088 t(2,5) = 2.0*tmat(0,2)*tmat(1,2);
01089
01090
01091 t(3,0) = tmat(0,2)*tmat(0,1);
01092 t(3,1) = tmat(1,2)*tmat(1,1);
01093 t(3,2) = tmat(2,2)*tmat(2,1);
01094 t(3,3) = tmat(1,2)*tmat(2,1)+tmat(2,2)*tmat(1,1);
01095 t(3,4) = tmat(0,2)*tmat(2,1)+tmat(2,2)*tmat(0,1);
01096 t(3,5) = tmat(0,2)*tmat(1,1)+tmat(1,2)*tmat(0,1);
01097
01098
01099 t(4,0) = tmat(0,2)*tmat(0,0);
01100 t(4,1) = tmat(1,2)*tmat(1,0);
01101 t(4,2) = tmat(2,2)*tmat(2,0);
01102 t(4,3) = tmat(1,2)*tmat(2,0)+tmat(2,2)*tmat(1,0);
01103 t(4,4) = tmat(0,2)*tmat(2,0)+tmat(2,2)*tmat(0,0);
01104 t(4,5) = tmat(0,2)*tmat(1,0)+tmat(1,2)*tmat(0,0);
01105
01106
01107 t(5,0) = tmat(0,1)*tmat(0,0);
01108 t(5,1) = tmat(1,1)*tmat(1,0);
01109 t(5,2) = tmat(2,1)*tmat(2,0);
01110 t(5,3) = tmat(1,1)*tmat(2,0)+tmat(2,1)*tmat(1,0);
01111 t(5,4) = tmat(0,1)*tmat(2,0)+tmat(2,1)*tmat(0,0);
01112 t(5,5) = tmat(0,1)*tmat(1,0)+tmat(1,1)*tmat(0,0);
01113
01114 break;
01115 }
01116 default:
01117 print_err("unknown type of tensor quantity is required", __FILE__, __LINE__, __func__);
01118 }
01119 mixv(t, gf, l, i);
01120 }
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137 void lg_tens4transf (matrix &g, const matrix &l, const matrix &tmat, strastrestate ssst)
01138 {
01139 matrix t(6,6), aux(6,6);
01140
01141
01142
01143
01144
01145
01146 t(0,0) = tmat(0,0)*tmat(0,0);
01147 t(0,1) = tmat(1,0)*tmat(1,0);
01148 t(0,2) = tmat(2,0)*tmat(2,0);
01149 t(0,3) = tmat(1,0)*tmat(2,0);
01150 t(0,4) = tmat(0,0)*tmat(2,0);
01151 t(0,5) = tmat(0,0)*tmat(1,0);
01152
01153
01154 t(1,0) = tmat(0,1)*tmat(0,1);
01155 t(1,1) = tmat(1,1)*tmat(1,1);
01156 t(1,2) = tmat(2,1)*tmat(2,1);
01157 t(1,3) = tmat(1,1)*tmat(2,1);
01158 t(1,4) = tmat(0,1)*tmat(2,1);
01159 t(1,5) = tmat(0,1)*tmat(1,1);
01160
01161
01162 t(2,0) = tmat(0,2)*tmat(0,2);
01163 t(2,1) = tmat(1,2)*tmat(1,2);
01164 t(2,2) = tmat(2,2)*tmat(2,2);
01165 t(2,3) = tmat(1,2)*tmat(2,2);
01166 t(2,4) = tmat(0,2)*tmat(2,2);
01167 t(2,5) = tmat(0,2)*tmat(1,2);
01168
01169
01170 t(3,0) = 2.0*tmat(0,2)*tmat(0,1);
01171 t(3,1) = 2.0*tmat(1,2)*tmat(1,1);
01172 t(3,2) = 2.0*tmat(2,2)*tmat(2,1);
01173 t(3,3) = tmat(1,2)*tmat(2,1)+tmat(2,2)*tmat(1,1);
01174 t(3,4) = tmat(0,2)*tmat(2,1)+tmat(2,2)*tmat(0,1);
01175 t(3,5) = tmat(0,2)*tmat(1,1)+tmat(1,2)*tmat(0,1);
01176
01177
01178 t(4,0) = 2.0*tmat(0,2)*tmat(0,0);
01179 t(4,1) = 2.0*tmat(1,2)*tmat(1,0);
01180 t(4,2) = 2.0*tmat(2,2)*tmat(2,0);
01181 t(4,3) = tmat(1,2)*tmat(2,0)+tmat(2,2)*tmat(1,0);
01182 t(4,4) = tmat(0,2)*tmat(2,0)+tmat(2,2)*tmat(0,0);
01183 t(4,5) = tmat(0,2)*tmat(1,0)+tmat(1,2)*tmat(0,0);
01184
01185
01186 t(5,0) = 2.0*tmat(0,1)*tmat(0,0);
01187 t(5,1) = 2.0*tmat(1,1)*tmat(1,0);
01188 t(5,2) = 2.0*tmat(2,1)*tmat(2,0);
01189 t(5,3) = tmat(1,1)*tmat(2,0)+tmat(2,1)*tmat(1,0);
01190 t(5,4) = tmat(0,1)*tmat(2,0)+tmat(2,1)*tmat(0,0);
01191 t(5,5) = tmat(0,1)*tmat(1,0)+tmat(1,1)*tmat(0,0);
01192
01193
01194
01195 mxm (l,t,aux);
01196
01197
01198
01199
01200 mtxm (t,aux,g);
01201
01202
01203
01204 }
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266