Changeset 24080
- Timestamp:
- 07/11/19 08:10:15 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r24060 r24080 307 307 ./solutionsequences/solutionsequence_hydro_nonlinear.cpp\ 308 308 ./solutionsequences/solutionsequence_shakti_nonlinear.cpp\ 309 ./solutionsequences/solutionsequence_glads_nonlinear.cpp\ 309 310 ./cores/stressbalance_core.cpp\ 310 311 ./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp\ -
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r24069 r24080 5 5 #include "../modules/modules.h" 6 6 7 #define AEPS 2.22 e-157 #define AEPS 2.2204460492503131E-015 8 8 9 9 /*Model processing*/ … … 423 423 424 424 /*GlaDS specifics*/ 425 void HydrologyGlaDSAnalysis::SetChannelCrossSectionOld(FemModel* femmodel){/*{{{*/ 426 427 bool ischannels; 428 femmodel->parameters->FindParam(&ischannels,HydrologyIschannelsEnum); 429 if(!ischannels) return; 430 431 for(int i=0;i<femmodel->loads->Size();i++){ 432 if(femmodel->loads->GetEnum(i)==ChannelEnum){ 433 Channel* channel=(Channel*)femmodel->loads->GetObjectByOffset(i); 434 channel->SetChannelCrossSectionOld(); 435 } 436 } 437 438 }/*}}}*/ 425 439 void HydrologyGlaDSAnalysis::UpdateSheetThickness(FemModel* femmodel){/*{{{*/ 426 440 … … 458 472 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 459 473 Input* b_input = element->GetInput(BedEnum); _assert_(b_input); 460 Input* h _input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);474 Input* hold_input = element->GetInput(HydrologySheetThicknessOldEnum);_assert_(hold_input); 461 475 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 462 476 Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input); … … 472 486 vx_input->GetInputValue(&vx,gauss); 473 487 vy_input->GetInputValue(&vy,gauss); 474 h _input->GetInputValue(&h_old,gauss);488 hold_input->GetInputValue(&h_old,gauss); 475 489 B_input->GetInputValue(&B,gauss); 476 490 n_input->GetInputValue(&n,gauss); -
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h
r23965 r24080 32 32 33 33 /*Specific to GlaDS*/ 34 void SetChannelCrossSectionOld(FemModel* femmodel); 34 35 void UpdateSheetThickness(FemModel* femmodel); 35 36 void UpdateSheetThickness(Element* element); -
issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
r24070 r24080 25 25 #define ALPHA_S 5./4. 26 26 #define BETA_S 3./2. 27 #define AEPS 2.22e-1527 #define AEPS 2.2204460492503131E-015 28 28 29 29 /*Channel constructors and destructor*/ … … 670 670 IssmDouble qc = - ks * pow(h,ALPHA_S) * pow(Ngrad,BETA_S-2.) * dphids; 671 671 672 /*Compute f factor*/ 673 IssmDouble fFactor = 0.; 674 if(this->S>0. || qc*dPw>0.){ 675 fFactor = lc * qc; 676 } 677 672 /*Ice rate factor*/ 678 673 A=pow(B,-n); 679 674 … … 682 677 IssmDouble N = phi_0 - phi; 683 678 684 IssmDouble alpha = 1./(rho_ice*L)*( 685 fabs(Qprime*pow(this->S,ALPHA_C-1.)*dphids) 686 + C*Qprime*pow(this->S,ALPHA_C-1.)*dPw 687 ) - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N; 688 689 IssmDouble beta = 1./(rho_ice*L)*( fabs(lc*qc*dphids) + C*fFactor*dPw ); 690 691 /*Solve ODE*/ 692 this->S = ODE1(alpha,beta,this->Sold,dt,1); 693 694 /*Make sure Area > 0*/ 695 if(this->S<0.) this->S = 0.; 679 bool converged = false; 680 int count = 0; 681 682 while(!converged){ 683 684 IssmDouble Snew = this->S; 685 686 /*Compute f factor*/ 687 IssmDouble fFactor = 0.; 688 if(this->S>0. || qc*dPw>0.){ 689 fFactor = lc * qc; 690 } 691 692 IssmDouble alpha = 1./(rho_ice*L)*( 693 fabs(Qprime*pow(Snew,ALPHA_C-1.)*dphids) 694 + C*Qprime*pow(Snew,ALPHA_C-1.)*dPw 695 ) - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N; 696 697 IssmDouble beta = 1./(rho_ice*L)*( fabs(lc*qc*dphids) + C*fFactor*dPw ); 698 699 /*Solve ODE*/ 700 this->S = ODE1(alpha,beta,this->Sold,dt,2); 701 if(this->S<0.) this->S = 0.; 702 _assert_(!xIsNan<IssmDouble>(this->S)); 703 704 count++; 705 706 if(fabs((this->S - Snew)/(Snew+AEPS))<1e-8 || count>=10) converged = true; 707 } 696 708 697 709 /*Clean up and return*/ -
issm/trunk-jpl/src/c/cores/hydrology_core.cpp
r23965 r24080 195 195 HydrologyGlaDSAnalysis* analysis = new HydrologyGlaDSAnalysis(); 196 196 femmodel->SetCurrentConfiguration(HydrologyGlaDSAnalysisEnum); 197 198 /*Set fields as old*/ 197 199 InputDuplicatex(femmodel,HydraulicPotentialEnum,HydraulicPotentialOldEnum); 198 analysis->UpdateEffectivePressure(femmodel); 199 solutionsequence_shakti_nonlinear(femmodel); 200 InputDuplicatex(femmodel,HydrologySheetThicknessEnum,HydrologySheetThicknessOldEnum); 201 analysis->SetChannelCrossSectionOld(femmodel); 202 203 /*Solve for new potential*/ 204 solutionsequence_glads_nonlinear(femmodel); 200 205 201 206 if(VerboseSolution()) _printf0_(" updating effective pressure\n"); 202 207 analysis->UpdateEffectivePressure(femmodel); 203 if(VerboseSolution()) _printf0_(" updating sheet thickness\n"); /*Uses N, so needs to come after*/204 analysis->UpdateSheetThickness(femmodel);205 if(VerboseSolution()) _printf0_(" updating channels cross section\n");206 analysis->UpdateChannelCrossSection(femmodel);207 208 delete analysis; 208 209 } -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r24061 r24080 570 570 syn keyword cConstant HydrologySheetConductivityEnum 571 571 syn keyword cConstant HydrologySheetThicknessEnum 572 syn keyword cConstant HydrologySheetThicknessOldEnum 572 573 syn keyword cConstant HydrologyWaterVxEnum 573 574 syn keyword cConstant HydrologyWaterVyEnum … … 941 942 syn keyword cConstant ChannelEnum 942 943 syn keyword cConstant ChannelAreaEnum 944 syn keyword cConstant ChannelAreaOldEnum 943 945 syn keyword cConstant ClosedEnum 944 946 syn keyword cConstant ColinearEnum … … 1277 1279 syn keyword cType Cfsurfacesquare 1278 1280 syn keyword cType Channel 1281 syn keyword cType classes 1279 1282 syn keyword cType Constraint 1280 1283 syn keyword cType Constraints … … 1283 1286 syn keyword cType ControlInput 1284 1287 syn keyword cType Covertree 1288 syn keyword cType DatasetInput 1285 1289 syn keyword cType DataSetParam 1286 syn keyword cType DatasetInput1287 1290 syn keyword cType Definition 1288 1291 syn keyword cType DependentObject … … 1297 1300 syn keyword cType ElementHook 1298 1301 syn keyword cType ElementMatrix 1302 syn keyword cType Elements 1299 1303 syn keyword cType ElementVector 1300 syn keyword cType Elements1301 1304 syn keyword cType ExponentialVariogram 1302 1305 syn keyword cType ExternalResult … … 1305 1308 syn keyword cType Friction 1306 1309 syn keyword cType Gauss 1310 syn keyword cType GaussianVariogram 1311 syn keyword cType gaussobjects 1307 1312 syn keyword cType GaussPenta 1308 1313 syn keyword cType GaussSeg 1309 1314 syn keyword cType GaussTetra 1310 1315 syn keyword cType GaussTria 1311 syn keyword cType GaussianVariogram1312 1316 syn keyword cType GenericExternalResult 1313 1317 syn keyword cType GenericOption … … 1317 1321 syn keyword cType Input 1318 1322 syn keyword cType Inputs 1323 syn keyword cType IntArrayInput 1319 1324 syn keyword cType IntInput 1320 1325 syn keyword cType IntMatParam … … 1324 1329 syn keyword cType IssmDirectApplicInterface 1325 1330 syn keyword cType IssmParallelDirectApplicInterface 1331 syn keyword cType krigingobjects 1326 1332 syn keyword cType Load 1327 1333 syn keyword cType Loads … … 1334 1340 syn keyword cType Matice 1335 1341 syn keyword cType Matlitho 1342 syn keyword cType matrixobjects 1336 1343 syn keyword cType MatrixParam 1337 1344 syn keyword cType Misfit … … 1346 1353 syn keyword cType Observations 1347 1354 syn keyword cType Option 1355 syn keyword cType Options 1348 1356 syn keyword cType OptionUtilities 1349 syn keyword cType Options1350 1357 syn keyword cType Param 1351 1358 syn keyword cType Parameters … … 1360 1367 syn keyword cType Regionaloutput 1361 1368 syn keyword cType Results 1369 syn keyword cType Riftfront 1362 1370 syn keyword cType RiftStruct 1363 syn keyword cType Riftfront1364 1371 syn keyword cType Seg 1365 1372 syn keyword cType SegInput 1373 syn keyword cType Segment 1366 1374 syn keyword cType SegRef 1367 syn keyword cType Segment1368 1375 syn keyword cType SpcDynamic 1369 1376 syn keyword cType SpcStatic … … 1385 1392 syn keyword cType Vertex 1386 1393 syn keyword cType Vertices 1387 syn keyword cType classes1388 syn keyword cType gaussobjects1389 syn keyword cType krigingobjects1390 syn keyword cType matrixobjects1391 1394 syn keyword cType AdjointBalancethickness2Analysis 1392 1395 syn keyword cType AdjointBalancethicknessAnalysis … … 1407 1410 syn keyword cType FreeSurfaceBaseAnalysis 1408 1411 syn keyword cType FreeSurfaceTopAnalysis 1412 syn keyword cType GiaIvinsAnalysis 1409 1413 syn keyword cType GLheightadvectionAnalysis 1410 syn keyword cType GiaIvinsAnalysis1411 1414 syn keyword cType HydrologyDCEfficientAnalysis 1412 1415 syn keyword cType HydrologyDCInefficientAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r24061 r24080 566 566 HydrologySheetConductivityEnum, 567 567 HydrologySheetThicknessEnum, 568 HydrologySheetThicknessOldEnum, 568 569 HydrologyWaterVxEnum, 569 570 HydrologyWaterVyEnum, … … 939 940 ChannelEnum, 940 941 ChannelAreaEnum, 942 ChannelAreaOldEnum, 941 943 ClosedEnum, 942 944 ColinearEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r24061 r24080 572 572 case HydrologySheetConductivityEnum : return "HydrologySheetConductivity"; 573 573 case HydrologySheetThicknessEnum : return "HydrologySheetThickness"; 574 case HydrologySheetThicknessOldEnum : return "HydrologySheetThicknessOld"; 574 575 case HydrologyWaterVxEnum : return "HydrologyWaterVx"; 575 576 case HydrologyWaterVyEnum : return "HydrologyWaterVy"; … … 943 944 case ChannelEnum : return "Channel"; 944 945 case ChannelAreaEnum : return "ChannelArea"; 946 case ChannelAreaOldEnum : return "ChannelAreaOld"; 945 947 case ClosedEnum : return "Closed"; 946 948 case ColinearEnum : return "Colinear"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r24061 r24080 584 584 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum; 585 585 else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum; 586 else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum; 586 587 else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum; 587 588 else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; … … 628 629 else if (strcmp(name,"MeshVertexonbase")==0) return MeshVertexonbaseEnum; 629 630 else if (strcmp(name,"MeshVertexonboundary")==0) return MeshVertexonboundaryEnum; 630 else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Misfit")==0) return MisfitEnum; 634 if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum; 635 else if (strcmp(name,"Misfit")==0) return MisfitEnum; 635 636 else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 636 637 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; … … 751 752 else if (strcmp(name,"SmbTz")==0) return SmbTzEnum; 752 753 else if (strcmp(name,"SmbV")==0) return SmbVEnum; 753 else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"SmbVz")==0) return SmbVzEnum; 757 if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum; 758 else if (strcmp(name,"SmbVz")==0) return SmbVzEnum; 758 759 else if (strcmp(name,"SmbW")==0) return SmbWEnum; 759 760 else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum; … … 874 875 else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum; 875 876 else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum; 876 else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum; 880 if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum; 881 else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum; 881 882 else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum; 882 883 else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum; … … 964 965 else if (strcmp(name,"Channel")==0) return ChannelEnum; 965 966 else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum; 967 else if (strcmp(name,"ChannelAreaOld")==0) return ChannelAreaOldEnum; 966 968 else if (strcmp(name,"Closed")==0) return ClosedEnum; 967 969 else if (strcmp(name,"Colinear")==0) return ColinearEnum; … … 996 998 else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum; 997 999 else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum; 998 else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;999 else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum; 1003 if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum; 1004 else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum; 1005 else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum; 1004 1006 else if (strcmp(name,"Element")==0) return ElementEnum; 1005 1007 else if (strcmp(name,"ElementHook")==0) return ElementHookEnum; … … 1119 1121 else if (strcmp(name,"Matice")==0) return MaticeEnum; 1120 1122 else if (strcmp(name,"Matlitho")==0) return MatlithoEnum; 1121 else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;1122 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; 1126 if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum; 1127 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum; 1128 else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; 1127 1129 else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; 1128 1130 else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum; … … 1242 1244 else if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum; 1243 1245 else if (strcmp(name,"SubelementMelt1")==0) return SubelementMelt1Enum; 1244 else if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum;1245 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum; 1249 if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum; 1250 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum; 1251 else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum; 1250 1252 else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum; 1251 1253 else if (strcmp(name,"Tetra")==0) return TetraEnum; -
issm/trunk-jpl/src/c/solutionsequences/convergence.cpp
r23205 r24080 7 7 #include "../shared/shared.h" 8 8 9 void convergence(bool* pconverged, Matrix<IssmDouble>* Kff,Vector<IssmDouble>* pf,Vector<IssmDouble>* uf,Vector<IssmDouble>* old_uf,IssmDouble eps_res,IssmDouble eps_rel,IssmDouble eps_abs){ /*{{{*/9 void convergence(bool* pconverged, Matrix<IssmDouble>* Kff,Vector<IssmDouble>* pf,Vector<IssmDouble>* uf,Vector<IssmDouble>* old_uf,IssmDouble eps_res,IssmDouble eps_rel,IssmDouble eps_abs){ 10 10 11 11 /*output*/ … … 139 139 /*assign output*/ 140 140 *pconverged=converged; 141 }/*}}}*/ 142 143 141 } -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp
r23587 r24080 39 39 Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters); 40 40 41 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)42 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);43 44 41 for(;;){ 45 42 /*save pointer to old solution*/ … … 56 53 57 54 convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); delete Kff; delete pf; delete df; 58 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);59 55 InputUpdateFromSolutionx(femmodel,ug); 60 56 -
issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h
r23161 r24080 15 15 void solutionsequence_hydro_nonlinear(FemModel* femmodel); 16 16 void solutionsequence_shakti_nonlinear(FemModel* femmodel); 17 void solutionsequence_glads_nonlinear(FemModel* femmodel); 17 18 void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads); 18 19 void solutionsequence_newton(FemModel* femmodel);
Note:
See TracChangeset
for help on using the changeset viewer.