21 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters)
23 if ((geometry_dimension != 2) && (geometry_dimension != 3))
26 "The OrthotropicEmbeddedFracturePermeability is implemented only "
27 "for 2D or 3D problems");
32 "OrthotropicEmbeddedFracturePermeability");
38 DBUG(
"Create OrthotropicEmbeddedFracturePermeability medium property");
46 "The size of the mean fracture distances vector must be 3, but is "
57 "The size of the mean threshold strains vector must be 3, but is "
68 "The size of the fracture normals vector must be 6, but is {}.",
71 Eigen::Vector3d
const n1 = Eigen::Vector3d({n[0], n[1], n[2]}).normalized();
72 Eigen::Vector3d
const n2 = Eigen::Vector3d({n[3], n[4], n[5]}).normalized();
74 if (n1.dot(n2) > std::numeric_limits<double>::epsilon())
77 "The given fracture normals are not orthogonal. Please provide two "
78 "orthogonal fracture normals");
81 Eigen::Matrix3d
const n_i =
82 (Eigen::Matrix3d() << n1, n2, n1.cross(n2)).finished();
84 std::string
const intrinsic_permeability_param_name =
89 intrinsic_permeability_param_name, parameters, 0,
nullptr);
91 std::string
const fracture_rotation_xy_param_name =
96 fracture_rotation_xy_param_name, parameters, 0,
nullptr);
98 std::string
const fracture_rotation_yz_param_name =
103 fracture_rotation_yz_param_name, parameters, 0,
nullptr);
109 if (geometry_dimension == 2)
111 return std::make_unique<OrthotropicEmbeddedFracturePermeability<2>>(
112 std::move(property_name), a_i, e_i0, n_i, k, phi_xy, phi_yz, jf);
114 return std::make_unique<OrthotropicEmbeddedFracturePermeability<3>>(
115 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)