https://mooseframework.inl.gov
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 
11 #include "DiscreteNucleationMap.h"
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(_map.getPeriodic()),
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 = _periodic < 0
48  ? (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 }
static InputParameters validParams()
DiscreteNucleationMarker(const InputParameters &parameters)
virtual MarkerValue computeElementMarker() override
const Real radius
This UserObject maintains a per QP map that indicates if a nucleus is present or not.
registerMooseObject("PhaseFieldApp", DiscreteNucleationMarker)
const Elem *const & _current_elem
void addRequiredParam(const std::string &name, const std::string &doc_string)
MooseMesh & _mesh
auto norm(const T &a) -> decltype(std::abs(a))
const DiscreteNucleationInserterBase::NucleusList & _nucleus_list
list of nuclei maintained bu the inserter object
Real minPeriodicDistance(unsigned int nonlinear_var_num, Point p, Point q) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
int _periodic
variable number to use for minPeriodicDistance calls (i.e. use the periodicity of this variable) ...
const Real _int_width
Nucleus interface width.
static InputParameters validParams()
Mark new nucleation sites for refinement.
static const std::string center
Definition: NS.h:28