3D Contact Tutorial

This tutorial gives a short introduction to the setup of a simple 3D contact problem. The goal of this tutorial is to give an overview of the general workflow in 4C and to show how to create a working input file. It is neither intended to be an introduction to the theory of contact mechanics, nor demonstrate all possible optional settings for a given (contact) problem.

Overview

  1. Problem description

  2. Create files

    1. Define Geometry

    2. Define Boundary Conditions

    3. Specify Simulation Settings

  3. Run Simulation in 4C, Post-processing and visualization in Paraview

Problem description

In this tutorial we create two cubes with sizes 1x1x1 and 0.5x0.5x0.5, with a time dependent Dirichlet boundary condition ( DBC) imposed on the right outer surface of the smaller cube. As a result, the smaller cube is pressed horizontally against the larger counterpart, which is clamped on the left outer surface. Mortar methodology is applied for the discretization of the contact constraints and the subdomains are coupled with dual Lagrange multipliers. The cubes are assumed to consist of two different materials, represented by a St.Venant-Kirchhoff material model with different values of the Young’s modulus and density for each cube.

Create files

To create valid input for 4C we need two files:

  • .exo/.e file containing the geometry and mesh

  • .4C.yaml file containing all relevant parameters for the simulation

Define Geometry

Information on the geometry and mesh are passed on to 4C as part of a binary EXODUS file (.e). This file can be generated using the pre-processing software Cubit. Before we can export an .exo file from Cubit (File -> Export -> Files of type: .e), we need to specify the geometry and meshing parameters in Cubit. This can be done using the GUI or read from a journal file (.jou) containing the specific Cubit commands. A tutorial on how to use the Cubit GUI can be found on the coreform webpage and can be useful to get to know some of the basic functionalities. The syntax of a Cubit command to a corresponding Input using the GUI can be seen in the Cubit terminal.

Remark: After learning the syntax of the basic Cubit commands, it may be more convenient to exclusively use journal files for an easy adaptation and reproduction of your geometry and/or use in e.g. python scripts for parameter studies etc.

In tutorial_contact_3d.jou it can be seen, that apart from the basic geometry definition and meshing, nodesets and element blocks are assigned to the corresponding nodes/lines/surfaces/volumes. The nodesets are used later on to assign the boundary conditions, whereas the element blocks are used to assign material properties. Additionally, the last line in the given journal file includes a terminal command to export the .exo/.e file from cubit.

The journal file can be called in Cubit from the Terminal with the command

/path/to/cubit/executable -nographics /path/to/tutorial_contact_3d.jou

This saves an EXODUS file in the current work directory. We refer to this file in our main input file in the section STRUCTURE GEOMETRY as follows:

STRUCTURE GEOMETRY:
  FILE: tutorial_contact_3d.e
  ELEMENT_BLOCKS:
  - ID: 1
    ELEMENT_NAME: SOLID
    ELEMENT_DATA: MAT 1 KINEM nonlinear
  - ID: 2
    ELEMENT_NAME: SOLID
    ELEMENT_DATA: MAT 2 KINEM nonlinear

We assign two different materials to the two cubes, which are defined in the MATERIALS section of the input file as follows:

MATERIALS:
- MAT: 1
  MAT_Struct_StVenantKirchhoff:
    YOUNG: 100
    NUE: 0.3
    DENS: 0.5
- MAT: 2
  MAT_Struct_StVenantKirchhoff:
    YOUNG: 4000
    NUE: 0.3
    DENS: 1

Define Boundary Conditions

For the boundary conditions, we defined nodesets for the clamped surface of the large cube and the displacement controlled surface of the small cube in the mesh file. The Dirichlet boundary conditions are defined as follows:

DESIGN SURF DIRICH CONDITIONS:
- E: 3
  ENTITY_TYPE: node_set_id
  NUMDOF: 3
  ONOFF:
  - 1
  - 1
  - 1
  VAL:
  - 0
  - 0
  - 0
  FUNCT:
  - null
  - null
  - null
- E: 4
  ENTITY_TYPE: node_set_id
  NUMDOF: 3
  ONOFF:
  - 1
  - 0
  - 0
  VAL:
  - -1.0
  - 0.0
  - 0.0
  FUNCT:
  - 1
  - null
  - null

Node set 3 contains the nodes on the clamped surface of the large cube, and is fixed in all three directions. Node set 4 contains the nodes on the displacement controlled surface of the small cube, and is subject to a time-dependent Dirichlet boundary condition. The time-dependent behavior is controlled by

FUNCT1:
- COMPONENT: 0
  SYMBOLIC_FUNCTION_OF_SPACE_TIME: a
- VARIABLE: 0
  NAME: a
  TYPE: linearinterpolation
  NUMPOINTS: 3
  TIMES:
  - 0
  - 0.1
  - 2
  VALUES:
  - 0
  - 0.02
  - 0.02

The master and slave surfaces for the definition of the contact mortar problem can be specified as:

DESIGN SURF MORTAR CONTACT CONDITIONS 3D:
- E: 1
  ENTITY_TYPE: node_set_id
  InterfaceID: 1
  Side: Slave
- E: 2
  ENTITY_TYPE: node_set_id
  InterfaceID: 1
  Side: Master

Here, one of the interface sides is defined as master and the other as slave surface.

Remark: It is common practice to choose the side with the finer discretization as the slave side.

Specify Simulation Settings

Since we solve a structural dynamics problem, we need to choose the correct problem type,

PROBLEM TYPE:
  PROBLEMTYPE: Structure

and set parameters in the corresponding section:

STRUCTURAL DYNAMIC:
  INT_STRATEGY: Standard
  TIMESTEP: 0.02
  NUMSTEP: 2
  MAXTIME: 0.04
  DYNAMICTYPE: GenAlpha
  RESULTSEVERY: 1
  DAMPING: Rayleigh
  M_DAMP: 1e-05
  K_DAMP: 1e-05
  TOLDISP: 1e-08
  LINEAR_SOLVER: 1

The time integration method DYNAMICTYPE (Generalized alpha method), time step size TIMESTEP and final time MAXTIME are specified for structural dynamics. An important parameter is RESULTSEVERY, which specifies how often output is written and thus directly controls the size of the output file.

The contact specific parameters are here

MORTAR COUPLING:
  ALGORITHM: Mortar
  LM_SHAPEFCN: Dual
  SEARCH_ALGORITHM: BinaryTree

Dual Lagrange multipliers are chosen for the coupling of the interface. Either the BruteForceEleBased algorithm, or the more efficient BinaryTree can be chosen as the contact search algorithm.

Run Simulation

Again, following the instructions from the README.md, the 4C executable can be invoked with the tutorial_contact_3d.4C.yaml input file