www.mooseframework.org
DiscreteNucleationMarker.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 
11 #include "DiscreteNucleationMap.h"
12 
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<Marker>();
20  params.addClassDescription("Mark new nucleation sites for refinement");
21  params.addRequiredParam<UserObjectName>("map", "DiscreteNucleationMap user object");
22  return params;
23 }
24 
25 DiscreteNucleationMarker::DiscreteNucleationMarker(const InputParameters & parameters)
26  : Marker(parameters),
27  _map(getUserObject<DiscreteNucleationMap>("map")),
28  _periodic(_map.getPeriodic()),
29  _inserter(_map.getInserter()),
30  _radius(_map.getRadiusAndWidth().first),
31  _int_width(_map.getRadiusAndWidth().second),
32  _nucleus_list(_inserter.getNucleusList())
33 {
34 }
35 
36 Marker::MarkerValue
38 {
39  const RealVectorValue centroid = _current_elem->centroid();
40  const Real size = 0.5 * _current_elem->hmax();
41 
42  // check if the surface of a nucleus might touch the element
43  for (unsigned i = 0; i < _nucleus_list.size(); ++i)
44  {
45  // use a non-periodic or periodic distance
46  const Real r = _periodic < 0
47  ? (centroid - _nucleus_list[i].second).norm()
48  : _mesh.minPeriodicDistance(_periodic, centroid, _nucleus_list[i].second);
49  if (r < _radius + size && r > _radius - size && size > _int_width)
50  return REFINE;
51  }
52 
53  // We return don't mark to allow coarsening when used in a ComboMarker
54  return DONT_MARK;
55 }
DiscreteNucleationMarker.h
DiscreteNucleationMarker::_periodic
int _periodic
variable number to use for minPeriodicDistance calls (i.e. use the periodicity of this variable)
Definition: DiscreteNucleationMarker.h:36
DiscreteNucleationMap
This UserObject maintains a per QP map that indicates if a nucleus is present or not.
Definition: DiscreteNucleationMap.h:25
DiscreteNucleationMap.h
DiscreteNucleationMarker::_radius
const Real _radius
Nucleus radius.
Definition: DiscreteNucleationMarker.h:42
validParams< DiscreteNucleationMarker >
InputParameters validParams< DiscreteNucleationMarker >()
Definition: DiscreteNucleationMarker.C:17
DiscreteNucleationMarker::computeElementMarker
virtual MarkerValue computeElementMarker() override
Definition: DiscreteNucleationMarker.C:37
DiscreteNucleationMarker::DiscreteNucleationMarker
DiscreteNucleationMarker(const InputParameters &parameters)
Definition: DiscreteNucleationMarker.C:25
registerMooseObject
registerMooseObject("PhaseFieldApp", DiscreteNucleationMarker)
DiscreteNucleationMarker::_nucleus_list
const DiscreteNucleationInserterBase::NucleusList & _nucleus_list
list of nuclei maintained bu the inserter object
Definition: DiscreteNucleationMarker.h:48
DiscreteNucleationMarker
Mark new nucleation sites for refinement.
Definition: DiscreteNucleationMarker.h:24
DiscreteNucleationMarker::_int_width
const Real _int_width
Nucleus interface width.
Definition: DiscreteNucleationMarker.h:45