Line data Source code
1 : /****************************************************************/ 2 : /* DO NOT MODIFY THIS HEADER */ 3 : /* BlackBear */ 4 : /* */ 5 : /* (c) 2017 Battelle Energy Alliance, LLC */ 6 : /* ALL RIGHTS RESERVED */ 7 : /* */ 8 : /* Prepared by Battelle Energy Alliance, LLC */ 9 : /* Under Contract No. DE-AC07-05ID14517 */ 10 : /* With the U. S. Department of Energy */ 11 : /* */ 12 : /* See COPYRIGHT for full restrictions */ 13 : /****************************************************************/ 14 : 15 : #ifdef NEML_ENABLED 16 : 17 : #include "NEMLThermalExpansionEigenstrain.h" 18 : #include "CastDualNumber.h" 19 : #include <string> 20 : 21 : registerMooseObject("BlackBearApp", NEMLThermalExpansionEigenstrain); 22 : 23 : InputParameters 24 55 : NEMLThermalExpansionEigenstrain::validParams() 25 : { 26 55 : InputParameters params = ComputeThermalExpansionEigenstrainBase::validParams(); 27 55 : params.addClassDescription("Use a model in the NEML library to compute thermal expansion"); 28 110 : params.addRequiredParam<FileName>("database", "Path to NEML XML database."); 29 110 : params.addRequiredParam<std::string>("model", "Model name in NEML database."); 30 55 : return params; 31 0 : } 32 : 33 42 : NEMLThermalExpansionEigenstrain::NEMLThermalExpansionEigenstrain(const InputParameters & parameters) 34 : : ComputeThermalExpansionEigenstrainBase(parameters), 35 84 : _fname(getParam<FileName>("database")), 36 84 : _mname(getParam<std::string>("model")), 37 84 : _thermal_strain(declareGenericProperty<Real, false>(_base_name + "tstrain")), 38 84 : _thermal_strain_old(getMaterialPropertyOld<Real>(_base_name + "tstrain")), 39 126 : _temperature_old(coupledValueOld("temperature")) 40 : { 41 126 : _model = neml::parse_xml_unique(_fname, _mname); 42 42 : } 43 : 44 : ValueAndDerivative<false> 45 336 : NEMLThermalExpansionEigenstrain::computeThermalStrain() 46 : { 47 336 : Real nemlCTE = _model->alpha(MetaPhysicL::raw_value(_temperature[_qp])); 48 336 : Real nemlCTE_old = _model->alpha(_temperature_old[_qp]); 49 : 50 : const auto thermal_strain = 51 336 : _thermal_strain_old[_qp] + 52 336 : (nemlCTE + nemlCTE_old) / 2 * (_temperature[_qp] - _temperature_old[_qp]); 53 336 : _thermal_strain[_qp] = dual_number_cast<GenericReal<false>>(thermal_strain); 54 : 55 336 : return thermal_strain; 56 : } 57 : 58 : void 59 112 : NEMLThermalExpansionEigenstrain::initQpStatefulProperties() 60 : { 61 112 : ComputeThermalExpansionEigenstrainBase::initQpStatefulProperties(); 62 112 : _thermal_strain[_qp] = 0.0; 63 112 : } 64 : 65 : #endif // NEML_ENABLED