Xfem
The Xfem Plugin
Plugin options

Plugin object types

The XFEM plugin publishes two objects type depending on the nature of the problem (Mechanical or Hydromechanical) and so references to the plugin name while creating a physics object don't need to include a type name.

objects type Mechanical problems hydromechanical problems
PlaneStrain Yes No
HydroMechanic No Yes

State variables

The XFEM plugin requires the model to contain the following state variables for mechanical or hydromechanical problems:

State variables Mechanical problems hydromechanical problems
u Yes Yes
a Yes Yes
P No Yes
Pa No Yes
Pf No Yes

Example:

StateVar{id = 'u', description = 'Displacements in the X and Y directions', unit = 'm'}
StateVar{id = 'a', description = 'Enriched displacement in the X and Y directions', unit = 'm'}
StateVar{id = 'P', description = 'Pore pressure degree-of-freedom', unit = 'kPa'}
StateVar{id = 'Pa',description = 'Enriched pore pressure degree-of-freedom', unit = 'kPa'}
StateVar{id = 'Pf',description = 'Fracture pressure degree-of-freedom', unit = 'kPa'}

Material types

The XFEM plugin uses the concept of a metrial type since it features multiple constitutive laws. The Mechanical and Hydromechanical material behavior are fully described by the material properties below.

Material properties

The following material properties are supported (required) by the XFEM plugin:

Property Description Type Def. Unit Mechanical problems hydromechanical problems
E Elasticity modulus Scalar kPa Yes Yes
nu Poisson ratio Scalar Yes Yes
K Hydraulic permeability (1) Scalar or matrix m/s No Yes
gw Specific weight of water Scalar kN/m3 No Yes
Pht Porosity Scalar No Yes
SPMax Maximum principal stress Scalar kPa Yes Yes
Gap Initial gap opening Scalar m Yes Yes
Ufw Dynamic fluid viscosity Scalar kPa*s No Yes
Lkt Leakoff at top Scalar m/(kPa*s) No Yes
Lkb Leakoff at bottom Scalar m/(kPa*s) No Yes
elastic Mechanical XFEM material type String Yes No
poroElastic Hydromechanical XFEM material type String No Yes

(1) The hydraulic conductivity tensor is a 'dxd' matrix, where 'd' is either 2 or 3 depending on the model dimension. It can be replaced by a vector or a scalar instead. If a vector with size 'd' is given, the tensor matrix is formed with the vector values in its diagonal, with other elements set to 0. For a scalar value, the matrix will be isotropic with the given value at the diagonal.

Material properties are normally read from a property set. If a property is not found at the mesh property sets, it will also be searched in the mesh list of cell attributes. This second option is handy if one wants to create individual materials for each cell (working with a stochastic distribution for a material property, for example).

If, for any reason, the model contains compatible material properties with names other than the expected values above, a renaming table can be included in the set of physics attributes to perform the required name translations.

Example:

PropertySet
{
id = 'MatProp',
typeName = 'GemaPropertySet',
description = 'Material properties',
properties = {
{id = 'E', description = 'Elasticity modulus', unit = 'kPa'},
{id = 'nu', description = 'Poisson ratio', unit = ''},
{id = 'K', description = 'Hydraulic permeability', unit = 'm/s'},
{id = 'gw', description = 'Specific weight of water', unit = 'kN/m3'},
{id = 'Pht', description = 'Porosity', unit = ''},
{id = 'SPMax', description = 'Maximum principal stress', unit = 'kPa'},
{id = 'Gap', description = 'Initial gap opening', unit = 'm'},
{id = 'Ufw', description = 'Dynamic fluid viscosity', unit = 'kPa*s'},
{id = 'Lkt', description = 'Leakoff at top', unit = 'm/(kPa*s)'},
{id = 'Lkb', description = 'Leakoff at bottom', unit = 'm/(kPa*s)'},
{id = 'material', description = 'Mechanical XFEM material type', constMap = constants.Xfem.materialModels},
},
values = {
{E = 14.4e+6, nu = 0.2, K = 9.8e-7, gw = 9.81, Pht = 0.2, SPMax= 1e3,
Gap = 0.002, Ufw = 1e-6, Lkt = 1e-19, Lkb = 1e-19, material = 'poroElastic'},
}
}

Physics attributes

When defining a XFEM plugin Physics object, the following fields are available for usage during the definition:

Attribute Description Type Required Def. Value
id The physics name. String Yes -
Example: id = 'myPhysicsName'
typeName Physics plugin name. Should be equal to 'Xfem.HydroMechanic'. String Yes -
Required value: typeName = 'Xfem.HydroMechanic'
type Type of physics object. Should be equal to 'fem'. String Yes -
Required value: type= 'fem'
ruleSet Integration rule set selected for simulation elements. String No Empty
Example: ruleSet = 1
mesh The mesh name. String Yes -
Example: mesh = 'myMeshName'
boundaryConditions Table filled with the names of the boundary conditions associated with this physics. String table Yes -
Example: boundaryConditions = {'myBc1', 'myBc2', 'myBc3'}

Like other Fem physics, stateVar, property and attribute renaming fields are supported. Likewise, restricting the physics application domain to a set of cell groups, setting the desired integration rule and unit system remapping are also available. Those common optional fields are detailed at the gemaFemProcessCommonFemPhysicsOptions page.

Example for mechanical problems:

PhysicalMethod {
id = 'XfemMechanic',
typeName = 'Xfem.PlaneStrain',
type = 'fem',
mesh = 'mesh',
ruleSet = 1,
boundaryConditions = {'bc2'},
materials = {'elastic'},
}

