User elements can be defined using the dummy element files in the user sub-directory. These elements can then be coupled with a material group in the input file using the keyword 'user' followed by the element number chosen.

The example here is a 2-D implementation of the Lysmer-Kuhlmeyer damper (1967).
The boundary condition is written as traction condition on the transmitting
boundary in the form traction + M v = 0, where (traction) is the boundary
traction vector, v is the velocity vector, and M is a 2x2 matrix with entries
M = rho*vp n x n + rho*vs * (iden - n x n), where n is the outward unit normal,
rho is the material density, vp is the P-wave speed, and vs is the S-wave speed.
We will implement the boundary condition as user element number 40.

The main steps in creating the user element are

- Edit the file elmt40.f to read boundary condition parameters parameters. You will need to store them in the 'd' array. In our case we will ask for rho*vp, rho*cs, and a flag to indicate if the problem is axis-symmetric. This is for isw=1.
- Edit the file elmt40.f for isw=6 and isw=3 to compute the boundary residual and the tangent (if the problem is being solved implicitly).

The element can be found here. For example input files: explicit bar example, implicit bar example, explicit axis-symmetric example.