porepy.numerics.fracture_deformation.contact_conditions module
For details on the conditions discretized herein, see
Berge et al., 2019: Finite volume discretization for poroelastic media with fractures modeled by contact mechanics.
When solving contact problems, the sought fracture displacement (jumps) are defined relative to an initial state. For transient problems, this initial state is the solution at the previous time step. The state should be available in
d[pp.STATE][self.mortar_displacement_variable],
and may usually be set to zero for stationary problems. The ColoumbContact discretization operates on relative tangential jumps and absolute normal jumps. See also contact_mechanics_interface_laws.py.
Signs of displacement jumps are reversed compared to Berge due to the PorePy definition of the jump as [[ var ]] = var_k - var_j, which implies that positive normal jumps correspond to fracture opening. Note that the fracture normal is in agreement with Berge, i.e. it equals the outwards normal on the j side.
Option added to the Berge model: Include a simple relationship between the gap and tangential displacements, i.e.
g = g_0 + tan(dilation_angle) * || u_t ||,
with g_0 indicating initial gap distance. This only affects the normal relations when fractures are in contact. The relation [u_n^{k+1}] = g of eqs. 30 and 31 becomes
u_n^{k+1} - Dg^k dot u_t^{k+1} = g^k - Dg dot u_t^{k},
with Dg = dg/du_t. For the above g, we have Dg = tan(dilation_angle) * u_t / || u_t ||. For the case u_t = 0, we extend the Jacobian to 0, i.e.
dg/du_t(|| u_t || = 0) = 0.
- class ColoumbContact(keyword, ambient_dimension, discr_h)[source]
Bases:
AbstractInterfaceLaw
- assemble_matrix_rhs(sd_primary, sd_secondary, intf, data_primary, data_secondary, data_intf, matrix)[source]
- discretize(sd_primary, sd_secondary, intf, data_primary, data_secondary, data_edge)[source]
Discretize the contact conditions using a semi-smooth Newton approach.
The function relates the contact forces, represented on the lower-dimensional grid, to the jump in displacement between the two adjacent mortar grids. The function provides a (linearized) disrcetizaiton of the contact conditions, as described in Berge et al.
The discertization is stated in the coordinate system defined by the projection operator associated with the surface. The contact forces should be interpreted as tangential and normal to this plane.
- Parameters in data_secondary:
“friction_coefficient”: float or np.ndarray (sd_secondary.num_cells). A float
- is interpreted as a homogenous coefficient for all cells of the fracture.
“c_num”: float. Numerical parameter, defaults to 100. The sensitivity
is currently unknown.
- Optional parameters: float or np.ndarray (sd_secondary.num_cells), all default to 0:
“initial_gap”: The gap (minimum normal opening) in the undeformed state. “dilation_angle”: Angle for dilation relation, see above. “cohesion”: Threshold value for tangential traction.
Notes
Quantities stated in the global coordinate system (e.g.
displacements on the adjacent mortar grids) must be projected to the local system, using the same projection operator, when paired with the produced discretization (that is, in the global assembly).
Assumptions and other noteworthy aspects: TODO: Rewrite this when the implementation is ready.
The contact surface is planar, so that all cells on the surface can
be described by a single normal vector. * The contact forces are represented directly in the local coordinate system of the surface. The first self.dim - 1 elements of the contact vector are the tangential components of the first cell, then the normal component, then tangential of the second cell etc.
- class ContactTraction(keyword, ambient_dimension, discr_h)[source]
Bases:
AbstractInterfaceLaw
Discretization class for obtaining contact traction from contact force.
Contact force is the primary variable used in the Model classes. However, it is beneficial to also use the secondary variable traction. The traction is scaled with the inverse of a characteristic elastic modulus for stable comparison with displacement jumps in the contact equations.
- assemble_matrix_rhs(sd_primary, sd_secondary, intf, data_primary, data_secondary, data_interface, matrix)[source]
Abstract method required by base class.
Todo
Decide if the abstract method should be removed as part of our migration to AD
Parameters
- sd_primarypp.Grid
Higher-dimensional grid.
- sd_secondarypp.Grid
Lower-dimensional grid.
- data_primarydict
Data dictionary corresponding to sd_primary.
- data_secondarydict
Data dictionary corresponding to sd_secondary.
- data_interfacedict
Data dictionary corresponding to the interface.
- matrixTYPE
Discretization matrix.
Raises
- NotImplementedError
The class is not intended for use without the ad framework.
Returns
None.
- discretize(sd_primary, sd_secondary, intf, data_primary, data_secondary, data_interface)[source]
Discretize the conversion from contact force to contact traction.
The diagonal discretization matrix is stored in the self.keyword discretization matrix dictionary under the name self.traction_scaling_matrix_key
Parameters
- sd_primarypp.Grid
Grid of the matrix subdomain.
- sd_secondarypp.Grid
Grid of the fracture subdomain.
- data_primarydict
Data dictionary of the matrix subdomain.
- data_secondarydict
Data dictionary of the fracture subdomain.
- data_interfacedict
Data dictionary of the matrix-fracture interface.
Returns
- None
DESCRIPTION.
- set_projections(mdg, interfaces=None)[source]
Define a local coordinate system, and projection matrices, for all grids of co-dimension 1.
The function adds one item to the data dictionary of all MixedDimensionalGrid edges that neighbors a co-dimension 1 grid, defined as:
- key: tangential_normal_projection, value: pp.TangentialNormalProjection
provides projection to the surface of the lower-dimensional grid
Note that grids of co-dimension 2 and higher are ignored in this construction, as we do not plan to do contact mechanics on these objects.
It is assumed that the surface is planar.
- Parameters
mdg (MixedDimensionalGrid) –
interfaces (Optional[list[porepy.grids.mortar_grid.MortarGrid]]) –
- Return type
None