Changeset 25379 for issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
- Timestamp:
- 08/11/20 19:43:31 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp ¶
r25317 r25379 111 111 return 1; 112 112 }/*}}}*/ 113 void MasstransportAnalysis::UpdateElements(Elements* elements,Inputs 2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/113 void MasstransportAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 114 114 115 115 int stabilization,finiteelement; … … 140 140 if(iomodel->my_elements[i]){ 141 141 Element* element=(Element*)elements->GetObjectByOffset(counter); 142 element->Update(inputs 2,i,iomodel,analysis_counter,analysis_type,finiteelement);142 element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement); 143 143 counter++; 144 144 } 145 145 } 146 146 147 iomodel->FetchDataToInput(inputs 2,elements,"md.geometry.thickness",ThicknessEnum);148 iomodel->FetchDataToInput(inputs 2,elements,"md.geometry.surface",SurfaceEnum);149 iomodel->FetchDataToInput(inputs 2,elements,"md.geometry.base",BaseEnum);150 iomodel->FetchDataToInput(inputs 2,elements,"md.solidearth.sealevel",SealevelEnum,0);151 iomodel->FetchDataToInput(inputs 2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);152 iomodel->FetchDataToInput(inputs 2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);153 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);154 iomodel->FetchDataToInput(inputs 2,elements,"md.initialization.vx",VxEnum);155 iomodel->FetchDataToInput(inputs 2,elements,"md.initialization.vy",VyEnum);156 if(isgroundingline) iomodel->FetchDataToInput(inputs 2,elements,"md.geometry.bed",BedEnum);147 iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum); 148 iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum); 149 iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum); 150 iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0); 151 iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 152 iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum); 153 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 154 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum); 155 iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum); 156 if(isgroundingline) iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum); 157 157 /*Initialize cumdeltalthickness input*/ 158 InputUpdateFromConstantx(inputs 2,elements,0.,SealevelriseCumDeltathicknessEnum);158 InputUpdateFromConstantx(inputs,elements,0.,SealevelriseCumDeltathicknessEnum); 159 159 /*Initialize ThicknessResidual input*/ 160 InputUpdateFromConstantx(inputs 2,elements,0.,ThicknessResidualEnum);160 InputUpdateFromConstantx(inputs,elements,0.,ThicknessResidualEnum); 161 161 162 162 /*Get what we need for ocean-induced basal melting*/ … … 165 165 switch(basalforcing_model){ 166 166 case FloatingMeltRateEnum: 167 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);167 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 168 168 break; 169 169 case LinearFloatingMeltRateEnum: 170 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.);170 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.); 171 171 break; 172 172 case MismipFloatingMeltRateEnum: … … 175 175 break; 176 176 case SpatialLinearFloatingMeltRateEnum: 177 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);178 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);179 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);177 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 178 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 179 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 180 180 break; 181 181 case BasalforcingsPicoEnum: 182 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);183 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);182 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum); 183 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum); 184 184 break; 185 185 case BasalforcingsIsmip6Enum:{ 186 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);187 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.);186 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 187 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.); 188 188 IssmDouble** array3d = NULL; int* Ms = NULL; int* Ns = NULL; int K; 189 189 iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf"); … … 193 193 if(iomodel->domaintype!=Domain2DhorizontalEnum && !element->IsOnBase()) continue; 194 194 for(int kk=0;kk<K;kk++){ 195 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs 2,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk);195 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk); 196 196 } 197 197 } … … 202 202 break; 203 203 case BeckmannGoosseFloatingMeltRateEnum: 204 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);205 iomodel->FetchDataToInput(inputs 2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);204 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 205 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 206 206 break; 207 207 default: … … 210 210 211 211 if(!issmb){ 212 iomodel->FetchDataToInput(inputs 2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);212 iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 213 213 } 214 214 if(stabilization==3){ 215 iomodel->FetchDataToInput(inputs 2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element215 iomodel->FetchDataToInput(inputs,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element 216 216 } 217 217 if(stabilization==4){ 218 iomodel->FetchDataToInput(inputs 2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)218 iomodel->FetchDataToInput(inputs,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties) 219 219 } 220 220 221 221 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 222 iomodel->FetchDataToInput(inputs 2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);223 iomodel->FetchDataToInput(inputs 2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);222 iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 223 iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 224 224 } 225 225 … … 318 318 element->FindParam(&domaintype,DomainTypeEnum); 319 319 element->FindParam(&stabilization,MasstransportStabilizationEnum); 320 Input 2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);321 Input 2* vyaverage_input=NULL;320 Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 321 Input* vyaverage_input=NULL; 322 322 if(dim==2){ 323 vyaverage_input=element->GetInput 2(VyAverageEnum); _assert_(vyaverage_input);323 vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 324 324 } 325 325 … … 512 512 element->FindParam(&dt,TimesteppingTimeStepEnum); 513 513 element->FindParam(&domaintype,DomainTypeEnum); 514 Input 2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);515 Input 2* vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);514 Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 515 Input* vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 516 516 517 517 /* Start looping on the number of gaussian points: */ … … 616 616 element->FindParam(&dt,TimesteppingTimeStepEnum); 617 617 element->FindParam(&stabilization,MasstransportStabilizationEnum); 618 Input 2* gmb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);619 Input 2* fmb_input = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);620 Input 2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);621 Input 2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input);622 Input 2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);623 Input 2* vxaverage_input = element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);624 Input 2* vyaverage_input = element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);618 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 619 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 620 Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input); 621 Input* ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input); 622 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 623 Input* vxaverage_input = element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 624 Input* vyaverage_input = element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 625 625 626 626 // if(element->Id()==9){ … … 730 730 element->FindParam(&dt,TimesteppingTimeStepEnum); 731 731 element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum); 732 Input 2* gmb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);733 Input 2* fmb_input = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);734 Input 2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input);735 Input 2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);736 Input 2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);732 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 733 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 734 Input* ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input); 735 Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input); 736 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 737 737 738 738 /*Recover portion of element that is grounded*/ … … 819 819 } 820 820 } 821 element->AddBasalInput 2(ThicknessEnum,newthickness,element->GetElementType());822 element->AddBasalInput 2(ThicknessResidualEnum,thicknessresidual,element->GetElementType());821 element->AddBasalInput(ThicknessEnum,newthickness,element->GetElementType()); 822 element->AddBasalInput(ThicknessResidualEnum,thicknessresidual,element->GetElementType()); 823 823 824 824 xDelete<int>(doflist); … … 900 900 901 901 /*Add input to the element: */ 902 element->AddBasalInput 2(SurfaceEnum,newsurface,P1Enum);903 element->AddBasalInput 2(BaseEnum,newbase,P1Enum);904 element->AddBasalInput 2(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum);905 element->AddBasalInput 2(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum);902 element->AddBasalInput(SurfaceEnum,newsurface,P1Enum); 903 element->AddBasalInput(BaseEnum,newbase,P1Enum); 904 element->AddBasalInput(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum); 905 element->AddBasalInput(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum); 906 906 907 907 /*Free ressources:*/ … … 948 948 /*Retrieve all inputs and parameters*/ 949 949 element->GetVerticesCoordinates(&xyz_list); 950 Input 2* vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input);951 Input 2* vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input);950 Input* vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input); 951 Input* vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input); 952 952 953 953 /* Start looping on the number of gaussian points: */ … … 1061 1061 element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum); 1062 1062 element->FindParam(&stabilization,MasstransportStabilizationEnum); 1063 Input 2* gmb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);1064 Input 2* fmb_input = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);1065 Input 2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);1066 Input 2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input);1067 Input 2* vxaverage_input = element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);1068 Input 2* vyaverage_input = element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);1063 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 1064 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 1065 Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input); 1066 Input* ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input); 1067 Input* vxaverage_input = element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 1068 Input* vyaverage_input = element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 1069 1069 1070 1070 /*Recover portion of element that is grounded*/
Note:
See TracChangeset
for help on using the changeset viewer.