Example for hydromechanical problems:

PhysicalMethod {
id = 'HMCoupledXfem',
typeName = 'Xfem.HydroMechanic',
type = 'fem',
mesh = 'mesh',
ruleSet = 1,
boundaryConditions = {'bc1','bc2','bc4','bc5','bc6'},
materials = {'poroElastic'},
}

Boundary conditions

The XFEM plugin physics supports both Dirichlet and Neumann conditions. The injection process is applied to the model by defining a fluid flow rate as a boudary condition. Injection Flow Rate definition m3/s, negative signal means that flow is entering into the model

Example:

BoundaryCondition {
id = 'bc5',
type = 'node fracture flow',
mesh = 'mesh',
properties = {
{id = 'qfw', description = 'concentrated fracture flow'},
},
nodeValues = {
-- {node, qw }
{1 , -0.0001}, -- this node will be changed to a crack node in solution file : ProcessScript()
}
}

Here this condition is defined in a standard mesh node (model file), then in the solution file is changed to the crack mouth node or injection point. This is done because initially no crack nodes are defined in the mesh, they only appear after the preprocessing (crack geometrical treatment) when crack nodes are added to the mesh

Example:

local bc = modelData:boundaryCondition('bc5') -- Just defininig a parameter name bc to used it below to define the injection point in a ghost(crack) node
bc:setNode(1, setMeshGhostFlag(2)) -- Changing node 1 in bc5 (model file) by the Second ghost node of each crack to inject fluid

Solver Options

The XFEM plugin has several options used to solve the equation system for mechanical or hydromechanical problems.

Solver type Mechanical problems hydromechanical problems
static linear Yes No
transient nonlinear No Yes

The static linear solver has some strategies for incrementalization and iterations in order to facilitate convergence.

Increment strategies ID
load_control_increment 0
cylindrical_arc_length_increment 1
spherical_arc_length_increment 2
external_work_increment 3
displacement_control_increment 4
dissipated_energy_increment 5
combined_arc_dissipated_energy_increment 6
Iteration strategies ID
load_control 0
linear_arc_length 1
cylindrical_arc_length 2
spherical_arc_length 3
minimal_norm 4
orthogonal_residue 5
displacement_control 6
dissipated_energy 7
combined_arc_dissipated_energy 8

The static linear solver has two options for the Newton-Raphson method.

Newton Raphson Mode ID
Modified 0
Full 1

Example for mechanical problems:

solverOptions = {
type = 'static linear',
tolerance = {mechanic = 1e-5}, --Tolerance for convergence
stepsMax = 1, -- Total step of analysis
loadPredictorIncrement = 1, -- Load increment for each step
loadMaxIncrement = 1, -- Maximum step increment
loadMax = 4, -- Maximum Load of analysis
minDissipatedEnergy = 5.0e-5, -- Minimum magnitude of dissipated energy (only when Dissipated Energy strategy is used)
initialEnergyIncrement = 0.00005, -- Initial Energy Increment (only when Dissipated Energy strategy is used)
incrementsStrategy = 4, -- ID of the Increment strategy to be used
iterationsStrategy = 5, -- ID of the Iteration strategy to be used
newtonRaphsonMode = 0, -- ID of the Newton-Raphson mode
attemptsMax = 20, -- Maximum number of attempts
loadAdjustStep = 0, -- Maximum limit value to adjust the step load
convergenceCriterion = 1 -- convergence by Load =0 or by displacement =1
}

Example for hydromechanical problems:

solverOptions = {
type = 'transient nonlinear', -- Type of solver to be used
timeMax = 200, -- Total time of analysis
timeInitIncrement = 1, -- Initial time increment
timeMinIncrement = 1, -- Minimum time increment
timeMaxIncrement = 5.0, -- Maximum time increment
iterationsMax = 5000, -- Maximum number of iterations
eulerTheta = 1.0, -- Solver parameter
tolerance = {mechanic = 1e-4, hydraulic = 1e-4} -- tolerances for convergence criteria
}

XFEM Options

The XFEM plugin has some specific options to treat fracture propagation.

Example:

xfemOptions={
propagationCriteria = 'MaxPS', -- Maximum principal stress criterium for crack propagation
evaluationZone = 'nonLocalQuad', --create a quadrilateral region at the crack tip to compute the average maximum principal stress of the gauss points which are inside this region
weightFunction = 'uniform', -- every gauss point inside the quadrilateral region used for MaxPS has the same weight value eventhough a point is nearer than other to the crack tip
geometricTol = 1e-6, -- Geometric tolerance to determine which gauss points are considered for Maximum principal stress calculation
geoStatic = 0, -- zero when no geoStatic step is performed
}

Derived results

Besides calculating Displacement and porepressure values, the XFEM plugin can also recover stress and strain values on Gauss points. Additionaly, fracture pressures are calculated on fracture nodes.

If, for any reason, the model contains compatible node and/or Gauss attributes with names other than 'q', a renaming table can be included in the set of physics attributes to perform the required name translations.

Supported elements

The XFEM plugin supports 2D elements. Supported elements are:

  • quad4
  • tri3

Unit system

E = 'kPa'

nu = –

K = 'm/s'

gw = 'kN/m3'

Pht = –

SPMax = 'kPa'

Gap = 'm'

Ufw = 'kPa*s'

Lkt = 'm/(kPa*s)'

Lkb = 'm/(kPa*s)'