Ignore:
Timestamp:
11/15/19 16:28:40 (5 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added Inputs2, TODO: still AMR, GEMB and DC do not work, and need to delete current Inputs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r24240 r24335  
    3232}
    3333/*}}}*/
    34 void LevelsetAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     34void LevelsetAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
    3535
    3636        /*Finite element type*/
     
    4343                if(iomodel->my_elements[i]){
    4444                        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);
    4646                        counter++;
    4747                }
    4848        }
    4949
    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);
    5353
    5454        /*Get moving front parameters*/
     
    5757        switch(calvinglaw){
    5858                case DefaultCalvingEnum:
    59                         iomodel->FetchDataToInput(elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
     59                        iomodel->FetchDataToInput(inputs2,elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
    6060                        break;
    6161                case CalvingLevermannEnum:
    62                         iomodel->FetchDataToInput(elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
     62                        iomodel->FetchDataToInput(inputs2,elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
    6363                        break;
    6464                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);
    6868                        break;
    6969                case CalvingMinthicknessEnum:
    70                         iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum);
     70                        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
    7171                        break;
    7272                case CalvingHabEnum:
    73                         iomodel->FetchDataToInput(elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);
     73                        iomodel->FetchDataToInput(inputs2,elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);
    7474                        break;
    7575                case CalvingCrevasseDepthEnum:
    76                         iomodel->FetchDataToInput(elements,"md.calving.water_height",WaterheightEnum);
     76                        iomodel->FetchDataToInput(inputs2,elements,"md.calving.water_height",WaterheightEnum);
    7777                        break;
    7878                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);
    8181                        break;
    8282                default:
     
    8989        switch(melt_parameterization){
    9090                case FrontalForcingsDefaultEnum:
    91                         iomodel->FetchDataToInput(elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);
     91                        iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);
    9292                        break;
    9393                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);
    9797                        break;
    9898                default:
     
    226226        basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
    227227        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;
    237237
    238238        /*Load velocities*/
    239239        switch(domaintype){
    240240                case Domain2DverticalEnum:
    241                         vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
     241                        vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input);
    242242                        break;
    243243                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);
    247247                        break;
    248248                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);
    252252                        break;
    253253                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     
    258258                case DefaultCalvingEnum:
    259259                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);
    264264                        break;
    265265                case CalvingLevermannEnum:
    266266                        switch(domaintype){
    267267                                case Domain2DverticalEnum:
    268                                         calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
     268                                        calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
    269269                                        break;
    270270                                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);
    273273                                        break;
    274274                                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);
    277277                                        break;
    278278                                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
    279279                        }
    280                         meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
     280                        meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
    281281                        break;
    282282                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);
    286286                        break;
    287287                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);
    291291                        break;
    292292                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);
    296296                        break;
    297297                case CalvingDev2Enum:
    298298                        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);
    303303                        break;
    304304                default:
     
    571571                /*Retrieve all inputs and parameters*/
    572572                basalelement->GetVerticesCoordinates(&xyz_list);
    573                 Input* levelset_input     = basalelement->GetInput(MaskIceLevelsetEnum);                    _assert_(levelset_input);
     573                Input2* levelset_input     = basalelement->GetInput2(MaskIceLevelsetEnum);                    _assert_(levelset_input);
    574574
    575575                /* Start  looping on the number of gaussian points: */
     
    718718                        int      numnodes = element->GetNumberOfNodes();
    719719                        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);
    723723
    724724                        /*Potentially constrain nodes of this element*/
     
    746746
    747747                /*Get the fraction of the flotation thickness at the terminus*/
    748                 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum, DistanceToCalvingfrontEnum);
     748                InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
    749749                femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum);
    750750
     
    758758                        int      numnodes           = element->GetNumberOfNodes();
    759759                        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);
    764764
    765765                        /*Potentially constrain nodes of this element*/
     
    793793
    794794                /*Get the DistanceToCalvingfront*/
    795                 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
     795                InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
    796796                femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum);
    797797
     
    803803                        int      numnodes              = element->GetNumberOfNodes();
    804804                        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);
    810810
    811811                        /*First, look at ice front and figure out if any of the nodes will be calved*/
     
    841841                                int      numnodes               = element->GetNumberOfNodes();
    842842                                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);
    849849
    850850                                /*Is this element connected to a node that should be calved*/
Note: See TracChangeset for help on using the changeset viewer.