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

Parameters
  • keyword (str) –

  • ambient_dimension (int) –

assemble_matrix_rhs(sd_primary, sd_secondary, intf, data_primary, data_secondary, data_intf, matrix)[source]
Parameters
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.

Parameters
Return type

None

ndof(g)[source]
Return type

int

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.

Parameters
  • keyword (str) –

  • ambient_dimension (int) –

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.

Parameters
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.

Parameters
Return type

None

ndof(sd)[source]
Return type

int

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
Return type

None