36#include "axisym_solid.h"
42#include "constitutive.h"
45#include "meshes/annular_mesh.h"
109template<
class ELEMENT>
111 :
public virtual RefineableTwoDAnnularMesh<ELEMENT>,
112 public virtual SolidMesh
161 el_pt->set_undeformed_macro_elem_pt(
167 el_pt->enable_use_of_undeformed_macro_element_for_new_lagrangian_coords();
187template<
class ELEMENT>
231 for (
unsigned e = 0;
e <
n_el;
e++)
241 el_pt->pin_elemental_redundant_nodal_solid_pressures();
281template<
class ELEMENT>
288 Doc_info.number() = 0;
300 Surface_mesh_pt =
new Mesh;
303 create_boundary_elements();
316 Bulk_mesh_pt->spatial_error_estimator_pt() = error_estimator_pt;
317 Bulk_mesh_pt->max_permitted_error() = 1.0e-4;
318 Bulk_mesh_pt->min_permitted_error() = 1.0e-5;
331 Constitutive_law_pt =
335 complete_problem_setup();
345template<
class ELEMENT>
358 el_pt->constitutive_law_pt() = Constitutive_law_pt;
391 Surface_mesh_pt->element_pt(
e));
405 Bulk_mesh_pt->boundary_node_pt(3,
n)->pin_position(0);
412 Bulk_mesh_pt->boundary_node_pt(1,
n)->pin_position(1);
419template<
class ELEMENT>
423 unsigned n_element = Bulk_mesh_pt->nboundary_element(2);
429 dynamic_cast<ELEMENT*
>(Bulk_mesh_pt->boundary_element_pt(2,
e));
432 int face_index = Bulk_mesh_pt->face_index_at_boundary(2,
e);
448template<
class ELEMENT>
458 "%s/bulk_soln_nu_%g_pres_%g.dat",
459 Doc_info.directory().c_str(),
467 "%s/bulk_soln_nu_%g_pres_%g.vtu",
468 Doc_info.directory().c_str(),
533 for (
unsigned e = 0;
e <
n_el;
e++)
582 oomph_info <<
"Number of equations for auxiliary problem: "
613 const double nu = 0.5;
618 (1.0 / (1.0 +
nu)) * (0.25 *
pow(
xi[0] /
r[0], 4.0) +
xi[0] /
r[0] -
619 0.25 *
pow(
xi[1] /
r[1], 4.0) -
xi[1] /
r[1]) -
623 while (std::fabs(
residual) > 1.0e-8)
630 (-1.0 * (
pow(
xi[0] /
r[0], 4.0) +
xi[0] /
r[0]) /
r[0] +
638 (1 / (1.0 +
nu)) * (0.25 *
pow(
xi[0] /
r[0], 4.0) +
xi[0] /
r[0] -
639 0.25 *
pow(
xi[1] /
r[1], 4.0) -
xi[1] /
r[1]) -
671 "%s/aux_soln_nu_%g_pres_%g.dat",
717 "Inconsistency: Poisson ratio has been set to 0.5 but the \n"
718 "use_pressure_formulation and/or incompressible flags are false. \n"
719 "Setting both of these to true to proceed.";
732 "Inconsistency: The incompressibility flag is true but we are not using "
734 "the solid pressure formulation. Setting use_solid_pressure to true to "
Axisymmetric compression of a finite thickness shell in cylindrical polar coordiantes.
~AuxiliaryShellProblem()
Destructor.
Mesh * Surface_mesh_pt
Pointer to the "surface" mesh.
AuxiliaryShellProblem()
Constructor:
OneDMesh< ShellBenchmarkElement< 3 > > * Bulk_mesh_pt
Bulk mesh.
void doc_solution()
Doc the solution.
void solve_auxiliary_problem()
Solve the auxiliary problem.
Upgrade the mesh to a solidmesh. Quarter-annulus in quadrant r>0, z>0 ntheta - no....
Domain * Undeformed_domain_pt
Pointer to "undeformed" Domain – used to determine the Lagrangian coordinates of any newly created So...
Upgrade the mesh to a solidmesh. Quarter-annulus in quadrant r>0, z>0 ntheta - no....
ElasticTwoDAnnularMesh(const unsigned &ntheta, const unsigned &nr, const double &a, const double &h, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Build mesh and copy Eulerian coords to Lagrangian ones so that the initial configuration...
Axisymmetric compression of a finite thickness shell in cylindrical polar coordiantes.
Z2ErrorEstimator * error_estimator_pt
void create_boundary_elements()
Create the boundary elements.
void complete_problem_setup()
Complete the problem setup (attach function/physical parameter pointers)
Mesh * Surface_mesh_pt
Pointer to the "surface" mesh.
void actions_before_adapt()
Actions before adapt: Wipe the mesh of boundary elements.
void delete_boundary_elements()
Delete boundary elements and wipe the associated mesh.
ElasticTwoDAnnularMesh< ELEMENT > * Bulk_mesh_pt
Bulk mesh.
ElasticRefineableTwoDAnnularMesh< ELEMENT > * Bulk_mesh_pt
Bulk mesh.
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
void doc_solution()
Doc the solution.
void actions_after_adapt()
Any actions after refining the mesh.
ShellProblem()
Constructor:
~ShellProblem()
Destructor.
Face elements for the application of an external pressure.
Global physical variables.
void external_pressure_fct(const double &time, const Vector< double > &xi, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction)
Global simulation settings.
bool incompressible
If using a pressure formulation, is the solid incompressible?
bool use_pressure_formulation
Flag for using a pressure formulation.
int main(int argc, char *argv[])
Demonstrate how to solve an unstructured solid problem.