Changeset 24335 for issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
- Timestamp:
- 11/15/19 16:28:40 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r24240 r24335 32 32 } 33 33 /*}}}*/ 34 void LevelsetAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/34 void LevelsetAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 35 35 36 36 /*Finite element type*/ … … 43 43 if(iomodel->my_elements[i]){ 44 44 Element* element=(Element*)elements->GetObjectByOffset(counter); 45 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);45 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 46 46 counter++; 47 47 } 48 48 } 49 49 50 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);51 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);52 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);50 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 51 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 52 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 53 53 54 54 /*Get moving front parameters*/ … … 57 57 switch(calvinglaw){ 58 58 case DefaultCalvingEnum: 59 iomodel->FetchDataToInput( elements,"md.calving.calvingrate",CalvingCalvingrateEnum);59 iomodel->FetchDataToInput(inputs2,elements,"md.calving.calvingrate",CalvingCalvingrateEnum); 60 60 break; 61 61 case CalvingLevermannEnum: 62 iomodel->FetchDataToInput( elements,"md.calving.coeff",CalvinglevermannCoeffEnum);62 iomodel->FetchDataToInput(inputs2,elements,"md.calving.coeff",CalvinglevermannCoeffEnum); 63 63 break; 64 64 case CalvingVonmisesEnum: 65 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);66 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);67 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);65 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 66 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 67 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 68 68 break; 69 69 case CalvingMinthicknessEnum: 70 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);70 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 71 71 break; 72 72 case CalvingHabEnum: 73 iomodel->FetchDataToInput( elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);73 iomodel->FetchDataToInput(inputs2,elements,"md.calving.flotation_fraction",CalvingHabFractionEnum); 74 74 break; 75 75 case CalvingCrevasseDepthEnum: 76 iomodel->FetchDataToInput( elements,"md.calving.water_height",WaterheightEnum);76 iomodel->FetchDataToInput(inputs2,elements,"md.calving.water_height",WaterheightEnum); 77 77 break; 78 78 case CalvingDev2Enum: 79 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);80 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);79 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 80 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 81 81 break; 82 82 default: … … 89 89 switch(melt_parameterization){ 90 90 case FrontalForcingsDefaultEnum: 91 iomodel->FetchDataToInput( elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);91 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum); 92 92 break; 93 93 case FrontalForcingsRignotEnum: 94 iomodel->FetchDataToInput( elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum);95 iomodel->FetchDataToInput( elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum);96 iomodel->FetchDataToInput( elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum);94 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum); 95 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 96 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum); 97 97 break; 98 98 default: … … 226 226 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 227 227 basalelement->FindParam(&calvingmax,CalvingMaxEnum); 228 Input * vx_input = NULL;229 Input * vy_input = NULL;230 Input * calvingratex_input = NULL;231 Input * calvingratey_input = NULL;232 Input * lsf_slopex_input = NULL;233 Input * lsf_slopey_input = NULL;234 Input * calvingrate_input = NULL;235 Input * meltingrate_input = NULL;236 Input * gr_input = NULL;228 Input2* vx_input = NULL; 229 Input2* vy_input = NULL; 230 Input2* calvingratex_input = NULL; 231 Input2* calvingratey_input = NULL; 232 Input2* lsf_slopex_input = NULL; 233 Input2* lsf_slopey_input = NULL; 234 Input2* calvingrate_input = NULL; 235 Input2* meltingrate_input = NULL; 236 Input2* gr_input = NULL; 237 237 238 238 /*Load velocities*/ 239 239 switch(domaintype){ 240 240 case Domain2DverticalEnum: 241 vx_input=basalelement->GetInput (VxEnum); _assert_(vx_input);241 vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 242 242 break; 243 243 case Domain2DhorizontalEnum: 244 vx_input=basalelement->GetInput (VxEnum); _assert_(vx_input);245 vy_input=basalelement->GetInput (VyEnum); _assert_(vy_input);246 gr_input=basalelement->GetInput (MaskGroundediceLevelsetEnum); _assert_(gr_input);244 vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 245 vy_input=basalelement->GetInput2(VyEnum); _assert_(vy_input); 246 gr_input=basalelement->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 247 247 break; 248 248 case Domain3DEnum: 249 vx_input=basalelement->GetInput (VxAverageEnum); _assert_(vx_input);250 vy_input=basalelement->GetInput (VyAverageEnum); _assert_(vy_input);251 gr_input=basalelement->GetInput (MaskGroundediceLevelsetEnum); _assert_(gr_input);249 vx_input=basalelement->GetInput2(VxAverageEnum); _assert_(vx_input); 250 vy_input=basalelement->GetInput2(VyAverageEnum); _assert_(vy_input); 251 gr_input=basalelement->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 252 252 break; 253 253 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); … … 258 258 case DefaultCalvingEnum: 259 259 case CalvingVonmisesEnum: 260 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);261 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);262 calvingrate_input = basalelement->GetInput (CalvingCalvingrateEnum); _assert_(calvingrate_input);263 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);260 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 261 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 262 calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum); _assert_(calvingrate_input); 263 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 264 264 break; 265 265 case CalvingLevermannEnum: 266 266 switch(domaintype){ 267 267 case Domain2DverticalEnum: 268 calvingratex_input=basalelement->GetInput (CalvingratexEnum); _assert_(calvingratex_input);268 calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 269 269 break; 270 270 case Domain2DhorizontalEnum: 271 calvingratex_input=basalelement->GetInput (CalvingratexEnum); _assert_(calvingratex_input);272 calvingratey_input=basalelement->GetInput (CalvingrateyEnum); _assert_(calvingratey_input);271 calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 272 calvingratey_input=basalelement->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 273 273 break; 274 274 case Domain3DEnum: 275 calvingratex_input=basalelement->GetInput (CalvingratexAverageEnum); _assert_(calvingratex_input);276 calvingratey_input=basalelement->GetInput (CalvingrateyAverageEnum); _assert_(calvingratey_input);275 calvingratex_input=basalelement->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 276 calvingratey_input=basalelement->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 277 277 break; 278 278 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 279 279 } 280 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);280 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 281 281 break; 282 282 case CalvingMinthicknessEnum: 283 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);284 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);285 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);283 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 284 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 285 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 286 286 break; 287 287 case CalvingHabEnum: 288 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);289 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);290 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);288 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 289 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 290 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 291 291 break; 292 292 case CalvingCrevasseDepthEnum: 293 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);294 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);295 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);293 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 294 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 295 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 296 296 break; 297 297 case CalvingDev2Enum: 298 298 basalelement->FindParam(&calvinghaf,CalvingHeightAboveFloatationEnum); 299 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);300 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);301 calvingrate_input = basalelement->GetInput (CalvingCalvingrateEnum); _assert_(calvingrate_input);302 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);299 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 300 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 301 calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum); _assert_(calvingrate_input); 302 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 303 303 break; 304 304 default: … … 571 571 /*Retrieve all inputs and parameters*/ 572 572 basalelement->GetVerticesCoordinates(&xyz_list); 573 Input * levelset_input = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);573 Input2* levelset_input = basalelement->GetInput2(MaskIceLevelsetEnum); _assert_(levelset_input); 574 574 575 575 /* Start looping on the number of gaussian points: */ … … 718 718 int numnodes = element->GetNumberOfNodes(); 719 719 Gauss* gauss = element->NewGauss(); 720 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);721 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);722 Input * sl_input = element->GetInput(SealevelEnum); _assert_(sl_input);720 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 721 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 722 Input2* sl_input = element->GetInput2(SealevelEnum); _assert_(sl_input); 723 723 724 724 /*Potentially constrain nodes of this element*/ … … 746 746 747 747 /*Get the fraction of the flotation thickness at the terminus*/ 748 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);748 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); 749 749 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum); 750 750 … … 758 758 int numnodes = element->GetNumberOfNodes(); 759 759 Gauss* gauss = element->NewGauss(); 760 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);761 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);762 Input * hab_fraction_input = element->GetInput(CalvingHabFractionEnum); _assert_(hab_fraction_input);763 Input * ls_input = element->GetInput(DistanceToCalvingfrontEnum); _assert_(ls_input);760 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 761 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 762 Input2* hab_fraction_input = element->GetInput2(CalvingHabFractionEnum); _assert_(hab_fraction_input); 763 Input2* ls_input = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(ls_input); 764 764 765 765 /*Potentially constrain nodes of this element*/ … … 793 793 794 794 /*Get the DistanceToCalvingfront*/ 795 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);795 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); 796 796 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum); 797 797 … … 803 803 int numnodes = element->GetNumberOfNodes(); 804 804 Gauss* gauss = element->NewGauss(); 805 Input * crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);806 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);807 Input * surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);808 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);809 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);805 Input2* crevassedepth_input = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input); 806 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 807 Input2* surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input); 808 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 809 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 810 810 811 811 /*First, look at ice front and figure out if any of the nodes will be calved*/ … … 841 841 int numnodes = element->GetNumberOfNodes(); 842 842 Gauss* gauss = element->NewGauss(); 843 Input * levelset_input = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);844 Input * crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);845 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);846 Input * surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);847 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);848 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);843 Input2* levelset_input = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(levelset_input); 844 Input2* crevassedepth_input = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input); 845 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 846 Input2* surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input); 847 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 848 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 849 849 850 850 /*Is this element connected to a node that should be calved*/
Note:
See TracChangeset
for help on using the changeset viewer.