19 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters)
21 if ((geometry_dimension != 2) && (geometry_dimension != 3))
24 "The OrthotropicEmbeddedFracturePermeability is implemented only "
25 "for 2D or 3D problems");
30 "OrthotropicEmbeddedFracturePermeability");
36 DBUG(
"Create OrthotropicEmbeddedFracturePermeability medium property");
44 "The size of the mean fracture distances vector must be 3, but is "
55 "The size of the mean threshold strains vector must be 3, but is "
66 "The size of the fracture normals vector must be 6, but is {}.",
69 Eigen::Vector3d
const n1 = Eigen::Vector3d({n[0], n[1], n[2]}).normalized();
70 Eigen::Vector3d
const n2 = Eigen::Vector3d({n[3], n[4], n[5]}).normalized();
72 if (n1.dot(n2) > std::numeric_limits<double>::epsilon())
75 "The given fracture normals are not orthogonal. Please provide two "
76 "orthogonal fracture normals");
79 Eigen::Matrix3d
const n_i =
80 (Eigen::Matrix3d() << n1, n2, n1.cross(n2)).finished();
82 std::string
const intrinsic_permeability_param_name =
86 auto const& k = ParameterLib::findParameter<double>(
87 intrinsic_permeability_param_name, parameters, 0,
nullptr);
89 std::string
const fracture_rotation_xy_param_name =
93 auto const& phi_xy = ParameterLib::findParameter<double>(
94 fracture_rotation_xy_param_name, parameters, 0,
nullptr);
96 std::string
const fracture_rotation_yz_param_name =
100 auto const& phi_yz = ParameterLib::findParameter<double>(
101 fracture_rotation_yz_param_name, parameters, 0,
nullptr);
103 if (geometry_dimension == 2)
105 return std::make_unique<OrthotropicEmbeddedFracturePermeability<2>>(
106 std::move(property_name), a_i, e_i0, n_i, k, phi_xy, phi_yz);
108 return std::make_unique<OrthotropicEmbeddedFracturePermeability<3>>(
109 std::move(property_name), a_i, e_i0, n_i, k, phi_xy, phi_yz);
void DBUG(char const *fmt, Args const &... args)
T peekConfigParameter(std::string const ¶m) const
void checkConfigParameter(std::string const ¶m, T const &value) const
T getConfigParameter(std::string const ¶m) const
std::unique_ptr< Property > createOrthotropicEmbeddedFracturePermeability(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters)