Skip to content

Commit

Permalink
Use solutionState() in all solution(), solutionOld(), etc
Browse files Browse the repository at this point in the history
  • Loading branch information
loganharbour committed May 18, 2020
1 parent 0dfdad2 commit cfb18bd
Show file tree
Hide file tree
Showing 22 changed files with 201 additions and 128 deletions.
2 changes: 0 additions & 2 deletions framework/include/problems/DisplacedProblem.h
Expand Up @@ -308,8 +308,6 @@ class DisplacedProblem : public SubProblem

const CouplingMatrix * couplingMatrix() const override;

virtual void needOldSolutionState(const unsigned int state) override;

protected:
FEProblemBase & _mproblem;
MooseMesh & _mesh;
Expand Down
2 changes: 0 additions & 2 deletions framework/include/problems/FEProblemBase.h
Expand Up @@ -1761,8 +1761,6 @@ class FEProblemBase : public SubProblem, public Restartable
*/
void uniformRefine();

virtual void needOldSolutionState(const unsigned int state) override;

using SubProblem::automaticScaling;
void automaticScaling(bool automatic_scaling) override;

Expand Down
13 changes: 8 additions & 5 deletions framework/include/problems/SubProblem.h
Expand Up @@ -677,11 +677,6 @@ class SubProblem : public Problem
*/
void addAlgebraicGhostingFunctor(GhostingFunctor & algebraic_gf, bool to_mesh = true);

/**
* Register with the Systems that a certain solution state is needed (1 = old, 2 = older, etc)
*/
virtual void needOldSolutionState(const unsigned int state) = 0;

/**
* Automatic scaling setter
* @param automatic_scaling A boolean representing whether we are performing automatic scaling
Expand All @@ -694,6 +689,11 @@ class SubProblem : public Problem
*/
bool automaticScaling() const;

/**
* The number of default solution states each system associated with this problem should create
*/
unsigned int defaultSolutionStates() const { return _default_solution_states; }

protected:
/**
* Helper function called by getVariable that handles the logic for
Expand Down Expand Up @@ -811,6 +811,9 @@ class SubProblem : public Problem

bool _have_fv = false;

/// The number of default solution states that should be created
const unsigned int _default_solution_states;

///@{ Helper functions for checking MaterialProperties
std::string restrictionSubdomainCheckName(SubdomainID check_id);
std::string restrictionBoundaryCheckName(BoundaryID check_id);
Expand Down
26 changes: 15 additions & 11 deletions framework/include/systems/AuxiliarySystem.h
Expand Up @@ -157,17 +157,7 @@ class AuxiliarySystem : public SystemBase, public PerfGraphInterface
*/
bool needMaterialOnSide(BoundaryID bnd_id);

NumericVector<Number> & solution() override { return *_sys.solution; }
NumericVector<Number> & solutionOld() override { return *_sys.old_local_solution; }
NumericVector<Number> & solutionOlder() override { return *_sys.older_local_solution; }
NumericVector<Number> * solutionPreviousNewton() override { return _solution_previous_nl; }

const NumericVector<Number> & solution() const override { return *_sys.solution; }
const NumericVector<Number> & solutionOld() const override { return *_sys.old_local_solution; }
const NumericVector<Number> & solutionOlder() const override
{
return *_sys.older_local_solution;
}
const NumericVector<Number> * solutionPreviousNewton() const override
{
return _solution_previous_nl;
Expand All @@ -184,7 +174,7 @@ class AuxiliarySystem : public SystemBase, public PerfGraphInterface

void clearScalarVariableCoupleableTags();

// protected:
protected:
void computeScalarVars(ExecFlagType type);
void computeNodalVars(ExecFlagType type);
void computeNodalVecVars(ExecFlagType type);
Expand Down Expand Up @@ -261,4 +251,18 @@ class AuxiliarySystem : public SystemBase, public PerfGraphInterface
friend class ComputeNodalKernelBcsThread;
friend class ComputeNodalKernelJacobiansThread;
friend class ComputeNodalKernelBCJacobiansThread;

NumericVector<Number> & solutionInternal() override { return *_sys.solution; }
NumericVector<Number> & solutionOldInternal() override { return *_sys.old_local_solution; }
NumericVector<Number> & solutionOlderInternal() override { return *_sys.older_local_solution; }

const NumericVector<Number> & solutionInternal() const override { return *_sys.solution; }
const NumericVector<Number> & solutionOldInternal() const override
{
return *_sys.old_local_solution;
}
const NumericVector<Number> & solutionOlderInternal() const override
{
return *_sys.older_local_solution;
}
};
22 changes: 13 additions & 9 deletions framework/include/systems/DisplacedSystem.h
Expand Up @@ -89,15 +89,8 @@ class DisplacedSystem : public SystemBase
return _undisplaced_system.currentSolution();
}

