10 #ifndef SOLID_PROBLEM_H
11 #define SOLID_PROBLEM_H
30 using namespace oomph;
33 #define OOMPH_MPI_PROCESSOR_NUM communicator_pt()->nproc()
35 #define OOMPH_MPI_PROCESSOR_NUM 1
39 #define OOMPH_MPI_PROCESSOR_ID communicator_pt()->my_rank()
41 #define OOMPH_MPI_PROCESSOR_ID 0
58 template<
class ELEMENT_TYPE>
69 double elasticModulus_ = 0;
72 double poissonRatio_ = 0;
100 logger(
INFO,
"Set default constitutive law (AnisotropicHookean) and time stepper (Newmark<2>)");
104 Newton_solver_tolerance = 1
e-10;
135 elasticModulus_ = elasticModulus;
136 logger(
INFO,
"Elastic Modulus: %", elasticModulus_);
142 return elasticModulus_;
148 logger(
INFO,
"Adding dissipation %",dissipation);
149 for (
int i = 0;
i < solid_mesh_pt()->nelement(); ++
i)
151 dynamic_cast<ELEMENT*
>(solid_mesh_pt()->element_pt(
i))->dissipation_ = dissipation;
167 logger(
INFO,
"Adding anisotropy E = [% % %]",Ex, Ey, Ez);
169 elasticModulus_ = Ex;
190 poissonRatio_ = poissonRatio;
191 logger(
INFO,
"Poisson Ratio: %", poissonRatio_);
197 return poissonRatio_;
216 logger(
INFO,
"Setting oomph-gravity in z-direction");
219 static double& Density = density_;
220 static double&
Gravity = gravity_;
231 isPinned_ = std::move(isPinned);
232 logger(
INFO,
"Setting which positions on which nodes are pinned");
239 return n->is_on_boundary(
b);
245 for (
const auto a:
b) {
249 for (
const auto a :
b) {
250 if (
n->is_on_boundary(
a))
return true;
259 for (
int i = 0;
i < solid_mesh_pt()->nelement(); ++
i)
268 this->Newton_solver_tolerance = Newton_solver_tolerance;
279 time_pt()->initialise_dt(dt);
284 return time_pt()->dt();
289 return time_pt()->time();
309 logger.assert_always(solid_mesh_pt(),
"mesh not found");
310 for (
unsigned i = 0;
i < solid_mesh_pt()->nnode();
i++)
312 const auto n = solid_mesh_pt()->node_pt(
i);
313 for (
int j = 0;
j < 3; ++
j)
334 logger.assert_always(!name_.empty(),
"Set name via setName(..)");
335 logger.assert_always(elasticModulus_>0,
"Set elastic modulus via setElasticModulus(..)");
336 logger.assert_always(density_>0,
"Set density via setDensity(..)");
337 logger.assert_always(solid_mesh_pt(),
"Set solid mesh via e.g. setSolidCubicMesh(..)");
340 logger(
INFO,
"Assign constitutive_law, body_force, density to all elements");
341 for (
unsigned i = 0;
i < solid_mesh_pt()->nelement();
i++)
344 ELEMENT* el_pt =
dynamic_cast<ELEMENT*
>(solid_mesh_pt()->element_pt(
i));
347 el_pt->constitutive_law_pt() = constitutive_law_pt;
349 el_pt->body_force_fct_pt() = body_force_fct;
351 el_pt->lambda_sq_pt() = &density_;
359 add_sub_mesh(solid_mesh_pt());
360 if (traction_mesh_pt()) {
361 add_sub_mesh(traction_mesh_pt());
362 logger(
INFO,
"Built global mesh from solid mesh and traction mesh");
364 logger(
INFO,
"Built global mesh from solid mesh");
371 for (
unsigned n = 0;
n < solid_mesh_pt()->nnode();
n++ )
373 SolidNode* n_pt = solid_mesh_pt()->node_pt(
n );
375 for (
unsigned i = 0;
i < 3;
i++ )
377 if ( isPinned_( n_pt,
i ) )
392 solid_mesh_pt()->element_pt());
393 logger(
INFO,
"Pinned redundant nodal solid pressures");
396 unsigned n_eq = assign_eqn_numbers();
397 logger(
INFO,
"Assigned % equation numbers", n_eq);
404 std::array<unsigned,3> countPinned {0,0,0};
405 unsigned countAll = 0;
406 for (
unsigned n = 0;
n < solid_mesh_pt()->nnode();
n++)
408 for (
unsigned i = 0;
i < 3;
i++)
410 countPinned[
i] += solid_mesh_pt()->node_pt(
n)->position_is_pinned(
i);
414 unsigned countPinnedAll = countPinned[0] + countPinned[1] +countPinned[2];
415 logger(
INFO,
"Pinned % of % positions (% free): % in x, % in y, % in z", countPinnedAll, countAll, countAll - countPinnedAll, countPinned[0], countPinned[1], countPinned[2]);
423 logger.assert_always(mesh_pt(),
"Mesh pointer not set; did you call prepareForSolve?");
425 actionsBeforeSolve();
426 if(max_adapt==0) newton_solve();
427 else newton_solve(max_adapt);
442 void solveUnsteady(
double timeMax,
double dt,
unsigned saveCount = 10,
const unsigned& max_adapt = 0)
444 logger.assert_always(mesh_pt(),
"Mesh pointer not set; did you call prepareForSolve?");
446 std::cout <<
"Solving oomph with dt=" << dt <<
" until timeMax=" << timeMax << std::endl;
449 this->time_pt()->initialise_dt(dt);
450 assign_initial_values_impulsive(dt);
451 actionsBeforeSolve();
454 double& time = time_stepper_pt()->time();
456 const unsigned countMax =
std::ceil(timeMax/dt);
457 while (time < timeMax)
459 logger(
INFO,
"Time %s of %s (% of %)", time, timeMax, count, countMax);
460 actionsBeforeOomphTimeStep();
466 unsteady_newton_solve(dt,
true);
470 unsteady_newton_solve(dt, max_adapt,
false,
true);
476 if (count++ % saveCount == 0 or time + dt > timeMax) {
482 if (Max_res.back()==0) {
484 logger(
ERROR,
"Maximum residual is 0; exiting the code");
497 solveUnsteady(timeMax, dt, saveCount);
501 if (time_stepper_pt()->time()-dt >= timeMaxMin) {
503 logger(
INFO,
"Newton solver failed at t=% (tMax=%), but code will continue.",
504 time_stepper_pt()->time()-dt, timeMax);
507 logger(
ERROR,
"Newton solver failed at t=% (tMax=%).",
508 time_stepper_pt()->time()-dt, timeMax);
518 for (
int i = 0;
true; ++
i)
521 if (remove(
fileName.c_str()))
break;
522 std::cout <<
"Deleted " <<
fileName <<
'\n';
533 for (
int i = 0;
i < 3; ++
i) {
539 const unsigned long nelement = solid_mesh_pt()->nelement();
540 for (
unsigned long i = 0;
i < nelement;
i++) {
541 auto el_pt =
dynamic_cast<ELEMENT *
>(solid_mesh_pt()->element_pt(
i));
546 el_pt->interpolated_x(
s,
x);
567 Z_MIN = 0, Y_MIN = 1, X_MAX = 2, Y_MAX = 3, X_MIN = 4, Z_MAX = 5
572 const double& xMin,
const double& xMax,
const double& yMin,
573 const double& yMax,
const double& zMin,
const double& zMax)
578 logger(
INFO,
"Created %x%x% cubic mesh on domain [%,%]x[%,%]x[%,%]",
579 nx,
ny,
nz, xMin, xMax, yMin, yMax, zMin, zMax);
592 if (Problem_has_been_distributed)
601 if (solid_cubic_mesh_pt) {
603 mesh << solid_cubic_mesh_pt->
nx() <<
' ';
604 mesh << solid_cubic_mesh_pt->ny() <<
' ';
605 mesh << solid_cubic_mesh_pt->nz() <<
'\n';
607 for (
int i = 0;
i < solid_mesh_pt()->nnode(); ++
i)
610 for (
int j = 0;
j < 3; ++
j)
612 mesh <<
n->xi(
j) <<
' ' <<
n->x(
j) <<
' ' <<
n->position_is_pinned(
j) <<
' ';
616 if (solid_cubic_mesh_pt) {
618 solid_cubic_mesh_pt->nx(), solid_cubic_mesh_pt->ny(), solid_cubic_mesh_pt->nz(),
filename);
629 std::ifstream mesh(infileName);
630 logger.assert_always(mesh.good(),
"Mesh file % could not be opened",infileName);
636 logger.assert_debug(
nx > 1 and
ny > 1 and
nz > 1,
"Mesh size invalid");
639 for (
unsigned i = 0;
i < solid_mesh_pt()->nelement();
i++)
642 ELEMENT* el_pt =
dynamic_cast<ELEMENT*
>(solid_mesh_pt()->element_pt(
i));
644 el_pt->constitutive_law_pt() = constitutive_law_pt;
650 logger(
INFO,
"Loading % nodes", solid_mesh_pt()->nnode());
651 for (
int i = 0;
i < solid_mesh_pt()->nnode(); ++
i)
654 for (
int j = 0;
j < 3; ++
j)
656 mesh >> xi >>
x >> pin;
659 if (pin)
n->pin_position(
j);
675 std::vector<std::vector<double>> sList0;
677 std::vector<unsigned> nList;
694 nList = {0, 1, 2, 3};
711 nList = {0, 4, 6, 2, 1, 5, 7, 3};
717 std::vector<Vector<double>> sList;
718 for (
auto s0 : sList0)
728 unsigned nel = solid_mesh_pt()->nelement();
737 std::vector<double>
value;
739 std::vector<Data>
data;
741 std::vector<Point> points;
742 points.reserve(nel * sList.size());
747 std::vector<unsigned long> connectivity;
748 unsigned long offset;
751 std::vector<Cell> cells;
755 for (
unsigned e = 0;
e < nel;
e++)
758 auto el_pt =
dynamic_cast<ELEMENT*
>(
759 solid_mesh_pt()->element_pt(
e));
761 std::vector<unsigned long> connectivity;
763 for (
const auto&
s : sList)
767 auto n_pt =
dynamic_cast<SolidNode*
>(el_pt->node_pt(
n));
770 el_pt->interpolated_x(
s,
x);
773 el_pt->interpolated_dxdt(
s, 1, dxdt);
776 el_pt->interpolated_xi(
s, xi);
779 auto bodyForceFct = el_pt->body_force_fct_pt();
780 if (bodyForceFct) bodyForceFct(time(), xi,
body_force);
788 el_pt->get_stress(
s,
sigma);
793 for (
int i = 0;
i < 3; ++
i) {
794 for (
int j = 0;
j < 3; ++
j) {
801 el_pt->get_strain(
s, strain);
803 std::vector<double> dudt
804 {el_pt->dnodal_position_dt(
n, 0),
805 el_pt->dnodal_position_dt(
n, 1),
806 el_pt->dnodal_position_dt(
n, 2)};
808 std::set<unsigned>* boundaries_pt;
809 n_pt->get_boundaries_pt(boundaries_pt);
810 double b = boundaries_pt ? *boundaries_pt->begin()+1 : 0;
811 std::vector<double> pin {(
double) n_pt->position_is_pinned(0),
812 (
double) n_pt->position_is_pinned(1),
813 (
double) n_pt->position_is_pinned(2)};
816 {
"Velocity", {dxdt[0], dxdt[1], dxdt[2]}},
817 {
"Displacement", {
x[0] - xi[0],
x[1] - xi[1],
x[2] - xi[2]}},
822 {
"Pressure", {pressure}},
835 connectivity.push_back(points.size() - 1);
838 cells.push_back({connectivity, points.size(), vtkFormat});
842 static unsigned count = 0;
849 std::ofstream vtk(vtkFileName);
852 vtk <<
"<?xml version=\"1.0\"?>\n"
853 "<!-- time 10.548-->\n"
854 "<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\">\n"
855 "<UnstructuredGrid>\n"
856 "<Piece NumberOfPoints=\""
858 <<
"\" NumberOfCells=\""
863 "<DataArray type=\"Float32\" Name=\"Position\" NumberOfComponents=\"3\" format=\"ascii\">\n";
864 for (
auto point : points)
866 vtk << point.coordinate[0] <<
" " << point.coordinate[1] <<
" " << point.coordinate[2] <<
"\n";
868 vtk <<
"</DataArray>\n"
870 if (not points.empty())
872 vtk <<
"<PointData Vectors=\"vector\">\n";
873 for (
int i = 0;
i < points.front().
data.size(); ++
i)
875 auto data = points.front().data[
i];
876 vtk << R
"(<DataArray type="Float32" Name=")"
877 << points.front().data[i].name
878 << R"(" NumberOfComponents=")"
879 << points.front().data[i].value.size()
880 << R"(" format="ascii">)" << "\n";
881 for (
const Point& point : points)
883 for (
const auto&
value : point.data[
i].value)
892 vtk <<
"</PointData>\n"
896 "<DataArray type=\"Int32\" Name=\"connectivity\" format=\"ascii\">\n";
897 for (
const Cell& cell : cells)
899 for (
auto point : cell.connectivity)
904 vtk <<
"</DataArray>\n"
905 "<DataArray type=\"Int32\" Name=\"offsets\" format=\"ascii\">\n";
906 for (
const Cell& cell : cells)
908 vtk << cell.offset <<
" ";
910 vtk <<
"</DataArray>\n"
911 "<DataArray type=\"UInt8\" Name=\"types\" format=\"ascii\">\n";
912 for (
const Cell& cell : cells)
914 vtk << cell.type <<
" ";
921 "</UnstructuredGrid>\n"
929 double& kineticEnergy)
const {
942 const unsigned long nelement = this->solid_mesh_pt()->nelement();
943 for (
unsigned long e = 0;
e < nelement;
e++) {
948 const unsigned DIM = e_pt->dim();
951 unsigned n_intpt = e_pt->integral_pt()->nweight();
957 const unsigned n_node = e_pt->nnode();
960 const unsigned n_position_type = e_pt->nnodal_position_type();
963 Shape psi(n_node, n_position_type);
964 DShape dpsidxi(n_node, n_position_type,
DIM);
967 double lambda_sq = e_pt->lambda_sq();
970 for (
unsigned ipt = 0; ipt < n_intpt; ipt++) {
972 for (
unsigned i = 0;
i <
DIM;
i++) {
s[
i] = e_pt->integral_pt()->knot(ipt,
i); }
975 double w = e_pt->integral_pt()->weight(ipt);
978 double J = e_pt->dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
981 double coupling_w = 0;
991 e_pt->interpolated_x(
s,
x);
998 for (
unsigned l = 0; l < n_node; l++) {
1000 for (
unsigned k = 0;
k < n_position_type;
k++) {
1002 for (
unsigned i = 0;
i <
DIM;
i++) {
1004 interpolated_xi[
i] += e_pt->lagrangian_position_gen(l,
k,
i) * psi(l,
k);
1007 if (e_pt->is_inertia_enabled()) {
1008 veloc[
i] += e_pt->dnodal_position_gen_dt(l,
k,
i) * psi(l,
k);
1016 e_pt->get_isotropic_growth(ipt,
s, interpolated_xi,
gamma);
1020 double W =
gamma *
w * (1.0 - coupling_w) *
J;
1026 e_pt->get_stress(
s,
sigma);
1029 for (
unsigned i = 0;
i <
DIM;
i++) {
1030 for (
unsigned j = 0;
j <
DIM;
j++) {
1031 sigma(
i,
j) += e_pt->prestress(
i,
j, interpolated_xi);
1036 e_pt->get_strain(
s, strain);
1039 double localElasticEnergy = 0;
1040 double velocitySquared = 0;
1043 for (
unsigned i = 0;
i <
DIM;
i++) {
1044 for (
unsigned j = 0;
j <
DIM;
j++) {
1045 localElasticEnergy +=
sigma(
i,
j) * strain(
i,
j);
1047 velocitySquared += veloc[
i] * veloc[
i];
1051 mass += lambda_sq *
W;
1055 for (
unsigned i = 0;
i <
DIM;
i++) {
1056 com[
i] += lambda_sq *
W *
x[
i];
1057 linearMomentum[
i] += lambda_sq * veloc[
i] *
W;
1058 angularMomentum[
i] += lambda_sq * cross_product[
i] *
W;
1061 elasticEnergy += 0.5 * localElasticEnergy *
W;
1063 kineticEnergy += lambda_sq * 0.5 * velocitySquared *
W;
1066 for (
unsigned i = 0;
i < com.size();
i++) {
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
LL< Log::ERROR > ERROR
Error log level.
Definition: Logger.cc:32
int data[]
Definition: Map_placement_new.cpp:1
RowVector3d w
Definition: Matrix_resize_int.cpp:3
#define OOMPH_MPI_PROCESSOR_ID
Definition: SolidProblem.h:41
#define OOMPH_MPI_PROCESSOR_NUM
Definition: SolidProblem.h:35
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: SolidProblem.h:60
SolidMesh *& traction_mesh_pt()
Get function for the traction mesh pointer.
Definition: SolidProblem.h:296
virtual void actionsBeforeOomphTimeStep()
Definition: SolidProblem.h:437
void solveSteady(const unsigned &max_adapt=0)
Definition: SolidProblem.h:421
void addAnisotropy(double Ex, double Ey, double Ez)
Definition: SolidProblem.h:165
Boundary
Definition: SolidProblem.h:566
void setElasticModulus(double elasticModulus)
set function for elasticModulus_
Definition: SolidProblem.h:133
void setName(const std::string &name)
set function for name_
Definition: SolidProblem.h:120
void solveUnsteadyForgiving(double timeMax, double timeMaxMin, double dt, unsigned saveCount=10)
Definition: SolidProblem.h:494
void prepareForSolve()
Definition: SolidProblem.h:331
void saveSolidMesh()
Definition: SolidProblem.h:582
void removeOldFiles() const
Definition: SolidProblem.h:516
double getOomphTime() const
get function for current time
Definition: SolidProblem.h:288
void setSolidCubicMesh(const unsigned &nx, const unsigned &ny, const unsigned &nz, const double &xMin, const double &xMax, const double &yMin, const double &yMax, const double &zMin, const double &zMax)
Definition: SolidProblem.h:571
void pinBoundary(unsigned b)
Definition: SolidProblem.h:236
virtual void actionsBeforeSolve()
Definition: SolidProblem.h:433
void writeToVTK()
Definition: SolidProblem.h:665
std::enable_if< std::is_base_of< RefineableQDPVDElement< 3, 2 >, ELEMENT >::value, void > setDissipation(double dissipation)
Sets the dissipation coefficient for all elements.
Definition: SolidProblem.h:257
void solveUnsteady(double timeMax, double dt, unsigned saveCount=10, const unsigned &max_adapt=0)
Definition: SolidProblem.h:442
void setOomphTimeStep(double dt)
set function for time step
Definition: SolidProblem.h:278
void loadSolidMesh(std::string infileName, bool cubic=true)
Definition: SolidProblem.h:624
ELEMENT_TYPE ELEMENT
Definition: SolidProblem.h:63
std::string name_
Definition: SolidProblem.h:66
void getMassMomentumEnergy(double &mass, Vector< double > &com, Vector< double > &linearMomentum, Vector< double > &angularMomentum, double &elasticEnergy, double &kineticEnergy) const
See PVDEquationsBase<DIM>::get_energy.
Definition: SolidProblem.h:928
void setOomphGravity(double gravity)
set function for elasticModulus_
Definition: SolidProblem.h:175
double getDeflection(Vector< double > xi, unsigned d) const
Definition: SolidProblem.h:557
void setPoissonRatio(double poissonRatio)
set function for poissonRatio_
Definition: SolidProblem.h:188
void getDomainSize(std::array< double, 3 > &min, std::array< double, 3 > &max) const
Computes the domain size (min/max of the nodal positions in x/y/z)
Definition: SolidProblem.h:305
double getPoissonRatio() const
get function for poissonRatio_
Definition: SolidProblem.h:195
SolidProblem()
Constructor: set default constitutive law and time stepper.
Definition: SolidProblem.h:98
void get_x(const Vector< double > &xi, Vector< double > &x) const
Definition: SolidProblem.h:529
SolidMesh *const & traction_mesh_pt() const
Get function for the traction mesh pointer.
Definition: SolidProblem.h:302
std::function< bool(SolidNode *, unsigned)> isPinned_
Function to determine which nodal positions are pinned.
Definition: SolidProblem.h:93
void setDensity(double density)
set function for density_
Definition: SolidProblem.h:201
double getOomphGravity() const
get function for gravity_
Definition: SolidProblem.h:182
void setIsPinned(std::function< bool(SolidNode *, unsigned)> isPinned)
set function for isPinned_
Definition: SolidProblem.h:229
virtual void actionsAfterSolve()
Definition: SolidProblem.h:435
void setBodyForceAsGravity(double gravity=9.8)
set function for body_force_pt
Definition: SolidProblem.h:214
void addDissipation(double dissipation)
Definition: SolidProblem.h:146
void setNewtonSolverTolerance(double Newton_solver_tolerance)
set function for Newton_solver_tolerance
Definition: SolidProblem.h:266
double getOomphTimeStep() const
get function for time step
Definition: SolidProblem.h:283
double getDensity() const
get function for density_
Definition: SolidProblem.h:208
void setMaxNewtonIterations(unsigned Max_newton_iterations)
set function for Max_newton_iterations
Definition: SolidProblem.h:272
SolidMesh *& solid_mesh_pt()
Get function for the solid mesh pointer.
Definition: SolidProblem.h:293
void setupRefinementParameters(const double &min_error_target, const double &max_error_target, Z2ErrorEstimator *&error_estimator_pt)
Definition: SolidProblem.h:155
void countPinned()
returns statistics about pinned nodes to the console
Definition: SolidProblem.h:401
SolidMesh *const & solid_mesh_pt() const
Get function for the solid mesh pointer.
Definition: SolidProblem.h:299
double getElasticModulus() const
get function for elasticModulus_
Definition: SolidProblem.h:140
std::string getName() const
get function for name_
Definition: SolidProblem.h:127
void pinBoundaries(std::vector< unsigned > b)
Definition: SolidProblem.h:244
Definition: AnisotropicHookean.h:16
void setAnisotropy(std::array< double, 3 > anisotropy)
Definition: AnisotropicHookean.h:21
Definition: constitutive_laws.h:471
Definition: geom_objects.h:101
virtual void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
Definition: geom_objects.h:381
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
Definition: oomph_definitions.h:222
static void pin_redundant_nodal_solid_pressures(const Vector< GeneralisedElement * > &element_pt)
Definition: solid_elements.h:208
Definition: problem.h:151
double & min_permitted_error()
Definition: refineable_mesh.h:156
double & max_permitted_error()
Definition: refineable_mesh.h:163
ErrorEstimator *& spatial_error_estimator_pt()
Access to spatial error estimator.
Definition: refineable_mesh.h:143
Definition: RefineableQDPVDElement.h:23
Definition: solid_cubic_mesh.h:17
const unsigned & nx() const
Access function for number of elements in x directions.
Definition: simple_cubic_mesh.template.h:108
void pin_position(const unsigned &i)
Pin the nodal position.
Definition: nodes.h:1816
void unpin_position(const unsigned &i)
Unpin the nodal position.
Definition: nodes.h:1829
Definition: Qelements.h:1742
Definition: Telements.h:3728
void initialise(const _Tp &__value)
Iterate over all values and set to the desired value.
Definition: oomph-lib/src/generic/Vector.h:167
Definition: error_estimator.h:266
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
RealScalar s
Definition: level1_cplx_impl.h:130
const Scalar * a
Definition: level2_cplx_impl.h:32
char char char int int * k
Definition: level2_impl.h:374
#define DIM
Definition: linearised_navier_stokes_elements.h:44
#define isfinite(X)
Definition: main.h:111
#define INFO(i)
Definition: mumps_solver.h:54
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 ceil(const bfloat16 &a)
Definition: BFloat16.h:644
squared absolute value
Definition: GlobalFunctions.h:87
void body_force(const double &time, const Vector< double > &x, Vector< double > &result)
Definition: axisym_linear_elasticity/cylinder/cylinder.cc:96
Definition: ConstraintElementsUnitTest.cpp:19
void gravity(const double &t, const Vector< double > &xi, Vector< double > &b)
Definition: ConstraintElementsUnitTest.cpp:20
string filename
Definition: MergeRestartFiles.py:39
Z2ErrorEstimator * error_estimator_pt
Definition: MortaringCantileverCompareToNonMortaring.cpp:190
const unsigned nz
Definition: ConstraintElementsUnitTest.cpp:32
const unsigned nx
Definition: ConstraintElementsUnitTest.cpp:30
const unsigned ny
Definition: ConstraintElementsUnitTest.cpp:31
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
int error
Definition: calibrate.py:297
int sigma
Definition: calibrate.py:179
type
Definition: compute_granudrum_aor.py:141
const Mdouble inf
Definition: GeneralDefine.h:23
Definition: MortaringCantileverCompareToNonMortaring.cpp:176
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116
T cubic(const T val)
calculates the cube of a number
Definition: ExtendedMath.h:95
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
unsigned Max_newton_iterations
Maximum number of newton iterations.
Definition: elements.cc:1654
@ W
Definition: quadtree.h:63
std::string to_string(T object, unsigned float_precision=8)
Definition: oomph_utilities.h:189
void cross(const Vector< double > &A, const Vector< double > &B, Vector< double > &C)
Definition: oomph-lib/src/generic/Vector.h:319
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
string name
Definition: plotDoE.py:33
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2