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 "FVPorousFlowEnergyTimeDerivative.h" 11 : #include "PorousFlowDictator.h" 12 : 13 : registerADMooseObject("PorousFlowApp", FVPorousFlowEnergyTimeDerivative); 14 : 15 : InputParameters 16 123 : FVPorousFlowEnergyTimeDerivative::validParams() 17 : { 18 123 : InputParameters params = FVTimeKernel::validParams(); 19 246 : params.addRequiredParam<UserObjectName>("PorousFlowDictator", 20 : "The PorousFlowDictator UserObject"); 21 123 : params.addClassDescription("Derivative of heat energy with respect to time"); 22 123 : return params; 23 0 : } 24 : 25 66 : FVPorousFlowEnergyTimeDerivative::FVPorousFlowEnergyTimeDerivative( 26 66 : const InputParameters & parameters) 27 : : FVTimeKernel(parameters), 28 66 : _dictator(getUserObject<PorousFlowDictator>("PorousFlowDictator")), 29 66 : _num_phases(_dictator.numPhases()), 30 66 : _fluid_present(_num_phases > 0), 31 132 : _porosity(getADMaterialProperty<Real>("PorousFlow_porosity_qp")), 32 132 : _porosity_old(getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")), 33 132 : _density(_fluid_present 34 110 : ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_fluid_phase_density_qp") 35 : : nullptr), 36 110 : _density_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>( 37 : "PorousFlow_fluid_phase_density_qp") 38 : : nullptr), 39 132 : _rock_energy(getADMaterialProperty<Real>("PorousFlow_matrix_internal_energy_nodal")), 40 132 : _rock_energy_old(getMaterialPropertyOld<Real>("PorousFlow_matrix_internal_energy_nodal")), 41 110 : _energy(_fluid_present ? &getADMaterialProperty<std::vector<Real>>( 42 : "PorousFlow_fluid_phase_internal_energy_qp") 43 : : nullptr), 44 110 : _energy_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>( 45 : "PorousFlow_fluid_phase_internal_energy_qp") 46 : : nullptr), 47 132 : _saturation(_fluid_present 48 110 : ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_saturation_qp") 49 : : nullptr), 50 132 : _saturation_old(_fluid_present 51 110 : ? &getMaterialPropertyOld<std::vector<Real>>("PorousFlow_saturation_qp") 52 66 : : nullptr) 53 : { 54 66 : } 55 : 56 : ADReal 57 93610 : FVPorousFlowEnergyTimeDerivative::computeQpResidual() 58 : { 59 : /// Porous matrix heat energy 60 93610 : ADReal energy = (1.0 - _porosity[_qp]) * _rock_energy[_qp]; 61 93610 : Real energy_old = (1.0 - _porosity_old[_qp]) * _rock_energy_old[_qp]; 62 : 63 : /// Add the fluid heat energy 64 93610 : if (_fluid_present) 65 184490 : for (const auto p : make_range(_num_phases)) 66 : { 67 187220 : energy += _porosity[_qp] * (*_density)[_qp][p] * (*_saturation)[_qp][p] * (*_energy)[_qp][p]; 68 93610 : energy_old += _porosity_old[_qp] * (*_density_old)[_qp][p] * (*_saturation_old)[_qp][p] * 69 93610 : (*_energy_old)[_qp][p]; 70 : } 71 : 72 187220 : return (energy - energy_old) / _dt; 73 : }