Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add binding model submodule tests to CI #360

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions test/BindingModelTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ int ConfiguredBindingModel::requiredBufferSize() CADET_NOEXCEPT
return 0;
}

void testJacobianAD(const char* modelName, unsigned int nComp, unsigned int const* nBound, bool isKinetic, const char* config, double const* point, bool skipStructureTest, double absTol, double relTol)
void testJacobianAD(const char* modelName, unsigned int nComp, unsigned int const* nBound, bool isKinetic, const char* config, double const* point, bool skipStructureTest, double FDsignAbsTol, double absTol, double relTol)
{
ConfiguredBindingModel cbm = ConfiguredBindingModel::create(modelName, nComp, nBound, isKinetic, config);

Expand Down Expand Up @@ -229,12 +229,12 @@ void testJacobianAD(const char* modelName, unsigned int nComp, unsigned int cons
cadet::test::checkJacobianPatternFD(
[&](double const* lDir, double* res) -> void { cbm.model().flux(1.0, 0u, ColumnPosition{0.0, 0.0, 0.0}, lDir + cbm.nComp(), lDir, res, cbm.buffer()); },
[&](double const* lDir, double* res) -> void { jacAna.submatrixMultiplyVector(lDir, cbm.nComp(), 0, numEq, numDofs, res); },
yState.data(), dir.data(), colA.data(), colB.data(), numDofs, numEq);
yState.data(), dir.data(), colA.data(), colB.data(), numDofs, numEq, FDsignAbsTol);

cadet::test::checkJacobianPatternFD(
[&](double const* lDir, double* res) -> void { cbm.model().flux(1.0, 0u, ColumnPosition{0.0, 0.0, 0.0}, lDir + cbm.nComp(), lDir, res, cbm.buffer()); },
[&](double const* lDir, double* res) -> void { jacAD.multiplyVector(lDir, res); },
yState.data(), dir.data(), colA.data(), colB.data(), numDofs, numEq);
yState.data(), dir.data(), colA.data(), colB.data(), numDofs, numEq, FDsignAbsTol);
}

// Check Jacobians against each other
Expand Down
3 changes: 2 additions & 1 deletion test/BindingModelTests.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,11 @@ namespace binding
* @param [in] config JSON string with binding model parameters
* @param [in] point Liquid phase and solid phase values to check Jacobian at
* @param [in] skipStructureTest Determines whether the structural test using finite differences is skipped
* @param [in] FDsignAbsTol Absolute tolerance in FD pattern sign check
* @param [in] absTol Absolute error tolerance
* @param [in] relTol Relative error tolerance
*/
void testJacobianAD(const char* modelName, unsigned int nComp, unsigned int const* nBound, bool isKinetic, const char* config, double const* point, bool skipStructureTest = false, double absTol = 0.0, double relTol = std::numeric_limits<float>::epsilon() * 100.0);
void testJacobianAD(const char* modelName, unsigned int nComp, unsigned int const* nBound, bool isKinetic, const char* config, double const* point, bool skipStructureTest = false, double FDsignAbsTol = 0.0, double absTol = 0.0, double relTol = std::numeric_limits<float>::epsilon() * 100.0);

