00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef EPState_CPP
00030 #define EPState_CPP
00031
00032 #include "EPState.h"
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 EPState::EPState(
00051 const stresstensor &stressp,
00052 const straintensor &strainp,
00053 const straintensor &Estrainp,
00054 const straintensor &Pstrainp,
00055 const straintensor &dEstrainp,
00056 const straintensor &dPstrainp,
00057 int NScalarp,
00058 const double * Scalarp,
00059 int NTensorp,
00060 const stresstensor * Tensorp,
00061 const tensor & Eepp,
00062 const stresstensor & Stress_commitp,
00063 const straintensor & Strain_commitp,
00064 const straintensor & ElasticStrain_commitp,
00065 const double * Scalar_commitp,
00066 const stresstensor * Tensor_commitp,
00067 const tensor & Eep_commitp,
00068 const stresstensor & Stress_initp,
00069 const straintensor & Strain_initp,
00070 const double * Scalar_initp,
00071 const stresstensor * Tensor_initp,
00072 const tensor & Eep_initp,
00073 bool Convergedp,
00074
00075
00076
00077
00078
00079
00080
00081
00082 double ep,
00083 double psip,
00084 int flag )
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 : CurrentStress(stressp),
00096 CurrentStrain(strainp), ElasticStrain(Estrainp), PlasticStrain(Pstrainp),
00097 dElasticStrain(dEstrainp), dPlasticStrain(dPstrainp), Eep(Eepp),
00098 Stress_commit(Stress_commitp), Strain_commit(Strain_commitp), ElasticStrain_commit(ElasticStrain_commitp),
00099 Eep_commit(Eep_commitp), Stress_init(Stress_initp), Strain_init(Strain_initp),
00100 Eep_init(Eep_initp), Converged (Convergedp), e(ep), psi(psip), integratorFlag(flag)
00101 {
00102
00103
00104
00105
00106
00107 Delta_lambda = 0.0;
00108
00109 NScalarVar = NScalarp;
00110
00111
00112 if ( ( !Scalarp ) && (NScalarVar != 0) ) {
00113 opserr << "EPState::EPState No initial values for scalar hardening vars, set to aero\n";
00114
00115 }
00116 else {
00117 for (int i = 0; i < NScalarVar; i++) {
00118
00119 ScalarVar[i] = Scalarp[i];
00120 ScalarVar_commit[i] = Scalar_commitp[i];
00121 ScalarVar_init[i] = Scalar_initp[i];
00122 }
00123 }
00124
00125 NTensorVar = NTensorp;
00126
00127
00128
00129
00130
00131
00132 if ( (!Tensorp ) && ( NTensorVar)) {
00133
00134
00135 opserr << "EPState::EPState No initial values for tensorial hardening vars, set to zero\n";
00136
00137 }
00138 else {
00139 for (int i = 0; i < NTensorVar; i++) {
00140
00141 TensorVar[i] = Tensorp[i];
00142 TensorVar_commit[i] = Tensor_commitp[i];
00143 TensorVar_init[i] = Tensor_initp[i];
00144
00145
00146 }
00147 }
00148 }
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 EPState::EPState(
00159 const stresstensor stressp,
00160 const straintensor strainp,
00161 const straintensor Estrainp,
00162 const straintensor Pstrainp,
00163 int NScalarp,
00164 const double *Scalarp,
00165 int NTensorp,
00166 const stresstensor *Tensorp,
00167 double ep,
00168 double psip,
00169 int flag )
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 {
00187
00188
00189
00190
00191
00192
00193 CurrentStress = stressp;
00194 CurrentStrain = strainp;
00195 ElasticStrain = Estrainp;
00196 ElasticStrain_commit = Estrainp;
00197 Delta_lambda = 0.0;
00198
00199 PlasticStrain = Pstrainp;
00200 Stress_commit = stressp;
00201 Strain_commit = strainp;
00202
00203 Stress_init = stressp;
00204 Strain_init = strainp;
00205 integratorFlag = flag;
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219 e = ep;
00220 psi = psip;
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236 Eep = tensor( 4, def_dim_4, 0.0 );
00237
00238
00239
00240
00241 NScalarVar = NScalarp;
00242
00243
00244 if ( ( !Scalarp ) && (NScalarVar != 0) ) {
00245 opserr << "EPState::EPState No initial values for scalar hardening vars, set to zero\n";
00246
00247 }
00248 else {
00249 for (int i = 0; i < NScalarVar; i++) {
00250
00251 ScalarVar[i] = Scalarp[i];
00252 ScalarVar_commit[i] = Scalarp[i];
00253 ScalarVar_init[i] = Scalarp[i];
00254 }
00255 }
00256
00257
00258 NTensorVar = NTensorp;
00259
00260
00261
00262
00263
00264
00265 if ( ( !Tensorp ) && ( NTensorVar != 0 ) ) {
00266
00267
00268 opserr << "EPState::EPState No initial values for tensorial hardening vars, set to zero\n";
00269
00270 }
00271 else {
00272 for (int i = 0; i < NTensorVar; i++) {
00273
00274
00275 TensorVar[i] = Tensorp[i];
00276 TensorVar_commit[i] = Tensorp[i];
00277 TensorVar_init[i] = Tensorp[i];
00278
00279
00280 }
00281 }
00282
00283 Converged = false;
00284
00285 }
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295 EPState::EPState(
00296 int NScalarp,
00297 const double *Scalarp,
00298 int NTensorp,
00299 const stresstensor *Tensorp
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 Delta_lambda = 0.0;
00330
00331 e = 0.85;
00332 psi = 0.05;
00333 integratorFlag = 0;
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349 Eep = tensor( 4, def_dim_4, 0.0 );
00350
00351
00352
00353 NScalarVar = NScalarp;
00354
00355
00356
00357
00358
00359 if ( (!Scalarp) && (NScalarVar != 0) ) {
00360 opserr << "EPState::EPState No initial values for scalar hardening vars, set to zero\n";
00361
00362 }
00363 else {
00364 for (int i = 0; i < NScalarVar; i++) {
00365
00366 ScalarVar[i] = Scalarp[i];
00367 ScalarVar_commit[i] = Scalarp[i];
00368 ScalarVar_init[i] = Scalarp[i];
00369 }
00370 }
00371
00372 NTensorVar = NTensorp;
00373
00374
00375
00376
00377
00378 if ( (!Scalarp) && ( NTensorVar != 0 )) {
00379 opserr << "EPState::EPState No initial values for tensorial hardening vars, set to zero\n";
00380
00381 }
00382 else {
00383 for (int i = 0; i < NTensorVar; i++) {
00384
00385 TensorVar[i] = Tensorp[i];
00386 TensorVar_commit[i] = Tensorp[i];
00387 TensorVar_init[i] = Tensorp[i];
00388
00389
00390 }
00391 }
00392
00393 Converged = false;
00394
00395 }
00396
00397
00398
00399
00400
00401
00402 EPState::EPState( )
00403
00404
00405
00406
00407 : Converged(false), e(0.85), psi(0.05)
00408
00409 {
00410
00411
00412
00413
00414
00415 Eep = tensor( 4, def_dim_4, 0.0 );
00416 integratorFlag = 0;
00417 Delta_lambda = 0.0;
00418
00419 NScalarVar = MaxNScalarVar;
00420 for (int i =0; i < NScalarVar; i++) {
00421 ScalarVar_commit[i] = 0.0;
00422 ScalarVar[i] = 0.0;
00423 ScalarVar_init[i] = 0.0;
00424 }
00425
00426 NTensorVar = MaxNTensorVar;
00427 for (int j =0; j < NTensorVar; j++) {
00428 TensorVar[j] = stresstensor(0.0);
00429 TensorVar_commit[j] = stresstensor(0.0);
00430 TensorVar_init[j] = stresstensor(0.0);
00431 }
00432
00433
00434
00435 }
00436
00437
00438
00439
00440
00441 EPState* EPState::newObj() {
00442
00443
00444
00445
00446
00447 EPState * eps = new EPState(
00448 this->getStress(),
00449 this->getStrain(),
00450 this->getElasticStrain(),
00451 this->getPlasticStrain(),
00452 this->getdElasticStrain(),
00453 this->getdPlasticStrain(),
00454 this->getNScalarVar(),
00455 this->getScalarVar(),
00456 this->getNTensorVar(),
00457 this->getTensorVar(),
00458 this->getEep(),
00459 this->getStress_commit(),
00460 this->getStrain_commit(),
00461 this->getElasticStrain_commit(),
00462 this->getScalarVar_commit(),
00463 this->getTensorVar_commit(),
00464 this->getEep_commit(),
00465 this->getStress_init(),
00466 this->getStrain_init(),
00467 this->getScalarVar_init(),
00468 this->getTensorVar_init(),
00469 this->getEep_init(),
00470 this->getConverged(),
00471
00472
00473
00474
00475
00476
00477
00478
00479 this->gete(),
00480 this->getpsi(),
00481 this->getIntegratorFlag()
00482
00483 );
00484 eps->Delta_lambda = this->Delta_lambda;
00485 return eps;
00486 }
00487
00488
00489
00490
00491
00492 EPState::EPState( const EPState &rhs ) {
00493
00494
00495
00496
00497
00498 CurrentStress = rhs.getStress();
00499 CurrentStrain = rhs.getStrain();
00500 ElasticStrain = rhs.getElasticStrain();
00501 PlasticStrain = rhs.getPlasticStrain();
00502 dElasticStrain = rhs.getdElasticStrain();
00503 dPlasticStrain = rhs.getdPlasticStrain();
00504
00505 Stress_commit = rhs.getStress_commit();
00506 Strain_commit = rhs.getStrain_commit();
00507 ElasticStrain_commit = rhs.getElasticStrain_commit();
00508 Stress_init = rhs.getStress_init();
00509 Strain_init = rhs.getStrain_init();
00510
00511
00512 Eep = rhs.getEep();
00513 Eep_commit = rhs.getEep_commit();
00514 Eep_init = rhs.getEep_init();
00515
00516
00517
00518 NScalarVar = rhs.getNScalarVar();
00519
00520
00521
00522
00523
00524 int i;
00525 for (i = 0; i < NScalarVar; i++) {
00526 ScalarVar[i] = rhs.ScalarVar[ i ];
00527 ScalarVar_commit[i] = rhs.ScalarVar_commit[ i ];
00528 ScalarVar_init[i] = rhs.ScalarVar_init[ i ];
00529 }
00530 NTensorVar = rhs.getNTensorVar();
00531
00532
00533
00534
00535
00536 for (i = 0; i < NTensorVar; i++) {
00537 TensorVar[i] = rhs.TensorVar[ i ];
00538 TensorVar_commit[i] = rhs.TensorVar_commit[ i ];
00539 TensorVar_init[i] = rhs.TensorVar_init[ i ];
00540
00541
00542 }
00543
00544 Converged = rhs.getConverged();
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555 e = rhs.gete();
00556 psi = rhs.getpsi();
00557
00558 Delta_lambda = rhs.Delta_lambda;
00559
00560 integratorFlag = rhs.getIntegratorFlag();
00561
00562
00563 }
00564
00565
00566
00567
00568 EPState::~EPState() {
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585 }
00586
00587
00588
00589
00590
00591 const EPState & EPState::operator=(const EPState &rhs ) {
00592
00593 if ( this != &rhs ) {
00594
00595
00596
00597
00598
00599 CurrentStress = rhs.getStress();
00600
00601 CurrentStrain = rhs.getStrain();
00602
00603 ElasticStrain = rhs.getElasticStrain();
00604 PlasticStrain = rhs.getPlasticStrain();
00605 dElasticStrain = rhs.getdElasticStrain();
00606 dPlasticStrain = rhs.getdPlasticStrain();
00607
00608 Stress_commit = rhs.getStress_commit();
00609 Strain_commit = rhs.getStrain_commit();
00610 ElasticStrain_commit = rhs.getElasticStrain_commit();
00611 Stress_init = rhs.getStress_init();
00612 Strain_init = rhs.getStrain_init();
00613
00614 Eep = rhs.getEep();
00615 Eep_commit = rhs.getEep_commit();
00616 Eep_init = rhs.getEep_init();
00617
00618 NScalarVar = rhs.getNScalarVar();
00619
00620
00621
00622
00623
00624 int i;
00625 for (i = 0; i < NScalarVar; i++) {
00626 ScalarVar[i] = rhs.ScalarVar[i];
00627 ScalarVar_commit[i] = rhs.ScalarVar_commit[i];
00628 ScalarVar_init[i] = rhs.ScalarVar_init[i];
00629 }
00630
00631 NTensorVar = rhs.getNTensorVar();
00632
00633
00634
00635
00636
00637 for (i = 0; i < NTensorVar; i++) {
00638 TensorVar[i] = rhs.TensorVar[i];
00639 TensorVar_commit[i] = rhs.TensorVar_commit[i];
00640 TensorVar_init[i] = rhs.TensorVar_init[i];
00641
00642 }
00643
00644 Converged = rhs.getConverged();
00645 integratorFlag = rhs.getIntegratorFlag();
00646 Delta_lambda = rhs.Delta_lambda;
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657 e = rhs.gete();
00658 psi = rhs.getpsi();
00659
00660
00661 }
00662
00663 return *this;
00664
00665 }
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711 int EPState::getNScalarVar() const {
00712 return NScalarVar;
00713 }
00714
00715
00716 int EPState::getNTensorVar() const {
00717 return NTensorVar;
00718 }
00719
00720
00721 bool EPState::getConverged() const {
00722 return Converged;
00723 }
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736 double EPState::gete() const {
00737 return e;
00738 }
00739
00740
00741 double EPState::getpsi() const {
00742 return psi;
00743 }
00744
00745 int EPState::getIntegratorFlag() const {
00746 return integratorFlag;
00747 }
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765 stresstensor EPState::getStress() const {
00766
00767 return CurrentStress;
00768
00769 }
00770
00771
00772 stresstensor EPState::getStress_commit() const {
00773
00774 return Stress_commit;
00775
00776 }
00777
00778
00779 stresstensor EPState::getStress_init() const {
00780
00781 return Stress_init;
00782
00783 }
00784
00785
00786 stresstensor EPState::getIterativeStress() const {
00787
00788 return IterativeStress;
00789
00790 }
00791
00792
00793 straintensor EPState::getStrain() const {
00794
00795 return CurrentStrain;
00796
00797 }
00798
00799
00800
00801 straintensor EPState::getStrain_commit() const {
00802
00803 return Strain_commit;
00804
00805 }
00806
00807
00808 straintensor EPState::getStrain_init() const {
00809
00810 return Strain_init;
00811
00812 }
00813
00814
00815 straintensor EPState::getElasticStrain() const {
00816
00817 return ElasticStrain;
00818
00819 }
00820
00821
00822 straintensor EPState::getElasticStrain_commit() const {
00823
00824 return ElasticStrain_commit;
00825
00826 }
00827
00828
00829 straintensor EPState::getPlasticStrain() const {
00830
00831 return PlasticStrain;
00832
00833 }
00834
00835 straintensor EPState::getdElasticStrain() const {
00836
00837 return dElasticStrain;
00838
00839 }
00840
00841
00842
00843 straintensor EPState::getdPlasticStrain() const {
00844
00845 return dPlasticStrain;
00846
00847 }
00848
00849
00850
00851 tensor EPState::getEep() const {
00852
00853 return Eep;
00854
00855 }
00856
00857
00858 tensor EPState::getEep_commit() const {
00859
00860 return Eep_commit;
00861
00862 }
00863
00864
00865 tensor EPState::getEep_init() const {
00866
00867 return Eep_init;
00868
00869 }
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909 void EPState::setStress(const stresstensor &newstress ) {
00910 CurrentStress = newstress;
00911 }
00912
00913
00914 void EPState::setIterativeStress(const stresstensor &newstress ) {
00915 IterativeStress = newstress;
00916 }
00917
00918
00919
00920 void EPState::setStrain(const straintensor &newstrain ) {
00921
00922 CurrentStrain = newstrain;
00923
00924 }
00925
00926
00927 void EPState::setStress_commit(const stresstensor &newstress ) {
00928 Stress_commit = newstress;
00929 }
00930
00931
00932 void EPState::setStrain_commit(const straintensor &newstrain ) {
00933
00934 Strain_commit = newstrain;
00935
00936 }
00937
00938 void EPState::setElasticStrain_commit(const straintensor &newstrain ) {
00939
00940 ElasticStrain_commit = newstrain;
00941
00942 }
00943
00944
00945
00946 void EPState::setStress_init(const stresstensor &newstress ) {
00947 Stress_init = newstress;
00948 }
00949
00950
00951 void EPState::setStrain_init(const straintensor &newstrain ) {
00952
00953 Strain_init = newstrain;
00954
00955 }
00956
00957
00958 void EPState::setElasticStrain(const straintensor &newEstrain ) {
00959
00960 ElasticStrain = newEstrain;
00961
00962 }
00963
00964
00965 void EPState::setPlasticStrain(const straintensor &newPstrain ) {
00966
00967 PlasticStrain = newPstrain;
00968
00969 }
00970
00971
00972
00973 void EPState::setdElasticStrain(const straintensor &newdEstrain ) {
00974
00975 dElasticStrain = newdEstrain;
00976
00977 }
00978
00979
00980 void EPState::setdPlasticStrain(const straintensor &newdPstrain ) {
00981
00982 dPlasticStrain = newdPstrain;
00983
00984 }
00985
00986
00987 void EPState::setEep(const tensor &newEep ) {
00988
00989 Eep = newEep;
00990
00991 }
00992
00993
00994 void EPState::setConverged( bool b) {
00995 Converged = b;
00996 }
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024 void EPState::sete( double ed ) {
01025 e = ed;
01026 }
01027
01028
01029 void EPState::setpsi( double psid ) {
01030 psi = psid;
01031 }
01032
01033
01034
01035
01036 double EPState::getScalarVar( int WhichOne) const {
01037
01038 if ( WhichOne <= getNScalarVar() )
01039 return ScalarVar[ WhichOne - 1 ];
01040 else
01041 {
01042 opserr << "EPState::getScalarVar Out of ScalarVar's range: " << getNScalarVar() << endln;
01043 return 0.0;
01044 exit(1);
01045 }
01046
01047 return 0.0;
01048
01049 }
01050
01051
01052
01053
01054
01055 stresstensor EPState::getTensorVar(int WhichOne) const {
01056
01057 stresstensor st;
01058
01059 if ( WhichOne <= getNTensorVar() )
01060 return TensorVar[ WhichOne - 1 ];
01061 else
01062 {
01063 opserr << "EPState::getTensorVar No. %d: Out of Tensortial Var's range " << WhichOne << " out of " << getNTensorVar() << endln;
01064 exit(1);
01065 }
01066
01067 return st;
01068
01069 }
01070
01071
01072
01073
01074 double * EPState::getScalarVar() {
01075
01076 return ScalarVar;
01077
01078 }
01079
01080
01081 void EPState::setNScalarVar(int rval) {
01082
01083 NScalarVar = rval;
01084
01085 }
01086
01087
01088 void EPState::setNTensorVar(int rval) {
01089
01090 NTensorVar = rval;
01091
01092 }
01093
01094
01095
01096 double * EPState::getScalarVar_commit( ) {
01097
01098 return ScalarVar_commit;
01099
01100 }
01101
01102
01103 double EPState::getScalarVar_commit( int i) {
01104
01105 return ScalarVar_commit[i-1];
01106
01107 }
01108
01109
01110 double * EPState::getScalarVar_init() {
01111
01112 return ScalarVar_init;
01113
01114 }
01115
01116
01117 double EPState::getScalarVar_init(int i) {
01118
01119 return ScalarVar_init[i];
01120
01121 }
01122
01123
01124
01125
01126 stresstensor * EPState::getTensorVar() {
01127
01128 return TensorVar;
01129
01130 }
01131
01132
01133 stresstensor * EPState::getTensorVar_commit() {
01134
01135 return TensorVar_commit;
01136
01137 }
01138
01139
01140 stresstensor EPState::getTensorVar_commit(int i) {
01141
01142 return TensorVar_commit[i-1];
01143
01144 }
01145
01146
01147 stresstensor EPState::getTensorVar_init(int i) {
01148
01149 return TensorVar_init[i-1];
01150
01151 }
01152
01153
01154 stresstensor * EPState::getTensorVar_init() {
01155
01156 return TensorVar_init;
01157
01158 }
01159
01160
01161
01162
01163 void EPState::setScalarVar(int WhichOne, double rval) {
01164
01165 if ( WhichOne <= getNScalarVar() )
01166 ScalarVar[ WhichOne - 1 ] = rval;
01167 else
01168 {
01169 opserr << "EPState::setScalarVar Out of ScalarVar's range " << getNScalarVar() << endln;
01170
01171 exit(1);
01172 }
01173 }
01174 void EPState::setScalarVar_commit(int WhichOne, double rval) {
01175
01176 if ( WhichOne <= getNScalarVar() )
01177 ScalarVar_commit[ WhichOne - 1 ] = rval;
01178 else
01179 {
01180 opserr << "EPState::setScalarVar Out of ScalarVar's range " << getNScalarVar() << endln;
01181
01182 exit(1);
01183 }
01184 }
01185
01186 void EPState::setScalarVar_init(int WhichOne, double rval) {
01187
01188 if ( WhichOne <= getNScalarVar() )
01189 ScalarVar_init[ WhichOne - 1 ] = rval;
01190 else
01191 {
01192 opserr << "EPState::setScalarVar Out of ScalarVar's range " << getNScalarVar() << endln;
01193
01194 exit(1);
01195 }
01196 }
01197
01198
01199
01200
01201
01202 void EPState::setTensorVar(int WhichOne, const stresstensor &rval) {
01203
01204 if ( WhichOne <= getNTensorVar() )
01205 TensorVar[ WhichOne - 1 ] = rval;
01206 else
01207 {
01208 opserr << "EPState::setTensorVar Out of Tensor Var's range " << getNTensorVar() << endln;;
01209 exit(1);
01210 }
01211
01212 }
01213
01214 void EPState::setTensorVar_commit(int WhichOne, const stresstensor &rval) {
01215
01216 if ( WhichOne <= getNTensorVar() )
01217 TensorVar_commit[ WhichOne - 1 ] = rval;
01218 else
01219 {
01220 opserr << "EPState::setTensorVar Out of Tensor Var's range " << getNTensorVar()<< endln;
01221 exit(1);
01222 }
01223
01224 }
01225
01226 void EPState::setTensorVar_init(int WhichOne, const stresstensor &rval) {
01227
01228 if ( WhichOne <= getNTensorVar() )
01229 TensorVar_init[ WhichOne - 1 ] = rval;
01230 else
01231 {
01232 opserr << "EPState::setTensorVar Out of Tensor Var's range " << getNTensorVar() << endln;
01233 exit(1);
01234 }
01235
01236 }
01237
01238
01239
01240
01241
01242 void EPState::setScalarVar(double *rval) {
01243
01244 if ( !rval ) {
01245 opserr << "EPState::setScalarVar No scalar vars supplied\n";
01246 ::exit(1);
01247 }
01248 for (int i = 0; i < getNScalarVar(); i++) {
01249
01250 ScalarVar[i] = rval[i];
01251 }
01252
01253 }
01254
01255
01256
01257
01258 void EPState::setTensorVar(const stresstensor *rval) {
01259
01260 if ( !rval ) {
01261 opserr << "EPState::setTensorVar No tensorial vars supplied\n";
01262 ::exit(1);
01263 }
01264 for (int i = 0; i < getNTensorVar(); i++) {
01265 TensorVar[i] = rval[i];
01266 TensorVar[i].null_indices();
01267 }
01268
01269 }
01270
01271
01272 void EPState::print() {
01273 opserr << *this;
01274
01275 }
01276
01277
01278
01279
01280
01281 void EPState::setInit() {
01282
01283 stresstensor Stress0;
01284 straintensor Strain0;
01285
01286 CurrentStress = Stress_init;
01287 CurrentStrain = Strain_init;
01288 ElasticStrain = Strain0;
01289 PlasticStrain = Strain0;
01290 dElasticStrain = Strain0;
01291 dPlasticStrain = Strain0;
01292 Eep = Eep_init;
01293
01294 Stress_commit = Stress_init;
01295 Strain_commit = Strain_init;
01296 Eep_commit = Eep_init;
01297 ElasticStrain_commit = Strain0;
01298
01299 int i;
01300 for (i = 0; i < NScalarVar; i++) {
01301 ScalarVar[i] = ScalarVar_init[i];
01302 ScalarVar_commit[i] = ScalarVar_init[i];
01303 }
01304
01305 for (i = 0; i < NTensorVar; i++) {
01306 TensorVar[i] = TensorVar_init[i];
01307 TensorVar_commit[i] = TensorVar_init[i];
01308 }
01309
01310 Converged = false;
01311 }
01312
01313
01314 int EPState::commitState ()
01315 {
01316
01317
01318
01319
01320
01321 int err = 0;
01322
01323
01324
01325
01326
01327 Stress_commit = CurrentStress;
01328 Strain_commit = CurrentStrain;
01329 Eep_commit = Eep;
01330
01331
01332
01333 ElasticStrain_commit = ElasticStrain;
01334
01335 int i;
01336 for (i = 0; i < NScalarVar; i++) {
01337
01338 ScalarVar_commit[i] = ScalarVar[i];
01339 }
01340
01341 for (i = 0; i < NTensorVar; i++) {
01342
01343 TensorVar_commit[i] = TensorVar[i];
01344 }
01345
01346 return err;
01347
01348 }
01349
01350
01351 int EPState::revertToLastCommit () {
01352 int err = 0;
01353
01354 CurrentStress = Stress_commit;
01355 CurrentStrain = Strain_commit;
01356 Eep = Eep_commit;
01357
01358 ElasticStrain = ElasticStrain_commit;
01359
01360 int i;
01361 for (i = 0; i < NScalarVar; i++) {
01362
01363 ScalarVar[i] = ScalarVar_commit[i];
01364 }
01365
01366 for (i = 0; i < NTensorVar; i++) {
01367
01368 TensorVar[i] = TensorVar_commit[i];
01369 }
01370
01371 return err;
01372
01373 }
01374
01375
01376 int EPState::revertToStart () {
01377
01378 int err = 0;
01379
01380 CurrentStress = Stress_init;
01381 CurrentStrain = Strain_init;
01382 Eep = Eep_init;
01383
01384 Stress_commit = Stress_init;
01385 Strain_commit = Strain_init;
01386 Eep_commit = Eep_init;
01387
01388
01389 int i;
01390 for (i = 0; i < NScalarVar; i++) {
01391 ScalarVar[i] = ScalarVar_init[i];
01392 ScalarVar_commit[i] = ScalarVar_init[i];
01393 }
01394
01395 for (i = 0; i < NTensorVar; i++) {
01396 TensorVar[i] = TensorVar_init[i];
01397 TensorVar_commit[i] = TensorVar_init[i];
01398 }
01399
01400 return err;
01401 }
01402
01403
01404
01405
01406
01407
01408
01409
01410
01411 OPS_Stream & operator<< (OPS_Stream& os, const EPState & EPS)
01412
01413 {
01414
01415 os.precision(4);
01416 os.width(10);
01417
01418
01419
01420
01421
01422
01423
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433
01434
01435
01436
01437
01438
01439
01440
01441
01442
01443
01444
01445
01446 os << " e = " << EPS.gete() << endln;
01447 os << " psi = " << EPS.getpsi() << endln;
01448
01449
01450 if ( EPS.getConverged() )
01451 os << "\tConverged = ok! ";
01452 else
01453 os << "\tConverged = no! " << endln;
01454
01455
01456 os << endln << "\tCurrent Stress:" << EPS.getStress() << endln;
01457 os << "\tIterati Stress:" << EPS.getIterativeStress() << endln;
01458
01459 os << "\tCurrent Strain:" << EPS.getStrain() << endln;
01460 os << "\tElasticStrain :" << EPS.getElasticStrain() << endln;
01461 os << "\tPlasticStrain :" << EPS.getPlasticStrain() << endln;
01462 os << "\tdElasticStrain:" << EPS.getdElasticStrain() << endln;
01463 os << "\tdPlasticStrain:" << EPS.getdPlasticStrain() << endln;
01464 os << "\tEep.rank():" << EPS.getEep().rank() << endln;
01465
01466
01467 int NS = EPS.getNScalarVar();
01468 int NT = EPS.getNTensorVar();
01469
01470 os << endln << "\tNScalarVar = " << NS << endln;
01471
01472 int i;
01473 for (i = 0; i < NS; i++) {
01474 os << "\tNo." << i+1 << " " << EPS.ScalarVar[i] << "; ";
01475 }
01476 os << endln << endln;
01477
01478 os << "\tNTensorVar = " << NT;
01479 for (i = 0; i < NT; i++) {
01480
01481 os << endln << "\tNo." << i+1 << " tensorial var:";
01482
01483 os << EPS.TensorVar[i];
01484 }
01485
01486 os << endln;
01487 return os;
01488 }
01489
01490 #endif
01491