[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
meshmover_linear_elasticity.hpp
1 #ifndef __MESHMOVER_LINEAR_ELASTICITY_H__
2 #define __MESHMOVER_LINEAR_ELASTICITY_H__
3 
4 #include <deal.II/lac/trilinos_sparse_matrix.h>
5 
6 #include "parameters/all_parameters.h"
7 
8 #include "high_order_grid.h"
9 
10 namespace PHiLiP {
11 
12 namespace MeshMover
13 {
16  template <int dim = PHILIP_DIM, typename real = double>
18  {
20  using VectorType = dealii::LinearAlgebra::distributed::Vector<real>;
22  using DoFHandlerType = dealii::DoFHandler<dim>;
23 #if PHILIP_DIM==1 // dealii::parallel::distributed::Triangulation<dim> does not work for 1D
24 
28  using Triangulation = dealii::Triangulation<dim>;
29 #else
30 
34  using Triangulation = dealii::parallel::distributed::Triangulation<dim>;
35 #endif
36  public:
39  const Triangulation &_triangulation,
40  const std::shared_ptr<dealii::MappingFEField<dim,dim,VectorType,DoFHandlerType>> mapping_fe_field,
41  const DoFHandlerType &_dof_handler,
42  const dealii::LinearAlgebra::distributed::Vector<int> &_boundary_ids_vector,
43  const dealii::LinearAlgebra::distributed::Vector<double> &_boundary_displacements_vector);
44 
47  const HighOrderGrid<dim,real> &high_order_grid,
48  const dealii::LinearAlgebra::distributed::Vector<double> &boundary_displacements_vector);
49 
53 
57  void evaluate_dXvdXs();
58 
66  void
67  apply_dXvdXvs(std::vector<dealii::LinearAlgebra::distributed::Vector<double>> &list_of_vectors, dealii::TrilinosWrappers::SparseMatrix &output_matrix);
68 
76  void
77  apply_dXvdXvs(const dealii::LinearAlgebra::distributed::Vector<double> &input_vector, dealii::LinearAlgebra::distributed::Vector<double> &output_vector);
78 
86  void
88  const dealii::LinearAlgebra::distributed::Vector<double> &input_vector,
89  dealii::LinearAlgebra::distributed::Vector<double> &output_vector);
90 
96  dealii::AffineConstraints<double> hanging_node_constraints;
97 
103  //dealii::TrilinosWrappers::SparseMatrix dXvdXs;
104  std::vector<dealii::LinearAlgebra::distributed::Vector<double>> dXvdXs;
105 
106  // /** Sparse matrix containing the dXvdXs sensititivies.
107  // */
108  // dealii::TrilinosWrappers::SparseMatrix<double> dXvdXs_matrix;
109 
110  private:
112  void setup_system();
114  void assemble_system();
115 
116 
122  void solve_timestep();
123 
127  unsigned int solve_linear_problem();
128 
130  const std::shared_ptr<dealii::MappingFEField<dim,dim,VectorType,DoFHandlerType>> mapping_fe_field;
135  const dealii::QGauss<dim> quadrature_formula;
136 
139  dealii::TrilinosWrappers::SparseMatrix system_matrix_unconstrained;
143  dealii::LinearAlgebra::distributed::Vector<double> system_rhs_unconstrained;
144 
146  dealii::TrilinosWrappers::SparseMatrix system_matrix;
152  dealii::LinearAlgebra::distributed::Vector<double> system_rhs;
153 
156  dealii::AffineConstraints<double> all_constraints;
159  dealii::AffineConstraints<double> dirichlet_boundary_constraints;
160 
161  MPI_Comm mpi_communicator;
162  const unsigned int n_mpi_processes;
163  const unsigned int this_mpi_process;
164  dealii::ConditionalOStream pcout;
165  std::vector<dealii::types::global_dof_index> local_dofs_per_process;
166  dealii::IndexSet locally_owned_dofs;
167  dealii::IndexSet locally_relevant_dofs;
168 
172  const dealii::LinearAlgebra::distributed::Vector<int> &boundary_ids_vector;
175  const dealii::LinearAlgebra::distributed::Vector<double> &boundary_displacements_vector;
176 
179  dealii::LinearAlgebra::distributed::Vector<double> tensor_to_vector(const std::vector<dealii::Tensor<1,dim,real>> &boundary_displacements_tensors) const;
180 
181  };
182 } // namespace MeshMover
183 
184 } // namespace PHiLiP
185 
186 #endif
dealii::LinearAlgebra::distributed::Vector< double > system_rhs_unconstrained
const dealii::LinearAlgebra::distributed::Vector< int > & boundary_ids_vector
dealii::TrilinosWrappers::SparseMatrix system_matrix
System matrix corresponding to linearized elasticity problem.
dealii::ConditionalOStream pcout
ConditionalOStream for output.
dealii::IndexSet locally_owned_dofs
Locally owned DoFs.
const std::shared_ptr< dealii::MappingFEField< dim, dim, VectorType, DoFHandlerType > > mapping_fe_field
MappingFEField corresponding to curved mesh.
Files for the baseline physics.
Definition: ADTypes.hpp:10
dealii::IndexSet locally_relevant_dofs
Locally relevant DoFs.
void apply_dXvdXvs_transpose(const dealii::LinearAlgebra::distributed::Vector< double > &input_vector, dealii::LinearAlgebra::distributed::Vector< double > &output_vector)
dealii::LinearAlgebra::distributed::Vector< double > tensor_to_vector(const std::vector< dealii::Tensor< 1, dim, real >> &boundary_displacements_tensors) const
dealii::AffineConstraints< double > dirichlet_boundary_constraints
void apply_dXvdXvs(std::vector< dealii::LinearAlgebra::distributed::Vector< double >> &list_of_vectors, dealii::TrilinosWrappers::SparseMatrix &output_matrix)
dealii::parallel::distributed::Triangulation< dim > Triangulation
dealii::TrilinosWrappers::SparseMatrix system_matrix_unconstrained
std::vector< dealii::types::global_dof_index > local_dofs_per_process
List of number of DoFs per process.
dealii::LinearAlgebra::distributed::Vector< double > system_rhs
LinearElasticity(const Triangulation &_triangulation, const std::shared_ptr< dealii::MappingFEField< dim, dim, VectorType, DoFHandlerType >> mapping_fe_field, const DoFHandlerType &_dof_handler, const dealii::LinearAlgebra::distributed::Vector< int > &_boundary_ids_vector, const dealii::LinearAlgebra::distributed::Vector< double > &_boundary_displacements_vector)
Constructor.
dealii::DoFHandler< dim > DoFHandlerType
DoFHandler.
void setup_system()
Allocation and boundary condition setup.
void assemble_system()
Assemble the system and its right-hand side.
const DoFHandlerType & dof_handler
Same DoFHandler as the HighOrderGrid.
dealii::AffineConstraints< double > hanging_node_constraints
dealii::LinearAlgebra::distributed::Vector< real > VectorType
Distributed vector of double.
dealii::AffineConstraints< double > all_constraints
const dealii::QGauss< dim > quadrature_formula
Integration strength of the mesh order plus one.
std::vector< dealii::LinearAlgebra::distributed::Vector< double > > dXvdXs
const unsigned int n_mpi_processes
Number of MPI processes.
const dealii::LinearAlgebra::distributed::Vector< double > & boundary_displacements_vector