NumericVector<Number> & solution() override { return _undisplaced_system.solution(); }
NumericVector<Number> & solutionOld() override;
NumericVector<Number> & solutionOlder() override;
NumericVector<Number> * solutionPreviousNewton() override { return NULL; }

const NumericVector<Number> & solution() const override { return _undisplaced_system.solution(); }
const NumericVector<Number> & solutionOld() const override;
const NumericVector<Number> & solutionOlder() const override;
const NumericVector<Number> * solutionPreviousNewton() const override { return NULL; }
NumericVector<Number> * solutionPreviousNewton() override { return nullptr; }
const NumericVector<Number> * solutionPreviousNewton() const override { return nullptr; }

NumericVector<Number> * solutionUDot() override { return _undisplaced_system.solutionUDot(); }
NumericVector<Number> * solutionUDotDot() override
Expand Down Expand Up @@ -216,6 +209,17 @@ class DisplacedSystem : public SystemBase
void addTimeIntegrator(std::shared_ptr<TimeIntegrator> ti) override;

protected:
NumericVector<Number> & solutionInternal() override { return _undisplaced_system.solution(); }
NumericVector<Number> & solutionOldInternal() override;
NumericVector<Number> & solutionOlderInternal() override;

const NumericVector<Number> & solutionInternal() const override
{
return _undisplaced_system.solution();
}
const NumericVector<Number> & solutionOldInternal() const override;
const NumericVector<Number> & solutionOlderInternal() const override;

SystemBase & _undisplaced_system;
TransientExplicitSystem & _sys;
};
13 changes: 6 additions & 7 deletions framework/include/systems/DumpObjectsNonlinearSystem.h
Expand Up @@ -32,16 +32,15 @@ class DumpObjectsNonlinearSystem : public NonlinearSystemBase
virtual bool converged() override { return true; }
virtual NumericVector<Number> & RHS() override { return *_dummy; }

NumericVector<Number> & solutionOld() override { return *_dummy; }
NumericVector<Number> & solutionOlder() override { return *_dummy; }

const NumericVector<Number> & solutionOld() const override { return *_dummy; }
const NumericVector<Number> & solutionOlder() const override { return *_dummy; }

virtual unsigned int getCurrentNonlinearIterationNumber() override { return 0; }
virtual void setupFiniteDifferencedPreconditioner() override {}

protected:
NumericVector<Number> & solutionOldInternal() override { return *_dummy; }
NumericVector<Number> & solutionOlderInternal() override { return *_dummy; }

const NumericVector<Number> & solutionOldInternal() const override { return *_dummy; }
const NumericVector<Number> & solutionOlderInternal() const override { return *_dummy; }

NumericVector<Number> * _dummy;
};

32 changes: 18 additions & 14 deletions framework/include/systems/NonlinearEigenSystem.h
Expand Up @@ -84,20 +84,6 @@ class NonlinearEigenSystem : public NonlinearSystemBase

virtual NonlinearSolver<Number> * nonlinearSolver() override;

NumericVector<Number> & solutionOld() override { return *_transient_sys.old_local_solution; }

NumericVector<Number> & solutionOlder() override { return *_transient_sys.older_local_solution; }

const NumericVector<Number> & solutionOld() const override
{
return *_transient_sys.old_local_solution;
}

const NumericVector<Number> & solutionOlder() const override
{
return *_transient_sys.older_local_solution;
}

virtual TransientEigenSystem & sys() { return _transient_sys; }