/**
* @brief Checks residual and analytic Jacobian of normal model variant against externally dependent ones
Expand Down
19 changes: 10 additions & 9 deletions test/BindingModels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ CADET_BINDINGTEST("MOBILE_PHASE_MODULATOR", "EXT_MOBILE_PHASE_MODULATOR", (1,1,1
"EXT_MPM_BETA_T": [0.0, 1.5, 2.0],
"EXT_MPM_BETA_TT": [0.0, 0.0, 0.0],
"EXT_MPM_BETA_TTT": [0.0, 0.0, 0.0],
"EXT_MPM_LINEAR_THRESHOLD": 1e-10
"MPM_LINEAR_THRESHOLD": 1e-10
)json", \
R"json( "EXT_MPM_KA": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_KA_T": [0.0, 1.14, 1.0, 2.0],
Expand All @@ -295,7 +295,7 @@ CADET_BINDINGTEST("MOBILE_PHASE_MODULATOR", "EXT_MOBILE_PHASE_MODULATOR", (1,1,1
"EXT_MPM_BETA_T": [0.0, 1.5, 0.0, 2.0],
"EXT_MPM_BETA_TT": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_BETA_TTT": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_LINEAR_THRESHOLD": 1e-10
"MPM_LINEAR_THRESHOLD": 1e-10
)json", \
1e-10, 1e-10, CADET_NONBINDING_LIQUIDPHASE_COMP_UNUSED, CADET_COMPARE_BINDING_VS_NONBINDING)

Expand Down Expand Up @@ -334,7 +334,7 @@ CADET_BINDINGTEST("MOBILE_PHASE_MODULATOR", "EXT_MOBILE_PHASE_MODULATOR", (1,1,1
"EXT_MPM_BETA_T": [0.0, 1.5, 2.0],
"EXT_MPM_BETA_TT": [0.0, 0.0, 0.0],
"EXT_MPM_BETA_TTT": [0.0, 0.0, 0.0],
"EXT_MPM_LINEAR_THRESHOLD": 1e-10
"MPM_LINEAR_THRESHOLD": 1e-10
)json", \
R"json( "EXT_MPM_KA": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_KA_T": [0.0, 1.14, 1.0, 2.0],
Expand All @@ -356,7 +356,7 @@ CADET_BINDINGTEST("MOBILE_PHASE_MODULATOR", "EXT_MOBILE_PHASE_MODULATOR", (1,1,1
"EXT_MPM_BETA_T": [0.0, 1.5, 0.0, 2.0],
"EXT_MPM_BETA_TT": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_BETA_TTT": [0.0, 0.0, 0.0, 0.0],
"EXT_MPM_LINEAR_THRESHOLD": 1e-10
"MPM_LINEAR_THRESHOLD": 1e-10
)json", \
1e-10, 1e-10, CADET_NONBINDING_LIQUIDPHASE_COMP_UNUSED, CADET_COMPARE_BINDING_VS_NONBINDING)

Expand Down Expand Up @@ -1002,7 +1002,7 @@ CADET_BINDINGTEST("MULTI_COMPONENT_LDF_FREUNDLICH", "EXT_MULTI_COMPONENT_LDF_FRE
"EXT_MCLDFFRL_A_T": [3.0, 2.2, 1.5, 0.5],
"EXT_MCLDFFRL_A_TT": [0.0, 0.0, 0.0, 0.0],
"EXT_MCLDFFRL_A_TTT": [0.0, 0.0, 0.0, 0.0],
"EXT_MCLDFFRL_TAU": 0.1
"MCLDFFRL_TAU": 0.1
)json", \
R"json( "EXT_MCLDFFRL_KLDF": [0.0, 0.0, 0.0],
"EXT_MCLDFFRL_KLDF_T": [1.14, 1.0, 2.0],
Expand All @@ -1020,7 +1020,7 @@ CADET_BINDINGTEST("MULTI_COMPONENT_LDF_FREUNDLICH", "EXT_MULTI_COMPONENT_LDF_FRE
"EXT_MCLDFFRL_A_T": [2.2, 1.1, 0.4, 0.1, 0.94, 2.8, 0.5, 1.2, 2.4],
"EXT_MCLDFFRL_A_TT": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"EXT_MCLDFFRL_A_TTT": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"EXT_MCLDFFRL_TAU": 0.1
"MCLDFFRL_TAU": 0.1
)json", \
1e-10, 1e-10, CADET_NONBINDING_LIQUIDPHASE_COMP_USED, CADET_DONT_COMPARE_BINDING_VS_NONBINDING)

Expand Down Expand Up @@ -1059,7 +1059,7 @@ CADET_BINDINGTEST("MULTI_COMPONENT_SIPS", "EXT_MULTI_COMPONENT_SIPS", (1, 1, 1,
"EXT_SIPS_EXP_TTT": [0.0, 0.0, 0.0, 0.0],
"EXT_SIPS_REFC0": 2.0,
"EXT_SIPS_REFQ": 1.1,
"EXT_SIPS_LINEAR_THRESHOLD": 1e-10
"SIPS_LINEAR_THRESHOLD": 1e-10
)json", \
R"json( "EXT_SIPS_KA": [0.0, 0.0, 0.0, 0.0, 0.0],
"EXT_SIPS_KA_T": [1.14, 1.0, 2.0, 1.14, 2.0],
Expand All @@ -1079,7 +1079,7 @@ CADET_BINDINGTEST("MULTI_COMPONENT_SIPS", "EXT_MULTI_COMPONENT_SIPS", (1, 1, 1,
"EXT_SIPS_EXP_TTT": [0.0, 0.0, 0.0, 0.0, 0.0],
"EXT_SIPS_REFC0": 2.0,
"EXT_SIPS_REFQ": 1.1,
"EXT_SIPS_LINEAR_THRESHOLD": 1e-10
"SIPS_LINEAR_THRESHOLD": 1e-10
)json", \
1e-10, 1e-10, CADET_NONBINDING_LIQUIDPHASE_COMP_UNUSED, CADET_COMPARE_BINDING_VS_NONBINDING)

Expand Down Expand Up @@ -1461,6 +1461,7 @@ CADET_BINDINGTEST("GENERALIZED_ION_EXCHANGE", "EXT_GENERALIZED_ION_EXCHANGE", (1
{
const unsigned int nBound[] = { 0, 0, 1, 1, 1};
const double state[] = { 0.9, 1.1, 1.5e-2, 3.2e-3, 1.5e-5, 3.2e-5, 1.5e-5, 3.2e-5 };
double FDsignAbsTol = 1e-10; // specific tolerance for this test, non-default value
char const* const config = R"json({
"COL_PHI": 49232983.6522396,
"COL_KAPPA_EXP": 1.8,
Expand All @@ -1487,7 +1488,7 @@ CADET_BINDINGTEST("GENERALIZED_ION_EXCHANGE", "EXT_GENERALIZED_ION_EXCHANGE", (1
const bool isKinetic = bindMode;
SECTION(std::string("Binding mode ") + (isKinetic ? "dynamic" : "quasi-stationary"))
{
cadet::test::binding::testJacobianAD("MULTI_COMPONENT_COLLOIDAL", sizeof(nBound) / sizeof(unsigned int), nBound, isKinetic, config, state);
cadet::test::binding::testJacobianAD("MULTI_COMPONENT_COLLOIDAL", sizeof(nBound) / sizeof(unsigned int), nBound, isKinetic, config, state, FDsignAbsTol);
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions test/BindingModels.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#define CADET_BINDINGTEST_SINGLE_IMPL_NONBNDJACCONST_false(modelName, tagName, postFix, someNonBinding, stateSomeNon, configSomeNon)

#define CADET_BINDINGTEST_SINGLE_IMPL_NONBNDJACCONST_true(modelName, tagName, postFix, someNonBinding, stateSomeNon, configSomeNon) \
TEST_CASE(modelName " binding model consistency of non-binding Jacobian columns" postFix, "[BindingModel],[Jacobian]," tagName) \
TEST_CASE(modelName " binding model consistency of non-binding Jacobian columns" postFix, "[BindingModel],[CI],[Jacobian]," tagName) \
{ \
const unsigned int nBound3[] = BRACED_INIT_LIST someNonBinding; \
const double state3[] = BRACED_INIT_LIST stateSomeNon; \
Expand Down Expand Up @@ -68,7 +68,7 @@
#define CADET_BINDINGTEST_SINGLE_IMPL_BNDVSNONBND_false(modelName, tagName, postFix, allBinding, someNonBinding, stateAll, stateSomeNon, configAll, configSomeNon)

#define CADET_BINDINGTEST_SINGLE_IMPL_BNDVSNONBND_true(modelName, tagName, postFix, allBinding, someNonBinding, stateAll, stateSomeNon, configAll, configSomeNon) \
TEST_CASE(modelName " binding model consistency of non-binding vs binding" postFix, "[BindingModel],[Jacobian]," tagName) \
TEST_CASE(modelName " binding model consistency of non-binding vs binding" postFix, "[BindingModel],[CI],[Jacobian]," tagName) \
{ \
const unsigned int nBound2[] = BRACED_INIT_LIST allBinding; \
const unsigned int nBound3[] = BRACED_INIT_LIST someNonBinding; \
Expand Down Expand Up @@ -115,7 +115,7 @@
* @param cmpBndVsNonbnd Determines whether a test for all-binding vs non-binding variant (Jacobian and residual) is created
*/
#define CADET_BINDINGTEST_SINGLE_IMPL(modelName, tagName, postFix, allBinding, someNonBinding, stateAll, stateSomeNon, configAll, configSomeNon, consInitTol, consInitCheckTol, usesNonBindingLiquidPhase, cmpBndVsNonbnd) \
TEST_CASE(modelName " binding model analytic Jacobian vs AD" postFix, "[Jacobian],[AD],[BindingModel]," tagName) \
TEST_CASE(modelName " binding model analytic Jacobian vs AD" postFix, "[Jacobian],[AD],[BindingModel],[CI]," tagName) \
{ \
const unsigned int nBound2[] = BRACED_INIT_LIST allBinding; \
const unsigned int nBound3[] = BRACED_INIT_LIST someNonBinding; \
Expand Down Expand Up @@ -180,7 +180,7 @@
#define CADET_BINDINGTEST_MULTI(modelName, extModelName, postFix, allBinding, someNonBinding, stateAll, stateSomeNon, configAll, configSomeNon, extConfigAll, extConfigSomeNon, consInitTol, consInitCheckTol, usesNonBindingLiquidPhase, cmpBndVsNonbnd) \
CADET_BINDINGTEST_SINGLE_IMPL(modelName, "[" modelName "]", postFix, allBinding, someNonBinding, stateAll, stateSomeNon, configAll, configSomeNon, consInitTol, consInitCheckTol, usesNonBindingLiquidPhase, cmpBndVsNonbnd) \
CADET_BINDINGTEST_SINGLE_IMPL(extModelName, "[ExternalFunction],[" extModelName "]", postFix, allBinding, someNonBinding, stateAll, stateSomeNon, extConfigAll, extConfigSomeNon, consInitTol, consInitCheckTol, usesNonBindingLiquidPhase, cmpBndVsNonbnd) \
TEST_CASE(modelName " binding model consistent with externally dependent variant" postFix, "[BindingModel],[ExternalFunction],[" modelName "],[" extModelName "]") \
TEST_CASE(modelName " binding model consistent with externally dependent variant" postFix, "[BindingModel],[CI],[ExternalFunction],[" modelName "],[" extModelName "]") \
{ \
const unsigned int nBound2[] = BRACED_INIT_LIST allBinding; \
const unsigned int nBound3[] = BRACED_INIT_LIST someNonBinding; \
Expand Down Expand Up @@ -235,7 +235,7 @@
* @param consInitCheckTol Error tolerance for residual check in consistent initialization
*/
#define CADET_BINDINGTEST_ALLBINDING_SINGLE_IMPL(modelName, tagName, allBinding, stateAll, configAll, consInitTol, consInitCheckTol) \
TEST_CASE(modelName " binding model analytic Jacobian vs AD", "[Jacobian],[AD],[BindingModel]," tagName) \
TEST_CASE(modelName " binding model analytic Jacobian vs AD", "[Jacobian],[AD],[BindingModel],[CI]," tagName) \
{ \
const unsigned int nBound2[] = BRACED_INIT_LIST allBinding; \
const double state2[] = BRACED_INIT_LIST stateAll; \
Expand Down Expand Up @@ -277,7 +277,7 @@
#define CADET_BINDINGTEST_ALLBINDING(modelName, extModelName, allBinding, stateAll, configAll, extConfigAll, consInitTol, consInitCheckTol) \
CADET_BINDINGTEST_ALLBINDING_SINGLE_IMPL(modelName, "[" modelName "]", allBinding, stateAll, configAll, consInitTol, consInitCheckTol) \
CADET_BINDINGTEST_ALLBINDING_SINGLE_IMPL(extModelName, "[ExternalFunction],[" extModelName "]", allBinding, stateAll, extConfigAll, consInitTol, consInitCheckTol) \
TEST_CASE(modelName " binding model consistent with externally dependent variant", "[BindingModel],[ExternalFunction],[" modelName "],[" extModelName "]") \
TEST_CASE(modelName " binding model consistent with externally dependent variant", "[BindingModel],[CI],[ExternalFunction],[" modelName "],[" extModelName "]") \
{ \
const unsigned int nBound2[] = BRACED_INIT_LIST allBinding; \
const double state2[] = BRACED_INIT_LIST stateAll; \
Expand Down
Loading