Changeset 19986
- Timestamp:
- 01/22/16 10:47:46 (9 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
r19984 r19986 38 38 void SealevelriseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 39 39 40 int nl;40 int nl; 41 41 IssmDouble* love_h=NULL; 42 42 IssmDouble* love_k=NULL; 43 44 bool legendre_precompute=false; 45 IssmDouble* legendre_coefficients=NULL; 46 int M; 43 47 48 /*some constant parameters: */ 44 49 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseReltolEnum)); 45 50 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseAbstolEnum)); … … 48 53 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseElasticEnum)); 49 54 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseEustaticEnum)); 55 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseLegendrePrecomputeEnum)); 56 50 57 58 /*love numbers: */ 51 59 iomodel->FetchData(&love_h,&nl,NULL,SealevelriseLoveHEnum); 52 60 iomodel->FetchData(&love_k,&nl,NULL,SealevelriseLoveKEnum); 53 54 61 parameters->AddObject(new DoubleVecParam(SealevelriseLoveHEnum,love_h,nl)); 55 62 parameters->AddObject(new DoubleVecParam(SealevelriseLoveKEnum,love_k,nl)); 63 64 /*legendre coefficients: */ 65 iomodel->Constant(&legendre_precompute,SealevelriseLegendrePrecomputeEnum); 66 if(legendre_precompute){ 67 iomodel->FetchData(&legendre_coefficients,&M,&nl,SealevelriseLoveKEnum); 68 parameters->AddObject(new DoubleMatParam(SealevelriseLegendreCoefficientsEnum,legendre_coefficients,M,nl)); 69 } 56 70 57 71 /*free ressources: */ 58 72 xDelete<IssmDouble>(love_h); 59 73 xDelete<IssmDouble>(love_k); 74 xDelete<IssmDouble>(legendre_coefficients); 60 75 61 76 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r19984 r19986 3521 3521 int nl; 3522 3522 3523 /*legendre coefficients:*/ 3524 bool legendre_precompute=false; 3525 IssmDouble* legendre_coefficients=NULL; 3526 int M; 3527 3523 3528 /*ice properties: */ 3524 3529 IssmDouble rho_ice,rho_water,rho_earth; 3525 3526 /*other constants: */3527 //IssmDouble g;3528 3530 3529 3531 /*Solution outputs: */ … … 3550 3552 this->parameters->FindParam(&computeeustatic,SealevelriseEustaticEnum); 3551 3553 3554 /*recover legendre coefficients if they have been precomputed:*/ 3555 this->parameters->FindParam(&legendre_precompute,SealevelriseLegendrePrecomputeEnum); 3556 this->parameters->FindParam(&legendre_coefficients,&M,NULL,SealevelriseLegendrePrecomputeEnum); 3557 3552 3558 /*how many dofs are we working with here? */ 3553 3559 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum); … … 3614 3620 IssmDouble G_rigid=0; //do not remove =0! 3615 3621 IssmDouble G_elastic=0; //do not remove =0! 3616 IssmDouble Pn1,Pn2 ; //first two legendre polynomials3622 IssmDouble Pn1,Pn2,Pn; //first two legendre polynomials 3617 3623 IssmDouble cosalpha; 3618 3624 … … 3631 3637 if(computeelastic){ 3632 3638 G_elastic = (love_k[nl-1]-love_h[nl-1])/2.0/sin(alpha/2.0); 3633 for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre(Pn1,Pn2,n,cosalpha); 3639 if(legendre_precompute){ 3640 for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre_coefficients[(int)((M-1)*(cosalpha+1.0)/2.0)*nl+n]; 3641 } 3642 else{ 3643 for(int n=0;n<nl;n++){ 3644 Pn=legendre(Pn1,Pn2,n,cosalpha); Pn1=Pn2; Pn2=Pn; 3645 G_elastic += deltalove[n]*Pn; 3646 } 3647 } 3634 3648 } 3635 3649 -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r19978 r19986 1032 1032 SealevelriseElasticEnum, 1033 1033 SealevelriseEustaticEnum, 1034 SealevelriseLegendrePrecomputeEnum, 1035 SealevelriseLegendreCoefficientsEnum, 1034 1036 /*}}}*/ 1035 1037 MaximumNumberOfDefinitionsEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r19978 r19986 986 986 case SealevelriseElasticEnum : return "SealevelriseElastic"; 987 987 case SealevelriseEustaticEnum : return "SealevelriseEustatic"; 988 case SealevelriseLegendrePrecomputeEnum : return "SealevelriseLegendrePrecompute"; 989 case SealevelriseLegendreCoefficientsEnum : return "SealevelriseLegendreCoefficients"; 988 990 case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions"; 989 991 default : return "unknown"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r19978 r19986 1010 1010 else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum; 1011 1011 else if (strcmp(name,"SealevelriseEustatic")==0) return SealevelriseEustaticEnum; 1012 else if (strcmp(name,"SealevelriseLegendrePrecompute")==0) return SealevelriseLegendrePrecomputeEnum; 1013 else if (strcmp(name,"SealevelriseLegendreCoefficients")==0) return SealevelriseLegendreCoefficientsEnum; 1012 1014 else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum; 1013 1015 else stage=10; -
issm/trunk-jpl/src/m/classes/slr.m
r19984 r19986 15 15 elastic = 0; 16 16 eustatic = 0; 17 legendre_precompute = 0; 18 legendre_coefficients = NaN; 17 19 end 18 20 methods … … 38 40 self.elastic=1; 39 41 self.eustatic=1; 42 43 %legendre coefficients: 44 legendre_precompute = 0; 45 legendre_coefficients = NaN; 40 46 41 47 end % }}} … … 55 61 end 56 62 63 %check that the legendre coefficients have indeed been computed if requested: 64 if self.legendre_precompute, 65 md = checkfield(md,'fieldname','slr.legendre_coefficients','NaN',1,'Inf',1,'size',[NaN length(self.love_h)]); 66 end 67 57 68 end % }}} 58 69 function disp(self) % {{{ … … 68 79 fielddisplay(self,'elastic','elastic earth graviational potential perturbation'); 69 80 fielddisplay(self,'eustatic','eustatic sea level rise'); 81 fielddisplay(self,'legendre_precompute','precompute legendre coefficients? (default is 0)'); 82 if(self.legendre_precompute) 83 fielddisplay(self,'legendre_coefficients','precomputed legendre coefficients'); 84 end 70 85 71 86 end % }}} … … 80 95 WriteData(fid,'object',self,'class','sealevelrise','fieldname','elastic','format','Boolean'); 81 96 WriteData(fid,'object',self,'class','sealevelrise','fieldname','eustatic','format','Boolean'); 97 WriteData(fid,'object',self,'class','sealevelrise','fieldname','legendre_precompute','format','Boolean'); 98 if(self.legendre_precompute), 99 WriteData(fid,'object',self,'class','sealevelrise','fieldname','legendre_coefficients','format','DoubleMat','mattype',1); 100 end 82 101 end % }}} 83 102 function savemodeljs(self,fid,modelname) % {{{ … … 91 110 writejsdouble(fid,[modelname '.slr.rigid'],self.rigid); 92 111 writejsdouble(fid,[modelname '.slr.eustatic'],self.eustatic); 112 writejsdouble(fid,[modelname '.slr.legendre_precompute'],self.legendre_precompute); 113 if self.legendre_precompute, 114 writejs2Darray(fid,[modelname '.srl.legendre_coefficients'],self.legendre_coefficients); 115 end 93 116 94 117 end % }}} -
issm/trunk-jpl/src/m/enum/EnumDefinitions.js
r19978 r19986 971 971 function SealevelriseElasticEnum(){ return 967;} 972 972 function SealevelriseEustaticEnum(){ return 968;} 973 function MaximumNumberOfDefinitionsEnum(){ return 969;} 973 function SealevelriseLegendrePrecomputeEnum(){ return 969;} 974 function SealevelriseLegendreCoefficientsEnum(){ return 970;} 975 function MaximumNumberOfDefinitionsEnum(){ return 971;} -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r19978 r19986 978 978 def SealevelriseElasticEnum(): return StringToEnum("SealevelriseElastic")[0] 979 979 def SealevelriseEustaticEnum(): return StringToEnum("SealevelriseEustatic")[0] 980 def SealevelriseLegendrePrecomputeEnum(): return StringToEnum("SealevelriseLegendrePrecompute")[0] 981 def SealevelriseLegendreCoefficientsEnum(): return StringToEnum("SealevelriseLegendreCoefficients")[0] 980 982 def MaximumNumberOfDefinitionsEnum(): return StringToEnum("MaximumNumberOfDefinitions")[0]
Note:
See TracChangeset
for help on using the changeset viewer.