[19102] | 1 | Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp (revision 18757)
|
---|
| 4 | +++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp (revision 18758)
|
---|
| 5 | @@ -19,10 +19,9 @@
|
---|
| 6 | }
|
---|
| 7 | /*}}}*/
|
---|
| 8 | void LevelsetAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
|
---|
| 9 | - int finiteelement;
|
---|
| 10 |
|
---|
| 11 | /*Finite element type*/
|
---|
| 12 | - finiteelement = P1Enum;
|
---|
| 13 | + int finiteelement = P1Enum;
|
---|
| 14 |
|
---|
| 15 | /*Update elements: */
|
---|
| 16 | int counter=0;
|
---|
| 17 | @@ -37,7 +36,20 @@
|
---|
| 18 | iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
|
---|
| 19 | iomodel->FetchDataToInput(elements,VxEnum);
|
---|
| 20 | iomodel->FetchDataToInput(elements,VyEnum);
|
---|
| 21 | - iomodel->FetchDataToInput(elements,MasstransportCalvingrateEnum);
|
---|
| 22 | +
|
---|
| 23 | + /*Get calving parameters*/
|
---|
| 24 | + int calvinglaw;
|
---|
| 25 | + iomodel->Constant(&calvinglaw,CalvingLawEnum);
|
---|
| 26 | + switch(calvinglaw){
|
---|
| 27 | + case DefaultCalvingEnum:
|
---|
| 28 | + iomodel->FetchDataToInput(elements,CalvingCalvingrateEnum);
|
---|
| 29 | + break;
|
---|
| 30 | + case CalvingLevermannEnum:
|
---|
| 31 | + iomodel->FetchDataToInput(elements,CalvinglevermannCoeffEnum);
|
---|
| 32 | + break;
|
---|
| 33 | + default:
|
---|
| 34 | + _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
|
---|
| 35 | + }
|
---|
| 36 | }
|
---|
| 37 | /*}}}*/
|
---|
| 38 | void LevelsetAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
|
---|
| 39 | @@ -99,19 +111,21 @@
|
---|
| 40 | Element* basalelement = element->SpawnBasalElement();
|
---|
| 41 |
|
---|
| 42 | /*Intermediaries */
|
---|
| 43 | - int dim, domaintype;
|
---|
| 44 | - bool iscalvingrate;
|
---|
| 45 | + int stabilization=2;
|
---|
| 46 | + int dim, domaintype, calvinglaw;
|
---|
| 47 | + bool iscalving;
|
---|
| 48 | int i, row, col;
|
---|
| 49 | IssmDouble kappa;
|
---|
| 50 | IssmDouble Jdet, dt, D_scalar;
|
---|
| 51 | IssmDouble h,hx,hy,hz;
|
---|
| 52 | IssmDouble vel;
|
---|
| 53 | -// IssmDouble norm_dlsf;
|
---|
| 54 | + IssmDouble norm_dlsf, calvingrate;
|
---|
| 55 | IssmDouble* xyz_list = NULL;
|
---|
| 56 |
|
---|
| 57 | /*Get problem dimension and whether there is calving or not*/
|
---|
| 58 | - basalelement->FindParam(&iscalvingrate,MasstransportIscalvingrateEnum);
|
---|
| 59 | + basalelement->FindParam(&iscalving,TransientIscalvingEnum);
|
---|
| 60 | basalelement->FindParam(&domaintype,DomainTypeEnum);
|
---|
| 61 | + basalelement->FindParam(&calvinglaw,CalvingLawEnum);
|
---|
| 62 | switch(domaintype){
|
---|
| 63 | case Domain2DverticalEnum: dim = 1; break;
|
---|
| 64 | case Domain2DhorizontalEnum: dim = 2; break;
|
---|
| 65 | @@ -130,45 +144,63 @@
|
---|
| 66 | IssmDouble* D = xNew<IssmDouble>(dim*dim);
|
---|
| 67 | IssmDouble* v = xNew<IssmDouble>(dim);
|
---|
| 68 | IssmDouble* w = xNew<IssmDouble>(dim);
|
---|
| 69 | - IssmDouble* c = xNew<IssmDouble>(dim);
|
---|
| 70 | - //IssmDouble* dlsf = xNew<IssmDouble>(dim);
|
---|
| 71 | + IssmDouble* c = xNewZeroInit<IssmDouble>(dim);
|
---|
| 72 | + IssmDouble* dlsf = xNew<IssmDouble>(dim);
|
---|
| 73 |
|
---|
| 74 | /*Retrieve all inputs and parameters*/
|
---|
| 75 | basalelement->GetVerticesCoordinates(&xyz_list);
|
---|
| 76 | basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
|
---|
| 77 | - Input* vx_input=NULL;
|
---|
| 78 | - Input* vy_input=NULL;
|
---|
| 79 | - Input* calvingratex_input=NULL;
|
---|
| 80 | - Input* calvingratey_input=NULL;
|
---|
| 81 | + Input* vx_input = NULL;
|
---|
| 82 | + Input* vy_input = NULL;
|
---|
| 83 | + Input* calvingratex_input = NULL;
|
---|
| 84 | + Input* calvingratey_input = NULL;
|
---|
| 85 | + Input* lsf_slopex_input = NULL;
|
---|
| 86 | + Input* lsf_slopey_input = NULL;
|
---|
| 87 | + Input* calvingrate_input = NULL;
|
---|
| 88 | +
|
---|
| 89 | + /*Load velocities*/
|
---|
| 90 | if(domaintype==Domain2DhorizontalEnum){
|
---|
| 91 | vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 92 | vy_input=basalelement->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 93 | - if(iscalvingrate){
|
---|
| 94 | - calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
|
---|
| 95 | - calvingratey_input=basalelement->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
|
---|
| 96 | - }
|
---|
| 97 | }
|
---|
| 98 | else{
|
---|
| 99 | if(dim==1){
|
---|
| 100 | vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 101 | - if(iscalvingrate){
|
---|
| 102 | - calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
|
---|
| 103 | - }
|
---|
| 104 | }
|
---|
| 105 | if(dim==2){
|
---|
| 106 | vx_input=basalelement->GetInput(VxAverageEnum); _assert_(vx_input);
|
---|
| 107 | vy_input=basalelement->GetInput(VyAverageEnum); _assert_(vy_input);
|
---|
| 108 | - if(iscalvingrate){
|
---|
| 109 | - calvingratex_input=basalelement->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
|
---|
| 110 | - calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
|
---|
| 111 | - }
|
---|
| 112 | }
|
---|
| 113 | }
|
---|
| 114 |
|
---|
| 115 | -// Input* lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
|
---|
| 116 | -// Input* lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
|
---|
| 117 | - //Input* calvingrate_input = basalelement->GetInput(MasstransportCalvingrateEnum); _assert_(calvingrate_input);
|
---|
| 118 | -
|
---|
| 119 | + /*Load calving inputs*/
|
---|
| 120 | + if(iscalving){
|
---|
| 121 | + switch(calvinglaw){
|
---|
| 122 | + case DefaultCalvingEnum:
|
---|
| 123 | + lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
|
---|
| 124 | + if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
|
---|
| 125 | + calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input);
|
---|
| 126 | + break;
|
---|
| 127 | + case CalvingLevermannEnum:
|
---|
| 128 | + if(domaintype==Domain2DhorizontalEnum){
|
---|
| 129 | + calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
|
---|
| 130 | + calvingratey_input=basalelement->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
|
---|
| 131 | + }
|
---|
| 132 | + else{
|
---|
| 133 | + if(dim==1){
|
---|
| 134 | + calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
|
---|
| 135 | + }
|
---|
| 136 | + if(dim==2){
|
---|
| 137 | + calvingratex_input=basalelement->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
|
---|
| 138 | + calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
|
---|
| 139 | + }
|
---|
| 140 | + }
|
---|
| 141 | + break;
|
---|
| 142 | + default:
|
---|
| 143 | + _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
|
---|
| 144 | + }
|
---|
| 145 | + }
|
---|
| 146 | +
|
---|
| 147 | /* Start looping on the number of gaussian points: */
|
---|
| 148 | Gauss* gauss=basalelement->NewGauss(2);
|
---|
| 149 | for(int ig=gauss->begin();ig<gauss->end();ig++){
|
---|
| 150 | @@ -192,34 +224,45 @@
|
---|
| 151 | GetBprime(Bprime,basalelement,xyz_list,gauss);
|
---|
| 152 | vx_input->GetInputValue(&v[0],gauss); // in 3D case, add mesh velocity
|
---|
| 153 | vy_input->GetInputValue(&v[1],gauss);
|
---|
| 154 | - if(iscalvingrate){
|
---|
| 155 | - calvingratex_input->GetInputValue(&c[0],gauss); // in 3D case, add mesh velocity
|
---|
| 156 | - calvingratey_input->GetInputValue(&c[1],gauss);
|
---|
| 157 | - for(i=0;i<dim;i++) w[i]=v[i]-c[i];
|
---|
| 158 | +
|
---|
| 159 | + /*Get calving speed*/
|
---|
| 160 | + if(iscalving){
|
---|
| 161 | + switch(calvinglaw){
|
---|
| 162 | + case DefaultCalvingEnum:
|
---|
| 163 | + lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
|
---|
| 164 | + if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
|
---|
| 165 | + calvingrate_input->GetInputValue(&calvingrate,gauss);
|
---|
| 166 | +
|
---|
| 167 | + norm_dlsf=0.;
|
---|
| 168 | + for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2);
|
---|
| 169 | + norm_dlsf=sqrt(norm_dlsf);
|
---|
| 170 | +
|
---|
| 171 | + if(norm_dlsf>1.e-10)
|
---|
| 172 | + for(i=0;i<dim;i++) c[i]=calvingrate*dlsf[i]/norm_dlsf;
|
---|
| 173 | + else
|
---|
| 174 | + for(i=0;i<dim;i++) c[i]=0.;
|
---|
| 175 | + break;
|
---|
| 176 | + case CalvingLevermannEnum:
|
---|
| 177 | + calvingratex_input->GetInputValue(&c[0],gauss); // in 3D case, add mesh velocity
|
---|
| 178 | + if(dim==2) calvingratey_input->GetInputValue(&c[1],gauss);
|
---|
| 179 | + break;
|
---|
| 180 | + default:
|
---|
| 181 | + _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
|
---|
| 182 | + }
|
---|
| 183 | }
|
---|
| 184 | - else{
|
---|
| 185 | - for(i=0;i<dim;i++) w[i]=v[i];
|
---|
| 186 | - }
|
---|
| 187 | - //lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
|
---|
| 188 | - //lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
|
---|
| 189 | - //calvingrate_input->GetInputValue(&calvingrate,gauss);
|
---|
| 190 |
|
---|
| 191 | - //norm_dlsf=0.;
|
---|
| 192 | - //for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2);
|
---|
| 193 | - //norm_dlsf=sqrt(norm_dlsf);
|
---|
| 194 | + /*Levelset speed is ice velocity - calving rate*/
|
---|
| 195 | + for(i=0;i<dim;i++) w[i]=v[i]-c[i];
|
---|
| 196 |
|
---|
| 197 | - //if(norm_dlsf>1.e-10)
|
---|
| 198 | - // for(i=0;i<dim;i++) c[i]=calvingrate*dlsf[i]/norm_dlsf;
|
---|
| 199 | - //else
|
---|
| 200 | - //for(i=0;i<dim;i++) c[i]=0.;
|
---|
| 201 | -
|
---|
| 202 | -
|
---|
| 203 | - for(row=0;row<dim;row++)
|
---|
| 204 | - for(col=0;col<dim;col++)
|
---|
| 205 | + /*Compute D*/
|
---|
| 206 | + for(row=0;row<dim;row++){
|
---|
| 207 | + for(col=0;col<dim;col++){
|
---|
| 208 | if(row==col)
|
---|
| 209 | - D[row*dim+col]=D_scalar*w[row];
|
---|
| 210 | + D[row*dim+col]=D_scalar*w[row];
|
---|
| 211 | else
|
---|
| 212 | - D[row*dim+col]=0.;
|
---|
| 213 | + D[row*dim+col]=0.;
|
---|
| 214 | + }
|
---|
| 215 | + }
|
---|
| 216 |
|
---|
| 217 | TripleMultiply(B,dim,numnodes,1,
|
---|
| 218 | D,dim,dim,0,
|
---|
| 219 | @@ -227,9 +270,8 @@
|
---|
| 220 | &Ke->values[0],1);
|
---|
| 221 |
|
---|
| 222 | /* Stabilization */
|
---|
| 223 | - int stabilization=2;
|
---|
| 224 | vel=0.;
|
---|
| 225 | - for(i=0;i<dim;i++) vel+=w[i]*w[i];
|
---|
| 226 | + for(i=0;i<dim;i++) vel+=v[i]*v[i];
|
---|
| 227 | vel=sqrt(vel)+1.e-14;
|
---|
| 228 | switch(stabilization){
|
---|
| 229 | case 0:
|
---|
| 230 | @@ -255,10 +297,10 @@
|
---|
| 231 | case 2:
|
---|
| 232 | /* Streamline Upwinding */
|
---|
| 233 | basalelement->ElementSizes(&hx,&hy,&hz);
|
---|
| 234 | - h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) );
|
---|
| 235 | + h=sqrt( pow(hx*v[0]/vel,2) + pow(hy*v[1]/vel,2) );
|
---|
| 236 | for(row=0;row<dim;row++)
|
---|
| 237 | for(col=0;col<dim;col++)
|
---|
| 238 | - D[row*dim+col] = D_scalar*h/(2.*vel)*w[row]*w[col];
|
---|
| 239 | + D[row*dim+col] = D_scalar*h/(2.*vel)*v[row]*v[col];
|
---|
| 240 |
|
---|
| 241 | TripleMultiply(Bprime,dim,numnodes,1,
|
---|
| 242 | D,dim,dim,0,
|
---|
| 243 | @@ -279,7 +321,7 @@
|
---|
| 244 | xDelete<IssmDouble>(v);
|
---|
| 245 | xDelete<IssmDouble>(w);
|
---|
| 246 | xDelete<IssmDouble>(c);
|
---|
| 247 | - //xDelete<IssmDouble>(dlsf);
|
---|
| 248 | + xDelete<IssmDouble>(dlsf);
|
---|
| 249 | delete gauss;
|
---|
| 250 | if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
|
---|
| 251 | return Ke;
|
---|
| 252 | Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
|
---|
| 253 | ===================================================================
|
---|
| 254 | --- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 18757)
|
---|
| 255 | +++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 18758)
|
---|
| 256 | @@ -208,6 +208,12 @@
|
---|
| 257 | DamageEnum,
|
---|
| 258 | NewDamageEnum,
|
---|
| 259 | StressIntensityFactorEnum,
|
---|
| 260 | + CalvingLawEnum,
|
---|
| 261 | + CalvingCalvingrateEnum,
|
---|
| 262 | + CalvingLevermannEnum,
|
---|
| 263 | + DefaultCalvingEnum,
|
---|
| 264 | + CalvingRequestedOutputsEnum,
|
---|
| 265 | + CalvinglevermannCoeffEnum,
|
---|
| 266 | CalvingratexEnum,
|
---|
| 267 | CalvingrateyEnum,
|
---|
| 268 | CalvingratexAverageEnum,
|
---|
| 269 | @@ -249,13 +255,10 @@
|
---|
| 270 | Domain3DEnum,
|
---|
| 271 | MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script)
|
---|
| 272 | MasstransportHydrostaticAdjustmentEnum,
|
---|
| 273 | - MasstransportIscalvingrateEnum,
|
---|
| 274 | - MasstransportLevermannCalvingCoeffEnum,
|
---|
| 275 | MasstransportIsfreesurfaceEnum,
|
---|
| 276 | MasstransportMinThicknessEnum,
|
---|
| 277 | MasstransportPenaltyFactorEnum,
|
---|
| 278 | MasstransportSpcthicknessEnum,
|
---|
| 279 | - MasstransportCalvingrateEnum,
|
---|
| 280 | MasstransportStabilizationEnum,
|
---|
| 281 | MasstransportVertexPairingEnum,
|
---|
| 282 | MasstransportNumRequestedOutputsEnum,
|
---|
| 283 | @@ -313,6 +316,7 @@
|
---|
| 284 | TransientIsgiaEnum,
|
---|
| 285 | TransientIsdamageevolutionEnum,
|
---|
| 286 | TransientIshydrologyEnum,
|
---|
| 287 | + TransientIscalvingEnum,
|
---|
| 288 | TransientNumRequestedOutputsEnum,
|
---|
| 289 | TransientRequestedOutputsEnum,
|
---|
| 290 | PotentialEnum,
|
---|
| 291 | Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
|
---|
| 292 | ===================================================================
|
---|
| 293 | --- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 18757)
|
---|
| 294 | +++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 18758)
|
---|
| 295 | @@ -216,6 +216,12 @@
|
---|
| 296 | case DamageEnum : return "Damage";
|
---|
| 297 | case NewDamageEnum : return "NewDamage";
|
---|
| 298 | case StressIntensityFactorEnum : return "StressIntensityFactor";
|
---|
| 299 | + case CalvingLawEnum : return "CalvingLaw";
|
---|
| 300 | + case CalvingCalvingrateEnum : return "CalvingCalvingrate";
|
---|
| 301 | + case CalvingLevermannEnum : return "CalvingLevermann";
|
---|
| 302 | + case DefaultCalvingEnum : return "DefaultCalving";
|
---|
| 303 | + case CalvingRequestedOutputsEnum : return "CalvingRequestedOutputs";
|
---|
| 304 | + case CalvinglevermannCoeffEnum : return "CalvinglevermannCoeff";
|
---|
| 305 | case CalvingratexEnum : return "Calvingratex";
|
---|
| 306 | case CalvingrateyEnum : return "Calvingratey";
|
---|
| 307 | case CalvingratexAverageEnum : return "CalvingratexAverage";
|
---|
| 308 | @@ -257,13 +263,10 @@
|
---|
| 309 | case Domain3DEnum : return "Domain3D";
|
---|
| 310 | case MiscellaneousNameEnum : return "MiscellaneousName";
|
---|
| 311 | case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
|
---|
| 312 | - case MasstransportIscalvingrateEnum : return "MasstransportIscalvingrate";
|
---|
| 313 | - case MasstransportLevermannCalvingCoeffEnum : return "MasstransportLevermannCalvingCoeff";
|
---|
| 314 | case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface";
|
---|
| 315 | case MasstransportMinThicknessEnum : return "MasstransportMinThickness";
|
---|
| 316 | case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor";
|
---|
| 317 | case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
|
---|
| 318 | - case MasstransportCalvingrateEnum : return "MasstransportCalvingrate";
|
---|
| 319 | case MasstransportStabilizationEnum : return "MasstransportStabilization";
|
---|
| 320 | case MasstransportVertexPairingEnum : return "MasstransportVertexPairing";
|
---|
| 321 | case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
|
---|
| 322 | @@ -321,6 +324,7 @@
|
---|
| 323 | case TransientIsgiaEnum : return "TransientIsgia";
|
---|
| 324 | case TransientIsdamageevolutionEnum : return "TransientIsdamageevolution";
|
---|
| 325 | case TransientIshydrologyEnum : return "TransientIshydrology";
|
---|
| 326 | + case TransientIscalvingEnum : return "TransientIscalving";
|
---|
| 327 | case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
|
---|
| 328 | case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
|
---|
| 329 | case PotentialEnum : return "Potential";
|
---|
| 330 | Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
|
---|
| 331 | ===================================================================
|
---|
| 332 | --- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 18757)
|
---|
| 333 | +++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 18758)
|
---|
| 334 | @@ -219,6 +219,12 @@
|
---|
| 335 | else if (strcmp(name,"Damage")==0) return DamageEnum;
|
---|
| 336 | else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
|
---|
| 337 | else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
|
---|
| 338 | + else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
|
---|
| 339 | + else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
|
---|
| 340 | + else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
|
---|
| 341 | + else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
|
---|
| 342 | + else if (strcmp(name,"CalvingRequestedOutputs")==0) return CalvingRequestedOutputsEnum;
|
---|
| 343 | + else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
|
---|
| 344 | else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
|
---|
| 345 | else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
|
---|
| 346 | else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
|
---|
| 347 | @@ -253,23 +259,20 @@
|
---|
| 348 | else if (strcmp(name,"MeshY")==0) return MeshYEnum;
|
---|
| 349 | else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
|
---|
| 350 | else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
|
---|
| 351 | - else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
|
---|
| 352 | + else stage=3;
|
---|
| 353 | + }
|
---|
| 354 | + if(stage==3){
|
---|
| 355 | + if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
|
---|
| 356 | else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
|
---|
| 357 | else if (strcmp(name,"Domain2Dhorizontal")==0) return Domain2DhorizontalEnum;
|
---|
| 358 | else if (strcmp(name,"Domain2Dvertical")==0) return Domain2DverticalEnum;
|
---|
| 359 | else if (strcmp(name,"Domain3D")==0) return Domain3DEnum;
|
---|
| 360 | else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
|
---|
| 361 | - else stage=3;
|
---|
| 362 | - }
|
---|
| 363 | - if(stage==3){
|
---|
| 364 | - if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
|
---|
| 365 | - else if (strcmp(name,"MasstransportIscalvingrate")==0) return MasstransportIscalvingrateEnum;
|
---|
| 366 | - else if (strcmp(name,"MasstransportLevermannCalvingCoeff")==0) return MasstransportLevermannCalvingCoeffEnum;
|
---|
| 367 | + else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
|
---|
| 368 | else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum;
|
---|
| 369 | else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum;
|
---|
| 370 | else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum;
|
---|
| 371 | else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
|
---|
| 372 | - else if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum;
|
---|
| 373 | else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
|
---|
| 374 | else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
|
---|
| 375 | else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
|
---|
| 376 | @@ -327,6 +330,7 @@
|
---|
| 377 | else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
|
---|
| 378 | else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
|
---|
| 379 | else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
|
---|
| 380 | + else if (strcmp(name,"TransientIscalving")==0) return TransientIscalvingEnum;
|
---|
| 381 | else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
|
---|
| 382 | else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
|
---|
| 383 | else if (strcmp(name,"Potential")==0) return PotentialEnum;
|
---|
| 384 | @@ -378,14 +382,14 @@
|
---|
| 385 | else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
|
---|
| 386 | else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
|
---|
| 387 | else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
|
---|
| 388 | - else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
|
---|
| 389 | + else stage=4;
|
---|
| 390 | + }
|
---|
| 391 | + if(stage==4){
|
---|
| 392 | + if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
|
---|
| 393 | else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
|
---|
| 394 | else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
|
---|
| 395 | else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
|
---|
| 396 | - else stage=4;
|
---|
| 397 | - }
|
---|
| 398 | - if(stage==4){
|
---|
| 399 | - if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
|
---|
| 400 | + else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
|
---|
| 401 | else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
|
---|
| 402 | else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
|
---|
| 403 | else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
|
---|
| 404 | @@ -501,14 +505,14 @@
|
---|
| 405 | else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
|
---|
| 406 | else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
|
---|
| 407 | else if (strcmp(name,"StringParam")==0) return StringParamEnum;
|
---|
| 408 | - else if (strcmp(name,"Seg")==0) return SegEnum;
|
---|
| 409 | + else stage=5;
|
---|
| 410 | + }
|
---|
| 411 | + if(stage==5){
|
---|
| 412 | + if (strcmp(name,"Seg")==0) return SegEnum;
|
---|
| 413 | else if (strcmp(name,"SegInput")==0) return SegInputEnum;
|
---|
| 414 | else if (strcmp(name,"Tria")==0) return TriaEnum;
|
---|
| 415 | else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
|
---|
| 416 | - else stage=5;
|
---|
| 417 | - }
|
---|
| 418 | - if(stage==5){
|
---|
| 419 | - if (strcmp(name,"Tetra")==0) return TetraEnum;
|
---|
| 420 | + else if (strcmp(name,"Tetra")==0) return TetraEnum;
|
---|
| 421 | else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
|
---|
| 422 | else if (strcmp(name,"Penta")==0) return PentaEnum;
|
---|
| 423 | else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
|
---|
| 424 | @@ -624,14 +628,14 @@
|
---|
| 425 | else if (strcmp(name,"P2")==0) return P2Enum;
|
---|
| 426 | else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
|
---|
| 427 | else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
|
---|
| 428 | - else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
|
---|
| 429 | + else stage=6;
|
---|
| 430 | + }
|
---|
| 431 | + if(stage==6){
|
---|
| 432 | + if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
|
---|
| 433 | else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
|
---|
| 434 | else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
|
---|
| 435 | else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
|
---|
| 436 | - else stage=6;
|
---|
| 437 | - }
|
---|
| 438 | - if(stage==6){
|
---|
| 439 | - if (strcmp(name,"P1P1")==0) return P1P1Enum;
|
---|
| 440 | + else if (strcmp(name,"P1P1")==0) return P1P1Enum;
|
---|
| 441 | else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
|
---|
| 442 | else if (strcmp(name,"MINI")==0) return MINIEnum;
|
---|
| 443 | else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
|
---|
| 444 | @@ -747,14 +751,14 @@
|
---|
| 445 | else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
|
---|
| 446 | else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
|
---|
| 447 | else if (strcmp(name,"TransientIslevelset")==0) return TransientIslevelsetEnum;
|
---|
| 448 | - else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
|
---|
| 449 | + else stage=7;
|
---|
| 450 | + }
|
---|
| 451 | + if(stage==7){
|
---|
| 452 | + if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
|
---|
| 453 | else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
|
---|
| 454 | else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
|
---|
| 455 | else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
|
---|
| 456 | - else stage=7;
|
---|
| 457 | - }
|
---|
| 458 | - if(stage==7){
|
---|
| 459 | - if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
|
---|
| 460 | + else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
|
---|
| 461 | else if (strcmp(name,"Seaiceatm")==0) return SeaiceatmEnum;
|
---|
| 462 | else if (strcmp(name,"Seaiceocean")==0) return SeaiceoceanEnum;
|
---|
| 463 | else if (strcmp(name,"SeaiceThickness")==0) return SeaiceThicknessEnum;
|
---|
| 464 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
|
---|
| 465 | ===================================================================
|
---|
| 466 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 18757)
|
---|
| 467 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp (revision 18758)
|
---|
| 468 | @@ -66,6 +66,7 @@
|
---|
| 469 | parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum));
|
---|
| 470 | parameters->AddObject(iomodel->CopyConstantObject(InversionIscontrolEnum));
|
---|
| 471 | parameters->AddObject(iomodel->CopyConstantObject(InversionTypeEnum));
|
---|
| 472 | + parameters->AddObject(iomodel->CopyConstantObject(CalvingLawEnum));
|
---|
| 473 | if(solution_type==SeaiceSolutionEnum){
|
---|
| 474 | }
|
---|
| 475 | else{
|
---|
| 476 | @@ -82,8 +83,7 @@
|
---|
| 477 | parameters->AddObject(iomodel->CopyConstantObject(TransientIslevelsetEnum));
|
---|
| 478 | parameters->AddObject(iomodel->CopyConstantObject(TransientIsdamageevolutionEnum));
|
---|
| 479 | parameters->AddObject(iomodel->CopyConstantObject(TransientIshydrologyEnum));
|
---|
| 480 | - parameters->AddObject(iomodel->CopyConstantObject(MasstransportIscalvingrateEnum));
|
---|
| 481 | - parameters->AddObject(iomodel->CopyConstantObject(MasstransportLevermannCalvingCoeffEnum));
|
---|
| 482 | + parameters->AddObject(iomodel->CopyConstantObject(TransientIscalvingEnum));
|
---|
| 483 | parameters->AddObject(iomodel->CopyConstantObject(MaterialsRheologyLawEnum));
|
---|
| 484 | parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
|
---|
| 485 |
|
---|
| 486 | Index: ../trunk-jpl/src/c/cores/transient_core.cpp
|
---|
| 487 | ===================================================================
|
---|
| 488 | --- ../trunk-jpl/src/c/cores/transient_core.cpp (revision 18757)
|
---|
| 489 | +++ ../trunk-jpl/src/c/cores/transient_core.cpp (revision 18758)
|
---|
| 490 | @@ -20,11 +20,11 @@
|
---|
| 491 |
|
---|
| 492 | /*parameters: */
|
---|
| 493 | IssmDouble starttime,finaltime,dt,yts;
|
---|
| 494 | - bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isgia,islevelset,isdamageevolution,ishydrology,iscalvingrate;
|
---|
| 495 | + bool isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isgia,islevelset,isdamageevolution,ishydrology,iscalving;
|
---|
| 496 | bool save_results,dakota_analysis;
|
---|
| 497 | bool time_adapt=false;
|
---|
| 498 | int output_frequency;
|
---|
| 499 | - int domaintype,groundingline_migration;
|
---|
| 500 | + int domaintype,groundingline_migration,calvinglaw;
|
---|
| 501 | int numoutputs = 0;
|
---|
| 502 | Analysis *analysis = NULL;
|
---|
| 503 | char** requested_outputs = NULL;
|
---|
| 504 | @@ -52,7 +52,8 @@
|
---|
| 505 | femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum);
|
---|
| 506 | femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
|
---|
| 507 | femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
|
---|
| 508 | - femmodel->parameters->FindParam(&iscalvingrate,MasstransportIscalvingrateEnum);
|
---|
| 509 | + femmodel->parameters->FindParam(&iscalving,TransientIscalvingEnum);
|
---|
| 510 | + femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum);
|
---|
| 511 | if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
|
---|
| 512 | femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
|
---|
| 513 | if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
|
---|
| 514 | @@ -101,7 +102,7 @@
|
---|
| 515 | }
|
---|
| 516 |
|
---|
| 517 | if(islevelset){
|
---|
| 518 | - if(iscalvingrate){
|
---|
| 519 | + if(iscalving && calvinglaw==CalvingLevermannEnum){
|
---|
| 520 | if(VerboseSolution()) _printf0_(" computing calving rate\n");
|
---|
| 521 | femmodel->StrainRateparallelx();
|
---|
| 522 | femmodel->StrainRateperpendicularx();
|
---|
| 523 | Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
|
---|
| 524 | ===================================================================
|
---|
| 525 | --- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 18757)
|
---|
| 526 | +++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 18758)
|
---|
| 527 | @@ -438,7 +438,7 @@
|
---|
| 528 | Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 529 | Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input);
|
---|
| 530 | Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input);
|
---|
| 531 | - this->parameters->FindParam(&propcoeff,MasstransportLevermannCalvingCoeffEnum);
|
---|
| 532 | + Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input);
|
---|
| 533 |
|
---|
| 534 | /* Start looping on the number of vertices: */
|
---|
| 535 | gauss=new GaussTria();
|
---|
| 536 | @@ -451,6 +451,7 @@
|
---|
| 537 | vel=vx*vx+vy*vy;
|
---|
| 538 | strainparallel_input->GetInputValue(&strainparallel,gauss);
|
---|
| 539 | strainperpendicular_input->GetInputValue(&strainperpendicular,gauss);
|
---|
| 540 | + levermanncoeff_input->GetInputValue(&propcoeff,gauss);
|
---|
| 541 |
|
---|
| 542 | /*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */
|
---|
| 543 | calvingrate[iv]=propcoeff*strainparallel*strainperpendicular;
|
---|
| 544 | @@ -464,7 +465,7 @@
|
---|
| 545 | /*Add input*/
|
---|
| 546 | this->inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));
|
---|
| 547 | this->inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));
|
---|
| 548 | - this->inputs->AddInput(new TriaInput(MasstransportCalvingrateEnum,&calvingrate[0],P1Enum));
|
---|
| 549 | + this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));
|
---|
| 550 |
|
---|
| 551 | /*Clean up and return*/
|
---|
| 552 | delete gauss;
|
---|
| 553 | Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
|
---|
| 554 | ===================================================================
|
---|
| 555 | --- ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 18757)
|
---|
| 556 | +++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 18758)
|
---|
| 557 | @@ -366,8 +366,8 @@
|
---|
| 558 | Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
|
---|
| 559 | Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
|
---|
| 560 | Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input);
|
---|
| 561 | - Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input);
|
---|
| 562 | - this->parameters->FindParam(&propcoeff,MasstransportLevermannCalvingCoeffEnum);
|
---|
| 563 | + Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input);
|
---|
| 564 | + Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input);
|
---|
| 565 |
|
---|
| 566 | /* Start looping on the number of vertices: */
|
---|
| 567 | gauss=new GaussPenta();
|
---|
| 568 | @@ -380,6 +380,7 @@
|
---|
| 569 | vel=vx*vx+vy*vy;
|
---|
| 570 | strainparallel_input->GetInputValue(&strainparallel,gauss);
|
---|
| 571 | strainperpendicular_input->GetInputValue(&strainperpendicular,gauss);
|
---|
| 572 | + levermanncoeff_input->GetInputValue(&propcoeff,gauss);
|
---|
| 573 |
|
---|
| 574 | /*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */
|
---|
| 575 | calvingrate[iv]=propcoeff*strainparallel*strainperpendicular;
|
---|
| 576 | @@ -393,7 +394,7 @@
|
---|
| 577 | /*Add input*/
|
---|
| 578 | this->inputs->AddInput(new PentaInput(CalvingratexEnum,&calvingratex[0],P1Enum));
|
---|
| 579 | this->inputs->AddInput(new PentaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));
|
---|
| 580 | - this->inputs->AddInput(new PentaInput(MasstransportCalvingrateEnum,&calvingrate[0],P1Enum));
|
---|
| 581 | + this->inputs->AddInput(new PentaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));
|
---|
| 582 |
|
---|
| 583 | /*Clean up and return*/
|
---|
| 584 | delete gauss;
|
---|
| 585 | Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
|
---|
| 586 | ===================================================================
|
---|
| 587 | --- ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 18757)
|
---|
| 588 | +++ ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 18758)
|
---|
| 589 | @@ -1091,7 +1091,7 @@
|
---|
| 590 | name==LevelsetfunctionSlopeXEnum ||
|
---|
| 591 | name==LevelsetfunctionSlopeYEnum ||
|
---|
| 592 | name==LevelsetfunctionPicardEnum ||
|
---|
| 593 | - name==MasstransportCalvingrateEnum ||
|
---|
| 594 | + //name==CalvingCalvingrateEnum ||
|
---|
| 595 | name==GradientEnum ||
|
---|
| 596 | name==OldGradientEnum ||
|
---|
| 597 | name==ConvergedEnum ||
|
---|
| 598 | @@ -1211,7 +1211,7 @@
|
---|
| 599 | break;
|
---|
| 600 | case CalvingratexEnum:
|
---|
| 601 | case CalvingrateyEnum:
|
---|
| 602 | - case MasstransportCalvingrateEnum:
|
---|
| 603 | + case CalvingCalvingrateEnum:
|
---|
| 604 | this->StrainRateparallel();
|
---|
| 605 | this->StrainRateperpendicular();
|
---|
| 606 | this->CalvingRateLevermann();
|
---|