To illustrate working with B2000++, two typical problems arising in structural mechanics are presented here, a linear static problem and a buckling problem. More example cases are described in the B2000++ Examples Documentation .
The ScordelisLo roof is a classical test case for linear static analysis named after the authors who first reported it.^{[2]}The test has been proposed as a standard FE test by MacNeal and Harder^{[3]} and it can be found in the NAFEMS test case description. Note that the original units have been converted to SI units.
The structure consist of a concrete cylindrical shell roof supported by rigid diaphragms on both curved sides (see figure below), and it is loaded by a surface traction of 90 per unit area in the negative ydirection. The length of the cylinder is 50, the radius of the cylinder 25, the half opening angle 40°, and the thickness 0.25. The material properties are isotropic, with the elastic modulus of 4.32e9 and the Poisson number set to 0.
The diaphragms are defined such that a simply supported boundary condition results: Displacements in x and ydirections are suppressed, the suppression of displacements in the zdirection being assumed by the symmetry condition along P_{4}  P_{1}.
The test compares the linear static solution, specifically the displacement in the ydirection of point P_{4}, against known solutions (the reference solution for point P_{4} is 0.3024).
The solution of this problem with B2000++ consist of the following steps:

Create the finite element model with the MDL language describing the problem in a text file.

Solve the problem by submitting the text file to the B2000++ solver. The solver creates a B2000++ database.

Examine the results by reading the B2000++ database.
A finite element model for B2000++ is created by describing the problem geometry, creating a finite element mesh, adding boundary conditions, and adding solver instructions. The complete model can be formulated with the B2000++ Model Description Language (MDL). Alternatively, parts of the model, such as the mesh and the boundary conditions, can be produced with an external program and brought in the B2000++ input file.
The ScordelisLo roof problem can easily be produced with the B2000++ Model Description Language. The necessary steps will now be explained. All steps result in instructions added with an editor to a single B2000++ input file.
Geometry and mesh: The cylinder geometry
and the mesh produced by the geometry can be described with an
epatch (element patch). Element patches allow for
generating simple building blocks, such as plates, cylinders,
etc. The ScordelisLo cylindrical roof is described by an
epatch of type cylinder
, which
implies the creation of a surface and a surface mesh:
epatch 1 geometry cylinder phi1 50.0 # Opening angle of half cylinder phi2 90.0 # Closing angle of half cylinder radius 25.0 # Radius of cylinder length 25 # Half length of cylinder eltype Q9.S.MITC # Element type ne1 4 ne2 4 # N. of elements along sides thickness 0.25 # Thickness of shell mid 1 # Reference to material end
Note that the epatch must contain the
element type (eltype
keyword), the number of
elements to be generated along each side of the patch
(ne1
and ne2
keywords), and
material reference (mid
keyword). The element
type also determines the element shape (Q9
) and
the type of analysis performed (S
), i.e. a
deformation analysis. The definition of the
epatch
is further illustrated in the figure
below, with the position of the vertices P1 to P4 and the edges E1
to E4.
Boundary conditions: Since all boundary
conditions apply either to edges of the epatch
or
to the epatch
surface they can be generated for
all nodes of an edge by referring to the epatch
edges which in their turn are automatically generated. Essential
boundary conditions (here: displacement constraints) are defined
with the ebc
command:
ebc 1 value 0 # Values to be assigned to DOF's # Diaphragm dof [UX UY] epatch 1 e1 # Supported edge along line P1 to P2 # Symmetry conditions dof [UX RY RZ] epatch 1 e2 # Symmetry along line P2 to P3 dof [UZ RX RY] epatch 1 e3 # Symmetry along line P3 to P4 end
The figure below shows the essential boundary conditions as defined above: At each node of the edges a pattern XXXXX is plotted, where the position of X in the pattern designates the the degree of freedom (DOF) to be affected and X taking the values F (free, i.e. unconstrained), L (locked, i.e. constrained to 0), or V (constrained to a value).
The surface pressure loads are applied with the natural
boundary condition command nbc
. Note that the
reference frame for the surface tractions is the branch reference
frame and thus has to be specified explicitly with the system
option, because the default reference frame is the local reference
frame relative to the element surface.
nbc 1 type surface_tractions system branch # Branch referential (default is local!) surface_tractions 0 90 0 epatch 1 f7 # Midsurface of shell! end
What remains now to be specified in the input are the definition of the case, comprising the type of analysis and the boundary condition sets to be applied to the case, and the analysis directives, i.e. the cases to be solved for:
case 1 analysis linear nbc 1 ebc 1 end adir case 1 end
The analysis is run with the shell command:
$
b2000++ scordelis_lo_roof.mdl
which generates the B2000++ database scordelis_lo_roof.b2m. Specifying the log option to the b2000++ command prints a short summary of the steps which the solver performs:
$
b2000++ l info scordelis_lo_roof.mdl
INFO:all:13:57:24.656: Start INFO:solver.static_linear:13:57:24.658: Start static linear solver INFO:domain:13:57:24.658: Total number of DOfs: 422. INFO:solver.static_linear:13:57:24.659: Element matrix assembly INFO:solver.static_linear:13:57:24.660: Resolve the linear problem INFO:solver.static_linear:13:57:24.664: Compute gradients and reaction forces INFO:solver.static_linear:13:57:24.664: End of static linear solver INFO:all:13:57:24.664: End of execution
Results can be examined with several B2000++ tools, such as
the baspl++ postprocessor, the
simples tools, the
b2print text output tools, or the
b2browser data browser. We start with
the baspl++ viewer to get an image of
deformed shape of the structure. The figure below is obtained by
launching baspl++ from the shell with the
viewer script view.py
$
baspl++ t plot_displacements.py
and shows the deformed structure (coloured) and the initial
undeformed one (black dashed grid). Please read the file
view.py
.
$
baspl++ t plot_stresses.py
plots the per element maximum von Mises comparison stress:
$
baspl++ t plot_stresses_sampling.py
plots the von Mises comparison stress at each intgration (sampling) point in the form of spheres, where color and shphere size are proportional to the intensity: