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