Changeset 20683
- Timestamp:
- 06/01/16 17:05:50 (9 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.cpp ¶
r20678 r20683 224 224 225 225 /*Intermediaries*/ 226 IssmDouble vx,vy,vz ;227 IssmDouble dvx[3],dvy[3],dvz[3] ;226 IssmDouble vx,vy,vz,vmag; 227 IssmDouble dvx[3],dvy[3],dvz[3],dvmag[3]; 228 228 IssmDouble epso,epsprime; 229 229 int dim; … … 241 241 int numvertices = this->GetNumberOfVertices(); 242 242 IssmDouble* lambdas = xNew<IssmDouble>(numvertices); 243 IssmDouble* vorticityx = xNew<IssmDouble>(numvertices); 244 IssmDouble* vorticityy = xNew<IssmDouble>(numvertices); 245 IssmDouble* vorticityz = xNew<IssmDouble>(numvertices); 246 IssmDouble* omega_corrx = xNew<IssmDouble>(numvertices); 247 IssmDouble* omega_corry = xNew<IssmDouble>(numvertices); 248 IssmDouble* omega_corrz = xNew<IssmDouble>(numvertices); 243 249 244 250 /* Start looping on the number of vertices: */ … … 264 270 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.; 265 271 } 266 EarlStrainrateQuantities(&epso,&epsprime,vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]); 272 /*Calculate velocity magnitude and its derivative*/ 273 vmag = sqrt(vx*vx+vy*vy+vz*vz); 274 if(vmag<1e-12){ 275 vmag=1e-12; 276 dvmag[0]=0; 277 dvmag[1]=0; 278 dvmag[2]=0; 279 } 280 else{ 281 dvmag[0]=1./(2*sqrt(vmag))*(2*vx*dvx[0]+2*vy*dvy[0]+2*vz*dvz[0]); 282 dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]); 283 dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]); 284 } 285 EarlStrainrateQuantities(&epso,&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]); 267 286 lambdas[iv]=EarlLambdaS(epso,epsprime); 287 vorticityx[iv]=dvz[1]-dvy[2]; 288 vorticityy[iv]=dvx[2]-dvz[0]; 289 vorticityz[iv]=dvy[0]-dvx[1]; 290 omega_corrx[iv] = -vorticityx[iv] + 2*(dvmag[1]*vz - dvmag[2]*vy)/vmag; 291 omega_corry[iv] = -vorticityy[iv] + 2*(dvmag[2]*vx - dvmag[0]*vz)/vmag; 292 omega_corrz[iv] = -vorticityz[iv] + 2*(dvmag[0]*vy - dvmag[1]*vx)/vmag; 268 293 } 269 294 270 295 /*Add Stress tensor components into inputs*/ 271 296 this->AddInput(LambdaSEnum,lambdas,P1Enum); 272 297 this->AddInput(Outputdefinition21Enum,vorticityx,P1Enum); 298 this->AddInput(Outputdefinition22Enum,vorticityy,P1Enum); 299 this->AddInput(Outputdefinition23Enum,vorticityz,P1Enum); 300 this->AddInput(Outputdefinition31Enum,omega_corrx,P1Enum); 301 this->AddInput(Outputdefinition32Enum,omega_corry,P1Enum); 302 this->AddInput(Outputdefinition33Enum,omega_corrz,P1Enum); 303 273 304 /*Clean up and return*/ 274 305 delete gauss; -
TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matearl.cpp ¶
r20678 r20683 409 409 IssmDouble E,lambdas; 410 410 IssmDouble epso,epsprime_norm; 411 412 EarlStrainrateQuantities(&epso,&epsprime_norm,vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]); 411 IssmDouble vmag,dvmag[3]; 412 413 /*Calculate velocity magnitude and its derivative*/ 414 vmag = sqrt(vx*vx+vy*vy+vz*vz); 415 if(vmag<1e-12){ 416 dvmag[0]=0; 417 dvmag[1]=0; 418 dvmag[2]=0; 419 } 420 else{ 421 dvmag[0]=1./(2*sqrt(vmag))*(2*vx*dvx[0]+2*vy*dvy[0]+2*vz*dvz[0]); 422 dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]); 423 dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]); 424 } 425 426 EarlStrainrateQuantities(&epso,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]); 413 427 lambdas=EarlLambdaS(epso,epsprime_norm); 414 428 -
TabularUnified issm/trunk-jpl/src/c/shared/Elements/EarlComponents.cpp ¶
r20678 r20683 2 2 #include "../Numerics/types.h" 3 3 #include "../Exceptions/exceptions.h" 4 5 void EarlStrainrateQuantities(IssmDouble *pepso, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble * dvx,IssmDouble* dvy,IssmDouble* dvz){/*{{{*/4 #include "./elements.h" 5 void EarlStrainrateQuantities(IssmDouble *pepso, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/ 6 6 7 7 /*Intermediaries*/ 8 IssmDouble vorticity[3],vorticity_norm;8 IssmDouble omega[3],omega_norm; 9 9 IssmDouble nrsp[3],nrsp_norm; 10 10 IssmDouble eps[3][3],epso; 11 11 IssmDouble epsprime[3],epsprime_norm; 12 12 13 /*Create vorticity vector*/ 14 _assert_(dvx && dvy && dvz); 15 vorticity[0] = dvz[1] - dvy[2]; 16 vorticity[1] = dvx[2] - dvz[0]; 17 vorticity[2] = dvy[0] - dvx[1]; 18 19 /*Normalize*/ 20 vorticity_norm = sqrt(vorticity[0]*vorticity[0] + vorticity[1]*vorticity[1] + vorticity[2]*vorticity[2]); 21 if(vorticity_norm==0){ 22 vorticity[0] = 0.; 23 vorticity[1] = 0.; 24 vorticity[2] = 1.; 25 } 26 else{ 27 vorticity[0] =vorticity[0]/vorticity_norm; 28 vorticity[1] =vorticity[1]/vorticity_norm; 29 vorticity[2] =vorticity[2]/vorticity_norm; 30 } 13 /*Get omega, correction for rigid body rotation*/ 14 EarlOmega(&omega[0],vx,vy,vz,vmag,dvx,dvy,dvz,dvmag); 31 15 32 16 /*Non-rotating shear plane*/ 33 nrsp[0] = vy* vorticity[2] - vz*vorticity[1];34 nrsp[1] = vz* vorticity[0] - vx*vorticity[2];35 nrsp[2] = vx* vorticity[1] - vy*vorticity[0];17 nrsp[0] = vy*omega[2] - vz*omega[1]; 18 nrsp[1] = vz*omega[0] - vx*omega[2]; 19 nrsp[2] = vx*omega[1] - vy*omega[0]; 36 20 37 21 /*Normalize*/ … … 81 65 for(int j=0;j<3;j++){ 82 66 for(int k=0;k<3;k++){ 83 epsprime[j] += -nrsp[i]*eps[i][k]* vorticity[k]*vorticity[j];67 epsprime[j] += -nrsp[i]*eps[i][k]*omega[k]*omega[j]; 84 68 } 85 69 } … … 88 72 /*Get norm of epsprime*/ 89 73 epsprime_norm = sqrt(epsprime[0]*epsprime[0] + epsprime[1]*epsprime[1] + epsprime[2]*epsprime[2]); 90 74 91 75 /*Assign output pointers*/ 92 76 *pepso=epso; 93 77 *pepsprime_norm=epsprime_norm; 78 }/*}}}*/ 79 void EarlOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag){/*{{{*/ 80 81 /*Intermediaries*/ 82 IssmDouble omega_norm; 83 84 /*Create vorticity vector*/ 85 _assert_(dvx && dvy && dvz && dvmag); 86 if(vmag<1e-12)vmag=1e-12; 87 88 /*Create vorticity vector, corrected for rigid body rotation 89 * \overline{\omega} =\omega - \Omega 90 * =-\nabla\times{\bf v} - 2*\nabla U\times{\bf v}/U; 91 * check the magnitude of the second term -- if it is small, then the two 92 * vorticities (omega and first term in omega) are approx. equal 93 * 94 * */ 95 omega[0] = -(dvz[1] - dvy[2]) + 2*(dvmag[1]*vz - dvmag[2]*vy)/vmag; 96 omega[1] = -(dvx[2] - dvz[0]) + 2*(dvmag[2]*vx - dvmag[0]*vz)/vmag; 97 omega[2] = -(dvy[0] - dvx[1]) + 2*(dvmag[0]*vy - dvmag[1]*vx)/vmag; 98 99 /*Take out vorticity component aligned with the velocity*/ 100 IssmDouble wdotv = vx/vmag*omega[0] + vy/vmag*omega[1] + vz/vmag*omega[2]; 101 omega[0] = omega[0] - wdotv*vx/vmag; 102 omega[1] = omega[1] - wdotv*vy/vmag; 103 omega[2] = omega[2] - wdotv*vz/vmag; 104 105 /*Normalize*/ 106 omega_norm = sqrt(omega[0]*omega[0] + omega[1]*omega[1] + omega[2]*omega[2]); 107 if(omega_norm==0){ 108 omega[0] = 0.; 109 omega[1] = 0.; 110 omega[2] = 1.; 111 } 112 else{ 113 omega[0] =omega[0]/omega_norm; 114 omega[1] =omega[1]/omega_norm; 115 omega[2] =omega[2]/omega_norm; 116 } 117 94 118 }/*}}}*/ 95 119 IssmDouble EarlLambdaS(IssmDouble epso, IssmDouble epsprime_norm){/*{{{*/ -
TabularUnified issm/trunk-jpl/src/c/shared/Elements/elements.h ¶
r20678 r20683 16 16 // IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n); 17 17 IssmDouble EarlLambdaS(IssmDouble epso, IssmDouble epsprime_norm); 18 void EarlStrainrateQuantities(IssmDouble *pepso, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz); 18 void EarlOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag); 19 void EarlStrainrateQuantities(IssmDouble *pepso, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag); 19 20 IssmDouble PddSurfaceMassBalance(IssmDouble* monthlytemperatures, IssmDouble* monthlyprec, 20 21 IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, IssmDouble signorm,
Note:
See TracChangeset
for help on using the changeset viewer.