From 010f070e9be2f692c7f1a20513be189e24413db8 Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai Date: Tue, 3 Oct 2023 13:35:19 -0600 Subject: [PATCH 1/7] Add FV type to `ChemicalCompositionAction` (#25661) --- .../include/actions/ChemicalCompositionAction.h | 3 +++ .../src/actions/ChemicalCompositionAction.C | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h index c70a2226bcbe..990c6892a805 100644 --- a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h +++ b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h @@ -68,6 +68,9 @@ class ChemicalCompositionAction : public Action /// Mass/amount unit std::string _munit; + /// Are the variables FV type + bool _is_fv; + /// List of phases tracked by Thermochimica std::vector _phases; diff --git a/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C b/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C index 672036205dcd..40fe6a81475c 100644 --- a/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C +++ b/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C @@ -60,6 +60,7 @@ ChemicalCompositionAction::validParams() exec_enum = {EXEC_INITIAL, EXEC_TIMESTEP_END}; params.addParam( "execute_on", exec_enum, "When to execute the ThermochimicaNodalData UO"); + params.addParam("is_fv", false, "Should the variables set up by action be of FV type"); params.addParam>("output_phases", "List of phases to be output"); params.addParam>( @@ -87,6 +88,7 @@ ChemicalCompositionAction::ChemicalCompositionAction(const InputParameters & par _tunit(getParam("tunit")), _punit(getParam("punit")), _munit(getParam("munit")), + _is_fv(getParam("is_fv")), _phases(getParam>("output_phases")), _species(getParam>("output_species")), _output_mass_unit(getParam("output_species_unit")), @@ -407,11 +409,14 @@ ChemicalCompositionAction::act() // if (_current_task == "add_aux_variable") { - const std::string aux_var_type = "MooseVariable"; + + auto aux_var_type = AddVariableAction::variableType( + FEType(Utility::string_to_enum(_problem->mesh().hasSecondOrderElements() ? "SECOND" + : "FIRST"), + Utility::string_to_enum("LAGRANGE")), + /* is_fv = */ _is_fv, + /* is_array = */ false); auto params = _factory.getValidParams(aux_var_type); - const bool second = _problem->mesh().hasSecondOrderElements(); - params.set("order") = second ? "SECOND" : "FIRST"; - params.set("family") = "LAGRANGE"; for (const auto i : index_range(_elements)) _problem->addAuxVariable(aux_var_type, _elements[i], params); From 5c714970750da613ac405cc10d58315df539d65f Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai Date: Tue, 3 Oct 2023 11:02:40 -0600 Subject: [PATCH 2/7] `MooseWritableVariable` type for `Coupleable::writableVariable` (#25661) `MooseWritableVariable` is of the type `MooseVariableField` and extends the applicability to `writableVariable` which would return a reference to `MooseVariable` type. This change allows `writableVariable` to be extended for use with FV variables --- .../content/source/interfaces/Coupleable.md | 3 +-- framework/include/interfaces/Coupleable.h | 21 ++++++++++++------- framework/src/interfaces/Coupleable.C | 6 +++--- .../userobjects/ThermochimicaNodalData.h | 10 ++++----- test/include/auxkernels/MultipleUpdateAux.h | 4 ++-- .../auxkernels/MultipleUpdateElemAux.h | 2 +- .../kernels/MultipleUpdateErrorKernel.h | 4 ++-- .../userobjects/MultiUpdateElementalUO.h | 2 +- test/include/userobjects/MultiUpdateNodalUO.h | 2 +- 9 files changed, 29 insertions(+), 25 deletions(-) diff --git a/framework/doc/content/source/interfaces/Coupleable.md b/framework/doc/content/source/interfaces/Coupleable.md index ddb8f300d2ce..4c940093bee9 100644 --- a/framework/doc/content/source/interfaces/Coupleable.md +++ b/framework/doc/content/source/interfaces/Coupleable.md @@ -146,8 +146,7 @@ process. These functions can be found here: ## Writing directly to coupled variables Element- and nodal user objects as well AuxKernels may obtain a writable reference to a MOOSE field variable -through the `Coupleable::writableVariable` function. The returned variable reference provides a `setNodalValue` -method that can be used to set the nodal or elemental DOF value(s) of the variable. +through the `Coupleable::writableVariable` function. The returned variable reference provides a `setDofValue` (for FE and FV variables) and `setNodalvalue` (only for FE variables) methods that can be used to set the nodal or elemental DOF value(s) of the variable. `Coupleable::writableVariable` enforces compatibility between the calling object type and the family of the requested variable. I.e. nodal user objects and AuxKernels may only obtain references to nodal variables, and diff --git a/framework/include/interfaces/Coupleable.h b/framework/include/interfaces/Coupleable.h index e667b5eeda93..ba3dffd44d10 100644 --- a/framework/include/interfaces/Coupleable.h +++ b/framework/include/interfaces/Coupleable.h @@ -33,6 +33,10 @@ template class DenseVector; } +template +class MooseVariableField; +typedef MooseVariableField MooseWritableVariable; + /** * Interface for objects that needs coupling capabilities * @@ -492,16 +496,17 @@ class Coupleable /** * Returns a *writable* MooseVariable object for a nodal or elemental variable. Use - * var.setNodalValue(val[, idx]) in both cases (!) to set the solution DOF values. Only one object - * can obtain a writable reference in a simulation. Note that the written values will not ba - * available in the same system loop! E.g. values written using this API by a nodal AuxKernel will - * not be updated for other nodal AuxKernels during the same iteration over all nodes. + * var.setNodalValue(val[, idx]) in both cases (!) to set the solution DOF values. Only one + * object can obtain a writable reference in a simulation. Note that the written values will + * not ba available in the same system loop! E.g. values written using this API by a nodal + * AuxKernel will not be updated for other nodal AuxKernels during the same iteration over all + * nodes. * @param var_name Name of coupled variable * @param comp Component number for vector of coupled variables - * @return Reference to a MooseVariable for the coupled variable + * @return Reference to a MooseWritableVariable for the coupled variable * @see Kernel::value */ - MooseVariable & writableVariable(const std::string & var_name, unsigned int comp = 0); + MooseWritableVariable & writableVariable(const std::string & var_name, unsigned int comp = 0); /** * Returns a *writable* reference to a coupled variable for writing to multiple @@ -517,7 +522,7 @@ class Coupleable /** * Checks that the passed in variable is only accessed writable by one object in a given subdomain */ - void checkWritableVar(MooseVariable * var); + void checkWritableVar(MooseWritableVariable * var); /** * Returns an old value from previous time step of a coupled variable @@ -1679,7 +1684,7 @@ class Coupleable Moose::OLDER_SOLUTION_TAG}; /// keep a set of allocated writable variable references to make sure only one object can obtain them per thread - std::vector> _writable_coupled_variables; + std::vector> _writable_coupled_variables; }; template diff --git a/framework/src/interfaces/Coupleable.C b/framework/src/interfaces/Coupleable.C index 843041ec0aba..091f79a6089e 100644 --- a/framework/src/interfaces/Coupleable.C +++ b/framework/src/interfaces/Coupleable.C @@ -847,10 +847,10 @@ Coupleable::coupledArrayValues(const std::string & var_name) const return coupledVectorHelper(var_name, func); } -MooseVariable & +MooseWritableVariable & Coupleable::writableVariable(const std::string & var_name, unsigned int comp) { - auto * var = dynamic_cast(getVar(var_name, comp)); + auto * var = dynamic_cast(getVar(var_name, comp)); const auto * aux = dynamic_cast(this); const auto * euo = dynamic_cast(this); @@ -920,7 +920,7 @@ Coupleable::writableCoupledValue(const std::string & var_name, unsigned int comp } void -Coupleable::checkWritableVar(MooseVariable * var) +Coupleable::checkWritableVar(MooseWritableVariable * var) { // check block restrictions for compatibility const auto * br = dynamic_cast(this); diff --git a/modules/chemical_reactions/include/userobjects/ThermochimicaNodalData.h b/modules/chemical_reactions/include/userobjects/ThermochimicaNodalData.h index cb9d5ee84995..45b74ffd2c66 100644 --- a/modules/chemical_reactions/include/userobjects/ThermochimicaNodalData.h +++ b/modules/chemical_reactions/include/userobjects/ThermochimicaNodalData.h @@ -92,19 +92,19 @@ class ThermochimicaNodalData : public NodalUserObject ///@} /// Writable phase amount variables - std::vector _ph; + std::vector _ph; /// Writable species amount variables - std::vector _sp; + std::vector _sp; /// Writable vapour pressures for each element - std::vector _vp; + std::vector _vp; /// Writable chemical potential variables for each element - std::vector _el_pot; + std::vector _el_pot; /// Writable variable for molar amounts of each element in specified phase - std::vector _el_ph; + std::vector _el_ph; /// Mass unit for output species const enum class OutputMassUnit { MOLES, FRACTION } _output_mass_unit; diff --git a/test/include/auxkernels/MultipleUpdateAux.h b/test/include/auxkernels/MultipleUpdateAux.h index a9f850f8936a..5a88f72d1387 100644 --- a/test/include/auxkernels/MultipleUpdateAux.h +++ b/test/include/auxkernels/MultipleUpdateAux.h @@ -31,8 +31,8 @@ class MultipleUpdateAux : public AuxKernel const bool _deprecated; /// current API - MooseVariable * _var1; - MooseVariable * _var2; + MooseWritableVariable * _var1; + MooseWritableVariable * _var2; /// deprectated API VariableValue * _dvar1; diff --git a/test/include/auxkernels/MultipleUpdateElemAux.h b/test/include/auxkernels/MultipleUpdateElemAux.h index 63425fff94a4..fdd96fb9de9e 100644 --- a/test/include/auxkernels/MultipleUpdateElemAux.h +++ b/test/include/auxkernels/MultipleUpdateElemAux.h @@ -28,7 +28,7 @@ class MultipleUpdateElemAux : public AuxKernel virtual void computeVarValues(std::vector & values); unsigned int _n_vars; - std::vector _vars; + std::vector _vars; const bool _use_compute_value; }; diff --git a/test/include/kernels/MultipleUpdateErrorKernel.h b/test/include/kernels/MultipleUpdateErrorKernel.h index 4838751a8774..9768cea7cfe4 100644 --- a/test/include/kernels/MultipleUpdateErrorKernel.h +++ b/test/include/kernels/MultipleUpdateErrorKernel.h @@ -30,8 +30,8 @@ class MultipleUpdateErrorKernel : public Kernel const bool _deprecated; /// current API - MooseVariable * _var1; - MooseVariable * _var2; + MooseWritableVariable * _var1; + MooseWritableVariable * _var2; /// deprectated API VariableValue * _dvar1; diff --git a/test/include/userobjects/MultiUpdateElementalUO.h b/test/include/userobjects/MultiUpdateElementalUO.h index 139caba2e1ea..4ffce30d0104 100644 --- a/test/include/userobjects/MultiUpdateElementalUO.h +++ b/test/include/userobjects/MultiUpdateElementalUO.h @@ -27,5 +27,5 @@ class MultiUpdateElementalUO : public ElementUserObject virtual void threadJoin(const UserObject &) override {} protected: - MooseVariable & _v; + MooseWritableVariable & _v; }; diff --git a/test/include/userobjects/MultiUpdateNodalUO.h b/test/include/userobjects/MultiUpdateNodalUO.h index f05a2995dc50..0ce7e8445ea1 100644 --- a/test/include/userobjects/MultiUpdateNodalUO.h +++ b/test/include/userobjects/MultiUpdateNodalUO.h @@ -27,5 +27,5 @@ class MultiUpdateNodalUO : public NodalUserObject virtual void threadJoin(const UserObject &) override {} protected: - MooseVariable & _v; + MooseWritableVariable & _v; }; From 411a16dcdc69ed2d34e77ff0d9b5711efab5adf8 Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai Date: Mon, 2 Oct 2023 10:48:58 -0600 Subject: [PATCH 3/7] Use `setDofValue` instead of `setNodalValue` in `ThermochimicaNodalData` (#25661) --- .../src/userobjects/ThermochimicaNodalData.C | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/chemical_reactions/src/userobjects/ThermochimicaNodalData.C b/modules/chemical_reactions/src/userobjects/ThermochimicaNodalData.C index 30581b1308d2..0a863cce6997 100644 --- a/modules/chemical_reactions/src/userobjects/ThermochimicaNodalData.C +++ b/modules/chemical_reactions/src/userobjects/ThermochimicaNodalData.C @@ -188,9 +188,9 @@ ThermochimicaNodalData::execute() mooseError("Failed to get index of phase '", _ph_names[i], "'"); // Convert from 1-based (fortran) to 0-based (c++) indexing if (index - 1 < 0) - _ph[i]->setNodalValue(0.0, _qp); + _ph[i]->setDofValue(0.0, _qp); else - _ph[i]->setNodalValue(moles_phase[index - 1], _qp); + _ph[i]->setDofValue(moles_phase[index - 1], _qp); } auto db_phases = Thermochimica::getPhaseNamesSystem(); @@ -258,9 +258,9 @@ ThermochimicaNodalData::execute() _species_phase_pairs[i].second); // can we somehow use IDs instead of strings here? if (idbg == 0) - _sp[i]->setNodalValue(fraction, _qp); + _sp[i]->setDofValue(fraction, _qp); else if (idbg == 1) - _sp[i]->setNodalValue(0.0, _qp); + _sp[i]->setDofValue(0.0, _qp); #ifndef NDEBUG else mooseError("Failed to get phase speciation for phase '", @@ -278,10 +278,10 @@ ThermochimicaNodalData::execute() auto [potential, idbg] = Thermochimica::getOutputChemPot(_element_potentials[i]); if (idbg == 0) - _el_pot[i]->setNodalValue(potential, _qp); + _el_pot[i]->setDofValue(potential, _qp); else if (idbg == 1) // element not present, just leave this at 0 for now - _el_pot[i]->setNodalValue(0.0, _qp); + _el_pot[i]->setDofValue(0.0, _qp); else if (idbg == -1) Moose::out << "getoutputchempot " << idbg << "\n"; } @@ -294,9 +294,9 @@ ThermochimicaNodalData::execute() libmesh_ignore(moles); if (idbg == 0) - _vp[i]->setNodalValue(fraction * pressure, _qp); + _vp[i]->setDofValue(fraction * pressure, _qp); else if (idbg == 1) - _vp[i]->setNodalValue(0.0, _qp); + _vp[i]->setDofValue(0.0, _qp); #ifndef NDEBUG else mooseError("Failed to get vapor pressure for phase '", @@ -315,9 +315,9 @@ ThermochimicaNodalData::execute() _phase_element_pairs[i].first); if (idbg == 0) - _el_ph[i]->setNodalValue(moles, _qp); + _el_ph[i]->setDofValue(moles, _qp); else if (idbg == 1) - _el_ph[i]->setNodalValue(0.0, _qp); + _el_ph[i]->setDofValue(0.0, _qp); #ifndef NDEBUG else mooseError("Failed to get moles of element '", From eb9922933aca7d725c556029cf0beb0543ef2c4a Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai Date: Wed, 4 Oct 2023 15:44:34 -0600 Subject: [PATCH 4/7] Tests for `writableVariable` on FV variables (#25661) - Switches to direct call to `Coupleable::getVarHelper` in `Coupleable::writableVariable` - Added `test/tests/auxkernels/nodal_aux_var/multi_update_fv_test.i` --- .../content/source/interfaces/Coupleable.md | 3 + framework/src/interfaces/Coupleable.C | 2 +- .../actions/ChemicalCompositionAction.h | 1 + test/src/auxkernels/MultipleUpdateAux.C | 10 ++- .../nodal_aux_var/gold/out_multi_var_fv.e | Bin 0 -> 42644 bytes .../nodal_aux_var/multi_update_fv_test.i | 84 ++++++++++++++++++ test/tests/auxkernels/nodal_aux_var/tests | 11 ++- 7 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 test/tests/auxkernels/nodal_aux_var/gold/out_multi_var_fv.e create mode 100644 test/tests/auxkernels/nodal_aux_var/multi_update_fv_test.i diff --git a/framework/doc/content/source/interfaces/Coupleable.md b/framework/doc/content/source/interfaces/Coupleable.md index 4c940093bee9..ee374e91ae20 100644 --- a/framework/doc/content/source/interfaces/Coupleable.md +++ b/framework/doc/content/source/interfaces/Coupleable.md @@ -159,3 +159,6 @@ variable in the system may at most be written to by a single object on any given The user object and aux kernel thread loops check if an executed object has any writable variable references, and if so, will insert those variables into the aux solution vector. This obviates the need for using the [`ProjectionAux`](ProjectionAux.md) kernel. + +!alert warning +`Coupleable::writableVariable` can let users write to both FE / FV from AuxKernels and UserObjects but one must exercise caution about whether Nodal or Elemental type AuxKernels / UOs are used as the quadrature would depend on this choice and might lead to segfault if a FV variable values are set using `setDofValue` function for non-zero values of `_qp` . diff --git a/framework/src/interfaces/Coupleable.C b/framework/src/interfaces/Coupleable.C index 091f79a6089e..22f00456b791 100644 --- a/framework/src/interfaces/Coupleable.C +++ b/framework/src/interfaces/Coupleable.C @@ -850,7 +850,7 @@ Coupleable::coupledArrayValues(const std::string & var_name) const MooseWritableVariable & Coupleable::writableVariable(const std::string & var_name, unsigned int comp) { - auto * var = dynamic_cast(getVar(var_name, comp)); + auto * var = getVarHelper(var_name, comp); const auto * aux = dynamic_cast(this); const auto * euo = dynamic_cast(this); diff --git a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h index 990c6892a805..c49c05e69cbb 100644 --- a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h +++ b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h @@ -9,6 +9,7 @@ #pragma once +#include "AddVariableAction.h" #include "AddFunctionAction.h" /** diff --git a/test/src/auxkernels/MultipleUpdateAux.C b/test/src/auxkernels/MultipleUpdateAux.C index 95c77daa9452..c329852be687 100644 --- a/test/src/auxkernels/MultipleUpdateAux.C +++ b/test/src/auxkernels/MultipleUpdateAux.C @@ -52,8 +52,14 @@ MultipleUpdateAux::computeValue() } else { - _var1->setNodalValue(_nl_u[_qp] + 10.0, _qp); - _var2->setNodalValue(_nl_u[_qp] + 200.0, _qp); + /* + For NodalKernels the index _qp is always 0 and the computeValue method is executed on each + node but when using ElementalKernels the computeValue method is executed on each quadrature + point of an element. For this reason, in multi_update_fv_test.i input file, the quadrature is + set to Constant order since for FV variables there's only one DOF value locally. + */ + _var1->setDofValue(_nl_u[_qp] + 10.0, _qp); + _var2->setDofValue(_nl_u[_qp] + 200.0, _qp); } return -3.33; } diff --git a/test/tests/auxkernels/nodal_aux_var/gold/out_multi_var_fv.e b/test/tests/auxkernels/nodal_aux_var/gold/out_multi_var_fv.e new file mode 100644 index 0000000000000000000000000000000000000000..bd6e3528b3fd0020fab189930a2e7dab861323b9 GIT binary patch literal 42644 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 literal 0 HcmV?d00001 diff --git a/test/tests/auxkernels/nodal_aux_var/multi_update_fv_test.i b/test/tests/auxkernels/nodal_aux_var/multi_update_fv_test.i new file mode 100644 index 000000000000..3c5d8398377d --- /dev/null +++ b/test/tests/auxkernels/nodal_aux_var/multi_update_fv_test.i @@ -0,0 +1,84 @@ +[Mesh] + type = GeneratedMesh + dim = 2 + xmin = 0 + xmax = 1 + ymin = 0 + ymax = 1 + nx = 2 + ny = 2 +[] + +[Variables] + [u] + order = FIRST + family = LAGRANGE + [] +[] + +[AuxVariables] + [tt] + type = MooseVariableFVReal + initial_condition = 0 + [] + + [ten] + type = MooseVariableFVReal + initial_condition = 1 + [] + + [2k] + type = MooseVariableFVReal + initial_condition = 2 + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + [] +[] + +[AuxKernels] + [all] + variable = tt + type = MultipleUpdateAux + u = u + var1 = ten + var2 = 2k + [] +[] + +[BCs] + active = 'left right' + + [left] + type = DirichletBC + variable = u + boundary = 1 + value = 0 + [] + + [right] + type = DirichletBC + variable = u + boundary = 3 + value = 1 + [] +[] + +[Executioner] + type = Steady + + solve_type = 'PJFNK' + + [Quadrature] + order = CONSTANT + [] +[] + +[Outputs] + file_base = out_multi_var_fv + exodus = true +[] diff --git a/test/tests/auxkernels/nodal_aux_var/tests b/test/tests/auxkernels/nodal_aux_var/tests index 2fe09b2f282d..e9b164cf8df4 100644 --- a/test/tests/auxkernels/nodal_aux_var/tests +++ b/test/tests/auxkernels/nodal_aux_var/tests @@ -29,8 +29,7 @@ input = 'multi_update_var_test.i' exodiff = 'out_multi_var.e' issues = '#2099' - requirement = "The AuxKernel objects shall be capable of wriyting to to multiple coupled " - "variables." + requirement = "The AuxKernel objects shall be capable of writing to multiple coupled variables." [] [multi_update_error] type = RunException @@ -92,6 +91,14 @@ requirement = "The writing to auxiliary variables shall error out if a constant value is passed in as variable name." [] + [multi_update_fv_test] + type = 'Exodiff' + input = 'multi_update_fv_test.i' + exodiff = 'out_multi_var_fv.e' + issues = '#25661' + requirement = "The AuxKernel objects shall be capable of writing to FV coupled variables." + [] + [multi_update_elem_test] type = 'Exodiff' input = 'multi_update_elem_var_test.i' From dba398048d18748c0cc6a6806df67bb4e8cb0dcc Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai <45185043+parikshitbajpai@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:01:02 -0600 Subject: [PATCH 5/7] Fix typos in test requirements to address review comments (#25661) Co-authored-by: Alex Lindsay Co-authored-by: Guillaume Giudicelli --- test/tests/auxkernels/nodal_aux_var/tests | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/tests/auxkernels/nodal_aux_var/tests b/test/tests/auxkernels/nodal_aux_var/tests index e9b164cf8df4..22851278b5f5 100644 --- a/test/tests/auxkernels/nodal_aux_var/tests +++ b/test/tests/auxkernels/nodal_aux_var/tests @@ -29,7 +29,7 @@ input = 'multi_update_var_test.i' exodiff = 'out_multi_var.e' issues = '#2099' - requirement = "The AuxKernel objects shall be capable of writing to multiple coupled variables." + requirement = "Auxiliary kernel objects shall be capable of writing to multiple coupled variables." [] [multi_update_error] type = RunException @@ -96,7 +96,7 @@ input = 'multi_update_fv_test.i' exodiff = 'out_multi_var_fv.e' issues = '#25661' - requirement = "The AuxKernel objects shall be capable of writing to FV coupled variables." + requirement = "Auxiliary kernel objects shall be capable of writing to finite volume coupled variables." [] [multi_update_elem_test] From e20f7f7c7654dbf3ce6ae7e68ba38606dc432981 Mon Sep 17 00:00:00 2001 From: Parikshit Bajpai Date: Mon, 9 Oct 2023 13:27:37 -0600 Subject: [PATCH 6/7] Additional testing to capture Thermochimica failure cases (#25661) --- .../actions/ChemicalCompositionAction.h | 1 - .../src/actions/ChemicalCompositionAction.C | 2 +- .../test/tests/thermochimica/MoRuPd.i | 56 ++++++++++++++++++ .../tests/thermochimica/gold/MoRuPd_out.e | Bin 0 -> 39624 bytes .../test/tests/thermochimica/tests | 12 ++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 modules/chemical_reactions/test/tests/thermochimica/MoRuPd.i create mode 100644 modules/chemical_reactions/test/tests/thermochimica/gold/MoRuPd_out.e diff --git a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h index c49c05e69cbb..990c6892a805 100644 --- a/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h +++ b/modules/chemical_reactions/include/actions/ChemicalCompositionAction.h @@ -9,7 +9,6 @@ #pragma once -#include "AddVariableAction.h" #include "AddFunctionAction.h" /** diff --git a/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C b/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C index 40fe6a81475c..e038e7da2289 100644 --- a/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C +++ b/modules/chemical_reactions/src/actions/ChemicalCompositionAction.C @@ -13,7 +13,7 @@ #include "MooseMesh.h" #include "MooseUtils.h" #include "MooseUtils.h" - +#include "AddVariableAction.h" #include "libmesh/string_to_enum.h" #ifdef THERMOCHIMICA_ENABLED diff --git a/modules/chemical_reactions/test/tests/thermochimica/MoRuPd.i b/modules/chemical_reactions/test/tests/thermochimica/MoRuPd.i new file mode 100644 index 000000000000..5f5f64dafc4f --- /dev/null +++ b/modules/chemical_reactions/test/tests/thermochimica/MoRuPd.i @@ -0,0 +1,56 @@ +[Mesh] + [gen] + type = GeneratedMeshGenerator + dim = 2 + nx = 1 + ny = 1 + [] +[] + +[GlobalParams] + elements = 'Mo Ru Pd' + output_phases = 'BCCN HCPN' + output_species = 'HCPN:Pd' + output_element_potentials = 'mu:Pd' + output_vapor_pressures = 'vp:gas_ideal:Pd' + output_element_phases = 'ep:BCCN:Pd' +[] + +[ChemicalComposition] + thermofile = Kaye_NobleMetals.dat + tunit = K + punit = atm + munit = moles + temperature = 2250 + output_species_unit = mole_fraction +[] + +[ICs] + [Mo] + type = FunctionIC + variable = Mo + function = '800*(1-x)+4.3*x' + [] + [Ru] + type = FunctionIC + variable = Ru + function = '200*(1-x)+4.5*x' + [] + [Pd] + type = ConstantIC + variable = Pd + value = 1.0e-8 + [] +[] + +[Problem] + solve = false +[] + +[Executioner] + type = Steady +[] + +[Outputs] + exodus = true +[] diff --git a/modules/chemical_reactions/test/tests/thermochimica/gold/MoRuPd_out.e b/modules/chemical_reactions/test/tests/thermochimica/gold/MoRuPd_out.e new file mode 100644 index 0000000000000000000000000000000000000000..4752ab72d39166868fea2c66304b71531659279a GIT binary patch literal 39624 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 Date: Tue, 10 Oct 2023 08:47:57 -0600 Subject: [PATCH 7/7] Update Thermochimica submodule (#25661) This submodule update fixes a couple of incorrect conditionals in Thermochimica Leveling solver which cause malloc errors down the line --- modules/chemical_reactions/contrib/thermochimica | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/chemical_reactions/contrib/thermochimica b/modules/chemical_reactions/contrib/thermochimica index 60a1631a8aa8..2a4e65c9a2af 160000 --- a/modules/chemical_reactions/contrib/thermochimica +++ b/modules/chemical_reactions/contrib/thermochimica @@ -1 +1 @@ -Subproject commit 60a1631a8aa8e96718b82e8d125a3914282a3c2c +Subproject commit 2a4e65c9a2af61e3d9abd2b1495a1fb50f949982