Changeset 16811
- Timestamp:
- 11/16/13 21:34:25 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp ¶
r16782 r16811 118 118 }/*}}}*/ 119 119 ElementVector* BalancethicknessAnalysis::CreatePVector(Element* element){/*{{{*/ 120 _error_("not implemented yet"); 120 121 if(!element->IsOnBed()) return NULL; 122 Element* basalelement = element->SpawnBasalElement(); 123 124 switch(element->FiniteElement()){ 125 case P1Enum: case P2Enum: 126 return CreatePVectorCG(basalelement); 127 case P1DGEnum: 128 return CreatePVectorDG(basalelement); 129 default: 130 _error_("Element type " << EnumToStringx(element->FiniteElement()) << " not supported yet"); 131 } 132 133 }/*}}}*/ 134 ElementVector* BalancethicknessAnalysis::CreatePVectorCG(Element* element){/*{{{*/ 135 136 /*Intermediaries */ 137 IssmDouble dhdt,mb,ms,Jdet; 138 IssmDouble* xyz_list; 139 140 /*Fetch number of nodes and dof for this finite element*/ 141 int numnodes = element->GetNumberOfNodes(); 142 143 /*Initialize Element vector and other vectors*/ 144 ElementVector* pe = element->NewElementVector(); 145 IssmDouble* basis = xNew<IssmDouble>(numnodes); 146 147 /*Retrieve all inputs and parameters*/ 148 element->GetVerticesCoordinates(&xyz_list); 149 Input* mb_input = element->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 150 Input* ms_input = element->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 151 Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 152 153 /*Initialize mb_correction to 0, do not forget!:*/ 154 /* Start looping on the number of gaussian points: */ 155 Gauss* gauss=element->NewGauss(2); 156 for(int ig=gauss->begin();ig<gauss->end();ig++){ 157 gauss->GaussPoint(ig); 158 159 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 160 element->NodalFunctions(basis,gauss); 161 162 ms_input->GetInputValue(&ms,gauss); 163 mb_input->GetInputValue(&mb,gauss); 164 dhdt_input->GetInputValue(&dhdt,gauss); 165 166 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb-dhdt)*basis[i]; 167 } 168 169 /*Clean up and return*/ 170 xDelete<IssmDouble>(xyz_list); 171 xDelete<IssmDouble>(basis); 172 delete gauss; 173 return pe; 174 }/*}}}*/ 175 ElementVector* BalancethicknessAnalysis::CreatePVectorDG(Element* element){/*{{{*/ 176 177 /*Intermediaries */ 178 IssmDouble dhdt,mb,ms,Jdet; 179 IssmDouble* xyz_list; 180 181 /*Fetch number of nodes and dof for this finite element*/ 182 int numnodes = element->GetNumberOfNodes(); 183 184 /*Initialize Element vector and other vectors*/ 185 ElementVector* pe = element->NewElementVector(); 186 IssmDouble* basis = xNew<IssmDouble>(numnodes); 187 188 /*Retrieve all inputs and parameters*/ 189 element->GetVerticesCoordinates(&xyz_list); 190 Input* mb_input = element->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 191 Input* ms_input = element->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 192 Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 193 194 /*Initialize mb_correction to 0, do not forget!:*/ 195 /* Start looping on the number of gaussian points: */ 196 Gauss* gauss=element->NewGauss(2); 197 for(int ig=gauss->begin();ig<gauss->end();ig++){ 198 gauss->GaussPoint(ig); 199 200 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 201 element->NodalFunctions(basis,gauss); 202 203 ms_input->GetInputValue(&ms,gauss); 204 mb_input->GetInputValue(&mb,gauss); 205 dhdt_input->GetInputValue(&dhdt,gauss); 206 207 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb-dhdt)*basis[i]; 208 } 209 210 /*Clean up and return*/ 211 xDelete<IssmDouble>(xyz_list); 212 xDelete<IssmDouble>(basis); 213 delete gauss; 214 return pe; 121 215 }/*}}}*/ 122 216 void BalancethicknessAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ -
TabularUnified issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h ¶
r16782 r16811 23 23 ElementMatrix* CreateKMatrix(Element* element); 24 24 ElementVector* CreatePVector(Element* element); 25 ElementVector* CreatePVectorCG(Element* element); 26 ElementVector* CreatePVectorDG(Element* element); 25 27 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 26 28 void InputUpdateFromSolution(IssmDouble* solution,Element* element);
Note:
See TracChangeset
for help on using the changeset viewer.