Changeset 27789


Ignore:
Timestamp:
06/15/23 12:27:15 (21 months ago)
Author:
Cheng Gong
Message:

ADD: a new calving law for calvingMIP experiments

Location:
issm/trunk-jpl/src
Files:
2 added
11 edited
2 moved

Legend:

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

    r27688 r27789  
    120120                        iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
    121121                        break;
     122                case CalvingCalvingMIPEnum:
     123                        break;
    122124
    123125                /*"Discrete" calving laws (need to specify rate as 0 so that we can still solve the level set equation)*/
     
    150152                case FrontalForcingsDefaultEnum:
    151153                        iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);
    152                         if (calvinglaw == CalvingParameterizationEnum) {
     154                        if ((calvinglaw == CalvingParameterizationEnum) || (calvinglaw == CalvingCalvingMIPEnum)) {
    153155                                iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.ablationrate",CalvingAblationrateEnum);
    154156                        }
     
    256258                case CalvingPollardEnum:
    257259                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.rc",CalvingRcEnum));
     260                        break;
     261                case CalvingCalvingMIPEnum:
     262                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.experiment",CalvingUseParamEnum));
     263                        parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
    258264                        break;
    259265                default:
     
    748754
    749755        /*Apply minimum thickness criterion*/
    750         if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum || calvinglaw==CalvingParameterizationEnum || calvinglaw==CalvingVonmisesADEnum){
     756        if(calvinglaw==CalvingMinthicknessEnum || calvinglaw==CalvingVonmisesEnum || calvinglaw==CalvingParameterizationEnum || calvinglaw==CalvingVonmisesADEnum || calvinglaw==CalvingCalvingMIPEnum){
    751757
    752758                IssmDouble mig_max = femmodel->parameters->FindParam(MigrationMaxEnum);
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r27773 r27789  
    37933793                                                                                                          case CalvingParameterizationEnum:
    37943794                                                                                                                  this->CalvingRateParameterization();
     3795                                                                                                                  break;
     3796                                                                                                          case CalvingCalvingMIPEnum:
     3797                                                                                                                  this->CalvingRateCalvingMIP();
    37953798                                                                                                                  break;
    37963799                                                                                                          case CalvingTestEnum:
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r27717 r27789  
    238238                virtual void             BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
    239239                virtual void       CalvingRateParameterization(void){_error_("not implemented yet");};
     240                virtual void       CalvingRateCalvingMIP(void){_error_("not implemented yet");};
    240241                virtual void       CalvingRateVonmises(void){_error_("not implemented yet");};
    241242                virtual void       CalvingRateVonmisesAD(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r27724 r27789  
    11151115        this->AddInput(SigmaVMEnum,&sigma_vm[0],P1DGEnum);
    11161116        this->CalvingRateToVector();
     1117
     1118        /*Clean up and return*/
     1119        delete gauss;
     1120}
     1121/*}}}*/
     1122void       Tria::CalvingRateCalvingMIP(){/*{{{*/
     1123
     1124        IssmDouble  calvingrate[NUMVERTICES];
     1125        IssmDouble  calvingratex[NUMVERTICES];
     1126        IssmDouble  calvingratey[NUMVERTICES];
     1127        int                     experiment = 1;  /* exp:1 by default */
     1128        int         dim, domaintype;
     1129        IssmDouble      vx, vy, vel, c, wrate;
     1130
     1131        /*Get problem dimension and whether there is moving front or not*/
     1132        this->FindParam(&domaintype,DomainTypeEnum);
     1133
     1134        switch(domaintype){
     1135                case Domain2DverticalEnum:   dim = 1; break;
     1136                case Domain2DhorizontalEnum: dim = 2; break;
     1137                case Domain3DEnum:           dim = 2; break;
     1138                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     1139        }
     1140        if(dim==1) _error_("not implemented in 1D...");
     1141
     1142        /*Retrieve all inputs and parameters we will need*/
     1143        Input *vx_input      = this->GetInput(VxEnum);                                _assert_(vx_input);
     1144        Input *vy_input      = this->GetInput(VyEnum);                                _assert_(vy_input);
     1145        Input *wrate_input   = this->GetInput(CalvingAblationrateEnum);               _assert_(wrate_input);
     1146
     1147        /* Use which experiment: use existing Enum */
     1148        this->FindParam(&experiment, CalvingUseParamEnum);
     1149
     1150        /* Start looping on the number of vertices: */
     1151        GaussTria* gauss=new GaussTria();
     1152        for(int iv=0;iv<NUMVERTICES;iv++){
     1153                gauss->GaussVertex(iv);
     1154
     1155                /*Get velocity components */
     1156                vx_input->GetInputValue(&vx,gauss);
     1157                vy_input->GetInputValue(&vy,gauss);
     1158                vel=sqrt(vx*vx+vy*vy)+1.e-14;
     1159
     1160
     1161                switch (experiment) {
     1162                        case 1:
     1163                        case 3:
     1164                                /* Exp 1 and 3: set c=v-wrate, wrate=0, so that w=0 */
     1165                                wrate = 0.0;
     1166                                break;
     1167                        case 2:
     1168                        case 4:
     1169                                /* Exp 2 and 4: set c=v-wrate(given)*/
     1170                                /*Get wrate*/
     1171                                wrate_input->GetInputValue(&wrate,gauss);
     1172                                break;
     1173                        default:
     1174                                _error_("The experiment is not supported yet!");
     1175                }
     1176
     1177                calvingrate[iv] = vel - wrate;
     1178                calvingratex[iv] = vx - wrate*vx/vel;
     1179                calvingratey[iv] = vy - wrate*vy/vel;
     1180        }
     1181        /*Add input*/
     1182        this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
     1183        this->AddInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
     1184        this->AddInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
    11171185
    11181186        /*Clean up and return*/
     
    44834551                case CalvingTestEnum:
    44844552                case CalvingParameterizationEnum:
     4553                case CalvingCalvingMIPEnum:
    44854554                        calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
    44864555                        calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
     
    45284597                        case CalvingLevermannEnum:
    45294598                        case CalvingPollardEnum:
     4599                        case CalvingCalvingMIPEnum:
    45304600                                calvingratex_input->GetInputValue(&c[0],&gauss);
    45314601                                calvingratey_input->GetInputValue(&c[1],&gauss);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r27688 r27789  
    6363                void                    CalvingMeltingFluxLevelset();
    6464                void                    CalvingRateParameterization();
     65                void                    CalvingRateCalvingMIP();
    6566                IssmDouble  CharacteristicLength(void);
    6667                void        ComputeBasalStress(void);
  • issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp

    r27688 r27789  
    5151                        femmodel->ElementOperationx(&Element::CalvingPollard);
    5252                        break;
     53                case CalvingCalvingMIPEnum:
     54                        femmodel->ElementOperationx(&Element::CalvingRateCalvingMIP);
     55                        break;
    5356                default:
    5457                        _error_("Caving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r27780 r27789  
    13911391        CalvingTestEnum,
    13921392        CalvingParameterizationEnum,
     1393        CalvingCalvingMIPEnum,
    13931394        CalvingVonmisesEnum,
    13941395        CalvingVonmisesADEnum,
  • issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp

    r27696 r27789  
    293293                case 10: return CalvingPollardEnum;
    294294                case 11: return CalvingVonmisesADEnum;
     295                case 12:  return CalvingCalvingMIPEnum;
    295296                default: _error_("Marshalled Calving law code \""<<enum_in<<"\" not supported yet");
    296297        }
  • issm/trunk-jpl/src/m/contrib/chenggong/visualization/plotCompareTransientFlowline.m

    r27694 r27789  
    1616%
    1717%   Author: Cheng Gong
    18 %   Date: 2023-04-10
     18%   Date: 2021-12-06
    1919
    2020N = length(velList);
     
    4646    h=colorbar;
    4747    title(h,'m/a')
    48          % add a vertical line to indicate initial ice front position
    49          id = max(find(~isnan(cumsum(vel_flowline{p}(:,1)))));
    50          icefront = flowline.Xmain(id);
    51          plot([icefront, icefront], [2007,2020], '-r')
    5248end
  • issm/trunk-jpl/src/m/exp/isoline.m

    r26929 r27789  
    258258elseif strcmp(outputformat,'struct')
    259259        %nothing to do, this is the default
     260elseif strcmp(outputformat,'longest')
     261        [~, mId] = max([contours.nods]);
     262        contours = contours(mId);
    260263else
    261264        disp('output format not supported, returning struct');
  • issm/trunk-jpl/src/m/modeldata/interpBedmachineGreenland.m

    r27622 r27789  
    3232        ncdate='2021-08-27';
    3333        ncdate='2022-03-17';
     34        ncdate='2022-05-18';
    3435        ncdate='2022-07-28';
     36        ncdate='v6.0';
     37        ncdate='v6.1';
    3538end
    3639basename = 'BedMachineGreenland';
Note: See TracChangeset for help on using the changeset viewer.