www.mooseframework.org
RichardsHalfGaussianSinkFlux.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 
10 // This post processor returns the mass due to a half-gaussian sink flux from the boundary of a
11 // volume.
12 //
14 #include "Function.h"
15 
17 
18 template <>
19 InputParameters
21 {
22  InputParameters params = validParams<SideIntegralVariablePostprocessor>();
23  params.addRequiredParam<Real>("max",
24  "Maximum of the flux (measured in kg.m^-2.s^-1). Flux out "
25  "= max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and Flux "
26  "out = max for p>centre. Note, to make this a source "
27  "rather than a sink, let max<0");
28  params.addRequiredParam<Real>("sd",
29  "Standard deviation of the Gaussian (measured in Pa). Flux "
30  "out = max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and "
31  "Flux out = max for p>centre.");
32  params.addRequiredParam<Real>("centre",
33  "Centre of the Gaussian (measured in Pa). Flux out = "
34  "max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and "
35  "Flux out = max for p>centre.");
36  params.addParam<FunctionName>(
37  "multiplying_fcn",
38  1.0,
39  "The flux will be multiplied by this spatially-and-temporally varying function.");
40  params.addRequiredParam<UserObjectName>(
41  "richardsVarNames_UO", "The UserObject that holds the list of Richards variable names.");
42  return params;
43 }
44 
46  : SideIntegralVariablePostprocessor(parameters),
47  _feproblem(dynamic_cast<FEProblemBase &>(_subproblem)),
48  _maximum(getParam<Real>("max")),
49  _sd(getParam<Real>("sd")),
50  _centre(getParam<Real>("centre")),
51  _richards_name_UO(getUserObject<RichardsVarNames>("richardsVarNames_UO")),
52  _pvar(_richards_name_UO.richards_var_num(coupled("variable"))),
53  _m_func(getFunction("multiplying_fcn")),
54  _pp(getMaterialProperty<std::vector<Real>>("porepressure"))
55 {
56 }
57 
58 Real
60 {
61  if (_pp[_qp][_pvar] >= _centre)
62  return _maximum * _dt * _m_func.value(_t, _q_point[_qp]);
63  else
64  return _maximum * exp(-0.5 * std::pow((_pp[_qp][_pvar] - _centre) / _sd, 2)) * _dt *
65  _m_func.value(_t, _q_point[_qp]);
66 }
RichardsHalfGaussianSinkFlux::_sd
Real _sd
flux out = max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and flux out = max otherwise
Definition: RichardsHalfGaussianSinkFlux.h:44
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
RichardsVarNames
This holds maps between pressure_var or pressure_var, sat_var used in RichardsMaterial and kernels,...
Definition: RichardsVarNames.h:25
RichardsHalfGaussianSinkFlux
Postprocessor that records the mass flux from porespace to a half-gaussian sink.
Definition: RichardsHalfGaussianSinkFlux.h:30
RichardsHalfGaussianSinkFlux::_pp
const MaterialProperty< std::vector< Real > > & _pp
porepressure (or porepressure vector for multiphase problems)
Definition: RichardsHalfGaussianSinkFlux.h:68
RichardsHalfGaussianSinkFlux::_centre
Real _centre
flux out = max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and flux out = max otherwise
Definition: RichardsHalfGaussianSinkFlux.h:47
RichardsHalfGaussianSinkFlux::_pvar
unsigned int _pvar
the index of this variable in the list of Richards variables held by _richards_name_UO.
Definition: RichardsHalfGaussianSinkFlux.h:62
RichardsHalfGaussianSinkFlux::RichardsHalfGaussianSinkFlux
RichardsHalfGaussianSinkFlux(const InputParameters &parameters)
Definition: RichardsHalfGaussianSinkFlux.C:45
validParams< RichardsHalfGaussianSinkFlux >
InputParameters validParams< RichardsHalfGaussianSinkFlux >()
Definition: RichardsHalfGaussianSinkFlux.C:20
registerMooseObject
registerMooseObject("RichardsApp", RichardsHalfGaussianSinkFlux)
RichardsHalfGaussianSinkFlux::computeQpIntegral
virtual Real computeQpIntegral()
Definition: RichardsHalfGaussianSinkFlux.C:59
RichardsHalfGaussianSinkFlux::_m_func
const Function & _m_func
the multiplier function
Definition: RichardsHalfGaussianSinkFlux.h:65
RichardsHalfGaussianSinkFlux.h
RichardsHalfGaussianSinkFlux::_maximum
Real _maximum
flux out = max*exp((-0.5*(p - centre)/sd)^2) for p<centre, and flux out = max otherwise
Definition: RichardsHalfGaussianSinkFlux.h:41