41 #include "meshes/simple_cubic_mesh.template.h" 45 using namespace oomph;
55 template<
class ELEMENT>
57 public virtual SolidMesh
64 const double &a,
const double &b,
const double &c,
65 TimeStepper* time_stepper_pt=&Mesh::Default_TimeStepper) :
66 SimpleCubicMesh<ELEMENT>(nx,ny,nz,-a,a,-b,b,-c,c,time_stepper_pt)
69 set_lagrangian_nodal_coordinates();
131 template<
class ELEMENT>
136 void set_incompressible(ELEMENT *el_pt,
const bool &incompressible);
144 void run(
const std::string &dirname);
151 void doc_solution(DocInfo& doc_info);
167 apply_boundary_conditions();
168 bool update_all_solid_nodes=
true;
169 mesh_pt()->node_update(update_all_solid_nodes);
176 unsigned num_nod=mesh_pt()->nboundary_node(ibound);
177 for (
unsigned inod=0;inod<num_nod;inod++)
179 SolidNode *solid_nod_pt =
static_cast<SolidNode*
>(
180 mesh_pt()->boundary_node_pt(ibound,inod));
182 solid_nod_pt->x(0) = solid_nod_pt->xi(0) + Shear*
192 template<
class ELEMENT>
196 double a = 1.0, b = 1.0, c = 1.0;
197 unsigned nx = 5, ny = 5, nz = 5;
203 for(
unsigned b=0;b<6;b++)
206 unsigned n_node = mesh_pt()->nboundary_node(b);
207 for(
unsigned n=0;n<n_node;n++)
210 for(
unsigned i=1;i<3;i++)
212 mesh_pt()->boundary_node_pt(b,n)->pin_position(i);
217 mesh_pt()->boundary_node_pt(b,n)->pin_position(0);
223 unsigned n_element =mesh_pt()->nelement();
224 for(
unsigned i=0;i<n_element;i++)
227 ELEMENT *el_pt =
dynamic_cast<ELEMENT*
>(mesh_pt()->element_pt(i));
230 el_pt->constitutive_law_pt() =
233 set_incompressible(el_pt,incompressible);
244 cout << assign_eqn_numbers() << std::endl;
251 template<
class ELEMENT>
262 sprintf(filename,
"%s/soln%i.dat",doc_info.directory().c_str(),
264 some_file.open(filename);
265 mesh_pt()->output(some_file,npts);
268 sprintf(filename,
"%s/stress%i.dat", doc_info.directory().c_str(),
270 some_file.open(filename);
272 Vector<double> s(3,0.0);
274 DenseMatrix<double> sigma(3,3);
276 unsigned n_element = mesh_pt()->nelement();
277 for(
unsigned e=0;e<n_element;e++)
279 ELEMENT* el_pt =
dynamic_cast<ELEMENT*
>(mesh_pt()->element_pt(e));
280 el_pt->interpolated_x(s,x);
281 el_pt->get_stress(s,sigma);
284 for(
unsigned i=0;i<3;i++)
286 some_file << x[i] <<
" ";
288 for(
unsigned i=0;i<3;i++)
290 for(
unsigned j=0;j<3;j++)
292 some_file << sigma(i,j) <<
" ";
295 some_file << std::endl;
305 template<
class ELEMENT>
313 doc_info.set_directory(dirname);
325 for(
unsigned i=0;i<nstep;i++)
332 doc_solution(doc_info);
342 QPVDElement<3,3> *el_pt,
const bool &incompressible)
350 QPVDElementWithPressure<3> *el_pt,
const bool &incompressible)
353 else {el_pt->set_compressible();}
359 QPVDElementWithContinuousPressure<3> *el_pt,
const bool &incompressible)
362 else {el_pt->set_compressible();}
376 for (
unsigned i=0;i<2;i++)
387 new IsotropicStrainEnergyFunctionConstitutiveLaw(
393 problem.
run(
"RESLT");
400 problem.
run(
"RESLT_pres");
413 problem.
run(
"RESLT_cont_pres");
double Gravity
Body force.
void actions_before_newton_solve()
Update before solve: We're dealing with a static problem so the nodal positions before the next solve...
SimpleShearProblem(const bool &incompressible)
Constructor:
void apply_boundary_conditions()
Shear the top.
void body_force(const Vector< double > &xi, const double &t, Vector< double > &b)
Body force vector: Vertically downwards with magnitude Gravity.
ElasticCubicMesh(const unsigned &nx, const unsigned &ny, const unsigned &nz, const double &a, const double &b, const double &c, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor:
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
virtual ~ElasticCubicMesh()
Empty Destructor.
ElasticCubicMesh< ELEMENT > * mesh_pt()
Access function for the mesh.
void doc_solution(DocInfo &doc_info)
Doc the solution.
StrainEnergyFunction * Strain_energy_function_pt
Pointer to strain energy function.
void set_incompressible(ELEMENT *el_pt, const bool &incompressible)
void actions_after_newton_solve()
Update function (empty)
int main()
Driver for simple elastic problem.
Boundary-driven elastic deformation of fish-shaped domain.
Simple cubic mesh upgraded to become a solid mesh.
double C1
"Mooney Rivlin" coefficient for generalised Mooney Rivlin law
void run(const std::string &dirname)
Run simulation.
double Nu
Poisson's ratio.