Changeset 17540
- Timestamp:
- 03/25/14 13:42:51 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r17539 r17540 234 234 iomodel->FetchDataToInput(elements,PressureEnum,0.); 235 235 if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum); 236 if(finiteelement==XTaylorHoodEnum) this->InitializeXTH(elements);237 236 } 238 237 if(islevelset){ … … 821 820 } 822 821 }/*}}}*/ 823 void StressbalanceAnalysis::InitializeXTH(Elements* elements){/*{{{*/824 825 /*Intermediaries*/826 int meshtype,dim;827 IssmDouble dvx[3],dvy[3],dvz[3];828 IssmDouble viscosity;829 IssmDouble *xyz_list = NULL;830 831 for(int i=0;i<elements->Size();i++){832 Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));833 834 /*Get problem dimension*/835 element->FindParam(&meshtype,MeshTypeEnum);836 switch(meshtype){837 case Mesh2DverticalEnum: dim = 2; break;838 case Mesh3DEnum: dim = 3; break;839 case Mesh3DtetrasEnum: dim = 3; break;840 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet");841 }842 843 int tnumnodes = element->GetNumberOfVertices(); //Tensors, P1 DG844 845 /*Get inputs and parameters*/846 element->GetVerticesCoordinates(&xyz_list);847 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);848 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);849 Input* vz_input;850 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}851 852 /*Get d and tau*/853 Gauss* gauss = element->NewGauss();854 for(int i=0;i<tnumnodes;i++){855 gauss->GaussNode(P1DGEnum,i);856 857 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);858 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);859 if(dim==3){860 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss);861 }862 863 _error_("STOP");864 element->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input);865 }866 867 /*Clean up*/868 xDelete<IssmDouble>(xyz_list);869 }870 871 }/*}}}*/872 822 873 823 /*Finite Element Analysis*/ … … 4109 4059 xDelete<IssmDouble>(vvalues); 4110 4060 }/*}}}*/ 4061 void StressbalanceAnalysis::InitializeXTH(Elements* elements,Parameters* parameters){/*{{{*/ 4062 4063 /*Intermediaries*/ 4064 int meshtype,dim; 4065 IssmDouble dvx[3],dvy[3],dvz[3]; 4066 IssmDouble viscosity; 4067 IssmDouble *xyz_list = NULL; 4068 4069 /*Get problem dimension*/ 4070 parameters->FindParam(&meshtype,MeshTypeEnum); 4071 switch(meshtype){ 4072 case Mesh2DverticalEnum: dim = 2; break; 4073 case Mesh3DEnum: dim = 3; break; 4074 case Mesh3DtetrasEnum: dim = 3; break; 4075 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 4076 } 4077 4078 for(int i=0;i<elements->Size();i++){ 4079 Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i)); 4080 4081 /*Get inputs and parameters*/ 4082 element->GetVerticesCoordinates(&xyz_list); 4083 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input); 4084 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input); 4085 Input* vz_input; 4086 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);} 4087 4088 /*Allocate new inputs*/ 4089 int tnumnodes = element->GetNumberOfVertices(); //Tensors, P1 DG 4090 IssmDouble* epsxx = xNew<IssmDouble>(tnumnodes); IssmDouble* sigmapxx = xNew<IssmDouble>(tnumnodes); 4091 IssmDouble* epsyy = xNew<IssmDouble>(tnumnodes); IssmDouble* sigmapyy = xNew<IssmDouble>(tnumnodes); 4092 IssmDouble* epsxy = xNew<IssmDouble>(tnumnodes); IssmDouble* sigmapxy = xNew<IssmDouble>(tnumnodes); 4093 IssmDouble* epszz = NULL; IssmDouble* sigmapzz = NULL; 4094 IssmDouble* epsxz = NULL; IssmDouble* sigmapxz = NULL; 4095 IssmDouble* epsyz = NULL; IssmDouble* sigmapyz = NULL; 4096 if(dim==3){ 4097 epszz = xNew<IssmDouble>(tnumnodes); sigmapzz = xNew<IssmDouble>(tnumnodes); 4098 epsxz = xNew<IssmDouble>(tnumnodes); sigmapxz = xNew<IssmDouble>(tnumnodes); 4099 epsyz = xNew<IssmDouble>(tnumnodes); sigmapyz = xNew<IssmDouble>(tnumnodes); 4100 } 4101 4102 /*Get d and tau*/ 4103 Gauss* gauss = element->NewGauss(); 4104 for(int i=0;i<tnumnodes;i++){ 4105 gauss->GaussNode(P1DGEnum,i); 4106 4107 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4108 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 4109 if(dim==3){ 4110 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss); 4111 } 4112 4113 element->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input); 4114 epsxx[i] = dvx[0]; sigmapxx[i] = 2.*viscosity*epsxx[i]; 4115 epsyy[i] = dvy[1]; sigmapyy[i] = 2.*viscosity*epsyy[i]; 4116 epsxy[i] = 0.5*(dvx[1] + dvy[0]); sigmapxy[i] = 2.*viscosity*epsxy[i]; 4117 if(dim==3){ 4118 epszz[i] = dvz[2]; sigmapzz[i] = 2.*viscosity*epszz[i]; 4119 epsxz[i] = 0.5*(dvx[2] + dvz[0]); sigmapxz[i] = 2.*viscosity*epsxz[i]; 4120 epsyz[i] = 0.5*(dvy[2] + dvz[1]); sigmapyz[i] = 2.*viscosity*epsyz[i]; 4121 } 4122 } 4123 4124 /*Add inputs*/ 4125 element->AddInput(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput(DeviatoricStressxxEnum,sigmapxx,P1DGEnum); 4126 element->AddInput(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput(DeviatoricStressyyEnum,sigmapyy,P1DGEnum); 4127 element->AddInput(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput(DeviatoricStressxyEnum,sigmapxy,P1DGEnum); 4128 if(dim==3){ 4129 element->AddInput(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput(DeviatoricStresszzEnum,sigmapzz,P1DGEnum); 4130 element->AddInput(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput(DeviatoricStressxzEnum,sigmapxz,P1DGEnum); 4131 element->AddInput(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput(DeviatoricStressyzEnum,sigmapyz,P1DGEnum); 4132 } 4133 4134 /*Clean up*/ 4135 xDelete<IssmDouble>(xyz_list); 4136 xDelete<IssmDouble>(epsxx); 4137 xDelete<IssmDouble>(epsyy); 4138 xDelete<IssmDouble>(epszz); 4139 xDelete<IssmDouble>(epsxy); 4140 xDelete<IssmDouble>(epsxz); 4141 xDelete<IssmDouble>(epsyz); 4142 } 4143 4144 }/*}}}*/ 4111 4145 void StressbalanceAnalysis::InputUpdateFromSolutionFS(IssmDouble* solution,Element* element){/*{{{*/ 4112 4146 -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r17539 r17540 19 19 void CreateConstraints(Constraints* constraints,IoModel* iomodel); 20 20 void CreateLoads(Loads* loads, IoModel* iomodel); 21 void InitializeXTH(Elements* elements);22 21 23 22 /*Finite element Analysis*/ … … 82 81 void GetSolutionFromInputsFS(Vector<IssmDouble>* solution,Element* element); 83 82 void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element); 83 void InitializeXTH(Elements* elements,Parameters* parameters); 84 84 /*Coupling*/ 85 85 ElementMatrix* CreateKMatrixSSA3d(Element* element); -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
r17536 r17540 246 246 this->element_type = TaylorHoodEnum; 247 247 return; 248 case XTaylorHoodEnum: 249 this->element_type = P2Enum; 250 this->GetNodalFunctions(basis,gauss); 251 this->element_type = XTaylorHoodEnum; 252 return; 248 253 default: 249 254 _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet"); … … 280 285 this->GetNodalFunctions(basis,gauss); 281 286 this->element_type = TaylorHoodEnum; 287 return; 288 case XTaylorHoodEnum: 289 this->element_type = P1Enum; 290 this->GetNodalFunctions(basis,gauss); 291 this->element_type = XTaylorHoodEnum; 282 292 return; 283 293 default: … … 439 449 this->element_type = P2Enum; 440 450 this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss); 441 this->element_type = TaylorHoodEnum;451 this->element_type = XTaylorHoodEnum; 442 452 return; 443 453 default: -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_la_theta.cpp
r17525 r17540 20 20 int configuration_type; 21 21 22 /*Create analysis*/ 23 StressbalanceAnalysis* analysis = new StressbalanceAnalysis(); 24 22 25 /*Recover parameters: */ 23 26 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 27 28 /*Update constraints and initialize d and tau if necessary*/ 24 29 femmodel->UpdateConstraintsx(); 30 analysis->InitializeXTH(femmodel->elements,femmodel->parameters); 31 32 /*Solve KU=F*/ 25 33 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 26 _error_("STOP");27 34 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 28 35 Reduceloadx(pf, Kfs, ys); delete Kfs; … … 30 37 delete Kff; delete pf; delete df; 31 38 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys; 39 40 /*Update solution*/ 32 41 InputUpdateFromSolutionx(femmodel,ug); 42 43 /*Update d and tau accordingly*/ 44 _error_("STOP"); 45 33 46 delete ug; 47 delete analysis; 34 48 }
Note:
See TracChangeset
for help on using the changeset viewer.