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 : #ifdef MOOSE_MFEM_ENABLED 11 : 12 : #include "MFEMScalarTimeAverageAux.h" 13 : #include "MFEMProblem.h" 14 : 15 : registerMooseObject("MooseApp", MFEMScalarTimeAverageAux); 16 : 17 : InputParameters 18 8644 : MFEMScalarTimeAverageAux::validParams() 19 : { 20 8644 : InputParameters params = MFEMAuxKernel::validParams(); 21 17288 : params.addClassDescription( 22 : "Calculates a running time average of a scalar MFEM variable projected onto an auxvariable"); 23 34576 : params.addRequiredParam<VariableName>("source", "Scalar MFEMVariable to take the average of."); 24 25932 : params.addParam<mfem::real_t>("time_skip", 0.0, "Time to skip before beginning the average."); 25 : 26 8644 : return params; 27 0 : } 28 : 29 7 : MFEMScalarTimeAverageAux::MFEMScalarTimeAverageAux(const InputParameters & parameters) 30 : : MFEMAuxKernel(parameters), 31 7 : _source_var_name(getParam<VariableName>("source")), 32 7 : _source_var_coefficient(getScalarCoefficientByName(_source_var_name)), 33 7 : _result_var_coefficient(getScalarCoefficientByName(_result_var_name)), 34 7 : _average_var(_result_var.ParFESpace()), 35 14 : _skip(getParam<Real>("time_skip")), 36 7 : _time(getMFEMProblem().time()), 37 14 : _dt(getMFEMProblem().dt()) 38 : { 39 7 : } 40 : 41 : void 42 21 : MFEMScalarTimeAverageAux::execute() 43 : { 44 21 : if (_time <= _skip) 45 7 : return; 46 : 47 : // Linear blend: (1 - w) * avg_old + w * src 48 14 : const mfem::real_t w = _dt / (_time - _skip); 49 14 : mfem::SumCoefficient blend(_result_var_coefficient, _source_var_coefficient, 1.0 - w, w); 50 14 : _average_var.ProjectCoefficient(blend); 51 : 52 14 : _result_var = _average_var; 53 14 : } 54 : 55 : #endif