Changeset 26232
- Timestamp:
- 05/04/21 09:11:16 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r26230 r26232 6133 6133 IssmDouble* tide_love_h = NULL; 6134 6134 IssmDouble* tide_love_k = NULL; 6135 IssmDouble* load_love_k = NULL; 6136 IssmDouble tide_love_k2secular; 6135 IssmDouble* tide_love_l = NULL; 6137 6136 IssmDouble moi_e, moi_p, omega; 6138 IssmDouble Grotm1[3]; 6139 IssmDouble Grotm2[3]; 6140 IssmDouble Grotm3[3]; 6141 IssmDouble pre; 6137 IssmDouble Grotm1[3],GUrotm1[3],GNrotm1[3],GErotm1[3]; 6138 IssmDouble Grotm2[3],GUrotm2[3],GNrotm2[3],GErotm2[3]; 6139 IssmDouble Grotm3[3],GUrotm3[3],GNrotm3[3],GErotm3[3]; 6140 IssmDouble Y21cos , Y21sin , Y20; 6141 IssmDouble dY21cos_dlat,dY21sin_dlat,dY20_dlat; 6142 IssmDouble dY21cos_dlon,dY21sin_dlon; 6143 IssmDouble LoveRotRSL,LoveRotU,LoveRothoriz; 6142 6144 /*}}}*/ 6143 6145 /*Recover parameters:{{{ */ … … 6153 6155 6154 6156 if(computerotation){ 6155 parameters->FindParam(&load_love_k,NULL,NULL,LoadLoveKEnum);6156 6157 parameters->FindParam(&tide_love_h,NULL,NULL,TidalLoveHEnum); 6157 6158 parameters->FindParam(&tide_love_k,NULL,NULL,TidalLoveKEnum); 6158 parameters->FindParam(&tide_love_ k2secular,TidalLoveK2SecularEnum);6159 parameters->FindParam(&tide_love_l,NULL,NULL,TidalLoveLEnum); 6159 6160 parameters->FindParam(&moi_e,RotationalEquatorialMoiEnum); 6160 6161 parameters->FindParam(&moi_p,RotationalPolarMoiEnum); … … 6270 6271 g=4.0/3.0*M_PI*rho_earth*NewtonG*planetradius; 6271 6272 6273 //Amplitude of the rotational feedback 6274 LoveRotRSL=((1.0+tide_love_k[2]-tide_love_h[2])/g)*pow(omega*planetradius,2.0); 6275 LoveRotU=(tide_love_h[2]/g)*pow(omega*planetradius,2.0); 6276 LoveRothoriz=(tide_love_l[2]/g)*pow(omega*planetradius,2.0); 6277 6272 6278 for(int i=0;i<3;i++){ 6273 6279 lati=latitude[i]; 6274 6280 longi=longitude[i]; 6275 6281 6276 pre=((1.0+tide_love_k[2]-tide_love_h[2])/g)*pow(omega*planetradius,2.0); 6277 Grotm1[i]= - pre* 0.5*sin(2.*lati)*cos(longi); 6278 Grotm2[i]= - pre* 0.5*sin(2.*lati)*sin(longi); 6279 Grotm3[i]= - pre* (1.0/6.0 - 0.5*cos(2.0*lati)); 6282 //Spherical harmonic functions of degree 2 6283 Y21cos= -0.5*sin(2.*lati)*cos(longi); 6284 Y21sin= -0.5*sin(2.*lati)*sin(longi); 6285 Y20 = -(1.0/6.0 - 0.5*cos(2.0*lati)); 6286 6287 Grotm1[i]= LoveRotRSL*Y21cos; 6288 Grotm2[i]= LoveRotRSL*Y21sin; 6289 Grotm3[i]= LoveRotRSL*Y20; 6290 6291 if (computeelastic){ 6292 GUrotm1[i]= LoveRotU*Y21cos; 6293 GUrotm2[i]= LoveRotU*Y21sin; 6294 GUrotm3[i]= LoveRotU*Y20; 6295 if (horiz){ 6296 //bed_N = Love_l * d(Y)/dlat ; 6297 dY21cos_dlat=-cos(2.*lati)*cos(longi); 6298 dY21sin_dlat=-cos(2.*lati)*sin(longi); 6299 dY20_dlat=-sin(2.0*lati); 6300 GNrotm1[i]= LoveRothoriz*dY21cos_dlat; 6301 GNrotm2[i]= LoveRothoriz*dY21sin_dlat; 6302 GNrotm3[i]= LoveRothoriz*dY20_dlat; 6303 6304 //bed_E = Love_l * 1/cos(lat) * d(Y)/dlon ; 6305 dY21cos_dlon=-Y21sin; 6306 dY21sin_dlon=Y21cos; 6307 //dY20_dlon=0.; 6308 GNrotm1[i]= LoveRothoriz*dY21cos_dlon/cos(lati); 6309 GNrotm2[i]= LoveRothoriz*dY21sin_dlon/cos(lati); 6310 GNrotm3[i]= 0.0; 6311 } 6312 } 6280 6313 } 6281 6314 this->AddInput(SealevelGrotm1Enum,&Grotm1[0],P1Enum); 6282 6315 this->AddInput(SealevelGrotm2Enum,&Grotm2[0],P1Enum); 6283 6316 this->AddInput(SealevelGrotm3Enum,&Grotm3[0],P1Enum); 6317 if (computeelastic){ 6318 this->AddInput(SealevelGUrotm1Enum,&GUrotm1[0],P1Enum); 6319 this->AddInput(SealevelGUrotm2Enum,&GUrotm2[0],P1Enum); 6320 this->AddInput(SealevelGUrotm3Enum,&GUrotm3[0],P1Enum); 6321 if(horiz){ 6322 this->AddInput(SealevelGNrotm1Enum,&GNrotm1[0],P1Enum); 6323 this->AddInput(SealevelGNrotm2Enum,&GNrotm2[0],P1Enum); 6324 this->AddInput(SealevelGNrotm3Enum,&GNrotm3[0],P1Enum); 6325 this->AddInput(SealevelGErotm1Enum,&GErotm1[0],P1Enum); 6326 this->AddInput(SealevelGErotm2Enum,&GErotm2[0],P1Enum); 6327 this->AddInput(SealevelGErotm3Enum,&GErotm3[0],P1Enum); 6328 } 6329 } 6284 6330 } 6285 6331 /*}}}*/ … … 6995 7041 IssmDouble Grotm2[3]; 6996 7042 IssmDouble Grotm3[3]; 7043 IssmDouble GUrotm1[3]; 7044 IssmDouble GUrotm2[3]; 7045 IssmDouble GUrotm3[3]; 7046 IssmDouble GNrotm1[3]; 7047 IssmDouble GNrotm2[3]; 7048 IssmDouble GNrotm3[3]; 7049 IssmDouble GErotm1[3]; 7050 IssmDouble GErotm2[3]; 7051 IssmDouble GErotm3[3]; 6997 7052 bool rotation= false; 6998 7053 bool elastic=false; … … 7053 7108 } 7054 7109 } 7110 7111 if (elastic){ 7112 Element::GetInputListOnVertices(&GUrotm1[0],SealevelGUrotm1Enum); 7113 Element::GetInputListOnVertices(&GUrotm2[0],SealevelGUrotm2Enum); 7114 Element::GetInputListOnVertices(&GUrotm3[0],SealevelGUrotm3Enum); 7115 7116 for(int i=0;i<NUMVERTICES;i++){ 7117 if(slgeom->lids[this->vertices[i]->lid]==this->lid){ 7118 SealevelU[i]+=GUrotm1[i]*rotationvector[0]+GUrotm2[i]*rotationvector[1]+GUrotm3[i]*rotationvector[2]; 7119 } 7120 } 7121 if (horiz){ 7122 Element::GetInputListOnVertices(&GNrotm1[0],SealevelGNrotm1Enum); 7123 Element::GetInputListOnVertices(&GNrotm2[0],SealevelGNrotm2Enum); 7124 Element::GetInputListOnVertices(&GNrotm3[0],SealevelGNrotm3Enum); 7125 Element::GetInputListOnVertices(&GErotm1[0],SealevelGErotm1Enum); 7126 Element::GetInputListOnVertices(&GErotm2[0],SealevelGErotm2Enum); 7127 Element::GetInputListOnVertices(&GErotm3[0],SealevelGErotm3Enum); 7128 7129 for(int i=0;i<NUMVERTICES;i++){ 7130 if(slgeom->lids[this->vertices[i]->lid]==this->lid){ 7131 SealevelN[i]+=GNrotm1[i]*rotationvector[0]+GNrotm2[i]*rotationvector[1]+GNrotm3[i]*rotationvector[2]; 7132 SealevelE[i]+=GErotm1[i]*rotationvector[0]+GErotm2[i]*rotationvector[1]+GErotm3[i]*rotationvector[2]; 7133 } 7134 } 7135 } 7136 } 7055 7137 } 7056 7138 … … 7062 7144 this->AddInput(BedGRDEnum,SealevelU,P1Enum); 7063 7145 if(horiz){ 7146 this->AddInput(BedNorthGRDEnum,SealevelN,P1Enum); 7064 7147 this->AddInput(BedEastGRDEnum,SealevelE,P1Enum); 7065 this->AddInput(BedNorthGRDEnum,SealevelN,P1Enum);7066 7148 } 7067 7149
Note:
See TracChangeset
for help on using the changeset viewer.