Changeset 22349
- Timestamp:
- 01/14/18 12:54:39 (7 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
r21908 r22349 56 56 int *transitions_N = NULL; 57 57 int ntransitions; 58 59 /*some constant parameters: */ 60 parameters->AddObject(iomodel->CopyConstantObject("md.esa.hemisphere",EsaHemisphereEnum)); 58 61 59 62 /*love numbers: */ -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r22326 r22349 1750 1750 name==EsaNmotionEnum || 1751 1751 name==EsaEmotionEnum || 1752 name==EsaXmotionEnum || 1753 name==EsaYmotionEnum || 1752 1754 name==EsaStrainratexxEnum || 1753 1755 name==EsaStrainratexyEnum || -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r22326 r22349 310 310 #endif 311 311 #ifdef _HAVE_ESA_ 312 virtual void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy)=0;312 virtual void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy)=0; 313 313 virtual void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea)=0; 314 314 #endif -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r22326 r22349 184 184 #endif 185 185 #ifdef _HAVE_ESA_ 186 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};186 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 187 187 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");}; 188 188 #endif -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r22326 r22349 167 167 #endif 168 168 #ifdef _HAVE_ESA_ 169 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};169 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 170 170 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");}; 171 171 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r22326 r22349 174 174 #endif 175 175 #ifdef _HAVE_ESA_ 176 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};176 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 177 177 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");}; 178 178 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r22330 r22349 539 539 540 540 /*Retrieve all inputs we will be needing: */ 541 Input* vx_input=this->GetInput(Esa EmotionEnum); _assert_(vx_input);542 Input* vy_input=this->GetInput(Esa NmotionEnum); _assert_(vy_input);541 Input* vx_input=this->GetInput(EsaXmotionEnum); _assert_(vx_input); 542 Input* vy_input=this->GetInput(EsaYmotionEnum); _assert_(vy_input); 543 543 544 544 /* Start looping on the number of vertices: */ … … 3750 3750 #endif 3751 3751 #ifdef _HAVE_ESA_ 3752 void Tria::EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy){ /*{{{*/3752 void Tria::EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){ /*{{{*/ 3753 3753 3754 3754 /*diverse:*/ … … 3763 3763 IssmDouble* U_elastic_precomputed = NULL; 3764 3764 IssmDouble* H_elastic_precomputed = NULL; 3765 int M ;3765 int M, hemi; 3766 3766 3767 3767 /*computation of Green functions:*/ … … 3769 3769 IssmDouble* N_elastic= NULL; 3770 3770 IssmDouble* E_elastic= NULL; 3771 IssmDouble* X_elastic= NULL; 3772 IssmDouble* Y_elastic= NULL; 3771 3773 3772 3774 /*optimization:*/ … … 3788 3790 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum); 3789 3791 3792 /*which hemisphere? for north-south, east-west components*/ 3793 this->parameters->FindParam(&hemi,EsaHemisphereEnum); 3794 3790 3795 /*compute area of element:*/ 3791 3796 area=GetArea(); … … 3807 3812 N_elastic=xNewZeroInit<IssmDouble>(gsize); 3808 3813 E_elastic=xNewZeroInit<IssmDouble>(gsize); 3814 X_elastic=xNewZeroInit<IssmDouble>(gsize); 3815 Y_elastic=xNewZeroInit<IssmDouble>(gsize); 3809 3816 3810 3817 int* indices=xNew<int>(gsize); … … 3812 3819 IssmDouble* N_values=xNewZeroInit<IssmDouble>(gsize); 3813 3820 IssmDouble* E_values=xNewZeroInit<IssmDouble>(gsize); 3814 IssmDouble dx, dy; 3815 IssmDouble dist, alpha, ang; 3816 IssmDouble N_azim, E_azim; 3821 IssmDouble* X_values=xNewZeroInit<IssmDouble>(gsize); 3822 IssmDouble* Y_values=xNewZeroInit<IssmDouble>(gsize); 3823 IssmDouble dx, dy, dist, alpha, ang, ang2; 3824 IssmDouble N_azim, E_azim, X_azim, Y_azim; 3817 3825 3818 3826 for(int i=0;i<gsize;i++){ 3819 3827 3820 3828 indices[i]=i; 3829 3821 3830 IssmDouble N_azim=0; 3822 3831 IssmDouble E_azim=0; … … 3829 3838 /*Compute azimuths, both north and east components: */ 3830 3839 ang = PI/2 - atan2(dy,dx); // this is bearing angle! 3831 N_azim = cos(ang);3832 E_azim = sin(ang);3840 Y_azim = cos(ang); 3841 X_azim = sin(ang); 3833 3842 3834 3843 /*Elastic component (from Eq 17 in Adhikari et al, GMD 2015): */ 3835 3844 int index=reCast<int,IssmDouble>(alpha/PI*(M-1)); 3836 3845 U_elastic[i] += U_elastic_precomputed[index]; 3837 N_elastic[i] += H_elastic_precomputed[index]*N_azim;3838 E_elastic[i] += H_elastic_precomputed[index]*E_azim;3846 Y_elastic[i] += H_elastic_precomputed[index]*Y_azim; 3847 X_elastic[i] += H_elastic_precomputed[index]*X_azim; 3839 3848 3840 3849 /*Add all components to the pUp solution vectors:*/ 3841 3850 U_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*U_elastic[i]; 3842 N_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*N_elastic[i]; 3843 E_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*E_elastic[i]; 3851 Y_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*Y_elastic[i]; 3852 X_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*X_elastic[i]; 3853 3854 /*North-south, East-west components */ 3855 if (hemi == -1) { 3856 ang2 = PI/2 - atan2(yy[i],xx[i]); 3857 } 3858 else if (hemi == 1) { 3859 ang2 = PI/2 - atan2(-yy[i],-xx[i]); 3860 } 3861 if (hemi != 0){ 3862 N_azim = Y_azim*cos(ang2) + X_azim*sin(ang2); 3863 E_azim = X_azim*cos(ang2) - Y_azim*sin(ang2); 3864 N_elastic[i] += H_elastic_precomputed[index]*N_azim; 3865 E_elastic[i] += H_elastic_precomputed[index]*E_azim; 3866 N_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*N_elastic[i]; 3867 E_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*E_elastic[i]; 3868 } 3844 3869 } 3845 3870 … … 3847 3872 pNorth->SetValues(gsize,indices,N_values,ADD_VAL); 3848 3873 pEast->SetValues(gsize,indices,E_values,ADD_VAL); 3874 pX->SetValues(gsize,indices,X_values,ADD_VAL); 3875 pY->SetValues(gsize,indices,Y_values,ADD_VAL); 3849 3876 3850 3877 /*free ressources:*/ … … 3852 3879 xDelete<IssmDouble>(U_values); xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values); 3853 3880 xDelete<IssmDouble>(U_elastic); xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic); 3881 xDelete<IssmDouble>(X_values); xDelete<IssmDouble>(Y_values); 3882 xDelete<IssmDouble>(X_elastic); xDelete<IssmDouble>(Y_elastic); 3854 3883 3855 3884 return; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r22326 r22349 143 143 #endif 144 144 #ifdef _HAVE_ESA_ 145 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, IssmDouble* xx,IssmDouble* yy);145 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy); 146 146 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea); 147 147 #endif -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r22326 r22349 3976 3976 #endif 3977 3977 #ifdef _HAVE_ESA_ 3978 void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy){/*{{{*/3978 void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY, IssmDouble* xx, IssmDouble* yy){/*{{{*/ 3979 3979 3980 3980 int ns,nsmax; … … 3991 3991 if(i<ns){ 3992 3992 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 3993 element->EsaGeodetic2D(pUp,pNorth,pEast, xx,yy);3993 element->EsaGeodetic2D(pUp,pNorth,pEast,pX,pY,xx,yy); 3994 3994 } 3995 3995 if(i%100==0){ … … 3997 3997 pNorth->Assemble(); 3998 3998 pEast->Assemble(); 3999 pX->Assemble(); 4000 pY->Assemble(); 3999 4001 } 4000 4002 } … … 4004 4006 pNorth->Assemble(); 4005 4007 pEast->Assemble(); 4008 pX->Assemble(); 4009 pY->Assemble(); 4006 4010 4007 4011 /*Free ressources:*/ -
issm/trunk-jpl/src/c/classes/FemModel.h
r22326 r22349 134 134 #endif 135 135 #ifdef _HAVE_ESA_ 136 void EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy);136 void EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY, IssmDouble* xx, IssmDouble* yy); 137 137 void EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 138 138 #endif -
issm/trunk-jpl/src/c/cores/esa_core.cpp
r21272 r22349 15 15 Vector<IssmDouble> *U_north = NULL; 16 16 Vector<IssmDouble> *U_east = NULL; 17 Vector<IssmDouble> *U_x = NULL; 18 Vector<IssmDouble> *U_y = NULL; 17 19 bool save_results,isesa,iscoupler; 18 20 int configuration_type; … … 76 78 U_north = new Vector<IssmDouble>(gsize); 77 79 U_east = new Vector<IssmDouble>(gsize); 80 U_x = new Vector<IssmDouble>(gsize); 81 U_y = new Vector<IssmDouble>(gsize); 78 82 79 83 /*call the geodetic main modlule:*/ … … 82 86 } 83 87 if(domaintype==Domain2DhorizontalEnum){ 84 femmodel->EsaGeodetic2D(U_radial,U_north,U_east,xx,yy); 88 femmodel->EsaGeodetic2D(U_radial,U_north,U_east,U_x,U_y,xx,yy); 89 InputUpdateFromVectorx(femmodel,U_x,EsaXmotionEnum,VertexSIdEnum); 90 InputUpdateFromVectorx(femmodel,U_y,EsaYmotionEnum,VertexSIdEnum); 85 91 } 86 92 … … 102 108 delete U_north; 103 109 delete U_east; 110 delete U_x; 111 delete U_y; 104 112 if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);} 105 113 } -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22326 r22349 872 872 EsaNmotionEnum, 873 873 EsaEmotionEnum, 874 EsaXmotionEnum, 875 EsaYmotionEnum, 876 EsaHemisphereEnum, 874 877 EsaStrainratexxEnum, 875 878 EsaStrainratexyEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22326 r22349 847 847 case EsaNmotionEnum : return "EsaNmotion"; 848 848 case EsaEmotionEnum : return "EsaEmotion"; 849 case EsaXmotionEnum : return "EsaXmotion"; 850 case EsaYmotionEnum : return "EsaYmotion"; 851 case EsaHemisphereEnum : return "EsaHemisphere"; 849 852 case EsaStrainratexxEnum : return "EsaStrainratexx"; 850 853 case EsaStrainratexyEnum : return "EsaStrainratexy"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22326 r22349 865 865 else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum; 866 866 else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum; 867 else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum; 868 else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum; 869 else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum; 867 870 else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum; 868 871 else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum; … … 872 875 else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum; 873 876 else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum; 874 else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;875 else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;876 else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum; 880 if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum; 881 else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum; 882 else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum; 883 else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum; 881 884 else if (strcmp(name,"AmrType")==0) return AmrTypeEnum; 882 885 else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum; … … 995 998 else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum; 996 999 else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum; 997 else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;998 else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;999 else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum; 1003 if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum; 1004 else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum; 1005 else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum; 1006 else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum; 1004 1007 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 1005 1008 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; -
issm/trunk-jpl/src/m/classes/esa.m
r21620 r22349 10 10 love_l = 0; %ideam 11 11 degacc = 0; 12 hemisphere = 0; 12 13 requested_outputs = {}; 13 14 transitions = {}; … … 26 27 %numerical discretization accuracy 27 28 self.degacc=.01; 28 29 30 %computational flags: 31 self.hemisphere=0; 32 29 33 %output default: 30 34 self.requested_outputs={'default'}; … … 66 70 fielddisplay(self,'love_h','load Love number for radial displacement'); 67 71 fielddisplay(self,'love_l','load Love number for horizontal displacements'); 72 fielddisplay(self,'hemisphere','North-south, East-west components of 2-D horiz displacement vector: -1 south, 1 north'); 68 73 fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions'); 69 74 fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps'); … … 75 80 WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1); 76 81 WriteData(fid,prefix,'object',self,'fieldname','love_l','format','DoubleMat','mattype',1); 82 WriteData(fid,prefix,'object',self,'fieldname','hemisphere','format','Integer'); 77 83 WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double'); 78 84 WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray'); … … 93 99 writejs1Darray(fid,[modelname '.esa.love_h'],self.love_h); 94 100 writejs1Darray(fid,[modelname '.esa.love_l'],self.love_l); 101 writejsdouble(fid,[modelname '.esa.hemisphere'],self.hemisphere); 95 102 writejsdouble(fid,[modelname '.esa.degacc'],self.degacc); 96 103 writejscellstring(fid,[modelname '.esa.requested_outputs'],self.requested_outputs);
Note:
See TracChangeset
for help on using the changeset viewer.