14#include "libmesh/quadrature.h"
22 params.
addClassDescription(
"Generates a spatial smoothed map of all nucleation sites with the "
23 "data of the DiscreteNucleationInserter for use by the "
24 "DiscreteNucleation material.");
25 params.
addParam<Real>(
"int_width", 0.0,
"Nucleus interface width for smooth nuclei");
26 params.
addRequiredParam<UserObjectName>(
"inserter",
"DiscreteNucleationInserter user object");
28 "Use the periodicity settings of this variable to populate the grain map");
39 _periodic_var(isCoupled(
"periodic") ? getFieldVar(
"periodic", 0) : nullptr),
40 _int_width(getParam<Real>(
"int_width")),
41 _nucleus_list(_inserter.getNucleusList())
79 unsigned int active_nuclei = 0;
80 for (
unsigned int qp = 0; qp <
_qrule->n_points(); ++qp)
82 Real r = std::numeric_limits<Real>::max();
85 Real local_radius = 0.0;
107 value = (1.0 + std::cos(int_pos *
libMesh::pi)) / 2.0;
115 if (active_nuclei > 0)
128 _nucleus_map.insert(uo._nucleus_map.begin(), uo._nucleus_map.end());
138const std::vector<Real> &
141 NucleusMap::const_iterator i =
_nucleus_map.find(elem->id());
registerMooseObject("PhaseFieldApp", DiscreteNucleationMap)
const std::vector< double > y
const ExecFlagType EXEC_TIMESTEP_BEGIN
This UserObject manages the insertion and expiration of nuclei in the simulation domain it manages a ...
virtual bool isMapUpdateRequired() const
This UserObject maintains a per QP map that indicates if a nucleus is present or not.
static InputParameters validParams()
bool _rebuild_map
Do we need to rebuild the map during this timestep?
const Real _int_width
Nucleus interface width.
virtual void initialize()
DiscreteNucleationMap(const InputParameters ¶meters)
bool _mesh_changed
Did the mesh change since the last execution of this PP?
std::vector< Real > _zero_map
Dummy map for elements without nuclei.
const DiscreteNucleationInserterBase & _inserter
UserObject that manages nucleus insertin and deletion.
bool _force_rebuild_map
If a timestep is repeated due to a failed solve, we don't want to rebuild the map.
const std::vector< Real > & nuclei(const Elem *) const
const MooseVariableFieldBase *const _periodic_var
variable to use for minPeriodicDistance calls (i.e. use the periodicity of this variable)
virtual void meshChanged()
const DiscreteNucleationInserterBase::NucleusList & _nucleus_list
list of nuclei maintained bu the inserter object
std::vector< Real > _elem_map
Buffer for building the per QP map.
virtual void threadJoin(const UserObject &y)
static InputParameters validParams()
const QBase *const & _qrule
const Elem *const & _current_elem
const MooseArray< Point > & _q_point
virtual bool lastSolveConverged() const=0
unsigned int getMaxQps() const
Executioner * getExecutioner() const
Real minPeriodicDistance(const unsigned int sys_num, const unsigned int var_num, const Point &p, const Point &q) const
FEProblemBase & _fe_problem