00001 #include "coupmatu.h"
00002 #include "globalc.h"
00003 #include <math.h>
00004 #include <string.h>
00005 #include <stdlib.h>
00006 #include "constrelcu.h"
00007 #include "onemediumc.h"
00008 #include "twomediac.h"
00009 #include "threemediac.h"
00010
00011 coupmatu::coupmatu (void)
00012 {
00013 tnip=0;
00014 ip=NULL;
00015
00016 itrmc=NULL;
00017 sejtkrmc=NULL;
00018 consol_awf1c = NULL;
00019
00020 itrmc=NULL;
00021 concretec=NULL;
00022 baroghelc = NULL;
00023 C60baroghelc = NULL;
00024 C30baroghelc = NULL;
00025 o30bazantc = NULL;
00026 C60bazantc = NULL;
00027
00028 consol_awf2c = NULL;
00029
00030 tenchc = NULL;
00031
00032 }
00033
00034 coupmatu::~coupmatu (void)
00035 {
00036 delete [] ip;
00037
00038 delete [] itrmc;
00039 delete [] sejtkrmc;
00040 delete [] consol_awf1c;
00041
00042 delete [] itrmc;
00043 delete [] concretec;
00044 delete [] baroghelc;
00045 delete [] C60baroghelc;
00046 delete [] C30baroghelc;
00047 delete [] o30bazantc;
00048 delete [] C60bazantc;
00049
00050 delete [] consol_awf2c;
00051
00052 delete [] tenchc;
00053 }
00054
00055 void coupmatu::ipalloc (void)
00056 {
00057 long i,j,ii,jj,ne,ntm,gdim,ippu,mnb,nip,mncomp;
00058 strastrestate mssst;
00059
00060
00061 ntm=Tp->ntm;
00062
00063 gdim = Tp->gdim;
00064
00065 ne=Ct->ne;
00066
00067 for (i=0;i<ne;i++){
00068
00069 mnb=Ct->give_mnb (i);
00070
00071 mncomp=Ct->give_mncomp (i);
00072
00073 for (ii=0;ii<mnb;ii++){
00074
00075 mssst=Ct->give_mssst (i,ii);
00076
00077 for (jj=0;jj<ntm;jj++){
00078 ippu=Ct->elements[i].ippu[ii][jj];
00079 nip=Ct->give_upper_nip (i,ii,jj);
00080
00081 for (j=0;j<nip;j++){
00082 ip[ippu].nmcomp=mncomp;
00083 ip[ippu].mssst=mssst;
00084 ip[ippu].stresses = new double [mncomp];
00085 ip[ippu].strains = new double [mncomp];
00086
00087 if ((mssst == planestrain) || (mssst == planestress))
00088 ip[ippu].nmcomp=4;
00089
00090 ippu++;
00091 }
00092 }
00093 }
00094 }
00095
00096 for (i=0;i<tnip;i++){
00097 ip[i].av = new double [ntm];
00098 ip[i].pv = new double [ntm];
00099 ip[i].grad = new double* [ntm];
00100 ip[i].fluxes = new double* [ntm];
00101
00102 for (j=0;j<ntm;j++){
00103 ip[i].grad[j] = new double [gdim];
00104 ip[i].fluxes[j] = new double [gdim];
00105 }
00106 }
00107
00108 }
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 long coupmatu::intpnum (void)
00122 {
00123 long i,j,k,ne,n,nb;
00124 elemtypec te;
00125 ne=Ct->ne;
00126
00127 n=0;
00128 for (i=0;i<ne;i++){
00129 te = Ct->give_elem_type (i);
00130 nb=Mt->give_nb (i);
00131 Ct->elements[i].ippu = new long* [nb];
00132 for (j=0;j<nb;j++){
00133 Ct->elements[i].ippu[j] = new long [Tp->ntm];
00134 for (k=0;k<Tp->ntm;k++){
00135 Ct->elements[i].ippu[j][k]=n;
00136 n+=Ct->give_upper_nip (i,j,k);
00137 }
00138 }
00139 }
00140 return n;
00141 }
00142
00143
00144
00145
00146 void coupmatu::intpointalloc ()
00147 {
00148 ip = new intpointsc [tnip];
00149 ipalloc ();
00150 }
00151
00152
00153
00154
00155 void coupmatu::intpointinit ()
00156 {
00157 long i,j,k,ii,jj,nb,ntm,nip,ipp;
00158
00159 for (i=0;i<Tt->ne;i++){
00160 ntm=Tp->ntm; k=0;
00161 nb=Mt->give_nb (i);
00162 for (ii=0;ii<nb;ii++){
00163 for (jj=0;jj<ntm;jj++){
00164 nip=Ct->give_upper_nip(i,ii,jj);
00165 ipp=Ct->elements[i].ippu[ii][jj];
00166 for (j=0;j<nip;j++){
00167 ip[ipp].tm = Ct->elements[i].tmu[k];
00168 ip[ipp].idm = Ct->elements[i].idmu[k];
00169 ipp++;
00170 }
00171 k++;
00172 }
00173 }
00174 }
00175 }
00176
00177
00178
00179
00180
00181 void coupmatu::initmaterialmodels (void)
00182 {
00183 long i,j,ipp,nip;
00184
00185 for (i=0;i<Ct->ne;i++){
00186 if (Gtt->leso[i]==1){
00187 ipp=Ct->elements[i].ippu[0][0];
00188 nip=Ct->give_upper_tnip (i);
00189 for (j=0;j<nip;j++){
00190 initvalues (ipp,0,0);
00191 ipp++;
00192 }
00193 }
00194 }
00195 }
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 void coupmatu::initvalues (long ipp,long im,long ido)
00208 {
00209 switch (Cp->tmatt){
00210 case mech_onemedium:{
00211 medc1 mc1;
00212
00213
00214 break;
00215 }
00216 case mech_twomedia:{
00217 medc2 mc2;
00218
00219
00220 break;
00221 }
00222 case mech_threemedia:{
00223 medc3 mc3;
00224
00225
00226 break;
00227 }
00228 default:{
00229 print_err("unknown media type is required",__FILE__,__LINE__,__func__);
00230 }
00231 }
00232 }
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244 void coupmatu::updateipval (void)
00245 {
00246 long i,j,ipp,nip;
00247
00248
00249 for (i=0;i<Ct->ne;i++){
00250 if (Gtu->leso[i]==1){
00251 ipp=Ct->elements[i].ippu[0][0];
00252 nip=Ct->give_upper_tnip (i);
00253 for (j=0;j<nip;j++){
00254 updateipvalmat (ipp,0,0);
00255 ipp++;
00256 }
00257 }
00258 }
00259 }
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273 void coupmatu::updateipvalmat (long ipp,long im,long ido)
00274 {
00275 switch (Cp->tmatt){
00276 case mech_onemedium:{
00277 medc1 mc1;
00278
00279
00280 break;
00281 }
00282 case mech_twomedia:{
00283 medc2 mc2;
00284
00285
00286 break;
00287 }
00288 case mech_threemedia:{
00289 medc3 mc3;
00290
00291
00292 break;
00293 }
00294 default:{
00295 print_err("unknown media type is required",__FILE__,__LINE__,__func__);
00296 }
00297 }
00298 }
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313 void coupmatu::matstiff (matrix &d,long ipp)
00314 {
00315 switch (Cp->tmatt){
00316 case mech_onemedium:{
00317 state_eqcu c;
00318 c.matstiff (d,ip[ipp].mssst,ipp);
00319 break;
00320 }
00321 case mech_twomedia:{
00322 state_eqcu c;
00323 c.matstiff (d,ip[ipp].mssst,ipp);
00324 break;
00325 }
00326 case mech_threemedia:{
00327 state_eqcu c;
00328 c.matstiff (d,ip[ipp].mssst,ipp);
00329 break;
00330 }
00331 default:{
00332 fprintf (stderr,"\n\n unknown material type is required in function matstiff (file %s, line %d).\n",__FILE__,__LINE__);
00333 }
00334 }
00335 }
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349 void coupmatu::matcond (matrix &d,long ipp,long ri,long ci)
00350 {
00351 switch (Cp->tmatt){
00352 case mech_onemedium:{
00353 medc1 mc1;
00354
00355 mc1.matcond_u(d,ri,ci,ipp);
00356 break;
00357 }
00358 case mech_twomedia:{
00359 medc2 mc2;
00360
00361 mc2.matcond_u(d,ri,ci,ipp);
00362 break;
00363 }
00364 case mech_threemedia:{
00365 medc3 mc3;
00366
00367 mc3.matcond_u(d,ri,ci,ipp);
00368 break;
00369 }
00370 default:{
00371 fprintf (stderr,"\n unknown number of transported media is required in function (%s, line %d).\n",__FILE__,__LINE__);
00372 }
00373 }
00374 }
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386 void coupmatu::matcap (matrix &d,long ipp,long ri,long ci)
00387 {
00388 switch (Cp->tmatt){
00389 case mech_onemedium:{
00390 medc1 mc1;
00391
00392 mc1.matcap_u(d,ri,ci,ipp);
00393 break;
00394 }
00395 case mech_twomedia:{
00396 medc2 mc2;
00397
00398 mc2.matcap_u(d,ri,ci,ipp);
00399 break;
00400 }
00401 case mech_threemedia:{
00402 medc3 mc3;
00403
00404 mc3.matcap_u(d,ri,ci,ipp);
00405 break;
00406 }
00407 default:{
00408 fprintf (stderr,"\n unknown number of transported media is required in function (%s, line %d).\n",__FILE__,__LINE__);
00409 }
00410 }
00411 }
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427 void coupmatu::volume_rhs1 (matrix &d,long ipp,long ri,long ci)
00428 {
00429 switch (Cp->tmatt){
00430 case mech_onemedium:{
00431 medc1 mc1;
00432
00433 mc1.rhs_u(d,ri,ci,ipp);
00434 break;
00435 }
00436 case mech_twomedia:{
00437 medc2 mc2;
00438
00439 mc2.rhs_u1(d,ri,ci,ipp);
00440 break;
00441 }
00442 case mech_threemedia:{
00443 medc3 mc3;
00444
00445 mc3.rhs_u1(d,ri,ci,ipp);
00446 break;
00447 }
00448 default:{
00449 fprintf (stderr,"\n unknown number of transported media is required in function (%s, line %d).\n",__FILE__,__LINE__);
00450 }
00451 }
00452 }
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467 void coupmatu::volume_rhs2 (matrix &d,long ipp,long ri,long ci,long ncomp)
00468 {
00469 fillm(0.0,d);
00470
00471 switch (Cp->tmatt){
00472 case mech_onemedium:{
00473 medc1 mc1;
00474
00475 mc1.rhs_u(d,ri,ci,ipp);
00476 break;
00477 }
00478 case mech_twomedia:{
00479 medc2 mc2;
00480
00481 mc2.rhs_u1(d,ri,ci,ipp);
00482 break;
00483 }
00484 case mech_threemedia:{
00485 medc3 mc3;
00486
00487 mc3.rhs_volume(d,ri,ci,ipp);
00488 break;
00489 }
00490 default:{
00491 fprintf (stderr,"\n unknown number of transported media is required in function (%s, line %d).\n",__FILE__,__LINE__);
00492 }
00493 }
00494 }
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507 void coupmatu::computenlstresses (matrix &d,long ipp)
00508 {
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588 }
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601 void coupmatu::storestresses_cmu (long ipp,long fi,vector &fl)
00602 {
00603 long i,j,ncomp;
00604 ncomp=fl.n+fi;
00605
00606 j=0;
00607 for (i=fi;i<ncomp;i++){
00608 ip[ipp].stresses[i]=fl[j];
00609 j++;
00610 }
00611
00612 }
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624 void coupmatu::givestresses_cmu (long ipp,long fi,vector &fl)
00625 {
00626 long i,j,ncomp;
00627 ncomp=fl.n+fi;
00628
00629 j=0;
00630 for (i=fi;i<ncomp;i++){
00631 fl[j] = ip[ipp].stresses[i];
00632 j++;
00633 }
00634 }
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645 void coupmatu::storestrain_cmu (long ipp,long fi,vector &eps)
00646 {
00647 long i,j,ncomp=eps.n;
00648 j=0;
00649 for (i=fi;i<fi+ncomp;i++){
00650 ip[ipp].strains[i]=eps[j];
00651 j++;
00652 }
00653 }
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663 void coupmatu::givestrain_cmu (long ipp,long fi,vector &eps)
00664 {
00665 long i,j,ncomp=eps.n;
00666 j=0;
00667 for (i=fi;i<fi+ncomp;i++){
00668 eps[j]=ip[ipp].strains[i];
00669 j++;
00670 }
00671 }
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683 void coupmatu::storegrad_cmu (long lcid,long ipp,vector &gr)
00684 {
00685 long i,j,ncomp;
00686 ncomp=gr.n;
00687
00688 j=0;
00689 for (i=0;i<ncomp;i++){
00690 ip[ipp].grad[lcid][i]=gr[j];
00691 j++;
00692 }
00693
00694 }
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706 void coupmatu::givegrad_cmu (long lcid,long ipp,vector &gr)
00707 {
00708 long i,ncomp;
00709 ncomp=gr.n;
00710
00711 for (i=0;i<ncomp;i++){
00712 gr[i] = ip[ipp].grad[lcid][i];
00713 }
00714 }
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725 void coupmatu::storeflux_cmu (long lcid,long ipp,vector &fl)
00726 {
00727 long i,ncomp;
00728 ncomp=fl.n;
00729
00730 for (i=0;i<ncomp;i++){
00731 ip[ipp].fluxes[lcid][i]=fl[i];
00732 }
00733
00734 }
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745 void coupmatu::givefluxes_cmu (long lcid,long ipp,vector &fl)
00746 {
00747 long i,ncomp;
00748 ncomp=fl.n;
00749
00750 for (i=0;i<ncomp;i++){
00751 fl[i] = ip[ipp].fluxes[lcid][i];
00752 }
00753 }
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763 void coupmatu::read (XFILE *in)
00764 {
00765
00766 tnip = intpnum ();
00767 if (Mesprc==1){
00768 fprintf (stdout,"\n number of integration points in coupmatu %ld",tnip);
00769 }
00770
00771
00772
00773 intpointalloc ();
00774 intpointinit ();
00775
00776
00777 readmatchar (in);
00778 }
00779
00780 void coupmatu::readmatchar (XFILE *in)
00781 {
00782 long i,j,k;
00783 long numtype;
00784 mattypec mattype;
00785
00786 xfscanf (in,"%ld",&nmt);
00787 if (nmt<1){
00788 fprintf (stderr,"\n\n wrong number of material types in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00789 }
00790 if (Mesprc==1) fprintf (stdout,"\n number of different types of materials %ld",nmt);
00791
00792 for (i=0;i<nmt;i++){
00793 xfscanf (in,"%d %ld",(int*)&mattype,&numtype);
00794 if (numtype<1){
00795 fprintf (stderr,"\n\n wrong number of material characteristics in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00796 }
00797
00798 switch (mattype){
00799
00800 case isotransmatc:{
00801 if (Mesprc==1) fprintf (stdout,"\n number of material models for concrete at high temperature %ld",numtype);
00802 itrmc = new isotrmatc [numtype];
00803 for (j=0;j<numtype;j++){
00804 k=numtype+1;
00805 xfscanf (in,"%ld",&k);
00806 if (k>numtype || k<1){
00807 fprintf (stderr,"\n\n wrong number of material models for concrete at high temperature");
00808 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00809 }
00810 itrmc[k-1].read (in);
00811 }
00812 break;
00813 }
00814
00815 case sejtkrc:{
00816 if (Mesprc==1) fprintf (stdout,"\n number of material models for one-phase flow in deforming medium %ld",numtype);
00817 sejtkrmc = new sejtkrmatc [numtype];
00818 for (j=0;j<numtype;j++){
00819 k=numtype+1;
00820 xfscanf (in,"%ld",&k);
00821 if (k>numtype || k<1){
00822 fprintf (stderr,"\n\n wrong number of material models for one-phase flow in deforming medium is required");
00823 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00824 }
00825 sejtkrmc[k-1].read (in);
00826 }
00827 break;
00828 }
00829
00830 case consolawf1c:{
00831 if (Mesprc==1) fprintf (stdout,"\n number of material models for one-phase flow in deforming medium %ld",numtype);
00832 consol_awf1c = new con_awf1matc [numtype];
00833 for (j=0;j<numtype;j++){
00834 k=numtype+1;
00835 xfscanf (in,"%ld",&k);
00836 if (k>numtype || k<1){
00837 fprintf (stderr,"\n\n wrong number of material models for one-phase flow in deforming medium is required");
00838 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00839 }
00840 consol_awf1c[k-1].read (in);
00841 }
00842 break;
00843 }
00844
00845 case concreteBc:{
00846 if (Mesprc==1) fprintf (stdout,"\n number of material models for concrete at high temperature %ld",numtype);
00847 concretec = new concreteBmatc [numtype];
00848 for (j=0;j<numtype;j++){
00849 k=numtype+1;
00850 xfscanf (in,"%ld",&k);
00851 if (k>numtype || k<1){
00852 fprintf (stderr,"\n\n wrong number of material models for concrete at high temperature");
00853 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00854 }
00855 concretec[k-1].read (in);
00856 }
00857 break;
00858 }
00859
00860 case baroghelBc:{
00861 if (Mesprc==1) fprintf (stdout,"\n number of baroghel material models for concrete %ld",numtype);
00862 baroghelc = new baroghelmatc [numtype];
00863 for (j=0;j<numtype;j++){
00864 k=numtype+1;
00865 xfscanf (in,"%ld",&k);
00866 if (k>numtype || k<1){
00867 fprintf (stderr,"\n\n wrong number of baroghel material models for concrete");
00868 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00869 }
00870 baroghelc[k-1].read (in);
00871 }
00872 break;
00873 }
00874
00875
00876 case C60baroghelBc:{
00877 if (Mesprc==1) fprintf (stdout,"\n number of baroghel material models for concrete %ld",numtype);
00878 C60baroghelc = new C60barmatc [numtype];
00879 for (j=0;j<numtype;j++){
00880 k=numtype+1;
00881 xfscanf (in,"%ld",&k);
00882 if (k>numtype || k<1){
00883 fprintf (stderr,"\n\n wrong number of baroghel material models for concrete");
00884 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00885 }
00886 C60baroghelc[k-1].read (in);
00887 }
00888 break;
00889 }
00890
00891 case C30baroghelBc:{
00892 if (Mesprc==1) fprintf (stdout,"\n number of baroghel material models for concrete %ld",numtype);
00893 C30baroghelc = new C30barmatc [numtype];
00894 for (j=0;j<numtype;j++){
00895 k=numtype+1;
00896 xfscanf (in,"%ld",&k);
00897 if (k>numtype || k<1){
00898 fprintf (stderr,"\n\n wrong number of baroghel material models for concrete");
00899 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00900 }
00901 C30baroghelc[k-1].read (in);
00902 }
00903 break;
00904 }
00905
00906
00907 case C60bazantBc:{
00908 if (Mesprc==1) fprintf (stdout,"\n number of baroghel material models for concrete %ld",numtype);
00909 C60bazantc = new C60bazmatc [numtype];
00910 for (j=0;j<numtype;j++){
00911 k=numtype+1;
00912 xfscanf (in,"%ld",&k);
00913 if (k>numtype || k<1){
00914 fprintf (stderr,"\n\n wrong number of baroghel material models for concrete");
00915 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00916 }
00917 C60bazantc[k-1].read (in);
00918 }
00919 break;
00920 }
00921
00922
00923 case o30bazantBc:{
00924 if (Mesprc==1) fprintf (stdout,"\n number of baroghel material models for concrete %ld",numtype);
00925 o30bazantc = new o30bazmatc [numtype];
00926 for (j=0;j<numtype;j++){
00927 k=numtype+1;
00928 xfscanf (in,"%ld",&k);
00929 if (k>numtype || k<1){
00930 fprintf (stderr,"\n\n wrong number of baroghel material models for concrete");
00931 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00932 }
00933 o30bazantc[k-1].read (in);
00934 }
00935 break;
00936 }
00937
00938 case glasgowc:{
00939 if (Mesprc==1) fprintf (stdout,"\n number of Glasgow material models %ld",numtype);
00940 tenchc = new glasgowmatc [numtype];
00941 for (j=0;j<numtype;j++){
00942 k=numtype+1;
00943 xfscanf (in,"%ld",&k);
00944 if (k>numtype || k<1){
00945 fprintf (stderr,"\n\n wrong number of Glasgow material models for concrete");
00946 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00947 }
00948 tenchc[k-1].read (in);
00949 }
00950 break;
00951 }
00952
00953
00954 case consolawf2c:{
00955 if (Mesprc==1) fprintf (stdout,"\n number of material models for two-phase flow in deforming medium %ld",numtype);
00956 consol_awf2c = new con_awf2matc [numtype];
00957 for (j=0;j<numtype;j++){
00958 k=numtype+1;
00959 xfscanf (in,"%ld",&k);
00960 if (k>numtype || k<1){
00961 print_err("wrong number of material models for two-phase flow in deforming medium is required",__FILE__,__LINE__,__func__);
00962 }
00963 consol_awf2c[k-1].read (in);
00964 }
00965 break;
00966 }
00967
00968 case glascoup:{
00969 if (Mesprc==1) fprintf (stdout,"\n number of Glasgow material models %ld",numtype);
00970 gcm = new glasgowcoup [numtype];
00971 for (j=0;j<numtype;j++){
00972 k=numtype+1;
00973 xfscanf (in,"%ld",&k);
00974 if (k>numtype || k<1){
00975 fprintf (stderr,"\n\n wrong number of Glasgow material models for concrete");
00976 fprintf (stderr,"\n in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00977 }
00978 gcm[k-1].read (in);
00979 }
00980 break;
00981 }
00982 default:{
00983 fprintf (stderr,"\n\n unknown material type is required in function coupmatu::readmatchar (%s, line %d).\n",__FILE__,__LINE__);
00984 }
00985 }
00986
00987 }
00988 }