|
| PoissonNitscheInterface () |
|
void | run () |
|
| ParameterAcceptor (const std::string §ion_name="") |
|
unsigned int | get_acceptor_id () const |
|
virtual | ~ParameterAcceptor () override |
|
virtual void | declare_parameters (ParameterHandler &prm) |
|
virtual void | parse_parameters (ParameterHandler &prm) |
|
std::string | get_section_name () const |
|
std::vector< std::string > | get_section_path () const |
|
void | add_parameter (const std::string &entry, ParameterType ¶meter, const std::string &documentation="", ParameterHandler &prm_=prm, const Patterns::PatternBase &pattern=*Patterns::Tools::Convert< ParameterType >::to_pattern()) |
|
void | enter_subsection (const std::string &subsection) |
|
void | leave_subsection () |
|
void | enter_my_subsection (ParameterHandler &prm) |
|
void | leave_my_subsection (ParameterHandler &prm) |
|
void | serialize (Archive &ar, const unsigned int version) |
|
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
unsigned int | n_subscriptions () const |
|
void | list_subscribers (StreamType &stream) const |
|
void | list_subscribers () const |
|
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
unsigned int | n_subscriptions () const |
|
void | list_subscribers (StreamType &stream) const |
|
void | list_subscribers () const |
|
| Subscriptor () |
|
| Subscriptor (const Subscriptor &) |
|
| Subscriptor (Subscriptor &&) noexcept |
|
virtual | ~Subscriptor () |
|
Subscriptor & | operator= (const Subscriptor &) |
|
Subscriptor & | operator= (Subscriptor &&) noexcept |
|
void | serialize (Archive &ar, const unsigned int version) |
|
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
unsigned int | n_subscriptions () const |
|
void | list_subscribers (StreamType &stream) const |
|
void | list_subscribers () const |
|
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
|
unsigned int | n_subscriptions () const |
|
void | list_subscribers (StreamType &stream) const |
|
void | list_subscribers () const |
|
|
const std::string | component_names = "u" |
|
ParsedTools::GridGenerator< spacedim, spacedim > | grid_generator |
|
ParsedTools::GridGenerator< dim, spacedim > | embedded_grid_generator |
|
ParsedTools::GridRefinement | grid_refinement |
|
Triangulation< spacedim, spacedim > | space_triangulation |
| The actual triangulations. More...
|
|
Triangulation< dim, spacedim > | embedded_triangulation |
|
std::unique_ptr< GridTools::Cache< spacedim, spacedim > > | space_cache |
| GridTools::Cache objects are used to cache all the necessary information about a given triangulation, such as its Mapping, Bounding Boxes, etc. More...
|
|
std::unique_ptr< GridTools::Cache< dim, spacedim > > | embedded_cache |
|
std::vector< std::tuple< typename Triangulation< spacedim, spacedim >::cell_iterator, typename Triangulation< dim, spacedim >::cell_iterator, Quadrature< spacedim > > > | cells_and_quads |
| The coupling between the two grids is ultimately encoded in this vector. More...
|
|
ParsedTools::FiniteElement< spacedim, spacedim > | space_fe |
|
DoFHandler< spacedim, spacedim > | space_dh |
| The actual DoFHandler class. More...
|
|
std::unique_ptr< Mapping< spacedim, spacedim > > | mapping |
| According to the Triangulation type, we use a MappingFE or a MappingQ, to make sure we can run the program both on a tria/tetra grid and on quad/hex grids. More...
|
|
|
AffineConstraints< double > | space_constraints |
|
SparsityPattern | sparsity_pattern |
|
SparseMatrix< double > | system_matrix |
|
Vector< double > | solution |
|
Vector< double > | system_rhs |
|
ParsedLAC::InverseOperator | inverse_operator |
|
ParsedLAC::AMGPreconditioner | preconditioner |
|
|
ParsedTools::Constants | constants |
|
ParsedTools::Function< spacedim > | forcing_term |
| The actual function to use as a forcing term. More...
|
|
ParsedTools::Function< spacedim > | embedded_value |
| This is the value we want to impose on the embedded domain. More...
|
|
ParsedTools::Function< spacedim > | nitsche_coefficient |
| The coefficient in front of the Nitsche contribution to the stiffness matrix. More...
|
|
ParsedTools::Function< spacedim > | exact_solution |
| The actual function to use as a exact solution when computing the errors. More...
|
|
ParsedTools::BoundaryConditions< spacedim > | boundary_conditions |
|
|
TimerOutput | timer |
|
ParsedTools::ConvergenceTable | error_table |
|
ParsedTools::DataOut< spacedim, spacedim > | data_out |
| Choosing as embedded space the square \([-.0.45,0.45]^2\) and as embedding space the square \([-1,1]^2\), with embedded value the function \(g(x,y)=1\), this is what we get. More...
|
|
unsigned int | console_level = 1 |
| Level of log verbosity. More...
|
|
double | penalty = 100.0 |
| The penalty parameter which multiplies Nitsche's terms. More...
|
|
const std::string | section_name |
|
std::vector< std::string > | subsections |
|
template<int dim, int spacedim = dim>
class PDEs::Serial::PoissonNitscheInterface< dim, spacedim >
Imposing an interaface condition in Poisson problem, serial version.
Here we solve the Poisson equation:
\[ \begin{cases} - \Delta u = f & \text{ in } \Omega \subset R^{\text{spacedim}}\\ u = u_D = 0 & \text{ on } \partial \Omega \\ u = g & \text{on} B \\ \end{cases} \]
where B is a domain embedded in \Omega. The structure of the program is the usual one, what really changes is the weak form. To get that, we apply Nitsche's method in \(\Omega \setminus B\) and \(B\), separately, as done in step-70 tutorial. For an extended discussion see there and references therein. All in all, what one gets using Lagrangian finite elements in codimension 1 is to find \(u \in H_0^1(\Omega)\) s.t.
\begin{align*} (\nabla u, \nabla v) + 2 \beta \langle u,v \rangle_{\Gamma} =(f,v) + 2 \beta \langle g,v \rangle_{\Gamma} \end{align*}
for all test functions \(v \in H_0^1(\Omega)\). Here \(\Gamma = \partial B\) in codimension 1. The contributions from Nitsche's method then have to be added both to the stiffness matrix and to the right hand side. The thing here is that they have to be computed on the embedded grid, while \(u\) and \(v\) live on the ambient space.
Definition at line 107 of file poisson_nitsche_interface.h.
template<int dim, int spacedim = dim>
Choosing as embedded space the square \([-.0.45,0.45]^2\) and as embedding space the square \([-1,1]^2\), with embedded value the function \(g(x,y)=1\), this is what we get.
Taking a manufactured smooth solution \(u=\sin(2 \pi x) \sin(2 \pi y)\), classical rates can be observed, as in the following table: cells dofs u_L2_norm u_Linfty_norm u_H1_norm 256 289 5.851e-02 - 8.125e-02 - 2.015e+00 - 1024 1089 1.436e-02 2.12 2.160e-02 2.00 1.007e+00 1.05 4096 4225 3.605e-03 2.04 5.519e-03 2.01 5.037e-01 1.02
Definition at line 283 of file poisson_nitsche_interface.h.