unstructured_adaptive_solid.cc File Reference
#include "generic.h"
#include "solid.h"
#include "constitutive.h"
#include "meshes/triangle_mesh.h"

Classes

class  UnstructuredSolidProblem< ELEMENT, MESH >
 Unstructured solid problem. More...
 

Namespaces

 Global_Physical_Variables
 Global variables.
 

Functions

void Global_Physical_Variables::constant_pressure (const Vector< double > &xi, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction)
 Constant pressure load. More...
 
int main (int argc, char **argv)
 Demonstrate how to solve an unstructured solid problem. More...
 

Function Documentation

◆ main()

int main ( int argc  ,
char **  argv 
)

Demonstrate how to solve an unstructured solid problem.

420 {
421 
422  //Doc info object
423  DocInfo doc_info;
424 
425  // Output directory
426  doc_info.set_directory("RESLT");
427 
428  // Create generalised Hookean constitutive equations
431 
432  {
433  std::ofstream strain("RESLT/s_energy.dat");
434  std::cout << "Running with pure displacement formulation\n";
435 
436  //Set up the problem
438 
439  //Output initial configuration
440  problem.doc_solution(doc_info);
441  doc_info.number()++;
442 
443  // Parameter study
445  double pressure_increment=0.1e-2;
446 
447  unsigned nstep=5;
448 
449  for (unsigned istep=0;istep<nstep;istep++)
450  {
451  // Solve the problem with one round of adaptivity
452  problem.newton_solve(1);
453 
454  double strain_energy = problem.get_strain_energy();
455  std::cout << "Strain energy is " << strain_energy << "\n";
456  //Output strain energy to file
457  strain << Global_Physical_Variables::P << " " << strain_energy << std::endl;
458 
459  //Output solution
460  problem.doc_solution(doc_info);
461  doc_info.number()++;
462 
463  //Reverse direction of increment
464  if(istep==2) {pressure_increment *= -1.0;}
465 
466  // Increase (or decrease) load
467  Global_Physical_Variables::P+=pressure_increment;
468  }
469 
470  strain.close();
471  } //end_displacement_formulation
472 
473 
474  //Repeat for displacement/pressure formulation
475  {
476  std::ofstream strain("RESLT_pres_disp/s_energy.dat");
477  std::cout << "Running with pressure/displacement formulation\n";
478 
479  // Change output directory
480  doc_info.set_directory("RESLT_pres_disp");
481  //Reset doc_info number
482  doc_info.number() = 0;
483 
484  //Set up the problem
488 
489  //Output initial configuration
490  problem.doc_solution(doc_info);
491  doc_info.number()++;
492 
493  // Parameter study
495  double pressure_increment=0.1e-2;
496 
497  unsigned nstep=5;
498  for (unsigned istep=0;istep<nstep;istep++)
499  {
500  // Solve the problem
501  problem.newton_solve(1);
502 
503  double strain_energy = problem.get_strain_energy();
504  std::cout << "Strain energy is "<< strain_energy << "\n";
505  //Output strain energy to file
506  strain << Global_Physical_Variables::P << " " << strain_energy << std::endl;
507 
508  //Output solution
509  problem.doc_solution(doc_info);
510  doc_info.number()++;
511 
512  if(istep==2) {pressure_increment *= -1.0;}
513  // Increase (or decrease) pressure load
514  Global_Physical_Variables::P+=pressure_increment;
515  }
516 
517  strain.close();
518  }
519 
520 
521  //Repeat for displacement/pressure formulation
522  //enforcing incompressibility
523  {
524  std::ofstream strain("RESLT_pres_disp_incomp/s_energy.dat");
525  std::cout <<
526  "Running with pressure/displacement formulation (incompressible) \n";
527 
528  // Change output directory
529  doc_info.set_directory("RESLT_pres_disp_incomp");
530  //Reset doc_info number
531  doc_info.number() = 0;
532 
533  //Set up the problem
537 
538  //Loop over all elements and set incompressibility flag
539  {
540  const unsigned n_element = problem.mesh_pt()->nelement();
541  for(unsigned e=0;e<n_element;e++)
542  {
543  //Cast the element to the equation base of our 2D elastiticy elements
544  PVDEquationsWithPressure<2> *cast_el_pt =
545  dynamic_cast<PVDEquationsWithPressure<2>*>(
546  problem.mesh_pt()->element_pt(e));
547 
548  //If the cast was successful, it's a bulk element,
549  //so set the incompressibilty flag
550  if(cast_el_pt) {cast_el_pt->set_incompressible();}
551  }
552  }
553 
554  //Turn on the incompressibity flag so that elements stay incompressible
555  //after refinement
556  problem.set_incompressible();
557 
558  //Output initial configuration
559  problem.doc_solution(doc_info);
560  doc_info.number()++;
561 
562  // Parameter study
564  double pressure_increment=0.1e-2;
565 
566  unsigned nstep=5;
567  for (unsigned istep=0;istep<nstep;istep++)
568  {
569  // Solve the problem
570  problem.newton_solve(1);
571 
572  double strain_energy = problem.get_strain_energy();
573  std::cout << "Strain energy is " << strain_energy << "\n";
574  //Output strain energy to file
575  strain << Global_Physical_Variables::P << " " << strain_energy << std::endl;
576 
577  //Output solution
578  problem.doc_solution(doc_info);
579  doc_info.number()++;
580 
581  if(istep==2) {pressure_increment *= -1.0;}
582  // Increase (or decrease) pressure load
583  Global_Physical_Variables::P+=pressure_increment;
584  }
585 
586  strain.close();
587  }
588 
589 } // end main
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Unstructured solid problem.
Definition: adaptive_unstructured_two_d_solid.cc:117
Definition: oomph_utilities.h:499
void set_directory(const std::string &directory)
Definition: oomph_utilities.cc:298
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: constitutive_laws.h:699
Definition: solid_elements.h:863
void set_incompressible()
Set the material to be incompressible.
Definition: solid_elements.h:881
PVDElementWithContinuousPressure upgraded to become projectable.
Definition: solid_elements.h:2496
Definition: solid_elements.h:2103
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
double Nu
Poisson's ratio.
Definition: TwenteMeshGluing.cpp:71
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
Definition: TwenteMeshGluing.cpp:65
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References Global_Physical_Variables::Constitutive_law_pt, e(), Global_Physical_Variables::Nu, oomph::DocInfo::number(), Global_Physical_Variables::P, problem, oomph::DocInfo::set_directory(), and oomph::PVDEquationsWithPressure< DIM >::set_incompressible().