1 #ifndef _pidoums_poisson_h_
2 #define _pidoums_poisson_h_
13 template <
int dim,
int spacedim,
typename LAC=LATrilinos>
24 template <
typename EnergyType,
typename Res
idualType>
26 FEValuesCache<dim,spacedim> &scratch,
27 std::vector<EnergyType> &energies,
28 std::vector<std::vector<ResidualType> > &local_residuals,
29 bool compute_only_system_terms)
const;
33 const std::vector<shared_ptr<LATrilinos::BlockMatrix> >,
38 mutable shared_ptr<TrilinosWrappers::PreconditionJacobi> preconditioner;
43 template <
int dim,
int spacedim,
typename LAC>
54 template <
int dim,
int spacedim,
typename LAC>
55 template <
typename EnergyType,
typename Res
idualType>
59 FEValuesCache<dim,spacedim> &fe_cache,
60 std::vector<EnergyType> &,
61 std::vector<std::vector<ResidualType> > &local_residuals,
62 bool compute_only_system_terms)
const
66 ResidualType rt = this->alpha;
67 this->reinit (rt, cell, fe_cache);
68 auto &uts = fe_cache.get_values(
"solution_dot",
"u", s, rt);
69 auto &gradus = fe_cache.get_gradients(
"solution",
"u", s, rt);
71 const unsigned int n_q_points = uts.size();
72 auto &JxW = fe_cache.get_JxW_values();
74 auto &fev = fe_cache.get_current_fe_values();
76 for (
unsigned int q=0; q<n_q_points; ++q)
79 auto &gradu = gradus[q];
80 for (
unsigned int i=0; i<local_residuals[0].size(); ++i)
82 auto v = fev[s].value(i,q);
83 auto gradv = fev[s].gradient(i,q);
84 local_residuals[0][i] += (
91 (void)compute_only_system_terms;
99 template <
int dim,
int spacedim,
typename LAC>
102 const std::vector<shared_ptr<LATrilinos::BlockMatrix> > matrices,
108 preconditioner->initialize(matrices[0]->block(0,0));
110 auto A = linear_operator<LATrilinos::VectorType::BlockType>( matrices[0]->block(0,0) );
114 P_inv = linear_operator<LATrilinos::VectorType::BlockType>(matrices[0]->block(0,0), *preconditioner);
119 system_op = block_operator<1, 1, LATrilinos::VectorType>({{
124 prec_op = block_operator<1, 1, LATrilinos::VectorType>({{
PoissonProblem()
Definition: poisson_problem.h:45
Definition: lac_type.h:33
void energies_and_residuals(const typename DoFHandler< dim, spacedim >::active_cell_iterator &cell, FEValuesCache< dim, spacedim > &scratch, std::vector< EnergyType > &energies, std::vector< std::vector< ResidualType > > &local_residuals, bool compute_only_system_terms) const
Definition: poisson_problem.h:58
void compute_system_operators(const DoFHandler< dim, spacedim > &, const std::vector< shared_ptr< LATrilinos::BlockMatrix > >, LinearOperator< LATrilinos::VectorType > &, LinearOperator< LATrilinos::VectorType > &) const
Definition: poisson_problem.h:101
ActiveSelector::active_cell_iterator active_cell_iterator
This is the class that users should derive from.
Definition: pde_system_interface.h:46
~PoissonProblem()
Definition: poisson_problem.h:18
Definition: poisson_problem.h:14