Changeset 23652
- Timestamp:
- 01/23/19 13:41:28 (6 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 4 added
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r23644 r23652 227 227 ./modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp\ 228 228 ./modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp\ 229 ./modules/FrontalForcingsx/FrontalForcingsx.cpp\ 229 230 ./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\ 230 231 ./modules/SpcNodesx/SpcNodesx.cpp\ -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r23644 r23652 58 58 case DefaultCalvingEnum: 59 59 iomodel->FetchDataToInput(elements,"md.calving.calvingrate",CalvingCalvingrateEnum); 60 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);61 60 break; 62 61 case CalvingLevermannEnum: 63 62 iomodel->FetchDataToInput(elements,"md.calving.coeff",CalvinglevermannCoeffEnum); 64 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvinglevermannMeltingrateEnum);65 63 break; 66 64 case CalvingVonmisesEnum: 67 65 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 68 66 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 69 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);70 67 break; 71 68 case CalvingMinthicknessEnum: 72 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);73 69 break; 74 70 case CalvingHabEnum: 75 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);76 71 iomodel->FetchDataToInput(elements,"md.calving.flotation_fraction",CalvingHabFractionEnum); 77 72 break; 78 73 case CalvingCrevasseDepthEnum: 79 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);80 74 iomodel->FetchDataToInput(elements,"md.calving.water_height",WaterheightEnum); 81 75 break; … … 83 77 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 84 78 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 85 iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);86 79 break; 87 80 default: 88 81 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); 82 } 83 84 /*Get frontal melt parameters*/ 85 int melt_parameterization; 86 iomodel->FindConstant(&melt_parameterization,"md.frontalforcings.melt_parameterization"); 87 switch(melt_parameterization){ 88 case 0: 89 iomodel->FetchDataToInput(elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum); 90 break; 91 case 1: 92 iomodel->FetchDataToInput(elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum); 93 iomodel->FetchDataToInput(elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 94 iomodel->FetchDataToInput(elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum); 95 break; 96 default: 97 _error_("Frontal forcing model not supported yet"); 89 98 } 90 99 } … … 94 103 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.reinit_frequency",LevelsetReinitFrequencyEnum)); 95 104 parameters->AddObject(iomodel->CopyConstantObject("md.levelset.calving_max",CalvingMaxEnum)); 105 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.melt_parameterization",FrontalForcingsParamEnum)); 106 96 107 int calvinglaw; 97 108 iomodel->FindConstant(&calvinglaw,"md.calving.law"); … … 114 125 default: 115 126 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); 127 } 128 129 /*Get frontal melt parameters*/ 130 int melt_parameterization; 131 iomodel->FindConstant(&melt_parameterization,"md.frontalforcings.melt_parameterization"); 132 if(melt_parameterization==1){ 133 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.numberofbasins",FrontalForcingsNumberofBasinsEnum)); 116 134 } 117 135 return; … … 250 268 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 251 269 } 252 meltingrate_input = basalelement->GetInput(Calving levermannMeltingrateEnum); _assert_(meltingrate_input);270 meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input); 253 271 break; 254 272 case CalvingMinthicknessEnum: -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r23644 r23652 223 223 virtual void GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating)=0; 224 224 virtual IssmDouble GetGroundedPortion(IssmDouble* xyz_list)=0; 225 virtual IssmDouble GetIcefrontArea(){_error_("not implemented");}; 225 226 virtual void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0; 226 227 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0; … … 300 301 virtual void ResetFSBasalBoundaryCondition()=0; 301 302 virtual void ResetHooks()=0; 303 virtual void RignotMeltParameterization(void){_error_("not implemented yet");}; 302 304 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M)=0; 303 305 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r23644 r23652 1397 1397 1398 1398 return phi; 1399 } 1400 /*}}}*/ 1401 IssmDouble Tria::GetIcefrontArea(){/*{{{*/ 1402 1403 IssmDouble bed[NUMVERTICES]; //basinId[NUMVERTICES]; 1404 IssmDouble Haverage,frontarea; 1405 IssmDouble x1,y1,x2,y2,distance; 1406 IssmDouble lsf[NUMVERTICES], Haux[NUMVERTICES], surfaces[NUMVERTICES], bases[NUMVERTICES]; 1407 int* indices=NULL; 1408 IssmDouble* H=NULL;; 1409 int nrfrontbed,numiceverts; 1410 1411 /*Retrieve all inputs and parameters*/ 1412 GetInputListOnVertices(&bed[0],BedEnum); 1413 GetInputListOnVertices(&surfaces[0],SurfaceEnum); 1414 GetInputListOnVertices(&bases[0],BaseEnum); 1415 GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum); 1416 1417 if(!IsZeroLevelset(MaskIceLevelsetEnum)) return 0; 1418 1419 nrfrontbed=0; 1420 for(int i=0;i<NUMVERTICES;i++){ 1421 /*Find if bed<0*/ 1422 if(bed[i]<0.) nrfrontbed++; 1423 } 1424 1425 if(nrfrontbed==3){ 1426 /*2. Find coordinates of where levelset crosses 0*/ 1427 int numiceverts; 1428 IssmDouble s[2],x[2],y[2]; 1429 int *indices = NULL; 1430 this->GetLevelsetIntersection(&indices, &numiceverts,&s[0],MaskIceLevelsetEnum,0.); 1431 _assert_(numiceverts); 1432 1433 /*3 Write coordinates*/ 1434 IssmDouble xyz_list[NUMVERTICES][3]; 1435 ::GetVerticesCoordinates(&xyz_list[0][0],this->vertices,NUMVERTICES); 1436 int counter = 0; 1437 if((numiceverts>0) && (numiceverts<NUMVERTICES)){ 1438 for(int i=0;i<numiceverts;i++){ 1439 for(int n=numiceverts;n<NUMVERTICES;n++){ // iterate over no-ice vertices 1440 x[counter] = xyz_list[indices[i]][0]+s[counter]*(xyz_list[indices[n]][0]-xyz_list[indices[i]][0]); 1441 y[counter] = xyz_list[indices[i]][1]+s[counter]*(xyz_list[indices[n]][1]-xyz_list[indices[i]][1]); 1442 counter++; 1443 } 1444 } 1445 } 1446 else if(numiceverts==NUMVERTICES){ //NUMVERTICES ice vertices: calving front lies on element edge 1447 1448 for(int i=0;i<NUMVERTICES;i++){ 1449 if(lsf[indices[i]]==0.){ 1450 x[counter]=xyz_list[indices[i]][0]; 1451 y[counter]=xyz_list[indices[i]][1]; 1452 counter++; 1453 } 1454 if(counter==2) break; 1455 } 1456 if(counter==1){ 1457 /*We actually have only 1 vertex on levelset, write a single point as a segment*/ 1458 x[counter]=x[0]; 1459 y[counter]=y[0]; 1460 counter++; 1461 } 1462 } 1463 else{ 1464 _error_("not sure what's going on here..."); 1465 } 1466 x1=x[0]; y1=y[0]; x2=x[1]; y2=y[1]; 1467 distance=sqrt(pow((x1-x2),2)+pow((y1-y2),2)); 1468 } 1469 else return 0; 1470 1471 IssmDouble s[2]; // s:fraction of intersected triangle edges, that lies inside ice 1472 this->GetLevelsetIntersection(&indices, &numiceverts, s, MaskIceLevelsetEnum, 0.); 1473 int numthk=numiceverts+2; 1474 H=xNew<IssmDouble>(numthk); 1475 for(int iv=0;iv<NUMVERTICES;iv++) Haux[iv]=-bed[indices[iv]]; //sort bed in ice/noice 1476 1477 switch(numiceverts){ 1478 case 1: // average over triangle 1479 H[0]=Haux[0]; 1480 H[1]=Haux[0]+s[0]*(Haux[1]-Haux[0]); 1481 H[2]=Haux[0]+s[1]*(Haux[2]-Haux[0]); 1482 Haverage=(H[1]+H[2])/2; 1483 break; 1484 case 2: // average over quadrangle 1485 H[0]=Haux[0]; 1486 H[1]=Haux[1]; 1487 H[2]=Haux[0]+s[0]*(Haux[2]-Haux[0]); 1488 H[3]=Haux[1]+s[1]*(Haux[2]-Haux[1]); 1489 Haverage=(H[2]+H[3])/2; 1490 break; 1491 default: 1492 _error_("Number of ice covered vertices wrong in Tria::GetIceFrontArea(void)"); 1493 break; 1494 } 1495 frontarea=distance*Haverage; 1496 _assert_(frontarea>0); 1497 return frontarea; 1399 1498 } 1400 1499 /*}}}*/ … … 3262 3361 } 3263 3362 /*}}}*/ 3363 void Tria::RignotMeltParameterization(){/*{{{*/ 3364 3365 IssmDouble A, B, alpha, beta; 3366 IssmDouble bed,qsg,qsg_basin,TF,yts; 3367 int numbasins; 3368 IssmDouble basinid[NUMVERTICES]; 3369 IssmDouble* basin_icefront_area=NULL; 3370 3371 /* Coefficients */ 3372 A = 3e-4; // 3373 B = 0.15; // 3374 alpha = 0.39; 3375 beta = 1.18; 3376 3377 /*Get inputs*/ 3378 Input* bed_input = this->GetInput(BedEnum); _assert_(bed_input); 3379 Input* qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3380 Input* TF_input = this->GetInput(FrontalForcingsThermalForcingEnum); _assert_(TF_input); 3381 GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum); 3382 3383 this->FindParam(&yts, ConstantsYtsEnum); 3384 this->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 3385 this->parameters->FindParam(&basin_icefront_area,&numbasins,FrontalForcingsBasinIcefrontAreaEnum); 3386 3387 IssmDouble meltrates[NUMVERTICES]; //frontal melt-rate 3388 3389 /* Start looping on the number of vertices: */ 3390 GaussTria* gauss=new GaussTria(); 3391 for(int iv=0;iv<NUMVERTICES;iv++){ 3392 gauss->GaussVertex(iv); 3393 3394 /* Get variables */ 3395 bed_input->GetInputValue(&bed,gauss); 3396 qsg_input->GetInputValue(&qsg,gauss); 3397 TF_input->GetInputValue(&TF,gauss); 3398 3399 if(basin_icefront_area[reCast<int>(basinid[iv])-1]==0.) meltrates[iv]=0.; 3400 else{ 3401 /* change the unit of qsg (m^3/d -> m/d) with ice front area */ 3402 qsg_basin=qsg/basin_icefront_area[reCast<int>(basinid[iv])-1]; 3403 3404 /* calculate melt rates */ 3405 meltrates[iv]=(A*max(-bed,0.)*pow(max(qsg_basin,0.),alpha)+B)*pow(max(TF,0.),beta)/86400; //[m/s] 3406 } 3407 3408 if(xIsNan<IssmDouble>(meltrates[iv])) _error_("NaN found in vector"); 3409 if(xIsInf<IssmDouble>(meltrates[iv])) _error_("Inf found in vector"); 3410 } 3411 3412 /*Add input*/ 3413 this->inputs->AddInput(new TriaInput(CalvingMeltingrateEnum,&meltrates[0],P1Enum)); 3414 3415 /*Cleanup and return*/ 3416 delete gauss; 3417 } 3418 /*}}}*/ 3264 3419 void Tria::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N, int M){/*{{{*/ 3265 3420 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r23644 r23652 79 79 void GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating); 80 80 IssmDouble GetGroundedPortion(IssmDouble* xyz_list); 81 IssmDouble GetIcefrontArea(); 81 82 void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum); 82 83 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level); … … 120 121 void ResetHooks(); 121 122 void ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments); 123 void RignotMeltParameterization(); 122 124 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M); 123 125 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r23644 r23652 1496 1496 1497 1497 }/*}}}*/ 1498 void FemModel::IcefrontAreax(){/*{{{*/ 1499 1500 int numvertices = this->GetElementsWidth(); 1501 int numbasins; 1502 IssmDouble* BasinId = xNew<IssmDouble>(numvertices); 1503 this->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 1504 IssmDouble* basin_icefront_area = xNewZeroInit<IssmDouble>(numbasins); 1505 1506 for(int basin=1;basin<numbasins+1;basin++){ 1507 IssmDouble local_icefront_area = 0; 1508 IssmDouble total_icefront_area; 1509 1510 for(int i=0;i<this->elements->Size();i++){ 1511 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1512 element->GetInputListOnVertices(BasinId,FrontalForcingsBasinIdEnum); 1513 for(int j=0;j<numvertices;j++){ 1514 if(BasinId[j]==basin){ 1515 local_icefront_area+=element->GetIcefrontArea(); 1516 break; 1517 } 1518 } 1519 } 1520 ISSM_MPI_Reduce(&local_icefront_area,&total_icefront_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); 1521 ISSM_MPI_Bcast(&total_icefront_area,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 1522 1523 basin_icefront_area[basin-1]=total_icefront_area; 1524 } 1525 1526 this->parameters->AddObject(new DoubleVecParam(FrontalForcingsBasinIcefrontAreaEnum,basin_icefront_area,numbasins)); 1527 1528 xDelete<IssmDouble>(basin_icefront_area); 1529 }/*}}}*/ 1498 1530 void FemModel::IceMassx(IssmDouble* pM, bool scaled){/*{{{*/ 1499 1531 … … 2390 2422 } 2391 2423 /*}}}*/ 2424 void FemModel::RignotMeltParameterizationx(){/*{{{*/ 2425 2426 for(int i=0;i<elements->Size();i++){ 2427 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i)); 2428 element->RignotMeltParameterization(); 2429 } 2430 } 2431 /*}}}*/ 2392 2432 void FemModel::StrainRateparallelx(){/*{{{*/ 2393 2433 -
issm/trunk-jpl/src/c/classes/FemModel.h
r23642 r23652 100 100 void GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector); 101 101 void GroundedAreax(IssmDouble* pV, bool scaled); 102 void IcefrontAreax(); 102 103 void IceMassx(IssmDouble* pV, bool scaled); 103 104 void IceVolumex(IssmDouble* pV, bool scaled); … … 122 123 void StrainRateeffectivex(); 123 124 void StressIntensityFactorx(); 125 void RignotMeltParameterizationx(); 124 126 void TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled); 125 127 void TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled); -
issm/trunk-jpl/src/c/cores/movingfront_core.cpp
r23232 r23652 36 36 /* start the work from here */ 37 37 Calvingx(femmodel); 38 FrontalForcingsx(femmodel); 38 39 if(VerboseSolution()) _printf0_(" computing level set transport\n"); 39 40 -
issm/trunk-jpl/src/c/modules/modules.h
r23602 r23652 38 38 #include "./Gradjx/Gradjx.h" 39 39 #include "./GroundinglineMigrationx/GroundinglineMigrationx.h" 40 #include "./FrontalForcingsx/FrontalForcingsx.h" 40 41 #include "./InputDepthAverageAtBasex/InputDepthAverageAtBasex.h" 41 42 #include "./InputDuplicatex/InputDuplicatex.h" -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r23644 r23652 134 134 FrictionDeltaEnum, 135 135 FrictionVoidRatioEnum, 136 FrontalForcingsBasinIcefrontAreaEnum, 137 FrontalForcingsBasinIdEnum, 138 FrontalForcingsNumberofBasinsEnum, 139 FrontalForcingsParamEnum, 136 140 GiaCrossSectionShapeEnum, 137 141 GroundinglineMigrationEnum, … … 444 448 CalvingHabFractionEnum, 445 449 CalvinglevermannCoeffEnum, 446 CalvinglevermannMeltingrateEnum,447 450 CalvingMeltingrateEnum, 448 451 CalvingratexAverageEnum, … … 495 498 FrictionQEnum, 496 499 FrictionWaterLayerEnum, 500 FrontalForcingsSubglacialDischargeEnum, 501 FrontalForcingsThermalForcingEnum, 497 502 HydrologyWatercolumnMaxEnum, 498 503 FrictionTillFrictionAngleEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r23644 r23652 142 142 case FrictionDeltaEnum : return "FrictionDelta"; 143 143 case FrictionVoidRatioEnum : return "FrictionVoidRatio"; 144 case FrontalForcingsBasinIcefrontAreaEnum : return "FrontalForcingsBasinIcefrontArea"; 145 case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId"; 146 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins"; 147 case FrontalForcingsParamEnum : return "FrontalForcingsParam"; 144 148 case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape"; 145 149 case GroundinglineMigrationEnum : return "GroundinglineMigration"; … … 450 454 case CalvingHabFractionEnum : return "CalvingHabFraction"; 451 455 case CalvinglevermannCoeffEnum : return "CalvinglevermannCoeff"; 452 case CalvinglevermannMeltingrateEnum : return "CalvinglevermannMeltingrate";453 456 case CalvingMeltingrateEnum : return "CalvingMeltingrate"; 454 457 case CalvingratexAverageEnum : return "CalvingratexAverage"; … … 501 504 case FrictionQEnum : return "FrictionQ"; 502 505 case FrictionWaterLayerEnum : return "FrictionWaterLayer"; 506 case FrontalForcingsSubglacialDischargeEnum : return "FrontalForcingsSubglacialDischarge"; 507 case FrontalForcingsThermalForcingEnum : return "FrontalForcingsThermalForcing"; 503 508 case HydrologyWatercolumnMaxEnum : return "HydrologyWatercolumnMax"; 504 509 case FrictionTillFrictionAngleEnum : return "FrictionTillFrictionAngle"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r23644 r23652 145 145 else if (strcmp(name,"FrictionDelta")==0) return FrictionDeltaEnum; 146 146 else if (strcmp(name,"FrictionVoidRatio")==0) return FrictionVoidRatioEnum; 147 else if (strcmp(name,"FrontalForcingsBasinIcefrontArea")==0) return FrontalForcingsBasinIcefrontAreaEnum; 148 else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum; 149 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum; 150 else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum; 147 151 else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum; 148 152 else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum; … … 256 260 else if (strcmp(name,"ModelId")==0) return ModelIdEnum; 257 261 else if (strcmp(name,"Nodes")==0) return NodesEnum; 258 else if (strcmp(name,"NumModels")==0) return NumModelsEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"NumModels")==0) return NumModelsEnum; 259 266 else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum; 260 267 else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum; 261 268 else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum; 269 else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum; 266 270 else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum; 267 271 else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum; … … 379 383 else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum; 380 384 else if (strcmp(name,"StressbalancePenaltyFactor")==0) return StressbalancePenaltyFactorEnum; 381 else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum; 382 389 else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum; 383 390 else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum; 384 391 else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum; 392 else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum; 389 393 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 390 394 else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; … … 459 463 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 460 464 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; 461 else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;462 465 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 463 466 else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum; … … 503 506 else if (strcmp(name,"FrictionC")==0) return FrictionCEnum; 504 507 else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum; 505 else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;506 else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;507 else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"FrictionP")==0) return FrictionPEnum; 511 if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum; 512 else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum; 513 else if (strcmp(name,"FrictionM")==0) return FrictionMEnum; 514 else if (strcmp(name,"FrictionP")==0) return FrictionPEnum; 512 515 else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum; 513 516 else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum; 514 517 else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum; 518 else if (strcmp(name,"FrontalForcingsSubglacialDischarge")==0) return FrontalForcingsSubglacialDischargeEnum; 519 else if (strcmp(name,"FrontalForcingsThermalForcing")==0) return FrontalForcingsThermalForcingEnum; 515 520 else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum; 516 521 else if (strcmp(name,"FrictionTillFrictionAngle")==0) return FrictionTillFrictionAngleEnum; … … 624 629 else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum; 625 630 else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum; 626 else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum; 627 635 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 628 636 else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum; 629 637 else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum; 630 638 else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum; 639 else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum; 635 640 else if (strcmp(name,"SmbEC")==0) return SmbECEnum; 636 641 else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum; … … 747 752 else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum; 748 753 else if (strcmp(name,"Adjointp")==0) return AdjointpEnum; 749 else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum; 750 758 else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum; 751 759 else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum; 752 760 else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum; 753 761 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum; 762 else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum; 758 763 else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; 759 764 else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; … … 870 875 else if (strcmp(name,"Gset")==0) return GsetEnum; 871 876 else if (strcmp(name,"Gsl")==0) return GslEnum; 872 else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum; 873 881 else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum; 874 882 else if (strcmp(name,"Hook")==0) return HookEnum; 875 883 else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum; 876 884 else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum; 885 else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum; 881 886 else if (strcmp(name,"HydrologydcEplThicknessStacked")==0) return HydrologydcEplThicknessStackedEnum; 882 887 else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum; … … 993 998 else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum; 994 999 else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum; 995 else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum; 996 1004 else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum; 997 1005 else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum; 998 1006 else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum; 999 1007 else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 1008 else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 1004 1009 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 1005 1010 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; … … 1116 1121 else if (strcmp(name,"SealevelAbsolute")==0) return SealevelAbsoluteEnum; 1117 1122 else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum; 1118 else if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum; 1119 1127 else if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum; 1120 1128 else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum; 1121 1129 else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum; 1122 1130 else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum; 1131 else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum; 1127 1132 else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum; 1128 1133 else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum; -
issm/trunk-jpl/src/m/classes/calving.m
r21049 r23652 30 30 function self = extrude(self,md) % {{{ 31 31 self.calvingrate=project3d(md,'vector',self.calvingrate,'type','node'); 32 self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');33 32 end % }}} 34 33 function self = setdefaultparameters(self) % {{{ … … 40 39 41 40 md = checkfield(md,'fieldname','calving.calvingrate','>=',0,'timeseries',1,'NaN',1,'Inf',1); 42 md = checkfield(md,'fieldname','calving.meltingrate','>=',0,'timeseries',1,'NaN',1,'Inf',1);43 41 end % }}} 44 42 function disp(self) % {{{ 45 43 disp(sprintf(' Calving parameters:')); 46 44 fielddisplay(self,'calvingrate','calving rate at given location [m/a]'); 47 fielddisplay(self,'meltingrate','melting rate at given location [m/a]');48 45 end % }}} 49 46 function marshall(self,prefix,md,fid) % {{{ … … 51 48 WriteData(fid,prefix,'name','md.calving.law','data',1,'format','Integer'); 52 49 WriteData(fid,prefix,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts); 53 WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);54 50 end % }}} 55 51 function savemodeljs(self,fid,modelname) % {{{ -
issm/trunk-jpl/src/m/classes/calvingcrevassedepth.m
r23609 r23652 30 30 end % }}} 31 31 function self = extrude(self,md) % {{{ 32 self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');33 32 end % }}} 34 33 function self = setdefaultparameters(self) % {{{ … … 43 42 md = checkfield(md,'fieldname','calving.crevasse_opening_stress','numel',[1],'values',[0,1]); 44 43 md = checkfield(md,'fieldname','calving.water_height','NaN',1,'Inf',1,'timeseries',1,'>=',0); 45 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);46 44 end % }}} 47 45 function disp(self) % {{{ … … 49 47 fielddisplay(self,'crevasse_opening_stress','0: stress only in the ice-flow direction, 1: max principal'); 50 48 fielddisplay(self,'water_height','water height in the crevasse [m]'); 51 fielddisplay(self,'meltingrate','melting rate at given location [m/a]');52 49 53 50 end % }}} … … 57 54 WriteData(fid,prefix,'object',self,'fieldname','crevasse_opening_stress','format','Integer'); 58 55 WriteData(fid,prefix,'object',self,'fieldname','water_height','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 59 WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);60 56 end % }}} 61 57 end -
issm/trunk-jpl/src/m/classes/calvinglevermann.m
r22292 r23652 30 30 function self = extrude(self,md) % {{{ 31 31 self.coeff=project3d(md,'vector',self.coeff,'type','node'); 32 self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');33 32 end % }}} 34 33 function self = setdefaultparameters(self) % {{{ … … 42 41 43 42 md = checkfield(md,'fieldname','calving.coeff','>',0,'size',[md.mesh.numberofvertices 1]); 44 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);45 43 end % }}} 46 44 function disp(self) % {{{ 47 45 disp(sprintf(' Calving Levermann parameters:')); 48 46 fielddisplay(self,'coeff','proportionality coefficient in Levermann model'); 49 fielddisplay(self,'meltingrate','melting rate at given location [m/a]');50 47 51 48 end % }}} … … 54 51 WriteData(fid,prefix,'name','md.calving.law','data',3,'format','Integer'); 55 52 WriteData(fid,prefix,'object',self,'fieldname','coeff','format','DoubleMat','mattype',1); 56 WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);57 53 end % }}} 58 54 end -
issm/trunk-jpl/src/m/classes/calvingminthickness.m
r21992 r23652 29 29 end % }}} 30 30 function self = extrude(self,md) % {{{ 31 self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');32 31 end % }}} 33 32 function self = setdefaultparameters(self) % {{{ … … 41 40 42 41 md = checkfield(md,'fieldname','calving.min_thickness','>',0,'NaN',1,'Inf',1); 43 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>=',0);44 42 end % }}} 45 43 function disp(self) % {{{ 46 44 disp(sprintf(' Calving Minimum thickness:')); 47 45 fielddisplay(self,'min_thickness','minimum thickness below which no ice is allowed'); 48 fielddisplay(self,'meltingrate','melting rate at given location [m/a]');49 46 50 47 end % }}} … … 53 50 WriteData(fid,prefix,'name','md.calving.law','data',4,'format','Integer'); 54 51 WriteData(fid,prefix,'object',self,'fieldname','min_thickness','format','Double'); 55 WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);56 52 end % }}} 57 53 end -
issm/trunk-jpl/src/m/classes/calvingvonmises.m
r22192 r23652 8 8 stress_threshold_groundedice = 0.; 9 9 stress_threshold_floatingice = 0.; 10 meltingrate =NaN;10 meltingrate=NaN; 11 11 end 12 12 methods … … 30 30 end % }}} 31 31 function self = extrude(self,md) % {{{ 32 self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');33 32 end % }}} 34 33 function self = setdefaultparameters(self) % {{{ … … 44 43 md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1); 45 44 md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1); 46 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);47 45 end % }}} 48 46 function disp(self) % {{{ … … 50 48 fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]'); 51 49 fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]'); 52 fielddisplay(self,'meltingrate','melting rate at given location [m/a]');53 50 54 51 end % }}} … … 58 55 WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1); 59 56 WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1); 60 WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);61 57 end % }}} 62 58 end -
issm/trunk-jpl/src/m/classes/model.m
r23503 r23652 40 40 levelset = 0; 41 41 calving = 0; 42 frontalforcings = 0; 42 43 love = 0; 43 44 gia = 0; … … 153 154 md.settings.sb_coupling_frequency=1; 154 155 end 155 156 %2019 Jan.. 157 if isa(md.frontalforcings,'double'); 158 if(~isnan(md.calving.meltingrate)) 159 disp('Warning: md.calving.meltingrate is now in md.frontalforcings'); 160 end 161 md.frontalforcings=frontalforcings(md.calving); 162 end 156 163 end% }}} 157 164 end … … 307 314 md.calving.coeff=project2d(md,md.calving.coeff,1); 308 315 end 309 if isprop(md. calving,'meltingrate') & ~isnan(md.calving.meltingrate),310 md. calving.meltingrate=project2d(md,md.calving.meltingrate,1);316 if isprop(md.frontalforcings,'meltingrate') & ~isnan(md.frontalforcings.meltingrate), 317 md.frontalforcings.meltingrate=project2d(md,md.frontalforcings.meltingrate,1); 311 318 end 312 319 … … 840 847 md.levelset=extrude(md.levelset,md); 841 848 md.calving=extrude(md.calving,md); 849 md.frontalforcings=extrude(md.frontalforcings,md); 842 850 md.hydrology = extrude(md.hydrology,md); 843 851 md.slr = extrude(md.slr,md); … … 1148 1156 md.smb=SMBhenning(structmd.surfaceforcings); 1149 1157 end 1150 1151 1158 end% }}} 1152 1159 function md = setdefaultparameters(md) % {{{ … … 1182 1189 md.levelset = levelset(); 1183 1190 md.calving = calving(); 1191 md.frontalforcings = frontalforcings(); 1184 1192 md.gia = giaivins(); 1185 1193 md.esa = esa(); … … 1357 1365 disp(sprintf('%19s: %-22s -- %s','levelset' ,['[1x1 ' class(self.levelset) ']'],'parameters for moving boundaries (level-set method)')); 1358 1366 disp(sprintf('%19s: %-22s -- %s','calving' ,['[1x1 ' class(self.calving) ']'],'parameters for calving')); 1367 disp(sprintf('%19s: %-22s -- %s','frontalforcings' ,['[1x1 ' class(self.frontalforcings) ']'],'parameters for frontalforcings')); 1359 1368 disp(sprintf('%19s: %-22s -- %s','gia' ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution')); 1360 1369 disp(sprintf('%19s: %-22s -- %s','esa' ,['[1x1 ' class(self.esa) ']'],'parameters for elastic adjustment solution')); -
issm/trunk-jpl/test/NightlyRun/test540.m
r22563 r23652 10 10 md.mask.ice_levelset = 1e4*(md.mask.ice_levelset + 0.5); 11 11 md.calving=calvingvonmises(); 12 md. calving.meltingrate = zeros(md.mesh.numberofvertices,1);12 md.frontalforcings.meltingrate = zeros(md.mesh.numberofvertices,1); 13 13 md.transient.ismovingfront = 1; 14 14 md.levelset.spclevelset = NaN(md.mesh.numberofvertices,1); -
issm/trunk-jpl/test/NightlyRun/test804.m
r21585 r23652 16 16 17 17 md.calving.calvingrate=1000.*ones(md.mesh.numberofvertices,1); 18 md. calving.meltingrate=zeros(md.mesh.numberofvertices,1);18 md.frontalforcings.meltingrate=zeros(md.mesh.numberofvertices,1); 19 19 20 20 md=solve(md,'Transient'); -
issm/trunk-jpl/test/NightlyRun/test805.m
r23010 r23652 23 23 24 24 md.calving.calvingrate=1000.*ones(md.mesh.numberofvertices,1); 25 md. calving.meltingrate=zeros(md.mesh.numberofvertices,1);25 md.frontalforcings.meltingrate=zeros(md.mesh.numberofvertices,1); 26 26 md.groundingline.melt_interpolation='SubelementMelt1'; 27 27 md.levelset.stabilization=2; -
issm/trunk-jpl/test/NightlyRun/test806.m
r21585 r23652 27 27 md.calving=calvinglevermann(); 28 28 md.calving.coeff=4.89e13*ones(md.mesh.numberofvertices,1); 29 md. calving.meltingrate=zeros(md.mesh.numberofvertices,1);29 md.frontalforcings.meltingrate=zeros(md.mesh.numberofvertices,1); 30 30 md.levelset.spclevelset=NaN(md.mesh.numberofvertices,1); 31 31 -
issm/trunk-jpl/test/NightlyRun/test807.m
r21585 r23652 26 26 27 27 md.calving.calvingrate=zeros(md.mesh.numberofvertices,1); 28 md. calving.meltingrate=10000*ones(md.mesh.numberofvertices,1);28 md.frontalforcings.meltingrate=10000*ones(md.mesh.numberofvertices,1); 29 29 md.levelset.spclevelset=NaN(md.mesh.numberofvertices,1); 30 30 -
issm/trunk-jpl/test/NightlyRun/test808.m
r23094 r23652 27 27 md.calving=calvingminthickness(); 28 28 md.calving.min_thickness=400; 29 md. calving.meltingrate=zeros(md.mesh.numberofvertices,1);29 md.frontalforcings.meltingrate=zeros(md.mesh.numberofvertices,1); 30 30 md.levelset.spclevelset=NaN(md.mesh.numberofvertices,1); 31 31 md.levelset.reinit_frequency=1; -
issm/trunk-jpl/test/NightlyRun/test809.m
r23608 r23652 20 20 md.calving.crevasse_opening_stress=1; 21 21 md.calving.water_height=50*ones(md.mesh.numberofvertices,1); 22 md. calving.meltingrate=zeros(md.mesh.numberofvertices,1);22 md.frontalforcings.meltingrate=zeros(md.mesh.numberofvertices,1); 23 23 md.levelset.spclevelset=NaN(md.mesh.numberofvertices,1); 24 24 md.levelset.reinit_frequency=1; -
issm/trunk-jpl/test/Par/ValleyGlacierShelf.par
r22575 r23652 75 75 %Masstransport; 76 76 md.calving.calvingrate = 0.*ones(md.mesh.numberofvertices,1); 77 md. calving.meltingrate = 0.*ones(md.mesh.numberofvertices,1);77 md.frontalforcings.meltingrate = 0.*ones(md.mesh.numberofvertices,1); 78 78 md.levelset.spclevelset=NaN(md.mesh.numberofvertices,1); 79 79 md.masstransport.stabilization = 1.;
Note:
See TracChangeset
for help on using the changeset viewer.