14 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters)
16 if ((geometry_dimension != 2) && (geometry_dimension != 3))
19 "The OrthotropicEmbeddedFracturePermeability is implemented only "
20 "for 2D or 3D problems");
25 "OrthotropicEmbeddedFracturePermeability");
31 DBUG(
"Create OrthotropicEmbeddedFracturePermeability medium property");
39 "The size of the mean fracture distances vector must be 3, but is "
50 "The size of the mean threshold strains vector must be 3, but is "
61 "The size of the fracture normals vector must be 6, but is {}.",
64 Eigen::Vector3d
const n1 = Eigen::Vector3d({n[0], n[1], n[2]}).normalized();
65 Eigen::Vector3d
const n2 = Eigen::Vector3d({n[3], n[4], n[5]}).normalized();
67 if (n1.dot(n2) > std::numeric_limits<double>::epsilon())
70 "The given fracture normals are not orthogonal. Please provide two "
71 "orthogonal fracture normals");
74 Eigen::Matrix3d
const n_i =
75 (Eigen::Matrix3d() << n1, n2, n1.cross(n2)).finished();
77 std::string
const intrinsic_permeability_param_name =
82 intrinsic_permeability_param_name, parameters, 0,
nullptr);
84 std::string
const fracture_rotation_xy_param_name =
89 fracture_rotation_xy_param_name, parameters, 0,
nullptr);
91 std::string
const fracture_rotation_yz_param_name =
96 fracture_rotation_yz_param_name, parameters, 0,
nullptr);
102 if (geometry_dimension == 2)
104 return std::make_unique<OrthotropicEmbeddedFracturePermeability<2>>(
105 std::move(property_name), a_i, e_i0, n_i, k, phi_xy, phi_yz, jf);
107 return std::make_unique<OrthotropicEmbeddedFracturePermeability<3>>(
108 std::move(property_name), a_i, e_i0, n_i, k, phi_xy, phi_yz, jf);
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const ¶meter_name, std::vector< std::unique_ptr< ParameterBase > > const ¶meters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)