Surface Pressure Constraint

General description

The “SurfacePressureConstraint” component simulates a constant pressure on a surface.

Methods description

Requirement: Constraint resolution method

Definition: Pressure is the amount of force acting per unit of area:

P = F / S

where P is the pressure, F is the normal force and S is the area of surface where the force is applied

Method

We want Jλ to be homogeneous to a force:

J = p × S

For each element e of the surface, we compute the normal and the area of the element nand Se. We split the product n× Se to each point of the element by dividing it by nbp(the number of points in the element). Considering an uniform pressure, J will then be as follows:

J = (∑{e | p1 point of e} n× S/ nbpe  … ∑{e | pi point of e} n× S/ nbp… ∑{e | pn point of e} n× S/ nbpeT

Thus, each point receives the contributions of each element it is part of. λ then represents the intensity of the pressure.

Copie de accordion

Example of a pneumatic actuation on an accordion model: (left) Accordion at rest. (middle) Accordion when inflated. (right) Method of pressure distribution on the cavity wall vertices.

How to use the component

To learn how to create a SOFA scene, please refer to the tutorial provided by the SOFA Modeler or this documentation.

To simulate a pressure in a cavity of a three dimensional model, you will need two meshes. The surface of the cavity (in red in the bunny example) and the three dimensional mesh you want to deform with pressure.

#bunny
 bunny = rootNode.createChild('bunny')
(...)

#bunny/cavity
cavity = bunny.createChild('cavity')
cavity.createObject('MeshObjLoader', name='loader', filename=path+'cavity.obj')
cavity.createObject('Mesh', src='@loader', name='topo')
cavity.createObject('MechanicalObject', name='cavity')
cavity.createObject('SurfacePressureConstraint', triangles='@topo.triangles', value='40')
cavity.createObject('BarycentricMapping', name='mapping', mapForces='false', mapMasses='false')

An example is provided in the “examples” directory of the plugin.

 

Data field

Here are described the data fields corresponding to this particular component.

Input data

triangles/quads : List of triangles/quads on which the pressure is applied. If no list is given (i.e no triangles and no quads), the component will fill the two lists with the context topology.

value : Input values corresponding to the actuations imposed by the constraint

valueIndex : Index of the value (in value vector) that we want to impose. If unspecified, the default value is {0}

valueType : pressure or volumeGrowth. In the first case, the constraint will impose the pressure provided in data value[valueIndex]. In the second case, the constraint will impose the volume growth provided in data value[valueIndex].

Output data

intialCavityVolume : Volume of the cavity at initialization. Only consistent if the mesh is closed.

cavityVolume : Volume of the cavity at the end of the time step. Only consistent if the mesh is closed.

Comments are closed.