Changeset 25758
- Timestamp:
- 11/16/20 13:22:37 (4 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
r25754 r25758 175 175 IssmDouble planetradius=0; 176 176 IssmDouble planetarea=0; 177 bool rigid=false;178 177 bool elastic=false; 179 bool rotation=false;180 178 181 179 int numoutputs; … … 243 241 } 244 242 245 246 243 /*Deal with dsl multi-model ensembles: {{{*/ 247 244 iomodel->FetchData(&dslmodel,"md.dsl.model"); … … 263 260 } /*}}}*/ 264 261 /*Deal with elasticity {{{*/ 265 iomodel->FetchData(&rigid,"md.solidearth.settings.rigid");266 262 iomodel->FetchData(&elastic,"md.solidearth.settings.elastic"); 267 iomodel->FetchData(&rotation,"md.solidearth.settings.rotation");268 269 if(elastic | rigid){270 /*compute green functions for a range of angles*/271 iomodel->FetchData(°acc,"md.solidearth.settings.degacc");272 M=reCast<int,IssmDouble>(180./degacc+1.);273 }274 275 /*love numbers: */276 263 if(elastic){ 264 /*love numbers: */ 277 265 iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h"); 278 266 iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k"); … … 281 269 iomodel->FetchData(&love_tk,&nl,NULL,"md.solidearth.lovenumbers.tk"); 282 270 iomodel->FetchData(&love_tl,&nl,NULL,"md.solidearth.lovenumbers.tl"); 271 parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum)); 283 272 284 273 parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,nl,1)); … … 289 278 parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,nl,1)); 290 279 280 /*compute elastic green function for a range of angles*/ 281 iomodel->FetchData(°acc,"md.solidearth.settings.degacc"); 282 M=reCast<int,IssmDouble>(180./degacc+1.); 283 291 284 // AD performance is sensitive to calls to ensurecontiguous. 292 285 // // Providing "t" will cause ensurecontiguous to be called. 293 286 #ifdef _HAVE_AD_ 287 G_rigid=xNew<IssmDouble>(M,"t"); 294 288 G_elastic=xNew<IssmDouble>(M,"t"); 295 289 U_elastic=xNew<IssmDouble>(M,"t"); 296 290 H_elastic=xNew<IssmDouble>(M,"t"); 297 291 #else 292 G_rigid=xNew<IssmDouble>(M); 298 293 G_elastic=xNew<IssmDouble>(M); 299 294 U_elastic=xNew<IssmDouble>(M); 300 295 H_elastic=xNew<IssmDouble>(M); 301 296 #endif 302 }303 if(rigid){304 #ifdef _HAVE_AD_305 G_rigid=xNew<IssmDouble>(M,"t");306 #else307 G_rigid=xNew<IssmDouble>(M);308 #endif309 }310 311 if(rotation)parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum));312 313 if(rigid | elastic){314 297 315 298 /*compute combined legendre + love number (elastic green function:*/ 316 299 m=DetermineLocalSize(M,IssmComm::GetComm()); 317 300 GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm()); 318 }319 if(elastic){301 // AD performance is sensitive to calls to ensurecontiguous. 302 // // Providing "t" will cause ensurecontiguous to be called. 320 303 #ifdef _HAVE_AD_ 321 304 G_elastic_local=xNew<IssmDouble>(m,"t"); 305 G_rigid_local=xNew<IssmDouble>(m,"t"); 322 306 U_elastic_local=xNew<IssmDouble>(m,"t"); 323 307 H_elastic_local=xNew<IssmDouble>(m,"t"); 324 308 #else 325 309 G_elastic_local=xNew<IssmDouble>(m); 310 G_rigid_local=xNew<IssmDouble>(m); 326 311 U_elastic_local=xNew<IssmDouble>(m); 327 312 H_elastic_local=xNew<IssmDouble>(m); 328 313 #endif 329 } 330 if(rigid){ 331 #ifdef _HAVE_AD_ 332 G_rigid_local=xNew<IssmDouble>(m,"t"); 333 #else 334 G_rigid_local=xNew<IssmDouble>(m); 335 #endif 336 } 337 338 if(rigid){ 314 339 315 for(int i=lower_row;i<upper_row;i++){ 340 316 IssmDouble alpha,x; 341 317 alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0; 318 342 319 G_rigid_local[i-lower_row]= .5/sin(alpha/2.0); 343 }344 }345 if(elastic){346 for(int i=lower_row;i<upper_row;i++){347 IssmDouble alpha,x;348 alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0;349 350 320 G_elastic_local[i-lower_row]= (love_k[nl-1]-love_h[nl-1])*G_rigid_local[i-lower_row]; 351 321 U_elastic_local[i-lower_row]= (love_h[nl-1])*G_rigid_local[i-lower_row]; … … 386 356 } 387 357 } 388 }389 if(rigid){390 358 391 359 /*merge G_elastic_local into G_elastic; U_elastic_local into U_elastic; H_elastic_local to H_elastic:{{{*/ … … 401 369 /*All gather:*/ 402 370 ISSM_MPI_Allgatherv(G_rigid_local, m, ISSM_MPI_DOUBLE, G_rigid, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 403 if(elastic){ 404 ISSM_MPI_Allgatherv(G_elastic_local, m, ISSM_MPI_DOUBLE, G_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 405 ISSM_MPI_Allgatherv(U_elastic_local, m, ISSM_MPI_DOUBLE, U_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 406 ISSM_MPI_Allgatherv(H_elastic_local, m, ISSM_MPI_DOUBLE, H_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 407 } 408 371 ISSM_MPI_Allgatherv(G_elastic_local, m, ISSM_MPI_DOUBLE, G_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 372 ISSM_MPI_Allgatherv(U_elastic_local, m, ISSM_MPI_DOUBLE, U_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 373 ISSM_MPI_Allgatherv(H_elastic_local, m, ISSM_MPI_DOUBLE, H_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 374 409 375 /*free resources: */ 410 376 xDelete<int>(recvcounts); 411 377 xDelete<int>(displs); 378 /*}}}*/ 412 379 413 380 /*Avoid singularity at 0: */ 414 381 G_rigid[0]=G_rigid[1]; 382 parameters->AddObject(new DoubleVecParam(SealevelriseGRigidEnum,G_rigid,M)); 415 383 G_elastic[0]=G_elastic[1]; 384 parameters->AddObject(new DoubleVecParam(SealevelriseGElasticEnum,G_elastic,M)); 416 385 U_elastic[0]=U_elastic[1]; 386 parameters->AddObject(new DoubleVecParam(SealevelriseUElasticEnum,U_elastic,M)); 417 387 H_elastic[0]=H_elastic[1]; 418 419 /*Save our precomputed tables into parameters*/ 420 parameters->AddObject(new DoubleVecParam(SealevelriseGRigidEnum,G_rigid,M)); 421 if(elastic){ 422 parameters->AddObject(new DoubleVecParam(SealevelriseGElasticEnum,G_elastic,M)); 423 parameters->AddObject(new DoubleVecParam(SealevelriseUElasticEnum,U_elastic,M)); 424 parameters->AddObject(new DoubleVecParam(SealevelriseHElasticEnum,H_elastic,M)); 425 } 388 parameters->AddObject(new DoubleVecParam(SealevelriseHElasticEnum,H_elastic,M)); 426 389 427 390 /*free resources: */ 391 xDelete<IssmDouble>(love_h); 392 xDelete<IssmDouble>(love_k); 393 xDelete<IssmDouble>(love_l); 394 xDelete<IssmDouble>(love_th); 395 xDelete<IssmDouble>(love_tk); 396 xDelete<IssmDouble>(love_tl); 428 397 xDelete<IssmDouble>(G_rigid); 429 398 xDelete<IssmDouble>(G_rigid_local); 430 if(elastic){ 431 xDelete<IssmDouble>(love_h); 432 xDelete<IssmDouble>(love_k); 433 xDelete<IssmDouble>(love_l); 434 xDelete<IssmDouble>(love_th); 435 xDelete<IssmDouble>(love_tk); 436 xDelete<IssmDouble>(love_tl); 437 xDelete<IssmDouble>(G_elastic); 438 xDelete<IssmDouble>(G_elastic_local); 439 xDelete<IssmDouble>(U_elastic); 440 xDelete<IssmDouble>(U_elastic_local); 441 xDelete<IssmDouble>(H_elastic); 442 xDelete<IssmDouble>(H_elastic_local); 443 } 399 xDelete<IssmDouble>(G_elastic); 400 xDelete<IssmDouble>(G_elastic_local); 401 xDelete<IssmDouble>(U_elastic); 402 xDelete<IssmDouble>(U_elastic_local); 403 xDelete<IssmDouble>(H_elastic); 404 xDelete<IssmDouble>(H_elastic_local); 444 405 } 445 /*}}}*/446 406 447 407 /*Indicate we have not yet run the Geometry Core module: */ 448 408 parameters->AddObject(new BoolParam(SealevelriseGeometryDoneEnum,false)); 409 /*}}}*/ 449 410 450 411 /*Transitions:{{{ */ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r25756 r25758 5446 5446 5447 5447 /*Computational flags:*/ 5448 bool computerigid = false;5449 bool computeelastic = false;5448 bool computerigid = true; 5449 bool computeelastic = true; 5450 5450 int horiz; 5451 5451 … … 5463 5463 this->inputs->SetDoubleInput(AreaEnum,this->lid,area); 5464 5464 this->AddInput(SealevelAreaEnum,&area,P0Enum); 5465 if(!computerigid )return;5465 if(!computerigid & !computeelastic)return; 5466 5466 5467 5467 /*recover precomputed green function kernels:*/ … … 5469 5469 parameter->GetParameterValueByPointer((IssmDouble**)&G_rigid_precomputed,&M); 5470 5470 5471 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseGElasticEnum)); _assert_(parameter); 5472 parameter->GetParameterValueByPointer((IssmDouble**)&G_elastic_precomputed,&M); 5473 5474 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(parameter); 5475 parameter->GetParameterValueByPointer((IssmDouble**)&H_elastic_precomputed,&M); 5476 5477 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(parameter); 5478 parameter->GetParameterValueByPointer((IssmDouble**)&U_elastic_precomputed,&M); 5479 5471 5480 /*allocate indices:*/ 5472 5481 indices=xNew<IssmDouble>(gsize); 5473 5482 G=xNewZeroInit<IssmDouble>(gsize); 5474 5475 if(computeelastic){ 5476 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseGElasticEnum)); _assert_(parameter); 5477 parameter->GetParameterValueByPointer((IssmDouble**)&G_elastic_precomputed,&M); 5478 5479 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(parameter); 5480 parameter->GetParameterValueByPointer((IssmDouble**)&U_elastic_precomputed,&M); 5481 5482 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(parameter); 5483 parameter->GetParameterValueByPointer((IssmDouble**)&H_elastic_precomputed,&M); 5484 5485 /*allocate indices:*/ 5486 GU=xNewZeroInit<IssmDouble>(gsize); 5487 if(horiz){ 5488 GN=xNewZeroInit<IssmDouble>(gsize); 5489 GE=xNewZeroInit<IssmDouble>(gsize); 5490 } 5483 GU=xNewZeroInit<IssmDouble>(gsize); 5484 if(horiz){ 5485 GN=xNewZeroInit<IssmDouble>(gsize); 5486 GE=xNewZeroInit<IssmDouble>(gsize); 5491 5487 } 5492 5488 … … 5503 5499 /*compute gravity center in lat,long: */ 5504 5500 late= asin(z_element/planetradius); 5505 longe = atan2(y_element,x_element); 5506 /*}}}*/ 5501 longe = atan2(y_element,x_element); 5507 5502 5508 5503 constant=3/rho_earth*area/planetarea; 5504 5509 5505 for(int i=0;i<gsize;i++){ 5510 5506 IssmDouble alpha; … … 5519 5515 5520 5516 /*Rigid earth gravitational perturbation: */ 5521 G[i]+=G_rigid_precomputed[index]; 5522 if(computeelastic) G[i]+=G_elastic_precomputed[index]; 5517 if(computerigid){ 5518 G[i]+=G_rigid_precomputed[index]; 5519 } 5520 if(computeelastic){ 5521 G[i]+=G_elastic_precomputed[index]; 5522 } 5523 5523 G[i]=G[i]*constant; 5524 5524 5525 5525 /*Elastic components:*/ 5526 if(computeelastic){ 5527 GU[i] = constant * U_elastic_precomputed[index]; 5528 if(horiz){ 5529 /*Compute azimuths, both north and east components: */ 5530 x = xx[i]; y = yy[i]; z = zz[i]; 5531 if(latitude[i]==90){ 5532 x=1e-12; y=1e-12; 5533 } 5534 if(latitude[i]==-90){ 5535 x=1e-12; y=1e-12; 5536 } 5537 dx = x_element-x; dy = y_element-y; dz = z_element-z; 5538 N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5539 E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5540 5541 GN[i] = constant*H_elastic_precomputed[index]*N_azim; 5542 GE[i] = constant*H_elastic_precomputed[index]*E_azim; 5543 } 5526 GU[i] = constant * U_elastic_precomputed[index]; 5527 if(horiz){ 5528 /*Compute azimuths, both north and east components: */ 5529 x = xx[i]; y = yy[i]; z = zz[i]; 5530 if(latitude[i]==90){ 5531 x=1e-12; y=1e-12; 5532 } 5533 if(latitude[i]==-90){ 5534 x=1e-12; y=1e-12; 5535 } 5536 dx = x_element-x; dy = y_element-y; dz = z_element-z; 5537 N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5538 E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5539 5540 GN[i] = constant*H_elastic_precomputed[index]*N_azim; 5541 GE[i] = constant*H_elastic_precomputed[index]*E_azim; 5544 5542 } 5545 5543 } 5546 5544 5547 5545 /*Add in inputs:*/ 5548 this->inputs->SetArrayInput(SealevelriseIndicesEnum,this->lid,indices,gsize); 5549 this->inputs->SetArrayInput(SealevelriseGEnum,this->lid,G,gsize); 5550 if(computeelastic){ 5551 this->inputs->SetArrayInput(SealevelriseGUEnum,this->lid,GU,gsize); 5552 if(horiz){ 5553 this->inputs->SetArrayInput(SealevelriseGNEnum,this->lid,GN,gsize); 5554 this->inputs->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize); 5555 } 5556 } 5557 this->inputs->SetDoubleInput(AreaEnum,this->lid,area); 5558 this->AddInput(SealevelAreaEnum,&area,P0Enum); 5546 this->inputs->SetArrayInput(SealevelriseIndicesEnum,this->lid,indices,gsize); 5547 this->inputs->SetArrayInput(SealevelriseGEnum,this->lid,G,gsize); 5548 this->inputs->SetArrayInput(SealevelriseGUEnum,this->lid,GU,gsize); 5549 if(horiz){ 5550 this->inputs->SetArrayInput(SealevelriseGNEnum,this->lid,GN,gsize); 5551 this->inputs->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize); 5552 } 5559 5553 5560 5554 /*Free allocations:*/ 5561 5555 #ifdef _HAVE_RESTRICT_ 5556 delete indices; 5562 5557 delete G; 5563 if(computeelastic){ 5564 delete GU; 5565 if(horiz){ 5566 delete GN; 5567 delete GE; 5568 } 5558 delete GU; 5559 if(horiz){ 5560 delete GN; 5561 delete GE; 5569 5562 } 5570 5563 #else 5564 xDelete(indices); 5571 5565 xDelete(G); 5572 if(computeelastic){ 5573 xDelete(GU); 5574 if(horiz){ 5575 xDelete(GN); 5576 xDelete(GE); 5577 } 5566 xDelete(GU); 5567 if(horiz){ 5568 xDelete(GN); 5569 xDelete(GE); 5578 5570 } 5579 5571 #endif … … 5591 5583 bool notfullygrounded=false; 5592 5584 bool scaleoceanarea= false; 5593 bool compute rigid= false;5585 bool computeelastic= true; 5594 5586 int glfraction=1; 5595 5587 … … 5637 5629 rho_ice=FindParam(MaterialsRhoIceEnum); 5638 5630 rho_water=FindParam(MaterialsRhoSeawaterEnum); 5639 this->parameters->FindParam(&compute rigid,SolidearthSettingsRigidEnum);5631 this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum); 5640 5632 this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum); 5633 this->parameters->FindParam(&glfraction,SolidearthSettingsGlfractionEnum); 5641 5634 5642 5635 /*retrieve precomputed G:*/ 5643 if(compute rigid)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);5636 if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5644 5637 5645 5638 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/ … … 5695 5688 _assert_(!xIsNan<IssmDouble>(bslrice)); 5696 5689 5697 if(compute rigid){5690 if(computeelastic){ 5698 5691 /*convert from m to kg/m^2:*/ 5699 5692 I=I*rho_ice*phi; … … 5721 5714 bool notfullygrounded=false; 5722 5715 bool scaleoceanarea= false; 5723 bool compute rigid= false;5716 bool computeelastic= true; 5724 5717 5725 5718 /*elastic green function:*/ … … 5751 5744 rho_water=FindParam(MaterialsRhoSeawaterEnum); 5752 5745 rho_freshwater=FindParam(MaterialsRhoFreshwaterEnum); 5753 this->parameters->FindParam(&compute rigid,SolidearthSettingsRigidEnum);5746 this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum); 5754 5747 this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum); 5755 5748 5756 5749 /*retrieve precomputed G:*/ 5757 if(compute rigid)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);5750 if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5758 5751 5759 5752 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/ … … 5771 5764 _assert_(!xIsNan<IssmDouble>(bslrhydro)); 5772 5765 5773 if(compute rigid){5766 if(computeelastic){ 5774 5767 /*convert from m to kg/m^2:*/ 5775 5768 W=W*rho_freshwater*phi; … … 5795 5788 IssmDouble BP; //change in bottom pressure (Farrel and Clarke, Equ. 4) 5796 5789 IssmDouble constant; 5797 bool computeelastic= false;5790 bool computeelastic= true; 5798 5791 5799 5792 /*elastic green function:*/ … … 5897 5890 5898 5891 /*computational flags:*/ 5899 bool computeelastic= false;5892 bool computeelastic= true; 5900 5893 5901 5894 /*early return if we are not on the ocean or on an ice cap:*/ -
issm/trunk-jpl/src/m/classes/clusters/generic.py
r25684 r25758 1 import numpy as np2 1 from socket import gethostname 3 2 from subprocess import call 4 from IssmConfig import IssmConfig 5 from issmdir import issmdir 6 from pairoptions import pairoptions 7 from issmssh import issmssh 8 from issmscpin import issmscpin 9 from issmscpout import issmscpout 10 from MatlabFuncs import ispc 3 4 import numpy as np 5 11 6 try: 12 7 from generic_settings import generic_settings 13 8 except ImportError: 14 9 print('Warning generic_settings.py not found, default will be used') 10 from MatlabFuncs import ispc 11 from IssmConfig import IssmConfig 12 from issmdir import issmdir 13 from issmscpin import issmscpin 14 from issmscpout import issmscpout 15 from issmssh import issmssh 16 from pairoptions import pairoptions 15 17 16 18 17 19 class generic(object): 18 """ 19 GENERIC cluster class definition 20 21 Usage: 22 cluster = generic('name', 'astrid', 'np', 3) 23 cluster = generic('name', gethostname(), 'np', 3, 'login', 'username') 20 """GENERIC cluster class definition 21 22 Usage: 23 cluster = generic('name', 'astrid', 'np', 3) 24 cluster = generic('name', gethostname(), 'np', 3, 'login', 'username') 24 25 """ 25 26 … … 50 51 except NameError: 51 52 print("generic_settings.py not found, using default settings") 52 # else:53 # raise54 53 55 54 #OK get other fields -
issm/trunk-jpl/src/m/classes/mask.m
r25220 r25758 114 114 WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','name','md.mask.ice_levelset','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 115 115 else 116 WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1 );116 WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 117 117 end 118 118 end % }}} -
issm/trunk-jpl/src/m/classes/mask.py
r25449 r25758 8 8 9 9 class mask(object): 10 ''' 11 MASK class definition 10 """MASK class definition 12 11 13 Usage: 14 mask = mask() 15 ''' 12 Usage: 13 mask = mask() 14 """ 15 16 16 def __init__(self): # {{{ 17 17 self.ice_levelset = float('NaN') … … 91 91 92 92 def marshall(self, prefix, md, fid): # {{{ 93 WriteData(fid, prefix, 'object', self, 'fieldname', 'ocean_levelset', 'format', 'DoubleMat', 'mattype', 1 )94 WriteData(fid, prefix, 'object', self, 'fieldname', 'ice_levelset', 'format', 'DoubleMat', 'mattype', 1 )93 WriteData(fid, prefix, 'object', self, 'fieldname', 'ocean_levelset', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 94 WriteData(fid, prefix, 'object', self, 'fieldname', 'ice_levelset', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 95 95 # }}} -
issm/trunk-jpl/src/m/classes/model.m
r25751 r25758 192 192 methods 193 193 function md = model(varargin) % {{{ 194 195 194 196 195 switch nargin 197 196 case 0 198 md=setdefaultparameters(md,'earth'); 197 md=setdefaultparameters(md); 198 case 1 199 error('model constructor not supported yet'); 200 199 201 otherwise 200 options=pairoptions(varargin{:}); 201 planet=getfieldvalue(options,'planet','earth'); 202 md=setdefaultparameters(md,planet); 203 end 202 error('model constructor error message: 0 of 1 argument only in input.'); 203 end 204 204 205 end 205 206 %}}} … … 424 425 if isobject(md.outputdefinition.definitions{i}) 425 426 %get subfields 426 solutionsubfields=field names(md.outputdefinition.definitions{i});427 solutionsubfields=fields(md.outputdefinition.definitions{i}); 427 428 for j=1:length(solutionsubfields), 428 429 field=md.outputdefinition.definitions{i}.(solutionsubfields{j}); … … 548 549 549 550 %loop over model fields 550 model_fields=field names(md1);551 model_fields=fields(md1); 551 552 for i=1:length(model_fields), 552 553 %get field … … 554 555 fieldsize=size(field); 555 556 if isobject(field), %recursive call 556 object_fields=field names(md1.(model_fields{i}));557 object_fields=fields(md1.(model_fields{i})); 557 558 for j=1:length(object_fields), 558 559 %get field … … 721 722 if isstruct(md1.results), 722 723 md2.results=struct(); 723 solutionfields=field names(md1.results);724 solutionfields=fields(md1.results); 724 725 for i=1:length(solutionfields), 725 726 if isstruct(md1.results.(solutionfields{i})) … … 728 729 for p=1:length(md1.results.(solutionfields{i})) 729 730 current = md1.results.(solutionfields{i})(p); 730 solutionsubfields=field names(current);731 solutionsubfields=fields(current); 731 732 for j=1:length(solutionsubfields), 732 733 field=md1.results.(solutionfields{i})(p).(solutionsubfields{j}); … … 757 758 if isobject(md1.outputdefinition.definitions{i}) 758 759 %get subfields 759 solutionsubfields=field names(md1.outputdefinition.definitions{i});760 solutionsubfields=fields(md1.outputdefinition.definitions{i}); 760 761 for j=1:length(solutionsubfields), 761 762 field=md1.outputdefinition.definitions{i}.(solutionsubfields{j}); … … 1287 1288 end 1288 1289 end% }}} 1289 function md = setdefaultparameters(md ,planet) % {{{1290 function md = setdefaultparameters(md) % {{{ 1290 1291 1291 1292 %initialize subclasses … … 1299 1300 md.friction = friction(); 1300 1301 md.rifts = rifts(); 1301 md.solidearth = solidearth( planet);1302 md.solidearth = solidearth(); 1302 1303 md.dsl = dsl(); 1303 1304 md.timestepping = timestepping(); -
issm/trunk-jpl/src/m/classes/model.py
r25501 r25758 173 173 174 174 def __repr__(obj): #{{{ 175 # TODO: 176 # - Convert all formatting to calls to <string>.format (see any 177 # already converted <class>.__repr__ method for examples) 178 # 179 175 180 #print "Here %s the number: %d" % ("is", 37) 176 s tring= "%19s: %-22s -- %s" % ("mesh", "[%s %s]" % ("1x1", obj.mesh.__class__.__name__), "mesh properties")177 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("mask", "[%s %s]" % ("1x1", obj.mask.__class__.__name__), "defines grounded and floating elements"))178 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("geometry", "[%s %s]" % ("1x1", obj.geometry.__class__.__name__), "surface elevation, bedrock topography, ice thickness, ..."))179 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("constants", "[%s %s]" % ("1x1", obj.constants.__class__.__name__), "physical constants"))180 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("smb", "[%s %s]" % ("1x1", obj.smb.__class__.__name__), "surface mass balance"))181 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("basalforcings", "[%s %s]" % ("1x1", obj.basalforcings.__class__.__name__), "bed forcings"))182 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("materials", "[%s %s]" % ("1x1", obj.materials.__class__.__name__), "material properties"))183 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("damage", "[%s %s]" % ("1x1", obj.damage.__class__.__name__), "damage propagation laws"))184 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("friction", "[%s %s]" % ("1x1", obj.friction.__class__.__name__), "basal friction / drag properties"))185 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("flowequation", "[%s %s]" % ("1x1", obj.flowequation.__class__.__name__), "flow equations"))186 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("timestepping", "[%s %s]" % ("1x1", obj.timestepping.__class__.__name__), "time stepping for transient models"))187 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("initialization", "[%s %s]" % ("1x1", obj.initialization.__class__.__name__), "initial guess / state"))188 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("rifts", "[%s %s]" % ("1x1", obj.rifts.__class__.__name__), "rifts properties"))189 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("solidearth", "[%s %s]" % ("1x1", obj.solidearth.__class__.__name__), "solidearth inputs and settings"))190 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("dsl", "[%s %s]" % ("1x1", obj.dsl.__class__.__name__), "dynamic sea level"))191 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("debug", "[%s %s]" % ("1x1", obj.debug.__class__.__name__), "debugging tools (valgrind, gprof)"))192 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("verbose", "[%s %s]" % ("1x1", obj.verbose.__class__.__name__), "verbosity level in solve"))193 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("settings", "[%s %s]" % ("1x1", obj.settings.__class__.__name__), "settings properties"))194 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("toolkits", "[%s %s]" % ("1x1", obj.toolkits.__class__.__name__), "PETSc options for each solution"))195 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("cluster", "[%s %s]" % ("1x1", obj.cluster.__class__.__name__), "cluster parameters (number of cpus...)"))196 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("balancethickness", "[%s %s]" % ("1x1", obj.balancethickness.__class__.__name__), "parameters for balancethickness solution"))197 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("stressbalance", "[%s %s]" % ("1x1", obj.stressbalance.__class__.__name__), "parameters for stressbalance solution"))198 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("groundingline", "[%s %s]" % ("1x1", obj.groundingline.__class__.__name__), "parameters for groundingline solution"))199 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("hydrology", "[%s %s]" % ("1x1", obj.hydrology.__class__.__name__), "parameters for hydrology solution"))200 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("masstransport", "[%s %s]" % ("1x1", obj.masstransport.__class__.__name__), "parameters for masstransport solution"))201 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("thermal", "[%s %s]" % ("1x1", obj.thermal.__class__.__name__), "parameters for thermal solution"))202 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("steadystate", "[%s %s]" % ("1x1", obj.steadystate.__class__.__name__), "parameters for steadystate solution"))203 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("transient", "[%s %s]" % ("1x1", obj.transient.__class__.__name__), "parameters for transient solution"))204 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("levelset", "[%s %s]" % ("1x1", obj.levelset.__class__.__name__), "parameters for moving boundaries (level - set method)"))205 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("calving", "[%s %s]" % ("1x1", obj.calving.__class__.__name__), "parameters for calving"))206 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("frontalforcings", "[%s %s]" % ("1x1", obj.frontalforcings.__class__.__name__), "parameters for frontalforcings"))207 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("gia", "[%s %s]" % ("1x1", obj.gia.__class__.__name__), "parameters for gia solution"))208 s tring = "%s\n%s" % (string, '%19s: %-22s -- %s' % ("esa", "[%s %s]" % ("1x1", obj.esa.__class__.__name__), "parameters for elastic adjustment solution"))209 s tring = "%s\n%s" % (string, '%19s: %-22s -- %s' % ("love", "[%s %s]" % ("1x1", obj.love.__class__.__name__), "parameters for love solution"))210 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("autodiff", "[%s %s]" % ("1x1", obj.autodiff.__class__.__name__), "automatic differentiation parameters"))211 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("inversion", "[%s %s]" % ("1x1", obj.inversion.__class__.__name__), "parameters for inverse methods"))212 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("qmu", "[%s %s]" % ("1x1", obj.qmu.__class__.__name__), "dakota properties"))213 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("amr", "[%s %s]" % ("1x1", obj.amr.__class__.__name__), "adaptive mesh refinement properties"))214 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("outputdefinition", "[%s %s]" % ("1x1", obj.outputdefinition.__class__.__name__), "output definition"))215 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("results", "[%s %s]" % ("1x1", obj.results.__class__.__name__), "model results"))216 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("radaroverlay", "[%s %s]" % ("1x1", obj.radaroverlay.__class__.__name__), "radar image for plot overlay"))217 s tring = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("miscellaneous", "[%s %s]" % ("1x1", obj.miscellaneous.__class__.__name__), "miscellaneous fields"))218 return s tring181 s = "%19s: %-22s -- %s" % ("mesh", "[%s %s]" % ("1x1", obj.mesh.__class__.__name__), "mesh properties") 182 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("mask", "[%s %s]" % ("1x1", obj.mask.__class__.__name__), "defines grounded and floating elements")) 183 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("geometry", "[%s %s]" % ("1x1", obj.geometry.__class__.__name__), "surface elevation, bedrock topography, ice thickness, ...")) 184 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("constants", "[%s %s]" % ("1x1", obj.constants.__class__.__name__), "physical constants")) 185 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("smb", "[%s %s]" % ("1x1", obj.smb.__class__.__name__), "surface mass balance")) 186 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("basalforcings", "[%s %s]" % ("1x1", obj.basalforcings.__class__.__name__), "bed forcings")) 187 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("materials", "[%s %s]" % ("1x1", obj.materials.__class__.__name__), "material properties")) 188 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("damage", "[%s %s]" % ("1x1", obj.damage.__class__.__name__), "damage propagation laws")) 189 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("friction", "[%s %s]" % ("1x1", obj.friction.__class__.__name__), "basal friction / drag properties")) 190 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("flowequation", "[%s %s]" % ("1x1", obj.flowequation.__class__.__name__), "flow equations")) 191 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("timestepping", "[%s %s]" % ("1x1", obj.timestepping.__class__.__name__), "time stepping for transient models")) 192 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("initialization", "[%s %s]" % ("1x1", obj.initialization.__class__.__name__), "initial guess / state")) 193 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("rifts", "[%s %s]" % ("1x1", obj.rifts.__class__.__name__), "rifts properties")) 194 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("solidearth", "[%s %s]" % ("1x1", obj.solidearth.__class__.__name__), "solidearth inputs and settings")) 195 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("dsl", "[%s %s]" % ("1x1", obj.dsl.__class__.__name__), "dynamic sea level")) 196 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("debug", "[%s %s]" % ("1x1", obj.debug.__class__.__name__), "debugging tools (valgrind, gprof)")) 197 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("verbose", "[%s %s]" % ("1x1", obj.verbose.__class__.__name__), "verbosity level in solve")) 198 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("settings", "[%s %s]" % ("1x1", obj.settings.__class__.__name__), "settings properties")) 199 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("toolkits", "[%s %s]" % ("1x1", obj.toolkits.__class__.__name__), "PETSc options for each solution")) 200 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("cluster", "[%s %s]" % ("1x1", obj.cluster.__class__.__name__), "cluster parameters (number of cpus...)")) 201 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("balancethickness", "[%s %s]" % ("1x1", obj.balancethickness.__class__.__name__), "parameters for balancethickness solution")) 202 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("stressbalance", "[%s %s]" % ("1x1", obj.stressbalance.__class__.__name__), "parameters for stressbalance solution")) 203 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("groundingline", "[%s %s]" % ("1x1", obj.groundingline.__class__.__name__), "parameters for groundingline solution")) 204 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("hydrology", "[%s %s]" % ("1x1", obj.hydrology.__class__.__name__), "parameters for hydrology solution")) 205 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("masstransport", "[%s %s]" % ("1x1", obj.masstransport.__class__.__name__), "parameters for masstransport solution")) 206 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("thermal", "[%s %s]" % ("1x1", obj.thermal.__class__.__name__), "parameters for thermal solution")) 207 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("steadystate", "[%s %s]" % ("1x1", obj.steadystate.__class__.__name__), "parameters for steadystate solution")) 208 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("transient", "[%s %s]" % ("1x1", obj.transient.__class__.__name__), "parameters for transient solution")) 209 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("levelset", "[%s %s]" % ("1x1", obj.levelset.__class__.__name__), "parameters for moving boundaries (level - set method)")) 210 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("calving", "[%s %s]" % ("1x1", obj.calving.__class__.__name__), "parameters for calving")) 211 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("frontalforcings", "[%s %s]" % ("1x1", obj.frontalforcings.__class__.__name__), "parameters for frontalforcings")) 212 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("gia", "[%s %s]" % ("1x1", obj.gia.__class__.__name__), "parameters for gia solution")) 213 s = "%s\n%s" % (s, '%19s: %-22s -- %s' % ("esa", "[%s %s]" % ("1x1", obj.esa.__class__.__name__), "parameters for elastic adjustment solution")) 214 s = "%s\n%s" % (s, '%19s: %-22s -- %s' % ("love", "[%s %s]" % ("1x1", obj.love.__class__.__name__), "parameters for love solution")) 215 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("autodiff", "[%s %s]" % ("1x1", obj.autodiff.__class__.__name__), "automatic differentiation parameters")) 216 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("inversion", "[%s %s]" % ("1x1", obj.inversion.__class__.__name__), "parameters for inverse methods")) 217 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("qmu", "[%s %s]" % ("1x1", obj.qmu.__class__.__name__), "dakota properties")) 218 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("amr", "[%s %s]" % ("1x1", obj.amr.__class__.__name__), "adaptive mesh refinement properties")) 219 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("outputdefinition", "[%s %s]" % ("1x1", obj.outputdefinition.__class__.__name__), "output definition")) 220 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("results", "[%s %s]" % ("1x1", obj.results.__class__.__name__), "model results")) 221 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("radaroverlay", "[%s %s]" % ("1x1", obj.radaroverlay.__class__.__name__), "radar image for plot overlay")) 222 s = "%s\n%s" % (s, "%19s: %-22s -- %s" % ("miscellaneous", "[%s %s]" % ("1x1", obj.miscellaneous.__class__.__name__), "miscellaneous fields")) 223 return s 219 224 # }}} 220 225 -
issm/trunk-jpl/src/m/classes/organizer.m
r25120 r25758 156 156 error(['Could not find ' path ]); 157 157 end%}}} 158 function loaddatanoprefix(org,string),% {{{ 159 160 %Get model path 161 if ~ischar(string), error('argument provided is not a string'); end 162 path=[org.repository '/' string]; 163 164 %figure out if the data is there, otherwise, we have to use the default path supplied by user. 165 if exist(path,'file'), 166 path=path; 167 elseif exist([path '.mat'],'file'), 168 path=[path '.mat']; 169 else 170 error(['Could not find ' path ]); 171 end 172 if exist(path,'file') 173 evalin('caller',['load -mat ' path]); 174 return; 175 end 176 177 %If we are here, the data has not been found. 178 error(['Could not find ' path ]); 179 end%}}} 158 180 function bool=perform(org,varargin) % {{{ 159 181 … … 254 276 eval(['save(''' name '''' variables ',''-v7.3'');']); 255 277 end%}}} 278 function savedatanoprefix(org,varargin) % {{{ 279 280 %check 281 if (org.currentstep==0), error('Cannot save data because organizer (org) is empty! Make sure you did not skip any perform call'); end 282 if (org.currentstep>length(org.steps)), error('Cannot save data because organizer (org) is not up to date!'); end 283 284 name=[org.repository '/' org.steps(org.currentstep).string ]; 285 disp(['saving data in: ' name]); 286 287 %Skip if requested 288 if org.skipio, 289 disp(['WARNING: Skipping saving ' name]); 290 return; 291 end 292 293 %check that md is a model 294 if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end 295 296 %list of variable names: 297 variables=''; 298 for i=2:nargin, 299 variables=[variables ',' '''' inputname(i) '''']; 300 eval([inputname(i) '= varargin{' num2str(i-1) '};']); 301 end 302 eval(['save(''' name '''' variables ',''-v7.3'');']); 303 end%}}} 256 304 end 257 305 end -
issm/trunk-jpl/src/m/classes/solidearth.m
r25751 r25758 14 14 requested_outputs = {}; 15 15 transitions = {}; 16 partitionice 17 partitionhydro 16 partitionice = []; 17 partitionhydro = []; 18 18 end 19 19 methods … … 21 21 switch nargin 22 22 case 0 23 self=setdefaultparameters(self,earth); 24 case 1 25 self=setdefaultparameters(self,varargin{:}); 23 self=setdefaultparameters(self); 26 24 otherwise 27 error(' solidearth constructor error message: zero or one argument only!');25 error('constructor not supported'); 28 26 end 29 27 end % }}} 30 function self = setdefaultparameters(self ,planet) % {{{28 function self = setdefaultparameters(self) % {{{ 31 29 32 30 %output default: … … 35 33 %transitions should be a cell array of vectors: 36 34 self.transitions={}; 37 35 38 36 %no partitions requested for barystatic contribution: 39 37 self.partitionice=[]; … … 41 39 42 40 %earth radius 43 self.planetradius= planetradius( planet);41 self.planetradius= planetradius('earth'); 44 42 45 43 end % }}} -
issm/trunk-jpl/src/m/classes/solidearth.py
r25688 r25758 1 1 import numpy as np 2 2 3 from checkfield import checkfield 3 4 from fielddisplay import fielddisplay … … 19 20 20 21 def __init__(self, *args): #{{{ 21 self.sealevel = np.nan 22 self.settings = solidearthsettings() 23 self.surfaceload = surfaceload() 24 self.lovenumbers = lovenumbers() 25 self.rotational = rotational() 26 self.planetradius = planetradius('earth') 27 self.requested_outputs = ['default'] 28 self.transitions = [] 22 self.sealevel = np.nan 23 self.settings = solidearthsettings() 24 self.surfaceload = surfaceload() 25 self.lovenumbers = lovenumbers() 26 self.rotational = rotational() 27 self.planetradius = planetradius('earth') 28 self.requested_outputs = [] 29 self.transitions = [] 30 self.partitionice = [] 31 self.partitionhydro = [] 29 32 30 33 nargin = len(args) … … 50 53 51 54 def setdefaultparameters(self): # {{{ 52 return self 55 # Default output 56 self.requested_outputs = ['default'] 57 58 # Transitions should be a list 59 self.transitions = [] 60 61 # No partitions requested for barystatic contribution 62 self.partitionice = [] 63 self.partitionhydro = [] 64 65 # Earth radius 66 self.planetradius = planetradius('earth') 53 67 #}}} 54 68 … … 58 72 md = checkfield(md, 'fieldname', 'solidearth.sealevel', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices]) 59 73 md = checkfield(md, 'fieldname', 'solidearth.requested_outputs', 'stringrow', 1) 74 60 75 self.settings.checkconsistency(md, solution, analyses) 61 76 self.surfaceload.checkconsistency(md, solution, analyses) … … 73 88 WriteData(fid, prefix, 'object', self, 'fieldname', 'planetradius', 'format', 'Double') 74 89 WriteData(fid, prefix, 'object', self, 'fieldname', 'transitions', 'format', 'MatArray') 90 91 if len(self.partitionice): 92 npartice = np.max(self.partitionice) + 2 93 else: 94 npartice = 0 95 96 if len(self.partitionhydro): 97 nparthydro = np.max(self.partitionhydro) + 2 98 else: 99 nparthydro = 0 100 101 WriteData(fid, prefix, 'object', self, 'fieldname', 'partitionice', 'mattype', 1, 'format', 'DoubleMat'); 102 WriteData(fid, prefix, 'data', npartice, 'format', 'Integer', 'name', 'md.solidearth.npartice'); 103 WriteData(fid, prefix, 'object', self, 'fieldname', 'partitionhydro', 'mattype', 1, 'format', 'DoubleMat'); 104 WriteData(fid, prefix, 'data', nparthydro,'format', 'Integer', 'name','md.solidearth.nparthydro'); 75 105 76 106 self.settings.marshall(prefix, md, fid) -
issm/trunk-jpl/src/m/classes/solidearthsettings.m
r25751 r25758 17 17 degacc = 0; %degree increment for resolution of Green tables 18 18 horiz = 0; %compute horizontal deformation 19 glfraction = 1; %barystatic contribution full or fractional (default fractional) 19 20 end 20 21 methods … … 48 49 %how many time steps we skip before we run solidearthsettings solver during transient 49 50 self.runfrequency=1; 51 52 %fractional contribution: 53 self.glfraction=1; 50 54 51 55 %horizontal displacement? (not by default) … … 63 67 md = checkfield(md,'fieldname','solidearth.settings.degacc','size',[1 1],'>=',1e-10); 64 68 md = checkfield(md,'fieldname','solidearth.settings.horiz','NaN',1,'Inf',1,'values',[0 1]); 65 66 %checks on computational flags: 67 if self.elastic==1 & self.rigid==0, 68 error('solidearthsettings checkconsistency error message: need rigid on if elastic flag is set'); 69 end 69 md = checkfield(md,'fieldname','solidearth.settings.glfraction','values',[0 1]); 70 70 71 71 %a coupler to a planet model is provided. … … 96 96 fielddisplay(self,'rotation','earth rotational potential perturbation'); 97 97 fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions'); 98 fielddisplay(self,'glfraction','contribute fractionally (default, 1) to barystatic sea level'); 98 99 end % }}} 99 100 function marshall(self,prefix,md,fid) % {{{ … … 109 110 WriteData(fid,prefix,'object',self,'fieldname','horiz','name','md.solidearth.settings.horiz','format','Integer'); 110 111 WriteData(fid,prefix,'object',self,'fieldname','computesealevelchange','name','md.solidearth.settings.computesealevelchange','format','Integer'); 112 WriteData(fid,prefix,'object',self,'fieldname','glfraction','name','md.solidearth.settings.glfraction','format','Integer'); 111 113 end % }}} 112 114 function savemodeljs(self,fid,modelname) % {{{ … … 121 123 writejsdouble(fid,[modelname '.slr.settings.run_frequency'],self.run_frequency); 122 124 writejsdouble(fid,[modelname '.slr.settings.degacc'],self.degacc); 125 writejsdouble(fid,[modelname '.slr.settings.glfraction'],self.glfraction); 123 126 end % }}} 124 127 function self = extrude(self,md) % {{{ -
issm/trunk-jpl/src/m/classes/solidearthsettings.py
r25688 r25758 14 14 15 15 def __init__(self, *args): #{{{ 16 self.reltol = 0 17 self.abstol = 0 18 self.maxiter = 0 19 self.rigid = 0 20 self.elastic = 0 21 self.rotation = 0 22 self.ocean_area_scaling = 0 23 self.runfrequency = 1 # How many time steps we skip before we run grd_core 24 self.computesealevelchange = 0 # Will grd_core compute sea level? 25 self.degacc = 0 # Degree increment for resolution of Green tables 26 self.horiz = 0 # Compute horizontal displacement? 27 self.glfraction = 1 # Barystatic contribution: full or fractional (default: fractional) 28 16 29 nargin = len(args) 17 30 … … 33 46 s += '{}\n'.format(fielddisplay(self, 'elastic', 'elastic earth graviational potential perturbation')) 34 47 s += '{}\n'.format(fielddisplay(self, 'degacc', 'accuracy (default .01 deg) for numerical discretization of the Green\'s functions')) 48 s += '{}\n'.format(fielddisplay(self, 'glfraction', 'contribute fractionally (default, 1) to barystatic sea level')) 35 49 return s 36 50 #}}} … … 59 73 # Horizontal displacement? (not on by default) 60 74 self.horiz = 0 61 return self 75 76 # Fractional contribution 77 self.glfraction = 1 62 78 #}}} 63 79 … … 71 87 md = checkfield(md, 'fieldname', 'solidearth.settings.degacc', 'size', [1], '>=', 1e-10) 72 88 md = checkfield(md, 'fieldname', 'solidearth.settings.horiz', 'NaN', 1, 'Inf', 1, 'values', [0, 1]) 89 md = checkfield(md, 'fieldname', 'solidearth.settings.glfraction', 'values', [0, 1]) 73 90 74 91 # A coupler to planet model is provided … … 88 105 def marshall(self, prefix, md, fid): #{{{ 89 106 WriteData(fid, prefix, 'object', self, 'fieldname', 'reltol', 'name', 'md.solidearth.settings.reltol', 'format', 'Double') 90 WriteData(fid,prefix,'object', self,'fieldname', 'abstol', 'name', 'md.solidearth.settings.abstol', 'format', 'Double') 91 WriteData(fid,prefix,'object', self,'fieldname', 'maxiter', 'name', 'md.solidearth.settings.maxiter', 'format', 'Integer') 92 WriteData(fid,prefix,'object', self,'fieldname', 'rigid', 'name', 'md.solidearth.settings.rigid', 'format', 'Boolean') 93 WriteData(fid,prefix,'object', self,'fieldname', 'elastic', 'name', 'md.solidearth.settings.elastic', 'format', 'Boolean') 94 WriteData(fid,prefix,'object', self,'fieldname', 'rotation', 'name', 'md.solidearth.settings.rotation', 'format', 'Boolean') 95 WriteData(fid,prefix,'object', self,'fieldname', 'ocean_area_scaling', 'name', 'md.solidearth.settings.ocean_area_scaling', 'format', 'Boolean') 96 WriteData(fid,prefix,'object', self,'fieldname', 'runfrequency', 'name', 'md.solidearth.settings.runfrequency', 'format', 'Integer') 97 WriteData(fid,prefix,'object', self,'fieldname', 'degacc', 'name', 'md.solidearth.settings.degacc', 'format', 'Double') 98 WriteData(fid,prefix,'object', self,'fieldname', 'horiz', 'name', 'md.solidearth.settings.horiz', 'format', 'Integer') 99 WriteData(fid,prefix,'object', self,'fieldname', 'computesealevelchange', 'name', 'md.solidearth.settings.computesealevelchange', 'format', 'Integer') 107 WriteData(fid, prefix, 'object', self, 'fieldname', 'abstol', 'name', 'md.solidearth.settings.abstol', 'format', 'Double') 108 WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter', 'name', 'md.solidearth.settings.maxiter', 'format', 'Integer') 109 WriteData(fid, prefix, 'object', self, 'fieldname', 'rigid', 'name', 'md.solidearth.settings.rigid', 'format', 'Boolean') 110 WriteData(fid, prefix, 'object', self, 'fieldname', 'elastic', 'name', 'md.solidearth.settings.elastic', 'format', 'Boolean') 111 WriteData(fid, prefix, 'object', self, 'fieldname', 'rotation', 'name', 'md.solidearth.settings.rotation', 'format', 'Boolean') 112 WriteData(fid, prefix, 'object', self, 'fieldname', 'ocean_area_scaling', 'name', 'md.solidearth.settings.ocean_area_scaling', 'format', 'Boolean') 113 WriteData(fid, prefix, 'object', self, 'fieldname', 'runfrequency', 'name', 'md.solidearth.settings.runfrequency', 'format', 'Integer') 114 WriteData(fid, prefix, 'object', self, 'fieldname', 'degacc', 'name', 'md.solidearth.settings.degacc', 'format', 'Double') 115 WriteData(fid, prefix, 'object', self, 'fieldname', 'horiz', 'name', 'md.solidearth.settings.horiz', 'format', 'Integer') 116 WriteData(fid, prefix, 'object', self, 'fieldname', 'computesealevelchange', 'name', 'md.solidearth.settings.computesealevelchange', 'format', 'Integer') 117 WriteData(fid, prefix, 'object', self, 'fieldname','glfraction', 'name', 'md.solidearth.settings.glfraction', 'format', 'Integer') 100 118 #}}} 101 119 -
issm/trunk-jpl/src/m/contrib/larour/glacier_inventory.m
r25627 r25758 183 183 %Go through O2 regions: 184 184 for i=subsetregions, 185 %for i=33, 185 186 string=self.boxes(i).RGI_CODE; 186 187 disp(['progressing with region ' num2str(i) ' ' string]); … … 208 209 case 19, radius=60; 209 210 case 32, radius=60; 210 case 33, radius= 5;211 case 33, radius=10; 211 212 case 41, radius=75; 212 213 case 42, radius=45; -
issm/trunk-jpl/src/m/contrib/larour/ismip6.m
r25272 r25758 13 13 directories = {}; %directories where the files are 14 14 experiments = {}; %names of experiments 15 base = {}; %placeholder for base 16 surface = {}; %placeholder for surface 15 17 thickness = {}; %placeholder for thicknesses 16 18 deltathickness = {}; %placeholder for delta thicknesses 19 deltathicknessvaf = {}; %placeholder for delta thicknesses above floatation 20 deltathicknesshal = {}; %placeholder for delta thicknesses halosteric origins 21 deltathicknessbar = {}; %placeholder for delta thicknesses halosteric origins 22 thicknesscorrection={}; 17 23 icemask = {}; %placeholder for ice masks 18 24 oceanmask = {}; %placeholder for ocean masks … … 20 26 timestart = {}; %placeholder for times 21 27 calendar = {}; %placeholder for times 28 di = {}; %ice densities 22 29 end 23 30 methods … … 146 153 end 147 154 155 if ~exist('timestart','var'), timestart=2015; end 156 if ~exist('calendar','var'), calendar=0; end 157 148 158 end % }}} 149 159 function info=readinfo(self,experiment,field) % {{{ … … 203 213 204 214 %map onto mesh: correct only for thicknesses 205 hg=ismip2mesh_correction.*(ismip2mesh*ht) ; 215 if strcmpi(field,'lithk') | strcmpi(field,'orog') | strcmpi(field,'base'), 216 hg=ismip2mesh_correction.*(ismip2mesh*ht) ; 217 %hg=ismip2mesh*ht ; 218 else 219 hg=ismip2mesh*ht ; 220 end 206 221 207 222 %keep field: … … 209 224 pos=find(isnan(hg)); hg(pos)=0; 210 225 self.thickness{i}=hg; 226 end 227 if strcmpi(field,'orog'), 228 pos=find(isnan(hg)); hg(pos)=0; 229 self.surface{i}=hg; 230 end 231 if strcmpi(field,'base'), 232 pos=find(isnan(hg)); hg(pos)=0; 233 self.base{i}=hg; 211 234 end 212 235 if strcmpi(field,'sftgif'), … … 220 243 end 221 244 if strcmpi(field,'sftgrf'), 222 hg e=-ones(md.mesh.numberofvertices,size(hg,2));245 hgv=-ones(md.mesh.numberofvertices,size(hg,2)); 223 246 for j=1:size(hg,2), 224 247 hgj=hg(:,j); 225 pos=find(hgj>0); 226 hge(md.mesh.elements(pos,:),j)=1; 227 end 228 self.oceanmask{i}=hge; 248 pos=find(hgj>.99); %we want fully grounded 249 %pos=find(hgj>0); %we want slightly grounded 250 hgv(md.mesh.elements(pos,:),j)=1; 251 end 252 self.oceanmask{i}=hgv; 229 253 end 230 254 -
issm/trunk-jpl/src/m/contrib/larour/mme_autotime_correlation_matrix.m
r25627 r25758 1 function matrix=mme_ time_correlation_matrix(mme,varargin);1 function matrix=mme_autotime_correlation_matrix(mme,type) 2 2 3 if nargin==2, 4 type=varargin{1}; 5 elseif nargin==3, 6 mme2=varargin{1}; 7 type=varargin{2}; 8 else 9 error('mme_time_correlation_matrix usage error: 2 or 3 arguments only allowed!'); 3 4 %Out of a multi model ensemble (nsamples x nsteps) of runs, build 5 %a temporal correlation matrix (of size nsteps x nsteps) 6 7 nsamples=size(mme,1); 8 nsteps=size(mme,2); 9 10 %initialize with 1 in the diagonal: 11 matrix=eye(nsteps,nsteps); 12 13 %go through time steps, and fill up the top part. 14 for i=1:nsteps, 15 for j=i+1:nsteps, 16 matrix(i,j)=corr(mme(:,i),mme(:,j),'Type',type); 17 matrix(j,i)=matrix(i,j); 18 end 10 19 end 11 20 12 if nargin==2,13 14 %Out of a multi model ensemble (nsamples x nsteps) of runs, build15 %a temporal correlation matrix (of size nsteps x nsteps)16 17 nsamples=size(mme,1);18 nsteps=size(mme,2);19 20 %initialize with 1 in the diagonal:21 matrix=eye(nsteps,nsteps);22 23 %go through time steps, and fill up the top part.24 for i=1:nsteps,25 for j=i+1:nsteps,26 matrix(i,j)=corr(mme(:,i),mme(:,j),'Type',type);27 matrix(j,i)=matrix(i,j);28 end29 end30 else31 32 %Same kind of computations, except it's not autocorrelation:33 nsamples=size(mme,1); nsamples2=size(mme2,1);34 nsteps=size(mme,2); nsteps2=size(mme2,2);35 36 if nsteps2~=nsteps,37 error('number of time steps from both sample matrices should be identical!');38 end39 if nsamples2~=nsamples,40 error('number of samples from both sample matrices should be identical!');41 end42 43 %initialize with 1 in the diagonal:44 matrix=zeros(nsteps,nsteps);45 46 %go through time steps, and fill up the top part.47 for i=1:nsteps,48 for j=i:nsteps,49 matrix(i,j)=corr(mme(:,i),mme2(:,j),'Type',type);50 matrix(j,i)=matrix(i,j);51 end52 end53 end -
issm/trunk-jpl/src/m/interp/averaging.m
r25499 r25758 64 64 else 65 65 rep=3; 66 areas=GetAreas(index,md.mesh.x2d,md.mesh.y2d); 66 if isa(md.mesh,'mesh3dsurface'), 67 areas=GetAreas3DTria(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.z); 68 else 69 areas=GetAreas(index,md.mesh.x,md.mesh.y); 70 end 67 71 end 68 72 summation=1/rep*ones(rep,1); -
issm/trunk-jpl/src/m/mesh/FixMesh.m
r13646 r25758 1 function [index2 x2 y2 value2 ]=FixMesh(index,x,y,value)1 function [index2 x2 y2 value2 newpos]=FixMesh(index,x,y,value) 2 2 % FIXMESH - FixMesh fix mesh with broken triangles, orphan vertices, etc ... 3 3 % … … 15 15 y2=y; 16 16 value2=value; 17 newpos=1:length(x); 17 18 18 19 %First, look for orphan vertices, and take them out. … … 29 30 y2(orphan)=[]; 30 31 value2(orphan)=[]; 32 newpos(orphan)=[]; 31 33 32 34 %now, the index: -
issm/trunk-jpl/src/m/plot/processdatalatlong.m
r25627 r25758 22 22 %interpolate data: 23 23 extradata=griddata(x0,y0,data,xextra,yextra,'nearest'); 24 25 24 data=[data; extradata]; 26 25 elseif length(data)==length(md.mesh.elements), 27 error('processdatalatlong error message: coord ''latlong'' case not covered for element data ');28 26 datatype=1; 29 27 end -
issm/trunk-jpl/src/m/solve/solve.m
r25168 r25758 4 4 % Usage: 5 5 % md=solve(md,solutionstring,varargin) 6 % where varargin is a lit of paired arguments of string OR enums7 6 % 8 % solution types available comprise: 9 % - 'Stressbalance' or 'sb' 10 % - 'Masstransport' or 'mt' 11 % - 'Thermal' or 'th' 12 % - 'Steadystate' or 'ss' 13 % - 'Transient' or 'tr' 14 % - 'Balancethickness' or 'mc' 15 % - 'Balancevelocity' or 'bv' 16 % - 'BedSlope' or 'bsl' 17 % - 'SurfaceSlope' or 'ssl' 18 % - 'Hydrology' or 'hy' 19 % - 'DamageEvolution' or 'da' 20 % - 'Gia' or 'gia' 21 % - 'Love' or 'lv' 22 % - 'Esa' or 'esa' 23 % - 'Sealevelrise' or 'slr' 7 % where varargin is a lit of paired arguments of string OR enums 24 8 % 25 % extra options: 26 % - loadonly : does not solve. only load results 27 % - runtimename : true or false (default is true), makes name unique 28 % - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model 29 % - restart: 'directory name (relative to the execution directory) where the restart file is located. 30 % - outbinread : if 0, download the outbin but do not process is (md.results is not updated) 9 % Solution types available comprise: 10 % - 'Stressbalance' or 'sb' 11 % - 'Masstransport' or 'mt' 12 % - 'Thermal' or 'th' 13 % - 'Steadystate' or 'ss' 14 % - 'Transient' or 'tr' 15 % - 'Balancethickness' or 'mc' 16 % - 'Balancevelocity' or 'bv' 17 % - 'BedSlope' or 'bsl' 18 % - 'SurfaceSlope' or 'ssl' 19 % - 'Hydrology' or 'hy' 20 % - 'DamageEvolution' or 'da' 21 % - 'Gia' or 'gia' 22 % - 'Love' or 'lv' 23 % - 'Esa' or 'esa' 24 % - 'Sealevelrise' or 'slr' 25 % 26 % Extra options: 27 % - loadonly : does not solve. only load results 28 % - runtimename : true or false (default is true), makes name unique 29 % - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on 30 % consistency of model 31 % - restart : 'directory name (relative to the execution directory) 32 % where the restart file is located 31 33 % 32 34 % Examples: … … 111 113 end 112 114 113 %if running qmu analysis, some preprocessing of dakota files using models fields needs to be carried out.115 %if running QMU analysis, some preprocessing of Dakota files using models fields needs to be carried out. 114 116 if md.qmu.isdakota, 115 117 md=preqmu(md,options); -
issm/trunk-jpl/src/m/solve/solve.py
r25499 r25758 1 import datetime1 from datetime import datetime 2 2 import os 3 3 import shutil … … 16 16 Usage: 17 17 md = solve(md, solutionstring, varargin) 18 where varargin is a list of paired arguments of string OR enums 18 19 where varargin is a list of paired arguments of string OR enums 19 20 20 solution types available comprise:21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 21 Solution types available comprise: 22 - 'Stressbalance' or 'sb' 23 - 'Masstransport' or 'mt' 24 - 'Thermal' or 'th' 25 - 'Steadystate' or 'ss' 26 - 'Transient' or 'tr' 27 - 'Balancethickness' or 'mc' 28 - 'Balancevelocity' or 'bv' 29 - 'BedSlope' or 'bsl' 30 - 'SurfaceSlope' or 'ssl' 31 - 'Hydrology' or 'hy' 32 - 'DamageEvolution' or 'da' 33 - 'Gia' or 'gia' 34 - 'Esa' or 'esa' 35 - 'Sealevelrise' or 'slr' 36 - 'Love' or 'lv' 36 37 37 extra options: 38 - loadonly : does not solve. only load results 39 - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures 40 checks on consistency of model 41 - restart : 'directory name (relative to the execution 42 directory) where the restart file is located 38 Extra options: 39 - loadonly : does not solve. only load results 40 - runtimename : true or false (default is true), makes name unique 41 - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on 42 consistency of model 43 - restart : directory name (relative to the execution directory) 44 where the restart file is located 43 45 44 46 Examples: … … 47 49 """ 48 50 49 # recover and process solve options51 # Recover and process solve options 50 52 if solutionstring.lower() == 'sb' or solutionstring.lower() == 'stressbalance': 51 53 solutionstring = 'StressbalanceSolution' … … 82 84 options = pairoptions('solutionstring', solutionstring, *args) 83 85 84 # recover some fields86 # Recover some fields 85 87 md.private.solution = solutionstring 86 88 cluster = md.cluster … … 90 92 batch = 0 91 93 92 # check model consistency94 # Check model consistency 93 95 if options.getfieldvalue('checkconsistency', 'yes') == 'yes': 94 96 if md.verbose.solution: … … 96 98 ismodelselfconsistent(md) 97 99 98 # First, build a runtime name that is unique100 # First, build a runtime name that is unique 99 101 restart = options.getfieldvalue('restart', '') 100 102 if restart == 1: 101 pass # do nothing103 pass # do nothing 102 104 else: 103 105 if restart: … … 105 107 else: 106 108 if options.getfieldvalue('runtimename', True): 107 c = datetime. datetime.now()109 c = datetime.now() 108 110 md.private.runtimename = "%s-%02i-%02i-%04i-%02i-%02i-%02i-%i" % (md.miscellaneous.name, c.month, c.day, c.year, c.hour, c.minute, c.second, os.getpid()) 109 111 else: 110 112 md.private.runtimename = md.miscellaneous.name 111 113 112 # if running qmu analysis, some preprocessing of dakota files using models113 # fields needs to be carried out.114 # If running QMU analysis, some preprocessing of Dakota files using models 115 # fields needs to be carried out 114 116 if md.qmu.isdakota: 115 117 md = preqmu(md, options) 116 118 117 # Do we load results only?119 # Do we load results only? 118 120 if options.getfieldvalue('loadonly', False): 119 121 md = loadresultsfromcluster(md) 120 122 return md 121 123 122 # Write all input files123 marshall(md) 124 md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits') 125 cluster.BuildQueueScript(md.private.runtimename, md.miscellaneous.name, md.private.solution, md.settings.io_gather, md.debug.valgrind, md.debug.gprof, md.qmu.isdakota, md.transient.isoceancoupling) 124 # Write all input files 125 marshall(md) # bin file 126 md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits') # toolkits file 127 cluster.BuildQueueScript(md.private.runtimename, md.miscellaneous.name, md.private.solution, md.settings.io_gather, md.debug.valgrind, md.debug.gprof, md.qmu.isdakota, md.transient.isoceancoupling) # queue file 126 128 127 # Stop here if batch mode129 # Stop here if batch mode 128 130 if options.getfieldvalue('batch', 'no') == 'yes': 129 131 print('batch mode requested: not launching job interactively') … … 131 133 return md 132 134 133 # Upload all required files:135 # Upload all required files: 134 136 modelname = md.miscellaneous.name 135 137 filelist = [modelname + '.bin ', modelname + '.toolkits ', modelname + '.queue '] … … 140 142 cluster.UploadQueueJob(md.miscellaneous.name, md.private.runtimename, filelist) 141 143 142 # Launch job144 # Launch job 143 145 cluster.LaunchQueueJob(md.miscellaneous.name, md.private.runtimename, filelist, restart, batch) 144 146 145 # wait on lock147 # Wait on lock 146 148 if md.settings.waitonlock > 0: 147 #we wait for the done file148 149 islock = waitonlock(md) 149 if islock == 0: # no results to be loaded150 if islock == 0: # no results to be loaded 150 151 print('The results must be loaded manually with md = loadresultsfromcluster(md).') 151 else: # load results152 else: # load results 152 153 if md.verbose.solution: 153 154 print('loading results from cluster') 154 155 md = loadresultsfromcluster(md) 156 155 157 return md -
issm/trunk-jpl/src/m/units/sletogt.m
r24888 r25758 1 1 function conversionfactor=sletogt() 2 3 conversionfactor=361.9; %361.9 Gigatons to 1 mm sea-level equivalent. 2 3 rho_water=1023; 4 conversionfactor=rho_water/1000*361.9; %361.9 Gigatons to 1 mm sea-level equivalent.
Note:
See TracChangeset
for help on using the changeset viewer.