source:
issm/oecreview/Archive/16554-17801/ISSM-16637-16638.diff@
17802
Last change on this file since 17802 was 17802, checked in by , 11 years ago | |
---|---|
File size: 34.1 KB |
-
../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
56 56 iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum); 57 57 iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum); 58 58 iomodel->FetchDataToInput(elements,EplHeadEnum); 59 iomodel->FetchDataToInput(elements,HydrologydcEplThicknessEnum); 60 59 61 }/*}}}*/ 60 62 void HydrologyDCEfficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ 61 63 -
../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
113 113 HydrologydcEplCompressibilityEnum, 114 114 HydrologydcEplPorosityEnum, 115 115 HydrologydcEplThicknessEnum, 116 HydrologydcEplTransmitivityEnum, 116 HydrologydcEplThicknessOldEnum, 117 HydrologydcEplConductivityEnum, 117 118 HydrologydcIsefficientlayerEnum, 118 119 HydrologydcSedimentlimitFlagEnum, 119 120 HydrologydcSedimentlimitEnum, -
../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
121 121 case HydrologydcEplCompressibilityEnum : return "HydrologydcEplCompressibility"; 122 122 case HydrologydcEplPorosityEnum : return "HydrologydcEplPorosity"; 123 123 case HydrologydcEplThicknessEnum : return "HydrologydcEplThickness"; 124 case HydrologydcEplTransmitivityEnum : return "HydrologydcEplTransmitivity"; 124 case HydrologydcEplThicknessOldEnum : return "HydrologydcEplThicknessOld"; 125 case HydrologydcEplConductivityEnum : return "HydrologydcEplConductivity"; 125 126 case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer"; 126 127 case HydrologydcSedimentlimitFlagEnum : return "HydrologydcSedimentlimitFlag"; 127 128 case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit"; -
../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
121 121 else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum; 122 122 else if (strcmp(name,"HydrologydcEplPorosity")==0) return HydrologydcEplPorosityEnum; 123 123 else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum; 124 else if (strcmp(name,"HydrologydcEplTransmitivity")==0) return HydrologydcEplTransmitivityEnum; 124 else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum; 125 else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum; 125 126 else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum; 126 127 else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum; 127 128 else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum; … … 135 136 else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum; 136 137 else if (strcmp(name,"WaterTransfer")==0) return WaterTransferEnum; 137 138 else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum; 138 else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum; 142 if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum; 143 else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum; 143 144 else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum; 144 145 else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum; 145 146 else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum; … … 258 259 else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum; 259 260 else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum; 260 261 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 261 else if (strcmp(name,"Surface")==0) return SurfaceEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum; 265 if (strcmp(name,"Surface")==0) return SurfaceEnum; 266 else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum; 266 267 else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum; 267 268 else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum; 268 269 else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum; … … 381 382 else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum; 382 383 else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum; 383 384 else if (strcmp(name,"Element")==0) return ElementEnum; 384 else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"FileParam")==0) return FileParamEnum; 388 if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum; 389 else if (strcmp(name,"FileParam")==0) return FileParamEnum; 389 390 else if (strcmp(name,"Input")==0) return InputEnum; 390 391 else if (strcmp(name,"IntInput")==0) return IntInputEnum; 391 392 else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum; … … 504 505 else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum; 505 506 else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum; 506 507 else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum; 507 else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; 511 if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum; 512 else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; 512 513 else if (strcmp(name,"StressTensor")==0) return StressTensorEnum; 513 514 else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum; 514 515 else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; -
../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
8 8 #include "../../toolkits/toolkits.h" 9 9 10 10 void InputDuplicatex(FemModel* femmodel,int original_enum, int new_enum){ 11 12 11 /*Go through elemnets, and ask to reinitialie the input: */ 13 12 for(int i=0;i<femmodel->elements->Size();i++){ 14 13 Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); -
../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
128 128 femmodel->HydrologyEPLupdateDomainx(); 129 129 femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum); 130 130 131 /*Reset constraint on the ZigZag Lock*/ 132 ResetConstraintsx(femmodel); 131 133 /*Iteration on the EPL layer*/ 132 134 eplconverged = false; 133 135 for(;;){ 136 femmodel->HydrologyEPLThicknessx(); 134 137 femmodel->HydrologyTransferx(); 135 138 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 136 139 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum); -
../trunk-jpl/src/c/cores/hydrology_core.cpp
83 83 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 84 84 if (isefficientlayer){ 85 85 InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum); 86 InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum); 86 87 } 87 88 88 89 /*Proceed now to heads computations*/ … … 91 92 if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){ 92 93 if(VerboseSolution()) _printf0_(" saving results \n"); 93 94 if(isefficientlayer){ 94 int outputs[ 6] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum};95 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0], 6);95 int outputs[7] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum}; 96 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],7); 96 97 } 97 98 else{ 98 99 int outputs[2] = {SedimentHeadEnum,SedimentHeadResidualEnum}; -
../trunk-jpl/src/c/classes/Materials/Matice.cpp
144 144 return pow(B,-n); 145 145 } 146 146 /*}}}*/ 147 /*FUNCTION Matice::GetAbar {{{*/ 148 IssmDouble Matice::GetAbar(){ 149 /* 150 * A = 1/B^n 151 */ 152 153 IssmDouble B,n; 154 155 inputs->GetInputAverage(&B,MaterialsRheologyBbarEnum); 156 n=this->GetN(); 157 158 return pow(B,-n); 159 } 160 /*}}}*/ 147 161 /*FUNCTION Matice::GetB {{{*/ 148 162 IssmDouble Matice::GetB(){ 149 163 -
../trunk-jpl/src/c/classes/Materials/Material.h
35 35 virtual void GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0; 36 36 virtual void GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0; 37 37 virtual IssmDouble GetA()=0; 38 virtual IssmDouble GetAbar()=0; 38 39 virtual IssmDouble GetB()=0; 39 40 virtual IssmDouble GetBbar()=0; 40 41 virtual IssmDouble GetN()=0; -
../trunk-jpl/src/c/classes/Materials/Matpar.cpp
65 65 if(isefficientlayer){ 66 66 iomodel->Constant(&this->epl_compressibility,HydrologydcEplCompressibilityEnum); 67 67 iomodel->Constant(&this->epl_porosity,HydrologydcEplPorosityEnum); 68 iomodel->Constant(&this->epl_thickness,HydrologydcEplThicknessEnum); 69 iomodel->Constant(&this->epl_transmitivity,HydrologydcEplTransmitivityEnum); 68 iomodel->Constant(&this->epl_conductivity,HydrologydcEplConductivityEnum); 70 69 } 71 70 } 72 71 else{ … … 353 352 ( this->water_compressibility+( this->sediment_compressibility/ this->sediment_porosity)); 354 353 } 355 354 /*}}}*/ 356 /*FUNCTION Matpar::GetEplS toring {{{*/357 IssmDouble Matpar::GetEplS toring(){358 return this->rho_freshwater* this->g* this->epl_porosity* this->epl_thickness*355 /*FUNCTION Matpar::GetEplSpecificStoring {{{*/ 356 IssmDouble Matpar::GetEplSpecificStoring(){ 357 return this->rho_freshwater* this->g* this->epl_porosity* 359 358 ( this->water_compressibility+( this->epl_compressibility/ this->epl_porosity)); 360 359 } 361 360 /*}}}*/ … … 368 367 IssmDouble Matpar::GetSedimentThickness(){ 369 368 return sediment_thickness; 370 369 } 371 /*}}}*/ 372 /*FUNCTION Matpar::GetEpl Transitivity {{{*/373 IssmDouble Matpar::GetEpl Transmitivity(){374 return epl_ transmitivity;370 /*}}}*/ 371 /*FUNCTION Matpar::GetEplConductivity {{{*/ 372 IssmDouble Matpar::GetEplConductivity(){ 373 return epl_conductivity; 375 374 } 376 375 /*}}}*/ 377 376 /*FUNCTION Matpar::TMeltingPoint {{{*/ -
../trunk-jpl/src/c/classes/Materials/Matice.h
62 62 void GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon); 63 63 void GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon); 64 64 IssmDouble GetA(); 65 IssmDouble GetAbar(); 65 66 IssmDouble GetB(); 66 67 IssmDouble GetBbar(); 67 68 IssmDouble GetD(); -
../trunk-jpl/src/c/classes/Materials/Matpar.h
48 48 49 49 IssmDouble epl_compressibility; 50 50 IssmDouble epl_porosity; 51 IssmDouble epl_thickness; 52 IssmDouble epl_transmitivity; 51 IssmDouble epl_conductivity; 53 52 54 53 /*gia: */ 55 54 IssmDouble lithosphere_shear_modulus; … … 93 92 void GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");}; 94 93 void GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");}; 95 94 IssmDouble GetA(){_error_("not supported");}; 95 IssmDouble GetAbar(){_error_("not supported");}; 96 96 IssmDouble GetB(){_error_("not supported");}; 97 97 IssmDouble GetBbar(){_error_("not supported");}; 98 98 IssmDouble GetN(){_error_("not supported");}; … … 120 120 IssmDouble GetHydrologyCR(); 121 121 IssmDouble GetHydrologyN(); 122 122 IssmDouble GetSedimentStoring(); 123 IssmDouble GetEplS toring();123 IssmDouble GetEplSpecificStoring(); 124 124 IssmDouble GetSedimentTransmitivity(); 125 125 IssmDouble GetSedimentThickness(); 126 IssmDouble GetEpl Transmitivity();126 IssmDouble GetEplConductivity(); 127 127 IssmDouble TMeltingPoint(IssmDouble pressure); 128 128 IssmDouble PureIceEnthalpy(IssmDouble pressure); 129 129 IssmDouble GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure); -
../trunk-jpl/src/c/classes/Elements/Tria.cpp
1577 1577 void Tria::InputDuplicate(int original_enum,int new_enum){ 1578 1578 1579 1579 /*Call inputs method*/ 1580 if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum); 1581 1580 if (IsInput(original_enum)) { 1581 inputs->DuplicateInput(original_enum,new_enum); 1582 } 1582 1583 } 1583 1584 /*}}}*/ 1584 1585 /*FUNCTION Tria::InputScale{{{*/ … … 2096 2097 name==SedimentHeadEnum || 2097 2098 name==EplHeadOldEnum || 2098 2099 name==EplHeadEnum || 2100 name==HydrologydcEplThicknessOldEnum || 2101 name==HydrologydcEplThicknessEnum || 2099 2102 name==HydrologydcMaskEplactiveEnum || 2100 2103 name==MeshVertexonbedEnum || 2101 2104 name==WaterTransferEnum || … … 2454 2457 this->ComputeStressTensor(); 2455 2458 input=this->inputs->GetInput(output_enum); 2456 2459 break; 2457 case SurfaceNormalVelocityEnum:2458 this->ComputeSurfaceNormalVelocity();2459 input=this->inputs->GetInput(output_enum);2460 break;2461 2460 default: 2462 2461 _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 2463 2462 } … … 2489 2488 for(int i=0;i<NUMVERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]); 2490 2489 2491 2490 vector->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL); 2492 2493 /*FIXME: Inputs needs to be updated first in Tria::ResultInterpolation, this is a hack*/2494 this->inputs->DeleteInput(SurfaceNormalVelocityEnum);2495 2491 break; 2496 2492 } 2497 2493 default: … … 2650 2646 *(surface_normal+2) = normal[2]/normal_norm; 2651 2647 } 2652 2648 /*}}}*/ 2653 /*FUNCTION Tria::ComputeSurfaceNormalVelocity{{{*/2654 void Tria::ComputeSurfaceNormalVelocity(){2655 2656 IssmDouble sum,tangential_vector[2],normal_vector[2],time,ux,uy;2657 IssmDouble normal_velocity[NUMVERTICES],xyz_list[NUMVERTICES][3];2658 IssmDouble value[NUMVERTICES],verticesonsurface[NUMVERTICES];2659 2660 for(int iv=0;iv<NUMVERTICES;iv++){2661 normal_velocity[iv]=0.;2662 value[iv]=0.;2663 }2664 2665 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);2666 2667 GaussTria* gauss=new GaussTria();2668 Input* slope_input=inputs->GetInput(SurfaceSlopeXEnum); _assert_(slope_input);2669 // Input* slope_input= inputs->GetInput(SurfaceEnum); _assert_(slope_input);2670 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);2671 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);2672 2673 2674 /*Get list of nodes on surface*/2675 GetInputListOnVertices(&verticesonsurface[0],MeshVertexonsurfaceEnum);2676 sum = verticesonsurface[0]+verticesonsurface[1]+verticesonsurface[2];2677 _assert_(sum==0. || sum==1. || sum==2.);2678 2679 /*Compute normal velocity for surface nodes from L2 projected slope*/2680 for(int iv=0;iv<NUMVERTICES;iv++){2681 if(verticesonsurface[iv] == 1){2682 gauss->GaussNode(P1Enum,iv);2683 slope_input->GetInputValue(&value[iv],gauss);2684 // slope_input->GetInputDerivativeValue(&value[iv],&xyz_list[0][0],gauss);2685 vx_input->GetInputValue(&ux,gauss);2686 vy_input->GetInputValue(&uy,gauss);2687 tangential_vector[0]=sqrt(1./(pow(value[iv],2.)+1.));2688 tangential_vector[1]=value[iv]*tangential_vector[0];2689 normal_vector[0]=-1.*tangential_vector[1];2690 normal_vector[1]=tangential_vector[0];2691 normal_velocity[iv]=ux*normal_vector[0]+uy*normal_vector[1];2692 }2693 }2694 2695 delete gauss;2696 this->inputs->AddInput(new TriaInput(SurfaceNormalVelocityEnum,&normal_velocity[0],P1Enum));2697 2698 }2699 /*}}}*/2700 2649 /*FUNCTION Tria::TimeAdapt{{{*/ 2701 2650 IssmDouble Tria::TimeAdapt(void){ 2702 2651 … … 3277 3226 /*Now get the average SMB over the element*/ 3278 3227 Input* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input); 3279 3228 smb_input->GetInputAverage(&smb); // average smb on element in m ice s-1 3280 3229 Total_Smb=rho_ice*base*smb; // smb on element in kg s-1 3281 3230 3282 3231 /*Return: */ 3283 3232 return Total_Smb; … … 6733 6682 ElementMatrix* Tria::CreateKMatrixHydrologyDCEfficient(void){ 6734 6683 6735 6684 /* Intermediaries */ 6736 IssmDouble D_scalar,Jdet; 6737 IssmDouble epl_transmitivity,dt; 6738 IssmDouble epl_storing; 6685 IssmDouble D_scalar,Jdet,dt; 6686 IssmDouble epl_thickness; 6687 IssmDouble epl_conductivity; 6688 IssmDouble epl_specificstoring; 6739 6689 IssmDouble xyz_list[NUMVERTICES][3]; 6740 6690 6741 6691 /*Check that all nodes are active, else return empty matrix*/ … … 6754 6704 6755 6705 /*Retrieve all inputs and parameters*/ 6756 6706 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6707 Input* thickness_input=inputs->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness); 6757 6708 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6758 epl_s toring = matpar->GetEplStoring();6759 epl_ transmitivity = matpar->GetEplTransmitivity();6709 epl_specificstoring = matpar->GetEplSpecificStoring(); 6710 epl_conductivity = matpar->GetEplConductivity(); 6760 6711 6712 6761 6713 /* Start looping on the number of gaussian points: */ 6762 6714 GaussTria* gauss=new GaussTria(2); 6763 6715 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6764 6716 6717 6765 6718 gauss->GaussPoint(ig); 6766 6719 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6720 thickness_input->GetInputValue(&epl_thickness,gauss); 6767 6721 6768 6722 /*Diffusivity*/ 6769 D_scalar=epl_ transmitivity*gauss->weight*Jdet;6723 D_scalar=epl_conductivity*epl_thickness*gauss->weight*Jdet; 6770 6724 if(reCast<bool,IssmDouble>(dt)) D_scalar=D_scalar*dt; 6771 6725 D[0][0]=D_scalar; D[0][1]=0.; 6772 6726 D[1][0]=0.; D[1][1]=D_scalar; … … 6779 6733 /*Transient*/ 6780 6734 if(reCast<bool,IssmDouble>(dt)){ 6781 6735 GetNodalFunctions(basis,gauss); 6782 D_scalar=epl_s toring*gauss->weight*Jdet;6736 D_scalar=epl_specificstoring*epl_thickness*gauss->weight*Jdet; 6783 6737 6784 6738 TripleMultiply(basis,numnodes,1,0, 6785 6739 &D_scalar,1,1,0, … … 6915 6869 IssmDouble xyz_list[NUMVERTICES][3]; 6916 6870 IssmDouble dt,scalar,water_head; 6917 6871 IssmDouble transfer,residual; 6918 IssmDouble epl_storing; 6872 IssmDouble epl_thickness; 6873 IssmDouble epl_specificstoring; 6919 6874 GaussTria* gauss = NULL; 6920 6875 6921 6876 /*Check that all nodes are active, else return empty matrix*/ … … 6931 6886 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6932 6887 6933 6888 /*Retrieve all inputs and parameters*/ 6934 epl_s toring = matpar->GetEplStoring();6889 epl_specificstoring = matpar->GetEplSpecificStoring(); 6935 6890 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6936 6891 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6937 Input* residual_input=inputs->GetInput(SedimentHeadResidualEnum); _assert_(residual_input); 6938 Input* transfer_input=inputs->GetInput(WaterTransferEnum); _assert_(transfer_input); 6892 Input* residual_input=inputs->GetInput(SedimentHeadResidualEnum); _assert_(residual_input); 6893 Input* transfer_input=inputs->GetInput(WaterTransferEnum); _assert_(transfer_input); 6894 Input* thickness_input=inputs->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness_input); 6939 6895 Input* old_wh_input=NULL; 6940 6896 6941 6897 if(reCast<bool,IssmDouble>(dt)){ … … 6958 6914 6959 6915 /*Transient term*/ 6960 6916 if(reCast<bool,IssmDouble>(dt)){ 6917 thickness_input->GetInputValue(&epl_thickness,gauss); 6961 6918 old_wh_input->GetInputValue(&water_head,gauss); 6962 scalar = Jdet*gauss->weight*water_head*epl_s toring;6919 scalar = Jdet*gauss->weight*water_head*epl_specificstoring*epl_thickness; 6963 6920 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 6964 6921 } 6965 6922 } … … 7141 7098 IssmDouble sed_trans,sed_thick; 7142 7099 IssmDouble leakage,h_max; 7143 7100 IssmDouble wh_trans; 7144 IssmDouble activeEpl[numdof] ;7145 IssmDouble epl storing[numdof],sedstoring[numdof];7101 IssmDouble activeEpl[numdof],epl_thickness[numdof]; 7102 IssmDouble epl_specificstoring[numdof],sedstoring[numdof]; 7146 7103 IssmDouble epl_head[numdof],sed_head[numdof]; 7147 7104 7148 7105 GetDofList(&doflist,NoneApproximationEnum,GsetEnum); … … 7164 7121 GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum); 7165 7122 GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); 7166 7123 GetInputListOnVertices(&epl_head[0],EplHeadEnum); 7124 GetInputListOnVertices(&epl_thickness[0],HydrologydcEplThicknessEnum); 7167 7125 7168 7126 this->parameters->FindParam(&leakage,HydrologydcLeakageFactorEnum); 7169 7127 … … 7176 7134 wh_trans=0.0; 7177 7135 } 7178 7136 else{ 7179 epl storing[i]=matpar->GetEplStoring();7137 epl_specificstoring[i]=matpar->GetEplSpecificStoring(); 7180 7138 sedstoring[i]=matpar->GetSedimentStoring(); 7181 7139 7182 7140 /*EPL head higher than sediment head, transfer from the epl to the sediment*/ 7183 7141 if(epl_head[i]>sed_head[i]){ 7184 wh_trans=epl storing[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);7142 wh_trans=epl_specificstoring[i]*epl_thickness[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick); 7185 7143 7186 7144 /*No transfer if the sediment head is allready at the maximum*/ 7187 7145 this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]); … … 7245 7203 GetInputListOnVertices(&eplhead[0],EplHeadEnum); 7246 7204 GetInputListOnVertices(&residual[0],SedimentHeadResidualEnum); 7247 7205 7248 /*Get minimum sediment head */7206 /*Get minimum sediment head of the element*/ 7249 7207 sedheadmin=sedhead[0]; 7250 7208 for(i=1;i<numdof;i++) if(sedhead[i]<=sedheadmin)sedheadmin=sedhead[i]; 7251 7209 … … 7279 7237 /*}}}*/ 7280 7238 /*FUNCTION Tria::ComputeEPLThickness{{{*/ 7281 7239 void Tria::ComputeEPLThickness(void){ 7240 7241 int i; 7242 const int numdof = NDOF1 *NUMVERTICES; 7243 bool isefficientlayer; 7244 IssmDouble n,A,dt; 7245 IssmDouble rho_water,rho_ice; 7246 IssmDouble gravity,latentheat,EPLgrad; 7247 IssmDouble EPL_N,epl_conductivity; 7248 IssmDouble activeEpl[numdof],thickness[numdof]; 7249 IssmDouble eplhead[numdof], old_thickness[numdof]; 7250 IssmDouble epl_slopeX[numdof],epl_slopeY[numdof]; 7251 IssmDouble ice_thickness[numdof],bed[numdof]; 7252 7253 7254 /*Get the flag to know if the efficient layer is present*/ 7255 this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 7256 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 7257 7258 if(isefficientlayer){ 7259 /*For now, assuming just one way to compute EPL thickness*/ 7260 rho_water = matpar->GetRhoWater(); 7261 rho_ice = matpar->GetRhoIce(); 7262 gravity = matpar->GetG(); 7263 latentheat = matpar->GetLatentHeat(); 7264 n = material->GetN(); 7265 A = material->GetAbar(); 7266 7267 GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum); 7268 GetInputListOnVertices(&eplhead[0],EplHeadEnum); 7269 GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); 7270 GetInputListOnVertices(&epl_slopeY[0],EplHeadSlopeYEnum); 7271 GetInputListOnVertices(&old_thickness[0],HydrologydcEplThicknessOldEnum); 7272 GetInputListOnVertices(&ice_thickness[0],ThicknessEnum); 7273 GetInputListOnVertices(&bed[0],BedEnum); 7274 7275 epl_conductivity = matpar->GetEplConductivity(); 7276 7277 for(int i=0;i<numdof;i++){ 7278 /*Keeping thickness to 1 if EPL is not active*/ 7279 if(activeEpl[i]==0.0){ 7280 thickness[i]=1.0; 7281 } 7282 else{ 7283 7284 /*Compute first the effective pressure in the EPL*/ 7285 EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i]))); 7286 7287 /*Get then the gradient of EPL heads*/ 7288 EPLgrad = epl_slopeX[i]+epl_slopeY[i]; 7289 7290 /*And proceed to the real thing*/ 7291 thickness[i] = old_thickness[i]*(1-((rho_water*gravity*dt)/(rho_ice*latentheat))*epl_conductivity*pow(EPLgrad,2.0)-2.0*(A*dt/(pow(n,n)))*EPL_N); 7292 7293 } 7294 } 7295 this->inputs->AddInput(new TriaInput(HydrologydcEplThicknessEnum,thickness,P1Enum)); 7296 } 7282 7297 } 7283 7298 /*}}}*/ 7284 7299 -
../trunk-jpl/src/c/classes/Elements/Penta.cpp
2644 2644 name==EplHeadEnum || 2645 2645 name==SedimentHeadOldEnum || 2646 2646 name==EplHeadOldEnum || 2647 name==HydrologydcEplThicknessOldEnum || 2648 name==HydrologydcEplThicknessEnum || 2647 2649 name==HydrologydcMaskEplactiveEnum || 2648 2650 name==WaterTransferEnum 2649 2651 … … 2870 2872 2871 2873 switch(input->GetResultInterpolation()){ 2872 2874 case P0Enum: 2873 _error_(" not implemented...");2875 _error_("P0 not implemented yet for input "<<EnumToStringx(output_enum)); 2874 2876 break; 2875 2877 case P1Enum:{ 2876 2878 IssmDouble values[NUMVERTICES]; … … 10841 10843 /*FUNCTION Penta::ComputeEPLThickness{{{*/ 10842 10844 void Penta::ComputeEPLThickness(void){ 10843 10845 10846 int i; 10847 const int numdof = NDOF1 *NUMVERTICES; 10848 const int numdof2d = NDOF1 *NUMVERTICES2D; 10849 bool isefficientlayer; 10850 IssmDouble n,A,dt; 10851 IssmDouble rho_water,rho_ice; 10852 IssmDouble gravity,latentheat,EPLgrad; 10853 IssmDouble EPL_N,epl_conductivity; 10854 IssmDouble activeEpl[numdof],thickness[numdof]; 10855 IssmDouble eplhead[numdof], old_thickness[numdof]; 10856 IssmDouble epl_slopeX[numdof],epl_slopeY[numdof]; 10857 IssmDouble ice_thickness[numdof],bed[numdof]; 10858 Penta *penta = NULL; 10859 /*If not on bed, return*/ 10844 10860 if (!IsOnBed())return; 10845 10861 10846 Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.10847 t ria->ComputeEPLThickness();10848 delete tria->material; delete tria;10862 /*Get the flag to know if the efficient layer is present*/ 10863 this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 10864 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 10849 10865 10866 if(isefficientlayer){ 10867 /*For now, assuming just one way to compute EPL thickness*/ 10868 rho_water = matpar->GetRhoWater(); 10869 rho_ice = matpar->GetRhoIce(); 10870 gravity = matpar->GetG(); 10871 latentheat = matpar->GetLatentHeat(); 10872 epl_conductivity = matpar->GetEplConductivity(); 10873 n = material->GetN(); 10874 A = material->GetA(); 10875 10876 10877 GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum); 10878 GetInputListOnVertices(&eplhead[0],EplHeadEnum); 10879 GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); 10880 GetInputListOnVertices(&epl_slopeY[0],EplHeadSlopeYEnum); 10881 GetInputListOnVertices(&old_thickness[0],HydrologydcEplThicknessOldEnum); 10882 GetInputListOnVertices(&ice_thickness[0],ThicknessEnum); 10883 GetInputListOnVertices(&bed[0],BedEnum); 10884 10885 for(int i=0;i<numdof2d;i++){ 10886 /*Keeping thickness to 1 if EPL is not active*/ 10887 if(activeEpl[i]==0.0){ 10888 thickness[i]=1.0; 10889 thickness[i+numdof2d]=thickness[i]; 10890 } 10891 else{ 10892 10893 /*Compute first the effective pressure in the EPL*/ 10894 EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i]))); 10895 10896 /*Get then the gradient of EPL heads*/ 10897 EPLgrad = epl_slopeX[i]+epl_slopeY[i]; 10898 10899 /*And proceed to the real thing*/ 10900 thickness[i] = old_thickness[i]*(1-((rho_water*gravity*dt)/(rho_ice* latentheat))*epl_conductivity*pow(EPLgrad,2.0)-2.0*(A*dt/(pow(n,n)))*EPL_N); 10901 thickness[i+numdof2d]=thickness[i]; 10902 } 10903 } 10904 penta=this; 10905 for(;;){ 10906 10907 /*Add input to the element: */ 10908 penta->inputs->AddInput(new PentaInput(HydrologydcEplThicknessEnum,thickness,P1Enum)); 10909 10910 /*Stop if we have reached the surface*/ 10911 if (penta->IsOnSurface()) break; 10912 10913 /* get upper Penta*/ 10914 penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id); 10915 } 10916 } 10850 10917 } 10851 10918 /*}}}*/ 10852 10919 /*FUNCTION Penta::InputUpdateFromSolutionHydrologyDCInefficient{{{*/ -
../trunk-jpl/src/m/classes/hydrologydc.m
26 26 epl_compressibility = 0; 27 27 epl_porosity = 0; 28 28 epl_thickness = 0; 29 epl_ transmitivity= 0;29 epl_conductivity = 0; 30 30 end 31 31 methods 32 32 % {{{ function obj = hydrologydc(varargin) … … 60 60 obj.epl_compressibility = 1.0e-08; 61 61 obj.epl_porosity = 0.4; 62 62 obj.epl_thickness = 1.0; 63 obj.epl_ transmitivity= 8.0e-02;63 obj.epl_conductivity = 8.0e-02; 64 64 65 65 end 66 66 % }}} … … 96 96 md = checkfield(md,'hydrology.epl_compressibility','>',0,'numel',1); 97 97 md = checkfield(md,'hydrology.epl_porosity','>',0,'numel',1); 98 98 md = checkfield(md,'hydrology.epl_thickness','>',0,'numel',1); 99 md = checkfield(md,'hydrology.epl_ transmitivity','>',0,'numel',1);99 md = checkfield(md,'hydrology.epl_conductivity','>',0,'numel',1); 100 100 end 101 101 end 102 102 % }}} … … 136 136 fielddisplay(obj,'mask_eplactive','active (1) or not (0) EPL'); 137 137 fielddisplay(obj,'epl_compressibility','epl compressibility [Pa^-1]'); 138 138 fielddisplay(obj,'epl_porosity','epl [dimensionless]'); 139 fielddisplay(obj,'epl_thickness','epl thickness [m]');140 fielddisplay(obj,'epl_ transmitivity','epl transmitivity [m^2/s]');139 fielddisplay(obj,'epl_thickness','epl initial thickness [m]'); 140 fielddisplay(obj,'epl_conductivity','epl conductivity [m^2/s]'); 141 141 end 142 142 143 143 end … … 171 171 WriteData(fid,'object',obj,'fieldname','epl_compressibility','format','Double'); 172 172 WriteData(fid,'object',obj,'fieldname','epl_porosity','format','Double'); 173 173 WriteData(fid,'object',obj,'fieldname','epl_thickness','format','Double'); 174 WriteData(fid,'object',obj,'fieldname','epl_transmitivity','format','Double'); 174 %WriteData(fid,'object',obj,'fieldname','epl_transmitivity','format','Double'); 175 WriteData(fid,'object',obj,'fieldname','epl_conductivity','format','Double'); 175 176 end 176 177 end 177 178 % }}} -
../trunk-jpl/src/m/enum/HydrologydcEplConductivityEnum.m
1 function macro=HydrologydcEplConductivityEnum() 2 %HYDROLOGYDCEPLCONDUCTIVITYENUM - Enum of HydrologydcEplConductivity 3 % 4 % WARNING: DO NOT MODIFY THIS FILE 5 % this file has been automatically generated by src/c/shared/Enum/Synchronize.sh 6 % Please read src/c/shared/Enum/README for more information 7 % 8 % Usage: 9 % macro=HydrologydcEplConductivityEnum() 10 11 macro=StringToEnum('HydrologydcEplConductivity'); -
../trunk-jpl/src/m/enum/EnumDefinitions.py
113 113 def HydrologydcEplCompressibilityEnum(): return StringToEnum("HydrologydcEplCompressibility")[0] 114 114 def HydrologydcEplPorosityEnum(): return StringToEnum("HydrologydcEplPorosity")[0] 115 115 def HydrologydcEplThicknessEnum(): return StringToEnum("HydrologydcEplThickness")[0] 116 def HydrologydcEplTransmitivityEnum(): return StringToEnum("HydrologydcEplTransmitivity")[0] 116 def HydrologydcEplThicknessOldEnum(): return StringToEnum("HydrologydcEplThicknessOld")[0] 117 def HydrologydcEplConductivityEnum(): return StringToEnum("HydrologydcEplConductivity")[0] 117 118 def HydrologydcIsefficientlayerEnum(): return StringToEnum("HydrologydcIsefficientlayer")[0] 118 119 def HydrologydcSedimentlimitFlagEnum(): return StringToEnum("HydrologydcSedimentlimitFlag")[0] 119 120 def HydrologydcSedimentlimitEnum(): return StringToEnum("HydrologydcSedimentlimit")[0] -
../trunk-jpl/src/m/enum/HydrologydcEplThicknessOldEnum.m
1 function macro=HydrologydcEplThicknessOldEnum() 2 %HYDROLOGYDCEPLTHICKNESSOLDENUM - Enum of HydrologydcEplThicknessOld 3 % 4 % WARNING: DO NOT MODIFY THIS FILE 5 % this file has been automatically generated by src/c/shared/Enum/Synchronize.sh 6 % Please read src/c/shared/Enum/README for more information 7 % 8 % Usage: 9 % macro=HydrologydcEplThicknessOldEnum() 10 11 macro=StringToEnum('HydrologydcEplThicknessOld');
Note:
See TracBrowser
for help on using the repository browser.