Changeset 18192
- Timestamp:
- 06/27/14 10:27:55 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r18175 r18192 113 113 /*Assign output pointer*/ 114 114 *ptransform=transform; 115 } 116 /*}}}*/ 117 void Element::ComputeStrainRate(){/*{{{*/ 118 119 int dim; 120 IssmDouble *xyz_list = NULL; 121 IssmDouble epsilon[6]; 122 123 /*Retrieve all inputs we will be needing: */ 124 this->GetVerticesCoordinates(&xyz_list); 125 parameters->FindParam(&dim,DomainDimensionEnum); 126 Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input); 127 Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input); 128 Input* vz_input=NULL; 129 if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);} 130 131 /*Allocate arrays*/ 132 int numvertices = this->GetNumberOfVertices(); 133 IssmDouble* eps_xx = xNew<IssmDouble>(numvertices); 134 IssmDouble* eps_yy = xNew<IssmDouble>(numvertices); 135 IssmDouble* eps_zz = xNew<IssmDouble>(numvertices); 136 IssmDouble* eps_xy = xNew<IssmDouble>(numvertices); 137 IssmDouble* eps_xz = xNew<IssmDouble>(numvertices); 138 IssmDouble* eps_yz = xNew<IssmDouble>(numvertices); 139 140 /* Start looping on the number of vertices: */ 141 Gauss* gauss=this->NewGauss(); 142 for (int iv=0;iv<numvertices;iv++){ 143 gauss->GaussVertex(iv); 144 145 /*Compute strain rate viscosity and pressure: */ 146 if(dim==2) 147 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input); 148 else 149 this->StrainRateFS(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vz_input); 150 151 if(dim==2){ 152 /* epsilon=[exx,eyy,exy];*/ 153 eps_xx[iv]=epsilon[0]; 154 eps_yy[iv]=epsilon[1]; 155 eps_xy[iv]=epsilon[2]; 156 } 157 else{ 158 /*epsilon=[exx eyy ezz exy exz eyz]*/ 159 eps_xx[iv]=epsilon[0]; 160 eps_yy[iv]=epsilon[1]; 161 eps_zz[iv]=epsilon[2]; 162 eps_xy[iv]=epsilon[3]; 163 eps_xz[iv]=epsilon[4]; 164 eps_yz[iv]=epsilon[5]; 165 } 166 } 167 168 /*Add Stress tensor components into inputs*/ 169 this->AddInput(StrainRatexxEnum,eps_xx,P1Enum); 170 this->AddInput(StrainRatexyEnum,eps_xy,P1Enum); 171 this->AddInput(StrainRatexzEnum,eps_xz,P1Enum); 172 this->AddInput(StrainRateyyEnum,eps_yy,P1Enum); 173 this->AddInput(StrainRateyzEnum,eps_yz,P1Enum); 174 this->AddInput(StrainRatezzEnum,eps_zz,P1Enum); 175 176 /*Clean up and return*/ 177 delete gauss; 178 xDelete<IssmDouble>(xyz_list); 179 xDelete<IssmDouble>(eps_xx); 180 xDelete<IssmDouble>(eps_yy); 181 xDelete<IssmDouble>(eps_zz); 182 xDelete<IssmDouble>(eps_xy); 183 xDelete<IssmDouble>(eps_xz); 184 xDelete<IssmDouble>(eps_yz); 185 115 186 } 116 187 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r18135 r18192 60 60 /* bool AnyActive(void); */ 61 61 void CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array); 62 void ComputeStrainRate(); 62 63 void Echo(); 63 64 void DeepEcho(); … … 209 210 virtual void ComputeSigmaNN(void)=0; 210 211 virtual void ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0; 211 virtual void ComputeStrainRate()=0;212 virtual void ComputeStrainRate(Vector<IssmDouble>* eps)=0;213 212 virtual void ComputeStressTensor(void)=0; 214 213 virtual void ComputeDeviatoricStressTensor(void)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r18190 r18192 223 223 /*Add value to output*/ 224 224 sigma_b->SetValue(id-1,value,INS_VAL); 225 }226 /*}}}*/227 void Penta::ComputeStrainRate(){/*{{{*/228 229 IssmDouble xyz_list[NUMVERTICES][3];230 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy];*/231 IssmDouble eps_xx[NUMVERTICES];232 IssmDouble eps_yy[NUMVERTICES];233 IssmDouble eps_zz[NUMVERTICES];234 IssmDouble eps_xy[NUMVERTICES];235 IssmDouble eps_xz[NUMVERTICES];236 IssmDouble eps_yz[NUMVERTICES];237 GaussPenta* gauss=NULL;238 239 /* Get node coordinates and dof list: */240 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);241 242 /*Retrieve all inputs we will be needing: */243 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);244 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);245 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);246 247 /* Start looping on the number of vertices: */248 gauss=new GaussPenta();249 for (int iv=0;iv<NUMVERTICES;iv++){250 gauss->GaussVertex(iv);251 252 /*Compute strain rate viscosity and pressure: */253 this->StrainRateFS(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);254 255 eps_xx[iv]=epsilon[0];256 eps_yy[iv]=epsilon[1];257 eps_zz[iv]=epsilon[2];258 eps_xy[iv]=epsilon[3];259 eps_xz[iv]=epsilon[4];260 eps_yz[iv]=epsilon[5];261 }262 263 /*Add Stress tensor components into inputs*/264 this->inputs->AddInput(new PentaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));265 this->inputs->AddInput(new PentaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));266 this->inputs->AddInput(new PentaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));267 this->inputs->AddInput(new PentaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));268 this->inputs->AddInput(new PentaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));269 this->inputs->AddInput(new PentaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));270 271 /*Clean up and return*/272 delete gauss;273 225 } 274 226 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r18135 r18192 54 54 IssmDouble CharacteristicLength(void){_error_("not implemented yet");}; 55 55 void ComputeBasalStress(Vector<IssmDouble>* sigma_b); 56 void ComputeStrainRate();57 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};58 56 void ComputeSigmaNN(){_error_("not implemented yet");}; 59 57 void ComputeStressTensor(); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r18190 r18192 55 55 void ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");}; 56 56 void ComputeSigmaNN(){_error_("not implemented yet");}; 57 void ComputeStrainRate(){_error_("not implemented yet");};58 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};59 57 void ComputeStressTensor(){_error_("not implemented yet");}; 60 58 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r18139 r18192 55 55 void ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");}; 56 56 void ComputeSigmaNN(){_error_("not implemented yet");}; 57 void ComputeStrainRate(){_error_("not implemented yet");};58 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};59 57 void ComputeStressTensor(){_error_("not implemented yet");}; 60 58 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r18190 r18192 196 196 delete gauss; 197 197 } 198 }199 /*}}}*/200 void Tria::ComputeStrainRate(){/*{{{*/201 202 IssmDouble xyz_list[NUMVERTICES][3];203 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy];*/204 IssmDouble eps_xx[NUMVERTICES];205 IssmDouble eps_yy[NUMVERTICES];206 IssmDouble eps_zz[NUMVERTICES]={0,0,0};207 IssmDouble eps_xy[NUMVERTICES];208 IssmDouble eps_xz[NUMVERTICES]={0,0,0};209 IssmDouble eps_yz[NUMVERTICES]={0,0,0};210 GaussTria* gauss=NULL;211 212 /* Get node coordinates and dof list: */213 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);214 215 /*Retrieve all inputs we will be needing: */216 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);217 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);218 219 /* Start looping on the number of vertices: */220 gauss=new GaussTria();221 for (int iv=0;iv<NUMVERTICES;iv++){222 gauss->GaussVertex(iv);223 224 /*Compute strain rate viscosity and pressure: */225 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);226 227 eps_xx[iv]=epsilon[0];228 eps_yy[iv]=epsilon[1];229 eps_xy[iv]=epsilon[2];230 }231 232 /*Add Stress tensor components into inputs*/233 this->inputs->AddInput(new TriaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));234 this->inputs->AddInput(new TriaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));235 this->inputs->AddInput(new TriaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));236 this->inputs->AddInput(new TriaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));237 this->inputs->AddInput(new TriaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));238 this->inputs->AddInput(new TriaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));239 240 /*Clean up and return*/241 delete gauss;242 243 198 } 244 199 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r18135 r18192 53 53 void ComputeBasalStress(Vector<IssmDouble>* sigma_b); 54 54 void ComputeSigmaNN(); 55 void ComputeStrainRate();56 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};57 55 void ComputeStressTensor(); 58 56 void ComputeDeviatoricStressTensor();
Note:
See TracChangeset
for help on using the changeset viewer.