Changeset 16853
- Timestamp:
- 11/21/13 11:31:43 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r16782 r16853 100 100 }/*}}}*/ 101 101 ElementVector* HydrologyDCEfficientAnalysis::CreatePVector(Element* element){/*{{{*/ 102 _error_("not implemented yet"); 102 103 /*Intermediaries*/ 104 int meshtype; 105 Element* basalelement; 106 107 /*Get basal element*/ 108 element->FindParam(&meshtype,MeshTypeEnum); 109 switch(meshtype){ 110 case Mesh2DhorizontalEnum: 111 basalelement = element; 112 break; 113 case Mesh3DEnum: 114 if(!element->IsOnBed()) return NULL; 115 basalelement = element->SpawnBasalElement(); 116 break; 117 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 118 } 119 120 /*Check that all nodes are active, else return empty matrix*/ 121 if(element->AllActive()) return NULL; 122 123 /*Intermediaries */ 124 IssmDouble dt,scalar,water_head; 125 IssmDouble transfer,residual,epl_thickness; 126 IssmDouble Jdet; 127 IssmDouble *xyz_list = NULL; 128 Input* old_wh_input = NULL; 129 130 /*Fetch number of nodes and dof for this finite element*/ 131 int numnodes = basalelement->GetNumberOfNodes(); 132 133 /*Initialize Element vector*/ 134 ElementVector* pe = basalelement->NewElementVector(); 135 IssmDouble* basis = xNew<IssmDouble>(numnodes); 136 137 /*Retrieve all inputs and parameters*/ 138 basalelement->GetVerticesCoordinates(&xyz_list); 139 IssmDouble epl_specificstoring = EplSpecificStoring(basalelement); 140 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 141 Input* residual_input = element->GetInput(SedimentHeadResidualEnum); _assert_(residual_input); 142 Input* transfer_input = element->GetInput(WaterTransferEnum); _assert_(transfer_input); 143 Input* thickness_input = element->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness_input); 144 if(dt!= 0.){old_wh_input = element->GetInput(EplHeadOldEnum); _assert_(old_wh_input);} 145 146 /* Start looping on the number of gaussian points: */ 147 Gauss* gauss=basalelement->NewGauss(2); 148 for(int ig=gauss->begin();ig<gauss->end();ig++){ 149 gauss->GaussPoint(ig); 150 151 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 152 basalelement->NodalFunctions(basis,gauss); 153 154 /*Loading term*/ 155 transfer_input->GetInputValue(&transfer,gauss); 156 scalar = Jdet*gauss->weight*(-transfer); 157 if(dt!=0.) scalar = scalar*dt; 158 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 159 160 /*Transient term*/ 161 if(dt!=0.){ 162 thickness_input->GetInputValue(&epl_thickness,gauss); 163 old_wh_input->GetInputValue(&water_head,gauss); 164 scalar = Jdet*gauss->weight*water_head*epl_specificstoring*epl_thickness; 165 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 166 } 167 } 168 169 /*Clean up and return*/ 170 xDelete<IssmDouble>(xyz_list); 171 xDelete<IssmDouble>(basis); 172 delete gauss; 173 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 174 return pe; 103 175 }/*}}}*/ 104 176 void HydrologyDCEfficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ … … 118 190 } 119 191 }/*}}}*/ 192 193 /*Intermediaries*/ 194 IssmDouble HydrologyDCEfficientAnalysis::EplSpecificStoring(Element* element){/*{{{*/ 195 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 196 IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); 197 IssmDouble epl_porosity = element->GetMaterialParameter(HydrologydcEplPorosityEnum); 198 IssmDouble epl_compressibility = element->GetMaterialParameter(HydrologydcEplCompressibilityEnum); 199 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 200 return rho_freshwater*g*epl_porosity*(water_compressibility+(epl_compressibility/epl_porosity)); 201 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
r16782 r16853 25 25 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 26 26 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 27 28 /*Intermediaries*/ 29 IssmDouble EplSpecificStoring(Element* element); 27 30 }; 28 31 #endif -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r16782 r16853 141 141 }/*}}}*/ 142 142 ElementVector* HydrologyDCInefficientAnalysis::CreatePVector(Element* element){/*{{{*/ 143 _error_("not implemented yet"); 143 144 /*Intermediaries*/ 145 int meshtype; 146 Element* basalelement; 147 148 /*Get basal element*/ 149 element->FindParam(&meshtype,MeshTypeEnum); 150 switch(meshtype){ 151 case Mesh2DhorizontalEnum: 152 basalelement = element; 153 break; 154 case Mesh3DEnum: 155 if(!element->IsOnBed()) return NULL; 156 basalelement = element->SpawnBasalElement(); 157 break; 158 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 159 } 160 161 /*Intermediaries */ 162 IssmDouble dt,scalar,water_head; 163 IssmDouble water_load,transfer; 164 IssmDouble Jdet; 165 IssmDouble *xyz_list = NULL; 166 Input* old_wh_input = NULL; 167 168 /*Fetch number of nodes and dof for this finite element*/ 169 int numnodes = basalelement->GetNumberOfNodes(); 170 171 /*Initialize Element vector*/ 172 ElementVector* pe = basalelement->NewElementVector(); 173 IssmDouble* basis = xNew<IssmDouble>(numnodes); 174 175 /*Retrieve all inputs and parameters*/ 176 basalelement->GetVerticesCoordinates(&xyz_list); 177 IssmDouble sediment_storing = SedimentStoring(basalelement); 178 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 179 Input* water_input = element->GetInput(BasalforcingsMeltingRateEnum); _assert_(water_input); 180 Input* transfer_input = element->GetInput(WaterTransferEnum); _assert_(transfer_input); 181 if(dt!= 0.){old_wh_input = element->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input);} 182 183 /* Start looping on the number of gaussian points: */ 184 Gauss* gauss=basalelement->NewGauss(2); 185 for(int ig=gauss->begin();ig<gauss->end();ig++){ 186 gauss->GaussPoint(ig); 187 188 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 189 basalelement->NodalFunctions(basis,gauss); 190 191 /*Loading term*/ 192 water_input->GetInputValue(&water_load,gauss); 193 transfer_input->GetInputValue(&transfer,gauss); 194 scalar = Jdet*gauss->weight*(water_load+transfer); 195 if(dt!=0.) scalar = scalar*dt; 196 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 197 198 /*Transient term*/ 199 if(dt!=0.){ 200 old_wh_input->GetInputValue(&water_head,gauss); 201 scalar = Jdet*gauss->weight*water_head*sediment_storing; 202 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 203 } 204 } 205 206 /*Clean up and return*/ 207 xDelete<IssmDouble>(xyz_list); 208 xDelete<IssmDouble>(basis); 209 delete gauss; 210 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 211 return pe; 144 212 }/*}}}*/ 145 213 void HydrologyDCInefficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ … … 204 272 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 205 273 }/*}}}*/ 274 275 /*Intermediaries*/ 276 IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element){/*{{{*/ 277 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); 278 IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); 279 IssmDouble sediment_porosity = element->GetMaterialParameter(HydrologydcSedimentPorosityEnum); 280 IssmDouble sediment_thickness = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum); 281 IssmDouble sediment_compressibility = element->GetMaterialParameter(HydrologydcSedimentCompressibilityEnum); 282 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 283 return rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 284 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
r16782 r16853 25 25 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 26 26 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 27 28 /*Intermediaries*/ 29 IssmDouble SedimentStoring(Element* element); 27 30 }; 28 31 #endif -
issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
r16782 r16853 86 86 }/*}}}*/ 87 87 ElementVector* HydrologyShreveAnalysis::CreatePVector(Element* element){/*{{{*/ 88 _error_("not implemented yet"); 88 89 /*Skip if water or ice shelf element*/ 90 if(element->IsFloating()) return NULL; 91 92 /*Intermediaries */ 93 IssmDouble Jdet,dt; 94 IssmDouble mb,oldw; 95 IssmDouble* xyz_list = NULL; 96 97 /*Fetch number of nodes and dof for this finite element*/ 98 int numnodes = element->GetNumberOfNodes(); 99 100 /*Initialize Element vector and other vectors*/ 101 ElementVector* pe = element->NewElementVector(); 102 IssmDouble* basis = xNew<IssmDouble>(numnodes); 103 104 /*Retrieve all inputs and parameters*/ 105 element->GetVerticesCoordinates(&xyz_list); 106 element->FindParam(&dt,TimesteppingTimeStepEnum); 107 Input* mb_input = element->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 108 Input* oldw_input = element->GetInput(WaterColumnOldEnum); _assert_(oldw); 109 110 /*Initialize mb_correction to 0, do not forget!:*/ 111 /* Start looping on the number of gaussian points: */ 112 Gauss* gauss=element->NewGauss(2); 113 for(int ig=gauss->begin();ig<gauss->end();ig++){ 114 gauss->GaussPoint(ig); 115 116 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 117 element->NodalFunctions(basis,gauss); 118 119 mb_input->GetInputValue(&mb,gauss); 120 oldw_input->GetInputValue(&oldw,gauss); 121 122 if(dt!=0.){ 123 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(oldw+dt*mb)*basis[i]; 124 } 125 else{ 126 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*mb*basis[i]; 127 } 128 } 129 130 /*Clean up and return*/ 131 xDelete<IssmDouble>(xyz_list); 132 xDelete<IssmDouble>(basis); 133 delete gauss; 134 return pe; 89 135 }/*}}}*/ 90 136 void HydrologyShreveAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
r16782 r16853 74 74 }/*}}}*/ 75 75 ElementVector* L2ProjectionEPLAnalysis::CreatePVector(Element* element){/*{{{*/ 76 _error_("not implemented yet"); 76 77 /*Intermediaries*/ 78 int meshtype; 79 Element* basalelement; 80 81 /*Get basal element*/ 82 element->FindParam(&meshtype,MeshTypeEnum); 83 switch(meshtype){ 84 case Mesh2DhorizontalEnum: 85 basalelement = element; 86 break; 87 case Mesh3DEnum: 88 if(!element->IsOnBed()) return NULL; 89 basalelement = element->SpawnBasalElement(); 90 break; 91 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 92 } 93 94 /*Intermediaries */ 95 int input_enum,index; 96 IssmDouble Jdet,slopes[2]; 97 Input *input = NULL; 98 IssmDouble *xyz_list = NULL; 99 100 /*Fetch number of nodes and dof for this finite element*/ 101 int numnodes = basalelement->GetNumberOfNodes(); 102 103 /*Initialize Element vector*/ 104 ElementVector* pe = basalelement->NewElementVector(); 105 IssmDouble* basis = xNew<IssmDouble>(numnodes); 106 107 /*Retrieve all inputs and parameters*/ 108 basalelement->GetVerticesCoordinates(&xyz_list); 109 basalelement->FindParam(&input_enum,InputToL2ProjectEnum); 110 switch(input_enum){ 111 case EplHeadSlopeXEnum: input = element->GetInput(EplHeadEnum); index = 0; _assert_(input); break; 112 case EplHeadSlopeYEnum: input = element->GetInput(EplHeadEnum); index = 1; _assert_(input); break; 113 default: _error_("not implemented"); 114 } 115 116 /* Start looping on the number of gaussian points: */ 117 Gauss* gauss=basalelement->NewGauss(2); 118 for(int ig=gauss->begin();ig<gauss->end();ig++){ 119 gauss->GaussPoint(ig); 120 121 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 122 basalelement->NodalFunctions(basis,gauss); 123 124 input->GetInputDerivativeValue(&slopes[0],xyz_list,gauss); 125 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*slopes[index]*basis[i]; 126 } 127 128 /*Clean up and return*/ 129 xDelete<IssmDouble>(xyz_list); 130 xDelete<IssmDouble>(basis); 131 delete gauss; 132 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 133 return pe; 77 134 }/*}}}*/ 78 135 void L2ProjectionEPLAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16850 r16853 37 37 virtual ~Element(){}; 38 38 39 virtual bool AllActive(void)=0; 40 virtual bool AnyActive(void)=0; 39 41 virtual IssmDouble CharacteristicLength(void)=0; 40 42 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16850 r16853 68 68 /*}}}*/ 69 69 /*Element virtual functions definitions: {{{*/ 70 bool AllActive(void){_error_("not implemented yet");}; 71 bool AnyActive(void){_error_("not implemented yet");}; 70 72 void BasalFrictionCreateInput(void); 71 73 IssmDouble CharacteristicLength(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16850 r16853 67 67 /*}}}*/ 68 68 /*Element virtual functions definitions: {{{*/ 69 bool AllActive(void){_error_("not implemented yet");}; 70 bool AnyActive(void){_error_("not implemented yet");}; 69 71 void AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented yet");}; 70 72 void AddInput(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16850 r16853 67 67 /*}}}*/ 68 68 /*Element virtual functions definitions: {{{*/ 69 bool AllActive(void); 70 bool AnyActive(void); 69 71 IssmDouble CharacteristicLength(void); 70 72 void ComputeBasalStress(Vector<IssmDouble>* sigma_b); … … 375 377 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask); 376 378 void ComputeEPLThickness(void); 377 bool AllActive(void); 378 bool AnyActive(void); 379 379 380 #endif 380 381 -
issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
r16812 r16853 254 254 case MaterialsMixedLayerCapacityEnum: return this->mixed_layer_capacity; 255 255 case MaterialsThermalExchangeVelocityEnum: return this->thermal_exchange_velocity; 256 case HydrologydcSedimentPorosityEnum: return this->sediment_porosity; 257 case HydrologydcSedimentThicknessEnum: return this->sediment_thickness; 258 case HydrologydcSedimentCompressibilityEnum:return this->sediment_compressibility; 259 case HydrologydcEplPorosityEnum: return this->epl_porosity; 260 case HydrologydcEplCompressibilityEnum: return this->epl_compressibility; 261 case HydrologydcWaterCompressibilityEnum: return this->water_compressibility; 256 262 case ConstantsGEnum: return this->g; 257 263 default: _error_("Enum "<<EnumToStringx(enum_in)<<" not supported yet");
Note:
See TracChangeset
for help on using the changeset viewer.