128 if (_current_task ==
"add_kernel")
130 std::string kernel_name;
131 std::string kernel_type;
132 InputParameters params = _factory.getValidParams(
"Q2PNodalMass");
134 kernel_name =
"Q2P_nodal_water_mass";
135 kernel_type =
"Q2PNodalMass";
136 params = _factory.getValidParams(kernel_type);
137 params.set<NonlinearVariableName>(
"variable") =
_sat_var;
138 params.set<std::vector<VariableName>>(
"other_var") = {
_pp_var};
139 params.set<
bool>(
"var_is_porepressure") =
false;
141 params.set<std::vector<AuxVariableName>>(
"save_in") = {
"Q2P_nodal_water_mass_divided_by_dt"};
143 _problem->addKernel(kernel_type, kernel_name, params);
145 kernel_name =
"Q2P_nodal_gas_mass";
146 kernel_type =
"Q2PNodalMass";
147 params = _factory.getValidParams(kernel_type);
148 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
149 params.set<std::vector<VariableName>>(
"other_var") = {
_sat_var};
150 params.set<
bool>(
"var_is_porepressure") =
true;
152 params.set<std::vector<AuxVariableName>>(
"save_in") = {
"Q2P_nodal_gas_mass_divided_by_dt"};
153 params.set<UserObjectName>(
"fluid_density") =
_gas_density;
154 _problem->addKernel(kernel_type, kernel_name, params);
156 kernel_name =
"Q2P_nodal_water_mass_old";
157 kernel_type =
"Q2PNegativeNodalMassOld";
158 params = _factory.getValidParams(kernel_type);
159 params.set<NonlinearVariableName>(
"variable") =
_sat_var;
160 params.set<std::vector<VariableName>>(
"other_var") = {
_pp_var};
161 params.set<
bool>(
"var_is_porepressure") =
false;
163 _problem->addKernel(kernel_type, kernel_name, params);
165 kernel_name =
"Q2P_nodal_gas_mass_old";
166 kernel_type =
"Q2PNegativeNodalMassOld";
167 params = _factory.getValidParams(kernel_type);
168 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
169 params.set<std::vector<VariableName>>(
"other_var") = {
_sat_var};
170 params.set<
bool>(
"var_is_porepressure") =
true;
171 params.set<UserObjectName>(
"fluid_density") =
_gas_density;
172 _problem->addKernel(kernel_type, kernel_name, params);
174 kernel_name =
"Q2P_water_flux";
175 kernel_type =
"Q2PSaturationFlux";
176 params = _factory.getValidParams(kernel_type);
177 params.set<NonlinearVariableName>(
"variable") =
_sat_var;
178 params.set<std::vector<VariableName>>(
"porepressure_variable") = {
_pp_var};
183 params.set<std::vector<AuxVariableName>>(
"save_in") = {
"Q2PWaterFluxResidual"};
185 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = {
"Q2PWaterJacobian"};
186 _problem->addKernel(kernel_type, kernel_name, params);
188 kernel_name =
"Q2P_gas_flux";
189 kernel_type =
"Q2PPorepressureFlux";
190 params = _factory.getValidParams(kernel_type);
191 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
192 params.set<std::vector<VariableName>>(
"saturation_variable") = {
_sat_var};
193 params.set<UserObjectName>(
"fluid_density") =
_gas_density;
194 params.set<UserObjectName>(
"fluid_relperm") =
_gas_relperm;
197 params.set<std::vector<AuxVariableName>>(
"save_in") = {
"Q2PGasFluxResidual"};
199 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = {
"Q2PGasJacobian"};
200 _problem->addKernel(kernel_type, kernel_name, params);
202 kernel_name =
"Q2P_liquid_diffusion";
203 kernel_type =
"Q2PSaturationDiffusion";
204 params = _factory.getValidParams(kernel_type);
205 params.set<NonlinearVariableName>(
"variable") =
_sat_var;
206 params.set<std::vector<VariableName>>(
"porepressure_variable") = {
_pp_var};
211 _problem->addKernel(kernel_type, kernel_name, params);
214 if (_current_task ==
"add_aux_variable")
216 FEType fe_type(Utility::string_to_enum<Order>(getParam<MooseEnum>(
"ORDER")),
217 Utility::string_to_enum<FEFamily>(
"LAGRANGE"));
218 auto type = AddVariableAction::determineType(fe_type, 1);
219 auto var_params = _factory.getValidParams(type);
220 var_params.set<MooseEnum>(
"family") =
"LAGRANGE";
221 var_params.set<MooseEnum>(
"order") = getParam<MooseEnum>(
"ORDER");
226 _problem->addAuxVariable(type,
"Q2P_nodal_water_mass_divided_by_dt", var_params);
227 _problem->addAuxVariable(type,
"Q2P_nodal_gas_mass_divided_by_dt", var_params);
230 _problem->addAuxVariable(type,
"Q2PGasFluxResidual", var_params);
232 _problem->addAuxVariable(type,
"Q2PWaterFluxResidual", var_params);
234 _problem->addAuxVariable(type,
"Q2PGasJacobian", var_params);
236 _problem->addAuxVariable(type,
"Q2PWaterJacobian", var_params);
242 InputParameters params = _factory.getValidParams(
"ParsedFunction");
244 params.set<std::string>(
"value") =
"a*b";
246 std::vector<std::string> vars;
249 params.set<std::vector<std::string>>(
"vars") = vars;
251 std::vector<std::string> vals_water;
252 vals_water.push_back(
"Q2P_mass_water_divided_by_dt");
253 vals_water.push_back(
"Q2P_dt");
254 params.set<std::vector<std::string>>(
"vals") = vals_water;
255 _problem->addFunction(
"ParsedFunction",
"Q2P_water_mass_fcn", params);
257 std::vector<std::string> vals_gas;
258 vals_gas.push_back(
"Q2P_mass_gas_divided_by_dt");
259 vals_gas.push_back(
"Q2P_dt");
260 params.set<std::vector<std::string>>(
"vals") = vals_gas;
261 _problem->addFunction(
"ParsedFunction",
"Q2P_gas_mass_fcn", params);
268 InputParameters params = _factory.getValidParams(
"TimestepSize");
270 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_BEGIN;
271 params.set<std::vector<OutputName>>(
"outputs") = {
"none"};
272 _problem->addPostprocessor(
"TimestepSize",
"Q2P_dt", params);
274 params = _factory.getValidParams(
"NodalSum");
275 params.set<std::vector<OutputName>>(
"outputs") = {
"none"};
276 params.set<std::vector<VariableName>>(
"variable") = {
"Q2P_nodal_water_mass_divided_by_dt"};
277 _problem->addPostprocessor(
"NodalSum",
"Q2P_mass_water_divided_by_dt", params);
279 params = _factory.getValidParams(
"FunctionValuePostprocessor");
280 params.set<FunctionName>(
"function") =
"Q2P_water_mass_fcn";
282 _problem->addPostprocessor(
"FunctionValuePostprocessor",
"mass_water", params);
284 params = _factory.getValidParams(
"NodalSum");
285 params.set<std::vector<OutputName>>(
"outputs") = {
"none"};
286 params.set<std::vector<VariableName>>(
"variable") = {
"Q2P_nodal_gas_mass_divided_by_dt"};
287 _problem->addPostprocessor(
"NodalSum",
"Q2P_mass_gas_divided_by_dt", params);
289 params = _factory.getValidParams(
"FunctionValuePostprocessor");
290 params.set<FunctionName>(
"function") =
"Q2P_gas_mass_fcn";
292 _problem->addPostprocessor(
"FunctionValuePostprocessor",
"mass_gas", params);