Ignore:
Timestamp:
04/01/20 21:54:40 (5 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 24684

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/c/analyses/HydrologyGlaDSAnalysis.cpp

    r24313 r24686  
    107107        return 1;
    108108}/*}}}*/
    109 void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     109void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
    110110
    111111        /*Fetch data needed: */
     
    121121                if(iomodel->my_elements[i]){
    122122                        Element* element=(Element*)elements->GetObjectByOffset(counter);
    123                         element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
     123                        element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
    124124                        counter++;
    125125                }
    126126        }
    127127
    128         iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
    129         iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
    130         iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum);
    131         iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
    132         iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
     128        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
     129        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
     130        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
     131        iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
     132        iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
    133133        if(iomodel->domaintype!=Domain2DhorizontalEnum){
    134                 iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
    135                 iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
    136         }
    137         iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
    138         iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
    139         iomodel->FetchDataToInput(elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
    140         iomodel->FetchDataToInput(elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum);
    141         iomodel->FetchDataToInput(elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
    142         iomodel->FetchDataToInput(elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
    143         iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum);
    144         iomodel->FetchDataToInput(elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum);
    145         iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
    146         iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
     134                iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
     135                iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
     136        }
     137        iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
     138        iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
     139        iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
     140        iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum);
     141        iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
     142        iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
     143        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum);
     144        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum);
     145        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
     146        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
    147147        iomodel->FindConstant(&frictionlaw,"md.friction.law");
    148148
     
    150150        switch(frictionlaw){
    151151                case 1:
    152                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    153                         iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
    154                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
     152                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     153                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
     154                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
    155155                        break;
    156156                case 8:
    157                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
     157                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
    158158                        break;
    159159                default:
     
    185185        int frictionlaw;
    186186        iomodel->FindConstant(&frictionlaw,"md.friction.law");
    187         if(frictionlaw==4 || frictionlaw==6){
     187        if(frictionlaw==6){
    188188                parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
    189189        }
    190         if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
     190        if(frictionlaw==4){
     191                parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
    191192                parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     193                parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
     194        }
     195        if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
     196                parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
     197                parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    192198        }
    193199        if(frictionlaw==9){
    194200                parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
     201                parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
    195202                parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
    196203        }
    197204
    198   /*Requested outputs*/
    199   iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
    200   parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
    201   if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
    202   iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
     205        /*Requested outputs*/
     206        iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
     207        parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
     208        if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
     209        iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
    203210}/*}}}*/
    204211
     
    242249        IssmDouble g         = element->FindParam(ConstantsGEnum);
    243250        IssmDouble e_v       = element->FindParam(HydrologyEnglacialVoidRatioEnum);
    244         Input* k_input   = element->GetInput(HydrologySheetConductivityEnum);_assert_(k_input);
    245         Input* phi_input = element->GetInput(HydraulicPotentialEnum);      _assert_(phi_input);
    246         Input* h_input   = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input);
    247         Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
    248         Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
    249         Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
    250         Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
     251        Input2* k_input   = element->GetInput2(HydrologySheetConductivityEnum);_assert_(k_input);
     252        Input2* phi_input = element->GetInput2(HydraulicPotentialEnum);      _assert_(phi_input);
     253        Input2* h_input   = element->GetInput2(HydrologySheetThicknessEnum); _assert_(h_input);
     254        Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
     255        Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
     256        Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
     257        Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
    251258
    252259        /* Start  looping on the number of gaussian points: */
     
    342349        IssmDouble g         = element->FindParam(ConstantsGEnum);
    343350        IssmDouble e_v       = element->FindParam(HydrologyEnglacialVoidRatioEnum);
    344         Input* hr_input     = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);
    345         Input* vx_input     = element->GetInput(VxEnum);_assert_(vx_input);
    346         Input* vy_input     = element->GetInput(VyEnum);_assert_(vy_input);
    347         Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
    348         Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
    349         Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
    350         Input* G_input      = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(G_input);
    351         Input* m_input      = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input);
    352         Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
    353         Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
    354         Input* phiold_input = element->GetInput(HydraulicPotentialOldEnum);      _assert_(phiold_input);
    355         Input* phi_input    = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
     351        Input2* hr_input     = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input);
     352        Input2* vx_input     = element->GetInput2(VxEnum);_assert_(vx_input);
     353        Input2* vy_input     = element->GetInput2(VyEnum);_assert_(vy_input);
     354        Input2* h_input      = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input);
     355        Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
     356        Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
     357        Input2* G_input      = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(G_input);
     358        Input2* m_input      = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input);
     359        Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
     360        Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
     361        Input2* phiold_input = element->GetInput2(HydraulicPotentialOldEnum);      _assert_(phiold_input);
     362        Input2* phi_input    = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
    356363
    357364        /*Build friction element, needed later: */
     
    479486        IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum);
    480487        IssmDouble g         = element->FindParam(ConstantsGEnum);
    481         Input* hr_input = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);
    482         Input* vx_input = element->GetInput(VxEnum);_assert_(vx_input);
    483         Input* vy_input = element->GetInput(VyEnum);_assert_(vy_input);
    484         Input* H_input  = element->GetInput(ThicknessEnum); _assert_(H_input);
    485         Input* b_input  = element->GetInput(BedEnum); _assert_(b_input);
    486         Input* hold_input  = element->GetInput(HydrologySheetThicknessOldEnum);_assert_(hold_input);
    487         Input* B_input  = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
    488         Input* n_input  = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
    489         Input* phi_input = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
     488        Input2* hr_input = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input);
     489        Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input);
     490        Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input);
     491        Input2* H_input  = element->GetInput2(ThicknessEnum); _assert_(H_input);
     492        Input2* b_input  = element->GetInput2(BedEnum); _assert_(b_input);
     493        Input2* hold_input  = element->GetInput2(HydrologySheetThicknessOldEnum);_assert_(hold_input);
     494        Input2* B_input  = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
     495        Input2* n_input  = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
     496        Input2* phi_input = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
    490497
    491498        /* Start  looping on the number of gaussian points: */
     
    532539        }
    533540
    534         element->AddInput(HydrologySheetThicknessEnum,h_new,P1Enum);
     541        element->AddInput2(HydrologySheetThicknessEnum,h_new,P1Enum);
    535542
    536543        /*Clean up and return*/
     
    562569        IssmDouble  rho_water = element->FindParam(MaterialsRhoFreshwaterEnum);
    563570        IssmDouble  g         = element->FindParam(ConstantsGEnum);
    564         Input* H_input   = element->GetInput(ThicknessEnum); _assert_(H_input);
    565         Input* b_input   = element->GetInput(BedEnum); _assert_(b_input);
    566         Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);
     571        Input2* H_input   = element->GetInput2(ThicknessEnum); _assert_(H_input);
     572        Input2* b_input   = element->GetInput2(BedEnum); _assert_(b_input);
     573        Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input);
    567574
    568575        /* Start  looping on the number of gaussian points: */
     
    592599        }
    593600
    594         element->AddInput(EffectivePressureEnum,N,element->FiniteElement());
     601        element->AddInput2(EffectivePressureEnum,N,element->FiniteElement());
    595602
    596603        /*Clean up and return*/
Note: See TracChangeset for help on using the changeset viewer.