diff --git a/doc/content/source/actions/SetReactionNetworkAction.md b/doc/content/source/actions/SetReactionNetworkAction.md deleted file mode 100644 index 3b6c8cba..00000000 --- a/doc/content/source/actions/SetReactionNetworkAction.md +++ /dev/null @@ -1,14 +0,0 @@ - - -# SetReactionNetworkAction - -!alert construction title=Undocumented Class -The SetReactionNetworkAction has not been documented. The content contained on this page includes the -typical automatic documentation associated with an Action; however, what is contained is ultimately -determined by what is necessary to make the documentation clear for users. - -!syntax description /ReactionNetwork/SetReactionNetworkAction - -!syntax parameters /ReactionNetwork/SetReactionNetworkAction - -!bibtex bibliography diff --git a/doc/content/source/kernels/MineralSolutionTimeIntegration.md b/doc/content/source/kernels/MineralSolutionTimeIntegration.md deleted file mode 100644 index 55be1e8f..00000000 --- a/doc/content/source/kernels/MineralSolutionTimeIntegration.md +++ /dev/null @@ -1,18 +0,0 @@ - - -# MineralSolutionTimeIntegration - -!alert construction title=Undocumented Class -The MineralSolutionTimeIntegration has not been documented. The content contained on this page includes the -typical automatic documentation associated with a MooseObject; however, what is contained is -ultimately determined by what is necessary to make the documentation clear for users. - -!syntax description /Kernels/MineralSolutionTimeIntegration - -!syntax parameters /Kernels/MineralSolutionTimeIntegration - -!syntax inputs /Kernels/MineralSolutionTimeIntegration - -!syntax children /Kernels/MineralSolutionTimeIntegration - -!bibtex bibliography diff --git a/doc/content/source/kernels/PrimaryAqueousSpeciesDiffusion.md b/doc/content/source/kernels/PrimaryAqueousSpeciesDiffusion.md deleted file mode 100644 index be5a006d..00000000 --- a/doc/content/source/kernels/PrimaryAqueousSpeciesDiffusion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -# PrimaryAqueousSpeciesDiffusion - -!alert construction title=Undocumented Class -The PrimaryAqueousSpeciesDiffusion has not been documented. The content contained on this page includes the -typical automatic documentation associated with a MooseObject; however, what is contained is -ultimately determined by what is necessary to make the documentation clear for users. - -!syntax description /Kernels/PrimaryAqueousSpeciesDiffusion - -!syntax parameters /Kernels/PrimaryAqueousSpeciesDiffusion - -!syntax inputs /Kernels/PrimaryAqueousSpeciesDiffusion - -!syntax children /Kernels/PrimaryAqueousSpeciesDiffusion - -!bibtex bibliography diff --git a/doc/content/source/kernels/PrimaryAqueousSpeciesTimeIntegration.md b/doc/content/source/kernels/PrimaryAqueousSpeciesTimeIntegration.md deleted file mode 100644 index 7ef682d7..00000000 --- a/doc/content/source/kernels/PrimaryAqueousSpeciesTimeIntegration.md +++ /dev/null @@ -1,18 +0,0 @@ - - -# PrimaryAqueousSpeciesTimeIntegration - -!alert construction title=Undocumented Class -The PrimaryAqueousSpeciesTimeIntegration has not been documented. The content contained on this page includes the -typical automatic documentation associated with a MooseObject; however, what is contained is -ultimately determined by what is necessary to make the documentation clear for users. - -!syntax description /Kernels/PrimaryAqueousSpeciesTimeIntegration - -!syntax parameters /Kernels/PrimaryAqueousSpeciesTimeIntegration - -!syntax inputs /Kernels/PrimaryAqueousSpeciesTimeIntegration - -!syntax children /Kernels/PrimaryAqueousSpeciesTimeIntegration - -!bibtex bibliography diff --git a/doc/content/source/kernels/SecondaryAqueousSpeciesDiffusion.md b/doc/content/source/kernels/SecondaryAqueousSpeciesDiffusion.md deleted file mode 100644 index 491ab8cb..00000000 --- a/doc/content/source/kernels/SecondaryAqueousSpeciesDiffusion.md +++ /dev/null @@ -1,18 +0,0 @@ - - -# SecondaryAqueousSpeciesDiffusion - -!alert construction title=Undocumented Class -The SecondaryAqueousSpeciesDiffusion has not been documented. The content contained on this page includes the -typical automatic documentation associated with a MooseObject; however, what is contained is -ultimately determined by what is necessary to make the documentation clear for users. - -!syntax description /Kernels/SecondaryAqueousSpeciesDiffusion - -!syntax parameters /Kernels/SecondaryAqueousSpeciesDiffusion - -!syntax inputs /Kernels/SecondaryAqueousSpeciesDiffusion - -!syntax children /Kernels/SecondaryAqueousSpeciesDiffusion - -!bibtex bibliography diff --git a/doc/content/source/kernels/SecondaryAqueousSpeciesTimeIntegration.md b/doc/content/source/kernels/SecondaryAqueousSpeciesTimeIntegration.md deleted file mode 100644 index 3fe50364..00000000 --- a/doc/content/source/kernels/SecondaryAqueousSpeciesTimeIntegration.md +++ /dev/null @@ -1,18 +0,0 @@ - - -# SecondaryAqueousSpeciesTimeIntegration - -!alert construction title=Undocumented Class -The SecondaryAqueousSpeciesTimeIntegration has not been documented. The content contained on this page includes the -typical automatic documentation associated with a MooseObject; however, what is contained is -ultimately determined by what is necessary to make the documentation clear for users. - -!syntax description /Kernels/SecondaryAqueousSpeciesTimeIntegration - -!syntax parameters /Kernels/SecondaryAqueousSpeciesTimeIntegration - -!syntax inputs /Kernels/SecondaryAqueousSpeciesTimeIntegration - -!syntax children /Kernels/SecondaryAqueousSpeciesTimeIntegration - -!bibtex bibliography diff --git a/doc/content/syntax/ReactionNetwork/index.md b/doc/content/syntax/ReactionNetwork/index.md deleted file mode 100644 index b7319d9c..00000000 --- a/doc/content/syntax/ReactionNetwork/index.md +++ /dev/null @@ -1,10 +0,0 @@ - - -# ReactionNetwork System - -!syntax list /ReactionNetwork objects=True actions=False subsystems=False - -!syntax list /ReactionNetwork objects=False actions=False subsystems=True - -!syntax list /ReactionNetwork objects=False actions=True subsystems=False - diff --git a/include/actions/SetReactionNetworkAction.h b/include/actions/SetReactionNetworkAction.h deleted file mode 100644 index 036609f3..00000000 --- a/include/actions/SetReactionNetworkAction.h +++ /dev/null @@ -1,35 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#pragma once - -// MOOSE includes -#include "Action.h" - -// libMesh includes -#include "libmesh/fe_type.h" - - - -class SetReactionNetworkAction : public Action -{ -public: - static InputParameters validParams(); - SetReactionNetworkAction(InputParameters params); - - virtual void act(); - -protected: - const FEType _fe_type; -}; diff --git a/include/kernels/MineralSolutionTimeIntegration.h b/include/kernels/MineralSolutionTimeIntegration.h deleted file mode 100644 index 852bd155..00000000 --- a/include/kernels/MineralSolutionTimeIntegration.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#pragma once - -#include "TimeDerivative.h" - -/** - * Define the Kernel for a CoupledConvectionReactionSub operator that looks like: - * - * storage * delta pressure / delta t - * - * This first line is defining the name and inheriting from Kernel. - */ -class MineralSolutionTimeIntegration : public TimeDerivative -{ -public: - static InputParameters validParams(); - MineralSolutionTimeIntegration(const InputParameters & parameters); - -protected: - /** - * Responsible for computing the residual at one quadrature point - * - * This should always be defined in the .C - * @return The residual of mass accumulation of primary species concentration. - */ - virtual Real computeQpResidual(); - - /** - * Responsible for computing the diagonal block of the preconditioning matrix. - * This is essentially the partial derivative of the residual with respect to - * the variable this kernel operates on ("u"). - * - * Note that this can be an approximation or linearization. In this case it's - * not because the Jacobian of this operator is easy to calculate. - * - * This should always be defined in the .C - * @return The diagonal jacobian of mass accumulation of primary species concentration. - */ - virtual Real computeQpJacobian(); - virtual Real computeQpOffDiagJacobian(unsigned int jvar); - - /// Material property of porosity - const MaterialProperty & _porosity; - - /// coupling with the minerals subject to kinetic dissolution/precipitation - /// stochiometric weights for a reactive species in minerals - std::vector _sto_v; - /// Coupled time derivatives of mineral concentrations (stored and computed as Aux variables). - std::vector _dvals_dt; -}; diff --git a/include/kernels/PrimaryAqueousSpeciesDiffusion.h b/include/kernels/PrimaryAqueousSpeciesDiffusion.h deleted file mode 100644 index 2e3a846a..00000000 --- a/include/kernels/PrimaryAqueousSpeciesDiffusion.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "Diffusion.h" - -#pragma once - -/** - * Define the Kernel for a CoupledConvectionReactionSub operator that looks like: - * - * grad (diff * grad_u) - * - * This first line is defining the name and inheriting from Kernel. - */ -class PrimaryAqueousSpeciesDiffusion : public Diffusion -{ -public: - static InputParameters validParams(); - PrimaryAqueousSpeciesDiffusion(const InputParameters & parameters); - -protected: - /** - * Responsible for computing the residual at one quadrature point - * - * This should always be defined in the .C - * @return The residual of dispersion-diffusion of primary species. - */ - virtual Real computeQpResidual(); - /** - * Responsible for computing the diagonal block of the preconditioning matrix. - * This is essentially the partial derivative of the residual with respect to - * the variable this kernel operates on ("u"). - * - * Note that this can be an approximation or linearization. In this case it's - * not because the Jacobian of this operator is easy to calculate. - * - * This should always be defined in the .C - * @return The diagonal jacobian of dispersion-diffusion of primary species. - */ - virtual Real computeQpJacobian(); - virtual Real computeQpOffDiagJacobian(unsigned int jvar); - - /// Material property of dispersion-diffusion coefficient. - const MaterialProperty & _porosity; - const MaterialProperty & _diffusivity; -}; diff --git a/include/kernels/PrimaryAqueousSpeciesTimeIntegration.h b/include/kernels/PrimaryAqueousSpeciesTimeIntegration.h deleted file mode 100644 index 3ad462f3..00000000 --- a/include/kernels/PrimaryAqueousSpeciesTimeIntegration.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#pragma once - -#include "TimeDerivative.h" - -/** - * Define the Kernel for a CoupledConvectionReactionSub operator that looks like: - * - * storage * delta pressure / delta t - * - * This first line is defining the name and inheriting from Kernel. - */ -class PrimaryAqueousSpeciesTimeIntegration : public TimeDerivative -{ -public: - static InputParameters validParams(); - PrimaryAqueousSpeciesTimeIntegration(const InputParameters & parameters); - -protected: - /** - * Responsible for computing the residual at one quadrature point - * - * This should always be defined in the .C - * @return The residual of mass accumulation of primary species concentration. - */ - virtual Real computeQpResidual(); - - /** - * Responsible for computing the diagonal block of the preconditioning matrix. - * This is essentially the partial derivative of the residual with respect to - * the variable this kernel operates on ("u"). - * - * Note that this can be an approximation or linearization. In this case it's - * not because the Jacobian of this operator is easy to calculate. - * - * This should always be defined in the .C - * @return The diagonal jacobian of mass accumulation of primary species concentration. - */ - virtual Real computeQpJacobian(); - virtual Real computeQpOffDiagJacobian(unsigned int jvar); - - /// Material property of porosity - const MaterialProperty & _porosity; - - // /// coupling with the minerals subject to kinetic dissolution/precipitation - // /// stochiometric weights for a reactive species in minerals - // std::vector _sto_v; - // /// Coupled time derivatives of mineral concentrations (stored and computed as Aux variables). - // std::vector _dvals_dt; -}; diff --git a/include/kernels/SecondaryAqueousSpeciesDiffusion.h b/include/kernels/SecondaryAqueousSpeciesDiffusion.h deleted file mode 100644 index 7212a9db..00000000 --- a/include/kernels/SecondaryAqueousSpeciesDiffusion.h +++ /dev/null @@ -1,83 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "Kernel.h" - -#pragma once - -/** - * Define the Kernel for a CoupledBEEquilibriumSub operator that looks like: - * - * grad (diff * grad (weight * 10^log_k * u^sto_u * v^sto_v)). - */ -class SecondaryAqueousSpeciesDiffusion : public Kernel -{ -public: - static InputParameters validParams(); - /** - * This is the Constructor declaration AND definition. - * It is ok to have the definition in the .h if the function body - * is really small. Otherwise it should be in the .C - */ - SecondaryAqueousSpeciesDiffusion(const InputParameters & parameters); - -protected: - /** - * Responsible for computing the residual at one quadrature point - * This should always be defined in the .C - * @return The residual of dispersion-diffusion of the coupled equilibrium species. - */ - virtual Real computeQpResidual(); - - /** - * Responsible for computing the diagonal block of the preconditioning matrix. - * This is essentially the partial derivative of the residual with respect to - * the variable this kernel operates on ("u"). - * - * Note that this can be an approximation or linearization. In this case it's - * not because the Jacobian of this operator is easy to calculate. - * - * This should always be defined in the .C - * @return The diagonal jacobian of dispersion-diffusion of the coupled equilibrium species. - */ - virtual Real computeQpJacobian(); - - virtual Real computeQpOffDiagJacobian(unsigned int jvar); - -private: - /** - * Coupled things come through as std::vector _refernces_. - * - * Since this is a reference it MUST be set in the Initialization List of the - * constructor! - */ - - const MaterialProperty & _porosity; - const MaterialProperty & _diffusivity; - - /// Weight of the equilibrium species concentration in the total primary species concentration. - Real _weight; - /// Equilibrium constant for the equilibrium species in association form. - Real _log_k; - /// Stochiometric coefficient of the primary species. - Real _sto_u; - /// Stochiometric coefficiets of the coupled primary species. - std::vector _sto_v; - - std::vector _vars; - /// Coupled primary species concentrations. - std::vector _vals; - /// Coupled gradients of primary species concentrations. - std::vector _grad_vals; -}; diff --git a/include/kernels/SecondaryAqueousSpeciesTimeIntegration.h b/include/kernels/SecondaryAqueousSpeciesTimeIntegration.h deleted file mode 100644 index 69eb321a..00000000 --- a/include/kernels/SecondaryAqueousSpeciesTimeIntegration.h +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "Kernel.h" - -#pragma once - -/** - * Define the Kernel for a SecondaryAqueousSpeciesTimeIntegration operator that looks like: - * - * delta (weight * 10^log_k * u^sto_u * v^sto_v) / delta t. - */ -class SecondaryAqueousSpeciesTimeIntegration : public Kernel -{ -public: - static InputParameters validParams(); - /** - * This is the Constructor declaration AND definition. - * It is ok to have the definition in the .h if the function body - * is really small. Otherwise it should be in the .C - */ - SecondaryAqueousSpeciesTimeIntegration(const InputParameters & parameters); - -protected: - /** - * Responsible for computing the residual at one quadrature point - * This should always be defined in the .C - * @return The residual of mass accumulation of the coupled equilibrium species concentration. - */ - virtual Real computeQpResidual(); - - /** - * Responsible for computing the diagonal block of the preconditioning matrix. - * This is essentially the partial derivative of the residual with respect to - * the variable this kernel operates on ("u"). - * - * Note that this can be an approximation or linearization. In this case it's - * not because the Jacobian of this operator is easy to calculate. - * - * This should always be defined in the .C - * @return The diagonal jacobian of mass accumulation of the coupled equilibrium species - * concentration. - */ - virtual Real computeQpJacobian(); - virtual Real computeQpOffDiagJacobian(unsigned int jvar); - -private: - /// Weight of the equilibrium species concentration in the total primary species concentration. - Real _weight; - /// Equilibrium constant for the equilibrium species in association form. - Real _log_k; - /// Stochiometric coefficient of the primary species. - Real _sto_u; - /// Stochiometric coefficiets of the coupled primary species. - std::vector _sto_v; - - /// Material property of porosity. - const MaterialProperty & _porosity; - - std::vector _vars; - /// Coupled primary species concentrations. - std::vector _v_vals; - /// Coupled old values of primary species concentrations. - std::vector _v_vals_old; - /// The old values of the primary species concentration. - const VariableValue & _u_old; -}; diff --git a/include/materials/ConcreteThermalMoisture.h b/include/materials/ConcreteThermalMoisture.h index aeb276f2..c9559df5 100644 --- a/include/materials/ConcreteThermalMoisture.h +++ b/include/materials/ConcreteThermalMoisture.h @@ -35,18 +35,6 @@ class ConcreteThermalMoisture : public Material MooseEnum _moisture_diffusivity_model; private: - Real _input_initial_diffusivity; - Real _input_initial_porosity; - Real _input_initial_permeability; - Real _input_initial_storativity; - Real _input_bulk_density; - - ///@{ minerals in matrix with potential dissolution/precipitation reactions - std::vector _mineral_molecular_weight; - std::vector _mineral_density; - std::vector _initial_mineral_conc; - ///@} - Real _water_to_cement; Real _cure_time; Real _cement_mass; @@ -101,7 +89,4 @@ class ConcreteThermalMoisture : public Material bool _has_temperature; const VariableValue & _temp; - - /// coupled to mineral concentrations(i.e., amount in porous matrix) - std::vector _vals; }; diff --git a/src/actions/SetReactionNetworkAction.C b/src/actions/SetReactionNetworkAction.C deleted file mode 100644 index 9215f219..00000000 --- a/src/actions/SetReactionNetworkAction.C +++ /dev/null @@ -1,621 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "SetReactionNetworkAction.h" -#include "AddAuxVariableAction.h" -// #include "Parser.h" -#include "FEProblem.h" - -#include -#include -#include - -// libMesh includes -#include "libmesh/equation_systems.h" -#include "libmesh/nonlinear_implicit_system.h" -#include "libmesh/explicit_system.h" -#include "libmesh/string_to_enum.h" -#include "libmesh/fe.h" - -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_primary_aqueous_species"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_primary_species_kernels"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_secondary_species_kernels"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_minerals_aux_vars"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_minerals_initial_conc"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_minerals_kernels"); -registerMooseAction("BlackBearApp", SetReactionNetworkAction, "add_minerals_auxkernels"); - -InputParameters -SetReactionNetworkAction::validParams() -{ - InputParameters params = Action::validParams(); - params.addRequiredParam>( - "primary_aqueous_species", "The list of primary variables to add"); - params.addRequiredParam>("initial_condition", - "initial values for the primary aqueous sepcies"); - - params.addParam>("secondary_aqueous_species", - "The list of secondary aquesous species to add"); - params.addParam("aqueous_speciations", "The list of aqueous equilibrium reactions"); - - params.addParam>( - "minerals", "The list of minerals adding to the aux variables "); - params.addParam>("initial_mineral_conc", - "initial values for mineralsin mol/L of solution "); - - params.addParam>("mineral_solution_reactions", - "The list of mineral-solution reactions"); - params.addParam>("log_k", - "The list of equilibrium constants for all reactions"); - params.addParam>( - "specific_reactive_surface_area", - "The list of specific reactive surface area for all minerals, (m^2/L)"); - params.addParam>( - "kinetic_rate_constant", "The list of kinetic rate constant for all reactions, (mol/m^2/s)"); - params.addParam>( - "activation_energy", "The list of activation energy values for all reactions, (J/mol)"); - params.addParam("gas_constant", "Gas constant, 8.314 (J/mol/K)"); - params.addParam("reference_temperature", - "The list of reference temperatures for all reactions, (K)"); - params.addParam("system_temperature", - "The list of system temperatures for all reactions, (K)"); - - MooseEnum familyEnum = AddAuxVariableAction::getAuxVariableFamilies(); - params.addParam( - "family", - familyEnum, - "Specifies the family of FE shape functions to use for the q AuxVariables"); - MooseEnum orderEnum = AddAuxVariableAction::getAuxVariableOrders(); - params.addParam( - "order", - orderEnum, - "Specifies the order of the FE shape function to use for the q AuxVariables"); - - return params; -} - -SetReactionNetworkAction::SetReactionNetworkAction(InputParameters params) - : Action(params), - _fe_type(Utility::string_to_enum(getParam("order")), - Utility::string_to_enum(getParam("family"))) -{ -} - -void -SetReactionNetworkAction::act() -{ - // - // Setup primary aqeous species - // - - // add primary aqueous species - std::vector nl_vars = - getParam>("primary_aqueous_species"); - std::vector initial_vals = getParam>("initial_condition"); - std::vector aux_vars = - getParam>("secondary_aqueous_species"); - std::vector mineral_vars = getParam>("minerals"); - - if (_current_task == "add_primary_aqueous_species") - { - _console << std::endl; - _console << "*********************************************************************************" - << std::endl; - _console << "primary aqueous species: "; - - for (unsigned int i = 0; i < nl_vars.size(); i++) - { - auto params = _factory.getValidParams("MooseVariable"); - params.set("order") = - _problem->mesh().hasSecondOrderElements() ? "SECOND" : "FIRST"; - params.set("family") = "LAGRANGE"; - _problem->addVariable("MooseVariable", nl_vars[i], params); - _console << nl_vars[i] << "\t"; - } - _console << std::endl; - _console << "---------------------------------------------------------------------------------" - << std::endl; - } - // setup initial concentrations for the primary aqueous species: - else if (_current_task == "add_initial_primary_species_conc") - { - _console << std::endl; - _console << "*********************************************************************************" - << std::endl; - _console << "Initial primary species concs: "; - - for (unsigned int i = 0; i < nl_vars.size(); i++) - { - _console << initial_vals[i] << "\t"; - InputParameters params = _factory.getValidParams("ConstantIC"); - params.set("variable") = nl_vars[i]; - params.set("value") = initial_vals[i]; - _problem->addInitialCondition("ConstantIC", "ic_for" + nl_vars[i], params); - } - _console << std::endl; - _console << "---------------------------------------------------------------------------------" - << std::endl; - } - // add time integration & diffusion kernels for primary aqueous species - else if (_current_task == "add_primary_species_kernels") - { -#ifdef DEBUG - _console << std::endl; - _console << "*********************************************************************************" - << std::endl; - _console << "Adding kernels to primary aqueous species: "; -#endif - - for (unsigned int i = 0; i < nl_vars.size(); i++) - { - - InputParameters params_euler = - _factory.getValidParams("PrimaryAqueousSpeciesTimeIntegration"); - params_euler.set("variable") = nl_vars[i]; - params_euler.set("property_name") = "porosity"; - _problem->addKernel( - "PrimaryAqueousSpeciesTimeIntegration", nl_vars[i] + "_timeintegration", params_euler); - - InputParameters params_diff = _factory.getValidParams("PrimaryAqueousSpeciesDiffusion"); - params_diff.set("variable") = nl_vars[i]; - params_diff.set("property_name") = "diffusivity"; - _problem->addKernel("PrimaryAqueousSpeciesDiffusion", nl_vars[i] + "_diffusion", params_diff); - } - // _console<("first"), - // Utility::string_to_enum("lagrange")); - // _problem->addAuxVariable(aux_vars[i], fe_type); - // } - // - // _console << std::endl; - - // setup aqueous speciation reaction network - std::string reactions = getParam("aqueous_speciations"); - - // Getting ready for the parsing system - std::regex re_reactions( - "(.*?)" // the reaction network (any character until the equalibrium coefficient appears) - "\\s" // word boundary - "(" // start capture - "-?" // optional minus sign - "\\d+(?:\\.\\d*)?" // digits followed by optional decimal and more 0 or more digits - ")" // close capture - "\\b" // word boundary - "(?:\\s+|$)" // eat the whitespace - ); - std::regex re_terms("(\\S+)"); - std::regex re_coeff_and_species("(?:\\(?(.*?)\\)?)" // match the leading coefficent - "([A-Za-z].*)" // match the species - ); - - std::smatch reaction_matches; - std::smatch term_matches; - std::smatch coeff_and_species_matches; - - std::string input(reactions); - std::string single_reaction; - std::string term; - Real equal_coeff; - - std::vector> primary_participation(nl_vars.size()); - std::vector eq_species; - - std::vector eq_const; // log10K eq. constant for each aqueous reaction - std::vector> sto_u(nl_vars.size()); - std::vector> weight(nl_vars.size()); - std::vector>> sto_v(nl_vars.size()); - std::vector>> coupled_v(nl_vars.size()); - - std::vector> stos; // per aqueous speciation reaction - std::vector> - primary_aqueous_species_involved; // per aqueous speciation reaction - unsigned int n_reactions = 0; - - // Start parsing - // Going into every single reaction - _console << std::endl; - _console - << "*********************************************************************************" - << std::endl; - _console << "Aqueous sepciation reaction network:" << std::endl; - while (std::regex_search(input, reaction_matches, re_reactions)) - { - single_reaction = reaction_matches.str(1); - equal_coeff = std::stod(reaction_matches.str(2)); - n_reactions += 1; - eq_const.push_back(equal_coeff); - - // capture all of the terms - std::string species; - std::string coeff_str; - Real coeff; - int sign = 1; - bool secondary = false; - - std::vector local_stos; - std::vector local_species_list; - - // Going to find every single term in this reaction, sto_species combos and operators - while (std::regex_search(single_reaction, term_matches, re_terms)) - { - term = term_matches.str(1); - // Separating the sto from species - if (std::regex_search(term, coeff_and_species_matches, re_coeff_and_species)) - { - coeff_str = coeff_and_species_matches.str(1); - species = coeff_and_species_matches.str(2); - if (coeff_str.length()) - { - std::istringstream iss(coeff_str); - iss >> coeff; - } - else - coeff = 1.0; - - coeff *= sign; - - if (secondary) - eq_species.push_back(species); - else - { - local_stos.push_back(coeff); - local_species_list.push_back(species); - } - } - // Finding the operators and assign value of -1.0 to "-" sign - else if (term == "+" || term == "=" || term == "-") - { - if (term == "-") - { - sign = -1; - term = "+"; - } - else - sign = 1; - - if (term == "=") - secondary = true; - } - else - mooseError("Error parsing term: ", term); - - single_reaction = term_matches.suffix(); - } - - stos.push_back(local_stos); - primary_aqueous_species_involved.push_back(local_species_list); - // some useful screen out.... - // mooseAssert(stos[n_reactions-1].size() == - // primary_aqueous_species_involved[n_reactions-1], "aqueous parser not works "); - _console << n_reactions << "-th aqueous speciation reactions: "; - for (unsigned int i = 0; i < stos[n_reactions - 1].size(); ++i) - { - if (i < stos[n_reactions - 1].size() - 1) - _console << "(" << stos[n_reactions - 1][i] << ")" - << primary_aqueous_species_involved[n_reactions - 1][i] << " + "; - else - _console << "(" << stos[n_reactions - 1][i] << ")" - << primary_aqueous_species_involved[n_reactions - 1][i] << " "; - } - - _console << "<=> (1) " << eq_species[n_reactions - 1] - << " log10_K=" << eq_const[n_reactions - 1] << std::endl; - - input = reaction_matches.suffix(); - } // End parsing - - _console - << "---------------------------------------------------------------------------------" - << std::endl; - _console << std::endl; - - if (n_reactions == 0) - mooseWarning("No equilibrium aqueous speciation reaction provided!"); - else - { - // Start picking out primary species and coupled primary species and assigning corresponding - // stoichiomentric coefficients - for (unsigned int i = 0; i < nl_vars.size(); ++i) - { - sto_u[i].resize(n_reactions); - sto_v[i].resize(n_reactions); - coupled_v[i].resize(n_reactions); - weight[i].resize(n_reactions); - - primary_participation[i].resize(n_reactions, false); - for (unsigned int j = 0; j < n_reactions; ++j) - { - for (unsigned int k = 0; k < primary_aqueous_species_involved[j].size(); ++k) - if (primary_aqueous_species_involved[j][k] == nl_vars[i]) - primary_participation[i][j] = true; - - if (primary_participation[i][j]) - for (unsigned int k = 0; k < primary_aqueous_species_involved[j].size(); k++) - { - if (primary_aqueous_species_involved[j][k] == nl_vars[i]) - { - sto_u[i][j] = stos[j][k]; - weight[i][j] = stos[j][k]; // this term needs double check - } - else - { - sto_v[i][j].push_back(stos[j][k]); - coupled_v[i][j].push_back(primary_aqueous_species_involved[j][k]); - } - } - } - } - } - - for (unsigned int i = 0; i < nl_vars.size(); ++i) - { - // Adding the coupled kernels if the primary species participates in this equilibrium - // reaction - for (unsigned int j = 0; j < eq_const.size(); j++) - if (primary_participation[i][j]) - { - // Building kernels for equilbirium aqueous species - InputParameters params_sub = - _factory.getValidParams("SecondaryAqueousSpeciesTimeIntegration"); - params_sub.set("variable") = nl_vars[i]; - params_sub.set("weight") = weight[i][j]; - - params_sub.set("log_k") = eq_const[j]; - params_sub.set("sto_u") = sto_u[i][j]; - params_sub.set>("sto_v") = sto_v[i][j]; - params_sub.set>("v") = coupled_v[i][j]; - _problem->addKernel("SecondaryAqueousSpeciesTimeIntegration", - nl_vars[i] + "_" + eq_species[j] + "_sub", - params_sub); - - InputParameters params_cd = _factory.getValidParams("SecondaryAqueousSpeciesDiffusion"); - params_cd.set("variable") = nl_vars[i]; - params_cd.set("weight") = weight[i][j]; - params_cd.set("log_k") = eq_const[j]; - params_cd.set("sto_u") = sto_u[i][j]; - params_cd.set>("sto_v") = sto_v[i][j]; - params_cd.set>("v") = coupled_v[i][j]; - _problem->addKernel("SecondaryAqueousSpeciesDiffusion", - nl_vars[i] + "_" + eq_species[j] + "_cd", - params_cd); - } - } - } - } // End of setting up aqueous speciation reactions - - // - // Setup mineral-solution kinetical precipitation/dissolution reactions - // - else if (_current_task == "add_minerals_aux_vars") - { - if (_pars.isParamValid("minerals")) - { - _console << std::endl; - _console - << "*********************************************************************************" - << std::endl; - _console << "minerals reacting with aqueous solution: "; - - for (unsigned int i = 0; i < mineral_vars.size(); ++i) - { - auto params = _factory.getValidParams("MooseVariable"); - params.set("order") = - _problem->mesh().hasSecondOrderElements() ? "SECOND" : "FIRST"; - params.set("family") = "LAGRANGE"; - _problem->addAuxVariable("MooseVariable", mineral_vars[i], params); - _console << mineral_vars[i] << "\t"; - } - - _console << std::endl; - _console - << "---------------------------------------------------------------------------------" - << std::endl; - } - } - - else if (_current_task == "add_minerals_initial_conc") - { - std::vector initial_mineral_vals = getParam>("initial_mineral_conc"); - mooseAssert(initial_mineral_vals.size() == mineral_vars.size(), - "expected intitial values assigned to each mineral"); - _console << std::endl; - _console << "*********************************************************************************" - << std::endl; - _console << "Initial mineral concentrationss: "; - - for (unsigned int i = 0; i < mineral_vars.size(); ++i) - { - _console << mineral_vars[i] << "= " << initial_mineral_vals[i] << "\t"; - InputParameters params = _factory.getValidParams("ConstantIC"); - params.set("variable") = mineral_vars[i]; - params.set("value") = initial_mineral_vals[i]; - _problem->addInitialCondition("ConstantIC", "ic_for" + mineral_vars[i], params); - } - - _console << std::endl; - _console << "---------------------------------------------------------------------------------" - << std::endl; - } - - else if (_current_task == "add_minerals_kernels") - { - if (_pars.isParamValid("minerals")) - { - - std::vector mineral_reactions = - getParam>("mineral_solution_reactions"); - if (aux_vars.size() == 0) - mooseWarning("No equilibrium aqueous species provided!"); - - for (unsigned int i = 0; i < nl_vars.size(); ++i) - { - std::vector primary_participation(mineral_reactions.size(), false); - std::vector solid_kin_species(mineral_reactions.size()); - - for (unsigned int j = 0; j < mineral_reactions.size(); ++j) - { - std::vector tokens; - - // Parsing each reaction - MooseUtils::tokenize(mineral_reactions[j], tokens, 1, "+="); - - std::vector stos_coeff(tokens.size() - 1); - std::vector rxn_vars(tokens.size() - 1); - - for (unsigned int k = 0; k < tokens.size(); k++) - { - std::vector stos_vars; - MooseUtils::tokenize(tokens[k], stos_vars, 1, "()"); - if (stos_vars.size() == 2) - { - Real coef; - std::istringstream iss(stos_vars[0]); - iss >> coef; - stos_coeff[k] = coef; - rxn_vars[k] = stos_vars[1]; - // Check the participation of primary species - if (rxn_vars[k] == nl_vars[i]) - primary_participation[j] = true; - } - else - solid_kin_species[j] = stos_vars[0]; - } - // Done parsing, recorded stochiometric and variables into separate arrays - - if (primary_participation[j]) - { - std::vector mineral_weight(1); - - // Assigning the stochiometrics based on parsing - for (unsigned int m = 0; m < rxn_vars.size(); ++m) - if (rxn_vars[m] == nl_vars[i]) - mineral_weight[0] = stos_coeff[m]; - - std::vector coupled_var(1); - coupled_var[0] = solid_kin_species[j]; - _console << "Weight of mineral " << coupled_var[0] - << " to primary sepcies " + nl_vars[i] << " = " << mineral_weight[0] << "\n"; - - // Building kernels for mineral-dissolution/precipitation - InputParameters params_kin = _factory.getValidParams("MineralSolutionTimeIntegration"); - params_kin.set("variable") = nl_vars[i]; - params_kin.set>("mineral_compositions") = coupled_var; - params_kin.set>("sto_v") = mineral_weight; - - _problem->addKernel("MineralSolutionTimeIntegration", - nl_vars[i] + "_" + solid_kin_species[j] + "_kin", - params_kin); - } - } - } - } - } - else if (_current_task == "add_minerals_auxkernels") - { - if (_pars.isParamValid("minerals")) - { - std::vector mineral_reactions = - getParam>("mineral_solution_reactions"); - std::vector logk = getParam>("log_k"); - std::vector r_area = getParam>("specific_reactive_surface_area"); - std::vector ref_kconst = getParam>("kinetic_rate_constant"); - std::vector e_act = getParam>("activation_energy"); - Real gas_const = getParam("gas_constant"); - Real ref_temp = getParam("reference_temperature"); - Real sys_temp = getParam("system_temperature"); - - // NEED TO ADD AN ERROR MESSAGE IF THE SIZES OF ABOVE ARRAYS ARE NOT THE SAME // - _console << std::endl; - _console - << "*********************************************************************************" - << std::endl; - _console << "Mineral-solution interactions reaction network" << std::endl; - - for (unsigned int j = 0; j < mineral_reactions.size(); j++) - { - std::vector tokens; - std::vector solid_kin_species(mineral_reactions.size()); - - // Parsing each reaction - MooseUtils::tokenize(mineral_reactions[j], tokens, 1, "+="); - - std::vector stos_primary(tokens.size() - 1); - std::vector rxn_vars(tokens.size() - 1); - - for (unsigned int k = 0; k < tokens.size(); k++) - { - std::vector stos_vars; - MooseUtils::tokenize(tokens[k], stos_vars, 1, "()"); - if (stos_vars.size() == 2) - { - Real coef; - std::istringstream iss(stos_vars[0]); - iss >> coef; - stos_primary[k] = coef; - rxn_vars[k] = stos_vars[1]; - } - else - solid_kin_species[j] = stos_vars[0]; - } - - InputParameters params_kin = _factory.getValidParams("MineralDissolutionPrecipAux"); - params_kin.set("variable") = solid_kin_species[j]; - params_kin.set("log_k") = logk[j]; - params_kin.set("reactive_surface_area") = r_area[j]; - params_kin.set("ref_kconst") = ref_kconst[j]; - params_kin.set("e_act") = e_act[j]; - params_kin.set("gas_const") = gas_const; - params_kin.set("ref_temp") = ref_temp; - params_kin.set("sys_temp") = sys_temp; - params_kin.set>("sto_v") = stos_primary; - params_kin.set>("aqueous_species") = rxn_vars; - _problem->addAuxKernel( - "MineralDissolutionPrecipAux", "aux_" + solid_kin_species[j], params_kin); - - _console << solid_kin_species[j] << "<==>"; - - for (unsigned int k = 0; k < stos_primary.size(); k++) - { - if (k < stos_primary.size() - 1) - _console << "(" << stos_primary[k] << ")" << rxn_vars[k] << " + "; - else - _console << "(" << stos_primary[k] << ")" << rxn_vars[k] << " "; - } - - _console << " log10_K=" << logk[j] << " ref_k_const=" << ref_kconst[j] << std::endl; - } - - _console << std::endl; - _console - << "---------------------------------------------------------------------------------" - << std::endl; - } - } // End of setting up mineral precipitation & dissolution reactions -} diff --git a/src/kernels/MineralSolutionTimeIntegration.C b/src/kernels/MineralSolutionTimeIntegration.C deleted file mode 100644 index e1086576..00000000 --- a/src/kernels/MineralSolutionTimeIntegration.C +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "MineralSolutionTimeIntegration.h" -#include "Material.h" - -registerMooseObject("BlackBearApp", MineralSolutionTimeIntegration); - -InputParameters -MineralSolutionTimeIntegration::validParams() -{ - InputParameters params = TimeDerivative::validParams(); - params.addParam("property_name", "porosity", "Porosity material property"); - - params.addCoupledVar("mineral_compositions", "mineral Aux variable names involved"); - params.addParam>("sto_v", "stochiometric coefficients of reactant species"); - - return params; -} - -MineralSolutionTimeIntegration::MineralSolutionTimeIntegration(const InputParameters & parameters) - : TimeDerivative(parameters), - _porosity(getMaterialProperty(getParam("property_name"))), - _sto_v(getParam>("sto_v")) -{ - int n = coupledComponents("mineral_compositions"); - _dvals_dt.resize(n); - - for (unsigned int i = 0; i < _dvals_dt.size(); ++i) - _dvals_dt[i] = &coupledDot("mineral_compositions", i); -} - -Real -MineralSolutionTimeIntegration::computeQpResidual() -{ - Real re = 0.0; - - for (unsigned int i = 0; i < _dvals_dt.size(); ++i) - re += _porosity[_qp] * _sto_v[i] * (*_dvals_dt[i])[_qp] * _test[_i][_qp]; - - return re; -} - -Real -MineralSolutionTimeIntegration::computeQpJacobian() -{ - return 0.0; -} - -Real -MineralSolutionTimeIntegration::computeQpOffDiagJacobian(unsigned int /*jvar*/) -{ - return 0.0; -} diff --git a/src/kernels/PrimaryAqueousSpeciesDiffusion.C b/src/kernels/PrimaryAqueousSpeciesDiffusion.C deleted file mode 100644 index d2710ced..00000000 --- a/src/kernels/PrimaryAqueousSpeciesDiffusion.C +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "PrimaryAqueousSpeciesDiffusion.h" - -registerMooseObject("BlackBearApp", PrimaryAqueousSpeciesDiffusion); - -InputParameters -PrimaryAqueousSpeciesDiffusion::validParams() -{ - InputParameters params = Diffusion::validParams(); - params.addParam( - "property_name", "diffusivity", "Aqueous species diffusivity"); - return params; -} - -PrimaryAqueousSpeciesDiffusion::PrimaryAqueousSpeciesDiffusion(const InputParameters & parameters) - : Diffusion(parameters), - _porosity(getMaterialProperty("porosity")), - _diffusivity(getMaterialProperty("diffusivity")) -{ -} - -Real -PrimaryAqueousSpeciesDiffusion::computeQpResidual() -{ - // We're dereferencing the _diffusivity pointer to get to the - // material properties vector... which gives us one property - // value per quadrature point. - - // Also... we're reusing the Diffusion Kernel's residual - // so that we don't have to recode that. - // if (_u[_qp]>=0.0) - return _porosity[_qp] * _diffusivity[_qp] * Diffusion::computeQpResidual(); -} - -Real -PrimaryAqueousSpeciesDiffusion::computeQpJacobian() -{ - // We're dereferencing the _diffusivity pointer to get to the - // material properties vector... which gives us one property - // value per quadrature point. - - // Also... we're reusing the Diffusion Kernel's residual - // so that we don't have to recode that. - return _porosity[_qp] * _diffusivity[_qp] * Diffusion::computeQpJacobian(); -} - -Real -PrimaryAqueousSpeciesDiffusion::computeQpOffDiagJacobian(unsigned int /*jvar*/) -{ - return 0.0; -} diff --git a/src/kernels/PrimaryAqueousSpeciesTimeIntegration.C b/src/kernels/PrimaryAqueousSpeciesTimeIntegration.C deleted file mode 100644 index 2e84f578..00000000 --- a/src/kernels/PrimaryAqueousSpeciesTimeIntegration.C +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "PrimaryAqueousSpeciesTimeIntegration.h" -#include "Material.h" - -registerMooseObject("BlackBearApp", PrimaryAqueousSpeciesTimeIntegration); - -InputParameters -PrimaryAqueousSpeciesTimeIntegration::validParams() -{ - InputParameters params = TimeDerivative::validParams(); - params.addParam("property_name", "porosity", "Porosity material property"); - // params.addCoupledVar("mineral_compositions", "mineral Aux variable names involved"); - // params.addParam >("sto_v", "stochiometric coeff ofreactant species"); - - return params; -} - -PrimaryAqueousSpeciesTimeIntegration::PrimaryAqueousSpeciesTimeIntegration( - const InputParameters & parameters) - : TimeDerivative(parameters), _porosity(getMaterialProperty("property_name")) -// _sto_v(getParam >("sto_v")) -{ - // int n = coupledComponents("mineral_compositions"); - // _dvals_dt.resize(n); - // - // for (unsigned int i=0; i<_dvals_dt.size(); ++i) - // { - // _dvals_dt[i] = &coupledDot("mineral_compositions", i); - // } -} - -Real -PrimaryAqueousSpeciesTimeIntegration::computeQpResidual() -{ - Real re = _porosity[_qp] * TimeDerivative::computeQpResidual(); // self accumulation term - - // for (unsigned int i=0; i < _dvals_dt.size(); ++i) - // _re += _porosity[_qp] * _sto_v[i] * (*_dvals_dt[i])[_qp] * _test[_i][_qp]; - return re; -} - -Real -PrimaryAqueousSpeciesTimeIntegration::computeQpJacobian() -{ - return _porosity[_qp] * TimeDerivative::computeQpJacobian(); -} - -Real -PrimaryAqueousSpeciesTimeIntegration::computeQpOffDiagJacobian(unsigned int /*jvar*/) -{ - return 0.0; -} diff --git a/src/kernels/SecondaryAqueousSpeciesDiffusion.C b/src/kernels/SecondaryAqueousSpeciesDiffusion.C deleted file mode 100644 index 5771591e..00000000 --- a/src/kernels/SecondaryAqueousSpeciesDiffusion.C +++ /dev/null @@ -1,190 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "SecondaryAqueousSpeciesDiffusion.h" - -registerMooseObject("BlackBearApp", SecondaryAqueousSpeciesDiffusion); - -InputParameters -SecondaryAqueousSpeciesDiffusion::validParams() -{ - InputParameters params = Kernel::validParams(); - - params.addParam( - "weight", - 1.0, - "Weight of equilibrium species concentration in the primary species concentration"); - params.addParam( - "log_k", 0.0, "Equilibrium constant of the equilbrium reaction in dissociation form"); - params.addParam("sto_u", - 1.0, - "Stochiometric coef of the primary species this kernel operates on in the " - "equilibrium reaction"); - - params.addParam>("sto_v", - "The stochiometric coefficients of coupled primary species"); - params.addCoupledVar("v", "List of coupled primary species in this equilibrium species"); - return params; -} - -SecondaryAqueousSpeciesDiffusion::SecondaryAqueousSpeciesDiffusion( - const InputParameters & parameters) - : Kernel(parameters), - _porosity(getMaterialProperty("porosity")), - _diffusivity(getMaterialProperty("diffusivity")), - _weight(getParam("weight")), - _log_k(getParam("log_k")), - _sto_u(getParam("sto_u")), - _sto_v(getParam>("sto_v")) -{ - int n = coupledComponents("v"); - _vars.resize(n); - _vals.resize(n); - _grad_vals.resize(n); - - for (unsigned int i = 0; i < _vals.size(); ++i) - { - _vars[i] = coupled("v", i); - _vals[i] = &coupledValue("v", i); - _grad_vals[i] = &coupledGradient("v", i); - } -} - -Real -SecondaryAqueousSpeciesDiffusion::computeQpResidual() -{ - RealGradient diff1 = _sto_u * std::pow(_u[_qp], _sto_u - 1.0) * _grad_u[_qp]; - if (_vals.size()) - for (unsigned int i = 0; i < _vals.size(); ++i) - diff1 *= std::pow((*_vals[i])[_qp], _sto_v[i]); - - RealGradient diff2_sum(0.0, 0.0, 0.0); - Real d_val = std::pow(_u[_qp], _sto_u); - - if (_vals.size()) - { - for (unsigned int i = 0; i < _vals.size(); ++i) - { - - RealGradient diff2 = - d_val * _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * (*_grad_vals[i])[_qp]; - - for (unsigned int j = 0; j < _vals.size(); ++j) - if (j != i) - diff2 *= std::pow((*_vals[j])[_qp], _sto_v[j]); - - diff2_sum += diff2; - } - } - - return _weight * std::pow(10.0, _log_k) * _porosity[_qp] * _diffusivity[_qp] * - _grad_test[_i][_qp] * (diff1 + diff2_sum); -} - -Real -SecondaryAqueousSpeciesDiffusion::computeQpJacobian() -{ - RealGradient diff1_1 = _sto_u * std::pow(_u[_qp], _sto_u - 1.0) * _grad_phi[_j][_qp]; - RealGradient diff1_2 = - _phi[_j][_qp] * _sto_u * (_sto_u - 1.0) * std::pow(_u[_qp], _sto_u - 2.0) * _grad_u[_qp]; - for (unsigned int i = 0; i < _vals.size(); ++i) - { - diff1_1 *= std::pow((*_vals[i])[_qp], _sto_v[i]); - diff1_2 *= std::pow((*_vals[i])[_qp], _sto_v[i]); - } - - const RealGradient diff1 = diff1_1 + diff1_2; - const Real d_val = _sto_u * std::pow(_u[_qp], _sto_u - 1.0) * _phi[_j][_qp]; - RealGradient diff2_sum(0.0, 0.0, 0.0); - - for (unsigned int i = 0; i < _vals.size(); ++i) - { - RealGradient diff2 = - d_val * _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * (*_grad_vals[i])[_qp]; - for (unsigned int j = 0; j < _vals.size(); ++j) - if (j != i) - diff2 *= std::pow((*_vals[j])[_qp], _sto_v[j]); - - diff2_sum += diff2; - } - - return _weight * std::pow(10.0, _log_k) * _porosity[_qp] * _diffusivity[_qp] * - _grad_test[_i][_qp] * (diff1 + diff2_sum); -} - -Real -SecondaryAqueousSpeciesDiffusion::computeQpOffDiagJacobian(unsigned int jvar) -{ - if (_vals.size() == 0) - return 0.0; - - RealGradient diff1 = _sto_u * std::pow(_u[_qp], _sto_u - 1.0) * _grad_u[_qp]; - for (unsigned int i = 0; i < _vals.size(); ++i) - { - if (jvar == _vars[i]) - diff1 *= _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * _phi[_j][_qp]; - else - diff1 *= std::pow((*_vals[i])[_qp], _sto_v[i]); - } - - Real val_u = std::pow(_u[_qp], _sto_u); - - RealGradient diff2_1(1.0, 1.0, 1.0); - RealGradient diff2_2(1.0, 1.0, 1.0); - - for (unsigned int i = 0; i < _vals.size(); ++i) - { - if (jvar == _vars[i]) - { - diff2_1 = _sto_v[i] * (_sto_v[i] - 1.0) * std::pow((*_vals[i])[_qp], _sto_v[i] - 2.0) * - _phi[_j][_qp] * (*_grad_vals[i])[_qp]; - diff2_2 = _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * _grad_phi[_j][_qp]; - } - } - - RealGradient diff2 = val_u * (diff2_1 + diff2_2); - for (unsigned int i = 0; i < _vals.size(); ++i) - if (jvar != _vars[i]) - diff2 *= std::pow((*_vals[i])[_qp], _sto_v[i]); - - RealGradient diff3; - RealGradient diff3_sum(0.0, 0.0, 0.0); - - Real val_jvar; - unsigned int var = libMesh::invalid_uint; - for (unsigned int i = 0; i < _vals.size(); ++i) - if (jvar == _vars[i]) - { - var = i; - val_jvar = val_u * _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * _phi[_j][_qp]; - } - - mooseAssert(var != libMesh::invalid_uint, "Internal error in off-diagonal coupling"); - - for (unsigned int i = 0; i < _vals.size(); ++i) - if (i != var) - { - diff3 = val_jvar * _sto_v[i] * std::pow((*_vals[i])[_qp], _sto_v[i] - 1.0) * - (*_grad_vals[i])[_qp]; - - for (unsigned int j = 0; j < _vals.size(); ++j) - if (j != var && j != i) - diff3 *= std::pow((*_vals[j])[_qp], _sto_v[j]); - - diff3_sum += diff3; - } - - return _weight * std::pow(10.0, _log_k) * _porosity[_qp] * _diffusivity[_qp] * - _grad_test[_i][_qp] * (diff1 + diff2 + diff3_sum); -} diff --git a/src/kernels/SecondaryAqueousSpeciesTimeIntegration.C b/src/kernels/SecondaryAqueousSpeciesTimeIntegration.C deleted file mode 100644 index fffd38c2..00000000 --- a/src/kernels/SecondaryAqueousSpeciesTimeIntegration.C +++ /dev/null @@ -1,116 +0,0 @@ -/****************************************************************/ -/* DO NOT MODIFY THIS HEADER */ -/* BlackBear */ -/* */ -/* (c) 2017 Battelle Energy Alliance, LLC */ -/* ALL RIGHTS RESERVED */ -/* */ -/* Prepared by Battelle Energy Alliance, LLC */ -/* Under Contract No. DE-AC07-05ID14517 */ -/* With the U. S. Department of Energy */ -/* */ -/* See COPYRIGHT for full restrictions */ -/****************************************************************/ - -#include "SecondaryAqueousSpeciesTimeIntegration.h" -#include "Material.h" - -registerMooseObject("BlackBearApp", SecondaryAqueousSpeciesTimeIntegration); - -/** - * This function defines the valid parameters for - * this Kernel and their default values - */ -InputParameters -SecondaryAqueousSpeciesTimeIntegration::validParams() -{ - InputParameters params = Kernel::validParams(); - params.addParam("weight", 1.0, "The weight of the equilibrium species"); - params.addParam( - "log_k", - 0.0, - "The equilibrium constaant of this equilibrium species in dissociateion reaction"); - - params.addParam( - "sto_u", 1.0, "The stochiomentic coef of the primary variable this kernel operats on"); - - params.addParam>("sto_v", - "The stochiometric coefficients of coupled primary species"); - params.addCoupledVar("v", "Coupled primary species constituting the equalibrium species"); - - return params; -} - -SecondaryAqueousSpeciesTimeIntegration::SecondaryAqueousSpeciesTimeIntegration( - const InputParameters & parameters) - : Kernel(parameters), - _weight(getParam("weight")), - _log_k(getParam("log_k")), - _sto_u(getParam("sto_u")), - _sto_v(getParam>("sto_v")), - _porosity(getMaterialProperty("porosity")), - _u_old(valueOld()) -{ - unsigned int n = coupledComponents("v"); - _vars.resize(n); - _v_vals.resize(n); - _v_vals_old.resize(n); - - for (unsigned int i = 0; i < _v_vals.size(); ++i) - { - _vars[i] = coupled("v", i); - _v_vals[i] = &coupledValue("v", i); - _v_vals_old[i] = &coupledValueOld("v", i); - } -} - -Real -SecondaryAqueousSpeciesTimeIntegration::computeQpResidual() -{ - Real _val_new = std::pow(10.0, _log_k) * std::pow(_u[_qp], _sto_u); - Real _val_old = std::pow(10.0, _log_k) * std::pow(_u_old[_qp], _sto_u); - - if (_v_vals.size()) - { - for (unsigned int i = 0; i < _v_vals.size(); ++i) - { - _val_new *= std::pow((*_v_vals[i])[_qp], _sto_v[i]); - _val_old *= std::pow((*_v_vals_old[i])[_qp], _sto_v[i]); - } - } - - return _porosity[_qp] * _weight * _test[_i][_qp] * (_val_new - _val_old) / _dt; -} - -Real -SecondaryAqueousSpeciesTimeIntegration::computeQpJacobian() -{ - Real _val_new = std::pow(10.0, _log_k) * _sto_u * std::pow(_u[_qp], _sto_u - 1.0) * _phi[_j][_qp]; - - if (_v_vals.size()) - for (unsigned int i = 0; i < _v_vals.size(); ++i) - _val_new *= std::pow((*_v_vals[i])[_qp], _sto_v[i]); - - return _porosity[_qp] * _test[_i][_qp] * _weight * _val_new / _dt; -} - -Real -SecondaryAqueousSpeciesTimeIntegration::computeQpOffDiagJacobian(unsigned int jvar) -{ - Real _val_new = std::pow(10.0, _log_k) * std::pow(_u[_qp], _sto_u); - - if (_vars.size()) - { - for (unsigned int i = 0; i < _vars.size(); ++i) - { - if (jvar == _vars[i]) - _val_new *= _sto_v[i] * std::pow((*_v_vals[i])[_qp], _sto_v[i] - 1.0) * _phi[_j][_qp]; - else - _val_new *= std::pow((*_v_vals[i])[_qp], _sto_v[i]); - } - - return _porosity[_qp] * _test[_i][_qp] * _weight * _val_new / _dt; - } - else - return 0.0; -} diff --git a/src/materials/ConcreteThermalMoisture.C b/src/materials/ConcreteThermalMoisture.C index 18d96576..dc35c26b 100644 --- a/src/materials/ConcreteThermalMoisture.C +++ b/src/materials/ConcreteThermalMoisture.C @@ -30,16 +30,6 @@ ConcreteThermalMoisture::validParams() InputParameters params = Material::validParams(); params.addRequiredParam( "type", "A string representing the Moose Object that is used to call this class"); - // parameters for ion diffusion through concrete & solution-mineral reactions - params.addParam("initial_diffusivity", 1.0e-9, "diffusivity of ions in medium, m^2/s"); - params.addParam("initial_porosity", 0.3, "Initial porosity of medium"); - params.addParam("initial_permeability", 1.0e-12, "Initial permeability of medium in m^2"); - params.addParam("initial_storativity", 1.0e-5, "The specific storage of porous media"); - - params.addCoupledVar("mineral_compositions", "minerals involved in reactions"); - params.addParam>("initial_mineral_conc", " mol/L of solution"); - params.addParam>("mineral_molecular_weight", "molecular weight, g/mol"); - params.addParam>("mineral_density", "The density of minerals, g/cm^3"); // parameters for thermal properties calculations MooseEnum thermal_conductivity_model("CONSTANT ASCE-1992 KODUR-2004 EUROCODE-2004 KIM-2003", @@ -110,16 +100,6 @@ ConcreteThermalMoisture::ConcreteThermalMoisture(const InputParameters & paramet _moisture_diffusivity_model(getParam("moisture_diffusivity_model")), - _input_initial_diffusivity(getParam("initial_diffusivity")), - _input_initial_porosity(getParam("initial_porosity")), - _input_initial_permeability(getParam("initial_permeability")), - _input_initial_storativity(getParam("initial_storativity")), - _input_bulk_density(getParam("ref_density_of_concrete")), - - _mineral_molecular_weight(getParam>("mineral_molecular_weight")), - _mineral_density(getParam>("mineral_density")), - _initial_mineral_conc(getParam>("initial_mineral_conc")), - _water_to_cement(getParam("water_to_cement_ratio")), _cure_time(getParam("concrete_cure_time")), @@ -170,11 +150,6 @@ ConcreteThermalMoisture::ConcreteThermalMoisture(const InputParameters & paramet _has_temperature(isCoupled("temperature")), _temp(_has_temperature ? coupledValue("temperature") : _zero) { - unsigned int n = coupledComponents("mineral_compositions"); - _vals.resize(n); - for (unsigned int i = 0; i < _vals.size(); ++i) - _vals[i] = &coupledValue("mineral_compositions", i); - if (getParam("type") == "PorousMediaBase") mooseWarning( "PorousMediaBase is being replaced by ConcreteThermalMosture. Note that in " @@ -197,38 +172,6 @@ ConcreteThermalMoisture::computeProperties() { for (unsigned int qp = 0; qp < _qrule->n_points(); ++qp) { - // Initialize the material properties from input - _porosity[qp] = _input_initial_porosity; - _permeability[qp] = _input_initial_permeability; - _diffusivity[qp] = _input_initial_diffusivity; - - if (_vals.size() > - 0) // porosity/permeability changes due to mineral precipitation or dissolution - { - Real _initial_mineral_vof = 0.0; - Real _current_mineral_vof = 0.0; - - for (unsigned int i = 0; i < _vals.size(); ++i) - { - _initial_mineral_vof += 1.0e-3 * _initial_mineral_conc[i] * _mineral_molecular_weight[i] / - _mineral_density[i] * _input_initial_porosity; - - _current_mineral_vof += 1.0e-3 * (*_vals[i])[qp] * _mineral_molecular_weight[i] / - _mineral_density[i] * _input_initial_porosity; - } - - _porosity[qp] = _input_initial_porosity - (_current_mineral_vof - _initial_mineral_vof); - - // minimum porosity allowed - if (_porosity[qp] < 1.0e-3) - _porosity[qp] = 1.0e-3; - - // Permeability changes calculated from porosity changes according to Power Law - // with an order of 5.2: k=ki* (n/ni)^5.2 - _permeability[qp] = - _input_initial_permeability * std::pow(_porosity[qp] / _input_initial_porosity, 5.2); - } - Real T = _temp[qp]; Real H = _rh[qp]; if (H < 0.0) diff --git a/src/parser/BlackBearSyntax.C b/src/parser/BlackBearSyntax.C index d8e5168a..a56cf615 100644 --- a/src/parser/BlackBearSyntax.C +++ b/src/parser/BlackBearSyntax.C @@ -18,58 +18,7 @@ namespace BlackBear { void -associateSyntax(Syntax & syntax, ActionFactory & /*action_factory*/) +associateSyntax(Syntax & /*syntax*/, ActionFactory & /*action_factory*/) { - registerTask("add_primary_aqueous_species", false); - addTaskDependency("add_primary_aqueous_species", "init_displaced_problem"); - addTaskDependency("setup_variable_complete", "add_primary_aqueous_species"); - - registerTask("add_initial_primary_species_conc", false); - addTaskDependency("add_initial_primary_species_conc", "set_adaptivity_options"); - addTaskDependency("add_preconditioning", "add_initial_primary_species_conc"); - - registerTask("add_primary_species_kernels", false); - addTaskDependency("add_primary_species_kernels", "add_vector_postprocessor"); - addTaskDependency("check_output", "add_primary_species_kernels"); - - registerTask("add_secondary_species_kernels", false); - addTaskDependency("add_secondary_species_kernels", "add_vector_postprocessor"); - addTaskDependency("check_output", "add_secondary_species_kernels"); - - registerTask("add_minerals_aux_vars", false); - addTaskDependency("add_minerals_aux_vars", "init_displaced_problem"); - addTaskDependency("setup_variable_complete", "add_minerals_aux_vars"); - - registerTask("add_minerals_initial_conc", false); - addTaskDependency("add_minerals_initial_conc", "set_adaptivity_options"); - addTaskDependency("add_preconditioning", "add_minerals_initial_conc"); - - registerTask("add_minerals_kernels", false); - addTaskDependency("add_minerals_kernels", "add_vector_postprocessor"); - addTaskDependency("check_output", "add_minerals_kernels"); - - registerTask("add_minerals_auxkernels", false); - addTaskDependency("add_minerals_auxkernels", "add_vector_postprocessor"); - addTaskDependency("check_output", "add_minerals_auxkernels"); - - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_primary_aqueous_species"); - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_initial_primary_species_conc"); - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_primary_species_kernels"); - - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_secondary_species_kernels"); - - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_minerals_aux_vars"); - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_minerals_initial_conc"); - - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_minerals_kernels"); - syntax.registerActionSyntax( - "SetReactionNetworkAction", "ReactionNetwork", "add_minerals_auxkernels"); } } // namespace BlackBear diff --git a/test/tests/concrete_sulfide_attack/gold/sulfide_attack_out.e b/test/tests/concrete_sulfide_attack/gold/sulfide_attack_out.e deleted file mode 100644 index fadd07ce..00000000 Binary files a/test/tests/concrete_sulfide_attack/gold/sulfide_attack_out.e and /dev/null differ diff --git a/test/tests/concrete_sulfide_attack/sulfide_attack.i b/test/tests/concrete_sulfide_attack/sulfide_attack.i deleted file mode 100644 index 68c25365..00000000 --- a/test/tests/concrete_sulfide_attack/sulfide_attack.i +++ /dev/null @@ -1,169 +0,0 @@ -[Mesh] - type = GeneratedMesh - dim = 2 - xmin = 0.0 - ymin = 0.0 - xmax = 0.5 - ymax = 0.001 - nx = 100 - ny = 1 -[] - -[ReactionNetwork] - primary_aqueous_species = 'ca cl h na so4' - initial_condition = '1.0e-2 2.0e-2 1.0e-10 1.0e-5 1.0e-5' - - # aqueous speciations - secondary_aqueous_species = 'cacl cacl2_aq caoh caso4_aq h2so4_aq hcl_aq hso4 nacl_aq naoh_aq naso4 oh' - aqueous_speciations = '(1.0)ca + (1.0)cl = (1.0)cacl -0.7 - (1.0)ca + (2.0)cl = (1.0)cacl2_aq -0.653 - (1.0)ca + (-1.0)h = (1.0)caoh -12.85 - (1.0)ca + (1.0)so4 = (1.0)caso4_aq 2.1 - (2.0)h + (1.0)so4 = (1.0)h2so4_aq -1.021 - (1.0)h + (1.0)cl = (1.0)hcl_aq 0.7 - (1.0)h + (1.0)so4 = (1.0)hso4 1.976 - (1.0)na + (1.0)cl = (1.0)nacl_aq -0.782 - (1.0)na + (-1.0)h = (1.0)naoh_aq -14.799 - (1.0)na + (1.0)so4 = (1.0)naso4 0.82 - (-1.0)h = (1.0)oh -13.991' - # mineral-solution reactions - minerals = 'gypsum' - initial_mineral_conc = '0.0' - mineral_solution_reactions = '(1.0)ca+(1.0)so4=gypsum' - log_k = '-6' - specific_reactive_surface_area = '0.1' - kinetic_rate_constant = '6.456542e-6' - activation_energy = '1.5e4' - gas_constant = 8.314 - reference_temperature = 298.15 - system_temperature = 298.15 -[] - -[AuxVariables] - [./porosity] - order = CONSTANT - family = Monomial - [../] -[] - -[AuxKernels] - [./porosity_output] - type = MaterialRealAux - variable = porosity - property = porosity - [../] -[] - -[BCs] - [./ca_left] - type = DirichletBC - preset = false - variable = ca - boundary = 3 - value = 1.0e-2 - [../] - [./cl-_left] - type = DirichletBC - preset = false - variable = cl - boundary = 3 - value = 2.0e-2 - [../] - [./h+_left] - type = DirichletBC - preset = false - variable = h - boundary = 3 - value = 1.0e-10 - [../] - [./na+_left] - type = DirichletBC - preset = false - variable = na - boundary = 3 - value = 1.0e-5 - [../] - [./so42-_left] - type = DirichletBC - preset = false - variable = so4 - boundary = 3 - value = 1.0e-5 - [../] - -# [./ca_right] -# type = DirichletBC -# variable = ca -# boundary = 1 -# value = 1.0e-2 -# [../] - [./cl-_right] - type = DirichletBC - preset = false - variable = cl - boundary = 1 - value = 1.0e-5 - [../] -# [./h+_right] -# type = DirichletBC -# variable = h -# boundary = 1 -# value = 1.0e-10 -# [../] - [./na+_right] - type = DirichletBC - preset = false - variable = na - boundary = 1 - value = 2.0e-2 - [../] - [./so42-_right] - type = DirichletBC - preset = false - variable = so4 - boundary = 1 - value = 1.0e-2 - [../] -[] - -[Materials] - [./example] - type = ConcreteThermalMoisture - block = 0 - initial_diffusivity = 1.0e-9 - initial_porosity = 0.1 - initial_permeability = 1.0e-18 - initial_mineral_conc = 0.00 - mineral_compositions = gypsum - mineral_molecular_weight = 136.1406 - mineral_density = 2.308 - [../] -[] - -[Executioner] - type = Transient - - #Preconditioned JFNK (default) - solve_type = 'PJFNK' - petsc_options_iname = '-pc_type -pc_hypre_type' - petsc_options_value = 'hypre boomeramg' - - dt = 100.0 - num_steps = 5 -# dtmax = 864000.0 -# end_time = 157680000 # 5 years -# [./TimeStepper] -# type = SolutionTimeAdaptiveDT -# dt = 100.0 -# [../] - - l_max_its = 50 - l_tol = 1e-6 - nl_max_its = 10 - nl_rel_tol = 1e-6 - nl_abs_tol = 1e-15 -[] - -[Outputs] - exodus = true -[] diff --git a/test/tests/concrete_sulfide_attack/tests b/test/tests/concrete_sulfide_attack/tests deleted file mode 100644 index 4b95ff76..00000000 --- a/test/tests/concrete_sulfide_attack/tests +++ /dev/null @@ -1,17 +0,0 @@ -[Tests] - issues = '#171' - design = 'ConcreteThermalMoisture.md ReactionNetwork/index.md' - [test] - type = 'Exodiff' - input = 'sulfide_attack.i' - exodiff = 'sulfide_attack_out.e' - requirement = 'Blackbear shall model the migration and reactions between chemical species involved in sulfide attack on concrete' - [] - [aqueous_speciations_syntax] - type = 'RunException' - input = 'sulfide_attack.i' - cli_args = 'ReactionNetwork/aqueous_speciations="(1.0)ca / (1.0)cl = (1.0)cacl -0.7"' - expect_err = 'Error parsing term: /' - requirement = 'The ReactionNetwork model shall generate an error if an incorrect form is provided for aqueous speciations' - [] -[]