AMDiS  2.10
The Adaptive Multi-Dimensional Simulation Toolbox
ProblemStat.hpp
1 #pragma once
2 
3 #include <list>
4 #include <map>
5 #include <memory>
6 #include <string>
7 #include <tuple>
8 #include <utility>
9 #include <vector>
10 
11 #include <dune/common/fvector.hh>
12 #include <dune/common/fmatrix.hh>
13 #include <dune/common/shared_ptr.hh>
14 
15 #include <dune/grid/common/grid.hh>
16 
17 #include <amdis/AdaptInfo.hpp>
18 #include <amdis/AdaptiveGrid.hpp>
19 #include <amdis/Assembler.hpp>
20 #include <amdis/BiLinearForm.hpp>
21 #include <amdis/CreatorInterface.hpp>
22 #include <amdis/CreatorMap.hpp>
23 #include <amdis/DirichletBC.hpp>
24 #include <amdis/DOFVector.hpp>
25 //#include <amdis/Estimator.hpp>
26 #include <amdis/Flag.hpp>
27 #include <amdis/Initfile.hpp>
28 #include <amdis/LinearAlgebra.hpp>
29 #include <amdis/LinearForm.hpp>
30 #include <amdis/Marker.hpp>
31 #include <amdis/MeshCreator.hpp>
32 #include <amdis/PeriodicBC.hpp>
33 #include <amdis/ProblemStatBase.hpp>
34 #include <amdis/ProblemStatTraits.hpp>
35 #include <amdis/StandardProblemIteration.hpp>
36 #include <amdis/common/SharedPtr.hpp>
37 #include <amdis/common/TupleUtility.hpp>
38 #include <amdis/common/TypeTraits.hpp>
39 #include <amdis/GridFunctions.hpp>
40 #include <amdis/gridfunctions/DiscreteFunction.hpp>
41 #include <amdis/io/FileWriterBase.hpp>
42 #include <amdis/typetree/Concepts.hpp>
43 #include <amdis/typetree/TreePath.hpp>
44 
45 namespace AMDiS
46 {
47  // forward declaration
48  template <class Traits>
49  class ProblemInstat;
50 
51  template <class Traits>
53  : public ProblemStatBase
54  , public StandardProblemIterationAdaptor<ProblemStat<Traits>>
55  {
56  using Self = ProblemStat;
57 
58  friend class ProblemInstat<Traits>;
59 
60  public: // typedefs and static constants
61 
62  using GlobalBasis = typename Traits::GlobalBasis;
63  using GridView = typename GlobalBasis::GridView;
64  using Grid = AdaptiveGrid_t<typename GridView::Grid>;
65  using Element = typename GridView::template Codim<0>::Entity;
66  using WorldVector = typename Element::Geometry::GlobalCoordinate;
67  using WorldMatrix = FieldMatrix<typename WorldVector::field_type, WorldVector::dimension, WorldVector::dimension>;
68 
70  static constexpr int dim = Grid::dimension;
71 
73  static constexpr int dow = Grid::dimensionworld;
74 
75  using value_type = typename Traits::CoefficientType;
76 
77  using Mat = typename Traits::Backend::template Matrix<GlobalBasis,GlobalBasis>::template Impl<value_type>;
78  using Vec = typename Traits::Backend::template Vector<GlobalBasis>::template Impl<value_type>;
79 
82 
86 
87  public:
92  explicit ProblemStat(std::string const& name)
93  : name_(name)
94  {}
95 
98  template <class Grid_>
99  ProblemStat(std::string const& name, Grid_&& grid)
100  : ProblemStat(name)
101  {
102  adoptGrid(wrap_or_share(FWD(grid)));
103  }
104 
107  template <class Grid_, class Basis_, class B_ = Underlying_t<Basis_>,
108  REQUIRES(Concepts::GlobalBasis<B_>)>
109  ProblemStat(std::string const& name, Grid_&& grid, Basis_&& globalBasis)
110  : ProblemStat(name, FWD(grid))
111  {
112  adoptGlobalBasis(wrap_or_share(FWD(globalBasis)));
113  }
114 
117  template <class Grid_, class PBF_, class GV_ = typename Underlying_t<Grid_>::LeafGridView,
118  REQUIRES(Concepts::PreBasisFactory<PBF_, GV_>)>
119  ProblemStat(std::string const& name, Grid_&& grid, PBF_ const& preBasisFactory)
120  : ProblemStat(name, FWD(grid))
121  {
122  adoptGlobalBasis(makeSharedPtr(GlobalBasis{grid_->leafGridView(), preBasisFactory}));
123  }
124 
126 
130  void initialize(Flag initFlag, Self* adoptProblem = nullptr, Flag adoptFlag = INIT_NOTHING);
131 
133 
138  void restore(Flag initFlag);
139 
140 
142 
143 
160  template <class Operator, class RowTreePath = RootTreePath, class ColTreePath = RootTreePath>
161  void addMatrixOperator(Operator const& op, RowTreePath row = {}, ColTreePath col = {})
162  {
163  static constexpr bool isValidTreePath =
164  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, RowTreePath> &&
165  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, ColTreePath>;
166  static_assert(isValidTreePath, "Invalid row and/or col treepath passed to addMatrixOperator!");
167 
168  if constexpr (isValidTreePath)
169  systemMatrix_->addOperator(tag::element_operator<Element>{}, op, row, col);
170  }
171 
173 
191  template <class Operator, class RowTreePath = RootTreePath, class ColTreePath = RootTreePath>
192  void addMatrixOperator(BoundaryType b, Operator const& op, RowTreePath row = {}, ColTreePath col = {})
193  {
194  using I = typename GridView::Intersection;
195  static constexpr bool isValidTreePath =
196  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, RowTreePath> &&
197  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, ColTreePath>;
198  static_assert(isValidTreePath, "Invalid row and/or col treepath passed to addMatrixOperator!");
199 
200  if constexpr (isValidTreePath)
201  systemMatrix_->addOperator(BoundarySubset<I>{*boundaryManager_,b}, op, row, col);
202  }
206 
208 
223  template <class Operator, class TreePath = RootTreePath>
224  void addVectorOperator(Operator const& op, TreePath path = {})
225  {
226  static constexpr bool isValidTreePath =
227  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, TreePath>;
228  static_assert(isValidTreePath, "Invalid treepath passed to addVectorOperator!");
229 
230  if constexpr (isValidTreePath)
231  rhs_->addOperator(tag::element_operator<Element>{}, op, path);
232  }
233 
235 
251  template <class Operator, class TreePath = RootTreePath>
252  void addVectorOperator(BoundaryType b, Operator const& op, TreePath path = {})
253  {
254  using I = typename GridView::Intersection;
255  static constexpr bool isValidTreePath =
256  Concepts::ValidTreePath<typename GlobalBasis::LocalView::Tree, TreePath>;
257  static_assert(isValidTreePath, "Invalid treepath passed to addVectorOperator!");
258 
259  if constexpr (isValidTreePath)
260  rhs_->addOperator(BoundarySubset<I>{*boundaryManager_,b}, op, path);
261  }
265 
267 
287  template <class Predicate, class RowTreePath, class ColTreePath, class Values>
288  void addDirichletBC(Predicate const& predicate,
289  RowTreePath row, ColTreePath col,
290  Values const& values);
291 
292  template <class RowTreePath, class ColTreePath, class Values>
294  RowTreePath row, ColTreePath col,
295  Values const& values);
296 
297  template <class Identifier, class Values>
298  void addDirichletBC(Identifier&& id, Values&& values)
299  {
300  addDirichletBC(FWD(id), RootTreePath{}, RootTreePath{}, FWD(values));
301  }
302 
305  void addPeriodicBC(BoundaryType id, WorldMatrix const& A, WorldVector const& b);
309  {
310  constraints_.push_back(constraint);
311  }
312 
313  public:
314 
316  Flag oneIteration(AdaptInfo& adaptInfo, Flag toDo = FULL_ITERATION) override
317  {
318  return StandardProblemIteration::oneIteration(adaptInfo, toDo);
319  }
320 
322  void buildAfterAdapt(AdaptInfo& adaptInfo,
323  Flag flag,
324  bool asmMatrix = true,
325  bool asmVector = true) override;
326 
329  void assemble(AdaptInfo& adaptInfo)
330  {
331  buildAfterAdapt(adaptInfo, Flag{0}, true, true);
332  }
333 
335  void solve(AdaptInfo& adaptInfo,
336  bool createMatrixData = true,
337  bool storeMatrixData = false) override;
338 
340  void estimate(AdaptInfo& /*adaptInfo*/) override { /* do nothing. */ }
341 
343  Flag adaptGrid(AdaptInfo& adaptInfo) override;
344 
346  Flag markElements(AdaptInfo& adaptInfo) override;
347 
349  Flag globalCoarsen(int n) override;
350 
352  Flag globalRefine(int n) override;
353 
355  void writeFiles(AdaptInfo& adaptInfo, bool force = false);
356 
357 
358  public: // get-methods
359 
361  std::string const& name() const override { return name_; }
362 
364  std::shared_ptr<Grid> grid() { return grid_; }
365  std::shared_ptr<Grid const> grid() const { return grid_; }
366 
368  GridView gridView() const { return globalBasis_->gridView(); }
369 
371  std::shared_ptr<BoundaryManager<Grid>> boundaryManager() { return boundaryManager_; }
372  std::shared_ptr<BoundaryManager<Grid> const> boundaryManager() const { return boundaryManager_; }
373 
375  std::shared_ptr<GlobalBasis> globalBasis() { return globalBasis_; }
376  std::shared_ptr<GlobalBasis const> globalBasis() const { return globalBasis_; }
377 
379  std::shared_ptr<LinearSolverInterface> solver() { return linearSolver_; }
380  std::shared_ptr<LinearSolverInterface const> solver() const { return linearSolver_; }
381 
383  std::shared_ptr<SystemMatrix> systemMatrix() { return systemMatrix_; }
384  std::shared_ptr<SystemMatrix const> systemMatrix() const { return systemMatrix_; }
385 
387  std::shared_ptr<SolutionVector> solutionVector() { return solution_; }
388  std::shared_ptr<SolutionVector const> solutionVector() const { return solution_; }
389 
391  std::shared_ptr<SystemVector> rhsVector() { return rhs_; }
392  std::shared_ptr<SystemVector const> rhsVector() const { return rhs_; }
393 
394 
396 
400  template <class Range = void, class... Indices>
401  auto solution(Indices... ii)
402  {
403  assert(bool(solution_) && "You have to call initialize() before.");
404  return valueOf<Range>(*solution_, ii...);
405  }
406 
408 
412  template <class Range = void, class... Indices>
413  auto solution(Indices... ii) const
414  {
415  assert(bool(solution_) && "You have to call initialize() before.");
416  return valueOf<Range>(*solution_, ii...);
417  }
418 
419 
420  public: // set-methods
421 
423  template <class Solver_>
424  void setSolver(Solver_&& solver)
425  {
426  linearSolver_ = wrap_or_share(FWD(solver));
427  }
428 
429 
433  template <class Grid_>
434  void setGrid(Grid_&& grid)
435  {
436  adoptGrid(wrap_or_share(FWD(grid)));
437  createGlobalBasis();
438  createMatricesAndVectors();
439  createMarker();
440  createFileWriter();
441  }
442 
443 
445 
448  template <class Marker_>
449  void addMarker(Marker_&& m)
450  {
451  auto marker = wrap_or_share(FWD(m));
452  auto it = marker_.emplace(marker->name(), marker);
453  if (marker_.size() > 1)
454  it.first->second->setMaximumMarking(true);
455  }
456 
458  void removeMarker(std::string name)
459  {
460  std::size_t num = marker_.erase(name);
461  test_warning(num == 1, "A marker with the given name '{}' does not exist.", name);
462  }
463 
465  void removeMarker(Marker<Grid> const& marker)
466  {
467  removeMarker(marker.name());
468  }
469 
471  template<class FileWriter_>
472  void addFileWriter(FileWriter_&& f)
473  {
474  filewriter_.push_back(wrap_or_share(FWD(f)));
475  }
476 
479  {
480  filewriter_.clear();
481  }
482 
483  protected: // initialization methods
484 
485  void createGlobalBasis();
486  void createGrid();
487  void createMatricesAndVectors();
488  void createSolver();
489  void createMarker();
490  void createFileWriter();
491 
492  void adoptGlobalBasis(std::shared_ptr<GlobalBasis> globalBasis)
493  {
494  globalBasis_ = std::move(globalBasis);
495  initGlobalBasis();
496  }
497 
498  void adoptGrid(std::shared_ptr<Grid> const& grid,
499  std::shared_ptr<BoundaryManager<Grid>> const& boundaryManager)
500  {
501  grid_ = grid;
503  Parameters::get(name_ + "->mesh", gridName_);
504  }
505 
506  void adoptGrid(std::shared_ptr<Grid> const& grid)
507  {
508  adoptGrid(grid, std::make_shared<BoundaryManager<Grid>>(grid));
509  }
510 
511  void adoptGrid(std::shared_ptr<typename Grid::HostGrid> const& hostGrid)
512  {
513  auto grid = std::make_shared<Grid>(hostGrid);
514  adoptGrid(grid, std::make_shared<BoundaryManager<Grid>>(grid));
515  }
516 
517  private:
518 
519  void createGlobalBasisImpl(std::true_type);
520  void createGlobalBasisImpl(std::false_type);
521 
522  void initGlobalBasis();
523 
524  protected:
525 
527  std::string name_;
528 
530  std::shared_ptr<Grid> grid_;
531 
533  std::string gridName_ = "mesh";
534 
536  std::shared_ptr<BoundaryManager<Grid>> boundaryManager_;
537 
539  std::shared_ptr<GlobalBasis> globalBasis_;
540 
542  std::list<std::shared_ptr<FileWriterInterface>> filewriter_;
543 
545  std::map<std::string, std::shared_ptr<Marker<Grid>>> marker_;
546 
548 // std::vector<Estimator*> estimator;
549 
551  std::shared_ptr<LinearSolverInterface> linearSolver_;
552 
554  std::shared_ptr<SystemMatrix> systemMatrix_;
555 
557  std::shared_ptr<SolutionVector> solution_;
558 
561  std::shared_ptr<SystemVector> rhs_;
562 
565  std::map<std::string, std::vector<double>> estimates_;
566 
568  std::list<BoundaryCondition<SystemMatrix, SolutionVector, SystemVector>> constraints_;
569  };
570 
571 
572  namespace Impl
573  {
574  template <class Grid, class B, class = void>
575  struct DeducedProblemTraits;
576 
577  template <class Grid, class PB>
578  struct DeducedProblemTraits<Grid,GlobalBasis<PB>,void>
579  {
581  };
582 
583  template <class Grid, class PB>
584  struct DeducedProblemTraits<Grid,const GlobalBasis<PB>,void>
585  {
587  };
588 
589  template <class G, class PBF>
590  struct DeducedProblemTraits<G,PBF,
591  std::enable_if_t<Concepts::PreBasisFactory<PBF, typename G::LeafGridView>>>
592  {
593  using Grid = AdaptiveGrid_t<G>;
594  using GridView = typename Grid::LeafGridView;
595  using Basis = decltype(GlobalBasis{std::declval<GridView>(),std::declval<PBF>()});
596 
597  using type = DefaultProblemTraits<Basis>;
598  };
599 
600  template <class Grid, class Basis>
601  using DeducedProblemTraits_t = typename DeducedProblemTraits<Grid,Basis>::type;
602  }
603 
604 
605  // Deduction guide
606  template <class Grid, class Basis>
607  ProblemStat(std::string name, Grid&& grid, Basis&& globalBasis)
609 
610 
611  // mark templates as explicitly instantiated in cpp file
612  extern template class ProblemStat<LagrangeBasis<Dune::YaspGrid<2>,1>>;
613  extern template class ProblemStat<LagrangeBasis<Dune::YaspGrid<2>,1,1>>;
614 
615 } // end namespace AMDiS
616 
617 #include "ProblemStat.inc.hpp"
void addFileWriter(FileWriter_ &&f)
Add another filewriter to the problem.
Definition: ProblemStat.hpp:472
Flag oneIteration(AdaptInfo &adaptInfo, Flag toDo=FULL_ITERATION) override
Implementation of StandardProblemIteration::oneIteration.
Definition: ProblemStat.hpp:316
static constexpr int dow
Dimension of the world.
Definition: ProblemStat.hpp:73
auto solution(Indices... ii) const
Return a const view to a solution component.
Definition: ProblemStat.hpp:413
std::string const & name() const override
Implementation of ProblemStatBase::name.
Definition: ProblemStat.hpp:361
void addPeriodicBC(BoundaryType id, WorldMatrix const &A, WorldVector const &b)
Definition: ProblemStat.inc.hpp:340
The Flag class encapsulates flags which represents simple information. Used e.g. while mesh traversal...
Definition: Flag.hpp:13
ProblemStat(std::string const &name, Grid_ &&grid)
Definition: ProblemStat.hpp:99
Class defining a subset of a domain boundary.
Definition: BoundarySubset.hpp:23
void clearFileWriter()
Deletes all filewriters.
Definition: ProblemStat.hpp:478
std::map< std::string, std::vector< double > > estimates_
Definition: ProblemStat.hpp:565
void addMatrixOperator(BoundaryType b, Operator const &op, RowTreePath row={}, ColTreePath col={})
Operator evaluated on the boundary of the domain with boundary index b
Definition: ProblemStat.hpp:192
void addDirichletBC(Predicate const &predicate, RowTreePath row, ColTreePath col, Values const &values)
Add boundary conditions to the system.
Definition: ProblemStat.inc.hpp:298
void addMarker(Marker_ &&m)
Store the shared_ptr and the name of the marker in the problem.
Definition: ProblemStat.hpp:449
The base class for an operator to be used in an Assembler.
Definition: Operator.hpp:78
void addMatrixOperator(Operator const &op, RowTreePath row={}, ColTreePath col={})
Add an operator to A.
Definition: ProblemStat.hpp:161
std::shared_ptr< SystemMatrix > systemMatrix_
Matrix that is filled during assembling.
Definition: ProblemStat.hpp:554
void estimate(AdaptInfo &) override
Implementation of ProblemStatBase::estimate.
Definition: ProblemStat.hpp:340
constexpr bool Predicate
A predicate is a function that returns a boolean.
Definition: Concepts.hpp:141
void setGrid(Grid_ &&grid)
Definition: ProblemStat.hpp:434
The basic container that stores a base vector and a corresponding basis.
Definition: LinearForm.hpp:26
std::shared_ptr< SystemVector > rhs_
Definition: ProblemStat.hpp:561
ProblemStat(std::string const &name)
Constructor. Takes the name of the problem that is used to access values corresponding to this proble...
Definition: ProblemStat.hpp:92
std::shared_ptr< SolutionVector > solution_
Vector with the solution components.
Definition: ProblemStat.hpp:557
The basic container that stores a base vector and a corresponding basis.
Definition: DOFVector.hpp:38
Definition: AdaptBase.hpp:6
StandardProblemIteration when derived from ProblemStat.
Definition: StandardProblemIteration.hpp:71
Base class for all markers.
Definition: Marker.hpp:28
auto solution(Indices... ii)
Return a mutable view to a solution component.
Definition: ProblemStat.hpp:401
std::shared_ptr< SolutionVector > solutionVector()
Returns a reference to the solution vector, solution_.
Definition: ProblemStat.hpp:387
Wrapper around a global basis providing default traits.
Definition: ProblemStatTraits.hpp:76
std::shared_ptr< GlobalBasis > globalBasis()
Return the globalBasis_.
Definition: ProblemStat.hpp:375
std::list< std::shared_ptr< FileWriterInterface > > filewriter_
A FileWriter object.
Definition: ProblemStat.hpp:542
Definition: ProblemStat.hpp:52
void initialize(Flag initFlag, Self *adoptProblem=nullptr, Flag adoptFlag=INIT_NOTHING)
Initialisation of the problem.
Definition: ProblemStat.inc.hpp:23
Standard implementation of ProblemTimeInterface for a time dependent problems.
Definition: ProblemInstat.hpp:24
std::shared_ptr< GlobalBasis > globalBasis_
FE space of this problem.
Definition: ProblemStat.hpp:539
void restore(Flag initFlag)
Read the grid and solution from backup files and initialize the problem.
Definition: ProblemStat.inc.hpp:108
Definition: BiLinearForm.hpp:28
std::map< std::string, std::shared_ptr< Marker< Grid > > > marker_
Pointer to the adaptation markers.
Definition: ProblemStat.hpp:545
ProblemStat(std::string const &name, Grid_ &&grid, Basis_ &&globalBasis)
Constructor taking a grid and basis. Wraps both in shared pointers.
Definition: ProblemStat.hpp:109
std::shared_ptr< Grid > grid()
Return the grid_.
Definition: ProblemStat.hpp:364
std::shared_ptr< SystemMatrix > systemMatrix()
Returns a reference to system-matrix, systemMatrix_.
Definition: ProblemStat.hpp:383
static std::optional< T > get(std::string const &key)
Get parameter-values from parameter-tree.
Definition: Initfile.hpp:25
static constexpr int dim
Dimension of the grid.
Definition: ProblemStat.hpp:70
void addVectorOperator(Operator const &op, TreePath path={})
Add an operator to rhs.
Definition: ProblemStat.hpp:224
std::shared_ptr< SystemVector > rhsVector()
Return a reference to the rhs system-vector, rhs.
Definition: ProblemStat.hpp:391
Flag markElements(AdaptInfo &adaptInfo) override
Implementation of ProblemStatBase::markElements.
Definition: ProblemStat.inc.hpp:387
void removeMarker(std::string name)
Remove a marker with the given name from the problem.
Definition: ProblemStat.hpp:458
Definition: LinearSolverInterface.hpp:8
Flag adaptGrid(AdaptInfo &adaptInfo) override
Implementation of ProblemStatBase::refineMesh.
Definition: ProblemStat.inc.hpp:454
ProblemStat(std::string const &name, Grid_ &&grid, PBF_ const &preBasisFactory)
Constructor taking a grid and pre-basis factory to create a global basis on the fly.
Definition: ProblemStat.hpp:119
Interface for time independent problems. Concrete problems must override all pure virtual methods...
Definition: ProblemStatBase.hpp:58
void writeFiles(AdaptInfo &adaptInfo, bool force=false)
Writes output files. If force=true write even if timestep out of write rhythm.
Definition: ProblemStat.inc.hpp:531
Implementation of LinearSolverInterface for EIGEN solvers.
Definition: LinearSolver.hpp:14
std::shared_ptr< Grid > grid_
Grid of this problem.
Definition: ProblemStat.hpp:530
void solve(AdaptInfo &adaptInfo, bool createMatrixData=true, bool storeMatrixData=false) override
Implementation of ProblemStatBase::solve.
Definition: ProblemStat.inc.hpp:353
typename PreBasis::GridView GridView
The grid view that the FE space is defined on.
Definition: GlobalBasis.hpp:57
GridView gridView() const
Return the gridView of the basis.
Definition: ProblemStat.hpp:368
Flag globalRefine(int n) override
Uniform global refinement by n level.
Definition: ProblemStat.inc.hpp:439
Holds adapt parameters and infos about the problem.
Definition: AdaptInfo.hpp:25
void addVectorOperator(BoundaryType b, Operator const &op, TreePath path={})
Operator evaluated on the boundary of the domain with boundary index b
Definition: ProblemStat.hpp:252
std::shared_ptr< LinearSolverInterface > solver()
Return a reference to the linear solver, linearSolver.
Definition: ProblemStat.hpp:379
std::shared_ptr< BoundaryManager< Grid > > boundaryManager()
Return the boundary manager to identify boundary segments.
Definition: ProblemStat.hpp:371
std::shared_ptr< BoundaryManager< Grid > > boundaryManager_
Management of boundary conditions.
Definition: ProblemStat.hpp:536
void buildAfterAdapt(AdaptInfo &adaptInfo, Flag flag, bool asmMatrix=true, bool asmVector=true) override
Implementation of ProblemStatBase::buildAfterCoarse.
Definition: ProblemStat.inc.hpp:469
Definition: Assembler.hpp:15
std::shared_ptr< LinearSolverInterface > linearSolver_
Pointer to the estimators for this problem.
Definition: ProblemStat.hpp:551
constexpr bool GlobalBasis
A Dune::Functions::GlobalBasis type.
Definition: Concepts.hpp:189
std::list< BoundaryCondition< SystemMatrix, SolutionVector, SystemVector > > constraints_
List of constraints to apply to matrix, solution and rhs.
Definition: ProblemStat.hpp:568
void assemble(AdaptInfo &adaptInfo)
Assemble the linear system by calling buildAfterAdapt with asmMatrix and asmVector set to true...
Definition: ProblemStat.hpp:329
Manage boundary ids of boundary segments in a grid.
Definition: BoundaryManager.hpp:52
std::string const & name() const
Returns name_ of the Marker.
Definition: Marker.hpp:81
Flag globalCoarsen(int n) override
Uniform global grid coarsening by up to n level.
Definition: ProblemStat.inc.hpp:408
void setSolver(Solver_ &&solver)
Set a new linear solver for the problem.
Definition: ProblemStat.hpp:424
void removeMarker(Marker< Grid > const &marker)
Remove a marker from the problem.
Definition: ProblemStat.hpp:465
Interface class for boundary conditions.
Definition: BoundaryCondition.hpp:61
std::string gridName_
Name of the grid.
Definition: ProblemStat.hpp:533
std::string name_
Name of this problem.
Definition: ProblemStat.hpp:527
Flag oneIteration(AdaptInfo &adaptInfo, Flag toDo) override
Implementation of ProblemIterationInterface::oneIteration()
Definition: StandardProblemIteration.cpp:35