https://mooseframework.inl.gov
Loading...
Searching...
No Matches
DiscreteNucleationMarker.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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
14
17{
19 params.addClassDescription("Mark new nucleation sites for refinement");
20 params.addRequiredParam<UserObjectName>("map", "DiscreteNucleationMap user object");
21 return params;
22}
23
25 : Marker(parameters),
26 _map(getUserObject<DiscreteNucleationMap>("map")),
27 _periodic_var(_map.getPeriodicVar()),
28 _inserter(_map.getInserter()),
29 _int_width(_map.getWidth()),
30 _nucleus_list(_inserter.getNucleusList())
31{
32}
33
36{
37 const RealVectorValue centroid = _current_elem->vertex_average();
38 const Real size = 0.5 * _current_elem->hmax();
39
40 // check if the surface of a nucleus might touch the element
41 for (unsigned i = 0; i < _nucleus_list.size(); ++i)
42 {
43 // get the radius of the current nucleus
44 const Real radius = _nucleus_list[i].radius;
45
46 // use a non-periodic or periodic distance
47 const Real r =
49 : (centroid - _nucleus_list[i].center).norm();
50 if (r < radius + size && r > radius - size && size > _int_width)
51 return REFINE;
52 }
53
54 // We return don't mark to allow coarsening when used in a ComboMarker
55 return DONT_MARK;
56}
registerMooseObject("PhaseFieldApp", DiscreteNucleationMarker)
Point center
This UserObject maintains a per QP map that indicates if a nucleus is present or not.
Mark new nucleation sites for refinement.
const Real _int_width
Nucleus interface width.
DiscreteNucleationMarker(const InputParameters &parameters)
const MooseVariableFieldBase *const _periodic_var
variable to use for minPeriodicDistance calls (i.e. use the periodicity of this variable)
virtual MarkerValue computeElementMarker() override
static InputParameters validParams()
const DiscreteNucleationInserterBase::NucleusList & _nucleus_list
list of nuclei maintained bu the inserter object
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
const Elem *const & _current_elem
MooseMesh & _mesh
Real minPeriodicDistance(const unsigned int sys_num, const unsigned int var_num, const Point &p, const Point &q) const
const Real radius