10 #include "gtest/gtest.h" 14 const double eps = 1.0E-8;
57 TEST(PorousFlowVanGenuchtenTest, sat)
68 TEST(PorousFlowVanGenuchtenTest, dsat)
86 TEST(PorousFlowVanGenuchtenTest, d2sat)
104 TEST(PorousFlowVanGenuchtenTest, cap)
107 EXPECT_NEAR(4.06172392297447,
114 TEST(PorousFlowVanGenuchtenTest, dcap)
125 TEST(PorousFlowVanGenuchtenTest, d2cap)
136 TEST(PorousFlowVanGenuchtenTest, relperm)
143 TEST(PorousFlowVanGenuchtenTest, drelperm)
158 TEST(PorousFlowVanGenuchtenTest, d2relperm)
173 TEST(PorousFlowVanGenuchtenTest, adrelperm)
183 EXPECT_NEAR(adrelperm.value(), relperm, 1.0E-5);
184 EXPECT_NEAR(adrelperm.derivatives()[0], drelperm, 1.0E-5);
187 TEST(PorousFlowVanGenuchtenTest, relpermNW)
195 TEST(PorousFlowVanGenuchtenTest, drelpermNW)
210 TEST(PorousFlowVanGenuchtenTest, d2relpermNW)
225 TEST(PorousFlowVanGenuchtenTest, adrelpermnw)
235 EXPECT_NEAR(adrelperm.value(), relperm, 1.0E-5);
236 EXPECT_NEAR(adrelperm.derivatives()[0], drelperm, 1.0E-5);
240 TEST(PorousFlowVanGenuchtenTest, caphys)
244 const std::vector<Real> no_ext_sats{1.1, 0.75, 0.2, 0.4, 0.6};
245 const std::vector<Real> expected_pcs{
246 0.0, 0.0, 0.7233512030263158, 0.18806139488299345, 0.06716785873826017};
247 for (
unsigned i = 0; i < no_ext_sats.size(); ++i)
249 EXPECT_NEAR(expected_pcs[i],
253 EXPECT_NEAR(expected_pcs[i],
265 EXPECT_NEAR(std::numeric_limits<Real>::max(),
268 EXPECT_NEAR(std::numeric_limits<Real>::max(),
273 EXPECT_NEAR(0.15229665668299805,
low_ext_exp.
S, 1.0E-5);
281 const std::vector<Real> sats{0.01, 0.1, 0.15, 0.2, 0.5, 0.63, 0.8, 0.99, 1.0};
282 std::vector<Real> pc;
283 pc = {31.385947046636815,
289 0.006681337544884095,
290 2.7847615834816514e-07,
292 for (
unsigned i = 0; i < sats.size(); ++i)
299 pc = {3.9304232526771696,
305 0.006681337544884095,
306 2.7847615834816514e-07,
308 for (
unsigned i = 0; i < sats.size(); ++i)
321 0.006681337544884095,
322 2.7847615834816514e-07,
324 for (
unsigned i = 0; i < sats.size(); ++i)
331 pc = {1.5, 1.5, 1.5, 0.7233512030263158, 0.11727884570711045, 0.05300654102157442, 0.0, 0.0, 0.0};
332 for (
unsigned i = 0; i < sats.size(); ++i)
340 TEST(PorousFlowVanGenuchtenTest, sathys)
344 const std::vector<Real> expected_sats{1.0, 0.2, 0.4, 0.6};
345 const std::vector<Real> no_ext_pcs{
346 -1.1, 0.7233512030263158, 0.18806139488299345, 0.06716785873826017};
347 for (
unsigned i = 0; i < no_ext_pcs.size(); ++i)
349 EXPECT_NEAR(expected_sats[i],
353 EXPECT_NEAR(expected_sats[i],
367 std::vector<Real> sats{0.01, 0.1, 0.15, 0.2, 0.5, 0.63, 0.8, 0.99, 1.0};
368 std::vector<Real> pc;
369 pc = {31.385947046636815,
375 0.006681337544884095,
376 2.7847615834816514e-07,
378 for (
unsigned i = 0; i < sats.size(); ++i)
385 pc = {3.9304232526771696,
391 0.006681337544884095,
392 2.7847615834816514e-07,
394 for (
unsigned i = 0; i < sats.size(); ++i)
407 0.006681337544884095,
408 2.7847615834816514e-07,
410 for (
unsigned i = 0; i < sats.size(); ++i)
417 pc = {2.5, 1.5, 0.7233512030263158, 0.11727884570711045, 0.05300654102157442, 1E-10};
419 for (
unsigned i = 0; i < sats.size(); ++i)
427 TEST(PorousFlowVanGenuchtenTest, dcaphys)
433 std::vector<Real> sats{1.1, 0.75, -1.0, 0.05};
434 for (
const auto & sat : sats)
444 sats = {0.2, 0.4, 0.6};
445 for (
const auto & sat : sats)
447 const Real fd = 0.5 *
460 sats = {0.01, 0.1, 0.15, 0.2, 0.5, 0.63, 0.8, 0.99, 1.0};
462 for (
const auto & sat : sats)
464 const Real fd = 0.5 *
477 for (
const auto & sat : sats)
479 const Real fd = 0.5 *
492 for (
const auto & sat : sats)
494 const Real fd = 0.5 *
507 sats = {0.01, 0.1, 0.15, 0.2, 0.5, 0.8, 0.99, 1.0};
508 for (
const auto & sat : sats)
510 const Real fd = 0.5 *
524 TEST(PorousFlowVanGenuchtenTest, d2caphys)
530 std::vector<Real> sats{1.1, 0.75, -1.0, 0.05};
531 for (
const auto & sat : sats)
541 sats = {0.2, 0.4, 0.6};
542 for (
const auto & sat : sats)
558 sats = {0.01, 0.1, 0.15, 0.2, 0.5, 0.6, 0.7, 0.8, 0.99, 1.0};
560 for (
const auto & sat : sats)
562 const Real fd = 0.5 *
568 if (std::abs(fd) > 10)
581 for (
const auto & sat : sats)
583 const Real fd = 0.5 *
589 if (std::abs(fd) > 10)
602 for (
const auto & sat : sats)
604 const Real fd = 0.5 *
610 if (std::abs(fd) > 10)
623 sats = {0.01, 0.1, 0.15, 0.2, 0.5, 0.8, 0.99, 1.0};
624 for (
const auto & sat : sats)
626 const Real fd = 0.5 *
632 if (std::abs(fd) > 10)
646 TEST(PorousFlowVanGenuchtenTest, dsathys)
652 std::vector<Real> pcs{-1.1, 1234.0};
653 for (
const auto & pc : pcs)
662 pcs = {0.7, 0.2, 0.07};
663 for (
const auto & pc : pcs)
665 const Real fd = 0.5 *
679 pcs = {31.385947046636815,
685 0.006681337544884095};
686 for (
const auto & pc : pcs)
688 const Real fd = 0.5 *
701 pcs = {3.9304232526771696,
707 0.006681337544884095};
708 for (
const auto & pc : pcs)
710 const Real fd = 0.5 *
723 pcs = {2.5, 0.7233512030263158, 0.11727884570711045, 0.05300654102157442, 0.006681337544884095};
724 for (
const auto & pc : pcs)
726 const Real fd = 0.5 *
739 pcs = {2.5, 0.7233512030263158, 0.11727884570711045, 0.05, 0.04};
740 for (
const auto & pc : pcs)
742 const Real fd = 0.5 *
756 TEST(PorousFlowVanGenuchtenTest, d2sathys)
762 std::vector<Real> pcs{-1.1, 1234.0};
763 for (
const auto & pc : pcs)
772 pcs = {0.7, 0.2, 0.07};
773 for (
const auto & pc : pcs)
775 const Real fd = 0.5 *
789 pcs = {31.385947046636815,
795 0.006681337544884095};
796 for (
const auto & pc : pcs)
798 const Real fd = 0.5 *
811 pcs = {3.9304232526771696,
817 0.006681337544884095};
818 for (
const auto & pc : pcs)
820 const Real fd = 0.5 *
833 pcs = {2.5, 0.7233512030263158, 0.11727884570711045, 0.06300654102157442, 0.006681337544884095};
834 for (
const auto & pc : pcs)
836 const Real fd = 0.5 *
849 pcs = {2.5, 0.7233512030263158, 0.11727884570711045, 0.05, 0.04};
850 for (
const auto & pc : pcs)
852 const Real fd = 0.5 *
871 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
875 0.2, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
877 EXPECT_NEAR(0.002847974503642625,
879 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
881 EXPECT_NEAR(0.002847974503642625,
883 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
885 EXPECT_NEAR(0.05828443549816974,
887 0.5, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
889 EXPECT_NEAR(0.10056243969693253,
891 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
893 EXPECT_NEAR(0.08943153676247108,
895 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
897 EXPECT_NEAR(0.3159149169921876,
899 0.8, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
901 EXPECT_NEAR(0.8011290515690178,
903 0.95, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
909 0.1, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
913 0.2, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
915 EXPECT_NEAR(0.005858393312913491,
917 0.3, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
919 EXPECT_NEAR(0.002847974503642625,
921 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
923 EXPECT_NEAR(0.1363562523627124,
925 0.55, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
929 0.7, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
931 EXPECT_NEAR(0.8011290515690178,
933 0.95, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
944 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
947 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
949 0.3 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
951 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
955 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
957 0.3 +
eps, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
959 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
963 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
965 0.55 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
967 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
971 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
973 0.55 +
eps, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
975 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
979 0.8, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
981 0.8 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
983 0.8, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
987 0.95, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
989 0.95 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
991 0.95, 0.2, 0.15, 0.25, 0.5, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
997 0.1, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1000 0.3, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1002 0.3 +
eps, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
1004 0.3, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
1008 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1010 0.3 +
eps, 0.2, 0.0, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
1012 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
1016 0.55, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1018 0.55 +
eps, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
1020 0.55, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
1024 0.7, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1026 0.7 +
eps, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
1028 0.7, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
1032 0.95, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2),
1034 0.95 +
eps, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2) -
1036 0.95, 0.2, 0.15, 0.25, 0.15, 0.9, 0.9, 0.3, 0.5, 0.45, 2.2)) /
1045 EXPECT_NEAR(0.91875,
1047 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1051 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 1.0, -0.75),
1055 0.2, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1057 EXPECT_NEAR(0.6368139633459233,
1059 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1061 EXPECT_NEAR(0.6368139633459233,
1063 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1065 EXPECT_NEAR(0.33222054246699,
1067 0.5, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1069 EXPECT_NEAR(0.24397255389213568,
1071 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1073 EXPECT_NEAR(0.2691316236913443,
1075 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1077 EXPECT_NEAR(0.01509148277290631,
1079 0.85, 0.2, 0.05, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1083 0.85, 0.2, 0.18, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1087 EXPECT_NEAR(0.91875,
1089 0.1, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1093 0.1, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 1.0, -0.75),
1097 0.2, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1099 EXPECT_NEAR(0.5616820966427329,
1101 0.3, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1103 EXPECT_NEAR(0.6368139633459233,
1105 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1107 EXPECT_NEAR(0.11086138435665097,
1109 0.55, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1113 0.76, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1123 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1125 0.1 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1127 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1132 0.1, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 1.0, -0.75),
1135 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1137 0.3 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1139 0.3, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1143 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1145 0.3 +
eps, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1147 0.3, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1151 0.45, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1153 0.45 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1155 0.45, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1159 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1161 0.55 +
eps, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1163 0.55, 0.2, 0.15, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1167 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1169 0.55 +
eps, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1171 0.55, 0.2, 0.0, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1175 0.85, 0.2, 0.05, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1177 0.85 +
eps, 0.2, 0.05, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75) -
1179 0.85, 0.2, 0.05, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75)) /
1184 0.85, 0.2, 0.18, 0.25, 0.5, 0.9, 0.3, 0.8, -0.75),
1189 0.1, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1191 0.1 +
eps, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75) -
1193 0.1, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75)) /
1198 0.1, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 1.0, -0.75),
1201 0.3, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1203 0.3 +
eps, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75) -
1205 0.3, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75)) /
1209 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1211 0.3 +
eps, 0.2, 0.0, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75) -
1213 0.3, 0.2, 0.0, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75)) /
1217 0.55, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
1219 0.55 +
eps, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75) -
1221 0.55, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75)) /
1226 0.76, 0.2, 0.18, 0.25, 0.15, 0.9, 0.3, 0.8, -0.75),
const PorousFlowVanGenuchten::LowCapillaryPressureExtension low_ext_exp(PorousFlowVanGenuchten::LowCapillaryPressureExtension::EXPONENTIAL, low_ext_S, low_ext_Pc, low_ext_dPc)
Real dcapillaryPressureHys(Real sl, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Derivative of capillaryPressureHys with respect to sl.
TEST(PorousFlowVanGenuchtenTest, sat)
Real d2capillaryPressureHys(Real sl, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Second derivative of capillaryPressureHys with respect to sl.
const PorousFlowVanGenuchten::HighCapillaryPressureExtension no_high_ext(PorousFlowVanGenuchten::HighCapillaryPressureExtension::NONE, 2.0, 0.0, 0.0)
Real drelativePermeabilityHys(Real sl, Real slr, Real sgrdel, Real sgrmax, Real sldel, Real m, Real upper_liquid_param, Real y0, Real y0p, Real y1, Real y1p)
Derivative of Hysteretic relative permeability for liquid, with respect to liquid saturation...
Real relativePermeabilityNWHys(Real sl, Real slr, Real sgrdel, Real sgrmax, Real sldel, Real m, Real gamma, Real k_rg_max, Real y0p)
Hysteretic relative permeability for gas.
const PorousFlowVanGenuchten::LowCapillaryPressureExtension no_low_ext(PorousFlowVanGenuchten::LowCapillaryPressureExtension::NONE, -1.0, 123.0, 0.0)
Parameters associated with the extension of the hysteretic wetting capillary pressure function to hig...
T relativePermeabilityNW(const T &seff, Real m)
Relative permeability for a non-wetting phase as a function of effective saturation.
const PorousFlowVanGenuchten::HighCapillaryPressureExtension high_ext_power(PorousFlowVanGenuchten::HighCapillaryPressureExtension::POWER, high_ext_S, high_ext_Pc, high_ext_dPc)
DualNumber< Real, DNDerivativeType, true > ADReal
Real capillaryPressureHys(Real sl, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Hysteretic capillary pressure function (Eqn(1) of Doughty2007) with extensions (page5 and Fig1 of Dou...
Real drelativePermeabilityNWHys(Real sl, Real slr, Real sgrdel, Real sgrmax, Real sldel, Real m, Real gamma, Real k_rg_max, Real y0p)
Derivative of hysteretic relative permeability for gas with respect to the liquid saturation...
Parameters associated with the extension of the hysteretic capillary pressure function to low saturat...
Real d2RelativePermeabilityNW(Real seff, Real m)
Second derivative of relative permeability for a non-wetting phase with respect to effective saturati...
Real relativePermeabilityHys(Real sl, Real slr, Real sgrdel, Real sgrmax, Real sldel, Real m, Real upper_liquid_param, Real y0, Real y0p, Real y1, Real y1p)
Hysteretic relative permeability for liquid.
const PorousFlowVanGenuchten::HighCapillaryPressureExtension high_ext_none2(PorousFlowVanGenuchten::HighCapillaryPressureExtension::NONE, high_ext_S, high_ext_Pc, high_ext_dPc)
Real d2CapillaryPressure(Real seff, Real alpha, Real m, Real pc_max)
Second derivative of capillary pressure wrt effective saturation.
Real dRelativePermeability(Real seff, Real m)
Derivative of relative permeability with respect to effective saturation.
T relativePermeability(const T &seff, Real m)
Relative permeability as a function of effective saturation.
Real effectiveSaturation(Real p, Real alpha, Real m)
Effective saturation as a function of porepressure.
const PorousFlowVanGenuchten::HighCapillaryPressureExtension high_ext_none(PorousFlowVanGenuchten::HighCapillaryPressureExtension::NONE, 0.8, high_ext_Pc, high_ext_dPc)
const PorousFlowVanGenuchten::LowCapillaryPressureExtension low_ext_none(PorousFlowVanGenuchten::LowCapillaryPressureExtension::NONE, low_ext_S, low_ext_Pc, low_ext_dPc)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real dCapillaryPressure(Real seff, Real alpha, Real m, Real pc_max)
Derivative of capillary pressure wrt effective saturation.
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)
Real d2EffectiveSaturation(Real p, Real alpha, Real m)
Second derivative of effective saturation wrt porepressure.
Real dsaturationHys(Real pc, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Derivative of Hysteretic saturation function with respect to pc.
Real d2RelativePermeability(Real seff, Real m)
Second derivative of relative permeability with respect to effective saturation.
Real d2saturationHys(Real pc, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Second derivative of Hysteretic saturation function with respect to pc.
Real dEffectiveSaturation(Real p, Real alpha, Real m)
Derivative of effective saturation wrt porepressure.
Real dRelativePermeabilityNW(Real seff, Real m)
Derivative of relative permeability for a non-wetting phase with respect to effective saturation...
Real saturationHys(Real pc, Real slmin, Real sgrdel, Real alpha, Real n, const LowCapillaryPressureExtension &low_ext=LowCapillaryPressureExtension(), const HighCapillaryPressureExtension &high_ext=HighCapillaryPressureExtension())
Hysteretic saturation function (Eqn(1) of Doughty2007) with extensions (page5 and Fig1 of Doughty2008...
Real capillaryPressure(Real seff, Real alpha, Real m, Real pc_max)
Capillary pressure as a function of effective saturation.
const PorousFlowVanGenuchten::LowCapillaryPressureExtension low_ext_quad(PorousFlowVanGenuchten::LowCapillaryPressureExtension::QUADRATIC, low_ext_S, low_ext_Pc, low_ext_dPc)