Changeset 25742


Ignore:
Timestamp:
11/10/20 09:22:05 (4 years ago)
Author:
Eric.Larour
Message:

CHG: diverse

Location:
issm/branches/trunk-larour-SLPS2020/src
Files:
15 edited

Legend:

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

    r25724 r25742  
    185185        int         *transitions_N    = NULL;
    186186        int          ntransitions;
     187        IssmDouble*  partitionice=NULL;
     188        IssmDouble*  partitionhydro=NULL;
     189        IssmDouble*  bslrice_partition=NULL;
     190        IssmDouble*  bslrhydro_partition=NULL;
     191        int          npartice,nparthydro,nel;
     192
    187193
    188194        /*some constant parameters: */
     
    212218        planetarea=4*PI*planetradius*planetradius;
    213219        parameters->AddObject(new DoubleParam(SolidearthPlanetAreaEnum,planetarea));
     220               
     221        /*Deal with partition of the barystatic contribution:*/
     222        iomodel->FetchData(&npartice,"md.solidearth.npartice");
     223        parameters->AddObject(new IntParam(SolidearthNpartIceEnum,npartice));
     224        if(npartice){
     225                iomodel->FetchData(&partitionice,&nel,NULL,"md.solidearth.partitionice");
     226                parameters->AddObject(new DoubleMatParam(SolidearthPartitionIceEnum,partitionice,nel,1));
     227                parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.npartice",SolidearthNpartIceEnum));
     228                bslrice_partition=xNewZeroInit<IssmDouble>(npartice);
     229                parameters->AddObject(new DoubleMatParam(CumBslrIcePartitionEnum,bslrice_partition,npartice,1));
     230                xDelete<IssmDouble>(partitionice);
     231        }
     232        iomodel->FetchData(&nparthydro,"md.solidearth.nparthydro");
     233        parameters->AddObject(new IntParam(SolidearthNpartHydroEnum,nparthydro));
     234        if(nparthydro){
     235                iomodel->FetchData(&partitionhydro,&nel,NULL,"md.solidearth.partitionhydro");
     236                parameters->AddObject(new DoubleMatParam(SolidearthPartitionHydroEnum,partitionhydro,nel,1));
     237                parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.nparthydro",SolidearthNpartHydroEnum));
     238                bslrhydro_partition=xNewZeroInit<IssmDouble>(nparthydro);
     239                parameters->AddObject(new DoubleMatParam(CumBslrHydroPartitionEnum,bslrhydro_partition,nparthydro,1));
     240                xDelete<IssmDouble>(partitionhydro);
     241        }
     242
    214243
    215244        /*Deal with dsl multi-model ensembles: {{{*/
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Element.h

    r25534 r25742  
    378378                virtual IssmDouble    OceanAverage(IssmDouble* Sg, SealevelMasks* masks)=0;
    379379                virtual void          SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks)=0;
    380                 virtual IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks,IssmDouble oceanarea)=0;
    381                 virtual IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks,IssmDouble oceanarea)=0;
     380                virtual IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks,Vector<IssmDouble>* barystatic_contribution,IssmDouble* partition,IssmDouble oceanarea)=0;
     381                virtual IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks,Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea)=0;
    382382                virtual void          SealevelriseEustaticBottomPressure(IssmDouble* Sgi, SealevelMasks* masks)=0;
    383383                virtual void          SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz)=0;
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Penta.h

    r25534 r25742  
    216216                void    SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");};
    217217                void    SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");};
    218                 IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
    219                 IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
     218                IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea){_error_("not implemented yet!");};
     219                IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition,IssmDouble oceanarea){_error_("not implemented yet!");};
    220220                void    SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");};
    221221                void    SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");};
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Seg.h

    r25534 r25742  
    173173                void    SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");};
    174174                void    SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");};
    175                 IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
    176                 IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
     175                IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea){_error_("not implemented yet!");};
     176                IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition,IssmDouble oceanarea){_error_("not implemented yet!");};
    177177                void    SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");};
    178178                void    SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");};
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Tetra.h

    r25534 r25742  
    179179                void    SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");};
    180180                void    SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");};
    181                 IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
    182                 IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");};
     181                IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea){_error_("not implemented yet!");};
     182                IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition,IssmDouble oceanarea){_error_("not implemented yet!");};
    183183                void    SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");};
    184184                void    SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");};
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Tria.cpp

    r25724 r25742  
    56555655}
    56565656/*}}}*/
    5657 IssmDouble Tria::SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/
     5657IssmDouble Tria::SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea){ /*{{{*/
    56585658
    56595659        /*diverse:*/
     
    57265726
    57275727                phi=this->GetGroundedPortion(&xyz_list[0][0]); //watch out, this only works because of the Thales theorem! We are in 3D, but this routine is inherently for 2D trias
     5728                if(glfraction==0)phi=1;
    57285729                #ifdef _ISSM_DEBUG_
    57295730                this->AddInput2(SealevelEustaticMaskEnum,&phi,P0Enum);
    57305731                #endif
    5731                 if(glfraction==0)phi=1;
    57325732        }
    57335733        else phi=1.0;
     
    57795779        }
    57805780
     5781        /*Plug bslrice into barystatic contribution vector:*/
     5782        if(barystatic_contribution){
     5783                id=partition[this->Sid()]+1;
     5784                barystatic_contribution->SetValue(id,bslrice,ADD_VAL);
     5785        }
     5786
    57815787        /*return :*/
    57825788        return bslrice;
    57835789}
    57845790/*}}}*/
    5785 IssmDouble Tria::SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/
     5791IssmDouble Tria::SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea){ /*{{{*/
    57865792
    57875793        /*diverse:*/
     
    58475853                /*convolve:*/
    58485854                for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*W;
     5855        }
     5856
     5857        /*Plug bslrice into barystatic contribution vector:*/
     5858        if(barystatic_contribution){
     5859                id=partition[this->Sid()]+1;
     5860                barystatic_contribution->SetValue(id,bslrhydro,ADD_VAL);
    58495861        }
    58505862
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/Elements/Tria.h

    r25534 r25742  
    166166                void    SetSealevelMasks(SealevelMasks* masks);
    167167                void    SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz);
    168                 IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea);
    169                 IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea);
     168                IssmDouble    SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition, IssmDouble oceanarea);
     169                IssmDouble    SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, Vector<IssmDouble>* barystatic_contribution, IssmDouble* partition,IssmDouble oceanarea);
    170170                void    SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks);
    171171                void    SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old,SealevelMasks* masks);
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/FemModel.cpp

    r25596 r25742  
    47084708#endif
    47094709#ifdef _HAVE_SEALEVELRISE_
    4710 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, SealevelMasks* masks) { /*{{{*/
     4710void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, IssmDouble** pbslrice_partition,IssmDouble** pbslrhydro_partition,SealevelMasks* masks) { /*{{{*/
    47114711
    47124712        /*serialized vectors:*/
     
    47194719        IssmDouble  oceanarea_cpu  = 0.;
    47204720        int bp_compute_fingerprints= 0;
     4721       
     4722        Vector<IssmDouble>* bslrice_partition=NULL;
     4723        IssmDouble* bslrice_partition_serial=NULL;
     4724        IssmDouble* partitionice=NULL;
     4725        int npartice,nel;
     4726
     4727        Vector<IssmDouble>* bslrhydro_partition=NULL;
     4728        IssmDouble* bslrhydro_partition_serial=NULL;
     4729        IssmDouble* partitionhydro=NULL;
     4730        int nparthydro;
     4731               
    47214732
    47224733   /*Initialize temporary vector that will be used to sum eustatic components
     
    47374748        _assert_(oceanarea>0.);
    47384749
     4750        /*Initialize partition vectors to retrieve barystatic contributions: */
     4751        this->parameters->FindParam(&npartice,SolidearthNpartIceEnum);
     4752        if(npartice){
     4753                this->parameters->FindParam(&partitionice,&nel,NULL,SolidearthPartitionIceEnum);
     4754                bslrice_partition= new Vector<IssmDouble>(npartice);
     4755        }
     4756
     4757        this->parameters->FindParam(&nparthydro,SolidearthNpartHydroEnum);
     4758        if(nparthydro){
     4759                this->parameters->FindParam(&partitionhydro,&nel,NULL,SolidearthPartitionHydroEnum);
     4760                bslrhydro_partition= new Vector<IssmDouble>(nparthydro);
     4761        }
     4762
     4763
    47394764        /*Call the sea level rise core for ice : */
    47404765        bslrice_cpu=0;
    47414766        for(int i=0;i<elements->Size();i++){
    47424767                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    4743                 bslrice_cpu+=element->SealevelriseEustaticIce(RSLgi,masks, oceanarea);
    4744         }
    4745 
     4768                bslrice_cpu+=element->SealevelriseEustaticIce(RSLgi,masks, bslrice_partition,partitionice,oceanarea);
     4769        }
     4770       
     4771       
    47464772        /*Call the sea level rise core for hydro: */
    47474773        bslrhydro_cpu=0;
    47484774        for(int i=0;i<elements->Size();i++){
    47494775                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    4750                 bslrhydro_cpu+=element->SealevelriseEustaticHydro(RSLgi,masks, oceanarea);
     4776                bslrhydro_cpu+=element->SealevelriseEustaticHydro(RSLgi,masks, bslrhydro_partition,partitionhydro,oceanarea);
    47514777        }
    47524778
     
    47734799        _assert_(!xIsNan<IssmDouble>(bslrhydro));
    47744800
     4801        /*Take care of partition vectors:*/
     4802        if(bslrice_partition){
     4803                bslrice_partition->Assemble();
     4804                bslrice_partition_serial=bslrice_partition->ToMPISerial();
     4805        }
     4806        if(bslrhydro_partition){
     4807                bslrhydro_partition->Assemble();
     4808                bslrhydro_partition_serial=bslrhydro_partition->ToMPISerial();
     4809        }
     4810
     4811
    47754812        /*Free ressources:*/
    47764813        xDelete<int>(indices);
    47774814        xDelete<IssmDouble>(RSLgi);
     4815        if(bslrhydro_partition)delete bslrhydro_partition;
     4816        if(bslrice_partition)delete bslrice_partition;
     4817        if(partitionhydro)xDelete<IssmDouble>(partitionhydro);
     4818        if(partitionice)xDelete<IssmDouble>(partitionice);
    47784819
    47794820        /*Assign output pointers:*/
     
    47824823        *pbslrhydro  = bslrhydro;
    47834824        *pbslr=bslrhydro+bslrice;
     4825        *pbslrice_partition=bslrice_partition_serial;
     4826        *pbslrhydro_partition=bslrhydro_partition_serial;
    47844827
    47854828}
  • issm/branches/trunk-larour-SLPS2020/src/c/classes/FemModel.h

    r25596 r25742  
    164164                #endif
    165165                #ifdef _HAVE_SEALEVELRISE_
    166                 void SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, SealevelMasks* masks);
     166                void SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, IssmDouble** pbslrice_partition,IssmDouble** pbslrhydro_partition, SealevelMasks* masks);
    167167                void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old,  SealevelMasks* masks,bool verboseconvolution);
    168168                void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks);
  • issm/branches/trunk-larour-SLPS2020/src/c/cores/sealevelchange_core.cpp

    r25535 r25742  
    435435        IssmDouble bslr;
    436436        IssmDouble bslrice;
     437        IssmDouble* bslrice_partition=NULL;
    437438        IssmDouble bslrhydro;
     439        IssmDouble* bslrhydro_partition=NULL;
    438440        IssmDouble cumbslr;
    439441        IssmDouble cumbslrice;
    440442        IssmDouble cumbslrhydro;
     443        IssmDouble* cumbslrice_partition=NULL;
     444        int npartice;
     445        IssmDouble* cumbslrhydro_partition=NULL;
     446        int nparthydro;
    441447       
    442448        if(VerboseSolution()) _printf0_("         computing bslr components on ice\n");
     
    451457        femmodel->parameters->FindParam(&cumbslrice,CumBslrIceEnum);
    452458        femmodel->parameters->FindParam(&cumbslrhydro,CumBslrHydroEnum);
     459        femmodel->parameters->FindParam(&npartice,SolidearthNpartIceEnum);
     460        femmodel->parameters->FindParam(&nparthydro,SolidearthNpartHydroEnum);
     461        if(npartice) femmodel->parameters->FindParam(&cumbslrice_partition,&npartice,NULL,CumBslrIcePartitionEnum);
     462        if(nparthydro) femmodel->parameters->FindParam(&cumbslrhydro_partition,&nparthydro,NULL,CumBslrHydroPartitionEnum);
    453463
    454464        /*Initialize:*/
     
    456466
    457467        /*call the bslr main module: */
    458         femmodel->SealevelriseEustatic(RSLgi,&oceanarea,&bslr, &bslrice, &bslrhydro, masks); //this computes
     468        femmodel->SealevelriseEustatic(RSLgi,&oceanarea,&bslr, &bslrice, &bslrhydro, &bslrice_partition, &bslrhydro_partition,masks); //this computes
    459469
    460470        /*we need to average RSLgi over the ocean: RHS term  4 in Eq.4 of Farrel and clarke. Only the elements can do that: */
     
    470480        femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,BslrHydroEnum,-bslrhydro,step,time));
    471481
     482        //cumulative barystatic contribution:
    472483        cumbslr=cumbslr-bslr;
    473484        cumbslrice=cumbslrice-bslrice;
    474485        cumbslrhydro=cumbslrhydro-bslrhydro;
     486
    475487        femmodel->parameters->SetParam(cumbslr,CumBslrEnum);
    476488        femmodel->parameters->SetParam(cumbslrice,CumBslrIceEnum);
     
    480492        femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumBslrIceEnum,cumbslrice,step,time));
    481493        femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumBslrHydroEnum,cumbslrhydro,step,time));
     494
     495        //cumulative barystatic contributions by partition:
     496        if(npartice){
     497                for(int i=0;i<npartice;i++) cumbslrice_partition[i] -= bslrice_partition[i];
     498                femmodel->parameters->SetParam(cumbslrice_partition,npartice,1,CumBslrIcePartitionEnum);
     499                femmodel->results->AddResult(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,CumBslrIcePartitionEnum,cumbslrice_partition,npartice,1,step,time));
     500        }
     501
     502        if(nparthydro){
     503                for(int i=0;i<nparthydro;i++) cumbslrhydro_partition[i] -= bslrhydro_partition[i];
     504                femmodel->parameters->SetParam(cumbslrhydro_partition,nparthydro,1,CumBslrHydroPartitionEnum);
     505                femmodel->results->AddResult(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,CumBslrHydroPartitionEnum,cumbslrhydro_partition,nparthydro,1,step,time));
     506        }
    482507        /*}}}*/
    483508       
  • issm/branches/trunk-larour-SLPS2020/src/c/shared/Enum/Enum.vim

    r25724 r25742  
    115115syn keyword cConstant CumBslrIceEnum
    116116syn keyword cConstant CumBslrHydroEnum
     117syn keyword cConstant CumBslrIcePartitionEnum
     118syn keyword cConstant CumBslrHydroPartitionEnum
    117119syn keyword cConstant CumGmtslrEnum
    118120syn keyword cConstant CumGmslrEnum
     
    325327syn keyword cConstant ModelnameEnum
    326328syn keyword cConstant SaveResultsEnum
     329syn keyword cConstant SolidearthPartitionIceEnum
     330syn keyword cConstant SolidearthPartitionHydroEnum
     331syn keyword cConstant SolidearthNpartIceEnum
     332syn keyword cConstant SolidearthNpartHydroEnum
    327333syn keyword cConstant SolidearthPlanetRadiusEnum
    328334syn keyword cConstant SolidearthPlanetAreaEnum
  • issm/branches/trunk-larour-SLPS2020/src/c/shared/Enum/EnumDefinitions.h

    r25724 r25742  
    109109        CumBslrIceEnum,
    110110        CumBslrHydroEnum,
     111        CumBslrIcePartitionEnum,
     112        CumBslrHydroPartitionEnum,
    111113        CumGmtslrEnum,
    112114        CumGmslrEnum,
     
    319321        ModelnameEnum,
    320322        SaveResultsEnum,
     323        SolidearthPartitionIceEnum,
     324        SolidearthPartitionHydroEnum,
     325        SolidearthNpartIceEnum,
     326        SolidearthNpartHydroEnum,
    321327        SolidearthPlanetRadiusEnum,
    322328        SolidearthPlanetAreaEnum,
  • issm/branches/trunk-larour-SLPS2020/src/c/shared/Enum/EnumToStringx.cpp

    r25724 r25742  
    117117                case CumBslrIceEnum : return "CumBslrIce";
    118118                case CumBslrHydroEnum : return "CumBslrHydro";
     119                case CumBslrIcePartitionEnum : return "CumBslrIcePartition";
     120                case CumBslrHydroPartitionEnum : return "CumBslrHydroPartition";
    119121                case CumGmtslrEnum : return "CumGmtslr";
    120122                case CumGmslrEnum : return "CumGmslr";
     
    327329                case ModelnameEnum : return "Modelname";
    328330                case SaveResultsEnum : return "SaveResults";
     331                case SolidearthPartitionIceEnum : return "SolidearthPartitionIce";
     332                case SolidearthPartitionHydroEnum : return "SolidearthPartitionHydro";
     333                case SolidearthNpartIceEnum : return "SolidearthNpartIce";
     334                case SolidearthNpartHydroEnum : return "SolidearthNpartHydro";
    329335                case SolidearthPlanetRadiusEnum : return "SolidearthPlanetRadius";
    330336                case SolidearthPlanetAreaEnum : return "SolidearthPlanetArea";
  • issm/branches/trunk-larour-SLPS2020/src/c/shared/Enum/StringToEnumx.cpp

    r25724 r25742  
    117117              else if (strcmp(name,"CumBslrIce")==0) return CumBslrIceEnum;
    118118              else if (strcmp(name,"CumBslrHydro")==0) return CumBslrHydroEnum;
     119              else if (strcmp(name,"CumBslrIcePartition")==0) return CumBslrIcePartitionEnum;
     120              else if (strcmp(name,"CumBslrHydroPartition")==0) return CumBslrHydroPartitionEnum;
    119121              else if (strcmp(name,"CumGmtslr")==0) return CumGmtslrEnum;
    120122              else if (strcmp(name,"CumGmslr")==0) return CumGmslrEnum;
     
    135137              else if (strcmp(name,"DamageStressUBound")==0) return DamageStressUBoundEnum;
    136138              else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
    137               else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
    138               else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"DslModel")==0) return DslModelEnum;
     142              if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
     143              else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
     144              else if (strcmp(name,"DslModel")==0) return DslModelEnum;
    143145              else if (strcmp(name,"DslModelid")==0) return DslModelidEnum;
    144146              else if (strcmp(name,"DslNummodels")==0) return DslNummodelsEnum;
     
    258260              else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
    259261              else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
    260               else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
    261               else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
     265              if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
     266              else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
     267              else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
    266268              else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
    267269              else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum;
     
    333335              else if (strcmp(name,"Modelname")==0) return ModelnameEnum;
    334336              else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
     337              else if (strcmp(name,"SolidearthPartitionIce")==0) return SolidearthPartitionIceEnum;
     338              else if (strcmp(name,"SolidearthPartitionHydro")==0) return SolidearthPartitionHydroEnum;
     339              else if (strcmp(name,"SolidearthNpartIce")==0) return SolidearthNpartIceEnum;
     340              else if (strcmp(name,"SolidearthNpartHydro")==0) return SolidearthNpartHydroEnum;
    335341              else if (strcmp(name,"SolidearthPlanetRadius")==0) return SolidearthPlanetRadiusEnum;
    336342              else if (strcmp(name,"SolidearthPlanetArea")==0) return SolidearthPlanetAreaEnum;
     
    377383              else if (strcmp(name,"SmbAccualti")==0) return SmbAccualtiEnum;
    378384              else if (strcmp(name,"SmbAccugrad")==0) return SmbAccugradEnum;
    379               else if (strcmp(name,"SmbAccuref")==0) return SmbAccurefEnum;
     385         else stage=4;
     386   }
     387   if(stage==4){
     388              if (strcmp(name,"SmbAccuref")==0) return SmbAccurefEnum;
    380389              else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
    381390              else if (strcmp(name,"SmbAveraging")==0) return SmbAveragingEnum;
     
    383392              else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
    384393              else if (strcmp(name,"SmbDsnowIdx")==0) return SmbDsnowIdxEnum;
    385          else stage=4;
    386    }
    387    if(stage==4){
    388               if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
     394              else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
    389395              else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
    390396              else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
     
    500506              else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
    501507              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    502               else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
     508         else stage=5;
     509   }
     510   if(stage==5){
     511              if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
    503512              else if (strcmp(name,"Air")==0) return AirEnum;
    504513              else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
     
    506515              else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum;
    507516              else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
    508          else stage=5;
    509    }
    510    if(stage==5){
    511               if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
     517              else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
    512518              else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
    513519              else if (strcmp(name,"BasalforcingsFloatingiceMeltingRate")==0) return BasalforcingsFloatingiceMeltingRateEnum;
     
    623629              else if (strcmp(name,"FrontalForcingsSubglacialDischarge")==0) return FrontalForcingsSubglacialDischargeEnum;
    624630              else if (strcmp(name,"FrontalForcingsThermalForcing")==0) return FrontalForcingsThermalForcingEnum;
    625               else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
    626635              else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
    627636              else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
     
    629638              else if (strcmp(name,"NGiaRate")==0) return NGiaRateEnum;
    630639              else if (strcmp(name,"UGia")==0) return UGiaEnum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"UGiaRate")==0) return UGiaRateEnum;
     640              else if (strcmp(name,"UGiaRate")==0) return UGiaRateEnum;
    635641              else if (strcmp(name,"Gradient")==0) return GradientEnum;
    636642              else if (strcmp(name,"GroundinglineHeight")==0) return GroundinglineHeightEnum;
     
    746752              else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
    747753              else if (strcmp(name,"SedimentHeadStacked")==0) return SedimentHeadStackedEnum;
    748               else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
     754         else stage=7;
     755   }
     756   if(stage==7){
     757              if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
    749758              else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum;
    750759              else if (strcmp(name,"SmbA")==0) return SmbAEnum;
     
    752761              else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
    753762              else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
    754          else stage=7;
    755    }
    756    if(stage==7){
    757               if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
     763              else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
    758764              else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
    759765              else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
     
    869875              else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
    870876              else if (strcmp(name,"Surface")==0) return SurfaceEnum;
    871               else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum;
     877         else stage=8;
     878   }
     879   if(stage==8){
     880              if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum;
    872881              else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
    873882              else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
     
    875884              else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
    876885              else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
    877          else stage=8;
    878    }
    879    if(stage==8){
    880               if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
     886              else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
    881887              else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
    882888              else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
     
    992998              else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
    993999              else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
    994               else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
     1000         else stage=9;
     1001   }
     1002   if(stage==9){
     1003              if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
    9951004              else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
    9961005              else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
     
    9981007              else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
    9991008              else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
    1000          else stage=9;
    1001    }
    1002    if(stage==9){
    1003               if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
     1009              else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
    10041010              else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
    10051011              else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
     
    11151121              else if (strcmp(name,"FemModel")==0) return FemModelEnum;
    11161122              else if (strcmp(name,"FileParam")==0) return FileParamEnum;
    1117               else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
     1123         else stage=10;
     1124   }
     1125   if(stage==10){
     1126              if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
    11181127              else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
    11191128              else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
     
    11211130              else if (strcmp(name,"Free")==0) return FreeEnum;
    11221131              else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
    1123          else stage=10;
    1124    }
    1125    if(stage==10){
    1126               if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
     1132              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
    11271133              else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum;
    11281134              else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum;
     
    12381244              else if (strcmp(name,"MeshX")==0) return MeshXEnum;
    12391245              else if (strcmp(name,"MeshY")==0) return MeshYEnum;
    1240               else if (strcmp(name,"MinVel")==0) return MinVelEnum;
     1246         else stage=11;
     1247   }
     1248   if(stage==11){
     1249              if (strcmp(name,"MinVel")==0) return MinVelEnum;
    12411250              else if (strcmp(name,"MinVx")==0) return MinVxEnum;
    12421251              else if (strcmp(name,"MinVy")==0) return MinVyEnum;
     
    12441253              else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
    12451254              else if (strcmp(name,"Moulin")==0) return MoulinEnum;
    1246          else stage=11;
    1247    }
    1248    if(stage==11){
    1249               if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
     1255              else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
    12501256              else if (strcmp(name,"Mpi")==0) return MpiEnum;
    12511257              else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
     
    13611367              else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
    13621368              else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
    1363               else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
     1369         else stage=12;
     1370   }
     1371   if(stage==12){
     1372              if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
    13641373              else if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
    13651374              else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
     
    13671376              else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
    13681377              else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
    1369          else stage=12;
    1370    }
    1371    if(stage==12){
    1372               if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
     1378              else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
    13731379              else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
    13741380              else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
  • issm/branches/trunk-larour-SLPS2020/src/m/classes/solidearth.m

    r25144 r25742  
    1414                requested_outputs      = {};
    1515                transitions            = {};
     16                partitionice              = [];
     17                partitionhydro             = [];
    1618        end
    1719        methods
     
    3133                %transitions should be a cell array of vectors:
    3234                self.transitions={};
     35               
     36                %no partitions requested for barystatic contribution:
     37                self.partitionice=[];
     38                self.partitionhydro=[];
    3339
    3440                %earth radius
     
    6268                        fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
    6369                        fielddisplay(self,'requested_outputs','additional outputs requested');
     70                        fielddisplay(self,'partitionice','ice partition vector for barystatic contribution');
     71                        fielddisplay(self,'partitionhydro','hydro partition vector for barystatic contribution');
    6472                        self.settings.disp();
    6573                        self.surfaceload.disp();
     
    7381                        WriteData(fid,prefix,'object',self,'fieldname','planetradius','format','Double');
    7482                        WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
     83               
     84                        if ~isempty(self.partitionice),
     85                                npartice=max(self.partitionice)+2;
     86                        else
     87                                npartice=0;
     88                        end
     89                        if ~isempty(self.partitionhydro),
     90                                nparthydro=max(self.partitionhydro)+2;
     91                        else
     92                                nparthydro=0;
     93                        end
    7594
     95                       
     96                        WriteData(fid,prefix,'object',self,'fieldname','partitionice','mattype',1,'format','DoubleMat');
     97                        WriteData(fid,prefix,'data',npartice,'format','Integer','name','md.solidearth.npartice');
     98                        WriteData(fid,prefix,'object',self,'fieldname','partitionhydro','mattype',1,'format','DoubleMat');
     99                        WriteData(fid,prefix,'data',nparthydro,'format','Integer','name','md.solidearth.nparthydro');
     100                       
    76101                        self.settings.marshall(prefix,md,fid);
    77102                        self.surfaceload.marshall(prefix,md,fid);
     
    98123                        writejscellstring(fid,[modelname '.solidearth.requested_outputs'],self.requested_outputs);
    99124                        writejscellarray(fid,[modelname '.solidearth.transitions'],self.transitions);
     125                        writejscellarray(fid,[modelname '.solidearth.partition'],self.partition);
    100126                end % }}}
    101127                function self = extrude(self,md) % {{{
Note: See TracChangeset for help on using the changeset viewer.