Changeset 17364
- Timestamp:
- 02/27/14 16:38:27 (11 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r17282 r17364 15 15 /*}}}*/ 16 16 void LevelsetAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 17 int stabilization,finiteelement;17 int finiteelement; 18 18 19 19 /*Finite element type*/ … … 33 33 iomodel->FetchDataToInput(elements,VxEnum); 34 34 iomodel->FetchDataToInput(elements,VyEnum); 35 iomodel->FetchDataToInput(elements,MasstransportCalvingrateEnum); 35 36 36 37 } … … 93 94 /*Intermediaries */ 94 95 const int dim = 2; // solve for LSF in horizontal plane only 96 int i, row, col; 95 97 IssmDouble kappa; 96 98 IssmDouble Jdet, dt, D_scalar; 97 99 IssmDouble h,hx,hy,hz; 98 IssmDouble vel,vx,vy,bx,by; 100 IssmDouble vel,v[dim]; 101 IssmDouble calvingrate, c[dim]; 102 IssmDouble dlsf[dim], norm_dlsf, normal[dim]; 99 103 IssmDouble* xyz_list = NULL; 100 104 … … 107 111 IssmDouble* B = xNew<IssmDouble>(dim*numnodes); 108 112 IssmDouble* Bprime = xNew<IssmDouble>(dim*numnodes); 109 IssmDouble D[dim][dim] , K[dim][dim];113 IssmDouble D[dim][dim]; 110 114 111 115 /*Retrieve all inputs and parameters*/ … … 114 118 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 115 119 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input); 120 Input* lsf_slopex_input = element->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 121 Input* lsf_slopey_input = element->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 122 Input* calvingrate_input = element->GetInput(MasstransportCalvingrateEnum); _assert_(calvingrate_input); 116 123 117 124 /* Start looping on the number of gaussian points: */ … … 136 143 GetB(B,element,xyz_list,gauss); 137 144 GetBprime(Bprime,element,xyz_list,gauss); 138 vx_input->GetInputValue(&vx,gauss); // in 3D case, add mesh velocity 139 vy_input->GetInputValue(&vy,gauss); 140 bx=0.; // horizontal mass change velocities (melt/refreeze/calving) FIXME: insert values from model here 141 by=0.; 142 D[0][0]=D_scalar*(vx+bx); 143 D[0][1]=0.; 144 D[1][0]=0.; 145 D[1][1]=D_scalar*(vy+by); 145 vx_input->GetInputValue(&v[0],gauss); // in 3D case, add mesh velocity 146 vy_input->GetInputValue(&v[1],gauss); 147 lsf_slopex_input->GetInputValue(&dlsf[0],gauss); 148 lsf_slopey_input->GetInputValue(&dlsf[1],gauss); 149 calvingrate_input->GetInputValue(&calvingrate,gauss); 150 151 norm_dlsf=0.; 152 for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2); 153 norm_dlsf=sqrt(norm_dlsf); 154 155 if(norm_dlsf>1.e-10) 156 for(i=0;i<dim;i++) c[i]=calvingrate*dlsf[i]/norm_dlsf; 157 else 158 for(i=0;i<dim;i++) c[i]=0.; 159 160 for(row=0;row<dim;row++) 161 for(col=0;col<dim;col++) 162 D[row][col]=((row==col)?D_scalar*(v[row]-c[row]):0.); 163 146 164 TripleMultiply(B,dim,numnodes,1, 147 165 &D[0][0],dim,dim,0, … … 151 169 /* Stabilization */ 152 170 int stabilization=2; 171 vel=0.; 172 for(i=0;i<dim;i++) vel+=pow(v[i],2); 173 vel=sqrt(vel)+1.e-14; 153 174 switch(stabilization){ 154 175 case 0: … … 158 179 /* Artificial Diffusion */ 159 180 element->ElementSizes(&hx,&hy,&hz); 160 vel=sqrt(vx*vx + vy*vy) + 1e-14; 161 h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) ); //FIXME: is this correct? 181 h=sqrt( pow(hx*v[0]/vel,2) + pow(hy*v[1]/vel,2) ); //FIXME: is this correct? 162 182 163 183 kappa=h*vel/2.; //FIXME: insert suitable value for kappa 164 //GetBprime(Bprime,element,xyz_list,gauss); // recalculation of Bprime needed? 165 D[0][0]=D_scalar*kappa; 166 D[0][1]=0.; 167 D[1][0]=0.; 168 D[1][1]=D_scalar*kappa; 184 for(row=0;row<dim;row++) 185 for(col=0;col<dim;col++) 186 D[row][col]=((row==col)?D_scalar*kappa:0.); 187 169 188 TripleMultiply(Bprime,dim,numnodes,1, 170 189 &D[0][0],dim,dim,0, … … 175 194 /* Streamline Upwinding */ 176 195 element->ElementSizes(&hx,&hy,&hz); 177 vel=sqrt(vx*vx + vy*vy )+1.e-14; 178 h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) ); 179 K[0][0]=h/(2.*vel)*vx*vx; K[0][1]=h/(2.*vel)*vx*vy; 180 K[1][0]=h/(2.*vel)*vy*vx; K[1][1]=h/(2.*vel)*vy*vy; 181 for(int i=0;i<dim;i++) for(int j=0;j<dim;j++) K[i][j] = D_scalar*K[i][j]; 182 183 //GetBprime(Bprime,element,xyz_list,gauss); 196 h=sqrt( pow(hx*v[0]/vel,2) + pow(hy*v[1]/vel,2) ); 197 for(row=0;row<dim;row++) 198 for(col=0;col<dim;col++) 199 D[row][col] = D_scalar*h/(2.*vel)*v[row]*v[col]; 200 184 201 TripleMultiply(Bprime,dim,numnodes,1, 185 & K[0][0],dim,dim,0,202 &D[0][0],dim,dim,0, 186 203 Bprime,dim,numnodes,0, 187 204 &Ke->values[0],1); … … 203 220 204 221 /*Intermediaries */ 205 int i, ig; 222 const int dim = 2; 223 int i, ig, k; 206 224 IssmDouble Jdet,dt; 207 IssmDouble phi;225 IssmDouble lsf; 208 226 IssmDouble* xyz_list = NULL; 209 227 … … 230 248 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 231 249 element->NodalFunctions(basis,gauss); 232 levelset_input->GetInputValue(&phi,gauss); 233 for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*phi*basis[i]; 250 251 /* old function value */ 252 levelset_input->GetInputValue(&lsf,gauss); 253 for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*lsf*basis[i]; 234 254 } 235 255 … … 320 340 321 341 }/*}}}*/ 322 342 void LevelsetAnalysis::SetDistanceOnIntersectedElements(FemModel* femmodel){/*{{{*/ 343 344 /* Intermediaries */ 345 int i,k; 346 IssmDouble dmaxp=0.,dmaxm=0,val=0.; 347 348 /*Initialize vector with number of vertices*/ 349 int numvertices=femmodel->vertices->NumberOfVertices(); 350 Element* element; 351 352 Vector<IssmDouble>* vec_dist_zerolevelset = NULL; 353 GetVectorFromInputsx(&vec_dist_zerolevelset, femmodel, MaskIceLevelsetEnum, VertexEnum); 354 355 /* set NaN on elements intersected by zero levelset */ 356 for(i=0;i<femmodel->elements->Size();i++){ 357 element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 358 if(element->IsZeroLevelset(MaskIceLevelsetEnum)) 359 for(k=0;k<element->GetNumberOfVertices();k++) 360 vec_dist_zerolevelset->SetValue(element->vertices[k]->Sid(),NAN,INS_VAL); 361 } 362 363 /* set distance on elements intersected by zero levelset */ 364 for(i=0;i<femmodel->elements->Size();i++){ 365 element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 366 if(element->IsZeroLevelset(MaskIceLevelsetEnum)){ 367 SetDistanceToZeroLevelsetElement(vec_dist_zerolevelset, element); 368 369 /* Get maximum distance to interface along vertices */ 370 for(k=0;k<element->GetNumberOfVertices();k++){ 371 vec_dist_zerolevelset->GetValue(&val,element->vertices[k]->Sid()); 372 if((val>0.) && (val>dmaxp)) 373 dmaxp=val; 374 else if((val<0.) && (val<dmaxm)) 375 dmaxm=val; 376 } 377 } 378 } 379 380 /* set all none intersected vertices to max/min distance */ 381 for(i=0;i<numvertices;i++){ 382 vec_dist_zerolevelset->GetValue(&val,i); 383 if(val==1.) //FIXME: improve check 384 vec_dist_zerolevelset->SetValue(i,3.*dmaxp,INS_VAL); 385 else if(val==-1.) 386 vec_dist_zerolevelset->SetValue(i,3.*dmaxm,INS_VAL); 387 } 388 389 /*Assemble vector and serialize */ 390 vec_dist_zerolevelset->Assemble(); 391 IssmDouble* dist_zerolevelset=vec_dist_zerolevelset->ToMPISerial(); 392 InputUpdateFromVectorx(femmodel,dist_zerolevelset,MaskIceLevelsetEnum,VertexSIdEnum); 393 394 /*Clean up and return*/ 395 delete vec_dist_zerolevelset; 396 delete dist_zerolevelset; 397 }/*}}}*/ 398 void LevelsetAnalysis::SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element){/*{{{*/ 399 400 if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) 401 return; 402 403 /* Intermediaries */ 404 const int dim=3; 405 int i,d; 406 int numvertices=element->GetNumberOfVertices(); 407 IssmDouble s0[dim], s1[dim], v[dim]; 408 IssmDouble dist,lsf_old; 409 410 IssmDouble* lsf = xNew<IssmDouble>(numvertices); 411 IssmDouble* sign_lsf = xNew<IssmDouble>(numvertices); 412 IssmDouble* signed_dist = xNew<IssmDouble>(numvertices); 413 IssmDouble* xyz_list = NULL; 414 IssmDouble* xyz_list_zero = NULL; 415 416 /* retrieve inputs and parameters */ 417 element->GetVerticesCoordinates(&xyz_list); 418 element->GetInputListOnVertices(lsf,MaskIceLevelsetEnum); 419 420 /* get sign of levelset function */ 421 for(i=0;i<numvertices;i++) 422 sign_lsf[i]=(lsf[i]>=0.?1.:-1.); 423 424 element->ZeroLevelsetCoordinates(&xyz_list_zero, xyz_list, MaskIceLevelsetEnum); 425 for(d=0;d<dim;d++){ 426 s0[d]=xyz_list_zero[0+d]; 427 s1[d]=xyz_list_zero[3+d]; 428 } 429 430 /* get signed_distance of vertices to zero levelset straight */ 431 for(i=0;i<numvertices;i++){ 432 for(d=0;d<dim;d++) 433 v[d]=xyz_list[3*i+d]; 434 dist=GetDistanceToStraight(&v[0],&s0[0],&s1[0]); 435 signed_dist[i]=sign_lsf[i]*dist; 436 } 437 438 /* insert signed_distance into vec_signed_dist, if computed distance is smaller */ 439 for(i=0;i<numvertices;i++){ 440 vec_signed_dist->GetValue(&lsf_old, element->vertices[i]->Sid()); 441 if(xIsNan<IssmDouble>(lsf_old) || fabs(signed_dist[i])<fabs(lsf_old)) 442 vec_signed_dist->SetValue(element->vertices[i]->Sid(),signed_dist[i],INS_VAL); 443 } 444 445 xDelete<IssmDouble>(lsf); 446 xDelete<IssmDouble>(sign_lsf); 447 xDelete<IssmDouble>(signed_dist); 448 xDelete<IssmDouble>(xyz_list); 449 xDelete<IssmDouble>(xyz_list_zero); 450 }/*}}}*/ 451 IssmDouble LevelsetAnalysis::GetDistanceToStraight(IssmDouble* q, IssmDouble* s0, IssmDouble* s1){/*{{{*/ 452 // returns distance d of point q to straight going through points s0, s1 453 // d=|a x b|/|b| 454 // with a=q-s0, b=s1-s0 455 456 /* Intermediaries */ 457 const int dim=2; 458 int i; 459 IssmDouble a[dim], b[dim]; 460 IssmDouble norm_b; 461 462 for(i=0;i<dim;i++){ 463 a[i]=q[i]-s0[i]; 464 b[i]=s1[i]-s0[i]; 465 } 466 467 norm_b=0.; 468 for(i=0;i<dim;i++) 469 norm_b+=b[i]*b[i]; 470 norm_b=sqrt(norm_b); 471 _assert_(norm_b>0.); 472 473 return fabs(a[0]*b[1]-a[1]*b[0])/norm_b; 474 }/*}}}*/ 475 -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h
r17230 r17364 11 11 class LevelsetAnalysis: public Analysis{ 12 12 13 13 public: 14 14 /*Model processing*/ 15 15 int DofsPerNode(int** doflist,int meshtype,int approximation); … … 27 27 ElementVector* CreatePVector(Element* element); 28 28 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 29 30 29 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 30 void UpdateConstraints(FemModel* femmodel); 31 31 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 32 32 void GetBprime(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss); 33 33 void SetDistanceOnIntersectedElements(FemModel* femmodel); 34 void SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element); 35 IssmDouble GetDistanceToStraight(IssmDouble* q, IssmDouble* s0, IssmDouble* s1); 34 36 }; 35 37 #endif -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r17362 r17364 463 463 name==LevelsetfunctionSlopeYEnum || 464 464 name==LevelsetfunctionPicardEnum || 465 name==MasstransportCalvingrateEnum || 465 466 name==GradientEnum || 466 467 name==OldGradientEnum || -
issm/trunk-jpl/src/c/cores/transient_core.cpp
r17274 r17364 93 93 } 94 94 95 if(islevelset){ 96 /* set distance on elements intersected by zero level set */ 97 LevelsetAnalysis* lsfanalysis = new LevelsetAnalysis(); 98 lsfanalysis->SetDistanceOnIntersectedElements(femmodel); 99 delete lsfanalysis; 100 } 101 95 102 while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime. 96 103 … … 125 132 if(islevelset){ 126 133 if(VerboseSolution()) _printf0_(" computing movement of ice boundaries\n"); 127 128 /* get slope of lsf for computation of normal on ice domain*/ 134 /* smoothen slope of lsf for computation of normal on ice domain*/ 129 135 levelsetfunctionslope_core(femmodel); 130 136 131 /* extrapolate along normal*/137 /* extrapolate velocities onto domain with no ice */ 132 138 Analysis* extanalysis = new ExtrapolationAnalysis(); 133 139 const int nvars=2; … … 139 145 delete extanalysis; 140 146 147 /* solve level set equation */ 141 148 analysis = new LevelsetAnalysis(); 142 149 analysis->Core(femmodel); … … 149 156 int outputs[1] = {IceMaskNodeActivationEnum}; 150 157 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1); 151 152 158 } 153 159 -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17353 r17364 217 217 MasstransportPenaltyFactorEnum, 218 218 MasstransportSpcthicknessEnum, 219 MasstransportCalvingrateEnum, 219 220 MasstransportStabilizationEnum, 220 221 MasstransportVertexPairingEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17353 r17364 225 225 case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor"; 226 226 case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness"; 227 case MasstransportCalvingrateEnum : return "MasstransportCalvingrate"; 227 228 case MasstransportStabilizationEnum : return "MasstransportStabilization"; 228 229 case MasstransportVertexPairingEnum : return "MasstransportVertexPairing"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17353 r17364 228 228 else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum; 229 229 else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum; 230 else if (strcmp(name,"MasstransportCalvingrate")==0) return MasstransportCalvingrateEnum; 230 231 else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum; 231 232 else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum; … … 259 260 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 260 261 else if (strcmp(name,"Surface")==0) return SurfaceEnum; 261 else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 265 if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 266 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 266 267 else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum; 267 268 else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum; … … 382 383 else if (strcmp(name,"Results")==0) return ResultsEnum; 383 384 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 384 else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 388 if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 389 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 389 390 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; 390 391 else if (strcmp(name,"Contour")==0) return ContourEnum; … … 505 506 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 506 507 else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; 507 else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; 511 if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 512 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; 512 513 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum; 513 514 else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum; … … 628 629 else if (strcmp(name,"Sset")==0) return SsetEnum; 629 630 else if (strcmp(name,"Verbose")==0) return VerboseEnum; 630 else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; 634 if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 635 else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; 635 636 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; 636 637 else if (strcmp(name,"XY")==0) return XYEnum; -
issm/trunk-jpl/src/m/classes/masstransport.m
r16764 r17364 7 7 properties (SetAccess=public) 8 8 spcthickness = NaN; 9 calvingrate = NaN; 9 10 isfreesurface = 0; 10 11 min_thickness = 0; … … 88 89 89 90 md = checkfield(md,'fieldname','masstransport.spcthickness','forcing',1); 91 if(ismember(LevelsetAnalysisEnum(), analyses) & md.transient.islevelset) 92 md = checkfield(md,'fieldname','masstransport.calvingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); 93 end 94 90 95 md = checkfield(md,'fieldname','masstransport.isfreesurface','values',[0 1]); 91 96 md = checkfield(md,'fieldname','masstransport.hydrostatic_adjustment','values',{'Absolute' 'Incremental'}); … … 98 103 disp(sprintf(' Masstransport solution parameters:')); 99 104 fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]'); 105 fielddisplay(obj,'calvingrate','calving rate at given location [m/a]'); 100 106 fielddisplay(obj,'isfreesurface','do we use free surfaces (FS only) are mass conservation'); 101 107 fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]'); … … 110 116 end % }}} 111 117 function marshall(obj,md,fid) % {{{ 118 119 yts=365.*24.*3600.; 120 112 121 WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1); 122 WriteData(fid,'object',obj,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts); 113 123 WriteData(fid,'object',obj,'fieldname','isfreesurface','format','Boolean'); 114 124 WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double'); -
issm/trunk-jpl/src/m/classes/masstransport.py
r16764 r17364 15 15 def __init__(self): # {{{ 16 16 self.spcthickness = float('NaN') 17 self.calvingrate = float('NaN') 17 18 self.isfreesurface = 0 18 19 self.min_thickness = 0 … … 30 31 string=' Masstransport solution parameters:' 31 32 string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]')) 33 string="%s\n%s"%(string,fielddisplay(self,'calvingrate','calving rate at given location [m/a]')) 32 34 string="%s\n%s"%(string,fielddisplay(self,'isfreesurface','do we use free surfaces (FS only) are mass conservation')) 33 35 string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed [m]')) … … 68 70 69 71 md = checkfield(md,'fieldname','masstransport.spcthickness','forcing',1) 72 if LevelsetAnalysisEnum() in analyses and md.transient.islevelset: 73 md = checkfield(md,'fieldname','masstransport.calvingrate','NaN',1,'size',[md.mesh.numberofvertices],'>=',0) 70 74 md = checkfield(md,'fieldname','masstransport.isfreesurface','values',[0,1]) 71 75 md = checkfield(md,'fieldname','masstransport.hydrostatic_adjustment','values',['Absolute','Incremental']) … … 77 81 # }}} 78 82 def marshall(self,md,fid): # {{{ 83 84 yts=365.*24.*3600. 85 79 86 WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1) 87 WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts) 80 88 WriteData(fid,'object',self,'fieldname','isfreesurface','format','Boolean') 81 89 WriteData(fid,'object',self,'fieldname','min_thickness','format','Double') -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17352 r17364 217 217 def MasstransportPenaltyFactorEnum(): return StringToEnum("MasstransportPenaltyFactor")[0] 218 218 def MasstransportSpcthicknessEnum(): return StringToEnum("MasstransportSpcthickness")[0] 219 def MasstransportCalvingrateEnum(): return StringToEnum("MasstransportCalvingrate")[0] 219 220 def MasstransportStabilizationEnum(): return StringToEnum("MasstransportStabilization")[0] 220 221 def MasstransportVertexPairingEnum(): return StringToEnum("MasstransportVertexPairing")[0] -
issm/trunk-jpl/test/NightlyRun/test336.py
r17251 r17364 35 35 R=0.2*(xmax-xmin) 36 36 md.mask.ice_levelset=D-R 37 md.masstransport.calvingrate=0.*numpy.ones((md.mesh.numberofvertices,1)) 37 38 38 39 md=solve(md,TransientSolutionEnum())
Note:
See TracChangeset
for help on using the changeset viewer.