|
ASPECT
|

Static Public Member Functions | |
| static void | declare_parameters (ParameterHandler &prm) |
| static void | register_mesh_deformation (const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), std::unique_ptr< Interface< dim >>(*factory_function)()) |
| static void | write_plugin_graph (std::ostream &output_stream) |
Static Public Member Functions inherited from aspect::SimulatorAccess< dim > | |
| static void | get_composition_values_at_q_point (const std::vector< std::vector< double >> &composition_values, const unsigned int q, std::vector< double > &composition_values_at_q_point) |
Friends | |
| class | Simulator< dim > |
| class | SimulatorAccess< dim > |
The MeshDeformationHandler that handles the motion of the surface, the internal nodes and computes the Arbitrary-Lagrangian-Eulerian correction terms.
Definition at line 117 of file simulator.h.
| aspect::MeshDeformation::MeshDeformationHandler< dim >::MeshDeformationHandler | ( | Simulator< dim > & | simulator | ) |
Initialize the mesh deformation handler, allowing it to read in relevant parameters as well as giving it a reference to the Simulator that owns it, since it needs to make fairly extensive changes to the internals of the simulator.
|
override |
Destructor for the mesh deformation handler.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::initialize | ( | ) |
Initialization function of the MeshDeformationHandler.
The default implementation of this function does nothing.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::set_assemblers | ( | const SimulatorAccess< dim > & | simulator_access, |
| aspect::Assemblers::Manager< dim > & | assemblers | ||
| ) | const |
Called by Simulator::set_assemblers() to allow the FreeSurface plugin to register its assembler.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::update | ( | ) |
Update function of the MeshDeformationHandler. This function allows the individual mesh deformation objects to update.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::execute | ( | ) |
The main execution step for the mesh deformation implementation. This computes the motion of the surface, moves the boundary nodes accordingly, redistributes the internal nodes in order to preserve mesh regularity, and calculates the Arbitrary-Lagrangian-Eulerian correction terms for advected quantities.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::setup_dofs | ( | ) |
Allocates and sets up the members of the MeshDeformationHandler. This is called by Simulator<dim>::setup_dofs()
|
static |
Declare parameters for the mesh deformation handling.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::parse_parameters | ( | ParameterHandler & | prm | ) |
Parse parameters for the mesh deformation handling.
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::save | ( | Archive & | ar, |
| const unsigned int | version | ||
| ) | const |
Write the data of this object to a stream for the purpose of serialization.
Definition at line 820 of file interface.h.
References aspect::MeshDeformation::MeshDeformationHandler< dim >::save().
Referenced by aspect::MeshDeformation::MeshDeformationHandler< dim >::save().
| void aspect::MeshDeformation::MeshDeformationHandler< dim >::load | ( | Archive & | ar, |
| const unsigned int | version | ||
| ) |
Read the data of this object from a stream for the purpose of serialization.
Definition at line 837 of file interface.h.
References aspect::MeshDeformation::MeshDeformationHandler< dim >::load().
Referenced by aspect::MeshDeformation::MeshDeformationHandler< dim >::load().
|
static |
A function that is used to register mesh deformation objects in such a way that the Manager can deal with all of them without having to know them by name. This allows the files in which individual plugins are implemented to register these plugins, rather than also having to modify the Manager class by adding the new initial mesh deformation plugin class.
| name | A string that identifies the mesh deformation model |
| description | A text description of what this model does and that will be listed in the documentation of the parameter file. |
| declare_parameters_function | A pointer to a function that can be used to declare the parameters that this mesh deformation model wants to read from input files. |
| factory_function | A pointer to a function that can create an object of this mesh deformation model. |
| const std::map<types::boundary_id, std::vector<std::string> >& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_active_mesh_deformation_names | ( | ) | const |
Return a map of boundary indicators to the names of all mesh deformation models currently used in the computation, as specified in the input file.
| const std::map<types::boundary_id,std::vector<std::unique_ptr<Interface<dim> > > >& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_active_mesh_deformation_models | ( | ) | const |
Return a map of boundary indicators to vectors of pointers to all mesh deformation models currently used in the computation, as specified in the input file.
| const std::set<types::boundary_id>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_active_mesh_deformation_boundary_indicators | ( | ) | const |
Return a set of all the indicators of boundaries with mesh deformation objects on them.
| const std::set<types::boundary_id>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_tangential_velocity_with_active_mesh_deformation_boundary_indicators | ( | ) | const |
Return a set of all the indicators of boundaries with mesh deformation objects on them that also have tangential velocity boundary conditions.
| const std::set<types::boundary_id>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_tangential_velocity_without_active_mesh_deformation_boundary_indicators | ( | ) | const |
Return a set of all the indicators of boundaries without mesh deformation objects on them that have tangential velocity boundary conditions.
| const std::set<types::boundary_id>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_boundary_indicators_requiring_stabilization | ( | ) | const |
Return a set of all the indicators of boundaries that require surface stabilization.
| const std::set<types::boundary_id>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_free_surface_boundary_indicators | ( | ) | const |
Return the boundary id of the surface that has a free surface mesh deformation object. If no free surface is used, an empty set is returned.
| double aspect::MeshDeformation::MeshDeformationHandler< dim >::get_free_surface_theta | ( | ) | const |
Return the stabilization parameter for the free surface.
| const LinearAlgebra::Vector& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_initial_topography | ( | ) | const |
Return the initial topography stored on the Q1 finite element that describes the mesh geometry. Note that a topography is set for all mesh nodes, but only the values of surface boundary nodes are correct. The internal nodes get the same initial topography as the corresponding surface node. In other words, there is no decrease of the initial topography with depth. However, only the topography stored at the surface nodes is taken into account in the diffusion plugin that uses this function. TODO Once all initial_topography is prescribed through initial_mesh_deformation, this function can be removed.
| const LinearAlgebra::Vector& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_mesh_displacements | ( | ) | const |
Return the mesh displacements based on the mesh deformation DoFHandler you can access with get_mesh_deformation_dof_handler().
| const DoFHandler<dim>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_mesh_deformation_dof_handler | ( | ) | const |
Return the DoFHandler used to represent the mesh deformation space.
|
inline |
Go through the list of all mesh deformation objects that have been selected in the input file (and are consequently currently active) and return true if one of them has the desired type specified by the template argument.
This function can only be called if the given template type (the first template argument) is a class derived from the Interface class in this namespace.
Definition at line 859 of file interface.h.
|
inline |
Go through the list of all mesh deformation objects that have been selected in the input file (and are consequently currently active) and see if one of them has the type specified by the template argument or can be cast to that type. If so, return a reference to it. If no mesh deformation object is active that matches the given type, throw an exception.
This function can only be called if the given template type (the first template argument) is a class derived from the Interface class in this namespace.
Definition at line 875 of file interface.h.
References AssertThrow, StandardExceptions::ExcMessage(), and aspect::PrescribedSolution::get_valid_model_names_pattern().
| const Mapping<dim>& aspect::MeshDeformation::MeshDeformationHandler< dim >::get_level_mapping | ( | const unsigned int | level | ) | const |
If multilevel solvers are used, we need a mapping on each multigrid level. These are automatically updated by this handler class and can be accessed with this method.
| double aspect::MeshDeformation::MeshDeformationHandler< dim >::boundary_composition | ( | const types::boundary_id | boundary_indicator, |
| const Point< dim > & | position, | ||
| const unsigned int | compositional_field | ||
| ) | const |
Loop over all mesh deformation objects that are active on the boundary with the ID boundary_indicator and sum their contributions to the compositional field with index compositional_field at the given position. For example, the plugin might want to set the field representing sediment to 1 if deposition occurs, or a field representing deposition depth to the depth below sea level.
|
static |
For the current plugin subsystem, write a connection graph of all of the plugins we know about, in the format that the programs dot and neato understand. This allows for a visualization of how all of the plugins that ASPECT knows about are interconnected, and connect to other parts of the ASPECT code.
| output_stream | The stream to write the output to. |
| aspect::MeshDeformation::MeshDeformationHandler< dim >::DeclException1 | ( | ExcMeshDeformationNameNotFound | , |
| std::string | |||
| ) |
Exception.
|
private |
Compute the initial constraints for the mesh displacement on the boundaries of the domain. This is used on the mesh deformation boundaries to describe a displacement (initial topography) to be used during the simulation. The displacement is given by the active deformation plugins.
The inhomogeneities contributed by the deformation plugins are multiplied by initial_deformation_scale. This is used to apply the initial deformation incrementally over a number of substeps.
|
private |
Compute the constraints for the mesh velocity on the boundaries of the domain. On the mesh deformation boundaries, the velocity is given by the active deformation plugins.
Velocities on free-slip boundaries are constrained to be tangential to those boundaries. Velocities on no-slip boundaries are set to be zero. If a no-slip boundary is marked as additional tangential, then velocities are constrained as tangential.
|
private |
Solve vector Laplacian equation for internal mesh displacements and update the current displacement vector based on the solution.
|
private |
Solve vector Laplacian equation using GMG for internal mesh displacements and update the current displacement vector based on the solution.
|
private |
Return the polynomial degree to use for the mesh mapping.
If the parameter Mesh deformation mapping order'' is set to auto'', this function chooses an order based on the geometry and mesh deformation finite element degree. Otherwise, it returns the user-provided explicit value.
|
private |
Compute mesh displacements using GMG solver for a specific mesh deformation finite element degree. This is the implementation called by compute_mesh_displacements_gmg().
|
private |
Check that the current mesh deformation has not produced any cells with a negative Jacobian determinant (inverted cells) in the deformed mesh. If such a cell is found, this function aborts with an explanatory error message.
|
private |
Solve the matrix-free mesh deformation system using a geometric multigrid preconditioner with local smoothing.
|
private |
Solve the matrix-free mesh deformation system using a geometric multigrid preconditioner with global coarsening.
|
private |
Return the boundary indicators that are treated as homogeneous Dirichlet conditions for the mesh deformation Laplace problem: zero-displacement boundaries plus boundaries that have an active mesh deformation object.
|
private |
Copy mesh_displacements into a deal.II distributed vector on the locally owned mesh-deformation DoFs, for use with the matrix-free GMG transfers.
|
private |
Set up the multigrid hierarchy used by the local-smoothing mesh deformation solver.
|
private |
Set up the multigrid hierarchy used by the global-coarsening mesh deformation solver.
|
private |
Set up the vector with initial displacements of the mesh due to the initial topography, as supplied by the initial topography plugin based on the surface coordinates of the mesh nodes. We set all entries to the initial topography based on its surface coordinates, i.e. the initial topography is not corrected for depth from the surface as it is for the initial mesh deformation. TODO this is ok for now, because the surface diffusion plugin only cares about the initial topography at the surface, but it would be more correct if it sets the initial topography to the actual initial distortion of the mesh cells. When all initial_topography plugins are converted to the new initial_mesh_deformation functionality, this function can be removed.
|
private |
Calculate the velocity of the mesh for ALE corrections.
|
private |
Update the mesh deformation on the levels of the local-smoothing multigrid hierarchy.
|
private |
Update the mesh deformation on the triangulations of the global-coarsening multigrid hierarchy.
|
friend |
Definition at line 813 of file interface.h.
|
friend |
Definition at line 814 of file interface.h.
|
private |
Reference to the Simulator object to which a MeshDeformationHandler instance belongs.
Definition at line 590 of file interface.h.
|
private |
Finite element for the mesh deformation implementation, which is used for tracking mesh deformation.
Definition at line 596 of file interface.h.
|
private |
DoFHandler for the mesh deformation implementation.
Definition at line 601 of file interface.h.
|
private |
BlockVector which stores the mesh velocity in the Stokes finite element space. This is used for ALE corrections.
Definition at line 608 of file interface.h.
|
private |
Vector for storing the positions of the mesh vertices. This is used for calculating the mapping from the reference cell to the position of the cell in the deformed mesh. This must be redistributed upon mesh refinement.
Definition at line 616 of file interface.h.
|
private |
mesh_displacements from the last time step.
Definition at line 621 of file interface.h.
|
private |
Vector for storing the positions of the mesh vertices at the initial timestep. This must be redistributed upon mesh refinement. We need to store the initial topography because it is not taken into account into the mesh displacements used by the MappingQ1Eulerian. The current mesh displacements plus the initial topography provide the actual topography at any time.
Definition at line 631 of file interface.h.
|
private |
Vector for storing the mesh velocity in the mesh deformation finite element space, which is, in general, not the same finite element space as the Stokes system. This is used for interpolating the mesh velocity in the mesh deformation finite element space onto the velocity in the Stokes finite element space, which is then used for making the ALE correction in the advection equations.
Definition at line 641 of file interface.h.
|
private |
IndexSet for the locally owned DoFs for the mesh system
Definition at line 646 of file interface.h.
|
private |
IndexSet for the locally relevant DoFs for the mesh system
Definition at line 651 of file interface.h.
|
private |
Storage for the mesh velocity constraints for solving the elliptic problem.
Definition at line 657 of file interface.h.
|
private |
Storage for the mesh vertex constraints for keeping the mesh conforming upon redistribution.
Definition at line 663 of file interface.h.
|
private |
A map of boundary ids to mesh deformation objects that have been requested in the parameter file.
Definition at line 669 of file interface.h.
|
private |
Map from boundary id to a vector of names representing mesh deformation objects.
Definition at line 675 of file interface.h.
|
private |
The set of boundary indicators for which mesh deformation objects are set and that therefore can deform over time as prescribed in the mesh_deformation_objects.
Definition at line 682 of file interface.h.
|
private |
The set of boundary indicators for which mesh deformation objects are set and that also have tangential velocity boundary conditions.
Definition at line 689 of file interface.h.
|
private |
The set of boundary indicators for which mesh deformation objects are not set and that have tangential velocity boundary conditions.
Definition at line 696 of file interface.h.
|
private |
A set of boundary indicators that denote those boundaries that are allowed to move their mesh tangential to the boundary.
Definition at line 702 of file interface.h.
|
private |
A set of boundary indicators, on which mesh deformation is prescribed to be zero (fixed boundaries that never move). All boundaries except those in prescribed_mesh_deformation_boundary_indicators and tangential_mesh_deformation_boundary_indicators are in this set.
Definition at line 710 of file interface.h.
|
private |
The boundary indicator(s) of the free surface(s). This is the subset of prescribed_mesh_deformation_boundary_indicators for which the 'free surface' plugin was selected.
Definition at line 717 of file interface.h.
|
private |
The set of boundary indicators for which the mesh deformation objects need surface stabilization.
Definition at line 723 of file interface.h.
|
private |
Definition at line 725 of file interface.h.
|
private |
Stabilization parameter for the free surface. Should be between zero and one. A value of zero means no stabilization. See Kaus et. al. 2010 for more details.
This variable is read from the parameter file through a parameter called 'Free surface stabilization theta'.
Definition at line 734 of file interface.h.
|
private |
Whether mapping order selection is automatic (``auto'').
Definition at line 739 of file interface.h.
|
private |
Explicit mapping order used when automatic selection is disabled.
Definition at line 744 of file interface.h.
|
private |
Number of substeps over which the initial mesh deformation (initial topography) is applied. The full initial deformation is split into this many equal steps; on substep k of K only a fraction k/K of the initial topography is prescribed, and each subsequent substep is solved on the already deformed configuration. This avoids producing inverted cells (negative Jacobian determinant) for steep initial topography, which a single-shot deformation (K = 1) can create.
Definition at line 756 of file interface.h.
|
private |
Mesh deformation DoFHandlers on the triangulations of the global coarsening hierarchy.
Definition at line 762 of file interface.h.
|
private |
Hanging-node, periodicity, and Dirichlet constraints for the mesh deformation DoFHandlers on the global coarsening hierarchy. These are used by the two-level transfers. No-flux constraints are rebuilt from the current mapping when assembling the level operators.
Definition at line 771 of file interface.h.
|
private |
Two-level transfer operators for the global coarsening hierarchy.
Definition at line 778 of file interface.h.
|
private |
If required, store a mapping for each multigrid level.
Definition at line 783 of file interface.h.
|
private |
One vector on each multigrid level for the mesh displacement used in the mapping.
Definition at line 788 of file interface.h.
|
private |
Dirichlet and refinement-edge constraints used to build local_smoothing_mg_transfer. deal.II stores a pointer to this object, so it must outlive the transfer.
Definition at line 795 of file interface.h.
|
private |
Multigrid transfer operator for the displacements used by the local-smoothing GMG implementation. Only one of this and global_coarsening_mg_transfer is allocated, depending on the selected Stokes GMG type.
Definition at line 803 of file interface.h.
|
private |
Multigrid transfer operator for the displacements used by the global-coarsening GMG implementation. Only one of this and local_smoothing_mg_transfer is allocated, depending on the selected Stokes GMG type.
Definition at line 811 of file interface.h.