Changeset 23839
- Timestamp:
- 04/11/19 11:07:41 (6 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r23795 r23839 870 870 iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum,0.); 871 871 break; 872 case 11: 873 iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum); 874 iomodel->FetchDataToInput(elements,"md.friction.Cmax",FrictionCmaxEnum); 872 875 default: 873 876 _error_("friction law "<< frictionlaw <<" not supported"); … … 931 934 int frictionlaw; 932 935 iomodel->FindConstant(&frictionlaw,"md.friction.law"); 933 if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 934 if(frictionlaw==3 || frictionlaw==4 || frictionlaw==1 || frictionlaw==7) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum)); 935 if(frictionlaw==5) parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum)); 936 if(frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 937 if(frictionlaw==10){ 938 parameters->AddObject(iomodel->CopyConstantObject("md.friction.pseudoplasticity_exponent",FrictionPseudoplasticityExponentEnum)); 939 parameters->AddObject(iomodel->CopyConstantObject("md.friction.threshold_speed",FrictionThresholdSpeedEnum)); 940 parameters->AddObject(iomodel->CopyConstantObject("md.friction.delta",FrictionDeltaEnum)); 941 parameters->AddObject(iomodel->CopyConstantObject("md.friction.void_ratio",FrictionVoidRatioEnum)); 936 switch(frictionlaw){ 937 case 1: 938 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum)); 939 break; 940 case 2: 941 break; 942 case 3: 943 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum)); 944 break; 945 case 4: 946 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 947 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum)); 948 break; 949 case 5: 950 parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum)); 951 break; 952 case 6: 953 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 954 break; 955 case 7: 956 parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum)); 957 break; 958 case 8: 959 break; 960 case 9: 961 parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum)); 962 break; 963 case 10: 964 parameters->AddObject(iomodel->CopyConstantObject("md.friction.pseudoplasticity_exponent",FrictionPseudoplasticityExponentEnum)); 965 parameters->AddObject(iomodel->CopyConstantObject("md.friction.threshold_speed",FrictionThresholdSpeedEnum)); 966 parameters->AddObject(iomodel->CopyConstantObject("md.friction.delta",FrictionDeltaEnum)); 967 parameters->AddObject(iomodel->CopyConstantObject("md.friction.void_ratio",FrictionVoidRatioEnum)); 968 break; 969 case 11: 970 parameters->AddObject(iomodel->CopyConstantObject("md.friction.m",FrictionMEnum)); 971 break; 972 default: _error_("Friction law "<<frictionlaw<<" not implemented yet"); 942 973 } 943 974 -
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r23644 r23839 66 66 IssmDouble alpha; 67 67 IssmDouble Chi,Gamma; 68 IssmDouble vx,vy,vz,vmag;69 68 IssmDouble alpha_complement; 70 69 … … 75 74 element->GetInputValue(&n,gauss,MaterialsRheologyNEnum); 76 75 77 /*Get effective pressure */76 /*Get effective pressure and velocity magnitude*/ 78 77 IssmDouble Neff = EffectivePressure(gauss); 79 80 //We need the velocity magnitude to evaluate the basal stress: 81 switch(dim){ 82 case 1: 83 element->GetInputValue(&vx,gauss,VxEnum); 84 vmag=sqrt(vx*vx); 85 break; 86 case 2: 87 element->GetInputValue(&vx,gauss,VxEnum); 88 element->GetInputValue(&vy,gauss,VyEnum); 89 vmag=sqrt(vx*vx+vy*vy); 90 break; 91 case 3: 92 element->GetInputValue(&vx,gauss,VxEnum); 93 element->GetInputValue(&vy,gauss,VyEnum); 94 element->GetInputValue(&vz,gauss,VzEnum); 95 vmag=sqrt(vx*vx+vy*vy+vz*vz); 96 break; 97 default: 98 _error_("not supported"); 99 } 100 // vmag=100./(3600.*24.*365.); 78 IssmDouble vmag = VelMag(gauss); 101 79 102 80 if (q_exp==1){ … … 155 133 /*diverse: */ 156 134 IssmDouble r,s; 157 IssmDouble vx,vy,vz,vmag;158 135 IssmDouble drag_p,drag_q; 159 136 IssmDouble drag_coefficient; … … 171 148 /*Get effective pressure*/ 172 149 IssmDouble Neff = EffectivePressure(gauss); 173 174 //We need the velocity magnitude to evaluate the basal stress: 175 switch(dim){ 176 case 1: 177 element->GetInputValue(&vx,gauss,VxEnum); 178 vmag=sqrt(vx*vx); 179 break; 180 case 2: 181 element->GetInputValue(&vx,gauss,VxEnum); 182 element->GetInputValue(&vy,gauss,VyEnum); 183 vmag=sqrt(vx*vx+vy*vy); 184 break; 185 case 3: 186 element->GetInputValue(&vx,gauss,VxEnum); 187 element->GetInputValue(&vy,gauss,VyEnum); 188 element->GetInputValue(&vz,gauss,VzEnum); 189 vmag=sqrt(vx*vx+vy*vy+vz*vz); 190 break; 191 default: 192 _error_("not supported"); 193 } 150 IssmDouble vmag = VelMag(gauss); 194 151 195 152 /*Check to prevent dividing by zero if vmag==0*/ … … 237 194 GetAlpha2PISM(palpha2,gauss); 238 195 break; 196 case 11: 197 GetAlpha2Schoof(palpha2,gauss); 198 break; 239 199 default: 240 200 _error_("Friction law "<< this->law <<" not supported"); … … 251 211 IssmDouble drag_p, drag_q; 252 212 IssmDouble thickness,base,floatation_thickness,sealevel; 253 IssmDouble vx,vy,vz,vmag;254 213 IssmDouble drag_coefficient,drag_coefficient_coulomb; 255 214 IssmDouble alpha2,alpha2_coulomb; … … 273 232 /*Get effective pressure*/ 274 233 IssmDouble Neff = EffectivePressure(gauss); 275 276 /*Compute velocity magnitude*/ 277 switch(dim){ 278 case 1: 279 element->GetInputValue(&vx,gauss,VxEnum); 280 vmag=sqrt(vx*vx); 281 break; 282 case 2: 283 element->GetInputValue(&vx,gauss,VxEnum); 284 element->GetInputValue(&vy,gauss,VyEnum); 285 vmag=sqrt(vx*vx+vy*vy); 286 break; 287 case 3: 288 element->GetInputValue(&vx,gauss,VxEnum); 289 element->GetInputValue(&vy,gauss,VyEnum); 290 element->GetInputValue(&vz,gauss,VzEnum); 291 vmag=sqrt(vx*vx+vy*vy+vz*vz); 292 break; 293 default: 294 _error_("not supported"); 295 } 234 IssmDouble vmag = VelMag(gauss); 296 235 297 236 /*Check to prevent dividing by zero if vmag==0*/ … … 325 264 IssmDouble As; 326 265 IssmDouble n; 327 328 266 IssmDouble alpha; 329 267 IssmDouble Chi,Gamma; 330 331 IssmDouble vx,vy,vz,vmag;332 268 IssmDouble alpha2; 333 269 … … 340 276 /*Get effective pressure*/ 341 277 IssmDouble Neff = EffectivePressure(gauss); 342 343 /*Compute velocity magnitude*/ 344 switch(dim){ 345 case 1: 346 element->GetInputValue(&vx,gauss,VxEnum); 347 vmag=sqrt(vx*vx); 348 break; 349 case 2: 350 element->GetInputValue(&vx,gauss,VxEnum); 351 element->GetInputValue(&vy,gauss,VyEnum); 352 vmag=sqrt(vx*vx+vy*vy); 353 break; 354 case 3: 355 element->GetInputValue(&vx,gauss,VxEnum); 356 element->GetInputValue(&vy,gauss,VyEnum); 357 element->GetInputValue(&vz,gauss,VzEnum); 358 vmag=sqrt(vx*vx+vy*vy+vz*vz); 359 break; 360 default: 361 _error_("not supported"); 362 } 363 364 // vmag=100./(3600.*24.*365.); 278 IssmDouble vmag = VelMag(gauss); 279 365 280 //compute alpha and Chi coefficients: */ 366 281 if (q_exp==1){ … … 496 411 IssmDouble r,s; 497 412 IssmDouble drag_p, drag_q; 498 IssmDouble vx,vy,vz,vmag;499 413 IssmDouble drag_coefficient; 500 414 IssmDouble alpha2; … … 509 423 s=1./drag_p; 510 424 511 /*Get effective pressure */425 /*Get effective pressure and basal velocity*/ 512 426 IssmDouble Neff = EffectivePressure(gauss); 513 514 /*Compute velocity magnitude*/ 515 switch(dim){ 516 case 1: 517 element->GetInputValue(&vx,gauss,VxEnum); 518 vmag=sqrt(vx*vx); 519 break; 520 case 2: 521 element->GetInputValue(&vx,gauss,VxEnum); 522 element->GetInputValue(&vy,gauss,VyEnum); 523 vmag=sqrt(vx*vx+vy*vy); 524 break; 525 case 3: 526 element->GetInputValue(&vx,gauss,VxEnum); 527 element->GetInputValue(&vy,gauss,VyEnum); 528 element->GetInputValue(&vz,gauss,VzEnum); 529 vmag=sqrt(vx*vx+vy*vy+vz*vz); 530 break; 531 default: 532 _error_("not supported"); 533 } 427 IssmDouble vmag = VelMag(gauss); 534 428 535 429 /*Check to prevent dividing by zero if vmag==0*/ … … 551 445 IssmDouble Neff,F; 552 446 IssmDouble thickness,base,sealevel; 553 IssmDouble vx,vy,vz,vmag;554 447 IssmDouble drag_coefficient,water_layer; 555 448 IssmDouble alpha2; … … 579 472 if(Neff<0) Neff=0; 580 473 581 switch(dim){ 582 case 1: 583 element->GetInputValue(&vx,gauss,VxEnum); 584 vmag=sqrt(vx*vx); 585 break; 586 case 2: 587 element->GetInputValue(&vx,gauss,VxEnum); 588 element->GetInputValue(&vy,gauss,VyEnum); 589 vmag=sqrt(vx*vx+vy*vy); 590 break; 591 case 3: 592 element->GetInputValue(&vx,gauss,VxEnum); 593 element->GetInputValue(&vy,gauss,VyEnum); 594 element->GetInputValue(&vz,gauss,VzEnum); 595 vmag=sqrt(vx*vx+vy*vy+vz*vz); 596 break; 597 default: 598 _error_("not supported"); 599 } 474 IssmDouble vmag = VelMag(gauss); 600 475 601 476 /*Check to prevent dividing by zero if vmag==0*/ … … 613 488 /*diverse: */ 614 489 IssmDouble C,m; 615 IssmDouble vx,vy,vz,vmag;616 490 IssmDouble alpha2; 617 491 … … 620 494 element->GetInputValue(&m,FrictionMEnum); 621 495 622 switch(dim){ 623 case 1: 624 element->GetInputValue(&vx,gauss,VxEnum); 625 vmag=sqrt(vx*vx); 626 break; 627 case 2: 628 element->GetInputValue(&vx,gauss,VxEnum); 629 element->GetInputValue(&vy,gauss,VyEnum); 630 vmag=sqrt(vx*vx+vy*vy); 631 break; 632 case 3: 633 element->GetInputValue(&vx,gauss,VxEnum); 634 element->GetInputValue(&vy,gauss,VyEnum); 635 element->GetInputValue(&vz,gauss,VzEnum); 636 vmag=sqrt(vx*vx+vy*vy+vz*vz); 637 break; 638 default: 639 _error_("not supported"); 640 } 496 /*Get velocity magnitude*/ 497 IssmDouble vmag = VelMag(gauss); 641 498 642 499 /*Check to prevent dividing by zero if vmag==0*/ … … 741 598 _assert_(!xIsNan<IssmDouble>(alpha2)); 742 599 _assert_(!xIsInf<IssmDouble>(alpha2)); 600 601 /*Assign output pointers:*/ 602 *palpha2=alpha2; 603 }/*}}}*/ 604 void Friction::GetAlpha2Schoof(IssmDouble* palpha2, Gauss* gauss){/*{{{*/ 605 606 /*This routine calculates the basal friction coefficient 607 * 608 * C |u_b|^(m-1) 609 * alpha2= __________________________ 610 * (1+(C/(Cmax N))^1/m |u_b| )^m 611 * 612 * */ 613 614 /*diverse: */ 615 IssmDouble C,Cmax,m; 616 617 /*Recover parameters: */ 618 element->GetInputValue(&Cmax,gauss,FrictionCmaxEnum); 619 element->GetInputValue(&C,gauss,FrictionCEnum); 620 element->GetInputValue(&m,FrictionMEnum); 621 622 /*Get effective pressure and velocity magnitude*/ 623 IssmDouble N = EffectivePressure(gauss); 624 IssmDouble ub = VelMag(gauss); 625 626 /*Compute alpha^2*/ 627 IssmDouble alpha2= (C*pow(ub,m-1.)) / pow(1.+ pow(C/(Cmax*N),1./m)*ub,m); 628 629 /*Checks*/ 630 _assert_(!xIsNan<IssmDouble>(alpha2)); 631 _assert_(alpha2>=0); 743 632 744 633 /*Assign output pointers:*/ … … 810 699 811 700 }/*}}}*/ 701 IssmDouble Friction::VelMag(Gauss* gauss){/*{{{*/ 702 /*Get effective pressure as a function of flag */ 703 704 705 /*diverse*/ 706 IssmDouble vx,vy,vz,vmag; 707 708 switch(dim){ 709 case 1: 710 element->GetInputValue(&vx,gauss,VxEnum); 711 vmag=sqrt(vx*vx); 712 break; 713 case 2: 714 element->GetInputValue(&vx,gauss,VxEnum); 715 element->GetInputValue(&vy,gauss,VyEnum); 716 vmag=sqrt(vx*vx+vy*vy); 717 break; 718 case 3: 719 element->GetInputValue(&vx,gauss,VxEnum); 720 element->GetInputValue(&vy,gauss,VyEnum); 721 element->GetInputValue(&vz,gauss,VzEnum); 722 vmag=sqrt(vx*vx+vy*vy+vz*vz); 723 break; 724 default: 725 _error_("not supported"); 726 } 727 728 return vmag; 729 730 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Loads/Friction.h
r23644 r23839 41 41 void GetAlpha2WeertmanTemp(IssmDouble* palpha2,Gauss* gauss); 42 42 void GetAlpha2PISM(IssmDouble* palpha2,Gauss* gauss); 43 void GetAlpha2Schoof(IssmDouble* palpha2,Gauss* gauss); 43 44 44 45 IssmDouble EffectivePressure(Gauss* gauss); 46 IssmDouble VelMag(Gauss* gauss); 45 47 }; 46 48 -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r23814 r23839 502 502 FrictionAsEnum, 503 503 FrictionCEnum, 504 FrictionCmaxEnum, 504 505 FrictionCoefficientcoulombEnum, 505 506 FrictionCoefficientEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r23814 r23839 508 508 case FrictionAsEnum : return "FrictionAs"; 509 509 case FrictionCEnum : return "FrictionC"; 510 case FrictionCmaxEnum : return "FrictionCmax"; 510 511 case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb"; 511 512 case FrictionCoefficientEnum : return "FrictionCoefficient"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r23814 r23839 520 520 else if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum; 521 521 else if (strcmp(name,"FrictionC")==0) return FrictionCEnum; 522 else if (strcmp(name,"FrictionCmax")==0) return FrictionCmaxEnum; 522 523 else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum; 523 524 else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum; … … 628 629 else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum; 629 630 else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum; 630 else if (strcmp(name,"SmbC")==0) return SmbCEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"SmbDailysnowfall")==0) return SmbDailysnowfallEnum; 634 if (strcmp(name,"SmbC")==0) return SmbCEnum; 635 else if (strcmp(name,"SmbDailysnowfall")==0) return SmbDailysnowfallEnum; 635 636 else if (strcmp(name,"SmbDailyrainfall")==0) return SmbDailyrainfallEnum; 636 637 else if (strcmp(name,"SmbDailydsradiation")==0) return SmbDailydsradiationEnum; … … 751 752 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 752 753 else if (strcmp(name,"VzSSA")==0) return VzSSAEnum; 753 else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 757 if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum; 758 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 758 759 else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum; 759 760 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; … … 874 875 else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum; 875 876 else if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum; 876 else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 880 if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum; 881 else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 881 882 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum; 882 883 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; … … 997 998 else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; 998 999 else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum; 999 else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"None")==0) return NoneEnum; 1003 if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; 1004 else if (strcmp(name,"None")==0) return NoneEnum; 1004 1005 else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum; 1005 1006 else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; … … 1120 1121 else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum; 1121 1122 else if (strcmp(name,"P2")==0) return P2Enum; 1122 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 1126 if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 1127 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 1127 1128 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 1128 1129 else if (strcmp(name,"Pengrid")==0) return PengridEnum; … … 1243 1244 else if (strcmp(name,"MeshZ")==0) return MeshZEnum; 1244 1245 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; 1245 else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum; 1249 if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum; 1250 else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum; 1250 1251 else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum; 1251 1252 else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
Note:
See TracChangeset
for help on using the changeset viewer.