/**
Expand Down Expand Up @@ -147,6 +133,24 @@ class NonlinearEigenSystem : public NonlinearSystemBase
TagID nonEigenMatrixTag() { return _A_tag; }

protected:
NumericVector<Number> & solutionOldInternal() override
{
return *_transient_sys.old_local_solution;
}
const NumericVector<Number> & solutionOldInternal() const override
{
return *_transient_sys.old_local_solution;
}

NumericVector<Number> & solutionOlderInternal() override
{
return *_transient_sys.older_local_solution;
}
const NumericVector<Number> & solutionOlderInternal() const override
{
return *_transient_sys.older_local_solution;
}

TransientEigenSystem & _transient_sys;
EigenProblem & _eigen_problem;
std::vector<std::pair<Real, Real>> _eigen_values;
Expand Down
24 changes: 15 additions & 9 deletions framework/include/systems/NonlinearSystem.h
Expand Up @@ -64,23 +64,29 @@ class NonlinearSystem : public NonlinearSystemBase
return _transient_sys.nonlinear_solver.get();
}

NumericVector<Number> & solutionOld() override { return *_transient_sys.old_local_solution; }
const NumericVector<Number> & solutionOld() const override
virtual TransientNonlinearImplicitSystem & sys() { return _transient_sys; }

void computeScaling() override;

protected:
NumericVector<Number> & solutionOldInternal() override
{
return *_transient_sys.old_local_solution;
}
const NumericVector<Number> & solutionOldInternal() const override
{
return *_transient_sys.old_local_solution;
}

NumericVector<Number> & solutionOlder() override { return *_transient_sys.older_local_solution; }
const NumericVector<Number> & solutionOlder() const override
NumericVector<Number> & solutionOlderInternal() override
{
return *_transient_sys.older_local_solution;
}
const NumericVector<Number> & solutionOlderInternal() const override
{
return *_transient_sys.older_local_solution;
}

virtual TransientNonlinearImplicitSystem & sys() { return _transient_sys; }

void computeScaling() override;

protected:
TransientNonlinearImplicitSystem & _transient_sys;
ComputeResidualFunctor _nl_residual_functor;
ComputeFDResidualFunctor _fd_residual_functor;
Expand Down
6 changes: 3 additions & 3 deletions framework/include/systems/NonlinearSystemBase.h
Expand Up @@ -605,9 +605,6 @@ class NonlinearSystemBase : public SystemBase, public PerfGraphInterface
*/
bool hasDiagSaveIn() const { return _has_diag_save_in || _has_nodalbc_diag_save_in; }

NumericVector<Number> & solution() override { return *_sys.solution; }
const NumericVector<Number> & solution() const override { return *_sys.solution; }

virtual System & system() override { return _sys; }
virtual const System & system() const override { return _sys; }

Expand Down Expand Up @@ -719,6 +716,9 @@ class NonlinearSystemBase : public SystemBase, public PerfGraphInterface
void mortarConstraints(bool displaced);

protected:
NumericVector<Number> & solutionInternal() override { return *_sys.solution; }
const NumericVector<Number> & solutionInternal() const override { return *_sys.solution; }

/// solution vector from nonlinear solver
const NumericVector<Number> * _current_solution;
/// ghosted form of the residual
Expand Down
67 changes: 50 additions & 17 deletions framework/include/systems/SystemBase.h
Expand Up @@ -180,7 +180,7 @@ class SystemBase : public libMesh::ParallelObject, public ConsoleStreamInterface
/**
* Initialize the system
*/
virtual void init();
virtual void init(){};

/**
* Called only once, just before the solve begins so objects can do some precalculations
Expand Down Expand Up @@ -212,20 +212,26 @@ class SystemBase : public libMesh::ParallelObject, public ConsoleStreamInterface
*/
virtual const NumericVector<Number> * const & currentSolution() const = 0;

virtual NumericVector<Number> & solution() = 0;
virtual NumericVector<Number> & solutionOld() = 0;
virtual NumericVector<Number> & solutionOlder() = 0;
virtual NumericVector<Number> * solutionPreviousNewton() = 0;
virtual const NumericVector<Number> & solution() const = 0;
virtual const NumericVector<Number> & solutionOld() const = 0;
virtual const NumericVector<Number> & solutionOlder() const = 0;
NumericVector<Number> & solution() { return solutionState(0); }
NumericVector<Number> & solutionOld() { return solutionState(1); }
NumericVector<Number> & solutionOlder() { return solutionState(2); }
const NumericVector<Number> & solution() const { return solutionState(0); }
const NumericVector<Number> & solutionOld() const { return solutionState(1); }
const NumericVector<Number> & solutionOlder() const { return solutionState(2); }

