SERBA
Boundary Element Method for Elasticity
SERBA
is a FORTRAN77 program which
applies the boundary element
method to solve the elasticify equation in a 2D region,
by Federico Paris and Jose Canas.
The program uses linear continuous elements, and any kind of
combination of boundary conditions in stresses and displacements
can be considered.
Input File Format:
The input to the program involves a file containing seven sets of data:

The title line (a character string)

The parameter line, listing NP, NPI and NANU:

NP is the number of elements used to discretize the boundary;
This is also the number of boundary points.
This value must be positive.

NPI is the number of internal points where the displacement
and stress will be computed; NPI can be zero if no information
about interior points is desired.

IANUL is the number of components of displacements that are
going to be fixed, regardless of the boundary conditions. This number
should only be nonzero in cases where the specified boundary conditions
do not eliminate a rigid body motion;

Elastic properties are specified on one line:

NTIP is 0 for plane strain, or else 1 for plane stress;

E is the value of Young's modulus;

POIS is the value of Poisson's ratio;

DM is the maximum (spatial) dimension of the problem to be solved;
It is used for scaling.

The coordinates of internal points; For each of the NPI internal
points, there must be a record specifying XINT(I) and YINT(I):

XINT(I) is the X coordinate of the Ith internal point;

YINT(I) is the Y coordinate of the Ith internal point;

The coordinates of boundary points; The boundary points are indexed from 1 to
NP+1, and are assumed to be given in counterclockwise order;
Logically, the boundary point information is given consecutively;
however, if one or more points are omitted, their values will be determined
by linear interpolation from the preceding and succeeding values that are
given. Thus, the very least input would specify points 1 and NP+1;
the fullest information would specify all NP+1 points. Most input
would omit points that are interior to an equally spaced line.

I, the index of the boundary point.

X(I) is the X coordinate of the Ith boundary point;

Y(I) is the Y coordinate of the Ith boundary point;

The boundary conditions, specifying the boundary node index, the boundary
code, and the values of the potential, and the "before" and "after" fluxes
at the node. A typical boundary condition will only specify the potential
or the flux; the values not specified can be given as 0. A boundary condition
must be given for every boundary node. Logically, the boundary nodes are
input in order; however boundary nodes may be omitted, in which case
the data will be linearly interpolated; however, the preceding and succeeding
boundary conditions must have the same value of NCOD for this to be done.

I, the index of the boundary point.

I1, the code for boundary condition 1.

V1 the value for boundary condition 1 (displacement or stress
component)

I2, the code for boundary condition 2.

V2 the value for boundary condition 2 (displacement or stress
component)

I3, the code for boundary condition 3.

V3 the value for boundary condition 3 (displacement or stress
component)

I4, the code for boundary condition 4.

V4 the value for boundary condition 4 (displacement or stress
component)

Support conditions on one line, if IANUL is nonzero. In this case,
the positions of the displacements to be fixed must be given. Supposing
the number of nodes is NP, then the horizontal displacement of
node I is fixed by specifying I, while the vertical displacement is
fixed by specifying I+NP.

NANU(1) is I to fix the horizontal displacement at node I,
or I+NP to fix the vertical displacement at node I.

... intermediate values;

NANU(IANUL) is I to fix the horizontal displacement at node I,
or I+NP to fix the vertical displacement at node I.
The boundary condition codes are required to indicate which of 8 possible
items are being specified.
Displacements and stress components are given in local coordinates, based
on the normal to the boundary, and the anticlockwise tangent vector. There
are eight possible variables at a node, with only four of them being known.
The paramters I1, I2, I3 and I4, which must be given in ascending order,
take values between 1 and 8, identifying the boundary condition. The
meanings of the eight possible codes for boundary conditions are:

normal displacement of the node corresponding to the element before the node.

tangential displacement at the node corresponding to the element before the node.

normal displacement of the node corresponding to the element after the node.

tangential displacement at the node corresponding to the element after the node.

normal stress component of the node corresponding to the element before the node.

tangential stress component of the node corresponding to the element before the node.

normal stress component of the node corresponding to the element after the node.

tangential stress component of the node corresponding to the element after the node.
Usage:
serba
The user will be prompted for

namedat, the name of the input file;

namesal, the name of the output file; (note that the program
will terminate if there is already a file named namesal).
The program will not overwrite an output file, so it is the user's
responsibility to delete an old, unwanted file of the same name.

igauss, the number of points to use in the Gauss quadrature rule.
a value of 4 is often sufficient. This value must be between 1 and 50.
Languages:
SERBA is available in
a FORTRAN77 version.
Related Data and Programs:
BETIS,
a FORTRAN77 program which
solves Laplace's problem in a 2D region using the boundary element method.
FEM_50,
a MATLAB program which
solves Laplace's equation in an arbitrary region using the finite element method.
FEM2D_POISSON,
a FORTRAN90 program which
solves Poisson's equation in an arbitrary triangulated region
using the finite element method.
FEM2D_POISSON_RECTANGLE,
a FORTRAN77 program which
solves Poisson's equation in a 2D rectangle using the finite element method.
FISHPACK,
a FORTRAN77 library which
solves Poisson, Laplace or Helmholtz equations
in a variety of 2D and 3D geometries, using the finite difference method.
Author:
Federico Paris and Jose Canas,
Department of Elasticity and Strength of Materials,
Industrial Engineering School,
University of Seville, Spain.
Reference:

Federico Paris, Jose Canas,
Boundary Element Method: Fundamentals and Applications,
Oxford, 1997,
ISBN: 0198565437,
LC: TA347.B69.P34.
Source Code:
Examples and Tests:
Example 1 models a square plate in traction, using stress conditions:
Example 2 models a square plate in traction, using displacement conditions:
Example 3 models a square plate in traction, using symmetry:
List of Routines:

MAIN is the main program for the SERBA boundary element code.

SERB1 reads input, generates geometry and boundary conditions.

SERB2 builds and solves the system of equations.

SERB3 calculates and prints the displacements and stresses.

NUMER numerical calculates integration constants of the fundamental equation.

ANA analytically calculates integration constants of the fundamental equation.

CALA relates principal stresses to stress vectors in local coordinates.

PIYAY calculates certain integration constants along boundary elements.

PIVO applies Gauss elimination to solve the linear system.

GAUSS_QN determines a Gauss quadrature rule.

COEFIC sets the coefficients of a polynomial needed for the Gauss rule.

EVALUA evaluates the polynomial defining the Gauss rule.

ROOTS seeks roots of the polynomial defining the Gauss rule.
You can go up one level to
the FORTRAN77 source codes.
Last revised on 17 December 2007.