OGS
FractureProperty.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <Eigen/Eigen>
14 #include <memory>
15 
16 #include "BranchProperty.h"
17 #include "JunctionProperty.h"
21 
22 namespace ParameterLib
23 {
24 template <typename T>
25 struct Parameter;
26 }
27 
28 namespace ProcessLib
29 {
30 namespace LIE
31 {
33 {
34  int fracture_id = 0;
35  int mat_id = 0;
36  Eigen::Vector3d point_on_fracture;
37  Eigen::Vector3d normal_vector;
39  Eigen::MatrixXd R;
42  std::vector<BranchProperty> branches_master;
43  std::vector<BranchProperty> branches_slave;
44 
45  FractureProperty(int const fracture_id_, int const material_id,
46  ParameterLib::Parameter<double> const& initial_aperture)
47  : fracture_id(fracture_id_),
48  mat_id(material_id),
49  aperture0(initial_aperture)
50  {
51  }
52 
53  virtual ~FractureProperty() = default;
54 };
55 
57 {
58  FracturePropertyHM(int const fracture_id_, int const material_id,
59  ParameterLib::Parameter<double> const& initial_aperture,
60  ParameterLib::Parameter<double> const& specific_storage_,
61  ParameterLib::Parameter<double> const& biot_coefficient_)
62  : FractureProperty(fracture_id_, material_id, initial_aperture),
63  specific_storage(specific_storage_),
64  biot_coefficient(biot_coefficient_)
65  {
66  }
69 
70  std::unique_ptr<MaterialLib::Fracture::Permeability::Permeability>
72 };
73 
76 inline void setFractureProperty(int const dim, MeshLib::Element const& e,
77  FractureProperty& frac_prop)
78 {
79  auto& n = frac_prop.normal_vector;
80  // 1st node is used but using other node is also possible, because
81  // a fracture is not curving
82  for (int j = 0; j < 3; j++)
83  {
84  frac_prop.point_on_fracture[j] = getCenterOfGravity(e).getCoords()[j];
85  }
86 
87  const MeshLib::ElementCoordinatesMappingLocal ele_local_coord(e, dim);
88 
89  // Global to local rotation matrix:
90  Eigen::MatrixXd const global2local_rotation =
91  ele_local_coord.getRotationMatrixToGlobal().transpose();
92  n = global2local_rotation.row(dim - 1);
93 
94  frac_prop.R = global2local_rotation.topLeftCorner(dim, dim);
95 
96  DBUG("Normal vector of the fracture element {:d}: [{:g}, {:g}, {:g}]",
97  e.getID(), n[0], n[1], n[2]);
98 }
99 
101  FractureProperty const& master_frac,
102  FractureProperty const& slave_frac)
103 {
104  BranchProperty branch{branchNode, master_frac.fracture_id,
105  slave_frac.fracture_id};
106 
107  // set a normal vector from the master to the slave fracture
108  Eigen::Vector3d branch_vector =
109  slave_frac.point_on_fracture - branch.coords;
110  double sign = (branch_vector.dot(master_frac.normal_vector) < 0) ? -1 : 1;
111  branch.normal_vector_branch = sign * master_frac.normal_vector;
112  return branch;
113 }
114 } // namespace LIE
115 } // namespace ProcessLib
Definition of the Element class.
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27
const T * getCoords() const
Definition: TemplatePoint.h:75
const RotationMatrix & getRotationMatrixToGlobal() const
return a rotation matrix converting to global coordinates
virtual std::size_t getID() const final
Returns the ID of the element.
Definition: Element.h:82
MeshLib::Node getCenterOfGravity(Element const &element)
Calculates the center of gravity for the mesh element.
Definition: Element.cpp:126
void setFractureProperty(int const dim, MeshLib::Element const &e, FractureProperty &frac_prop)
BranchProperty createBranchProperty(MeshLib::Node const &branchNode, FractureProperty const &master_frac, FractureProperty const &slave_frac)
ParameterLib::Parameter< double > const & biot_coefficient
std::unique_ptr< MaterialLib::Fracture::Permeability::Permeability > permeability_model
FracturePropertyHM(int const fracture_id_, int const material_id, ParameterLib::Parameter< double > const &initial_aperture, ParameterLib::Parameter< double > const &specific_storage_, ParameterLib::Parameter< double > const &biot_coefficient_)
ParameterLib::Parameter< double > const & specific_storage
virtual ~FractureProperty()=default
ParameterLib::Parameter< double > const & aperture0
Initial aperture.
std::vector< BranchProperty > branches_slave
FractureProperty(int const fracture_id_, int const material_id, ParameterLib::Parameter< double > const &initial_aperture)
Eigen::MatrixXd R
Rotation matrix from global to local coordinates.
std::vector< BranchProperty > branches_master