Changeset 21381
- Timestamp:
- 11/16/16 18:58:41 (8 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r21265 r21381 48 48 IssmDouble vx,vy,vz,vmag; 49 49 IssmDouble dvx[3],dvy[3],dvz[3],dvmag[3]; 50 IssmDouble eps o,epsprime;50 IssmDouble epseff,epsprime; 51 51 int dim; 52 52 IssmDouble *xyz_list = NULL; … … 101 101 dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]); 102 102 } 103 EstarStrainrateQuantities(&eps o,&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]);104 lambdas[iv]=EstarLambdaS(eps o,epsprime);103 EstarStrainrateQuantities(&epseff,&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]); 104 lambdas[iv]=EstarLambdaS(epseff,epsprime); 105 105 } 106 106 … … 1514 1514 name==MaterialsRheologyBbarEnum || 1515 1515 name==MaterialsRheologyNEnum || 1516 name==MaterialsRheologyKoEnum ||1517 name==MaterialsRheologyKobarEnum ||1518 1516 name==MaterialsRheologyEcEnum || 1519 1517 name==MaterialsRheologyEcbarEnum || -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r21206 r21381 2289 2289 break; 2290 2290 case MatestarEnum: 2291 this->InputDepthAverageAtBase(MaterialsRheology KoEnum,MaterialsRheologyKobarEnum);2291 this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 2292 2292 this->InputDepthAverageAtBase(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum); 2293 2293 this->InputDepthAverageAtBase(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum); -
issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp
r21112 r21381 134 134 /*}}}*/ 135 135 IssmDouble Matestar::GetA(){/*{{{*/ 136 _error_("not implemented yet"); 136 /* 137 * A = 1/B^n 138 */ 139 140 IssmDouble B,n; 141 142 element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum); 143 n=this->GetN(); 144 145 return pow(B,-n); 137 146 } 138 147 /*}}}*/ 139 148 IssmDouble Matestar::GetAbar(){/*{{{*/ 140 _error_("not implemented yet"); 149 /* 150 * A = 1/B^n 151 */ 152 153 IssmDouble B,n; 154 155 element->inputs->GetInputAverage(&B,MaterialsRheologyBbarEnum); 156 n=this->GetN(); 157 158 return pow(B,-n); 141 159 } 142 160 /*}}}*/ 143 161 IssmDouble Matestar::GetB(){/*{{{*/ 144 _error_("not implemented yet"); 162 /*Output*/ 163 IssmDouble B; 164 165 element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum); 166 return B; 145 167 } 146 168 /*}}}*/ 147 169 IssmDouble Matestar::GetBbar(){/*{{{*/ 148 149 _error_("not implemented yet"); 170 /*Output*/ 171 IssmDouble Bbar; 172 173 element->inputs->GetInputAverage(&Bbar,MaterialsRheologyBbarEnum); 174 return Bbar; 150 175 } 151 176 /*}}}*/ … … 159 184 } 160 185 /*}}}*/ 186 IssmDouble Matestar::GetEc(){/*{{{*/ 187 188 /*Output*/ 189 IssmDouble Ec; 190 191 element->inputs->GetInputAverage(&Ec,MaterialsRheologyEcEnum); 192 return Ec; 193 } 194 /*}}}*/ 195 IssmDouble Matestar::GetEs(){/*{{{*/ 196 197 /*Output*/ 198 IssmDouble Es; 199 200 element->inputs->GetInputAverage(&Es,MaterialsRheologyEsEnum); 201 return Es; 202 } 203 /*}}}*/ 161 204 IssmDouble Matestar::GetN(){/*{{{*/ 162 _error_("not implemented yet");205 return 3.; 163 206 } 164 207 /*}}}*/ … … 228 271 } 229 272 /*}}}*/ 230 IssmDouble Matestar::GetViscosityGeneral(IssmDouble ko,IssmDouble Ec, IssmDouble Es,IssmDoublevx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz){/*{{{*/273 IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz){/*{{{*/ 231 274 232 275 /*Intermediaries*/ 233 276 IssmDouble viscosity; 234 IssmDouble E,lambdas;235 IssmDouble epso,epsprime_norm;277 IssmDouble epseff,epsprime_norm; 278 IssmDouble lambdas; 236 279 IssmDouble vmag,dvmag[3]; 280 IssmDouble B,Ec,Es,E; 237 281 238 282 /*Calculate velocity magnitude and its derivative*/ … … 249 293 } 250 294 251 EstarStrainrateQuantities(&epso,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]); 252 lambdas=EstarLambdaS(epso,epsprime_norm); 295 EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]); 296 lambdas=EstarLambdaS(epseff,epsprime_norm); 297 298 /*Get B and enhancement*/ 299 B=GetB(); _assert_(B>0.); 300 Ec=GetEc(); _assert_(Ec>=0.); 301 Es=GetEs(); _assert_(Es>=0.); 253 302 254 303 /*Get total enhancement factor E(lambdas)*/ 255 E = Ec + (Es-Ec)*lambdas*lambdas; 304 E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.); 256 305 257 306 /*Compute viscosity*/ 258 _assert_(E>0.); 259 _assert_(ko>0.); 260 _assert_(epso>0.); 261 viscosity = 1./(2*pow(ko*E*epso*epso,1./3.)); 307 /*if no strain rate, return maximum viscosity*/ 308 if(epseff==0.){ 309 viscosity = 1.e+14/2.; 310 //viscosity = B; 311 //viscosity=2.5*pow(10.,17); 312 } 313 else{ 314 viscosity = B/(2.*pow(E*epseff*epseff,1./3.)); 315 } 262 316 263 317 /*Assign output pointer*/ … … 324 378 IssmDouble vx,vy,vz; 325 379 IssmDouble dvx[3],dvy[3],dvz[3]; 326 IssmDouble ko,Ec,Es;380 IssmDouble B,Ec,Es; 327 381 328 382 /*Get velocity derivatives in all directions*/ … … 344 398 } 345 399 346 /*Get enhancement factors and ko*/347 Input* ec_input = element->inputs->GetInput(MaterialsRheologyEcEnum); _assert_(ec_input);348 Input* es_input = element->inputs->GetInput(MaterialsRheologyEsEnum); _assert_(es_input);349 Input* ko_input = element->inputs->GetInput(MaterialsRheologyKoEnum); _assert_(ko_input);350 ec_input->GetInputValue(&Ec,gauss);351 es_input->GetInputValue(&Es,gauss);352 ko_input->GetInputValue(&ko,gauss);353 354 400 /*Compute viscosity*/ 355 *pviscosity=GetViscosityGeneral( ko,Ec,Es,vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]);401 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]); 356 402 } 357 403 /*}}}*/ … … 364 410 IssmDouble vx,vy,vz; 365 411 IssmDouble dvx[3],dvy[3],dvz[3]; 366 IssmDouble ko,Ec,Es;367 412 368 413 /*Get velocity derivatives in all directions*/ … … 384 429 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 385 430 386 /*Get enhancement factors and ko*/387 Input* ec_input = element->inputs->GetInput(MaterialsRheologyEcEnum); _assert_(ec_input);388 Input* es_input = element->inputs->GetInput(MaterialsRheologyEsEnum); _assert_(es_input);389 Input* ko_input = element->inputs->GetInput(MaterialsRheologyKoEnum); _assert_(ko_input);390 ec_input->GetInputValue(&Ec,gauss);391 es_input->GetInputValue(&Es,gauss);392 ko_input->GetInputValue(&ko,gauss);393 394 431 /*Compute viscosity*/ 395 *pviscosity=GetViscosityGeneral( ko,Ec,Es,vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]);432 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]); 396 433 }/*}}}*/ 397 434 void Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/ … … 405 442 IssmDouble vx,vy,vz; 406 443 IssmDouble dvx[3],dvy[3],dvz[3]; 407 IssmDouble ko,Ec,Es;444 IssmDouble B,Ec,Es; 408 445 409 446 /*Get velocity derivatives in all directions*/ … … 428 465 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 429 466 430 /*Get enhancement factors and ko*/431 Input* ec_input = element->inputs->GetInput(MaterialsRheologyEcbarEnum); _assert_(ec_input);432 Input* es_input = element->inputs->GetInput(MaterialsRheologyEsbarEnum); _assert_(es_input);433 Input* ko_input = element->inputs->GetInput(MaterialsRheologyKobarEnum); _assert_(ko_input);434 ec_input->GetInputValue(&Ec,gauss);435 es_input->GetInputValue(&Es,gauss);436 ko_input->GetInputValue(&ko,gauss);437 438 467 /*Compute viscosity*/ 439 *pviscosity=GetViscosityGeneral( ko,Ec,Es,vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]);468 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0]); 440 469 }/*}}}*/ 441 470 void Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/ -
issm/trunk-jpl/src/c/classes/Materials/Matestar.h
r20945 r21381 69 69 IssmDouble GetD(); 70 70 IssmDouble GetDbar(); 71 IssmDouble GetEc(); 72 IssmDouble GetEs(); 71 73 IssmDouble GetN(); 72 74 bool IsDamage(); … … 82 84 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 83 85 /*}}}*/ 84 IssmDouble GetViscosityGeneral(IssmDouble ko,IssmDouble Ec, IssmDouble Es,IssmDoublevx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz);86 IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz); 85 87 }; 86 88 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r20690 r21381 80 80 break; 81 81 case MatestarEnum: 82 iomodel->FetchDataToInput(elements,"md.materials.rheology_ ko",MaterialsRheologyKoEnum);82 iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 83 83 iomodel->FetchDataToInput(elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum); 84 84 iomodel->FetchDataToInput(elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum); … … 86 86 switch(iomodel->domaindim){ 87 87 case 2: 88 elements->InputDuplicate(MaterialsRheology KoEnum,MaterialsRheologyKobarEnum);88 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 89 89 elements->InputDuplicate(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum); 90 90 elements->InputDuplicate(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum); -
issm/trunk-jpl/src/c/shared/Elements/EstarComponents.cpp
r20945 r21381 3 3 #include "../Exceptions/exceptions.h" 4 4 #include "./elements.h" 5 void EstarStrainrateQuantities(IssmDouble *peps o, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/5 void EstarStrainrateQuantities(IssmDouble *pepseff, 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 8 IssmDouble omega[3]; 9 9 IssmDouble nrsp[3],nrsp_norm; 10 IssmDouble eps[3][3],eps o;10 IssmDouble eps[3][3],epseff; 11 11 IssmDouble epsprime[3],epsprime_norm; 12 12 … … 24 24 nrsp[0] = 0.; 25 25 nrsp[1] = 0.; 26 nrsp[2] = 1.;26 nrsp[2] = 0.; 27 27 } 28 28 else{ … … 37 37 eps[2][0] = .5*(dvx[2]+dvz[0]); eps[2][1] = .5*(dvy[2]+dvz[1]); eps[2][2] = dvz[2]; 38 38 39 /*octahedral strain rate*/ 40 epso = 0.; 41 for(int i=0;i<3;i++) for(int j=0;j<3;j++) epso += eps[i][j]*eps[i][j]; 42 if(epso==0.) epso=1.e-14; 43 epso=sqrt(epso)/sqrt(3.); 39 /*effective strain rate*/ 40 epseff = 0.; 41 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */ 42 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]); 44 43 45 /*Compute the shear strain rate on the non r atating shear plane*/44 /*Compute the shear strain rate on the non rotating shear plane*/ 46 45 epsprime[0]=0.; 47 46 epsprime[1]=0.; … … 74 73 75 74 /*Assign output pointers*/ 76 *peps o=epso;75 *pepseff=epseff; 77 76 *pepsprime_norm=epsprime_norm; 78 77 }/*}}}*/ … … 114 113 omega[0] = 0.; 115 114 omega[1] = 0.; 116 omega[2] = 1.;115 omega[2] = 0.; 117 116 } 118 117 else{ … … 123 122 124 123 }/*}}}*/ 125 IssmDouble EstarLambdaS(IssmDouble epso, IssmDouble epsprime_norm){/*{{{*/ 126 _assert_(epso>0.); 124 IssmDouble EstarLambdaS(IssmDouble epseff, IssmDouble epsprime_norm){/*{{{*/ 125 IssmDouble lambdas; 126 127 127 _assert_(epsprime_norm>=0.); 128 return sqrt(2*epsprime_norm*epsprime_norm/(3*epso*epso)); 128 if(epseff==0.){ 129 lambdas=0.; 130 } 131 else{ 132 lambdas=sqrt(epsprime_norm*epsprime_norm/(epseff*epseff)); 133 } 134 return lambdas; 129 135 }/*}}}*/ -
issm/trunk-jpl/src/c/shared/Elements/elements.h
r20687 r21381 15 15 IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure, IssmDouble n, IssmDouble betaCC, IssmDouble referencetemperature, IssmDouble heatcapacity, IssmDouble latentheat); 16 16 // IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n); 17 IssmDouble EstarLambdaS(IssmDouble eps o, IssmDouble epsprime_norm);17 IssmDouble EstarLambdaS(IssmDouble epseff, IssmDouble epsprime_norm); 18 18 void EstarOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag); 19 void EstarStrainrateQuantities(IssmDouble *peps o, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag);19 void EstarStrainrateQuantities(IssmDouble *pepseff, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag); 20 20 IssmDouble PddSurfaceMassBalance(IssmDouble* monthlytemperatures, IssmDouble* monthlyprec, 21 21 IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, IssmDouble signorm, -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r21344 r21381 214 214 MaterialsRheologyLawEnum, 215 215 MaterialsRheologyNEnum, 216 MaterialsRheologyKoEnum,217 MaterialsRheologyKobarEnum,218 216 MaterialsRheologyEcEnum, 219 217 MaterialsRheologyEcbarEnum, -
issm/trunk-jpl/src/m/classes/matestar.m
r21377 r21381 18 18 mixed_layer_capacity = 0.; 19 19 thermal_exchange_velocity = 0.; 20 rheology_ ko= NaN;20 rheology_B = NaN; 21 21 rheology_Ec = NaN; 22 22 rheology_Es = NaN; … … 35 35 methods 36 36 function self = extrude(self,md) % {{{ 37 self.rheology_ ko=project3d(md,'vector',self.rheology_ko,'type','node');37 self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); 38 38 self.rheology_Ec=project3d(md,'vector',self.rheology_Ec,'type','node'); 39 39 self.rheology_Es=project3d(md,'vector',self.rheology_Es,'type','node'); … … 58 58 self.rheology_Es = ones(size(inputstruct.rheology_B)); 59 59 self.rheology_Ec = ones(size(inputstruct.rheology_B)); 60 self.rheology_ ko = inputstruct.rheology_B.^(-3)*3/2;60 self.rheology_B = inputstruct.rheology_B; 61 61 end 62 62 otherwise … … 121 121 md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); 122 122 md = checkfield(md,'fieldname','materials.mu_water','>',0); 123 md = checkfield(md,'fieldname','materials.rheology_ ko','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);123 md = checkfield(md,'fieldname','materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); 124 124 md = checkfield(md,'fieldname','materials.rheology_Ec','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); 125 125 md = checkfield(md,'fieldname','materials.rheology_Es','>',0,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1); … … 152 152 fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]'); 153 153 fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]'); 154 fielddisplay(self,'rheology_ ko','octahedral flow law parameter [s^-1 Pa^-2]');154 fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/3)]'); 155 155 fielddisplay(self,'rheology_Ec','compressive enhancement factor'); 156 156 fielddisplay(self,'rheology_Es','shear enhancement factor'); … … 176 176 WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); 177 177 WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); 178 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_ ko','format','DoubleMat','mattype',1);178 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1); 179 179 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1); 180 180 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1); … … 202 202 writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity); 203 203 writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity); 204 writejs1Darray(fid,[modelname '.materials.rheology_ ko'],self.rheology_ko);204 writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B); 205 205 writejs1Darray(fid,[modelname '.materials.rheology_Ec'],self.rheology_Ec); 206 206 writejs1Darray(fid,[modelname '.materials.rheology_Es'],self.rheology_Es);
Note:
See TracChangeset
for help on using the changeset viewer.