www.mooseframework.org
RichardsDensityConstBulkCut.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 // Fluid density assuming constant bulk modulus, but reducing via a cubic to zero at p=zero_point
11 //
13 
15 
16 template <>
17 InputParameters
19 {
20  InputParameters params = validParams<RichardsDensity>();
21  params.addRequiredParam<Real>("dens0", "Reference density of fluid. Eg 1000");
22  params.addRequiredParam<Real>("bulk_mod", "Bulk modulus of fluid. Eg 2E9");
23  params.addParam<Real>("cut_limit",
24  1E5,
25  "For porepressure > cut_limit, density = dens0*Exp(pressure/bulk). For "
26  "porepressure < cut_limie, density = cubic*dens0*Exp(pressure/bulk), where "
27  "cubic=1 for pressure=cut_limit, and cubic=0 for pressure<=zero_point");
28  params.addParam<Real>("zero_point",
29  0,
30  "For porepressure > cut_limit, density = dens0*Exp(pressure/bulk). For "
31  "porepressure < cut_limie, density = cubic*dens0*Exp(pressure/bulk), where "
32  "cubic=1 for pressure=cut_limit, and cubic=0 for pressure<=zero_point");
33  params.addClassDescription(
34  "Fluid density assuming constant bulk modulus. dens0 * Exp(pressure/bulk)");
35  return params;
36 }
37 
39  : RichardsDensity(parameters),
40  _dens0(getParam<Real>("dens0")),
41  _bulk(getParam<Real>("bulk_mod")),
42  _cut_limit(getParam<Real>("cut_limit")),
43  _zero_point(getParam<Real>("zero_point")),
44  _c3(std::pow(_cut_limit - _zero_point, 3))
45 {
46  if (_zero_point >= _cut_limit)
47  mooseError("RichardsDensityConstantbulkCut: zero_point must be less than cut_limit");
48 }
49 
50 Real
52 {
53  if (p <= _zero_point)
54  return 0;
55 
56  Real unmodified = _dens0 * std::exp(p / _bulk);
57  if (p >= _cut_limit)
58  return unmodified;
59 
60  Real modifier =
61  (3 * _cut_limit - 2 * p - _zero_point) * (p - _zero_point) * (p - _zero_point) / _c3;
62  return modifier * unmodified;
63 }
64 
65 Real
67 {
68  if (p <= _zero_point)
69  return 0;
70 
71  Real unmodified = _dens0 * std::exp(p / _bulk);
72  if (p >= _cut_limit)
73  return unmodified / _bulk;
74 
75  Real modifier =
76  (3 * _cut_limit - 2 * p - _zero_point) * (p - _zero_point) * (p - _zero_point) / _c3;
77  Real dmodifier = 6 * (_cut_limit - p) * (p - _zero_point) / _c3;
78  return (modifier / _bulk + dmodifier) * unmodified;
79 }
80 
81 Real
83 {
84  if (p <= _zero_point)
85  return 0;
86 
87  Real unmodified = _dens0 * std::exp(p / _bulk);
88  if (p >= _cut_limit)
89  return unmodified / _bulk / _bulk;
90 
91  Real modifier =
92  (3 * _cut_limit - 2 * p - _zero_point) * (p - _zero_point) * (p - _zero_point) / _c3;
93  Real dmodifier = 6 * (_cut_limit - p) * (p - _zero_point) / _c3;
94  Real d2modifier = (6 * _cut_limit + 6 * _zero_point - 12 * p) / _c3;
95  return (modifier / _bulk / _bulk + 2 * dmodifier / _bulk + d2modifier) * unmodified;
96 }
RichardsDensityConstBulkCut::ddensity
Real ddensity(Real p) const
derivative of fluid density wrt porepressure
Definition: RichardsDensityConstBulkCut.C:66
RichardsDensityConstBulkCut::_cut_limit
Real _cut_limit
where the cubic starts
Definition: RichardsDensityConstBulkCut.h:56
RichardsDensityConstBulkCut::_zero_point
Real _zero_point
where the density is zero
Definition: RichardsDensityConstBulkCut.h:59
RichardsDensityConstBulkCut
Fluid density assuming constant bulk modulus, for p>cut_limit Then following a cubic for zero_point <...
Definition: RichardsDensityConstBulkCut.h:25
RichardsDensityConstBulkCut::density
Real density(Real p) const
fluid density as a function of porepressure
Definition: RichardsDensityConstBulkCut.C:51
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
validParams< RichardsDensityConstBulkCut >
InputParameters validParams< RichardsDensityConstBulkCut >()
Definition: RichardsDensityConstBulkCut.C:18
RichardsDensityConstBulkCut::RichardsDensityConstBulkCut
RichardsDensityConstBulkCut(const InputParameters &parameters)
Definition: RichardsDensityConstBulkCut.C:38
RichardsDensityConstBulkCut::d2density
Real d2density(Real p) const
second derivative of fluid density wrt porepressure
Definition: RichardsDensityConstBulkCut.C:82
validParams< RichardsDensity >
InputParameters validParams< RichardsDensity >()
Definition: RichardsDensity.C:16
RichardsDensityConstBulkCut.h
RichardsDensity
Base class for fluid density as a function of porepressure The functions density, ddensity and d2dens...
Definition: RichardsDensity.h:24
registerMooseObject
registerMooseObject("RichardsApp", RichardsDensityConstBulkCut)
RichardsDensityConstBulkCut::_c3
Real _c3
(cut_limit-zero_point)^3
Definition: RichardsDensityConstBulkCut.h:62
RichardsDensityConstBulkCut::_dens0
Real _dens0
density = _dens0*exp(p/_bulk), modified by cubic
Definition: RichardsDensityConstBulkCut.h:50
RichardsDensityConstBulkCut::_bulk
Real _bulk
density = _dens0*exp(p/_bulk), modified by cubic
Definition: RichardsDensityConstBulkCut.h:53