41#include "meshes/rectangular_quadmesh.h"
72 for(
unsigned i=0;
i<3;
i++)
86template <
class ELEMENT>
87class ShellMesh :
public virtual RectangularQuadMesh<ELEMENT>,
88 public virtual SolidMesh
94 const double &
lx,
const double &
ly);
116template <
class ELEMENT>
161template <
class ELEMENT>
185 for(
unsigned i=0;
i<3;
i++)
314template<
class ELEMENT>
322 const double &
lx,
const double &
ly);
327 delete Problem::mesh_pt();
363template<
class ELEMENT>
365 const double &
lx,
const double &
ly)
380 mesh_pt()->assign_undeformed_positions(Undeformed_midplane_pt);
383 mesh_pt()->element_reorder();
386 unsigned n_ends = mesh_pt()->nboundary_node(1);
391 mesh_pt()->boundary_node_pt(1,
i)->pin_position(2);
392 mesh_pt()->boundary_node_pt(3,
i)->pin_position(2);
394 mesh_pt()->boundary_node_pt(1,
i)->pin_position(2,2);
395 mesh_pt()->boundary_node_pt(3,
i)->pin_position(2,2);
400 mesh_pt()->boundary_node_pt(1,
i)->pin_position(0);
401 mesh_pt()->boundary_node_pt(3,
i)->pin_position(0);
403 mesh_pt()->boundary_node_pt(1,
i)->pin_position(2,0);
404 mesh_pt()->boundary_node_pt(3,
i)->pin_position(2,0);
406 mesh_pt()->boundary_node_pt(1,
i)->pin_position(1);
407 mesh_pt()->boundary_node_pt(3,
i)->pin_position(1);
409 mesh_pt()->boundary_node_pt(1,
i)->pin_position(2,1);
410 mesh_pt()->boundary_node_pt(3,
i)->pin_position(2,1);
416 mesh_pt()->boundary_node_pt(1,
i)->pin_position(1,0);
417 mesh_pt()->boundary_node_pt(1,
i)->pin_position(1,1);
418 mesh_pt()->boundary_node_pt(3,
i)->pin_position(1,0);
419 mesh_pt()->boundary_node_pt(3,
i)->pin_position(1,1);
421 mesh_pt()->boundary_node_pt(1,
i)->pin_position(3,0);
422 mesh_pt()->boundary_node_pt(1,
i)->pin_position(3,1);
423 mesh_pt()->boundary_node_pt(3,
i)->pin_position(3,0);
424 mesh_pt()->boundary_node_pt(3,
i)->pin_position(3,1);
428 unsigned n_side = mesh_pt()->nboundary_node(0);
432 mesh_pt()->boundary_node_pt(0,
i)->pin_position(1);
434 mesh_pt()->boundary_node_pt(0,
i)->pin_position(1,1);
436 mesh_pt()->boundary_node_pt(0,
i)->pin_position(2,0);
437 mesh_pt()->boundary_node_pt(0,
i)->pin_position(2,2);
439 mesh_pt()->boundary_node_pt(0,
i)->pin_position(3,0);
440 mesh_pt()->boundary_node_pt(0,
i)->pin_position(3,2);
443 mesh_pt()->boundary_node_pt(2,
i)->pin_position(0);
445 mesh_pt()->boundary_node_pt(2,
i)->pin_position(1,0);
447 mesh_pt()->boundary_node_pt(2,
i)->pin_position(2,1);
448 mesh_pt()->boundary_node_pt(2,
i)->pin_position(2,2);
450 mesh_pt()->boundary_node_pt(2,
i)->pin_position(3,1);
451 mesh_pt()->boundary_node_pt(2,
i)->pin_position(3,2);
457 mesh_pt()->boundary_node_pt(0,
i)->x(0) += 0.05;
458 mesh_pt()->boundary_node_pt(2,
i)->x(1) -= 0.1;
485 dynamic_cast<ELEMENT*
>(mesh_pt()->element_pt(3*
ny-1));
535 el_pt->undeformed_midplane_pt() = Undeformed_midplane_pt;
544 el_pt->pre_compute_d2shape_lagrangian_at_knots();
556 Trace_node_pt = mesh_pt()->finite_element_pt(2*
ny-1)->node_pt(3);
557 Trace_node2_pt = mesh_pt()->finite_element_pt(
ny)->node_pt(1);
561 cout <<
"------------------DISPLACEMENT CONTROL--------------------"
564 cout <<
"----------------------------------------------------------"
574template<
class ELEMENT>
591 for(
unsigned i=1;
i<13;
i++)
598 cout << std::endl <<
"Increasing displacement: Prescribed_y is "
608 << Trace_node_pt->x(0) <<
" " << Trace_node_pt->x(1) <<
" "
610 << Trace_node2_pt->x(0) <<
" " << Trace_node2_pt->x(1) << std::endl;
618 mesh_pt()->output(
file,5);
630 cout <<
"-----------------ARC-LENGTH CONTINUATION --------------"
633 cout <<
"-------------------------------------------------------"
653 trace.open(
"trace_disp.dat");
655 for(
unsigned i=0;
i<15;
i++)
664 << Trace_node_pt->x(0) <<
" " << Trace_node_pt->x(1) <<
" "
666 << Trace_node2_pt->x(0) <<
" " << Trace_node2_pt->x(1) << std::endl;
A 2D Mesh class. The tube wall is represented by two Lagrangian coordinates that correspond to z and ...
void assign_undeformed_positions(GeomObject *const &undeformed_midplane_pt)
In all elastic problems, the nodes must be assigned an undeformed, or reference, position,...
ShellMesh(const unsigned &nx, const unsigned &ny, const double &lx, const double &ly)
Constructor for the mesh.
Node * Trace_node2_pt
Second trace node.
GeomObject * Undeformed_midplane_pt
Pointer to GeomObject that specifies the undeformed midplane.
ShellProblem(const unsigned &nx, const unsigned &ny, const double &lx, const double &ly)
Constructor.
void actions_before_newton_solve()
Actions before solve empty.
Node * Trace_node_pt
First trace node.
void actions_after_newton_solve()
Actions after solve empty.
~ShellProblem()
Destructor: delete mesh, geometric object.
ShellMesh< ELEMENT > * mesh_pt()
Overload Access function for the mesh.
Global variables that represent physical properties.
double external_pressure()
Return a reference to the external pressure load on the elastic tube.
void press_load(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Load function, normal pressure loading.
double Prescribed_y
Prescribed position of control point.
Data * Pext_data_pt
Pointer to pressure load (stored in Data so it can become an unknown in the problem when displacement...