Changeset 17680
- Timestamp:
- 04/08/14 17:20:10 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
r17674 r17680 430 430 IssmDouble s_xx,s_xy,s_yy,s1,s2,stmp; 431 431 IssmDouble J2s,Chi,Psi,PosPsi,NegPsi; 432 IssmDouble damage, sigma_xx,sigma_xy,sigma_yy;432 IssmDouble damage,tau_xx,tau_xy,tau_yy; 433 433 int equivstress; 434 434 … … 445 445 446 446 /*Compute stress tensor: */ 447 element->Compute StressTensor();447 element->ComputeDeviatoricStressTensor(); 448 448 449 449 /*retrieve what we need: */ 450 Input* sigma_xx_input = element->GetInput(StressTensorxxEnum); _assert_(sigma_xx_input);451 Input* sigma_xy_input = element->GetInput(StressTensorxyEnum); _assert_(sigma_xy_input);452 Input* sigma_yy_input = element->GetInput(StressTensoryyEnum); _assert_(sigma_yy_input);450 Input* tau_xx_input = element->GetInput(DeviatoricStressxxEnum); _assert_(tau_xx_input); 451 Input* tau_xy_input = element->GetInput(DeviatoricStressxyEnum); _assert_(tau_xy_input); 452 Input* tau_yy_input = element->GetInput(DeviatoricStressyyEnum); _assert_(tau_yy_input); 453 453 Input* damage_input = element->GetInput(DamageDEnum); _assert_(damage_input); 454 454 … … 462 462 463 463 damage_input->GetInputValue(&damage,gauss); 464 sigma_xx_input->GetInputValue(&sigma_xx,gauss);465 sigma_xy_input->GetInputValue(&sigma_xy,gauss);466 sigma_yy_input->GetInputValue(&sigma_yy,gauss);464 tau_xx_input->GetInputValue(&tau_xx,gauss); 465 tau_xy_input->GetInputValue(&tau_xy,gauss); 466 tau_yy_input->GetInputValue(&tau_yy,gauss); 467 467 468 468 /*Calculate effective stress components*/ 469 s_xx= sigma_xx/(1.-damage);470 s_xy= sigma_xy/(1.-damage);471 s_yy= sigma_yy/(1.-damage);469 s_xx=tau_xx/(1.-damage); 470 s_xy=tau_xy/(1.-damage); 471 s_yy=tau_yy/(1.-damage); 472 472 473 473 /*Calculate principal effective stresses*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r17671 r17680 203 203 virtual void ComputeStrainRate(Vector<IssmDouble>* eps)=0; 204 204 virtual void ComputeStressTensor(void)=0; 205 virtual void ComputeDeviatoricStressTensor(void)=0; 205 206 206 207 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r17671 r17680 332 332 this->inputs->AddInput(new PentaInput(StressTensoryzEnum,&sigma_yz[0],P1Enum)); 333 333 this->inputs->AddInput(new PentaInput(StressTensorzzEnum,&sigma_zz[0],P1Enum)); 334 335 /*Clean up and return*/ 336 delete gauss; 337 } 338 /*}}}*/ 339 /*FUNCTION Penta::ComputeDeviatoricStressTensor {{{*/ 340 void Penta::ComputeDeviatoricStressTensor(){ 341 342 IssmDouble xyz_list[NUMVERTICES][3]; 343 IssmDouble viscosity; 344 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy];*/ 345 IssmDouble tau_xx[NUMVERTICES]; 346 IssmDouble tau_yy[NUMVERTICES]; 347 IssmDouble tau_zz[NUMVERTICES]; 348 IssmDouble tau_xy[NUMVERTICES]; 349 IssmDouble tau_xz[NUMVERTICES]; 350 IssmDouble tau_yz[NUMVERTICES]; 351 GaussPenta* gauss=NULL; 352 353 /* Get node coordinates and dof list: */ 354 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 355 356 /*Retrieve all inputs we will be needing: */ 357 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 358 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 359 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 360 361 /* Start looping on the number of vertices: */ 362 gauss=new GaussPenta(); 363 for (int iv=0;iv<NUMVERTICES;iv++){ 364 gauss->GaussVertex(iv); 365 366 /*Compute strain rate viscosity and pressure: */ 367 this->StrainRateFS(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 368 this->ViscosityFS(&viscosity,3,&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 369 370 /*Compute Stress*/ 371 tau_xx[iv]=2*viscosity*epsilon[0]; // tau = nu eps 372 tau_yy[iv]=2*viscosity*epsilon[1]; 373 tau_zz[iv]=2*viscosity*epsilon[2]; 374 tau_xy[iv]=2*viscosity*epsilon[3]; 375 tau_xz[iv]=2*viscosity*epsilon[4]; 376 tau_yz[iv]=2*viscosity*epsilon[5]; 377 } 378 379 /*Add Stress tensor components into inputs*/ 380 this->inputs->AddInput(new PentaInput(StressTensorxxEnum,&tau_xx[0],P1Enum)); 381 this->inputs->AddInput(new PentaInput(StressTensorxyEnum,&tau_xy[0],P1Enum)); 382 this->inputs->AddInput(new PentaInput(StressTensorxzEnum,&tau_xz[0],P1Enum)); 383 this->inputs->AddInput(new PentaInput(StressTensoryyEnum,&tau_yy[0],P1Enum)); 384 this->inputs->AddInput(new PentaInput(StressTensoryzEnum,&tau_yz[0],P1Enum)); 385 this->inputs->AddInput(new PentaInput(StressTensorzzEnum,&tau_zz[0],P1Enum)); 334 386 335 387 /*Clean up and return*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r17671 r17680 57 57 void ComputeStrainRate(Vector<IssmDouble>* eps); 58 58 void ComputeStressTensor(); 59 void ComputeDeviatoricStressTensor(); 59 60 void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters); 60 61 void ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r17671 r17680 56 56 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");}; 57 57 void ComputeStressTensor(){_error_("not implemented yet");}; 58 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; 58 59 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");}; 59 60 void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r17671 r17680 56 56 void ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");}; 57 57 void ComputeStressTensor(){_error_("not implemented yet");}; 58 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; 58 59 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters); 59 60 void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r17674 r17680 165 165 IssmDouble sigma_yz[NUMVERTICES]={0,0,0}; 166 166 GaussTria* gauss=NULL; 167 int dim=2;167 int meshtype,dim=2; 168 168 169 169 /* Get node coordinates and dof list: */ … … 171 171 172 172 /*Retrieve all inputs we will be needing: */ 173 this->FindParam(&meshtype,MeshTypeEnum); 174 if(meshtype==Mesh2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(meshtype)<<", extrude mesh or call ComputeDeviatoricStressTensor"); 173 175 Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input); 174 176 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); … … 198 200 this->inputs->AddInput(new TriaInput(StressTensoryzEnum,&sigma_yz[0],P1Enum)); 199 201 this->inputs->AddInput(new TriaInput(StressTensorzzEnum,&sigma_zz[0],P1Enum)); 202 203 /*Clean up and return*/ 204 delete gauss; 205 } 206 /*}}}*/ 207 /*FUNCTION Tria::ComputeDeviatoricStressTensor {{{*/ 208 void Tria::ComputeDeviatoricStressTensor(){ 209 210 IssmDouble xyz_list[NUMVERTICES][3]; 211 IssmDouble viscosity; 212 IssmDouble epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 213 IssmDouble tau_xx[NUMVERTICES]; 214 IssmDouble tau_yy[NUMVERTICES]; 215 IssmDouble tau_zz[NUMVERTICES]={0,0,0}; 216 IssmDouble tau_xy[NUMVERTICES]; 217 IssmDouble tau_xz[NUMVERTICES]={0,0,0}; 218 IssmDouble tau_yz[NUMVERTICES]={0,0,0}; 219 GaussTria* gauss=NULL; 220 int meshtype,dim=2; 221 222 /* Get node coordinates and dof list: */ 223 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 224 225 /*Retrieve all inputs we will be needing: */ 226 this->FindParam(&meshtype,MeshTypeEnum); 227 if(meshtype!=Mesh2DhorizontalEnum) _error_("deviatoric stress tensor calculation not implemented for mesh of type " <<EnumToStringx(meshtype)); 228 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 229 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 230 231 /* Start looping on the number of vertices: */ 232 gauss=new GaussTria(); 233 for (int iv=0;iv<NUMVERTICES;iv++){ 234 gauss->GaussVertex(iv); 235 236 /*Compute strain rate and viscosity: */ 237 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 238 this->ViscositySSA(&viscosity,dim,&xyz_list[0][0],gauss,vx_input,vy_input); 239 240 /*Compute Stress*/ 241 tau_xx[iv]=2*viscosity*epsilon[0]; // tau = nu eps 242 tau_yy[iv]=2*viscosity*epsilon[1]; 243 tau_xy[iv]=2*viscosity*epsilon[2]; 244 } 245 246 /*Add Stress tensor components into inputs*/ 247 this->inputs->AddInput(new TriaInput(DeviatoricStressxxEnum,&tau_xx[0],P1Enum)); 248 this->inputs->AddInput(new TriaInput(DeviatoricStressxyEnum,&tau_xy[0],P1Enum)); 249 this->inputs->AddInput(new TriaInput(DeviatoricStressxzEnum,&tau_xz[0],P1Enum)); 250 this->inputs->AddInput(new TriaInput(DeviatoricStressyyEnum,&tau_yy[0],P1Enum)); 251 this->inputs->AddInput(new TriaInput(DeviatoricStressyzEnum,&tau_yz[0],P1Enum)); 252 this->inputs->AddInput(new TriaInput(DeviatoricStresszzEnum,&tau_zz[0],P1Enum)); 200 253 201 254 /*Clean up and return*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r17671 r17680 54 54 void ComputeStrainRate(Vector<IssmDouble>* eps); 55 55 void ComputeStressTensor(); 56 void ComputeDeviatoricStressTensor(); 56 57 void ComputeSurfaceNormalVelocity(); 57 58 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
Note:
See TracChangeset
for help on using the changeset viewer.