Line data Source code
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 : 10 : #include "DiscreteNucleationForce.h" 11 : #include "DiscreteNucleationMap.h" 12 : 13 : registerMooseObject("PhaseFieldApp", DiscreteNucleationForce); 14 : 15 : InputParameters 16 23 : DiscreteNucleationForce::validParams() 17 : { 18 23 : InputParameters params = Kernel::validParams(); 19 23 : params.addClassDescription( 20 : "Term for inserting grain nuclei or phases in non-conserved order parameter fields"); 21 46 : params.addRequiredParam<UserObjectName>("map", "DiscreteNucleationMap user object"); 22 46 : params.addParam<Real>("no_nucleus_value", 0.0, "Variable value indicating no nucleus is present"); 23 46 : params.addParam<Real>( 24 46 : "nucleus_value", 1.0, "Variable value indicating the presence of a nucleus"); 25 23 : return params; 26 0 : } 27 : 28 12 : DiscreteNucleationForce::DiscreteNucleationForce(const InputParameters & params) 29 : : Kernel(params), 30 12 : _map(getUserObject<DiscreteNucleationMap>("map")), 31 24 : _v0(getParam<Real>("no_nucleus_value")), 32 36 : _v1(getParam<Real>("nucleus_value")) 33 : { 34 12 : } 35 : 36 : void 37 50000 : DiscreteNucleationForce::precalculateResidual() 38 : { 39 : // check if a nucleation event list is available for the current element 40 50000 : _nucleus = &_map.nuclei(_current_elem); 41 50000 : } 42 : 43 : Real 44 800000 : DiscreteNucleationForce::computeQpResidual() 45 : { 46 800000 : return -((*_nucleus)[_qp] * (_v1 - _v0) + _v0) * _test[_i][_qp]; 47 : }