source:
issm/oecreview/Archive/16554-17801/ISSM-16716-16717.diff@
17802
Last change on this file since 17802 was 17802, checked in by , 11 years ago | |
---|---|
File size: 6.6 KB |
-
../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
59 59 }/*}}}*/ 60 60 void L2ProjectionBaseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 61 61 62 int inputenum ;62 int inputenum,meshtype; 63 63 64 64 element->FindParam(&inputenum,InputToL2ProjectEnum); 65 element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum); 65 element->FindParam(&meshtype,MeshTypeEnum); 66 switch(meshtype){ 67 case Mesh2DhorizontalEnum: 68 element->InputUpdateFromSolutionOneDof(solution,inputenum); 69 break; 70 case Mesh3DEnum: 71 element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum); 72 break; 73 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 74 } 66 75 }/*}}}*/ -
../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
167 167 xDelete<IssmDouble>(values); 168 168 }/*}}}*/ 169 169 void StressbalanceSIAAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 170 _error_("not implemented yet"); 170 171 int i,meshtype; 172 IssmDouble rho_ice,g; 173 int* doflist=NULL; 174 IssmDouble* xyz_list=NULL; 175 176 /*Fetch number of nodes and dof for this finite element*/ 177 int numnodes = element->GetNumberOfNodes(); 178 int numdof = numnodes*2; 179 180 /*Fetch dof list and allocate solution vectors*/ 181 element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 182 IssmDouble* values = xNew<IssmDouble>(numdof); 183 IssmDouble* vx = xNew<IssmDouble>(numdof); 184 IssmDouble* vy = xNew<IssmDouble>(numdof); 185 IssmDouble* vz = xNew<IssmDouble>(numdof); 186 IssmDouble* vel = xNew<IssmDouble>(numdof); 187 IssmDouble* pressure = xNew<IssmDouble>(numdof); 188 IssmDouble* thickness = xNew<IssmDouble>(numdof); 189 IssmDouble* surface = xNew<IssmDouble>(numnodes); 190 191 /*Use the dof list to index into the solution vector: */ 192 for(i=0;i<numdof;i++) values[i]=solution[doflist[i]]; 193 194 /*Transform solution in Cartesian Space*/ 195 element->TransformSolutionCoord(&values[0],XYEnum); 196 197 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ 198 for(i=0;i<numnodes;i++){ 199 vx[i]=values[i*NDOF2+0]; 200 vy[i]=values[i*NDOF2+1]; 201 202 /*Check solution*/ 203 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 204 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 205 } 206 207 /*Get Vz and compute vel*/ 208 element->GetInputListOnNodes(&vz[0],VzEnum,0.); 209 for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]); 210 211 /*For pressure: we have not computed pressure in this analysis, for this element. We are in 2D, 212 *so the pressure is just the pressure at the bedrock: */ 213 rho_ice = element->GetMaterialParameter(MaterialsRhoIceEnum); 214 g = element->GetMaterialParameter(ConstantsGEnum); 215 switch(meshtype){ 216 case Mesh2DhorizontalEnum: 217 element->GetInputListOnNodes(&thickness[0],ThicknessEnum); 218 for(i=0;i<numnodes;i++) pressure[i]=rho_ice*g*thickness[i]; 219 break; 220 case Mesh3DEnum: 221 element->GetVerticesCoordinates(&xyz_list); 222 element->GetInputListOnNodes(&surface[0],SurfaceEnum); 223 for(i=0;i<numnodes;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]); 224 break; 225 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 226 } 227 228 /*Now, we have to move the previous Vx and Vy inputs to old 229 * status, otherwise, we'll wipe them off: */ 230 element->InputChangeName(VxEnum,VxPicardEnum); 231 element->InputChangeName(VyEnum,VyPicardEnum); 232 element->InputChangeName(PressureEnum,PressurePicardEnum); 233 234 /*Add vx and vy as inputs to the tria element: */ 235 element->AddInput(VxEnum,vx,P1Enum); 236 element->AddInput(VyEnum,vy,P1Enum); 237 element->AddInput(VelEnum,vel,P1Enum); 238 element->AddInput(PressureEnum,pressure,P1Enum); 239 240 /*Free ressources:*/ 241 xDelete<IssmDouble>(thickness); 242 xDelete<IssmDouble>(surface); 243 xDelete<IssmDouble>(pressure); 244 xDelete<IssmDouble>(vel); 245 xDelete<IssmDouble>(vz); 246 xDelete<IssmDouble>(vy); 247 xDelete<IssmDouble>(vx); 248 xDelete<IssmDouble>(values); 249 xDelete<int>(doflist); 171 250 }/*}}}*/ -
../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
940 940 InputUpdateFromSolutionHoriz(solution,element); 941 941 return; 942 942 case L1L2ApproximationEnum: 943 //InputUpdateFromSolutionHoriz(solution,element);943 InputUpdateFromSolutionHoriz(solution,element); 944 944 return; 945 945 case SSAHOApproximationEnum: case HOFSApproximationEnum: case SSAFSApproximationEnum: 946 946 /*the elements around will create the solution*/ -
../trunk-jpl/src/c/classes/Elements/Element.h
88 88 virtual void InputDuplicate(int original_enum,int new_enum)=0; 89 89 virtual void InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0; 90 90 virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0; 91 virtual void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0; 91 92 92 93 virtual int NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0; 93 94 virtual int NumberofNodesVelocity(void)=0; -
../trunk-jpl/src/c/classes/Elements/Seg.h
55 55 /*Update virtual functions resolution: {{{*/ 56 56 void InputUpdateFromSolution(IssmDouble* solution){_error_("not implemented yet");}; 57 57 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum){_error_("not implemented yet");}; 58 void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum){_error_("not implemented yet");}; 58 59 void InputUpdateFromVector(IssmDouble* vector, int name, int type){_error_("not implemented yet");}; 59 60 #ifdef _HAVE_DAKOTA_ 60 61 void InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){_error_("not implemented yet");};
Note:
See TracBrowser
for help on using the repository browser.