source:
issm/oecreview/Archive/21337-21723/ISSM-21699-21700.diff@
21726
Last change on this file since 21726 was 21726, checked in by , 8 years ago | |
---|---|
File size: 15.4 KB |
-
../trunk-jpl/src/c/classes/Materials/Matestar.cpp
159 159 } 160 160 /*}}}*/ 161 161 IssmDouble Matestar::GetB(){/*{{{*/ 162 162 163 /*Output*/ 163 164 IssmDouble B; 164 165 … … 167 168 } 168 169 /*}}}*/ 169 170 IssmDouble Matestar::GetBbar(){/*{{{*/ 171 170 172 /*Output*/ 171 173 IssmDouble Bbar; 172 174 … … 192 194 return Ec; 193 195 } 194 196 /*}}}*/ 197 IssmDouble Matestar::GetEcbar(){/*{{{*/ 198 199 /*Output*/ 200 IssmDouble Ecbar; 201 202 element->inputs->GetInputAverage(&Ecbar,MaterialsRheologyEcbarEnum); 203 return Ecbar; 204 } 205 /*}}}*/ 195 206 IssmDouble Matestar::GetEs(){/*{{{*/ 196 207 197 208 /*Output*/ … … 201 212 return Es; 202 213 } 203 214 /*}}}*/ 215 IssmDouble Matestar::GetEsbar(){/*{{{*/ 216 217 /*Output*/ 218 IssmDouble Esbar; 219 220 element->inputs->GetInputAverage(&Esbar,MaterialsRheologyEsbarEnum); 221 return Esbar; 222 } 223 /*}}}*/ 204 224 IssmDouble Matestar::GetN(){/*{{{*/ 205 225 206 226 /*Output*/ … … 210 230 /*}}}*/ 211 231 void Matestar::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/ 212 232 _error_("not implemented yet"); 213 /*From a string tensor and a material object, return viscosity, using Glen's flow law.214 (1-D) B215 viscosity= -------------------------216 2 eps_eff ^[(n-1)/n]217 218 where viscosity is the viscotiy, B the flow law parameter , eps_eff is the effective strain rate219 and n the flow law exponent.220 221 If eps_eff = 0 , it means this is the first time SystemMatrices is being run, and we222 return 10^14, initial viscosity.223 */224 225 /*output: */226 IssmDouble viscosity;227 228 /*Intermediary: */229 IssmDouble B,D=0.,n;230 231 /*Get B and n*/232 B=GetB(); _assert_(B>0.);233 n=GetN(); _assert_(n>0.);234 235 if (n==1.){236 /*Linear Viscous behavior (Newtonian fluid) viscosity=B/2: */237 viscosity=(1.-D)*B/2.;238 }239 else{240 241 /*if no strain rate, return maximum viscosity*/242 if(eps_eff==0.){243 viscosity = 1.e+14/2.;244 //viscosity = B;245 //viscosity=2.5*pow(10.,17);246 }247 248 else{249 viscosity=(1.-D)*B/(2.*pow(eps_eff,(n-1.)/n));250 }251 }252 253 /*Checks in debugging mode*/254 if(viscosity<=0) _error_("Negative viscosity");255 256 /*Return: */257 *pviscosity=viscosity;258 233 } 259 234 /*}}}*/ 260 235 void Matestar::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/ … … 273 248 _error_("not implemented yet"); 274 249 } 275 250 /*}}}*/ 276 IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz ){/*{{{*/251 IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/ 277 252 253 /*output: */ 254 IssmDouble viscosity; 255 278 256 /*Intermediaries*/ 279 IssmDouble viscosity;280 257 IssmDouble epseff,epsprime_norm; 281 258 IssmDouble lambdas; 282 259 IssmDouble vmag,dvmag[3]; 283 IssmDouble B,Ec,Es,E ;260 IssmDouble B,Ec,Es,E,n; 284 261 285 262 /*Calculate velocity magnitude and its derivative*/ 286 263 vmag = sqrt(vx*vx+vy*vy+vz*vz); … … 299 276 lambdas=EstarLambdaS(epseff,epsprime_norm); 300 277 301 278 /*Get B and enhancement*/ 302 B=GetB(); _assert_(B>0.); 303 Ec=GetEc(); _assert_(Ec>=0.); 304 Es=GetEs(); _assert_(Es>=0.); 279 n=GetN(); _assert_(n>0.); 280 if (isdepthaveraged==0.){ 281 B=GetB(); _assert_(B>0.); 282 Ec=GetEc(); _assert_(Ec>=0.); 283 Es=GetEs(); _assert_(Es>=0.); 284 } 285 else{ 286 B=GetBbar(); _assert_(B>0.); 287 Ec=GetEcbar(); _assert_(Ec>=0.); 288 Es=GetEsbar(); _assert_(Es>=0.); 289 } 305 290 306 291 /*Get total enhancement factor E(lambdas)*/ 307 292 E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.); … … 314 299 //viscosity=2.5*pow(10.,17); 315 300 } 316 301 else{ 317 viscosity = B/(2.*pow(E *epseff*epseff,1./3.));302 viscosity = B/(2.*pow(E,1./n)*pow(epseff,2./n)); 318 303 } 319 304 320 305 /*Assign output pointer*/ 321 306 return viscosity; 322 307 } 323 308 /*}}}*/ 324 void Matestar::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff){/*{{{*/ 325 /*output: */ 309 IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/ 310 311 /*Intermediaries*/ 326 312 IssmDouble dmudB; 313 IssmDouble epseff,epsprime_norm; 314 IssmDouble lambdas; 315 IssmDouble vmag,dvmag[3]; 316 IssmDouble Ec,Es,E; 327 317 328 /*Intermediary: */ 329 IssmDouble E=1.,n; 318 /*Calculate velocity magnitude and its derivative*/ 319 vmag = sqrt(vx*vx+vy*vy+vz*vz); 320 if(vmag<1e-12){ 321 dvmag[0]=0; 322 dvmag[1]=0; 323 dvmag[2]=0; 324 } 325 else{ 326 dvmag[0]=1./(2*sqrt(vmag))*(2*vx*dvx[0]+2*vy*dvy[0]+2*vz*dvz[0]); 327 dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]); 328 dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]); 329 } 330 330 331 n=GetN(); _assert_(n>0.); 332 if(n==1.){ 333 /*Linear Viscous behavior (Newtonian fluid) dmudB=B/2E: */ 334 dmudB=1./(2.*E); 331 EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]); 332 lambdas=EstarLambdaS(epseff,epsprime_norm); 333 334 /*Get enhancement*/ 335 if (isdepthaveraged==0.){ 336 Ec=GetEc(); _assert_(Ec>=0.); 337 Es=GetEs(); _assert_(Es>=0.); 335 338 } 336 339 else{ 337 if(eps_eff==0.) dmudB = 0.;338 else dmudB = 1./(2.*pow(E*eps_eff*eps_eff,1./3.));340 Ec=GetEcbar(); _assert_(Ec>=0.); 341 Es=GetEsbar(); _assert_(Es>=0.); 339 342 } 340 343 341 /*Return: */ 342 *pdmudB=dmudB; 344 /*Get total enhancement factor E(lambdas)*/ 345 E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.); 346 347 /*Compute dmudB*/ 348 if(epseff==0.) dmudB = 0.; 349 else dmudB = 1./(2.*pow(E,1./3.)*pow(epseff,2./3.)); 350 351 /*Assign output*/ 352 return dmudB; 353 343 354 } 344 355 /*}}}*/ 356 void Matestar::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff){/*{{{*/ 357 _error_("not implemented yet"); 358 } 359 /*}}}*/ 345 360 void Matestar::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff){/*{{{*/ 346 361 _error_("not implemented yet"); 347 362 } … … 392 407 393 408 } 394 409 /*}}}*/ 410 void Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/ 411 412 /*Intermediaries*/ 413 IssmDouble vx,vy,vz; 414 IssmDouble dvx[3],dvy[3],dvz[3]; 415 bool isdepthaveraged=0.; 416 417 /*Get velocity derivatives in all directions*/ 418 _assert_(dim>1); 419 _assert_(vx_input); 420 vx_input->GetInputValue(&vx,gauss); 421 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 422 _assert_(vy_input); 423 vy_input->GetInputValue(&vy,gauss); 424 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 425 if(dim==3){ 426 _assert_(vz_input); 427 vz_input->GetInputValue(&vz,gauss); 428 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss); 429 } 430 else{ 431 vz = 0.; 432 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.; 433 } 434 435 /*Compute dmudB*/ 436 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 437 } 438 /*}}}*/ 439 void Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/ 440 441 /*Intermediaries*/ 442 IssmDouble vx,vy,vz; 443 IssmDouble dvx[3],dvy[3],dvz[3]; 444 bool isdepthaveraged=0.; 445 446 /*Get velocity derivatives in all directions*/ 447 _assert_(dim==2 || dim==3); 448 _assert_(vx_input); 449 vx_input->GetInputValue(&vx,gauss); 450 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 451 if(dim==3){ 452 _assert_(vy_input); 453 vy_input->GetInputValue(&vy,gauss); 454 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 455 } 456 else{ 457 dvx[2] = 0.; 458 vy = 0.; 459 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 460 } 461 vz = 0.; 462 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 463 464 /*Compute viscosity*/ 465 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 466 }/*}}}*/ 467 void Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/ 468 /*Intermediaries*/ 469 IssmDouble vx,vy,vz; 470 IssmDouble dvx[3],dvy[3],dvz[3]; 471 bool isdepthaveraged=1.; 472 473 /*Get velocity derivatives in all directions*/ 474 _assert_(dim==1 || dim==2); 475 _assert_(vx_input); 476 vx_input->GetInputValue(&vx,gauss); 477 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 478 if(dim==2){ 479 _assert_(vy_input); 480 vy_input->GetInputValue(&vy,gauss); 481 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 482 } 483 else{ 484 dvx[1] = 0.; 485 dvx[2] = 0.; 486 vy = 0.; 487 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 488 } 489 dvx[2] = 0.; 490 dvy[2] = 0.; 491 vz = 0.; 492 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 493 494 /*Compute viscosity*/ 495 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 496 }/*}}}*/ 395 497 void Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/ 396 498 397 499 /*Intermediaries*/ 398 500 IssmDouble vx,vy,vz; 399 501 IssmDouble dvx[3],dvy[3],dvz[3]; 400 IssmDouble B,Ec,Es;502 bool isdepthaveraged=0.; 401 503 402 504 /*Get velocity derivatives in all directions*/ 403 505 _assert_(dim>1); … … 418 520 } 419 521 420 522 /*Compute viscosity*/ 421 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0] );523 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 422 524 } 423 525 /*}}}*/ 424 526 void Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/ … … 429 531 /*Intermediaries*/ 430 532 IssmDouble vx,vy,vz; 431 533 IssmDouble dvx[3],dvy[3],dvz[3]; 534 bool isdepthaveraged=0.; 432 535 433 536 /*Get velocity derivatives in all directions*/ 434 537 _assert_(dim==2 || dim==3); … … 449 552 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 450 553 451 554 /*Compute viscosity*/ 452 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0] );555 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 453 556 }/*}}}*/ 454 557 void Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/ 455 558 _error_("not implemented yet"); … … 458 561 _error_("not implemented yet"); 459 562 }/*}}}*/ 460 563 void Matestar::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/ 564 461 565 /*Intermediaries*/ 462 566 IssmDouble vx,vy,vz; 463 567 IssmDouble dvx[3],dvy[3],dvz[3]; 464 IssmDouble B,Ec,Es;568 bool isdepthaveraged=1.; 465 569 466 570 /*Get velocity derivatives in all directions*/ 467 571 _assert_(dim==1 || dim==2); … … 485 589 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 486 590 487 591 /*Compute viscosity*/ 488 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0] );592 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged); 489 593 }/*}}}*/ 490 594 void Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/ 491 595 _error_("not implemented yet"); -
../trunk-jpl/src/c/classes/Materials/Material.h
52 52 virtual void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0; 53 53 virtual void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 54 54 virtual void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0; 55 virtual void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0; 56 virtual void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 57 virtual void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 55 58 56 59 }; 57 60 #endif -
../trunk-jpl/src/c/classes/Materials/Matestar.h
69 69 IssmDouble GetD(); 70 70 IssmDouble GetDbar(); 71 71 IssmDouble GetEc(); 72 IssmDouble GetEcbar(); 72 73 IssmDouble GetEs(); 74 IssmDouble GetEsbar(); 73 75 IssmDouble GetN(); 74 76 bool IsDamage(); 75 77 bool IsEnhanced(){_error_("not supported");}; … … 83 85 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf); 84 86 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 85 87 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 88 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input); 89 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 90 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 86 91 /*}}}*/ 87 IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz); 92 IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged); 93 IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged); 88 94 }; 89 95 90 96 #endif /* _MATESTAR_H_ */ -
../trunk-jpl/src/c/classes/Materials/Matice.h
87 87 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf); 88 88 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 89 89 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 90 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");}; 91 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");}; 92 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");}; 90 93 /*}}}*/ 91 94 }; 92 95 -
../trunk-jpl/src/c/classes/Materials/Matpar.h
124 124 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");}; 125 125 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");}; 126 126 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");}; 127 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");}; 128 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");}; 129 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");}; 127 130 /*}}}*/ 128 131 /*Numerics: {{{*/ 129 132 void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
Note:
See TracBrowser
for help on using the repository browser.