Changeset 21331


Ignore:
Timestamp:
11/01/16 11:48:51 (8 years ago)
Author:
adhikari
Message:

CHG: rotational feedback added (have to define perturbation terms for intertia tensor though)

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

Legend:

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

    r21295 r21331  
    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.rotation",SealevelriseRotationEnum));
     73        parameters->AddObject(iomodel->CopyConstantObject("md.slr.tide_love_h",SealevelriseTidalLoveHEnum));
     74        parameters->AddObject(iomodel->CopyConstantObject("md.slr.tide_love_k",SealevelriseTidalLoveKEnum));
     75        parameters->AddObject(iomodel->CopyConstantObject("md.slr.angular_velocity",SealevelriseAngularVelocityEnum));
    7276        parameters->AddObject(iomodel->CopyConstantObject("md.slr.ocean_area_scaling",SealevelriseOceanAreaScalingEnum));
    7377
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r21325 r21331  
    40484048        bool computerigid = true;
    40494049        bool computeelastic= true;
     4050        bool computerotation= true;
    40504051
    40514052        /*early return if we are not on the ocean:*/
     
    40554056        this->parameters->FindParam(&computerigid,SealevelriseRigidEnum);
    40564057        this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum);
    4057        
     4058        this->parameters->FindParam(&computerotation,SealevelriseRotationEnum);
     4059
     4060        /*recover some parameters for rotational feedback: */
     4061        IssmDouble tide_love_h, tide_love_k, omega;
     4062        if(computerotation){
     4063                this->parameters->FindParam(&tide_love_h,SealevelriseTidalLoveHEnum);
     4064                this->parameters->FindParam(&tide_love_k,SealevelriseTidalLoveKEnum);
     4065                this->parameters->FindParam(&omega,SealevelriseAngularVelocityEnum);
     4066        }
     4067
    40584068        /*early return if rigid or elastic not requested:*/
    40594069        if(!computerigid && !computeelastic) return;
     
    41244134        IssmDouble delPhi,delLambda;
    41254135
     4136         /* if rotation, compute m1 m2 m3 from loading function */
     4137         IssmDouble m1, m2, m3;
     4138         if(computerotation){
     4139                 m1=0;
     4140                 m2=0;
     4141                 m3=0;
     4142         }
     4143
    41264144        for(int i=0;i<gsize;i++){
    41274145
     
    41454163                        G_elastic[i] += G_elastic_precomputed[index];
    41464164                        values[i]+=3*rho_water/rho_earth*area/eartharea*S*G_elastic[i];
     4165                }
     4166
     4167                /*Rotational feedback: */
     4168                if(computerotation){
     4169                        values[i]+=(1+tide_love_k-tide_love_h/9.81)*0.5*pow((omega*radius[i]),2)*(-m3*(2+m3)*(1+3*cos(2*lati))
     4170                                                + 2*pow(m2,2)*(pow(cos(lati),2) + 0.5*(-1 + 3*cos(2*longi)) * pow(sin(lati),2))
     4171                                                + 2*pow(m1,2)*(pow(cos(lati),2) - 0.5*(1+3*cos(2*longi)) * pow(sin(lati),2))
     4172                                                - m1*(1+m3)*cos(longi)*sin(2*lati)
     4173                       - 2*m1*m2*cos(longi)*pow(sin(lati),2)*sin(longi)
     4174                       - m2*(1+m3)*sin(2*lati)*sin(longi));
    41474175                }
    41484176        }
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r21295 r21331  
    773773        SealevelriseRigidEnum,
    774774        SealevelriseElasticEnum,
     775        SealevelriseRotationEnum,
     776        SealevelriseTidalLoveHEnum,
     777   SealevelriseTidalLoveKEnum,
     778        SealevelriseAngularVelocityEnum,
    775779        SealevelriseOceanAreaScalingEnum,
    776780        SealevelriseGElasticEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r21295 r21331  
    754754                case SealevelriseRigidEnum : return "SealevelriseRigid";
    755755                case SealevelriseElasticEnum : return "SealevelriseElastic";
     756                case SealevelriseRotationEnum : return "SealevelriseRotation";
     757                case SealevelriseTidalLoveHEnum : return "SealevelriseTidalLoveH";
     758                case SealevelriseTidalLoveKEnum : return "SealevelriseTidalLoveK";
     759                case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
    756760                case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
    757761                case SealevelriseGElasticEnum : return "SealevelriseGElastic";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r21295 r21331  
    772772              else if (strcmp(name,"SealevelriseRigid")==0) return SealevelriseRigidEnum;
    773773              else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
     774              else if (strcmp(name,"SealevelriseRotation")==0) return SealevelriseRotationEnum;
     775              else if (strcmp(name,"SealevelriseTidalLoveH")==0) return SealevelriseTidalLoveHEnum;
     776              else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum;
     777              else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
    774778              else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
    775779              else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
     
    871875              else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
    872876              else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
    873               else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
     877         else stage=8;
     878   }
     879   if(stage==8){
     880              if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
    874881              else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
    875882              else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
    876883              else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
    877          else stage=8;
    878    }
    879    if(stage==8){
    880               if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
     884              else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
    881885              else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
    882886              else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
  • issm/trunk-jpl/src/m/classes/slr.js

    r21309 r21331  
    1818                this.rigid=1;
    1919                this.elastic=1;
    20                 this.rotation=1;
     20                this.rotation=0;
    2121                this.ocean_area_scaling=0;
    2222               
     
    2424                this.tide_love_h=0.6149; //degree 2
    2525                this.tide_love_k=0.3055; //degree 2
     26       
     27                // mean rotational velocity of earth:
     28                this.angular_velocity=7.2921*10^-5; // [s^-1]
    2629
    2730                //numerical discretization accuracy
     
    4750                        md = checkfield(md,'fieldname','slr.tide_love_h','NaN',1,'Inf',1);
    4851                        md = checkfield(md,'fieldname','slr.tide_love_k','NaN',1,'Inf',1);
     52                        md = checkfield(md,'fieldname','slr.angular_velocity','NaN',1,'Inf',1);
    4953                        md = checkfield(md,'fieldname','slr.reltol','size',[1, 1]);
    5054                        md = checkfield(md,'fieldname','slr.abstol','size',[1, 1]);
     
    7983                fielddisplay(this,'tide_love_h','tidal love number (degree 2)');
    8084                fielddisplay(this,'tide_love_k','tidal love number (degree 2)');
     85                fielddisplay(this,'angular_velocity','mean rotational velocity of earth [per second]');
    8186                fielddisplay(this,'rigid','rigid earth graviational potential perturbation');
    8287                fielddisplay(this,'elastic','elastic earth graviational potential perturbation');
     
    99104                        WriteData(fid,prefix,'object',this,'fieldname','tide_love_h','format','Double');
    100105                        WriteData(fid,prefix,'object',this,'fieldname','tide_love_k','format','Double');
     106                        WriteData(fid,prefix,'object',this,'fieldname','angular_velocity','format','Double');
    101107                        WriteData(fid,prefix,'object',this,'fieldname','rigid','format','Boolean');
    102108                        WriteData(fid,prefix,'object',this,'fieldname','elastic','format','Boolean');
     
    128134                        this.tide_love_h=NullFix(this.tide_love_h,NaN);
    129135                        this.tide_love_k=NullFix(this.tide_love_k,NaN);
     136                        this.angular_velocity=NullFix(this.angular_velocity,NaN);
    130137                        this.rigid=NullFix(this.rigid,NaN);
    131138                        this.elastic=NullFix(this.elastic,NaN);
     
    146153        this.tide_love_h    = 0;
    147154        this.tide_love_k    = 0;
     155        this.angular_velocity = 0;
    148156        this.rigid          = 0;
    149157        this.elastic        = 0;
  • issm/trunk-jpl/src/m/classes/slr.m

    r21309 r21331  
    1616                tide_love_k    = 0; %ideam
    1717                tide_love_h    = 0; %ideam
     18                angular_velocity = 0;
    1819                rigid          = 0;
    1920                elastic        = 0;
     
    4546                self.rigid=1;
    4647                self.elastic=1;
    47                 self.rotation=1;
     48                self.rotation=0;
    4849                self.ocean_area_scaling=0;
    4950
     
    5152                self.tide_love_h=0.6149; %degree 2
    5253                self.tide_love_k=0.3055; % degree 2
     54               
     55                % mean rotational velocity of earth
     56                self.angular_velocity=7.2921*10^-5; % [s^-1]
    5357
    5458                %numerical discretization accuracy
     
    7276                        md = checkfield(md,'fieldname','slr.tide_love_h','NaN',1,'Inf',1);
    7377                        md = checkfield(md,'fieldname','slr.tide_love_k','NaN',1,'Inf',1);
     78                        md = checkfield(md,'fieldname','slr.angular_velocity','NaN',1,'Inf',1);
    7479                        md = checkfield(md,'fieldname','slr.reltol','size',[1 1]);
    7580                        md = checkfield(md,'fieldname','slr.abstol','size',[1 1]);
     
    108113                        fielddisplay(self,'tide_love_k','tidal load Love number (deg 2)');
    109114                        fielddisplay(self,'tide_love_h','tidal load Love number (deg 2)');
     115                        fielddisplay(self,'angular_velocity','mean rotational velocity of earth [per second]');
    110116                        fielddisplay(self,'rigid','rigid earth graviational potential perturbation');
    111117                        fielddisplay(self,'elastic','elastic earth graviational potential perturbation');
     
    128134                        WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
    129135                        WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
     136                        WriteData(fid,prefix,'object',self,'fieldname','angular_velocity','format','Double');
    130137                        WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean');
    131138                        WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean');
     
    157164                        writejsdouble(fid,[modelname '.slr.tide_love_k'],self.tide_love_k);
    158165                        writejsdouble(fid,[modelname '.slr.tide_love_h'],self.tide_love_h);
     166                        writejsdouble(fid,[modelname '.slr.angular_velocity'],self.angular_velocity);
    159167                        writejsdouble(fid,[modelname '.slr.rigid'],self.rigid);
    160168                        writejsdouble(fid,[modelname '.slr.elastic'],self.elastic);
  • issm/trunk-jpl/src/m/classes/slr.py

    r21309 r21331  
    2525                self.tide_love_h       = 0
    2626                self.tide_love_k       = 0
     27                self.angular_velocity  = 0;
    2728                self.rigid             = 0
    2829                self.elastic           = 0
     
    4748                        string="%s\n%s"%(string,fielddisplay(self,'tide_love_k','tidal load Love number (degree 2)'))
    4849                        string="%s\n%s"%(string,fielddisplay(self,'tide_love_h','tidal load Love number (degree 2)'))
     50                        string="%s\n%s"%(string,fielddisplay(self,'angular_velocity','mean rotational velocity of earth [per second]'));
    4951                        string="%s\n%s"%(string,fielddisplay(self,'rigid','rigid earth graviational potential perturbation'))
    5052                        string="%s\n%s"%(string,fielddisplay(self,'elastic','elastic earth graviational potential perturbation'))
     
    6971                self.rigid=1
    7072                self.elastic=1
    71                 self.rotation=1
     73                self.rotation=0
    7274                self.ocean_area_scaling=0
    7375
     
    7577                self.tide_love_h=0.6149; #degree 2
    7678                self.tide_love_k=0.3055; #degree 2
     79
     80                #mean rotational velocity of earth
     81                self.angular_velocity=7.2921*10^-5; # [s^-1]
    7782
    7883                #numerical discretization accuracy
     
    102107                md = checkfield(md,'fieldname','slr.tide_love_h','NaN',1,'Inf',1)
    103108                md = checkfield(md,'fieldname','slr.tide_love_k','NaN',1,'Inf',1)
     109                md = checkfield(md,'fieldname','slr.angular_velocity','NaN',1,'Inf',1)
    104110                md = checkfield(md,'fieldname','slr.reltol','size',[1,1])
    105111                md = checkfield(md,'fieldname','slr.abstol','size',[1,1])
     
    127133                WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
    128134                WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
     135                WriteData(fid,prefix,'object',self,'fieldname','angular_velocity','format','Double');
    129136                WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean')
    130137                WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean')
Note: See TracChangeset for help on using the changeset viewer.