Changeset 21295


Ignore:
Timestamp:
10/19/16 17:03:56 (8 years ago)
Author:
adhikari
Message:

CHG: ocean_area_scaling option added to capture true eustatic rate

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

Legend:

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

    r20999 r21295  
    7070        parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
    7171        parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
     72        parameters->AddObject(iomodel->CopyConstantObject("md.slr.ocean_area_scaling",SealevelriseOceanAreaScalingEnum));
    7273
    7374        iomodel->FetchData(&elastic,"md.slr.elastic");
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r21272 r21295  
    306306                virtual IssmDouble    OceanArea(void)=0;
    307307                virtual void          SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea)=0;
    308                 virtual void          SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea)=0;
    309                 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 oceanarea,IssmDouble eartharea)=0;
     308                virtual void          SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea)=0;
     309                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;
    310310                #endif
    311311
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r21272 r21295  
    191191                IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
    192192                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    193                 void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    194                 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 oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
     193                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
     194                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!");};
    195195                #endif
    196196
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r21272 r21295  
    174174#ifdef _HAVE_SEALEVELRISE_
    175175                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    176                 void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    177                 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 oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
     176                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
     177                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!");};
    178178                IssmDouble    OceanArea(void){_error_("not implemented yet!");};
    179179                IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r21272 r21295  
    181181#ifdef _HAVE_SEALEVELRISE_
    182182                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    183                 void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
    184                 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 oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
     183                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
     184                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!");};
    185185                IssmDouble    OceanArea(void){_error_("not implemented yet!");};
    186186                IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r21282 r21295  
    38953895        bool computerigid = true;
    38963896        bool computeelastic= true;
     3897        bool scaleoceanarea= true;
    38973898       
    38983899        /*early return if we are not on an ice cap:*/
     
    39103911        this->parameters->FindParam(&computerigid,SealevelriseRigidEnum);
    39113912        this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum);
     3913        this->parameters->FindParam(&scaleoceanarea,SealevelriseOceanAreaScalingEnum);
    39123914
    39133915        /*recover elastic green function:*/
     
    39703972        /*Compute eustatic compoent:*/
    39713973        _assert_(oceanarea>0.);
     3974        if(scaleoceanarea) oceanarea=3.6e+14; // use true ocean area, m^2
    39723975        eustatic += rho_ice*area*I/(oceanarea*rho_water);
    39733976
     
    40154018}
    40164019/*}}}*/
    4017 void    Tria::SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){ /*{{{*/
     4020void    Tria::SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){ /*{{{*/
    40184021
    40194022        /*diverse:*/
     
    41584161}
    41594162/*}}}*/
    4160 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 oceanarea,IssmDouble eartharea){ /*{{{*/
     4163void    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){ /*{{{*/
    41614164
    41624165        /*diverse:*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r21272 r21295  
    152152                IssmDouble OceanAverage(IssmDouble* Sg);
    153153                void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea);
    154                 void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea);
    155                 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 oceanarea,IssmDouble eartharea);
     154                void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea);
     155                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);
    156156                #endif
    157157                /*}}}*/
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r21272 r21295  
    24492449        IssmDouble* Sg_old=NULL;
    24502450       
    2451         IssmDouble  oceanarea=0;
    2452         IssmDouble  oceanarea_cpu=0;
    24532451        IssmDouble  eartharea=0;
    24542452        IssmDouble  eartharea_cpu=0;
     
    24652463        for(int i=0;i<ns;i++){
    24662464                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    2467                 oceanarea_cpu += element->OceanArea();
    24682465                eartharea_cpu += element->GetAreaSpherical();
    24692466        }
    2470         ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
    2471         ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
    2472        
    24732467        ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
    24742468        ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     
    24852479
    24862480                        Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    2487                         element->SealevelriseNonEustatic(pSgo, Sg_old,latitude,longitude,radius,oceanarea,eartharea);
     2481                        element->SealevelriseNonEustatic(pSgo, Sg_old,latitude,longitude,radius,eartharea);
    24882482                }
    24892483                if(i%100==0)pSgo->Assemble();
     
    25002494        IssmDouble* Sg=NULL;
    25012495       
    2502         IssmDouble  oceanarea=0;
    2503         IssmDouble  oceanarea_cpu=0;
    25042496        IssmDouble  eartharea=0;
    25052497        IssmDouble  eartharea_cpu=0;
     
    25162508        for(int i=0;i<ns;i++){
    25172509                Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    2518                 oceanarea_cpu += element->OceanArea();
    25192510                eartharea_cpu += element->GetAreaSpherical();
    25202511        }
    2521         ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
    2522         ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
    2523        
    25242512        ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
    25252513        ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     
    25332521                if(i<ns){
    25342522                        Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
    2535                         element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,oceanarea,eartharea);
     2523                        element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea);
    25362524                }
    25372525                if(i%100==0){
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r21261 r21295  
    773773        SealevelriseRigidEnum,
    774774        SealevelriseElasticEnum,
     775        SealevelriseOceanAreaScalingEnum,
    775776        SealevelriseGElasticEnum,
    776777        SealevelriseUElasticEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r21261 r21295  
    754754                case SealevelriseRigidEnum : return "SealevelriseRigid";
    755755                case SealevelriseElasticEnum : return "SealevelriseElastic";
     756                case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
    756757                case SealevelriseGElasticEnum : return "SealevelriseGElastic";
    757758                case SealevelriseUElasticEnum : return "SealevelriseUElastic";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r21261 r21295  
    772772              else if (strcmp(name,"SealevelriseRigid")==0) return SealevelriseRigidEnum;
    773773              else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
     774              else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
    774775              else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
    775776              else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
     
    874875              else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
    875876              else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
    876               else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
     880              if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
     881              else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
    881882              else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
    882883              else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
  • issm/trunk-jpl/src/m/classes/slr.js

    r21065 r21295  
    1919                this.elastic=1;
    2020                this.rotation=1;
     21                this.ocean_area_scaling=1;
    2122               
    2223                //tidal love numbers:
     
    8182                fielddisplay(this,'elastic','elastic earth graviational potential perturbation');
    8283                fielddisplay(this,'rotation','rotational earth potential perturbation');
     84                fielddisplay(this,'ocean_area_scaling','correction for model representation of ocean area');
    8385                fielddisplay(this,'degacc',"accuracy (default .01 deg) for numerical discretization of the Green's functions");
    8486                fielddisplay(this,'transitions','indices into parts of the mesh that will be icecaps');
     
    100102                        WriteData(fid,prefix,'object',this,'fieldname','elastic','format','Boolean');
    101103                        WriteData(fid,prefix,'object',this,'fieldname','rotation','format','Boolean');
     104                        WriteData(fid,prefix,'object',this,'fieldname','ocean_area_scaling','format','Boolean');
    102105                        WriteData(fid,prefix,'object',this,'fieldname','degacc','format','Double');
    103106                        WriteData(fid,prefix,'object',this,'fieldname','transitions','format','MatArray');
     
    128131                        this.elastic=NullFix(this.elastic,NaN);
    129132                        this.rotation=NullFix(this.rotation,NaN);
     133                        this.ocean_area_scaling=NullFix(this.ocean_area_scaling,NaN);
    130134                        this.degacc=NullFix(this.degacc,NaN);
    131135                }//}}}
     
    145149        this.elastic        = 0;
    146150        this.rotation       = 0;
     151        this.ocean_area_scaling = 0;
    147152        this.degacc         = 0;
    148153        this.requested_outputs = [];
  • issm/trunk-jpl/src/m/classes/slr.m

    r21049 r21295  
    1919                elastic        = 0;
    2020                rotation       = 0;
     21                ocean_area_scaling = 0;
    2122                degacc         = 0;
    2223                requested_outputs      = {};
     
    4546                self.elastic=1;
    4647                self.rotation=1;
     48                self.ocean_area_scaling=1;
    4749
    4850                %tidal love numbers:
     
    106108                        fielddisplay(self,'tide_love_k','tidal load Love number (deg 2)');
    107109                        fielddisplay(self,'tide_love_h','tidal load Love number (deg 2)');
    108                         fielddisplay(self,'rotation','earth rotational potential perturbation');
    109110                        fielddisplay(self,'rigid','rigid earth graviational potential perturbation');
    110111                        fielddisplay(self,'elastic','elastic earth graviational potential perturbation');
     112                        fielddisplay(self,'rotation','earth rotational potential perturbation');
     113                        fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area');
    111114                        fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions');
    112115                        fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
     
    128131                        WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean');
    129132                        WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean');
     133                        WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean');
    130134                        WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
    131135                        WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
     
    154158                        writejsdouble(fid,[modelname '.slr.tide_love_h'],self.tide_love_h);
    155159                        writejsdouble(fid,[modelname '.slr.rigid'],self.rigid);
     160                        writejsdouble(fid,[modelname '.slr.elastic'],self.elastic);
    156161                        writejsdouble(fid,[modelname '.slr.rotation'],self.rotation);
    157                         writejsdouble(fid,[modelname '.slr.elastic'],self.elastic);
     162                        writejsdouble(fid,[modelname '.slr.ocean_area_scaling'],self.ocean_area_scaling);
    158163                        writejsdouble(fid,[modelname '.slr.degacc'],self.degacc);
    159164                        writejscellstring(fid,[modelname '.slr.requested_outputs'],self.requested_outputs);
  • issm/trunk-jpl/src/m/classes/slr.py

    r21097 r21295  
    2828                self.elastic           = 0
    2929                self.rotation          = 0
     30                self.ocean_area_scaling = 0;
    3031                self.degacc            = 0
    3132                self.requested_outputs = []
     
    4950                        string="%s\n%s"%(string,fielddisplay(self,'elastic','elastic earth graviational potential perturbation'))
    5051                        string="%s\n%s"%(string,fielddisplay(self,'rotation','earth rotational potential perturbation'))
     52                        string="%s\n%s"%(string,fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area'))
    5153                        string="%s\n%s"%(string,fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions'))
    5254                        string="%s\n%s"%(string,fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps'))
     
    6870                self.elastic=1
    6971                self.rotation=1
     72                self.ocean_area_scaling=1
    7073
    7174                #tidal love numbers:
     
    127130                WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean')
    128131                WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean')
     132                WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean')
    129133                WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
    130134                WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray')
Note: See TracChangeset for help on using the changeset viewer.