Changeset 22114


Ignore:
Timestamp:
09/19/17 16:01:01 (8 years ago)
Author:
Eric.Larour
Message:

CHG: introduce horiz to bypass horiztonal displacment computations in slr. 20% improvement in time.

Location:
issm/branches/trunk-larour-NatGeoScience2016/src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/analyses/SealevelriseAnalysis.cpp

    r22108 r22114  
    8686        parameters->AddObject(iomodel->CopyConstantObject("md.slr.loop_increment",SealevelriseLoopIncrementEnum));
    8787        parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
     88        parameters->AddObject(iomodel->CopyConstantObject("md.slr.horiz",SealevelriseHorizEnum));
    8889        parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
    8990        parameters->AddObject(iomodel->CopyConstantObject("md.slr.run_frequency",SealevelriseRunFrequencyEnum));
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Element.h

    r21759 r22114  
    315315                virtual void          SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea)=0;
    316316                virtual void          SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea)=0;
    317                 virtual void          SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea)=0;
     317                virtual void          SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz)=0;
    318318                #endif
    319319
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Penta.h

    r21759 r22114  
    198198                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    199199                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
    200                 void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
     200                void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
    201201                #endif
    202202
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Seg.h

    r21759 r22114  
    178178                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    179179                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
    180                 void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
     180                void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
    181181                IssmDouble    OceanArea(void){_error_("not implemented yet!");};
    182182                IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tetra.h

    r21759 r22114  
    185185                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    186186                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
    187                 void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
     187                void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
    188188                IssmDouble    OceanArea(void){_error_("not implemented yet!");};
    189189                IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.cpp

    r21759 r22114  
    43354335}
    43364336/*}}}*/
    4337 void    Tria::SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){ /*{{{*/
     4337void    Tria::SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){ /*{{{*/
    43384338
    43394339        /*diverse:*/
     
    43594359        IssmDouble* N_elastic= NULL;
    43604360        IssmDouble* E_elastic= NULL;
     4361        DoubleVecParam* U_parameter = NULL;
     4362        DoubleVecParam* H_parameter = NULL;
     4363        IssmDouble* U_values=NULL;
     4364        IssmDouble* N_values=NULL;
     4365        IssmDouble* E_values=NULL;
    43614366
    43624367        /*optimization:*/
     
    44334438
    44344439        /*recover elastic Green's functions for displacement:*/
    4435         DoubleVecParam* U_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(U_parameter);
    4436         DoubleVecParam* H_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(H_parameter);
     4440        U_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(U_parameter);
    44374441        U_parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M);
    4438         H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M);
     4442        if(horiz){
     4443                H_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(H_parameter);
     4444                H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M);
     4445        }
    44394446
    44404447        /*From Sg, recover water sea level rise:*/
     
    44484455        /*initialize: */
    44494456        U_elastic=xNewZeroInit<IssmDouble>(gsize);
    4450         N_elastic=xNewZeroInit<IssmDouble>(gsize);
    4451         E_elastic=xNewZeroInit<IssmDouble>(gsize);
     4457        if(horiz){
     4458                N_elastic=xNewZeroInit<IssmDouble>(gsize);
     4459                E_elastic=xNewZeroInit<IssmDouble>(gsize);
     4460        }
    44524461
    44534462        int* indices=xNew<int>(gsize);
    4454         IssmDouble* U_values=xNewZeroInit<IssmDouble>(gsize);
    4455         IssmDouble* N_values=xNewZeroInit<IssmDouble>(gsize);
    4456         IssmDouble* E_values=xNewZeroInit<IssmDouble>(gsize);
     4463        U_values=xNewZeroInit<IssmDouble>(gsize);
     4464        if(horiz){
     4465                N_values=xNewZeroInit<IssmDouble>(gsize);
     4466                E_values=xNewZeroInit<IssmDouble>(gsize);
     4467        }
    44574468        IssmDouble alpha;
    44584469        IssmDouble delPhi,delLambda;
     
    44794490                }
    44804491                dx = x_element-x; dy = y_element-y; dz = z_element-z;
    4481                 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);
    4482                 E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
     4492                if(horiz){
     4493                        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);
     4494                        E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
     4495                }
    44834496               
    44844497                /*Elastic component  (from Eq 17 in Adhikari et al, GMD 2015): */
    44854498                int index=reCast<int,IssmDouble>(alpha/PI*(M-1));
    44864499                U_elastic[i] += U_elastic_precomputed[index];
    4487                 N_elastic[i] += H_elastic_precomputed[index]*N_azim;
    4488                 E_elastic[i] += H_elastic_precomputed[index]*E_azim;
     4500                if(horiz){
     4501                        N_elastic[i] += H_elastic_precomputed[index]*N_azim;
     4502                        E_elastic[i] += H_elastic_precomputed[index]*E_azim;
     4503                }
    44894504
    44904505                /*Add all components to the pUp solution vectors:*/
    44914506                if(this->inputs->Max(MaskIceLevelsetEnum)<0){
    44924507                        U_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*U_elastic[i];
    4493                         N_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*N_elastic[i];
    4494                         E_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*E_elastic[i];
     4508                        if(horiz){
     4509                                N_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*N_elastic[i];
     4510                                E_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*E_elastic[i];
     4511                        }
    44954512                }
    44964513                else if(IsWaterInElement()) {
    44974514                        U_values[i]+=3*rho_water/rho_earth*area/eartharea*S*U_elastic[i];
    4498                         N_values[i]+=3*rho_water/rho_earth*area/eartharea*S*N_elastic[i];
    4499                         E_values[i]+=3*rho_water/rho_earth*area/eartharea*S*E_elastic[i];
     4515                        if(horiz){
     4516                                N_values[i]+=3*rho_water/rho_earth*area/eartharea*S*N_elastic[i];
     4517                                E_values[i]+=3*rho_water/rho_earth*area/eartharea*S*E_elastic[i];
     4518                        }
    45004519                }
    45014520        }
    45024521        pUp->SetValues(gsize,indices,U_values,ADD_VAL);
    4503         pNorth->SetValues(gsize,indices,N_values,ADD_VAL);
    4504         pEast->SetValues(gsize,indices,E_values,ADD_VAL);
     4522        if(horiz){
     4523                pNorth->SetValues(gsize,indices,N_values,ADD_VAL);
     4524                pEast->SetValues(gsize,indices,E_values,ADD_VAL);
     4525        }
    45054526
    45064527        /*free ressources:*/
    45074528        xDelete<int>(indices);
    4508         xDelete<IssmDouble>(U_values); xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);
    4509         xDelete<IssmDouble>(U_elastic); xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);
     4529        xDelete<IssmDouble>(U_values);
     4530        xDelete<IssmDouble>(U_elastic);
     4531        if(horiz){
     4532                xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);
     4533                xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);
     4534        }
    45104535
    45114536        return;
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.h

    r21759 r22114  
    156156                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea);
    157157                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea);
    158                 void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea);
     158                void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz);
    159159                #endif
    160160                /*}}}*/
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.cpp

    r22108 r22114  
    26062606}
    26072607/*}}}*/
    2608 void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop){/*{{{*/
     2608void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz){/*{{{*/
    26092609
    26102610        /*serialized vectors:*/
     
    26392639                        if(VerboseConvergence())if(i%100==0)_printf0_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%  ");
    26402640                        Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    2641                         element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea);
     2641                        element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea,horiz);
    26422642                }
    26432643                if(i%loop==0){
    26442644                        pUp->Assemble();
    2645                         pNorth->Assemble();
    2646                         pEast->Assemble();
     2645                        if (horiz){
     2646                                pNorth->Assemble();
     2647                                pEast->Assemble();
     2648                        }
    26472649                }
    26482650        }
     
    26502652        /*One last time: */
    26512653        pUp->Assemble();
    2652         pNorth->Assemble();
    2653         pEast->Assemble();
     2654        if(horiz){
     2655                pNorth->Assemble();
     2656                pEast->Assemble();
     2657        }
    26542658
    26552659        /*Free ressources:*/
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.h

    r22108 r22114  
    129129                void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution,int loop);
    130130                void SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);
    131                 void SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop);
     131                void SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz);
    132132                IssmDouble SealevelriseOceanAverage(Vector<IssmDouble>* Sg);
    133133                #endif
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/sealevelrise_core.cpp

    r22108 r22114  
    3737        int                 frequency;
    3838        int  loop;
     39        int  horiz;
    3940
    4041        /*Recover some parameters: */
     
    4546        femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
    4647        femmodel->parameters->FindParam(&loop,SealevelriseLoopIncrementEnum);
     48        femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
    4749       
    4850        /*first, recover lat,long and radius vectors from vertices: */
     
    101103                /*Initialize:*/
    102104                U_radial = new Vector<IssmDouble>(gsize);
    103                 U_north = new Vector<IssmDouble>(gsize);
    104                 U_east = new Vector<IssmDouble>(gsize);
     105                if (horiz){
     106                        U_north = new Vector<IssmDouble>(gsize);
     107                        U_east = new Vector<IssmDouble>(gsize);
     108                }
    105109                Sg_absolute = new Vector<IssmDouble>(gsize);
    106110               
    107111                /*call the geodetic main modlule:*/
    108                 femmodel->SealevelriseGeodetic(U_radial,U_north,U_east,Sg,latitude,longitude,radius,xx,yy,zz,loop);
     112                femmodel->SealevelriseGeodetic(U_radial,U_north,U_east,Sg,latitude,longitude,radius,xx,yy,zz,loop,horiz);
    109113                               
    110114                /*Now deal with steric ocean expansion by just shifting Sg by a spatial rate pattern : */
     
    119123                /*get results into elements:*/
    120124                InputUpdateFromVectorx(femmodel,U_radial,SealevelUmotionEnum,VertexSIdEnum);    // radial displacement
    121                 InputUpdateFromVectorx(femmodel,U_north,SealevelNmotionEnum,VertexSIdEnum);     // north motion
    122                 InputUpdateFromVectorx(femmodel,U_east,SealevelEmotionEnum,VertexSIdEnum);              // east motion
     125                if (horiz){
     126                        InputUpdateFromVectorx(femmodel,U_north,SealevelNmotionEnum,VertexSIdEnum);     // north motion
     127                        InputUpdateFromVectorx(femmodel,U_east,SealevelEmotionEnum,VertexSIdEnum);              // east motion
     128                }
    123129                InputUpdateFromVectorx(femmodel,Sg_absolute,SealevelAbsoluteEnum,VertexSIdEnum); //absolute sea level
    124130                InputUpdateFromVectorx(femmodel,Sg,SealevelEnum,VertexSIdEnum); //relative sea level
     
    137143                /*Free ressources:*/   
    138144                delete U_radial;
    139                 delete U_north;
    140                 delete U_east;
     145                if(horiz){
     146                        delete U_north;
     147                        delete U_east;
     148                }
    141149                delete Sg_absolute;
    142150                delete Sg_eustatic;
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumDefinitions.h

    r22108 r22114  
    794794        SealevelriseMaxiterEnum,
    795795        SealevelriseLoopIncrementEnum,
     796        SealevelriseHorizEnum,
    796797        SealevelriseReltolEnum,
    797798        SealevelriseAbstolEnum,
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumToStringx.cpp

    r22108 r22114  
    774774                case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
    775775                case SealevelriseLoopIncrementEnum : return "SealevelriseLoopIncrement";
     776                case SealevelriseHorizEnum : return "SealevelriseHoriz";
    776777                case SealevelriseReltolEnum : return "SealevelriseReltol";
    777778                case SealevelriseAbstolEnum : return "SealevelriseAbstol";
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/StringToEnumx.cpp

    r22108 r22114  
    792792              else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
    793793              else if (strcmp(name,"SealevelriseLoopIncrement")==0) return SealevelriseLoopIncrementEnum;
     794              else if (strcmp(name,"SealevelriseHoriz")==0) return SealevelriseHorizEnum;
    794795              else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
    795796              else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
     
    874875              else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
    875876              else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
    876               else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
     880              if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
     881              else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
    881882              else if (strcmp(name,"Segment")==0) return SegmentEnum;
    882883              else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
     
    997998              else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
    998999              else if (strcmp(name,"P2")==0) return P2Enum;
    999               else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
     1003              if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
     1004              else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
    10041005              else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
    10051006              else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
  • issm/branches/trunk-larour-NatGeoScience2016/src/m/classes/slr.m

    r22091 r22114  
    2828                run_frequency  = 1; %how many time steps we skip before we run SLR solver during transient
    2929                degacc         = 0;
     30                loop_increment = 0;
     31                horiz = 0;
    3032                requested_outputs      = {};
    3133                transitions    = {};
     
    4850                %maximum of non-linear iterations.
    4951                self.maxiter=10;
     52                self.loop_increment=200;
    5053
    5154                %computational flags:
     
    8487                %transitions should be a cell array of vectors:
    8588                self.transitions={};
     89
     90                %horizontal displacement?  (not by default)
     91                self.horiz=0;
    8692               
    8793                end % }}}
     
    108114                        md = checkfield(md,'fieldname','slr.degacc','size',[1 1],'>=',1e-10);
    109115                        md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
     116                        md = checkfield(md,'fieldname','slr.loop_increment','NaN',1,'Inf',1,'>=',1);
     117                        md = checkfield(md,'fieldname','slr.horiz','NaN',1,'Inf',1,'values',[0 1]);
    110118
    111119                        %check that love numbers are provided at the same level of accuracy:
     
    182190                        WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
    183191                        WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
     192                        WriteData(fid,prefix,'object',self,'fieldname','loop_increment','format','Integer');
     193                        WriteData(fid,prefix,'object',self,'fieldname','horiz','format','Integer');
    184194                       
    185195                        %process requested outputs
Note: See TracChangeset for help on using the changeset viewer.