00001 #include <math.h>
00002 #include "chen.h"
00003 #include "global.h"
00004 #include "genfile.h"
00005 #include "intpoints.h"
00006 #include "vecttens.h"
00007 #include "alias.h"
00008 #include "stochdriver.h"
00009 #include "matrix.h"
00010
00011 chen::chen (void)
00012 {
00013 fyc=0.0;
00014 fyt=0.0;
00015 fybc=0.0;
00016 fc=0.0;
00017 ft=0.0;
00018 fbc=0.0;
00019 epsuc=0.0;
00020 epsut=0.0;
00021
00022 ay=0.0; au=0.0;
00023 ky=0.0; ku=0.0;
00024
00025 hp=0.0;
00026
00027
00028
00029
00030 state=2;
00031
00032
00033 }
00034
00035 chen::~chen (void)
00036 {
00037
00038 }
00039
00040
00041
00042
00043
00044
00045 void chen::read (FILE *in)
00046 {
00047 fscanf (in,"%lf %lf %lf %lf %lf %lf %lf %lf %lf",&fyc,&fyt,&fybc,&fc,&ft,&fbc,&epsuc,&epsut,&hp);
00048 sra.read (in);
00049 }
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 void chen::matstiff (matrix &d,long ipp,long ido)
00060 {
00061 if (Mp->nlman->stmat==initial_stiff){
00062
00063 Mm->elmatstiff (d,ipp);
00064 }
00065 if (Mp->nlman->stmat==tangent_stiff){
00066
00067
00068
00069 matrix ad(d.m,d.n);
00070 Mm->elmatstiff (ad,ipp);
00071 tangentstiff (ad,d,ipp,ido);
00072 }
00073 }
00074
00075
00076 void chen::tangentstiff (matrix &d,matrix &td,long ipp,long ido)
00077 {
00078 long ncomp=Mm->ip[ipp].ncompstr;
00079 double denom1,denom2,denom,gamma;
00080 vector str,av(d.m),q(1),dfdq(1);
00081 matrix sig(3,3),am(d.m,d.n),dfds(3,3);
00082
00083 gamma=Mm->ip[ipp].eqother[ido+ncomp];
00084 if (gamma<1.0e-10){
00085 copym (d,td);
00086 }
00087 else{
00088 allocv (ncomp,str);
00089
00090
00091 Mm->givestress (0,ipp,str);
00092 vector_tensor (str,sig,Mm->ip[ipp].ssst,stress);
00093
00094 q[0]=Mm->ip[ipp].eqother[ido+ncomp+1];
00095
00096 deryieldfdsigma (sig,q,dfds);
00097 tensor_vector (str,dfds,Mm->ip[ipp].ssst,stress);
00098
00099 if (Mm->ip[ipp].ssst==planestress){
00100 vector auxstr(3);
00101 auxstr[0]=str[0];auxstr[1]=str[1];auxstr[2]=str[2];
00102 destrv (str);
00103 allocv (d.m,str);
00104 str[0]=auxstr[0];str[1]=auxstr[1];str[2]=auxstr[2];
00105 }
00106
00107 mxv (d,str,av);
00108 scprd (av,str,denom1);
00109
00110 scprd (str,str,denom2);
00111
00112 deryieldfdq (sig,q,dfdq);
00113
00114 denom2 = sqrt(denom2)*dfdq[0];
00115
00116 denom=denom1-denom2;
00117
00118 if (fabs(denom)<1.0e-10){
00119 copym (d,td);
00120 }
00121 else{
00122 vxv (str,str,am);
00123 mxm (d,am,td);
00124 mxm (td,d,am);
00125
00126 cmulm (1.0/denom,am);
00127
00128 subm (d,am,td);
00129 }
00130
00131 destrv (str);
00132 }
00133
00134 }
00135
00136 void chen::plasmod (matrix &h)
00137 {
00138 h[0][0]=-1.0*hp;
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 double chen::yieldfunction (matrix &sig,vector &q)
00150 {
00151 double f,invar,j2,zone,kappa;
00152 matrix dev(3,3);
00153
00154 deviator (sig,dev);
00155 invar=first_invar (sig);
00156 j2=second_invar(dev);
00157
00158 zone=sqrt(j2)+invar/sqrt(3.0);
00159
00160 if (state==1){
00161
00162 if(invar<0.0 && zone<0.0){
00163 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00164 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00165 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00166 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00167
00168 if (q[0]>1.0) q[0]=1.0;
00169
00170 f = j2 + ay/3.0*invar - ky + q[0]*((au-ay)*invar/3.0 - (ku-ky));
00171 }
00172
00173 else{
00174 ay = (fyc-fyt)/2.0;
00175 au = (fc-ft)/2.0;
00176 ky = fyc*fyt/6.0;
00177 ku = fc*ft/6.0;
00178
00179 if (q[0]>1.0) q[0]=1.0;
00180
00181 f = j2 - (invar*invar)/6.0 + ay/3.0*invar - ky +q[0]*((au-ay)*invar/3.0 - (ku-ky));
00182 }
00183 }
00184 if (state==2){
00185 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00186 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00187 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00188 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00189
00190 if (q[0]>1.0) q[0]=1.0;
00191
00192 f = j2 + ay/3.0*invar - ky + q[0]*((au-ay)*invar/3.0 - (ku-ky));
00193 }
00194 if (state==3){
00195 ay = (fyc-fyt)/2.0;
00196 au = (fc-ft)/2.0;
00197 ky = fyc*fyt/6.0;
00198 ku = fc*ft/6.0;
00199
00200 if (q[0]>1.0) q[0]=1.0;
00201
00202 f = j2 - (invar*invar)/6.0 + ay/3.0*invar - ky +q[0]*((au-ay)*invar/3.0 - (ku-ky));
00203 }
00204
00205 return f;
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215 void chen::deryieldfdsigma (matrix &sig,vector &q,matrix &dfds)
00216 {
00217 double invar,j2,zone,kappa;
00218 matrix dev(3,3);
00219
00220 deviator (sig,dev);
00221 invar=first_invar (sig);
00222 j2=second_invar(dev);
00223
00224 zone=sqrt(j2)+invar/sqrt(3.0);
00225
00226 if (state==1){
00227
00228 if(invar<0.0 && zone<0.0){
00229 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00230 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00231 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00232 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00233
00234 if (q[0]>1.0) q[0]=1.0;
00235
00236 dfds[0][0]=1.0/3.0*(2.0*sig[0][0]-sig[1][1]-sig[2][2]) + ay/3.0 + q[0]/3.0*(au-ay);
00237 dfds[1][1]=1.0/3.0*(2.0*sig[1][1]-sig[0][0]-sig[2][2]) + ay/3.0 + q[0]/3.0*(au-ay);
00238 dfds[2][2]=1.0/3.0*(2.0*sig[2][2]-sig[0][0]-sig[1][1]) + ay/3.0 + q[0]/3.0*(au-ay);
00239
00240 dfds[0][1]=2*sig[0][1];
00241 dfds[1][0]=2*sig[0][1];
00242 dfds[0][2]=2*sig[0][2];
00243 dfds[2][0]=2*sig[0][2];
00244 dfds[1][2]=2*sig[1][2];
00245 dfds[2][1]=2*sig[1][2];
00246 }
00247
00248 else{
00249 ay = (fyc-fyt)/2.0;
00250 au = (fc-ft)/2.0;
00251 ky = fyc*fyt/6.0;
00252 ku = fc*ft/6.0;
00253
00254 if (q[0]>1.0) q[0]=1.0;
00255
00256 dfds[0][0]=1.0/3.0*(2.0*sig[0][0]-sig[1][1]-sig[2][2]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00257 dfds[1][1]=1.0/3.0*(2.0*sig[1][1]-sig[0][0]-sig[2][2]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00258 dfds[2][2]=1.0/3.0*(2.0*sig[2][2]-sig[0][0]-sig[1][1]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00259
00260 dfds[0][1]=2*sig[0][1];
00261 dfds[1][0]=2*sig[0][1];
00262 dfds[0][2]=2*sig[0][2];
00263 dfds[2][0]=2*sig[0][2];
00264 dfds[1][2]=2*sig[1][2];
00265 dfds[2][1]=2*sig[1][2];
00266 }
00267 }
00268 if (state==2){
00269 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00270 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00271 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00272 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00273
00274 if (q[0]>1.0) q[0]=1.0;
00275
00276 dfds[0][0]=1.0/3.0*(2.0*sig[0][0]-sig[1][1]-sig[2][2]) + ay/3.0 + q[0]/3.0*(au-ay);
00277 dfds[1][1]=1.0/3.0*(2.0*sig[1][1]-sig[0][0]-sig[2][2]) + ay/3.0 + q[0]/3.0*(au-ay);
00278 dfds[2][2]=1.0/3.0*(2.0*sig[2][2]-sig[0][0]-sig[1][1]) + ay/3.0 + q[0]/3.0*(au-ay);
00279
00280 dfds[0][1]=2*sig[0][1];
00281 dfds[1][0]=2*sig[0][1];
00282 dfds[0][2]=2*sig[0][2];
00283 dfds[2][0]=2*sig[0][2];
00284 dfds[1][2]=2*sig[1][2];
00285 dfds[2][1]=2*sig[1][2];
00286 }
00287 if (state==3){
00288 ay = (fyc-fyt)/2.0;
00289 au = (fc-ft)/2.0;
00290 ky = fyc*fyt/6.0;
00291 ku = fc*ft/6.0;
00292
00293 if (q[0]>1.0) q[0]=1.0;
00294
00295 dfds[0][0]=1.0/3.0*(2.0*sig[0][0]-sig[1][1]-sig[2][2]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00296 dfds[1][1]=1.0/3.0*(2.0*sig[1][1]-sig[0][0]-sig[2][2]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00297 dfds[2][2]=1.0/3.0*(2.0*sig[2][2]-sig[0][0]-sig[1][1]) + ay/3.0 - 1.0/3.0*invar + q[0]/3.0*(au-ay);
00298
00299 dfds[0][1]=2*sig[0][1];
00300 dfds[1][0]=2*sig[0][1];
00301 dfds[0][2]=2*sig[0][2];
00302 dfds[2][0]=2*sig[0][2];
00303 dfds[1][2]=2*sig[1][2];
00304 dfds[2][1]=2*sig[1][2];
00305 }
00306 }
00307
00308
00309
00310
00311
00312
00313
00314 void chen::deryieldfdsigmadsigma (matrix &sig,matrix &dfdsds)
00315 {
00316 double invar,j2,zone;
00317 matrix dev(3,3);
00318
00319 deviator (sig,dev);
00320 invar=first_invar (sig);
00321 j2=second_invar(dev);
00322
00323 fillm (0.0,dfdsds);
00324
00325 zone = sqrt(j2)+invar/sqrt(3.0);
00326
00327 if (state==1){
00328
00329 if(invar<0.0 && zone<0.0){
00330 dfdsds[0][0] = 2.0/3.0;
00331 dfdsds[0][1] = -1.0/3.0;
00332 dfdsds[0][2] = -1.0/3.0;
00333
00334 dfdsds[1][0] = -1.0/3.0;
00335 dfdsds[1][1] = 2.0/3.0;
00336 dfdsds[1][2] = -1.0/3.0;
00337
00338 dfdsds[2][0] = -1.0/3.0;
00339 dfdsds[2][1] = -1.0/3.0;
00340 dfdsds[2][2] = 2.0/3.0;
00341
00342 dfdsds[3][3] = 2.0;
00343 dfdsds[4][4] = 2.0;
00344 dfdsds[5][5] = 2.0;
00345 }
00346
00347 else{
00348 dfdsds[0][0] = 1.0/3.0;
00349 dfdsds[0][1] = -2.0/3.0;
00350 dfdsds[0][2] = -2.0/3.0;
00351
00352 dfdsds[1][0] = -2.0/3.0;
00353 dfdsds[1][1] = 1.0/3.0;
00354 dfdsds[1][2] = -2.0/3.0;
00355
00356 dfdsds[2][0] = -2.0/3.0;
00357 dfdsds[2][1] = -2.0/3.0;
00358 dfdsds[2][2] = 1.0/3.0;
00359
00360 dfdsds[3][3] = 2.0;
00361 dfdsds[4][4] = 2.0;
00362 dfdsds[5][5] = 2.0;
00363 }
00364 }
00365 if (state==2){
00366 dfdsds[0][0] = 2.0/3.0;
00367 dfdsds[0][1] = -1.0/3.0;
00368 dfdsds[0][2] = -1.0/3.0;
00369
00370 dfdsds[1][0] = -1.0/3.0;
00371 dfdsds[1][1] = 2.0/3.0;
00372 dfdsds[1][2] = -1.0/3.0;
00373
00374 dfdsds[2][0] = -1.0/3.0;
00375 dfdsds[2][1] = -1.0/3.0;
00376 dfdsds[2][2] = 2.0/3.0;
00377
00378 dfdsds[3][3] = 2.0;
00379 dfdsds[4][4] = 2.0;
00380 dfdsds[5][5] = 2.0;
00381
00382 }
00383 if (state==3){
00384 dfdsds[0][0] = 1.0/3.0;
00385 dfdsds[0][1] = -2.0/3.0;
00386 dfdsds[0][2] = -2.0/3.0;
00387
00388 dfdsds[1][0] = -2.0/3.0;
00389 dfdsds[1][1] = 1.0/3.0;
00390 dfdsds[1][2] = -2.0/3.0;
00391
00392 dfdsds[2][0] = -2.0/3.0;
00393 dfdsds[2][1] = -2.0/3.0;
00394 dfdsds[2][2] = 1.0/3.0;
00395
00396 dfdsds[3][3] = 2.0;
00397 dfdsds[4][4] = 2.0;
00398 dfdsds[5][5] = 2.0;
00399 }
00400 }
00401
00402
00403
00404
00405
00406
00407
00408 void chen::deryieldfdq (matrix &sig,vector &q,vector &dfdq)
00409 {
00410 double invar,j2,zone;
00411 matrix dev(3,3);
00412
00413 deviator (sig,dev);
00414 invar=first_invar (sig);
00415 j2=second_invar(dev);
00416
00417 zone=sqrt(j2)+invar/sqrt(3.0);
00418
00419 if (state==1){
00420
00421 if(invar<0.0 && zone<0.0){
00422 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00423 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00424 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00425 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00426
00427 if (q[0]<1.0)
00428 dfdq[0] = (au-ay)*invar/3.0 - (ku-ky);
00429 else
00430 dfdq[0]=0.0;
00431 }
00432
00433 else{
00434 ay = (fyc-fyt)/2.0;
00435 au = (fc-ft)/2.0;
00436 ky = fyc*fyt/6.0;
00437 ku = fc*ft/6.0;
00438
00439 if (q[0]<1.0)
00440 dfdq[0] = (au-ay)*invar/3.0 - (ku-ky);
00441 else
00442 dfdq[0]=0.0;
00443 }
00444 }
00445 if (state==2){
00446 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00447 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00448 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00449 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00450
00451 if (q[0]<1.0)
00452 dfdq[0] = (au-ay)*invar/3.0 - (ku-ky);
00453 else
00454 dfdq[0]=0.0;
00455 }
00456 if (state==3){
00457 ay = (fyc-fyt)/2.0;
00458 au = (fc-ft)/2.0;
00459 ky = fyc*fyt/6.0;
00460 ku = fc*ft/6.0;
00461
00462 if (q[0]<1.0)
00463 dfdq[0] = (au-ay)*invar/3.0 - (ku-ky);
00464 else
00465 dfdq[0]=0.0;
00466 }
00467 }
00468
00469
00470
00471
00472 void chen::deryieldfdsigmadq (matrix &sig,vector &q,matrix &dfdsdq)
00473 {
00474 double invar,j2,zone;
00475 matrix dev(3,3);
00476
00477 deviator (sig,dev);
00478 invar=first_invar (sig);
00479 j2=second_invar(dev);
00480
00481 fillm (0.0,dfdsdq);
00482
00483 zone=sqrt(j2)+invar/sqrt(3.0);
00484
00485 if (state==1){
00486
00487 if(invar<0.0 && zone<0.0){
00488 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00489 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00490 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00491 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00492
00493 if (q[0]<1.0){
00494 dfdsdq[0][0]=(au-ay)/3.0;
00495 dfdsdq[1][0]=(au-ay)/3.0;
00496 dfdsdq[2][0]=(au-ay)/3.0;
00497 }
00498
00499 dfdsdq[3][0]=0.0;
00500 dfdsdq[4][0]=0.0;
00501 dfdsdq[5][0]=0.0;
00502 }
00503
00504 else{
00505 ay = (fyc-fyt)/2.0;
00506 au = (fc-ft)/2.0;
00507 ky = fyc*fyt/6.0;
00508 ku = fc*ft/6.0;
00509
00510 if (q[0]<1.0){
00511 dfdsdq[0][0]=(au-ay)/3.0;
00512 dfdsdq[1][0]=(au-ay)/3.0;
00513 dfdsdq[2][0]=(au-ay)/3.0;
00514 }
00515
00516 dfdsdq[3][0]=0.0;
00517 dfdsdq[4][0]=0.0;
00518 dfdsdq[5][0]=0.0;
00519 }
00520 }
00521 if (state==2){
00522 ay = (fybc*fybc-fyc*fyc)/(2.0*fybc-fyc);
00523 au = (fbc*fbc-fc*fc)/(2.0*fbc-fc);
00524 ky = fyc*fybc*(2*fyc-fybc)/3.0/(2*fybc-fyc);
00525 ku = fc*fbc*(2*fc-fbc)/3.0/(2*fbc-fc);
00526
00527 if (q[0]<1.0){
00528 dfdsdq[0][0]=(au-ay)/3.0;
00529 dfdsdq[1][0]=(au-ay)/3.0;
00530 dfdsdq[2][0]=(au-ay)/3.0;
00531 }
00532
00533 dfdsdq[3][0]=0.0;
00534 dfdsdq[4][0]=0.0;
00535 dfdsdq[5][0]=0.0;
00536 }
00537 if (state==3){
00538 ay = (fyc-fyt)/2.0;
00539 au = (fc-ft)/2.0;
00540 ky = fyc*fyt/6.0;
00541 ku = fc*ft/6.0;
00542
00543 if (q[0]<1.0){
00544 dfdsdq[0][0]=(au-ay)/3.0;
00545 dfdsdq[1][0]=(au-ay)/3.0;
00546 dfdsdq[2][0]=(au-ay)/3.0;
00547 }
00548
00549 dfdsdq[3][0]=0.0;
00550 dfdsdq[4][0]=0.0;
00551 dfdsdq[5][0]=0.0;
00552 }
00553
00554 }
00555
00556 void chen::deryieldfdqdq (matrix &dfdqdq)
00557 {
00558 dfdqdq[0][0]=0.0;
00559 }
00560
00561 void chen::updateq(long ipp,double dgamma,vector &epsp,matrix &sig,vector &q)
00562 {
00563
00564 }
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576 void chen::nlstresses (long ipp, long im, long ido)
00577 {
00578 long i,ni,n,nhard;
00579 double gamma,err;
00580
00581
00582 n = Mm->ip[ipp].ncompstr;
00583
00584 vector epsn(n),epsp(n),q(1);
00585
00586
00587 for (i=0;i<n;i++){
00588
00589 epsn[i]=Mm->ip[ipp].strain[i];
00590
00591 epsp[i]=Mm->ip[ipp].eqother[ido+i];
00592 }
00593
00594 gamma = Mm->ip[ipp].eqother[ido+n];
00595
00596 q[0]=Mm->ip[ipp].eqother[ido+n+1];
00597
00598
00599 if (sra.give_tsra () == cp){
00600 ni=sra.give_ni ();
00601 err=sra.give_err ();
00602
00603
00604
00605 Mm->newton_stress_return_2 (ipp,im,ido,gamma,epsn,epsp,q,ni,err);
00606
00607
00608 }
00609 else{
00610 fprintf (stderr,"\n\n wrong type of stress return algorithm is required in nlstresses (file %s, line %d).\n",__FILE__,__LINE__);
00611 abort ();
00612 }
00613
00614
00615
00616
00617 for (i=0;i<n;i++){
00618 Mm->ip[ipp].other[ido+i]=epsp[i];
00619 }
00620 Mm->ip[ipp].other[ido+n]=gamma;
00621 Mm->ip[ipp].other[ido+n+1]=q[0];
00622
00623 }
00624
00625 void chen::nonloc_nlstresses (long ipp, long im, long ido)
00626 {
00627 long i,ni, n = Mm->ip[ipp].ncompstr;
00628 double gamma,err;
00629 vector epsn(n),epsp(n),q(1);
00630
00631
00632 for (i=0;i<n;i++){
00633 epsn[i]=Mm->ip[ipp].strain[i];
00634 epsp[i]=Mm->ip[ipp].nonloc[i];
00635 }
00636 gamma = Mm->ip[ipp].eqother[ido+n];
00637 q[0] = Mm->ip[ipp].eqother[ido+n+1];
00638
00639
00640 if (sra.give_tsra () == cp){
00641 ni=sra.give_ni ();
00642 err=sra.give_err ();
00643
00644 Mm->cutting_plane (ipp,im,ido,gamma,epsn,epsp,q,ni,err);
00645 }
00646 else{
00647 fprintf (stderr,"\n\n wrong type of stress return algorithm is required in nlstresses (file %s, line %d).\n",__FILE__,__LINE__);
00648 abort ();
00649 }
00650
00651
00652 for (i=0;i<n;i++){
00653 Mm->ip[ipp].other[ido+i]=epsp[i];
00654 }
00655 Mm->ip[ipp].other[ido+n]=gamma;
00656 Mm->ip[ipp].other[ido+n+1]=q[0];
00657 }
00658
00659
00660
00661
00662
00663
00664 void chen::updateval (long ipp, long im, long ido)
00665 {
00666 long i,n = Mm->givencompeqother(ipp, im);
00667
00668 for (i=0;i<n;i++){
00669 Mm->ip[ipp].eqother[ido+i]=Mm->ip[ipp].other[ido+i];
00670 }
00671 }
00672
00673
00674
00675
00676
00677
00678 void chen::changeparam (atsel &atm,vector &val)
00679 {
00680 long i;
00681
00682 for (i=0;i<atm.num;i++){
00683 switch (atm.atrib[i]){
00684 case 0:{
00685 fyc=val[i];
00686 break;
00687 }
00688 case 1:{
00689 fyt=val[i];
00690 break;
00691 }
00692 case 2:{
00693 fybc=val[i];
00694 break;
00695 }
00696 case 3:{
00697 fc=val[i];
00698 break;
00699 }
00700 case 4:{
00701 ft=val[i];
00702 break;
00703 }
00704 case 5:{
00705 fbc=val[i];
00706 break;
00707 }
00708 case 8:{
00709 hp=val[i];
00710 break;
00711 }
00712 default:{
00713 fprintf (stderr,"\n\n wrong number of atribute in function changeparam (file %s, line %d).\n",__FILE__,__LINE__);
00714 }
00715 }
00716 }
00717 }
00718
00719 double chen::give_consparam (long ipp,long ido)
00720 {
00721 long ncompstr;
00722 double gamma;
00723
00724 ncompstr=Mm->ip[ipp].ncompstr;
00725 gamma = Mm->ip[ipp].eqother[ido+ncompstr];
00726
00727 return gamma;
00728 }
00729
00730 long chen::give_num_interparam ()
00731 {
00732 return 1;
00733 }
00734
00735 void chen::give_interparam (long ipp,long ido,vector &q)
00736 {
00737 long ncompstr=Mm->ip[ipp].ncompstr;
00738
00739 q[0]=Mm->ip[ipp].eqother[ido+ncompstr+1];
00740 }