Changeset 11462
- Timestamp:
- 02/16/12 17:48:24 (13 years ago)
- Location:
- issm/branches/trunk-jpl-damage/src
- Files:
-
- 3 added
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/EnumDefinitions.h
r11347 r11462 100 100 MaterialsRheologyLawEnum, 101 101 MaterialsRheologyNEnum, 102 MaterialsRheologyZEnum, 103 MaterialsRheologyZbarEnum, 102 104 MaterialsRhoIceEnum, 103 105 MaterialsRhoWaterEnum, -
issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/EnumToModelField.cpp
r11199 r11462 17 17 case MaterialsRheologyBEnum : return "rheology_B"; 18 18 case MaterialsRheologyBbarEnum : return "rheology_B"; 19 case MaterialsRheologyZEnum : return "rheology_Z"; 20 case MaterialsRheologyZbarEnum : return "rheology_Z"; 19 21 case BalancethicknessThickeningRateEnum: return "dhdt"; 20 22 case VxEnum : return "vx"; -
issm/branches/trunk-jpl-damage/src/c/modules/EnumToStringx/EnumToStringx.cpp
r11347 r11462 104 104 case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw"; 105 105 case MaterialsRheologyNEnum : return "MaterialsRheologyN"; 106 case MaterialsRheologyZEnum : return "MaterialsRheologyZ"; 107 case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar"; 106 108 case MaterialsRhoIceEnum : return "MaterialsRhoIce"; 107 109 case MaterialsRhoWaterEnum : return "MaterialsRhoWater"; -
issm/branches/trunk-jpl-damage/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
r10970 r11462 48 48 case FrictionCoefficientEnum: iomodel->FetchData(1,FrictionCoefficientEnum); break; 49 49 case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break; 50 case MaterialsRheologyZbarEnum: iomodel->FetchData(1,MaterialsRheologyZEnum); break; 50 51 default: _error_("Control %s not implemented yet",EnumToStringx((int)iomodel->Data(InversionControlParametersEnum)[i])); 51 52 } … … 66 67 67 68 /*Free data: */ 68 iomodel->DeleteData(1+4+ 5,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum);69 iomodel->DeleteData(1+4+6,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum); 69 70 } -
issm/branches/trunk-jpl-damage/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r11001 r11462 45 45 46 46 /*Fetch data needed: */ 47 iomodel->FetchData( 4,MeshElementsEnum,MeshElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum);47 iomodel->FetchData(5,MeshElementsEnum,MeshElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum); 48 48 #ifdef _HAVE_THREED_ 49 49 if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum); … … 67 67 68 68 /*Free data: */ 69 iomodel->DeleteData(9,MeshElementsEnum,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum, 70 MaterialsRheologyBEnum,MaterialsRheologyNEnum,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum); 69 iomodel->DeleteData(10,MeshElementsEnum,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum, 70 MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum, 71 InversionMaxParametersEnum); 71 72 72 73 /*Add new constrant material property tgo materials, at the end: */ -
issm/branches/trunk-jpl-damage/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
r11000 r11462 59 59 iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum); 60 60 iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum); 61 iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum); 61 62 iomodel->FetchDataToInput(elements,VxEnum); 62 63 iomodel->FetchDataToInput(elements,VyEnum); -
issm/branches/trunk-jpl-damage/src/c/modules/StringToEnumx/StringToEnumx.cpp
r11407 r11462 105 105 else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum; 106 106 else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum; 107 else if (strcmp(name,"MaterialsRheologyZ")==0) return MaterialsRheologyZEnum; 108 else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum; 107 109 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum; 108 110 else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum; … … 135 137 else if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum; 136 138 else if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum; 137 else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;138 else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"PrognosticVertexPairing")==0) return PrognosticVertexPairingEnum; 142 if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum; 143 else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum; 144 else if (strcmp(name,"PrognosticVertexPairing")==0) return PrognosticVertexPairingEnum; 143 145 else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum; 144 146 else if (strcmp(name,"QmuMassFluxSegments")==0) return QmuMassFluxSegmentsEnum; … … 258 260 else if (strcmp(name,"Node")==0) return NodeEnum; 259 261 else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; 260 else if (strcmp(name,"Param")==0) return ParamEnum;261 else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"Pengrid")==0) return PengridEnum; 265 if (strcmp(name,"Param")==0) return ParamEnum; 266 else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum; 267 else if (strcmp(name,"Pengrid")==0) return PengridEnum; 266 268 else if (strcmp(name,"Penpair")==0) return PenpairEnum; 267 269 else if (strcmp(name,"Penta")==0) return PentaEnum; … … 381 383 else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum; 382 384 else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum; 383 else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;384 else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; 388 if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum; 389 else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum; 390 else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; 389 391 else if (strcmp(name,"J")==0) return JEnum; 390 392 else if (strcmp(name,"Patch")==0) return PatchEnum; -
issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp
r11332 r11462 1473 1473 1474 1474 /*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */ 1475 if (enum_type==MaterialsRheologyBbarEnum ) input=this->matice->inputs->GetInput(enum_type);1475 if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum) input=this->matice->inputs->GetInput(enum_type); 1476 1476 else input=this->inputs->GetInput(enum_type); 1477 1477 //if (!input) _error_("Input %s not found in tria->inputs",EnumToStringx(enum_type)); … … 1579 1579 break; 1580 1580 case MaterialsRheologyBbarEnum: 1581 case MaterialsRheologyZbarEnum: 1581 1582 /*Matice will take care of it*/ break; 1582 1583 default: … … 1767 1768 1768 1769 /*update input*/ 1769 if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum ){1770 if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){ 1770 1771 matice->inputs->AddInput(new TriaP1Input(name,values)); 1771 1772 } … … 2768 2769 *presponse=this->matice->GetBbar(); 2769 2770 break; 2771 case MaterialsRheologyZbarEnum: 2772 *presponse=this->matice->GetZbar(); 2773 break; 2770 2774 case VelEnum: 2771 2775 … … 3346 3350 for(int i=0;i<num_controls;i++){ 3347 3351 3348 if(control_type[i]==MaterialsRheologyBbarEnum ){3352 if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyZbarEnum){ 3349 3353 input=(Input*)matice->inputs->GetInput(control_type[i]); _assert_(input); 3350 3354 } … … 3373 3377 Input* input=NULL; 3374 3378 3375 if(enum_type==MaterialsRheologyBbarEnum ){3379 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3376 3380 input=(Input*)matice->inputs->GetInput(enum_type); 3377 3381 } … … 3391 3395 Input* input=NULL; 3392 3396 3393 if(enum_type==MaterialsRheologyBbarEnum ){3397 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3394 3398 input=(Input*)matice->inputs->GetInput(enum_type); 3395 3399 } … … 3410 3414 Input* input=NULL; 3411 3415 3412 if(enum_type==MaterialsRheologyBbarEnum ){3416 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3413 3417 input=(Input*)matice->inputs->GetInput(enum_type); 3414 3418 } … … 3431 3435 3432 3436 /*If on water, grad = 0: */ 3433 if(IsOnWater()) return; 3437 if(IsOnWater()) return; 3434 3438 3435 3439 /*First deal with ∂/∂alpha(KU-F)*/ … … 3440 3444 case MaterialsRheologyBbarEnum: 3441 3445 GradjBMacAyeal(gradient,control_index); 3446 break; 3447 case MaterialsRheologyZbarEnum: 3448 GradjZMacAyeal(gradient,control_index); 3442 3449 break; 3443 3450 case BalancethicknessThickeningRateEnum: … … 3525 3532 } 3526 3533 /*}}}*/ 3534 /*FUNCTION Tria::GradjZGradient{{{1*/ 3535 void Tria::GradjZGradient(Vec gradient,int weight_index,int control_index){ 3536 3537 int i,ig; 3538 int doflist1[NUMVERTICES]; 3539 double Jdet,weight; 3540 double xyz_list[NUMVERTICES][3]; 3541 double dbasis[NDOF2][NUMVERTICES]; 3542 double dk[NDOF2]; 3543 double grade_g[NUMVERTICES]={0.0}; 3544 GaussTria *gauss=NULL; 3545 3546 /*Retrieve all inputs we will be needing: */ 3547 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 3548 GradientIndexing(&doflist1[0],control_index); 3549 Input* rheologyz_input=matice->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input); 3550 Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 3551 3552 /* Start looping on the number of gaussian points: */ 3553 gauss=new GaussTria(2); 3554 for (ig=gauss->begin();ig<gauss->end();ig++){ 3555 3556 gauss->GaussPoint(ig); 3557 3558 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3559 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3560 weights_input->GetInputValue(&weight,gauss,weight_index); 3561 3562 /*Build alpha_complement_list: */ 3563 rheologyz_input->GetInputDerivativeValue(&dk[0],&xyz_list[0][0],gauss); 3564 3565 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 3566 for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]); 3567 } 3568 VecSetValues(gradient,NUMVERTICES,doflist1,(const double*)grade_g,ADD_VALUES); 3569 3570 /*Clean up and return*/ 3571 delete gauss; 3572 } 3573 /*}}}*/ 3527 3574 /*FUNCTION Tria::GradjBMacAyeal{{{1*/ 3528 3575 void Tria::GradjBMacAyeal(Vec gradient,int control_index){ … … 3566 3613 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3567 3614 matice->GetViscosityComplement(&viscosity_complement,&epsilon[0]); 3615 3616 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3617 GetNodalFunctions(basis,gauss); 3618 3619 /*standard gradient dJ/dki*/ 3620 for (i=0;i<NUMVERTICES;i++) grad[i]+=-viscosity_complement*thickness*( 3621 (2*dvx[0]+dvy[1])*2*dadjx[0]+(dvx[1]+dvy[0])*(dadjx[1]+dadjy[0])+(2*dvy[1]+dvx[0])*2*dadjy[1] 3622 )*Jdet*gauss->weight*basis[i]; 3623 } 3624 3625 VecSetValues(gradient,NUMVERTICES,doflist,(const double*)grad,ADD_VALUES); 3626 3627 /*clean-up*/ 3628 delete gauss; 3629 } 3630 /*}}}*/ 3631 /*FUNCTION Tria::GradjZMacAyeal{{{1*/ 3632 void Tria::GradjZMacAyeal(Vec gradient,int control_index){ 3633 3634 /*Intermediaries*/ 3635 int i,ig; 3636 int doflist[NUMVERTICES]; 3637 double vx,vy,lambda,mu,thickness,Jdet; 3638 double viscosity_complement; 3639 double dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dZ[NDOF2]; 3640 double xyz_list[NUMVERTICES][3]; 3641 double basis[3],epsilon[3]; 3642 double grad[NUMVERTICES]={0.0}; 3643 GaussTria *gauss = NULL; 3644 3645 /* Get node coordinates and dof list: */ 3646 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 3647 GradientIndexing(&doflist[0],control_index); 3648 3649 /*Retrieve all inputs*/ 3650 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 3651 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 3652 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 3653 Input* adjointx_input=inputs->GetInput(AdjointxEnum); _assert_(adjointx_input); 3654 Input* adjointy_input=inputs->GetInput(AdjointyEnum); _assert_(adjointy_input); 3655 Input* rheologyz_input=matice->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input); 3656 3657 /* Start looping on the number of gaussian points: */ 3658 gauss=new GaussTria(4); 3659 for (ig=gauss->begin();ig<gauss->end();ig++){ 3660 3661 gauss->GaussPoint(ig); 3662 3663 thickness_input->GetInputValue(&thickness,gauss); 3664 rheologyz_input->GetInputDerivativeValue(&dZ[0],&xyz_list[0][0],gauss); 3665 vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss); 3666 vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss); 3667 adjointx_input->GetInputDerivativeValue(&dadjx[0],&xyz_list[0][0],gauss); 3668 adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss); 3669 3670 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3671 matice->GetViscosityZComplement(&viscosity_complement,&epsilon[0]); 3568 3672 3569 3673 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); -
issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.h
r11332 r11462 144 144 void Gradj(Vec gradient,int control_type,int control_index); 145 145 void GradjBGradient(Vec gradient,int weight_index,int control_index); 146 void GradjZGradient(Vec gradient,int weight_index,int control_index); 146 147 void GradjBMacAyeal(Vec gradient,int control_index); 148 void GradjZMacAyeal(Vec gradient,int control_index); 147 149 void GradjDragMacAyeal(Vec gradient,int control_index); 148 150 void GradjDragStokes(Vec gradient,int control_index); -
issm/branches/trunk-jpl-damage/src/c/objects/Materials/Matice.cpp
r11332 r11462 228 228 } 229 229 /*}}}*/ 230 /*FUNCTION Matice::GetZ {{{1*/ 231 double Matice::GetZ(){ 232 233 /*Output*/ 234 double Z; 235 236 inputs->GetInputAverage(&Z,MaterialsRheologyZEnum); 237 return Z; 238 } 239 /*}}}*/ 240 /*FUNCTION Matice::GetZbar {{{1*/ 241 double Matice::GetZbar(){ 242 243 /*Output*/ 244 double Zbar; 245 246 inputs->GetInputAverage(&Zbar,MaterialsRheologyZbarEnum); 247 return Zbar; 248 } 249 /*}}}*/ 230 250 /*FUNCTION Matice::GetVectorFromInputs{{{1*/ 231 251 void Matice::GetVectorFromInputs(Vec vector,int input_enum){ … … 282 302 /*Intermediary: */ 283 303 double A,e; 284 double B ,n;304 double Btmp,B,n,Z; 285 305 286 306 /*Get B and n*/ 287 B=GetBbar(); 307 Btmp=GetBbar(); 308 Z=GetZbar(); 288 309 n=GetN(); 310 B=Z*Btmp; 289 311 290 312 if (n==1){ … … 318 340 if(viscosity<=0) _error_("Negative viscosity"); 319 341 _assert_(B>0); 342 _assert_(Z>0); 320 343 _assert_(n>0); 321 344 … … 348 371 /*Intermediaries: */ 349 372 double A,e; 350 double B ,n;373 double Btmp,B,n,Z; 351 374 352 375 /*Get B and n*/ 353 B=GetB(); 376 Btmp=GetB(); 377 Z=GetZ(); 354 378 n=GetN(); 379 B=Z*Btmp; 355 380 356 381 if (n==1){ … … 389 414 if(viscosity3d<=0) _error_("Negative viscosity"); 390 415 _assert_(B>0); 416 _assert_(Z>0); 391 417 _assert_(n>0); 392 418 … … 418 444 /*Intermediaries: */ 419 445 double A,e; 420 double B ,n;446 double Btmp,B,n,Z; 421 447 double eps0; 422 448 423 449 /*Get B and n*/ 424 450 eps0=pow((double)10,(double)-27); 425 B=GetB(); 451 Btmp=GetB(); 452 Z=GetZ(); 426 453 n=GetN(); 454 B=Z*Btmp; 427 455 428 456 if (n==1){ … … 490 518 491 519 /*Get B and n*/ 492 B=GetBbar(); 520 B=GetBbar(); /* why is this needed in this function? */ 493 521 n=GetN(); 494 522 … … 508 536 509 537 viscosity_complement=1/(2*pow(A,e)); 538 } 539 } 540 else{ 541 viscosity_complement=4.5*pow((double)10,(double)17); 542 } 543 544 /*Checks in debugging mode*/ 545 _assert_(B>0); 546 _assert_(n>0); 547 _assert_(viscosity_complement>0); 548 549 /*Return: */ 550 *pviscosity_complement=viscosity_complement; 551 } 552 /*}}}*/ 553 /*FUNCTION Matice::GetViscosityZComplement {{{1*/ 554 void Matice::GetViscosityZComplement(double* pviscosity_complement, double* epsilon){ 555 /*Return viscosity derivative for control method d(mu)/dZ: 556 * 557 * B 558 * dviscosity= ------------------------------------------------------------------- 559 * 2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n] 560 * 561 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 562 * return mu20, initial viscosity. 563 */ 564 565 /*output: */ 566 double viscosity_complement; 567 568 /*input strain rate: */ 569 double exx,eyy,exy; 570 571 /*Intermediary value A and exponent e: */ 572 double A,e; 573 double B,n; 574 575 /*Get B and n*/ 576 B=GetBbar(); 577 n=GetN(); 578 579 if(epsilon){ 580 exx=*(epsilon+0); 581 eyy=*(epsilon+1); 582 exy=*(epsilon+2); 583 584 /*Build viscosity: mu2=B/(2*A^e) */ 585 A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy; 586 if(A==0){ 587 /*Maximum viscosity_complement for 0 shear areas: */ 588 viscosity_complement=2.25*pow((double)10,(double)17); 589 } 590 else{ 591 e=(n-1)/(2*n); 592 593 viscosity_complement=B/(2*pow(A,e)); 510 594 } 511 595 } … … 756 840 this->inputs->AddInput(new TriaP1Input(MaterialsRheologyNEnum,nodeinputs)); 757 841 } 842 843 /*Get Z*/ 844 if (iomodel->Data(MaterialsRheologyZEnum)) { 845 for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)]; 846 this->inputs->AddInput(new TriaP1Input(MaterialsRheologyZbarEnum,nodeinputs)); 847 } 758 848 759 849 /*Control Inputs*/ … … 771 861 } 772 862 break; 863 case MaterialsRheologyZbarEnum: 864 if (iomodel->Data(MaterialsRheologyZEnum)){ 865 _assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 866 for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)]; 867 for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i]; 868 for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i]; 869 this->inputs->AddInput(new ControlInput(MaterialsRheologyZbarEnum,TriaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1)); 870 } 871 break; 773 872 } 774 873 } … … 797 896 for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index]; 798 897 this->inputs->AddInput(new PentaP1Input(MaterialsRheologyNEnum,nodeinputs)); 898 } 899 900 /*Get Z*/ 901 if (iomodel->Data(MaterialsRheologyZEnum)) { 902 for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)]; 903 this->inputs->AddInput(new PentaP1Input(MaterialsRheologyZEnum,nodeinputs)); 799 904 } 800 905 … … 813 918 } 814 919 break; 920 case MaterialsRheologyZbarEnum: 921 if (iomodel->Data(MaterialsRheologyZEnum)){ 922 _assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 923 for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)]; 924 for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i]; 925 for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[int(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i]; 926 this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1)); 927 } 928 break; 815 929 } 816 930 } … … 831 945 name==MaterialsRheologyBEnum || 832 946 name==MaterialsRheologyBbarEnum || 833 name==MaterialsRheologyNEnum 947 name==MaterialsRheologyNEnum || 948 name==MaterialsRheologyZEnum || 949 name==MaterialsRheologyZbarEnum 834 950 ){ 835 951 return true; -
issm/branches/trunk-jpl-damage/src/c/objects/Materials/Matice.h
r11332 r11462 68 68 void GetViscosity3dStokes(double* pviscosity3d, double* epsilon); 69 69 void GetViscosityComplement(double* pviscosity_complement, double* pepsilon); 70 void GetViscosityZComplement(double* pviscosity_complement, double* pepsilon); 70 71 void GetViscosityDerivativeEpsSquare(double* pmu_prime, double* pepsilon); 71 72 void GetViscosity2dDerivativeEpsSquare(double* pmu_prime, double* pepsilon); … … 73 74 double GetBbar(); 74 75 double GetN(); 76 double GetZ(); 77 double GetZbar(); 75 78 bool IsInput(int name); 76 79 /*}}}*/ -
issm/branches/trunk-jpl-damage/src/m/classes/inversion.m
r11276 r11462 87 87 88 88 checkfield(md,'inversion.iscontrol','values',[0 1]); 89 checkfield(md,'inversion.control_parameters','cell',1,'values',{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' ' Vx' 'Vy'});89 checkfield(md,'inversion.control_parameters','cell',1,'values',{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy'}); 90 90 checkfield(md,'inversion.nsteps','numel',1,'>=',1); 91 91 checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0); … … 109 109 fielddisplay(obj,'control_parameters','parameter where inverse control is carried out; ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 110 110 fielddisplay(obj,'nsteps','number of optimization searches'); 111 fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step s');111 fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step'); 112 112 fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 113 113 fielddisplay(obj,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied'); -
issm/branches/trunk-jpl-damage/src/m/classes/materials.m
r10969 r11462 18 18 rheology_B = NaN; 19 19 rheology_n = NaN; 20 rheology_Z = NaN; 20 21 rheology_law = ''; 21 22 end … … 78 79 checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]); 79 80 checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); 81 checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices 1]); 80 82 checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius'}); 81 83 end % }}} … … 95 97 fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]'); 96 98 fielddisplay(obj,'rheology_n','Glen''s flow law exponent'); 99 fielddisplay(obj,'rheology_Z','rheology multiplier'); 97 100 fielddisplay(obj,'rheology_law','law for the temperature dependance of the rheology: ''None'', ''Paterson'' or ''Arrhenius'''); 98 101 end % }}} … … 110 113 WriteData(fid,'object',obj,'fieldname','rheology_B','format','DoubleMat','mattype',1); 111 114 WriteData(fid,'object',obj,'fieldname','rheology_n','format','DoubleMat','mattype',2); 115 WriteData(fid,'object',obj,'fieldname','rheology_Z','format','DoubleMat','mattype',1); 112 116 WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum,'format','Integer'); 113 117 end % }}} -
issm/branches/trunk-jpl-damage/src/m/classes/model/model.m
r11139 r11462 192 192 if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end 193 193 if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end 194 if isfield(structmd,'Z'), md.materials.rheology_Z=structmd.Z; end 194 195 if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end 195 196 if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end 197 if isfield(structmd,'rheology_Z'), md.materials.rheology_Z=structmd.rheology_Z; end 196 198 if isfield(structmd,'elementoniceshelf'), md.mask.elementonfloatingice=structmd.elementoniceshelf; end 197 199 if isfield(structmd,'elementonicesheet'), md.mask.elementongroundedice=structmd.elementonicesheet; end -
issm/branches/trunk-jpl-damage/src/m/enum/EnumToModelField.m
r9681 r11462 15 15 case MaterialsRheologyBEnum(), string='rheology_B'; return 16 16 case MaterialsRheologyBbarEnum(), string='rheology_B'; return 17 case MaterialsRheologyZEnum(), string='rheology_Z'; return 18 case MaterialsRheologyZbarEnum(), string='rheology_Z'; return 17 19 case BalancethicknessThickeningRateEnum: string='dhdt'; return 18 20 case VxEnum(), string='vx'; return -
issm/branches/trunk-jpl-damage/src/m/model/collapse.m
r11408 r11462 75 75 md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B); 76 76 md.materials.rheology_n=project2d(md,md.materials.rheology_n,1); 77 md.materials.rheology_Z=DepthAverage(md,md.materials.rheology_Z); 77 78 78 79 %special for thermal modeling: -
issm/branches/trunk-jpl-damage/src/m/model/extrude.m
r11315 r11462 201 201 md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node'); 202 202 md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element'); 203 md.materials.rheology_Z=project3d(md,'vector',md.materials.rheology_Z,'type','node'); 203 204 204 205 %parameters -
issm/branches/trunk-jpl-damage/src/m/model/mechanicalproperties.m
r9734 r11462 1 1 function md=mechanicalproperties(md,vx,vy) 2 %MECHANICALPROPERTIES - compute stress and strain rate for a g oven velocity2 %MECHANICALPROPERTIES - compute stress and strain rate for a given velocity 3 3 % 4 4 % this routine computes the components of the stress tensor … … 46 46 clear vxlist vylist 47 47 48 %compute viscosity 48 %compute viscosity (it's not clear if this section is even used, since the variables are 49 %cleared before anything is saved to the model... 49 50 nu=zeros(numberofelements,1); 51 Z_bar=md.materials.rheology_Z(index)*summation/3; 50 52 B_bar=md.materials.rheology_B(index)*summation/3; 51 53 power=(md.materials.rheology_n-1)./(2*md.materials.rheology_n); … … 58 60 location=find(second_inv==0 & power==0); 59 61 nu(location)=B_bar(location); 60 clear B_bar location second_inv power62 clear B_bar Z_bar location second_inv power 61 63 62 64 %compute stress
Note:
See TracChangeset
for help on using the changeset viewer.