Skip to content

Add SSPTethraUP single-point tetrahedral u-p element and integration script - #207

Open
gcavpoliba wants to merge 5 commits into
OpenSees:masterfrom
gcavpoliba:master
Open

gcavpoliba wants to merge 5 commits into
OpenSees:masterfrom
gcavpoliba:master

Conversation

@gcavpoliba

@gcavpoliba gcavpoliba commented Oct 18, 2026 •

Copy link
Copy Markdown

Ok, I did some check and some changes. In the following I add a brief description and send a pull request for the documentation.

Add SSPTethraUP single-point tetrahedral u-p element and integration script

Summary

This PR adds SSPTethraUP, a four-node single-point tetrahedral element with a displacement-pressure formulation for three-dimensional dynamic analysis of saturated porous media.

The element is derived from the existing OpenSees SSPbrickUP element. It follows the same stabilized single-point finite element approach and the generalized Biot displacement-pressure formulation used in the SSP element family.

Main changes introduced

1. Copy element source files

The script copies:

  • SSPTethraUP.h
  • SSPTethraUP.cpp

into:

SRC/element/UWelements/

2. Add the element class tag

The script adds the new element class tag in:

SRC/classTags.h

The insertion is done dynamically:

  • if the tag already exists, the script does nothing;
  • otherwise, the script selects a new unused element tag number;
  • the tag is inserted near existing related element tags when possible;
  • fallback insertion points are used if the preferred anchors are not found.

3. Register the element command in the OpenSees interpreter

The script updates:

SRC/interpreter/OpenSeesElementCommands.cpp

It adds:

  • the declaration of the SSPTethraUP command;
  • the registration of the SSPTethraUP command in the element command map.

This allows OpenSees to recognize:

element SSPTethraUP ...

4. Add the Tcl dispatcher

The script updates:

SRC/element/TclElementCommands.cpp

It adds:

  • the external declaration of the SSPTethraUP command;
  • the Tcl dispatch branch for the string SSPTethraUP.

The new branch is inserted after the existing SSPbrickUP branch.


5. Update the object broker

The script updates:

SRC/actor/objectBroker/FEM_ObjectBrokerAllClasses.cpp

It adds:

  • the include for SSPTethraUP.h;
  • the case required to create a new SSPTethraUP object during object brokering.

This is needed for parallel execution, database recovery, and object reconstruction.

If available, the script also updates the runtime broker:

SRC/runtime/runtime/TclPackageClassBroker.cpp

6. Add recorder support

The script adds support for the new tetrahedral element in selected OpenSees recorders.

For VTK-related recorders, if present, it maps the element to a VTK tetrahedron type.

For GmshRecorder.cpp, if present, it maps the element to a Gmsh tetrahedron type.

For MPCORecorder.cpp, it adds the new element tag to the existing condition used for tetrahedral elements.


7. Update the build system

The script updates the build files required to compile the new element.

It updates:

SRC/element/UWelements/CMakeLists.txt

by adding:

  • SSPTethraUP.cpp
  • SSPTethraUP.h

If legacy Makefiles are present, it also updates:

SRC/Makefile
SRC/element/UWelements/Makefile


8. Script behavior

The script is designed to be robust and idempotent:

  • already applied patches are not duplicated;
  • optional patches are skipped if the target files are not present;
  • mandatory missing patches are reported as errors;
  • optional backup files can be created;
  • the OpenSees root directory can be specified from the command line.

High-level description of the SSPTethraUP implementation

SSPTethraUP is a four-node tetrahedral finite element for three-dimensional analysis of saturated porous media.

Each node has four degrees of freedom:

  • three displacement degrees of freedom for the solid skeleton;
  • one pressure degree of freedom for the pore fluid.

The element therefore has sixteen total degrees of freedom.

The element uses a single integration point at the centroid. For a linear four-node tetrahedron, the strain field is constant over the element, and the one-point integration rule is exact.

Because the linear tetrahedron does not have hourglass modes, the additional stabilization stiffness used in the eight-node SSPbrickUP hexahedron is not required. However, the pressure stabilization technique used in the SSP displacement-pressure element family is retained.

The implementation includes:

  • element geometry initialization;
  • computation of the strain-displacement matrix;
  • solid stiffness matrix;
  • solid mass matrix;
  • permeability matrix;
  • pressure stabilization matrix;
  • fluid-solid coupling terms;
  • resisting force computation;
  • inertia force computation;
  • Rayleigh damping support;
  • element state commit and revert operations;
  • serialization support;
  • display and print support;
  • recorders for stress, strain, mass, and pore pressure;
  • permeability parameter updates.

As in the other SSP displacement-pressure elements, the physical pore pressure is associated with the velocity of the fourth degree of freedom. Therefore, pore pressure output should generally be recorded using velocity output for the fourth degree of freedom.

Technique and references

The element is based on a stabilized single-point displacement-pressure finite element technique for saturated porous media.

The formulation follows the generalized Biot displacement-pressure approach. The implementation is derived from the SSPbrickUP element developed by McGann, Arduino, and Mackenzie-Helnwein.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant