[22755] | 1 | Index: ../trunk-jpl/src/c/shared/Elements/elements.h
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/c/shared/Elements/elements.h (revision 21825)
|
---|
| 4 | +++ ../trunk-jpl/src/c/shared/Elements/elements.h (revision 21826)
|
---|
| 5 | @@ -16,7 +16,7 @@
|
---|
| 6 | // IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n);
|
---|
| 7 | IssmDouble EstarLambdaS(IssmDouble epseff, IssmDouble epsprime_norm);
|
---|
| 8 | void EstarOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag);
|
---|
| 9 | -void EstarStrainrateQuantities(IssmDouble *pepseff, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag);
|
---|
| 10 | +void EstarStrainrateQuantities(IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag);
|
---|
| 11 | IssmDouble PddSurfaceMassBalance(IssmDouble* monthlytemperatures, IssmDouble* monthlyprec,
|
---|
| 12 | IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, IssmDouble signorm,
|
---|
| 13 | IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,IssmDouble s0t,
|
---|
| 14 | Index: ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp
|
---|
| 15 | ===================================================================
|
---|
| 16 | --- ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp (revision 21825)
|
---|
| 17 | +++ ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp (revision 21826)
|
---|
| 18 | @@ -2,12 +2,12 @@
|
---|
| 19 | #include "../Numerics/types.h"
|
---|
| 20 | #include "../Exceptions/exceptions.h"
|
---|
| 21 | #include "./elements.h"
|
---|
| 22 | -void EstarStrainrateQuantities(IssmDouble *pepseff, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/
|
---|
| 23 | +void EstarStrainrateQuantities(IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/
|
---|
| 24 |
|
---|
| 25 | /*Intermediaries*/
|
---|
| 26 | IssmDouble omega[3];
|
---|
| 27 | IssmDouble nrsp[3],nrsp_norm;
|
---|
| 28 | - IssmDouble eps[3][3],epseff;
|
---|
| 29 | + IssmDouble eps[3][3];
|
---|
| 30 | IssmDouble epsprime[3],epsprime_norm;
|
---|
| 31 |
|
---|
| 32 | /*Get omega, correction for rigid body rotation*/
|
---|
| 33 | @@ -36,11 +36,6 @@
|
---|
| 34 | eps[1][0] = .5*(dvx[1]+dvy[0]); eps[1][1] = dvy[1]; eps[1][2] = .5*(dvy[2]+dvz[1]);
|
---|
| 35 | eps[2][0] = .5*(dvx[2]+dvz[0]); eps[2][1] = .5*(dvy[2]+dvz[1]); eps[2][2] = dvz[2];
|
---|
| 36 |
|
---|
| 37 | - /*effective strain rate*/
|
---|
| 38 | - epseff = 0.;
|
---|
| 39 | - /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
|
---|
| 40 | - epseff = sqrt(eps[0][0]*eps[0][0] + eps[1][1]*eps[1][1] + eps[0][1]*eps[0][1] + eps[0][2]*eps[0][2] + eps[1][2]*eps[1][2] + eps[0][0]*eps[1][1]);
|
---|
| 41 | -
|
---|
| 42 | /*Compute the shear strain rate on the non rotating shear plane*/
|
---|
| 43 | epsprime[0]=0.;
|
---|
| 44 | epsprime[1]=0.;
|
---|
| 45 | @@ -72,7 +67,6 @@
|
---|
| 46 | epsprime_norm = sqrt(epsprime[0]*epsprime[0] + epsprime[1]*epsprime[1] + epsprime[2]*epsprime[2]);
|
---|
| 47 |
|
---|
| 48 | /*Assign output pointers*/
|
---|
| 49 | - *pepseff=epseff;
|
---|
| 50 | *pepsprime_norm=epsprime_norm;
|
---|
| 51 | }/*}}}*/
|
---|
| 52 | void EstarOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag){/*{{{*/
|
---|
| 53 | Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
|
---|
| 54 | ===================================================================
|
---|
| 55 | --- ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 21825)
|
---|
| 56 | +++ ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 21826)
|
---|
| 57 | @@ -47,7 +47,7 @@
|
---|
| 58 | /*Intermediaries*/
|
---|
| 59 | IssmDouble vx,vy,vz,vmag;
|
---|
| 60 | IssmDouble dvx[3],dvy[3],dvz[3],dvmag[3];
|
---|
| 61 | - IssmDouble epseff,epsprime;
|
---|
| 62 | + IssmDouble eps[3][3],epseff,epsprime;
|
---|
| 63 | int dim;
|
---|
| 64 | IssmDouble *xyz_list = NULL;
|
---|
| 65 |
|
---|
| 66 | @@ -100,7 +100,18 @@
|
---|
| 67 | dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]);
|
---|
| 68 | dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
|
---|
| 69 | }
|
---|
| 70 | - EstarStrainrateQuantities(&epseff,&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]);
|
---|
| 71 | +
|
---|
| 72 | + /*Build strain rate tensor*/
|
---|
| 73 | + eps[0][0] = dvx[0]; eps[0][1] = .5*(dvx[1]+dvy[0]); eps[0][2] = .5*(dvx[2]+dvz[0]);
|
---|
| 74 | + eps[1][0] = .5*(dvx[1]+dvy[0]); eps[1][1] = dvy[1]; eps[1][2] = .5*(dvy[2]+dvz[1]);
|
---|
| 75 | + eps[2][0] = .5*(dvx[2]+dvz[0]); eps[2][1] = .5*(dvy[2]+dvz[1]); eps[2][2] = dvz[2];
|
---|
| 76 | +
|
---|
| 77 | + /*effective strain rate*/
|
---|
| 78 | + epseff = 0.;
|
---|
| 79 | + /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
|
---|
| 80 | + epseff = sqrt(eps[0][0]*eps[0][0] + eps[1][1]*eps[1][1] + eps[0][1]*eps[0][1] + eps[0][2]*eps[0][2] + eps[1][2]*eps[1][2] + eps[0][0]*eps[1][1]);
|
---|
| 81 | +
|
---|
| 82 | + EstarStrainrateQuantities(&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]);
|
---|
| 83 | lambdas[iv]=EstarLambdaS(epseff,epsprime);
|
---|
| 84 | }
|
---|
| 85 |
|
---|
| 86 | @@ -676,7 +687,7 @@
|
---|
| 87 | material->GetViscosity_B(&dmudB,eps_eff);
|
---|
| 88 | break;
|
---|
| 89 | case MatestarEnum:
|
---|
| 90 | - material->ViscosityBFS(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,vz_input);
|
---|
| 91 | + material->ViscosityBFS(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,vz_input,eps_eff);
|
---|
| 92 | break;
|
---|
| 93 | default: _error_("not supported");
|
---|
| 94 | }
|
---|
| 95 | @@ -713,7 +724,7 @@
|
---|
| 96 | material->GetViscosity_B(&dmudB,eps_eff);
|
---|
| 97 | break;
|
---|
| 98 | case MatestarEnum:
|
---|
| 99 | - material->ViscosityBHO(&dmudB,dim,xyz_list,gauss,vx_input,vy_input);
|
---|
| 100 | + material->ViscosityBHO(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
|
---|
| 101 | break;
|
---|
| 102 | default: _error_("not supported");
|
---|
| 103 | }
|
---|
| 104 | @@ -750,7 +761,7 @@
|
---|
| 105 | material->GetViscosity_B(&dmudB,eps_eff);
|
---|
| 106 | break;
|
---|
| 107 | case MatestarEnum:
|
---|
| 108 | - material->ViscosityBSSA(&dmudB,dim,xyz_list,gauss,vx_input,vy_input);
|
---|
| 109 | + material->ViscosityBSSA(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
|
---|
| 110 | break;
|
---|
| 111 | default: _error_("not supported");
|
---|
| 112 | }
|
---|
| 113 | Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
|
---|
| 114 | ===================================================================
|
---|
| 115 | --- ../trunk-jpl/src/c/classes/Materials/Matice.h (revision 21825)
|
---|
| 116 | +++ ../trunk-jpl/src/c/classes/Materials/Matice.h (revision 21826)
|
---|
| 117 | @@ -87,9 +87,9 @@
|
---|
| 118 | void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
|
---|
| 119 | void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
|
---|
| 120 | void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
|
---|
| 121 | - void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
|
---|
| 122 | - void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
|
---|
| 123 | - void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
|
---|
| 124 | + void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 125 | + void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 126 | + void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 127 | /*}}}*/
|
---|
| 128 | };
|
---|
| 129 |
|
---|
| 130 | Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
|
---|
| 131 | ===================================================================
|
---|
| 132 | --- ../trunk-jpl/src/c/classes/Materials/Matpar.h (revision 21825)
|
---|
| 133 | +++ ../trunk-jpl/src/c/classes/Materials/Matpar.h (revision 21826)
|
---|
| 134 | @@ -124,9 +124,9 @@
|
---|
| 135 | void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
|
---|
| 136 | void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
|
---|
| 137 | void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
|
---|
| 138 | - void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
|
---|
| 139 | - void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
|
---|
| 140 | - void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
|
---|
| 141 | + void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 142 | + void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 143 | + void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
|
---|
| 144 | /*}}}*/
|
---|
| 145 | /*Numerics: {{{*/
|
---|
| 146 | void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
|
---|
| 147 | Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
|
---|
| 148 | ===================================================================
|
---|
| 149 | --- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp (revision 21825)
|
---|
| 150 | +++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp (revision 21826)
|
---|
| 151 | @@ -248,13 +248,13 @@
|
---|
| 152 | _error_("not implemented yet");
|
---|
| 153 | }
|
---|
| 154 | /*}}}*/
|
---|
| 155 | -IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/
|
---|
| 156 | +IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
|
---|
| 157 |
|
---|
| 158 | /*output: */
|
---|
| 159 | IssmDouble viscosity;
|
---|
| 160 |
|
---|
| 161 | /*Intermediaries*/
|
---|
| 162 | - IssmDouble epseff,epsprime_norm;
|
---|
| 163 | + IssmDouble epsprime_norm;
|
---|
| 164 | IssmDouble lambdas;
|
---|
| 165 | IssmDouble vmag,dvmag[3];
|
---|
| 166 | IssmDouble B,Ec,Es,E,n;
|
---|
| 167 | @@ -272,8 +272,8 @@
|
---|
| 168 | dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
|
---|
| 169 | }
|
---|
| 170 |
|
---|
| 171 | - EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
|
---|
| 172 | - lambdas=EstarLambdaS(epseff,epsprime_norm);
|
---|
| 173 | + EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
|
---|
| 174 | + lambdas=EstarLambdaS(eps_eff,epsprime_norm);
|
---|
| 175 |
|
---|
| 176 | /*Get B and enhancement*/
|
---|
| 177 | n=GetN(); _assert_(n>0.);
|
---|
| 178 | @@ -293,24 +293,27 @@
|
---|
| 179 |
|
---|
| 180 | /*Compute viscosity*/
|
---|
| 181 | /*if no strain rate, return maximum viscosity*/
|
---|
| 182 | - if(epseff==0.){
|
---|
| 183 | + if(eps_eff==0.){
|
---|
| 184 | viscosity = 1.e+14/2.;
|
---|
| 185 | //viscosity = B;
|
---|
| 186 | //viscosity=2.5*pow(10.,17);
|
---|
| 187 | }
|
---|
| 188 | else{
|
---|
| 189 | - viscosity = B/(2.*pow(E,1./n)*pow(epseff,2./n));
|
---|
| 190 | + viscosity = B/(2.*pow(E,1./n)*pow(eps_eff,2./n));
|
---|
| 191 | }
|
---|
| 192 |
|
---|
| 193 | + /*Checks in debugging mode*/
|
---|
| 194 | + if(viscosity<=0) _error_("Negative viscosity");
|
---|
| 195 | +
|
---|
| 196 | /*Assign output pointer*/
|
---|
| 197 | return viscosity;
|
---|
| 198 | }
|
---|
| 199 | /*}}}*/
|
---|
| 200 | -IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/
|
---|
| 201 | +IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
|
---|
| 202 |
|
---|
| 203 | /*Intermediaries*/
|
---|
| 204 | IssmDouble dmudB;
|
---|
| 205 | - IssmDouble epseff,epsprime_norm;
|
---|
| 206 | + IssmDouble epsprime_norm;
|
---|
| 207 | IssmDouble lambdas;
|
---|
| 208 | IssmDouble vmag,dvmag[3];
|
---|
| 209 | IssmDouble Ec,Es,E;
|
---|
| 210 | @@ -328,8 +331,8 @@
|
---|
| 211 | dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
|
---|
| 212 | }
|
---|
| 213 |
|
---|
| 214 | - EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
|
---|
| 215 | - lambdas=EstarLambdaS(epseff,epsprime_norm);
|
---|
| 216 | + EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
|
---|
| 217 | + lambdas=EstarLambdaS(eps_eff,epsprime_norm);
|
---|
| 218 |
|
---|
| 219 | /*Get enhancement*/
|
---|
| 220 | if (isdepthaveraged==0.){
|
---|
| 221 | @@ -345,8 +348,8 @@
|
---|
| 222 | E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.);
|
---|
| 223 |
|
---|
| 224 | /*Compute dmudB*/
|
---|
| 225 | - if(epseff==0.) dmudB = 0.;
|
---|
| 226 | - else dmudB = 1./(2.*pow(E,1./3.)*pow(epseff,2./3.));
|
---|
| 227 | + if(eps_eff==0.) dmudB = 0.;
|
---|
| 228 | + else dmudB = 1./(2.*pow(E,1./3.)*pow(eps_eff,2./3.));
|
---|
| 229 |
|
---|
| 230 | /*Assign output*/
|
---|
| 231 | return dmudB;
|
---|
| 232 | @@ -407,7 +410,7 @@
|
---|
| 233 |
|
---|
| 234 | }
|
---|
| 235 | /*}}}*/
|
---|
| 236 | -void Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
|
---|
| 237 | +void Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){/*{{{*/
|
---|
| 238 |
|
---|
| 239 | /*Intermediaries*/
|
---|
| 240 | IssmDouble vx,vy,vz;
|
---|
| 241 | @@ -433,10 +436,10 @@
|
---|
| 242 | }
|
---|
| 243 |
|
---|
| 244 | /*Compute dmudB*/
|
---|
| 245 | - *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 246 | + *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 247 | }
|
---|
| 248 | /*}}}*/
|
---|
| 249 | -void Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
|
---|
| 250 | +void Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
|
---|
| 251 |
|
---|
| 252 | /*Intermediaries*/
|
---|
| 253 | IssmDouble vx,vy,vz;
|
---|
| 254 | @@ -462,9 +465,9 @@
|
---|
| 255 | dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
|
---|
| 256 |
|
---|
| 257 | /*Compute viscosity*/
|
---|
| 258 | - *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 259 | + *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 260 | }/*}}}*/
|
---|
| 261 | -void Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
|
---|
| 262 | +void Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
|
---|
| 263 | /*Intermediaries*/
|
---|
| 264 | IssmDouble vx,vy,vz;
|
---|
| 265 | IssmDouble dvx[3],dvy[3],dvz[3];
|
---|
| 266 | @@ -492,7 +495,7 @@
|
---|
| 267 | dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
|
---|
| 268 |
|
---|
| 269 | /*Compute viscosity*/
|
---|
| 270 | - *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 271 | + *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 272 | }/*}}}*/
|
---|
| 273 | void Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
|
---|
| 274 |
|
---|
| 275 | @@ -499,6 +502,9 @@
|
---|
| 276 | /*Intermediaries*/
|
---|
| 277 | IssmDouble vx,vy,vz;
|
---|
| 278 | IssmDouble dvx[3],dvy[3],dvz[3];
|
---|
| 279 | + IssmDouble epsilon3d[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
|
---|
| 280 | + IssmDouble epsilon2d[3]; /* epsilon=[exx,eyy,exy];*/
|
---|
| 281 | + IssmDouble eps_eff,eps0=1.e-27;
|
---|
| 282 | bool isdepthaveraged=0.;
|
---|
| 283 |
|
---|
| 284 | /*Get velocity derivatives in all directions*/
|
---|
| 285 | @@ -519,8 +525,19 @@
|
---|
| 286 | dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.;
|
---|
| 287 | }
|
---|
| 288 |
|
---|
| 289 | + if(dim==3){
|
---|
| 290 | + /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
|
---|
| 291 | + element->StrainRateFS(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input,vz_input);
|
---|
| 292 | + eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[5]*epsilon3d[5] + epsilon3d[0]*epsilon3d[1]+eps0*eps0);
|
---|
| 293 | + }
|
---|
| 294 | + else{
|
---|
| 295 | + /* eps_eff^2 = 1/2 ( exx^2 + eyy^2 + 2*exy^2 )*/
|
---|
| 296 | + element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
|
---|
| 297 | + eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]);
|
---|
| 298 | + }
|
---|
| 299 | +
|
---|
| 300 | /*Compute viscosity*/
|
---|
| 301 | - *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 302 | + *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 303 | }
|
---|
| 304 | /*}}}*/
|
---|
| 305 | void Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
|
---|
| 306 | @@ -531,8 +548,22 @@
|
---|
| 307 | /*Intermediaries*/
|
---|
| 308 | IssmDouble vx,vy,vz;
|
---|
| 309 | IssmDouble dvx[3],dvy[3],dvz[3];
|
---|
| 310 | + IssmDouble epsilon3d[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
|
---|
| 311 | + IssmDouble epsilon2d[5]; /* epsilon=[exx,exy];*/
|
---|
| 312 | + IssmDouble eps_eff;
|
---|
| 313 | bool isdepthaveraged=0.;
|
---|
| 314 |
|
---|
| 315 | + if(dim==3){
|
---|
| 316 | + /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
|
---|
| 317 | + element->StrainRateHO(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input);
|
---|
| 318 | + eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[2]*epsilon3d[2] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[0]*epsilon3d[1]);
|
---|
| 319 | + }
|
---|
| 320 | + else{
|
---|
| 321 | + /* eps_eff^2 = 1/2 (2*exx^2 + 2*exy^2 ) (since eps_zz = - eps_xx)*/
|
---|
| 322 | + element->StrainRateHO2dvertical(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
|
---|
| 323 | + eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]);
|
---|
| 324 | + }
|
---|
| 325 | +
|
---|
| 326 | /*Get velocity derivatives in all directions*/
|
---|
| 327 | _assert_(dim==2 || dim==3);
|
---|
| 328 | _assert_(vx_input);
|
---|
| 329 | @@ -552,7 +583,7 @@
|
---|
| 330 | dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
|
---|
| 331 |
|
---|
| 332 | /*Compute viscosity*/
|
---|
| 333 | - *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 334 | + *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 335 | }/*}}}*/
|
---|
| 336 | void Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
|
---|
| 337 | _error_("not implemented yet");
|
---|
| 338 | @@ -565,6 +596,9 @@
|
---|
| 339 | /*Intermediaries*/
|
---|
| 340 | IssmDouble vx,vy,vz;
|
---|
| 341 | IssmDouble dvx[3],dvy[3],dvz[3];
|
---|
| 342 | + IssmDouble epsilon2d[3];/* epsilon=[exx,eyy,exy]; */
|
---|
| 343 | + IssmDouble epsilon1d; /* epsilon=[exx]; */
|
---|
| 344 | + IssmDouble eps_eff;
|
---|
| 345 | bool isdepthaveraged=1.;
|
---|
| 346 |
|
---|
| 347 | /*Get velocity derivatives in all directions*/
|
---|
| 348 | @@ -588,8 +622,19 @@
|
---|
| 349 | vz = 0.;
|
---|
| 350 | dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
|
---|
| 351 |
|
---|
| 352 | + if(dim==2){
|
---|
| 353 | + /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exx*eyy*/
|
---|
| 354 | + element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
|
---|
| 355 | + eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]);
|
---|
| 356 | + }
|
---|
| 357 | + else{
|
---|
| 358 | + /* eps_eff^2 = exx^2*/
|
---|
| 359 | + element->StrainRateSSA1d(&epsilon1d,xyz_list,gauss,vx_input);
|
---|
| 360 | + eps_eff = fabs(epsilon1d);
|
---|
| 361 | + }
|
---|
| 362 | +
|
---|
| 363 | /*Compute viscosity*/
|
---|
| 364 | - *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
|
---|
| 365 | + *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
|
---|
| 366 | }/*}}}*/
|
---|
| 367 | void Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
|
---|
| 368 | _error_("not implemented yet");
|
---|
| 369 | Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
|
---|
| 370 | ===================================================================
|
---|
| 371 | --- ../trunk-jpl/src/c/classes/Materials/Matice.cpp (revision 21825)
|
---|
| 372 | +++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp (revision 21826)
|
---|
| 373 | @@ -723,7 +723,7 @@
|
---|
| 374 | IssmDouble viscosity;
|
---|
| 375 | IssmDouble epsilon3d[5];/* epsilon=[exx,eyy,exy,exz,eyz];*/
|
---|
| 376 | IssmDouble epsilon2d[2];/* epsilon=[exx,exy]; */
|
---|
| 377 | - IssmDouble eps_eff,E=1.0;
|
---|
| 378 | + IssmDouble eps_eff;
|
---|
| 379 |
|
---|
| 380 | if(dim==3){
|
---|
| 381 | /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
|
---|
| 382 | Index: ../trunk-jpl/src/c/classes/Materials/Material.h
|
---|
| 383 | ===================================================================
|
---|
| 384 | --- ../trunk-jpl/src/c/classes/Materials/Material.h (revision 21825)
|
---|
| 385 | +++ ../trunk-jpl/src/c/classes/Materials/Material.h (revision 21826)
|
---|
| 386 | @@ -52,9 +52,9 @@
|
---|
| 387 | virtual void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0;
|
---|
| 388 | virtual void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
|
---|
| 389 | virtual void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
|
---|
| 390 | - virtual void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
|
---|
| 391 | - virtual void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
|
---|
| 392 | - virtual void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
|
---|
| 393 | + virtual void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff)=0;
|
---|
| 394 | + virtual void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
|
---|
| 395 | + virtual void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
|
---|
| 396 |
|
---|
| 397 | };
|
---|
| 398 | #endif
|
---|
| 399 | Index: ../trunk-jpl/src/c/classes/Materials/Matestar.h
|
---|
| 400 | ===================================================================
|
---|
| 401 | --- ../trunk-jpl/src/c/classes/Materials/Matestar.h (revision 21825)
|
---|
| 402 | +++ ../trunk-jpl/src/c/classes/Materials/Matestar.h (revision 21826)
|
---|
| 403 | @@ -85,12 +85,12 @@
|
---|
| 404 | void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
|
---|
| 405 | void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
|
---|
| 406 | void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
|
---|
| 407 | - void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
|
---|
| 408 | - void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
|
---|
| 409 | - void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
|
---|
| 410 | + void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff);
|
---|
| 411 | + void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
|
---|
| 412 | + void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
|
---|
| 413 | /*}}}*/
|
---|
| 414 | - IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged);
|
---|
| 415 | - IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged);
|
---|
| 416 | + IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
|
---|
| 417 | + IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
|
---|
| 418 | };
|
---|
| 419 |
|
---|
| 420 | #endif /* _MATESTAR_H_ */
|
---|