Changeset 16895
- Timestamp:
- 11/22/13 13:58:57 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
r16894 r16895 236 236 237 237 /*Enthalpy diffusion parameter*/ 238 IssmDouble kappa=this->EnthalpyDiffusionParameterVolume(element ); _assert_(kappa>0.);238 IssmDouble kappa=this->EnthalpyDiffusionParameterVolume(element,EnthalpyEnum); _assert_(kappa>0.); 239 239 240 240 /* Start looping on the number of gaussian points: */ … … 304 304 for(int j=0;j<numnodes;j++){ 305 305 Ke->values[i*numnodes+j]+=tau_parameter*D_scalar* 306 ((u-um)*dbasis[0* 3+i]+(v-vm)*dbasis[1*3+i]+(w-wm)*dbasis[2*3+i])*((u-um)*dbasis[0*3+j]+(v-vm)*dbasis[1*3+j]+(w-wm)*dbasis[2*3+j]);306 ((u-um)*dbasis[0*numnodes+i]+(v-vm)*dbasis[1*numnodes+i]+(w-wm)*dbasis[2*numnodes+i])*((u-um)*dbasis[0*numnodes+j]+(v-vm)*dbasis[1*numnodes+j]+(w-wm)*dbasis[2*numnodes+j]); 307 307 } 308 308 } … … 310 310 for(int i=0;i<numnodes;i++){ 311 311 for(int j=0;j<numnodes;j++){ 312 Ke->values[i*numnodes+j]+=tau_parameter*D_scalar*basis[j]*((u-um)*dbasis[0* 3+i]+(v-vm)*dbasis[1*3+i]+(w-wm)*dbasis[2*3+i]);312 Ke->values[i*numnodes+j]+=tau_parameter*D_scalar*basis[j]*((u-um)*dbasis[0*numnodes+i]+(v-vm)*dbasis[1*numnodes+i]+(w-wm)*dbasis[2*numnodes+i]); 313 313 } 314 314 } … … 410 410 IssmDouble* basis = xNew<IssmDouble>(numnodes); 411 411 IssmDouble* dbasis = xNew<IssmDouble>(3*numnodes); 412 IssmDouble* pressure = xNew<IssmDouble>(numvertices);413 IssmDouble* enthalpypicard = xNew<IssmDouble>(numvertices);414 412 415 413 /*Retrieve all inputs and parameters*/ … … 425 423 if(reCast<bool,IssmDouble>(dt)){enthalpy_input = element->GetInput(EnthalpyEnum); _assert_(enthalpy_input);} 426 424 if(stabilization==2){ 427 element->GetInputListOnVertices(enthalpypicard,EnthalpyPicardEnum);428 element->GetInputListOnVertices(pressure,PressureEnum);429 425 diameter=element->MinEdgeLength(xyz_list); 426 kappa=this->EnthalpyDiffusionParameterVolume(element,EnthalpyPicardEnum); _assert_(kappa>0.); 430 427 } 431 428 432 429 /* Start looping on the number of gaussian points: */ 433 Gauss* gauss=element->NewGauss( 3);430 Gauss* gauss=element->NewGauss(2); 434 431 for(int ig=gauss->begin();ig<gauss->end();ig++){ 435 432 gauss->GaussPoint(ig); … … 440 437 441 438 scalar_def=phi/rho_ice*Jdet*gauss->weight; 442 if( reCast<bool,IssmDouble>(dt)) scalar_def=scalar_def*dt;439 if(dt!=0.) scalar_def=scalar_def*dt; 443 440 444 441 /*TODO: add -beta*laplace T_m(p)*/ … … 458 455 vy_input->GetInputValue(&v,gauss); 459 456 vz_input->GetInputValue(&w,gauss); 460 kappa = element->EnthalpyDiffusionParameterVolume(numvertices,enthalpypicard,pressure) / rho_ice;461 tau_parameter = element->StabilizationParameter(u,v,w,diameter,kappa); 462 463 for(int i=0;i<numnodes;i++) pe->values[i]+=tau_parameter*scalar_def*(u*dbasis[0*3+i]+v*dbasis[1*3+i]+w*dbasis[2*3+i]); 464 if( reCast<bool,IssmDouble>(dt)){465 for(int i=0;i<numnodes;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*dbasis[0* 3+i]+v*dbasis[1*3+i]+w*dbasis[2*3+i]);457 tau_parameter=element->StabilizationParameter(u,v,w,diameter,kappa/rho_ice); 458 459 for(int i=0;i<numnodes;i++) pe->values[i]+=tau_parameter*scalar_def*(u*dbasis[0*numnodes+i]+v*dbasis[1*numnodes+i]+w*dbasis[2*numnodes+i]); 460 461 if(dt!=0.){ 462 for(int i=0;i<numnodes;i++) pe->values[i]+=tau_parameter*scalar_transient*(u*dbasis[0*numnodes+i]+v*dbasis[1*numnodes+i]+w*dbasis[2*numnodes+i]); 466 463 } 467 464 } … … 471 468 xDelete<IssmDouble>(basis); 472 469 xDelete<IssmDouble>(dbasis); 473 xDelete<IssmDouble>(pressure);474 xDelete<IssmDouble>(enthalpypicard);475 470 xDelete<IssmDouble>(xyz_list); 476 471 delete gauss; … … 798 793 } 799 794 }/*}}}*/ 800 IssmDouble EnthalpyAnalysis::EnthalpyDiffusionParameterVolume(Element* element ){/*{{{*/795 IssmDouble EnthalpyAnalysis::EnthalpyDiffusionParameterVolume(Element* element,int enthalpy_enum){/*{{{*/ 801 796 802 797 int iv; … … 813 808 IssmDouble* dHpmp = xNew<IssmDouble>(numvertices); 814 809 element->GetInputListOnVertices(pressures,PressureEnum); 815 element->GetInputListOnVertices(enthalpies, EnthalpyEnum);810 element->GetInputListOnVertices(enthalpies,enthalpy_enum); 816 811 for(iv=0;iv<numvertices;iv++){ 817 812 PIE[iv] = PureIceEnthalpy(element,pressures[iv]); -
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
r16888 r16895 36 36 /*Intermediaries*/ 37 37 IssmDouble EnthalpyDiffusionParameter(Element* element,IssmDouble enthalpy,IssmDouble pressure); 38 IssmDouble EnthalpyDiffusionParameterVolume(Element* element );38 IssmDouble EnthalpyDiffusionParameterVolume(Element* element,int enthalpy_enum); 39 39 IssmDouble PureIceEnthalpy(Element* element,IssmDouble pressure); 40 40 IssmDouble TMeltingPoint(Element* element,IssmDouble pressure);
Note:
See TracChangeset
for help on using the changeset viewer.