Changeset 25758


Ignore:
Timestamp:
11/16/20 13:22:37 (4 years ago)
Author:
jdquinn
Message:

CHG: Missing changes from merge from Eric’s branch

Location:
issm/trunk-jpl/src
Files:
21 edited

Legend:

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

    r25754 r25758  
    175175        IssmDouble  planetradius=0;
    176176        IssmDouble  planetarea=0;
    177         bool            rigid=false;
    178177        bool            elastic=false;
    179         bool            rotation=false;
    180178
    181179        int     numoutputs;
     
    243241        }
    244242
    245 
    246243        /*Deal with dsl multi-model ensembles: {{{*/
    247244        iomodel->FetchData(&dslmodel,"md.dsl.model");
     
    263260        } /*}}}*/
    264261        /*Deal with elasticity {{{*/
    265         iomodel->FetchData(&rigid,"md.solidearth.settings.rigid");
    266262        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(&degacc,"md.solidearth.settings.degacc");
    272                 M=reCast<int,IssmDouble>(180./degacc+1.);
    273         }
    274 
    275         /*love numbers: */
    276263        if(elastic){
     264                /*love numbers: */
    277265                iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h");
    278266                iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k");
     
    281269                iomodel->FetchData(&love_tk,&nl,NULL,"md.solidearth.lovenumbers.tk");
    282270                iomodel->FetchData(&love_tl,&nl,NULL,"md.solidearth.lovenumbers.tl");
     271                parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum));
    283272
    284273                parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,nl,1));
     
    289278                parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,nl,1));
    290279
     280                /*compute elastic green function for a range of angles*/
     281                iomodel->FetchData(&degacc,"md.solidearth.settings.degacc");
     282                M=reCast<int,IssmDouble>(180./degacc+1.);
     283
    291284                // AD performance is sensitive to calls to ensurecontiguous.
    292285                // // Providing "t" will cause ensurecontiguous to be called.
    293286                #ifdef _HAVE_AD_
     287                G_rigid=xNew<IssmDouble>(M,"t");
    294288                G_elastic=xNew<IssmDouble>(M,"t");
    295289                U_elastic=xNew<IssmDouble>(M,"t");
    296290                H_elastic=xNew<IssmDouble>(M,"t");
    297291                #else
     292                G_rigid=xNew<IssmDouble>(M);
    298293                G_elastic=xNew<IssmDouble>(M);
    299294                U_elastic=xNew<IssmDouble>(M);
    300295                H_elastic=xNew<IssmDouble>(M);
    301296                #endif
    302         }
    303         if(rigid){
    304                 #ifdef _HAVE_AD_
    305                 G_rigid=xNew<IssmDouble>(M,"t");
    306                 #else
    307                 G_rigid=xNew<IssmDouble>(M);
    308                 #endif
    309         }
    310        
    311         if(rotation)parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum));
    312 
    313         if(rigid | elastic){
    314297
    315298                /*compute combined legendre + love number (elastic green function:*/
    316299                m=DetermineLocalSize(M,IssmComm::GetComm());
    317300                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.
    320303                #ifdef _HAVE_AD_
    321304                G_elastic_local=xNew<IssmDouble>(m,"t");
     305                G_rigid_local=xNew<IssmDouble>(m,"t");
    322306                U_elastic_local=xNew<IssmDouble>(m,"t");
    323307                H_elastic_local=xNew<IssmDouble>(m,"t");
    324308                #else
    325309                G_elastic_local=xNew<IssmDouble>(m);
     310                G_rigid_local=xNew<IssmDouble>(m);
    326311                U_elastic_local=xNew<IssmDouble>(m);
    327312                H_elastic_local=xNew<IssmDouble>(m);
    328313                #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
    339315                for(int i=lower_row;i<upper_row;i++){
    340316                        IssmDouble alpha,x;
    341317                        alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0;
     318
    342319                        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 
    350320                        G_elastic_local[i-lower_row]= (love_k[nl-1]-love_h[nl-1])*G_rigid_local[i-lower_row];
    351321                        U_elastic_local[i-lower_row]= (love_h[nl-1])*G_rigid_local[i-lower_row];
     
    386356                        }
    387357                }
    388         }
    389         if(rigid){
    390358
    391359                /*merge G_elastic_local into G_elastic; U_elastic_local into U_elastic; H_elastic_local to H_elastic:{{{*/
     
    401369                /*All gather:*/
    402370                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
    409375                /*free resources: */
    410376                xDelete<int>(recvcounts);
    411377                xDelete<int>(displs);
     378                /*}}}*/
    412379
    413380                /*Avoid singularity at 0: */
    414381                G_rigid[0]=G_rigid[1];
     382                parameters->AddObject(new DoubleVecParam(SealevelriseGRigidEnum,G_rigid,M));
    415383                G_elastic[0]=G_elastic[1];
     384                parameters->AddObject(new DoubleVecParam(SealevelriseGElasticEnum,G_elastic,M));
    416385                U_elastic[0]=U_elastic[1];
     386                parameters->AddObject(new DoubleVecParam(SealevelriseUElasticEnum,U_elastic,M));
    417387                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));
    426389
    427390                /*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);
    428397                xDelete<IssmDouble>(G_rigid);
    429398                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);
    444405        }
    445         /*}}}*/
    446406
    447407        /*Indicate we have not yet run the Geometry Core module: */
    448408        parameters->AddObject(new BoolParam(SealevelriseGeometryDoneEnum,false));
     409        /*}}}*/
    449410
    450411        /*Transitions:{{{ */
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r25756 r25758  
    54465446
    54475447        /*Computational flags:*/
    5448         bool computerigid = false;
    5449         bool computeelastic = false;
     5448        bool computerigid = true;
     5449        bool computeelastic = true;
    54505450        int  horiz;
    54515451
     
    54635463        this->inputs->SetDoubleInput(AreaEnum,this->lid,area);
    54645464        this->AddInput(SealevelAreaEnum,&area,P0Enum);
    5465         if(!computerigid)return;
     5465        if(!computerigid & !computeelastic)return;
    54665466
    54675467        /*recover precomputed green function kernels:*/
     
    54695469        parameter->GetParameterValueByPointer((IssmDouble**)&G_rigid_precomputed,&M);
    54705470
     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
    54715480        /*allocate indices:*/
    54725481        indices=xNew<IssmDouble>(gsize);
    54735482        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);
    54915487        }
    54925488
     
    55035499        /*compute gravity center in lat,long: */
    55045500        late= asin(z_element/planetradius);
    5505         longe = atan2(y_element,x_element);
    5506         /*}}}*/
     5501        longe = atan2(y_element,x_element);
    55075502
    55085503        constant=3/rho_earth*area/planetarea;
     5504
    55095505        for(int i=0;i<gsize;i++){
    55105506                IssmDouble alpha;
     
    55195515
    55205516                /*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                }
    55235523                G[i]=G[i]*constant;
    55245524
    55255525                /*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;
    55445542                }
    55455543        }
    55465544
    55475545        /*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        }
    55595553
    55605554        /*Free allocations:*/
    55615555        #ifdef _HAVE_RESTRICT_
     5556        delete indices;
    55625557        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;
    55695562        }
    55705563        #else
     5564        xDelete(indices);
    55715565        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);
    55785570        }
    55795571        #endif
     
    55915583        bool notfullygrounded=false;
    55925584        bool scaleoceanarea= false;
    5593         bool computerigid= false;
     5585        bool computeelastic= true;
    55945586        int  glfraction=1;
    55955587
     
    56375629        rho_ice=FindParam(MaterialsRhoIceEnum);
    56385630        rho_water=FindParam(MaterialsRhoSeawaterEnum);
    5639         this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
     5631        this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
    56405632        this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
     5633        this->parameters->FindParam(&glfraction,SolidearthSettingsGlfractionEnum);
    56415634
    56425635        /*retrieve precomputed G:*/
    5643         if(computerigid)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
     5636        if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
    56445637
    56455638        /*Get area of element: precomputed in the sealevelrise_core_geometry:*/
     
    56955688        _assert_(!xIsNan<IssmDouble>(bslrice));
    56965689
    5697         if(computerigid){
     5690        if(computeelastic){
    56985691                /*convert from m to kg/m^2:*/
    56995692                I=I*rho_ice*phi;
     
    57215714        bool notfullygrounded=false;
    57225715        bool scaleoceanarea= false;
    5723         bool computerigid= false;
     5716        bool computeelastic= true;
    57245717
    57255718        /*elastic green function:*/
     
    57515744        rho_water=FindParam(MaterialsRhoSeawaterEnum);
    57525745        rho_freshwater=FindParam(MaterialsRhoFreshwaterEnum);
    5753         this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
     5746        this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
    57545747        this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
    57555748
    57565749        /*retrieve precomputed G:*/
    5757         if(computerigid)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
     5750        if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
    57585751
    57595752        /*Get area of element: precomputed in the sealevelrise_core_geometry:*/
     
    57715764        _assert_(!xIsNan<IssmDouble>(bslrhydro));
    57725765
    5773         if(computerigid){
     5766        if(computeelastic){
    57745767                /*convert from m to kg/m^2:*/
    57755768                W=W*rho_freshwater*phi;
     
    57955788        IssmDouble BP;  //change in bottom pressure (Farrel and Clarke, Equ. 4)
    57965789        IssmDouble constant;
    5797         bool computeelastic= false;
     5790        bool computeelastic= true;
    57985791
    57995792        /*elastic green function:*/
     
    58975890
    58985891        /*computational flags:*/
    5899         bool computeelastic= false;
     5892        bool computeelastic= true;
    59005893
    59015894        /*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 np
    21from socket import gethostname
    32from 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
     4import numpy as np
     5
    116try:
    127    from generic_settings import generic_settings
    138except ImportError:
    149    print('Warning generic_settings.py not found, default will be used')
     10from MatlabFuncs import ispc
     11from IssmConfig import IssmConfig
     12from issmdir import issmdir
     13from issmscpin import issmscpin
     14from issmscpout import issmscpout
     15from issmssh import issmssh
     16from pairoptions import pairoptions
    1517
    1618
    1719class 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')
    2425    """
    2526
     
    5051        except NameError:
    5152            print("generic_settings.py not found, using default settings")
    52         # else:
    53         #     raise
    5453
    5554        #OK get other fields
  • issm/trunk-jpl/src/m/classes/mask.m

    r25220 r25758  
    114114                                WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','name','md.mask.ice_levelset','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
    115115                        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);
    117117                        end
    118118                end % }}}
  • issm/trunk-jpl/src/m/classes/mask.py

    r25449 r25758  
    88
    99class mask(object):
    10     '''
    11     MASK class definition
     10    """MASK class definition
    1211
    13         Usage:
    14             mask = mask()
    15     '''
     12    Usage:
     13        mask = mask()
     14    """
     15   
    1616    def __init__(self):  # {{{
    1717        self.ice_levelset = float('NaN')
     
    9191
    9292    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)
    9595    # }}}
  • issm/trunk-jpl/src/m/classes/model.m

    r25751 r25758  
    192192        methods
    193193                function md = model(varargin) % {{{
    194                
    195194
    196195                        switch nargin
    197196                                case 0
    198                                         md=setdefaultparameters(md,'earth');
     197                                        md=setdefaultparameters(md);
     198                                case 1
     199                                        error('model constructor not supported yet');
     200
    199201                                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
    204205                end
    205206                %}}}
     
    424425                                if isobject(md.outputdefinition.definitions{i})
    425426                                        %get subfields
    426                                         solutionsubfields=fieldnames(md.outputdefinition.definitions{i});
     427                                        solutionsubfields=fields(md.outputdefinition.definitions{i});
    427428                                        for j=1:length(solutionsubfields),
    428429                                                field=md.outputdefinition.definitions{i}.(solutionsubfields{j});
     
    548549
    549550                        %loop over model fields
    550                         model_fields=fieldnames(md1);
     551                        model_fields=fields(md1);
    551552                        for i=1:length(model_fields),
    552553                                %get field
     
    554555                                fieldsize=size(field);
    555556                                if isobject(field), %recursive call
    556                                         object_fields=fieldnames(md1.(model_fields{i}));
     557                                        object_fields=fields(md1.(model_fields{i}));
    557558                                        for j=1:length(object_fields),
    558559                                                %get field
     
    721722                        if isstruct(md1.results),
    722723                                md2.results=struct();
    723                                 solutionfields=fieldnames(md1.results);
     724                                solutionfields=fields(md1.results);
    724725                                for i=1:length(solutionfields),
    725726                                        if isstruct(md1.results.(solutionfields{i}))
     
    728729                                                for p=1:length(md1.results.(solutionfields{i}))
    729730                                                    current = md1.results.(solutionfields{i})(p);
    730                                                     solutionsubfields=fieldnames(current);
     731                                                    solutionsubfields=fields(current);
    731732                                                    for j=1:length(solutionsubfields),
    732733                                                        field=md1.results.(solutionfields{i})(p).(solutionsubfields{j});
     
    757758                                if isobject(md1.outputdefinition.definitions{i})
    758759                                        %get subfields
    759                                         solutionsubfields=fieldnames(md1.outputdefinition.definitions{i});
     760                                        solutionsubfields=fields(md1.outputdefinition.definitions{i});
    760761                                        for j=1:length(solutionsubfields),
    761762                                                field=md1.outputdefinition.definitions{i}.(solutionsubfields{j});
     
    12871288                        end
    12881289                end% }}}
    1289                 function md = setdefaultparameters(md,planet) % {{{
     1290                function md = setdefaultparameters(md) % {{{
    12901291
    12911292                        %initialize subclasses
     
    12991300                        md.friction         = friction();
    13001301                        md.rifts            = rifts();
    1301                         md.solidearth       = solidearth(planet);
     1302                        md.solidearth       = solidearth();
    13021303                        md.dsl              = dsl();
    13031304                        md.timestepping     = timestepping();
  • issm/trunk-jpl/src/m/classes/model.py

    r25501 r25758  
    173173
    174174    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
    175180        #print "Here %s the number: %d" % ("is", 37)
    176         string = "%19s: %-22s -- %s" % ("mesh", "[%s %s]" % ("1x1", obj.mesh.__class__.__name__), "mesh properties")
    177         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("mask", "[%s %s]" % ("1x1", obj.mask.__class__.__name__), "defines grounded and floating elements"))
    178         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("geometry", "[%s %s]" % ("1x1", obj.geometry.__class__.__name__), "surface elevation, bedrock topography, ice thickness, ..."))
    179         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("constants", "[%s %s]" % ("1x1", obj.constants.__class__.__name__), "physical constants"))
    180         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("smb", "[%s %s]" % ("1x1", obj.smb.__class__.__name__), "surface mass balance"))
    181         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("basalforcings", "[%s %s]" % ("1x1", obj.basalforcings.__class__.__name__), "bed forcings"))
    182         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("materials", "[%s %s]" % ("1x1", obj.materials.__class__.__name__), "material properties"))
    183         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("damage", "[%s %s]" % ("1x1", obj.damage.__class__.__name__), "damage propagation laws"))
    184         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("friction", "[%s %s]" % ("1x1", obj.friction.__class__.__name__), "basal friction / drag properties"))
    185         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("flowequation", "[%s %s]" % ("1x1", obj.flowequation.__class__.__name__), "flow equations"))
    186         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("timestepping", "[%s %s]" % ("1x1", obj.timestepping.__class__.__name__), "time stepping for transient models"))
    187         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("initialization", "[%s %s]" % ("1x1", obj.initialization.__class__.__name__), "initial guess / state"))
    188         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("rifts", "[%s %s]" % ("1x1", obj.rifts.__class__.__name__), "rifts properties"))
    189         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("solidearth", "[%s %s]" % ("1x1", obj.solidearth.__class__.__name__), "solidearth inputs and settings"))
    190         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("dsl", "[%s %s]" % ("1x1", obj.dsl.__class__.__name__), "dynamic sea level"))
    191         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("debug", "[%s %s]" % ("1x1", obj.debug.__class__.__name__), "debugging tools (valgrind, gprof)"))
    192         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("verbose", "[%s %s]" % ("1x1", obj.verbose.__class__.__name__), "verbosity level in solve"))
    193         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("settings", "[%s %s]" % ("1x1", obj.settings.__class__.__name__), "settings properties"))
    194         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("toolkits", "[%s %s]" % ("1x1", obj.toolkits.__class__.__name__), "PETSc options for each solution"))
    195         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("cluster", "[%s %s]" % ("1x1", obj.cluster.__class__.__name__), "cluster parameters (number of cpus...)"))
    196         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("balancethickness", "[%s %s]" % ("1x1", obj.balancethickness.__class__.__name__), "parameters for balancethickness solution"))
    197         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("stressbalance", "[%s %s]" % ("1x1", obj.stressbalance.__class__.__name__), "parameters for stressbalance solution"))
    198         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("groundingline", "[%s %s]" % ("1x1", obj.groundingline.__class__.__name__), "parameters for groundingline solution"))
    199         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("hydrology", "[%s %s]" % ("1x1", obj.hydrology.__class__.__name__), "parameters for hydrology solution"))
    200         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("masstransport", "[%s %s]" % ("1x1", obj.masstransport.__class__.__name__), "parameters for masstransport solution"))
    201         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("thermal", "[%s %s]" % ("1x1", obj.thermal.__class__.__name__), "parameters for thermal solution"))
    202         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("steadystate", "[%s %s]" % ("1x1", obj.steadystate.__class__.__name__), "parameters for steadystate solution"))
    203         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("transient", "[%s %s]" % ("1x1", obj.transient.__class__.__name__), "parameters for transient solution"))
    204         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("levelset", "[%s %s]" % ("1x1", obj.levelset.__class__.__name__), "parameters for moving boundaries (level - set method)"))
    205         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("calving", "[%s %s]" % ("1x1", obj.calving.__class__.__name__), "parameters for calving"))
    206         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("frontalforcings", "[%s %s]" % ("1x1", obj.frontalforcings.__class__.__name__), "parameters for frontalforcings"))
    207         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("gia", "[%s %s]" % ("1x1", obj.gia.__class__.__name__), "parameters for gia solution"))
    208         string = "%s\n%s" % (string, '%19s: %-22s -- %s' % ("esa", "[%s %s]" % ("1x1", obj.esa.__class__.__name__), "parameters for elastic adjustment solution"))
    209         string = "%s\n%s" % (string, '%19s: %-22s -- %s' % ("love", "[%s %s]" % ("1x1", obj.love.__class__.__name__), "parameters for love solution"))
    210         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("autodiff", "[%s %s]" % ("1x1", obj.autodiff.__class__.__name__), "automatic differentiation parameters"))
    211         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("inversion", "[%s %s]" % ("1x1", obj.inversion.__class__.__name__), "parameters for inverse methods"))
    212         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("qmu", "[%s %s]" % ("1x1", obj.qmu.__class__.__name__), "dakota properties"))
    213         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("amr", "[%s %s]" % ("1x1", obj.amr.__class__.__name__), "adaptive mesh refinement properties"))
    214         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("outputdefinition", "[%s %s]" % ("1x1", obj.outputdefinition.__class__.__name__), "output definition"))
    215         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("results", "[%s %s]" % ("1x1", obj.results.__class__.__name__), "model results"))
    216         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("radaroverlay", "[%s %s]" % ("1x1", obj.radaroverlay.__class__.__name__), "radar image for plot overlay"))
    217         string = "%s\n%s" % (string, "%19s: %-22s -- %s" % ("miscellaneous", "[%s %s]" % ("1x1", obj.miscellaneous.__class__.__name__), "miscellaneous fields"))
    218         return string
     181        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
    219224    # }}}
    220225
  • issm/trunk-jpl/src/m/classes/organizer.m

    r25120 r25758  
    156156                        error(['Could not find ' path ]);
    157157                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%}}}
    158180                function bool=perform(org,varargin) % {{{
    159181
     
    254276                        eval(['save(''' name '''' variables ',''-v7.3'');']);
    255277                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%}}}
    256304        end
    257305end
  • issm/trunk-jpl/src/m/classes/solidearth.m

    r25751 r25758  
    1414                requested_outputs      = {};
    1515                transitions            = {};
    16                 partitionice              = [];
    17                 partitionhydro             = [];
     16                partitionice           = [];
     17                partitionhydro         = [];
    1818        end
    1919        methods
     
    2121                        switch nargin
    2222                                case 0
    23                                         self=setdefaultparameters(self,earth);
    24                                 case 1
    25                                         self=setdefaultparameters(self,varargin{:});
     23                                        self=setdefaultparameters(self);
    2624                                otherwise
    27                                         error('solidearth constructor error message: zero or one argument  only!');
     25                                        error('constructor not supported');
    2826                        end
    2927                end % }}}
    30                 function self = setdefaultparameters(self,planet) % {{{
     28                function self = setdefaultparameters(self) % {{{
    3129               
    3230                %output default:
     
    3533                %transitions should be a cell array of vectors:
    3634                self.transitions={};
    37 
     35               
    3836                %no partitions requested for barystatic contribution:
    3937                self.partitionice=[];
     
    4139
    4240                %earth radius
    43                 self.planetradius= planetradius(planet);
     41                self.planetradius= planetradius('earth');
    4442               
    4543                end % }}}
  • issm/trunk-jpl/src/m/classes/solidearth.py

    r25688 r25758  
    11import numpy as np
     2
    23from checkfield import checkfield
    34from fielddisplay import fielddisplay
     
    1920
    2021    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     = []
    2932
    3033        nargin = len(args)
     
    5053
    5154    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')
    5367    #}}}
    5468
     
    5872        md = checkfield(md, 'fieldname', 'solidearth.sealevel', 'NaN', 1, 'Inf', 1, 'size', [md.mesh.numberofvertices])
    5973        md = checkfield(md, 'fieldname', 'solidearth.requested_outputs', 'stringrow', 1)
     74
    6075        self.settings.checkconsistency(md, solution, analyses)
    6176        self.surfaceload.checkconsistency(md, solution, analyses)
     
    7388        WriteData(fid, prefix, 'object', self, 'fieldname', 'planetradius', 'format', 'Double')
    7489        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');
    75105
    76106        self.settings.marshall(prefix, md, fid)
  • issm/trunk-jpl/src/m/classes/solidearthsettings.m

    r25751 r25758  
    1717                degacc                 = 0; %degree increment for resolution of Green tables
    1818                horiz                  = 0; %compute horizontal deformation
     19                glfraction             = 1; %barystatic contribution full or fractional (default fractional)
    1920        end
    2021        methods
     
    4849                %how many time steps we skip before we run solidearthsettings solver during transient
    4950                self.runfrequency=1;
     51               
     52                %fractional contribution:
     53                self.glfraction=1;
    5054       
    5155                %horizontal displacement?  (not by default)
     
    6367                        md = checkfield(md,'fieldname','solidearth.settings.degacc','size',[1 1],'>=',1e-10);
    6468                        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]);
    7070
    7171                        %a coupler to a planet model is provided.
     
    9696                        fielddisplay(self,'rotation','earth rotational potential perturbation');
    9797                        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');
    9899                end % }}}
    99100                function marshall(self,prefix,md,fid) % {{{
     
    109110                        WriteData(fid,prefix,'object',self,'fieldname','horiz','name','md.solidearth.settings.horiz','format','Integer');
    110111                        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');
    111113                end % }}}
    112114                function savemodeljs(self,fid,modelname) % {{{
     
    121123                        writejsdouble(fid,[modelname '.slr.settings.run_frequency'],self.run_frequency);
    122124                        writejsdouble(fid,[modelname '.slr.settings.degacc'],self.degacc);
     125                        writejsdouble(fid,[modelname '.slr.settings.glfraction'],self.glfraction);
    123126                end % }}}
    124127                function self = extrude(self,md) % {{{
  • issm/trunk-jpl/src/m/classes/solidearthsettings.py

    r25688 r25758  
    1414
    1515    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
    1629        nargin = len(args)
    1730
     
    3346        s += '{}\n'.format(fielddisplay(self, 'elastic', 'elastic earth graviational potential perturbation'))
    3447        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'))
    3549        return s
    3650    #}}}
     
    5973        # Horizontal displacement? (not on by default)
    6074        self.horiz = 0
    61         return self
     75
     76        # Fractional contribution
     77        self.glfraction = 1
    6278    #}}}
    6379
     
    7187        md = checkfield(md, 'fieldname', 'solidearth.settings.degacc', 'size', [1], '>=', 1e-10)
    7288        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])
    7390
    7491        # A coupler to planet model is provided
     
    88105    def marshall(self, prefix, md, fid): #{{{
    89106        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')
    100118    #}}}
    101119
  • issm/trunk-jpl/src/m/contrib/larour/glacier_inventory.m

    r25627 r25758  
    183183                        %Go through O2 regions:
    184184                        for i=subsetregions,
     185                        %for i=33,
    185186                                string=self.boxes(i).RGI_CODE;
    186187                                disp(['progressing with region ' num2str(i) ' ' string]);
     
    208209                                                case 19, radius=60;
    209210                                                case 32, radius=60;
    210                                                 case 33, radius=5;
     211                                                case 33, radius=10;
    211212                                                case 41, radius=75;
    212213                                                case 42, radius=45;
  • issm/trunk-jpl/src/m/contrib/larour/ismip6.m

    r25272 r25758  
    1313                directories    = {};   %directories where the files are
    1414                experiments    = {};   %names of experiments
     15                base           = {};   %placeholder for base
     16                surface        = {};   %placeholder for surface
    1517                thickness      = {};   %placeholder for thicknesses
    1618                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={}; 
    1723                icemask        = {};   %placeholder for ice masks
    1824                oceanmask      = {};   %placeholder for ocean masks
     
    2026                timestart      = {};   %placeholder for times
    2127                calendar      = {};   %placeholder for times
     28                di            = {}; %ice densities
    2229        end
    2330        methods
     
    146153                        end
    147154
     155                        if ~exist('timestart','var'), timestart=2015; end
     156                        if ~exist('calendar','var'), calendar=0; end
     157
    148158                end % }}}
    149159                function info=readinfo(self,experiment,field) % {{{
     
    203213
    204214                                %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
    206221
    207222                                %keep field:
     
    209224                                        pos=find(isnan(hg)); hg(pos)=0;
    210225                                        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;
    211234                                end
    212235                                if strcmpi(field,'sftgif'),
     
    220243                                end
    221244                                if strcmpi(field,'sftgrf'),
    222                                         hge=-ones(md.mesh.numberofvertices,size(hg,2));
     245                                        hgv=-ones(md.mesh.numberofvertices,size(hg,2));
    223246                                        for j=1:size(hg,2),
    224247                                                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;
    229253                                end
    230254
  • issm/trunk-jpl/src/m/contrib/larour/mme_autotime_correlation_matrix.m

    r25627 r25758  
    1 function matrix=mme_time_correlation_matrix(mme,varargin);
     1function matrix=mme_autotime_correlation_matrix(mme,type)
    22
    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
    1019        end
    1120
    12         if nargin==2,
    13 
    14                 %Out of a multi model ensemble (nsamples x nsteps) of runs, build
    15                 %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                         end
    29                 end
    30         else
    31 
    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                 end
    39                 if nsamples2~=nsamples,
    40                         error('number of samples from both sample matrices should be identical!');
    41                 end
    42 
    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                         end
    52                 end
    53         end
  • issm/trunk-jpl/src/m/interp/averaging.m

    r25499 r25758  
    6464else
    6565        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
    6771end
    6872summation=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)
     1function  [index2 x2 y2 value2 newpos]=FixMesh(index,x,y,value)
    22% FIXMESH - FixMesh fix mesh with broken triangles, orphan vertices, etc ...
    33%
     
    1515y2=y;
    1616value2=value;
     17newpos=1:length(x);
    1718
    1819%First, look for orphan vertices, and take them out.
     
    2930        y2(orphan)=[];
    3031        value2(orphan)=[];
     32        newpos(orphan)=[];
    3133
    3234        %now, the index:
  • issm/trunk-jpl/src/m/plot/processdatalatlong.m

    r25627 r25758  
    2222                %interpolate data:
    2323                extradata=griddata(x0,y0,data,xextra,yextra,'nearest');
    24 
    2524                data=[data; extradata];
    2625        elseif length(data)==length(md.mesh.elements),
    27                 error('processdatalatlong error message: coord ''latlong'' case not covered for element data ');
    2826                datatype=1;
    2927        end
  • issm/trunk-jpl/src/m/solve/solve.m

    r25168 r25758  
    44%   Usage:
    55%      md=solve(md,solutionstring,varargin)
    6 %      where varargin is a lit of paired arguments of string OR enums
    76%
    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
    248%
    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
    3133%
    3234%   Examples:
     
    111113end
    112114
    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.
    114116if md.qmu.isdakota,
    115117        md=preqmu(md,options);
  • issm/trunk-jpl/src/m/solve/solve.py

    r25499 r25758  
    1 import datetime
     1from datetime import datetime
    22import os
    33import shutil
     
    1616    Usage:
    1717        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
    1920
    20         solution types available comprise:
    21             - 'Stressbalance'      or 'sb'
    22             - 'Masstransport'      or 'mt'
    23             - 'Thermal'            or 'th'
    24             - 'Steadystate'        or 'ss'
    25             - 'Transient'          or 'tr'
    26             - 'Balancethickness'   or 'mc'
    27             - 'Balancevelocity'    or 'bv'
    28             - 'BedSlope'           or 'bsl'
    29             - 'SurfaceSlope'       or 'ssl'
    30             - 'Hydrology'          or 'hy'
    31             - 'DamageEvolution'    or 'da'
    32             - 'Gia'                or 'gia'
    33             - 'Esa'                or 'esa'
    34             - 'Sealevelrise'       or 'slr'
    35             - 'Love'               or 'lv'
     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'
    3637
    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
    4345
    4446    Examples:
     
    4749    """
    4850
    49     #recover and process solve options
     51    # Recover and process solve options
    5052    if solutionstring.lower() == 'sb' or solutionstring.lower() == 'stressbalance':
    5153        solutionstring = 'StressbalanceSolution'
     
    8284    options = pairoptions('solutionstring', solutionstring, *args)
    8385
    84     #recover some fields
     86    # Recover some fields
    8587    md.private.solution = solutionstring
    8688    cluster = md.cluster
     
    9092        batch = 0
    9193
    92     #check model consistency
     94    # Check model consistency
    9395    if options.getfieldvalue('checkconsistency', 'yes') == 'yes':
    9496        if md.verbose.solution:
     
    9698        ismodelselfconsistent(md)
    9799
    98     #First, build a runtime name that is unique
     100    # First, build a runtime name that is unique
    99101    restart = options.getfieldvalue('restart', '')
    100102    if restart == 1:
    101         pass  #do nothing
     103        pass  # do nothing
    102104    else:
    103105        if restart:
     
    105107        else:
    106108            if options.getfieldvalue('runtimename', True):
    107                 c = datetime.datetime.now()
     109                c = datetime.now()
    108110                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())
    109111            else:
    110112                md.private.runtimename = md.miscellaneous.name
    111113
    112     #if running qmu analysis, some preprocessing of dakota files using models
    113     #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
    114116    if md.qmu.isdakota:
    115117        md = preqmu(md, options)
    116118
    117     #Do we load results only?
     119    # Do we load results only?
    118120    if options.getfieldvalue('loadonly', False):
    119121        md = loadresultsfromcluster(md)
    120122        return md
    121123
    122     #Write all input files
    123     marshall(md)  # bin file
    124     md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits')  # toolkits file
    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)  # queue file
     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
    126128
    127     #Stop here if batch mode
     129    # Stop here if batch mode
    128130    if options.getfieldvalue('batch', 'no') == 'yes':
    129131        print('batch mode requested: not launching job interactively')
     
    131133        return md
    132134
    133     #Upload all required files:
     135    # Upload all required files:
    134136    modelname = md.miscellaneous.name
    135137    filelist = [modelname + '.bin ', modelname + '.toolkits ', modelname + '.queue ']
     
    140142        cluster.UploadQueueJob(md.miscellaneous.name, md.private.runtimename, filelist)
    141143
    142     #Launch job
     144    # Launch job
    143145    cluster.LaunchQueueJob(md.miscellaneous.name, md.private.runtimename, filelist, restart, batch)
    144146
    145     #wait on lock
     147    # Wait on lock
    146148    if md.settings.waitonlock > 0:
    147         #we wait for the done file
    148149        islock = waitonlock(md)
    149         if islock == 0:  #no results to be loaded
     150        if islock == 0:  # no results to be loaded
    150151            print('The results must be loaded manually with md = loadresultsfromcluster(md).')
    151         else:  #load results
     152        else:  # load results
    152153            if md.verbose.solution:
    153154                print('loading results from cluster')
    154155            md = loadresultsfromcluster(md)
     156
    155157    return md
  • issm/trunk-jpl/src/m/units/sletogt.m

    r24888 r25758  
    11function 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.