www.mooseframework.org
LevelSetReinitializationMultiApp.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
12 
13 #include "Executioner.h"
14 
15 // libMesh
16 #include "libmesh/mesh_tools.h"
17 
19 
20 template <>
21 InputParameters
23 {
24  InputParameters params = validParams<MultiApp>();
25  params.addClassDescription(
26  "MultiApp capable of performing repeated complete solves for level set reinitialization.");
27  params.addParam<unsigned int>(
28  "interval", 1, "Time step interval when to perform reinitialization.");
29 
30  params.suppressParameter<std::vector<Point>>("positions");
31  params.suppressParameter<std::vector<FileName>>("positions_file");
32  params.suppressParameter<bool>("output_in_position");
33  params.suppressParameter<Real>("reset_time");
34  params.suppressParameter<std::vector<unsigned int>>("reset_apps");
35  params.suppressParameter<Real>("move_time");
36  params.suppressParameter<std::vector<unsigned int>>("move_apps");
37  params.suppressParameter<std::vector<Point>>("move_positions");
38 
39  return params;
40 }
41 
43  const InputParameters & parameters)
44  : MultiApp(parameters), _level_set_problem(NULL), _interval(getParam<unsigned int>("interval"))
45 {
46 }
47 
48 void
50 {
51  MultiApp::initialSetup();
52 
53  if (_has_an_app)
54  {
55  Executioner * ex = _apps[0]->getExecutioner();
56 
57  if (!ex)
58  mooseError("Executioner does not exist!");
59 
60  ex->init();
61 
62  _executioner = ex;
63 
64  _level_set_problem = dynamic_cast<LevelSetReinitializationProblem *>(&appProblemBase(0));
65  if (!_level_set_problem)
66  mooseError("The Problem type must be LevelSetReinitializationProblem.");
67  }
68 }
69 
70 bool
72  Real /*target_time*/,
73  bool /*auto_advance*/)
74 {
75  // Do nothing if not on interval
76  if ((_fe_problem.timeStep() % _interval) != 0)
77  return true;
78 
79  if (!_has_an_app)
80  return true;
81 
82  _console << "Solving Reinitialization problem." << std::endl;
83 
84  int rank;
85  int ierr;
86  ierr = MPI_Comm_rank(_orig_comm, &rank);
87  mooseCheckMPIErr(ierr);
88 
89  bool last_solve_converged = true;
90 
92  _executioner->execute();
93  if (!_executioner->lastSolveConverged())
94  last_solve_converged = false;
95 
96  return last_solve_converged;
97 }
LevelSetReinitializationProblem.h
LevelSetReinitializationMultiApp::_interval
const unsigned int & _interval
The solve interval for reinitialization.
Definition: LevelSetReinitializationMultiApp.h:43
LevelSetReinitializationProblem::resetTime
void resetTime()
Resets the state of the simulation to allow for it to be re-executed.
Definition: LevelSetReinitializationProblem.C:30
registerMooseObject
registerMooseObject("LevelSetApp", LevelSetReinitializationMultiApp)
LevelSetReinitializationMultiApp::solveStep
virtual bool solveStep(Real dt, Real target_time, bool auto_advance=true) override
Definition: LevelSetReinitializationMultiApp.C:71
LevelSetReinitializationMultiApp.h
validParams< LevelSetReinitializationMultiApp >
InputParameters validParams< LevelSetReinitializationMultiApp >()
Definition: LevelSetReinitializationMultiApp.C:22
LevelSetReinitializationMultiApp::_executioner
Executioner * _executioner
Access to the Executioner object to call execute()
Definition: LevelSetReinitializationMultiApp.h:40
LevelSetReinitializationMultiApp::_level_set_problem
LevelSetReinitializationProblem * _level_set_problem
Access to the level set specific problem to allow for the resetTime() method to be called.
Definition: LevelSetReinitializationMultiApp.h:37
LevelSetReinitializationMultiApp
MultiApp that performs a time reset prior to solving, this enables the level set reinitialization to ...
Definition: LevelSetReinitializationMultiApp.h:27
LevelSetReinitializationMultiApp::LevelSetReinitializationMultiApp
LevelSetReinitializationMultiApp(const InputParameters &parameters)
Definition: LevelSetReinitializationMultiApp.C:42
LevelSetReinitializationMultiApp::initialSetup
virtual void initialSetup() override
Definition: LevelSetReinitializationMultiApp.C:49