47 std::string(equation_name),
48 "FEM for linear elasticity.")
50 "Time governor setting for the secondary equation.")
52 "Settings for computing balance.")
54 "Parameters of output stream.")
56 "Linear solver for elasticity.")
59 .make_field_descriptor_type(equation_name)),
61 "Input fields of the equation.")
63 EqData().output_fields.make_output_type(equation_name,
""),
65 "Setting of the field output.")
93 xprintf(
PrgErr,
"Unsupported polynomial order %d for finite elements in Elasticity", fe_order);
97 for (
unsigned int dim = 0; dim < 4; dim++) q_[dim] =
new QGauss(dim, q_order);
103 ds_ = std::make_shared<EqualOrderDiscreteSpace>(mesh_, fe0_, fe1_, fe2_, fe3_);
104 dh_ = std::make_shared<DOFHandlerMultiDim>(*mesh_);
106 dh_->distribute_dofs(ds_);
113 dh_scalar_ = make_shared<DOFHandlerMultiDim>(*mesh_);
114 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>( mesh_, fe0, fe1, fe2, fe3);
115 dh_scalar_->distribute_dofs(ds);
121 dh_tensor_ = make_shared<DOFHandlerMultiDim>(*mesh_);
122 std::shared_ptr<DiscreteSpace> dst = std::make_shared<EqualOrderDiscreteSpace>( mesh_, fe0t, fe1t, fe2t, fe3t);
123 dh_tensor_->distribute_dofs(dst);
132 for (
unsigned int dim=0; dim < 4; dim++)
delete q_[dim];
149 std::shared_ptr<DOFHandlerMultiDim> FEObjects::dh_scalar() {
return dh_scalar_; }
150 std::shared_ptr<DOFHandlerMultiDim> FEObjects::dh_tensor() {
return dh_tensor_; }
159 return young*0.5/(poisson+1.);
165 return young*poisson/((poisson+1.)*(1.-2.*poisson));
174 return Selection(
"Elasticity_BC_Type",
"Types of boundary conditions for heat transfer model.")
175 .
add_value(bc_type_displacement,
"displacement",
176 "Prescribed displacement.")
177 .
add_value(bc_type_displacement_normal,
"displacement_n",
178 "Prescribed displacement in the normal direction to the boundary.")
180 "Prescribed traction.")
190 "Type of boundary condition.")
192 .input_default(
"\"traction\"")
193 .input_selection( get_bc_type_selection() )
196 *
this+=bc_displacement
197 .name(
"bc_displacement")
198 .description(
"Prescribed displacement.")
200 .input_default(
"0.0")
205 .description(
"Prescribed traction.")
207 .input_default(
"0.0")
212 .description(
"Prescribed load.")
213 .units(
UnitSI().N().m(-3) )
214 .input_default(
"0.0")
218 .name(
"young_modulus")
219 .description(
"Young modulus.")
221 .input_default(
"0.0")
222 .flags_add(in_main_matrix & in_rhs);
225 .name(
"poisson_ratio")
226 .description(
"Poisson ratio.")
227 .units(
UnitSI().dimensionless() )
228 .input_default(
"0.0")
229 .flags_add(in_main_matrix & in_rhs);
231 *
this+=fracture_sigma
232 .name(
"fracture_sigma")
234 "Coefficient of diffusive transfer through fractures (for each substance).")
236 .input_default(
"1.0")
237 .flags_add(in_main_matrix & in_rhs);
239 *
this += region_id.name(
"region_id")
243 *
this += subdomain.name(
"subdomain")
248 .name(
"cross_section")
249 .units(
UnitSI().m(3).md() )
250 .flags(input_copy & in_time_term & in_main_matrix & in_rhs);
252 *
this+=potential_load
253 .name(
"potential_load")
255 .flags(input_copy & in_rhs);
258 .name(
"displacement")
260 .flags(equation_result);
262 *
this += output_stress
265 .flags(equation_result);
267 *
this += output_von_mises_stress
268 .name(
"von_mises_stress")
270 .flags(equation_result);
272 *
this += output_cross_section
273 .name(
"cross_section_updated")
275 .flags(equation_result);
277 *
this += output_divergence
278 .name(
"displacement_divergence")
279 .units(
UnitSI().dimensionless() )
280 .flags(equation_result);
283 output_fields += *
this;
290 allocation_done(false)
309 WarningOut() <<
"Time governor of Elasticity is initialized from parent class - input record will be ignored!";
321 DebugOut().fmt(
"Mechanics: solution size {}\n",
feo->
dh()->n_global_dofs());
374 std::string petsc_default_opts;
375 petsc_default_opts =
"-ksp_type cg -pc_type hypre -pc_hypre_type boomeramg";
414 compute_output_fields<1>();
415 compute_output_fields<2>();
416 compute_output_fields<3>();
435 std::stringstream ss;
452 MatSetOption(*
ls->
get_matrix(), MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE);
513 DebugOut() <<
"Mechanics: Assembling matrix.\n";
529 DebugOut() <<
"Mechanics: Assembling right hand side.\n";
570 template<
unsigned int dim>
573 QGauss q(dim, 0), q_sub(dim-1, 0);
578 const unsigned int ndofs =
feo->
fe<dim>()->n_dofs();
579 std::vector<int> dof_indices(ndofs), dof_indices_scalar(1), dof_indices_tensor(9);
590 for (
auto cell :
feo->
dh()->own_range())
592 if (cell.dim() == dim)
594 auto elm = cell.elm();
598 double mu =
lame_mu(young, poisson);
602 cell.get_loc_dof_indices(dof_indices);
608 for (
unsigned int i=0; i<ndofs; i++)
610 stress += (2*mu*
vec.sym_grad(i,0) + lambda*
vec.divergence(i,0)*arma::eye(3,3))*output_vec[dof_indices[i]];
611 div +=
vec.divergence(i,0)*output_vec[dof_indices[i]];
614 arma::mat33 stress_dev = stress - arma::trace(stress)/3*arma::eye(3,3);
615 double von_mises_stress = sqrt(1.5*
arma::dot(stress_dev, stress_dev));
616 output_div_vec[dof_indices_scalar[0]] += div;
618 for (
unsigned int i=0; i<3; i++)
619 for (
unsigned int j=0; j<3; j++)
620 output_stress_vec[dof_indices_tensor[i*3+j]] += stress(i,j);
621 output_von_mises_stress_vec[dof_indices_scalar[0]] = von_mises_stress;
625 else if (cell.dim() == dim-1)
627 auto elm = cell.elm();
629 double normal_displacement = 0;
635 double mu =
lame_mu(young, poisson);
638 for (
unsigned int inb=0; inb<elm->n_neighs_vb(); inb++)
640 auto side = elm->neigh_vb[inb]->side();
641 auto cell_side = side->element();
642 fsv.
reinit(cell_side, side->side_idx());
643 feo->
dh()->cell_accessor_from_element(cell_side.idx()).get_loc_dof_indices(side_dof_indices);
645 for (
unsigned int i=0; i<ndofs; i++)
647 normal_displacement -=
arma::dot(vec_side.value(i,0)*output_vec[side_dof_indices[i]], fsv.
normal_vector(0));
648 arma::mat33 grad = -arma::kron(vec_side.value(i,0)*output_vec[side_dof_indices[i]], fsv.
normal_vector(0).t()) / csection;
649 normal_stress += mu*(grad+grad.t()) + lambda*arma::trace(grad)*arma::eye(3,3);
654 for (
unsigned int i=0; i<3; i++)
655 for (
unsigned int j=0; j<3; j++)
656 output_stress_vec[dof_indices_tensor[i*3+j]] += normal_stress(i,j);
657 output_cross_sec_vec[dof_indices_scalar[0]] += normal_displacement;
658 output_div_vec[dof_indices_scalar[0]] += normal_displacement / csection;
688 assemble_volume_integrals<1>();
689 assemble_volume_integrals<2>();
690 assemble_volume_integrals<3>();
694 assemble_fluxes_boundary<1>();
695 assemble_fluxes_boundary<2>();
696 assemble_fluxes_boundary<3>();
700 assemble_matrix_element_side<1>();
701 assemble_matrix_element_side<2>();
702 assemble_matrix_element_side<3>();
709 template<
unsigned int dim>
714 const unsigned int ndofs =
feo->
fe<dim>()->n_dofs(), qsize =
feo->
q<dim>()->size();
718 PetscScalar local_matrix[ndofs*ndofs];
722 for (
auto cell :
feo->
dh()->own_range())
724 if (cell.dim() != dim)
continue;
727 fe_values.
reinit(elm_acc);
728 cell.get_dof_indices(dof_indices);
735 for (
unsigned int i=0; i<ndofs; i++)
736 for (
unsigned int j=0; j<ndofs; j++)
737 local_matrix[i*ndofs+j] = 0;
739 for (
unsigned int k=0; k<qsize; k++)
741 double mu =
lame_mu(young[k], poisson[k]);
743 for (
unsigned int i=0; i<ndofs; i++)
745 for (
unsigned int j=0; j<ndofs; j++)
746 local_matrix[i*ndofs+j] += csection[k]*(
748 + lambda*
vec.divergence(j,k)*
vec.divergence(i,k)
763 assemble_sources<1>();
764 assemble_sources<2>();
765 assemble_sources<3>();
766 assemble_rhs_element_side<1>();
767 assemble_rhs_element_side<2>();
768 assemble_rhs_element_side<3>();
769 assemble_boundary_conditions<1>();
770 assemble_boundary_conditions<2>();
771 assemble_boundary_conditions<3>();
778 template<
unsigned int dim>
783 const unsigned int ndofs =
feo->
fe<dim>()->n_dofs(), qsize =
feo->
q<dim>()->size();
787 PetscScalar local_rhs[ndofs];
792 for (
auto cell :
feo->
dh()->own_range())
794 if (cell.dim() != dim)
continue;
797 fe_values.
reinit(elm_acc);
798 cell.get_dof_indices(dof_indices);
801 fill_n(local_rhs, ndofs, 0);
802 local_source_balance_vector.assign(ndofs, 0);
803 local_source_balance_rhs.assign(ndofs, 0);
810 for (
unsigned int k=0; k<qsize; k++)
812 for (
unsigned int i=0; i<ndofs; i++)
815 -potential[k]*
vec.divergence(i,k)
816 )*csection[k]*fe_values.
JxW(k);
843 template<
unsigned int dim>
848 const unsigned int ndofs =
feo->
fe<dim>()->n_dofs(), qsize =
feo->
q<dim-1>()->size();
850 PetscScalar local_matrix[ndofs*ndofs];
854 for (
unsigned int iedg=0; iedg<
feo->
dh()->n_loc_edges(); iedg++)
857 if (edg.
n_sides() > 1)
continue;
859 if (edg.
side(0)->
dim() != dim-1)
continue;
865 feo->
dh()->cell_accessor_from_element(cell.
idx()).get_dof_indices(side_dof_indices);
869 for (
unsigned int i=0; i<ndofs; i++)
870 for (
unsigned int j=0; j<ndofs; j++)
871 local_matrix[i*ndofs+j] = 0;
875 for (
unsigned int k=0; k<qsize; k++)
876 for (
unsigned int i=0; i<ndofs; i++)
877 for (
unsigned int j=0; j<ndofs; j++)
882 for (
unsigned int k=0; k<qsize; k++)
883 for (
unsigned int i=0; i<ndofs; i++)
884 for (
unsigned int j=0; j<ndofs; j++)
900 template<
unsigned int dim>
903 if (dim == 1)
return;
909 const unsigned int ndofs_side =
feo->
fe<dim>()->n_dofs();
910 const unsigned int ndofs_sub =
feo->
fe<dim-1>()->n_dofs();
911 const unsigned int qsize =
feo->
q<dim-1>()->size();
915 vector<double> csection_lower(qsize), csection_higher(qsize), young(qsize), poisson(qsize), alpha(qsize);
916 PetscScalar local_matrix[2][2][(ndofs_side)*(ndofs_side)];
922 side_dof_indices[0].resize(ndofs_sub);
923 side_dof_indices[1].resize(ndofs_side);
926 for (
unsigned int inb=0; inb<
feo->
dh()->n_loc_nb(); inb++)
933 feo->
dh()->cell_accessor_from_element(cell_sub.
idx()).get_dof_indices(side_dof_indices[0]);
934 fe_values_sub.
reinit(cell_sub);
937 feo->
dh()->cell_accessor_from_element(cell.
idx()).get_dof_indices(side_dof_indices[1]);
941 bool own_element_id[2];
942 own_element_id[0] =
feo->
dh()->cell_accessor_from_element(cell_sub.
idx()).is_own();
943 own_element_id[1] =
feo->
dh()->cell_accessor_from_element(cell.
idx()).is_own();
951 for (
unsigned int n=0; n<2; ++n)
952 for (
unsigned int i=0; i<ndofs_side; i++)
953 for (
unsigned int m=0; m<2; ++m)
954 for (
unsigned int j=0; j<ndofs_side; j++)
955 local_matrix[n][m][i*(ndofs_side)+j] = 0;
958 for (
unsigned int k=0; k<qsize; k++)
961 double mu =
lame_mu(young[k], poisson[k]);
964 for (
int n=0; n<2; n++)
966 if (!own_element_id[n])
continue;
968 for (
unsigned int i=0; i<n_dofs[n]; i++)
970 arma::vec3 vi = (n==0)?arma::zeros(3):vec_side.value(i,k);
971 arma::vec3 vf = (n==1)?arma::zeros(3):vec_sub.value(i,k);
972 arma::mat33 gvft = (n==0)?vec_sub.grad(i,k):arma::zeros(3,3);
974 for (
int m=0; m<2; m++)
975 for (
unsigned int j=0; j<n_dofs[m]; j++) {
976 arma::vec3 ui = (m==0)?arma::zeros(3):vec_side.value(j,k);
977 arma::vec3 uf = (m==1)?arma::zeros(3):vec_sub.value(j,k);
979 double divuit = (m==1)?arma::trace(guit):0;
981 local_matrix[n][m][i*n_dofs[m] + j] +=
984 2/csection_lower[k]*(mu*(uf-ui)+(mu+lambda)*(
arma::dot(uf-ui,nv)*nv))
985 + mu*arma::trans(guit)*nv
989 )*fe_values_sub.
JxW(k);
996 for (
unsigned int n=0; n<2; ++n)
997 for (
unsigned int m=0; m<2; ++m)
998 ls->
mat_set_values(n_dofs[n], side_dof_indices[n].
data(), n_dofs[m], side_dof_indices[m].
data(), local_matrix[n][m]);
1004 template<
unsigned int dim>
1007 if (dim == 1)
return;
1013 const unsigned int ndofs_side =
feo->
fe<dim>()->n_dofs();
1014 const unsigned int ndofs_sub =
feo->
fe<dim-1>()->n_dofs();
1015 const unsigned int qsize =
feo->
q<dim-1>()->size();
1019 PetscScalar local_rhs[2][ndofs_side];
1025 side_dof_indices[0].resize(ndofs_sub);
1026 side_dof_indices[1].resize(ndofs_side);
1029 for (
unsigned int inb=0; inb<
feo->
dh()->n_loc_nb(); inb++)
1036 feo->
dh()->cell_accessor_from_element(cell_sub.
idx()).get_dof_indices(side_dof_indices[0]);
1037 fe_values_sub.
reinit(cell_sub);
1040 feo->
dh()->cell_accessor_from_element(cell.
idx()).get_dof_indices(side_dof_indices[1]);
1044 bool own_element_id[2];
1045 own_element_id[0] =
feo->
dh()->cell_accessor_from_element(cell_sub.
idx()).is_own();
1046 own_element_id[1] =
feo->
dh()->cell_accessor_from_element(cell.
idx()).is_own();
1051 for (
unsigned int n=0; n<2; ++n)
1052 for (
unsigned int i=0; i<ndofs_side; i++)
1053 local_rhs[n][i] = 0;
1056 for (
unsigned int k=0; k<qsize; k++)
1060 for (
int n=0; n<2; n++)
1062 if (!own_element_id[n])
continue;
1064 for (
unsigned int i=0; i<n_dofs[n]; i++)
1066 arma::vec3 vi = (n==0)?arma::zeros(3):vec_side.value(i,k);
1067 arma::vec3 vf = (n==1)?arma::zeros(3):vec_sub.value(i,k);
1069 local_rhs[n][i] -= frac_sigma[k]*
arma::dot(vf-vi,potential[k]*nv)*fe_values_sub.
JxW(k);
1074 for (
unsigned int n=0; n<2; ++n)
1083 template<
unsigned int dim>
1088 const unsigned int ndofs =
feo->
fe<dim>()->n_dofs(), qsize =
feo->
q<dim-1>()->size();
1091 double local_rhs[ndofs];
1098 for (
auto cell :
feo->
dh()->own_range())
1103 for (
unsigned int si=0; si<elm->
n_sides(); ++si)
1106 if (edg.
n_sides() > 1)
continue;
1110 if (edg.
side(0)->
dim() != dim-1)
1131 feo->
dh()->cell_accessor_from_element(cell.
idx()).get_dof_indices(side_dof_indices);
1133 fill_n(local_rhs, ndofs, 0);
1134 local_flux_balance_vector.assign(ndofs, 0);
1139 for (
unsigned int k=0; k<qsize; k++)
1140 for (
unsigned int i=0; i<ndofs; i++)
1145 for (
unsigned int k=0; k<qsize; k++)
1146 for (
unsigned int i=0; i<ndofs; i++)
1151 for (
unsigned int k=0; k<qsize; k++)
1153 for (
unsigned int i=0; i<ndofs; i++)
1154 local_rhs[i] += csection[k]*
arma::dot(
vec.value(i,k),bc_traction[k] + bc_potential[k]*fe_values_side.
normal_vector(k))*fe_values_side.
JxW(k);
BCField< 3, FieldValue< 3 >::Enum > bc_type
BCField< 3, FieldValue< 3 >::VectorFixed > bc_displacement
Class MappingP1 implements the affine transformation of the unit cell onto the actual cell...
Field< 3, FieldValue< 3 >::TensorFixed > output_stress
unsigned int n_sides() const
Returns number of sides aligned with the edge.
Field< 3, FieldValue< 3 >::Scalar > young_modulus
static const Input::Type::Record & get_input_type()
Main balance input record type.
static auto subdomain(Mesh &mesh) -> IndexField
static constexpr const char * name()
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_von_mises_stress_ptr
std::shared_ptr< DOFHandlerMultiDim > dh_scalar()
Field< 3, FieldValue< 3 >::Scalar > output_von_mises_stress
Transformed quadrature weight for cell sides.
RegionSet get_region_set(const std::string &set_name) const
unsigned int * boundary_idx_
void assemble_matrix_element_side()
Assembles the fluxes between elements of different dimensions depending on displacement.
static constexpr Mask in_main_matrix
A field is part of main "stiffness matrix" of the equation.
void reinit(ElementAccessor< 3 > &cell, unsigned int sid)
Update cell-dependent data (gradients, Jacobians etc.)
Solver based on the original PETSc solver using MPIAIJ matrix and succesive Schur complement construc...
void inc()
Iterates to next local element.
Field< 3, FieldValue< 3 >::Scalar > region_id
unsigned int side_idx() const
Returns local index of the side on the element.
Field< 3, FieldValue< 3 >::Scalar > output_cross_section
static const Input::Type::Record & get_input_type()
The specification of output stream.
Edge edge() const
Returns pointer to the edge connected to the side.
void set_from_input(const Input::Record in_rec) override
virtual void start_add_assembly()
void output(TimeStep step)
virtual PetscErrorCode mat_zero_entries()
unsigned int get_loc_dof_indices(std::vector< LongIdx > &indices) const
Returns the indices of dofs associated to the cell on the local process.
virtual void rhs_set_values(int nrow, int *rows, double *vals)=0
void next_time()
Proceed to the next time according to current estimated time step.
static const Input::Type::Record & get_input_type()
Declare input record type for the equation TransportDG.
void assemble_rhs()
Assembles the right hand side (forces, boundary conditions, tractions).
arma::vec3 centre() const
Centre of side.
FiniteElement< dim > * fe()
static std::shared_ptr< OutputTime > create_output_stream(const std::string &equation_name, const Input::Record &in_rec, std::string unit_str)
This method delete all object instances of class OutputTime stored in output_streams vector...
LinSys * ls
Linear algebra system for the transport equation.
Fields computed from the mesh data.
virtual void start_allocation()
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::TensorFixed > > output_stress_ptr
Cell accessor allow iterate over DOF handler cells.
Class FEValues calculates finite element data on the actual cells such as shape function values...
virtual void finish_assembly()=0
Field< 3, FieldValue< 3 >::Scalar > cross_section
Pointer to DarcyFlow field cross_section.
Class FESystem for compound finite elements.
SideIter side(const unsigned int loc_index)
double lame_mu(double young, double poisson)
const RegionDB & region_db() const
std::shared_ptr< DOFHandlerMultiDim > dh()
const TimeStep & step(int index=-1) const
void update_solution() override
Computes the solution in one time instant.
arma::mat33 mat_t(const arma::mat33 &m, const arma::vec3 &n)
Basic time management functionality for unsteady (and steady) solvers (class Equation).
void assemble_rhs_element_side()
Assemble fluxes between different dimensions that are independent of displacement.
ElementAccessor< 3 > element() const
Returns iterator to the element of the side.
virtual void value_list(const std::vector< Point > &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list) const
void compute_output_fields()
Input::Record input_rec
Record with input specification.
Field< 3, FieldValue< 3 >::Scalar > potential_load
Potential of an additional (external) load.
Vec rhs
Vector of right hand side.
void view(const char *name="") const
Symmetric Gauss-Legendre quadrature formulae on simplices.
FEM for linear elasticity.
bool allocation_done
Indicates whether matrices have been preallocated.
ElementAccessor< 3 > element()
Transformed quadrature points.
unsigned int dim() const
Returns dimension of the side, that is dimension of the element minus one.
BCField< 3, FieldValue< 3 >::VectorFixed > bc_traction
bool is_boundary() const
Returns true for side on the boundary.
void solve_linear_system()
Solve without updating time step and without output.
Compound finite element on dim dimensional simplex.
void assemble_sources()
Assembles the right hand side vector due to volume sources.
double JxW(const unsigned int point_no) override
Return the product of Jacobian determinant and the quadrature weight at given quadrature point...
Definitions of basic Lagrangean finite elements with polynomial shape functions.
static constexpr Mask equation_external_output
Match an output field, that can be also copy of other field.
void update_output_fields()
unsigned int n_sides() const
static auto region_id(Mesh &mesh) -> IndexField
Type dot(const Mat< Type, nRows, nCols > &a, const Mat< Type, nRows, nCols > &b)
#define START_TIMER(tag)
Starts a timer with specified tag.
std::shared_ptr< DOFHandlerMultiDim > dh()
virtual Value::return_type const & value(const Point &p, const ElementAccessor< spacedim > &elm) const
Field< 3, FieldValue< 3 >::Scalar > output_divergence
void zero_time_step() override
Initialize solution in the zero time.
static constexpr Mask in_rhs
A field is part of the right hand side of the equation.
Shape function gradients.
void output_data()
Postprocesses the solution and writes to output file.
Mat stiffness_matrix
The stiffness matrix.
const FEValuesViews::Vector< dim, spacedim > & vector_view(unsigned int i) const
Accessor to vector values of multicomponent FE.
double measure() const
Calculate metrics of the side.
virtual const Vec * get_rhs()
arma::vec::fixed< spacedim > normal_vector(unsigned int point_no) override
Returns the normal vector to a side at given quadrature point.
virtual PetscErrorCode rhs_zero_entries()
Field< 3, FieldValue< 3 >::VectorFixed > load
void set_solution(Vec sol_vec)
Field< 3, FieldValue< 3 >::Scalar > fracture_sigma
Transition parameter for diffusive transfer on fractures.
void assemble_fluxes_boundary()
Assembles the fluxes on the boundary.
void mark_input_times(const TimeGovernor &tg)
vector< Neighbour > vb_neighbours_
void assemble_boundary_conditions()
Assembles the r.h.s. components corresponding to the Dirichlet boundary conditions for a given space ...
void set_input_list(Input::Array input_list, const TimeGovernor &tg)
Field< 3, FieldValue< 3 >::Scalar > poisson_ratio
void initialize(std::shared_ptr< OutputTime > stream, Mesh *mesh, Input::Record in_rec, const TimeGovernor &tg)
void set_components(const std::vector< string > &names)
EquationOutput output_fields
static const int registrar
Registrar of class to factory.
void set_field(const RegionSet &domain, FieldBasePtr field, double time=0.0)
void next_time()
Pass to next time and update equation data.
bool set_time(const TimeStep &time, LimitSide limit_side)
void initialize() override
EqData data_
Field data for model parameters.
double lame_lambda(double young, double poisson)
static const Input::Type::Selection & get_bc_type_selection()
static const Input::Type::Record & get_input_type()
Definitions of particular quadrature rules on simplices.
#define WarningOut()
Macro defining 'warning' record of log.
virtual SolveInfo solve()=0
#define END_TIMER(tag)
Ends a timer with specified tag.
static string default_output_field()
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::VectorFixed > > output_field_ptr
vector< arma::vec::fixed< spacedim > > & point_list()
Return coordinates of all quadrature points in the actual cell system.
static const Input::Type::Record & get_input_type()
Edge edge(uint edge_idx) const
void set_mesh(const Mesh &mesh)
void assemble_stiffness_matrix()
Assembles the stiffness matrix.
virtual void mat_set_values(int nrow, int *rows, int ncol, int *cols, double *vals)=0
Class for representation SI units of Fields.
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_div_ptr
void assemble_volume_integrals()
Assembles the volume integrals into the stiffness matrix.
virtual const Mat * get_matrix()
void calculate_cumulative_balance()
MappingP1< dim, 3 > * mapping()
Elasticity(Mesh &init_mesh, const Input::Record in_rec, TimeGovernor *tm=nullptr)
Constructor.
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_cross_section_ptr
static UnitSI & dimensionless()
Returns dimensionless unit.
#define DebugOut()
Macro defining 'debug' record of log.
static bool print_message_table(ostream &stream, std::string equation_name)
unsigned int idx() const
Return local idx of element in boundary / bulk part of element vector.
Field< 3, FieldValue< 3 >::VectorFixed > output_field
std::shared_ptr< DOFHandlerMultiDim > dh_tensor()
SideIter side(const unsigned int i) const
Gets side iterator of the i -th side.
void output_vector_gather()
Field< 3, FieldValue< 3 >::Scalar > subdomain
Definitions of Raviart-Thomas finite elements.
FieldCommon & output_type(OutputTime::DiscreteSpace rt)
ElementAccessor< 3 > element_accessor()
std::shared_ptr< OutputTime > output_stream_
FEObjects(Mesh *mesh_, unsigned int fe_order)
Mechanics::FEObjects * feo
Finite element objects.
void reinit(ElementAccessor< 3 > &cell)
Update cell-dependent data (gradients, Jacobians etc.)
double dirichlet_penalty(SideIter side)
Penalty to enforce boundary value in weak sense.
Transformed quadrature weights.
Calculates finite element data on a side.
arma::vec::fixed< spacedim > point(const unsigned int point_no)
Return coordinates of the quadrature point in the actual cell system.