https://mooseframework.inl.gov
VaporMixtureFluidPropertiesUtils.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
13 
14 // Macro for performing a derivative test
15 #define VAPOR_MIX_DERIV_TEST(f, a, b, x, rel_tol) \
16  { \
17  const Real abs_tol = 1e-10; \
18  const Real da = REL_PERTURBATION * a; \
19  const Real db = REL_PERTURBATION * b; \
20  std::vector<Real> dx(x.size()); \
21  for (unsigned int i = 0; i < x.size(); ++i) \
22  dx[i] = REL_PERTURBATION * x[i]; \
23  const Real df_da_fd = (f(a + da, b, x) - f(a - da, b, x)) / (2 * da); \
24  const Real df_db_fd = (f(a, b + db, x) - f(a, b - db, x)) / (2 * db); \
25  std::vector<Real> df_dx_fd(x.size()); \
26  for (unsigned int i = 0; i < x.size(); ++i) \
27  { \
28  std::vector<Real> x_forward(x); \
29  x_forward[i] += dx[i]; \
30  std::vector<Real> x_backward(x); \
31  x_backward[i] -= dx[i]; \
32  df_dx_fd[i] = (f(a, b, x_forward) - f(a, b, x_backward)) / (2 * dx[i]); \
33  } \
34  Real f_value, df_da, df_db; \
35  std::vector<Real> df_dx(x.size()); \
36  f(a, b, x, f_value, df_da, df_db, df_dx); \
37  REL_ABS_TEST(f(a, b, x), f_value, REL_TOL_CONSISTENCY, abs_tol); \
38  REL_ABS_TEST(df_da, df_da_fd, rel_tol, abs_tol); \
39  REL_ABS_TEST(df_db, df_db_fd, rel_tol, abs_tol); \
40  for (unsigned int i = 0; i < x.size(); ++i) \
41  REL_ABS_TEST(df_dx[i], df_dx_fd[i], rel_tol, abs_tol); \
42  }