virtual const NumericVector<Number> * solutionPreviousNewton() const = 0;
virtual NumericVector<Number> * solutionPreviousNewton() = 0;

/**
* Get a state of the solution.
* State 0 is the current solution, state 1 is the old solution, etc...
*/
///@{
NumericVector<Number> & solutionState(const unsigned int state);
const NumericVector<Number> & solutionState(const unsigned int state) const;
///@}

NumericVector<Number> & addSolutionState(const unsigned int state);

virtual Number & duDotDu() { return _du_dot_du; }
virtual Number & duDotDotDu() { return _du_dotdot_du; }
Expand Down Expand Up @@ -812,12 +818,36 @@ class SystemBase : public libMesh::ParallelObject, public ConsoleStreamInterface
/// caches the dof indices of provided variables in MooseMesh's FaceInfo data structure
void cacheVarIndicesByFace(const std::vector<VariableName> & vars);

protected:
/**
* Internal getters for the libMesh solution, used only in filling _solution_states
*/
///@{
virtual NumericVector<Number> & solutionInternal() = 0;
virtual const NumericVector<Number> & solutionInternal() const = 0;
///@}

/**
* Internal getters for the old libMesh solution, used only in filling _solution_states
*/
///@{
virtual NumericVector<Number> & solutionOldInternal() = 0;
virtual const NumericVector<Number> & solutionOldInternal() const = 0;
///@}

/**
* Internal getters for the older libMesh solution, used only in filling _solution_states
*/
///@{
virtual NumericVector<Number> & solutionOlderInternal() = 0;
virtual const NumericVector<Number> & solutionOlderInternal() const = 0;
///@}

/**
* Register that a certain solution state is needed (1 = old, 2 = older, etc)
*/
void needOldSolutionState(const unsigned int state);

protected:

SubProblem & _subproblem;

MooseApp & _app;
Expand Down Expand Up @@ -872,13 +902,6 @@ class SystemBase : public libMesh::ParallelObject, public ConsoleStreamInterface
/// Map variable number to its pointer
std::vector<std::vector<MooseVariableFEBase *>> _numbered_vars;

/// How many old solutions states are needed (1 = old, 2 = older, etc)
unsigned int _old_solution_states_needed;
/// The solution states (0 = current, 1 = old, 2 = older, etc)
std::vector<NumericVector<Number> *> _solution_states;
/// The saved solution states (0 = current, 1 = old, 2 = older, etc)
std::vector<NumericVector<Real> *> _saved_solution_states;

/// Storage for MooseVariable objects
MooseObjectWarehouseBase<MooseVariableBase> _variable_warehouse;

Expand All @@ -894,11 +917,21 @@ class SystemBase : public libMesh::ParallelObject, public ConsoleStreamInterface
/// True if printing out additional information
bool _verbose;

/// Whether or not init() has been called
bool _initialized;

private:
/*
* Sets up the solution states - stores older copies of the solutions in _solution_states)
*/
void setupSolutionStates();

/// How many old solutions states are needed (1 = old, 2 = older, etc)
unsigned int _old_solution_states_needed;
/// The solution states (0 = current, 1 = old, 2 = older, etc)
std::vector<NumericVector<Number> *> _solution_states;
/// The saved solution states (0 = current, 1 = old, 2 = older, etc)
std::vector<NumericVector<Real> *> _saved_solution_states;
};

#define PARALLEL_TRY
Expand Down
2 changes: 2 additions & 0 deletions framework/include/timeintegrators/CentralDifference.h
Expand Up @@ -36,6 +36,8 @@ class CentralDifference : public ActuallyExplicitEuler
/// solution vector for \f$ {du^dotdot}\over{du} \f$
Real & _du_dotdot_du;

const NumericVector<Number> & _solution_old_old_old;

/**
* Helper function that actually does the math for computing the time derivative
*/
Expand Down

0 comments on commit cfb18bd

Please sign in to comment.