B2000++ Applications

This chapter describes how to launch executable programs and scripts. All programs and scripts must be launched from a shell, such as the bash shell.

Solver Applications

Application

Description

b2000++

Executes the B2000++ solver.

b2ip++

Executes the B2000++ input processor solver.

b2add6dof

Add 6th DOF to MITC shell element nodes.

b2add_ssc_elements

Creates shell-to-solid coupling elements (SSC) and adds them to the B2000++ model database.

b2mass

Computes volume, mass, and center of gravity (cog) of model.

Data Format Converters

Application

Description

b2convert_from_nas

Converts a subset of Nastran® bulk data deck (BDF) commands to a MDL input file.

Utilities

Application

Description

b2mcbrowser

MemCom data set browser.

b2testrunner

Execute B2000++ tests.

b2browser

B2000++ FE model browser.

b2rmdb

Delete B2000++ FE model database(s).

Solvers

b2000++

b2000++ launches the B2000++ solver. If NAME is a B2000++ model database, b2000++ launches the solver. If NAME is a MDL text file, b2000++ launches the input processor b2ip++ followed by the solver.

Synopsis

b2000++ [OPTIONS] NAME

Options

NAME

MDL input file name or B2000++ model database name. If NAME is a B2000++ model database with the extension .b2m, b2000++ launches the solver without processing the input file. If NAME is a MDL text file with the extension .mdl, b2000++ launches the input processor b2ip++ followed by the solver. Note that the solver will delete an existing B2000++ database if NAME is a MDL text file with extension .mdl.

Options

-adir <key>=<value>

Adds or override an analysis directive by assigning a value to a key.

-define <var>=<value>

Sets the MDL variable <var> to <value>. This option can be specified multiple times. It overrides default values defined in the MDL file if the assignment operator ?= has been applied in the MDL file.

-h | -help

Prints short help message and stops.

-l <log>

Prints the execution log events.

-max-cpu

Limits the maximum allowed CPU time, in seconds (float). When time limit has been reached, the program aborts. By default, no limit on the CPU time is imposed.

-max-mem

Limits the maximum allowed size of allocated virtual memory, counted in MB (int). When the allocated memory has reached or exceeded this limit, the program aborts. By default, no limit on the virtual memory size is imposed.

-version

Prints the version number and stops.

Options (Debugging)

-backtrace

Writes the stack back-trace to the console (standard error) if an unexpected termination occurs (C++-exception not handled or signal to terminate the process). This option must be the first in the argument list.

-fexp

Enables traps of the floating-point exceptions FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW. These traps will trigger a C++ exception.

-gdb

Starts b2000++ in the gdb debugger and stops at the start of the main function. This option must be the first in the argument list.

-list-loggers

Prints the list of all encountered log names to the console at the end of the program’s execution. Note that this list is problem-dependent, i.e. it depends on what elements, materials, solvers, constraints, etc. are invoked.

-list-types

Prints the list of all registered C++ objects (solvers, elements, boundary conditions, etc.) and stops.

-nocatch

Do not catch any C++ program exception nor any signal in the main function.

-valgrind <options>

Starts b2000++ with valgrind (if installed). This option must be the first in the argument list. If options are specified they comma-split into multiple valgrind options. Example:

valgrind,--db-attach=yes

passes the option --db-attach=yes to valgrind.

Event Logging

By default, b2000++ stores only a small number of event messages, these are written to the file DBNAME/log.txt. Example: Typing

 $ b2000++ demo.mdl

produces the log file demo.b2m/log.txt:

INFO:all:16:54:12.886: Start
INFO:solver.linearised_prebuckling:16:54:12.887: Start the linearised prebuckling solver for the case 1.
INFO:domain:16:54:12.887: Total number of DOfs: 105.
INFO:solver.linearised_prebuckling:16:54:12.887: Assemble the linear problem.
INFO:solver.linearised_prebuckling:16:54:12.888: Element matrix assembly
INFO:solver.linearised_prebuckling:16:54:12.888: Resolve the linear problem
INFO:solver.linearised_prebuckling:16:54:12.889: Compute gradients and reaction forces
INFO:solver.linearised_prebuckling:16:54:12.890: Assemble the stability matrix.
INFO:solver.linearised_prebuckling:16:54:12.891: Eigenvalue problem resolution
INFO:solver.linearised_prebuckling:16:54:12.894: End of linearised prebuckling solver
INFO:all:16:54:12.894: End of execution

Event logging is controlled with the command-line option -l. The most common use is to display the progress of an analysis to the terminal, which is the same as what is written to the log file by default.

The Syntax of the -l option is:

-l "<LEVEL> [of <NAME> [in <DESTINATIONS>]]"

The quote characters can be omitted if only <LEVEL> is specified. A level of importance is associated to each log message:

critical | error | warning | info | data | debug

<LEVEL> is, in increasing order, debug, data, info, warning, error, critical.

If the level is set to info, all messages of importance info plus all messages of higher importance (warning, error, and critical) are logged. All other messages are suppressed.

In addition to the level of importance, to each message, a comma-separated list of names (strings) is associated. The most important logger names are:

all

All logging events (default).

elements

Logging events created by element objects.

linear_algebra

Logging events created by sparse-matrix (linear algebra) solvers. In conjunction with the debug` level, this will print an extensive report including the time spent for the matrix factorization and an error analysis on the linearized system of equations.

solver Logging events created by (linear and nonlinear) Finite-Element solvers.

The comma-separated list DESTINATIONS indicates where the log message is output. The most common is cout (default), meaning that color-highlighted log messages will be printed to the terminal.

err

The standard shell error output stream with color highlighting.

cout

The standard output stream with color highlighting (default).

out

The standard output stream without color highlighting.

file

The text file DBNAME/log.txt.

db

The MemCom database DBNAME/log.mc. Can only be used in conjunction with data. Useful for debugging purposes.

raise

Raises a C++-Exceptio when a log message is generated. Useful for debugging purposes.

Examples

Print all messages from the sparse matrix solver and from the analysis solver to the terminal. The content of the log messages depends on the type of sparse matrix solver but typically includes the condition number of the global stiffness matrix, the number of floating-point operations and the time that was needed for factorization.

b2000++ -l 'debug of linear_algebra' demo.mdl

Print all element-specific messages of level data or higher of all names starting with elements to the terminal:

b2000++ -l 'data of elements' demo.mdl

Specify multiple logging directives that write element-specific and solver-specific data log messages to the logging database. The logging database demo.b2m/log.mc contains the per-element stiffness matrices, the global stiffness matrix, and other data.

b2000++ -l 'data of elements,solver in db' demo.mdl

Defining MDL Variables on the Command-line

Parametric MDL files can be steered from the command-line by means of the -define command-line option. It sets the variable to the specified value. This can be used to set variables that are not set in the MDL file, or that are set with the operator ?=. The values that can be assigned to MDL variables with the -define command-line option are restricted to constants of the following types:

  • A string.

  • The bool values true and false.

  • An integer number.

  • A floating-point number.

The following specifies a different element type eltype and a finer mesh (mr) for the demo.mdl example:

b2000++ -define eltype="T3.S.MITC" -define mr=4 demo.mdl

Note that the quote characters around the string value T3.S.MITC could be omitted since it contains neither spaces nor any other special characters such as \* or ? that would be expanded by the shell.

Command-line Analysis Directives

One or several analysis directives can be specified on the command line; they override what was specified in the MDL file.

Example: Compute the free-vibration modes instead of the buckling modes initially specified in the case 1 block of the MDL imput file:

b2000++ -adir case1.analysis=free_vibration demo.mdl

The syntax is as follows: The -adir option is followed by a string of the form [case*x*.]*key*=value* where case*x* specifies the analysis case, i.e. case1 indicates the analysis case 1. If the case is omitted, the settings in the adir section will be overridden instead. key is a string and value is one of the following:

  • A string. For example -adir case1.analysis=linear will insert for the analysis case 1 the MDL command analysis linear.

  • An integer number.

  • A floating-point number.

  • An array of integer numbers, enclosed by quotes ".

  • An array of floating-point numbers.

Solver Error Messages

B2000++ prints error messages as a string

ERROR:category:hh:mm:ss.ms: Error message

Some common error messages related to inconsistencies in the MDL file which are not detected by the input processor, but which are detected by the b2000++ solver instead are listed below:

  • Incompatible essential boundary condition

    Incompatible essential boundary condition for set EBC.*.0.0.x entry ???,
    expected value is y but given value is z
    

    Multiple essential boundary conditions have been defined at specific DOF’s of specific nodes. Check the definition of essential boundary conditions of mdl.ebc set x and their possible interference with the MDL join and linc commands.

  • DBError: The number of DOF’s of node is less than…:

    DBError: The number of DOF's of node is less than the DOF number
    specified in the database (has node a type?).  Dataset: ...
    

    A boundary condition has been applied to a node which is not connected, i.e. it has not been assigned to an element.

b2ip++

b2ip++ launches the B2000++ input processor. b2ip++, reads a MDL file (a text file with the extension .mdl) and transforms it to a new B2000++ database (a binary file with the extension .b2m). b2ip++ deletes an existing B2000++ database NAME.

Note

Since the b2000++ solver can execute b2ip++, an explicit invocation of the b2ip++ program by the user is in general not necessary; however it may be useful if the generated model should be examined before carrying out the analysis.

Synopsis

b2ip++ [OPTIONS] NAME

Options

NAME

B2000++ input file name. Note that b2ip++ deletes an existing model database with the same name but with the extension .b2m.

Options

-define <var>=<name>

Pass MDL variables to the application. <var>=<name>` sets the MDL variable <var> to <value>. This option can be specified multiple times. In conjunction with the conditional MDL assignment operator ?=, default values can be set in the MDL file that can be overridden with the -define option on the command-line.

-h

Prints short help message and stops.

-iponly

Do not execute any additional programs required by the b2000++ solver, such as the program which adds 6 degrees-of-freedom nodes for MITC shell elements or the shell-to-solid coupling program. -iponly is used in situations where the additional programs are being executed explicitly after the b2ip++ program.

-version

Prints the version number and stops.

-backtrace

Writes the stack back-trace to the console (standard error) if an unexpected termination occurs (C++-exception not handled or signal to terminate the process). This option must be the first in the argument list.

-valgrind

Starts b2000++ with valgrind (if installed). This option must be the first in the argument list. If VALGRIND_OPTION is present, it is comma-split into multiple valgrind options. Example:

valgrind,--db-attach=yes

passes the option --db-attach=yes to the program valgrind.

b2mass

b2mass launches the B2000++ mass processor, which computes the volume, the mass, and the center of gravity (cog).

Synopsis

b2mass [OPTIONS] DBNAME

Options

DBNAME

Name of the B2000++ model database. DBNAME must contain the suffix .b2m.

Options

-h

Print command summary and stops.

-verbose

Prints computed masses.

-version

Prints the version number and stops.

Additional Information

The numerical integration of the quantities involves structural and non-structural mass element integration rules and considering laminate stacking sequences and beam cross-sectional properties. The quantities are calculated for all elements (total), as well as for any combinations of element sets and element lists defined in the model.

All quantities are saved to the database DBNAME in the dataset MASS_AND_COG. By default, no output is printed to the terminal.

Note

b2mass is not required for running b2000++, because b2000++ computes all relevant mass information internally. b2mass is only required if the user wants to check generated masses and volumes (this is done with the b2mcbrowser database browser or with the b2browser model browser.

b2add_6dof

b2add_6dof modifies node types of nodes connected to MITC shell elements such that certain nodes become 6 DOF nodes by adding the drill rotation DOF. One of the criteria for modifying the node types is the intersection angle between MITC shell elements. Other criteria are related to essential boundary conditions and to linear constraint equations.

b2add_6dof is automatically launched by the b2ip++ input processor if MITC 5/6 DOF shell elements are present in the model.

Synopsis

b2add_6dof [OPTIONS] DBNAME

Options

DBNAME

Name of the B2000++ model database. DBNAME must contain the suffix “.b2m”.

Options

-h

Print command summary and stops (-help is a synonym).

-noexec

Do not execute modifications. Used together with -verbose to get the list of modifications.

-shell-intersection-angle <angle>

Angle in degrees for detecting 6 DOF nodes (float). If elements attached to a node under an angle greater than <angle> the node becomes a 6 DOF node.

-verbose

Prints computed masses.

-version

Prints the version number and stops.

b2add_ssc_elements

b2add_ssc_elements creates shell-to-solid coupling elements (SSC) and adds them to the B2000++ model database DBNAME. Alternatively, the MDL element definitions generated by b2add_ssc_elements can be printed.

This program is automatically executed by b2ip++ if the add_ssc directive is set in adir.

Synopsis

b2add_ssc_elements [OPTIONS] DBNAME

Options

DBNAME

Name of the B2000++ model database. DBNAME must contain the suffix .b2m.

Options

-h

Print command summary and stops.

-mdl

Write the generated MDL language elements to the console. The database is not modified.

-only-tf

Create .TF elements everywhere. Default is to create .TF elements at nodes which are not coincident with the shell reference surface.

-start-eid BRANCH.EID

Start numbering SSC elements for branch BRANCH (int) with the identifier EID (int).

-tolerance <tol>

Tolerance for the matching criterion (float). Default is 1e-3.

-verbose

Prints computed masses.

-weight <w>

Defines the penalty weight (float). Default is 1e8. Only used for non-MITC elements.

-without-tf

Do not create any .TF elements. Default is to create .TF elements.

Data Converters

This chapter describes all available data converters. All programs must be launched from a shell, such as the bash shell.

b2convert_from_nas

b2convert_from_nas converts a subset of Nastran® bulk data deck (BDF) entries and converts it to a MDL input file. Any unknown entry is listed as a comment at the top of the MDL file. Any other problems encountered during the conversion process will also be reported in the form of comments at the top of the MDL file.

Note

b2convert_from_nas is not supported by SMR and may be used AS IS.

Synopsis

b2convert_from_nas [OPTIONS] <bdfname> <mdlname>

Options

<bdfname>

Nastran® bulk data deck file to be read by b2convert_from_nas.

<mdlname>
MDL input file name of input file to be generated. If

<mdlname> already exists, it will be overwritten.

Options

-bdf-units UNITS

Specifies the unit system of the BDF file. UNITS is one of lb-in (pound force inch), SI (SI units), mm-t-s (millimeters tons seconds). This option is not recommended!

-h

Print command summary and stops.

-mdl-units UNITS

Specifies the unit system of the MDL file. UNITS is one of lb-in (pound-force inch), SI (SI units), mm-t-s (millimeters tons seconds). The scaling factors for the different quantities are determined automatically. This option is not recommended!

-permute

Specifies permutation for the x-, y-, and z-axes (see Axes Permutation below).

-scale-force

Scale forces of BDF data (e.g. BDF FORCE1 and FORCE2 cards).

-scale-length

Scale lengths of BDF data (and derived quantities such as areas, volumes, and area moments).

-scale-mass

Scale BDF masses.

-scale-modulus

Scale BDF elastic and shear moduli.

-scale-moment

Scale BDF moments/torques.

-scale-density

Scale BDF densities.

-stabilize-beam-properties

Stabilization factor for beam cross-section properties with zero area moments, torsion moments, etc., to avoid singularities. Default is 1e-6.

-no-shear-panels

Replace CSHEAR/PSHEAR Nastran elements by B2000++ CSHELL/PSHELL elements.

-ignore-wtmas

Do not take into account the WTMASS parameter if specified in the BDF file.

-verbose

Prints scaling factors and other information.

-version

Prints the version number and stops.

The command -permute=[ABC] specifies permutation for the x-, y-, and z-axes. A indicates which direction is mapped onto the x-axis. B indicates which direction is mapped onto the y-axis. C indicates which direction is mapped onto the z-axis. A lowercase characters indicates a negative direction, while an uppercase character indicates a positive direction. A, B, and C take the values

X|x|Y|y|Z|z

A lowercase character indicates a negative direction, while an uppercase character indicates a positive direction.

Thus, -permute=XYZ means no permutation. To swap y- and z-axes, specify -permute=XZY. To rotate around the x-axis by -90 degrees, specify -permute=XZY.

Utility Programs

This chapter describes utility programs and scripts of the B2000++ package. All programs and scripts must be launched from a shell, such as the bash shell.

b2mcbrowser

b2mcbrowser is a GUI based application for inspecting the B2000++ model database with the mcbrowser. It opens the MemCom database associated to the B2000++ model database DBNAME and displays a list with all datasets. By clicking on a dataset name the dataset is displayed in a separate window. Datasets cannot be modified with b2mcbrowser. To modify the database, run Python with the module pymemcom.

Synopsis

b2mcbrowser DBNAME

Options

DBNAME

Name of the B2000++ model database. DBNAME must contain the suffix “.b2m”.

b2testrunner

The b2testrunner application runs through all or selected unit test cases, see B2000++ examples and verification unit test cases.

Synopsis

b2testrunner [OPTIONS] DIRECTORY

Options

DIRECTORY

Path to the top-level directory containing the tests to be executed. All test cases found in this directory and in its sub-directories will be run (if the -n option is not used).

Options

-f

Includes tests that are known to fail. Default: Run only tests that are not marked as known-to-fail.

-h

Displays this message and stops.

-j <np>

Runs jobs test cases in parallel. The number of processes <np> (int) should be less or equal to the number of CPU cores.

-l <level>

Test cases are marked according to the size of the problem. the l option will execute test cases up to the specified size <level>. <level> takes the values small, medium, big, all. By default, all test cases are executes. Setting <level> to small will run the most basic tests, but not the more time-consuming test cases. Thus, this option is useful for quick testing during development.

-n <name>

Runs only those test cases where the name of the test function matches the string <name>.

-t <resultdir> By default, b2testrunner creates a

temporary tracing directory for each test case in the current directory which is removed after the execution of the test. If -t is specified, the directory <resultdir> is created and will contain a copy of the test case directory hierarchy, which includes the MDL files involved in the test, the B2000++ databases, the logs, etc.

-v <level>

Sets the level of verbosity <level> (int). Default is 2.

Additional Information

b2testrunner prints the name and and short description of each test case, together with the test result (OK, FAIL, and ERROR). ERROR means that the test could not be terminated successfully, while FAIL means that execution was successful, but the computed values were found to be incorrect. After all tests have been executed, the b2testrunner program prints a summary of all test cases that did not succeed, except those marked as known to fail in their respective __init__.py files.

b2testrunner creates several temporary directories in the directories from where it is launched. Although these directories are removed b2testrunner has terminated, some files may hang around if b2testrunner had crashed for some reason. It is therefore advisable to copy the complete <prefix>/share/b2000pp_data tree to a directory of your choice, such as /tmp, and to run it from there.

Example run

Execute all test cases contained in directory $B2EXAMPLES. Run tests from directory /tmp:

cd /tmp
b2testrunner  -j 16 $B2EXAMPLES

examples/dynamic/simple_beam.py: ... ok
...
examples/buckling/panel_3stringers.py:  ... ok

Ran 25 tests in 11.154s

OK

The amount of information printed by the b2testrunner program can be large. In the following example, the output is written to both the terminal and the file out.txt, which can be inspected with an editor (note that the redirection syntax is proper to sh and bash shells):

cd /tmp
b2testrunner  -j 16 $B2EXAMPLES 2>&1 | tee out.txt

See also

B2000++ Programming: System Tests

b2rmdb

Removes one or more B2000++ model databases and all related directories. b2rmdb will only remove directories with the suffix .b2m and which are valid B2000++ model databases. If DBNAME is omitted, all databases in the current working directory are removed.

usage: b2rmdb.py [-h] [-f] [-r] [-v] DBNAME [DBNAME ...]

Positional Arguments

DBNAME

Name(s) of database(s) to be removed. Names must contain suffix .b2m

Named Arguments

-f

Remove without prompting for permission and without messages. If the model database does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

Default: False

-r, -R

Remove databases recursively in the file hierarchy rooted in each file argument. Any other files anddirectories are left intact.

Default: False

-v

Verbose mode

Default: False

Examples

Remove the B2000++ model database demo.b2m:

b2rmdb demo.b2m

remove demo.b2m? y

Remove the B2000++ model database demo.b2m without prompting for confirmation:

b2rmdb -f demo.b2m

Remove all B2000++ model databases in the current directory:

b2rmdb *

remove demo1.b2m? y
remove demo2.b2m? y

Remove all B2000++ model databases in the directory examples, but leave files and other sub-directories intact:

b2rmdb -r examples

remove examples/solid_mechanics/plate_buckling/buckling.b2m? y
remove examples/solid_mechanics/scordelis_lo_roof/scordelis_lo_roof.b2m? y
remove examples/solid_mechanics/cable_stayed_bridge_vibrations/zaltbommel.b2m? y
remove examples/solid_mechanics/soil_freezing/soil.b2m? y
remove examples/solid_mechanics/cook_membrane/cook_membrane.b2m? y
remove examples/solid_mechanics/euler_beam_buckling/beam.b2m? y
remove examples/solid_mechanics/simple_beam_dynamic/beam.b2m? y
remove examples/solid_mechanics/strip_with_circular_hole/he20.b2m? y
remove examples/solid_mechanics/composite_panel_buckling/shell.b2m? y
remove examples/solid_mechanics/composite_panel_buckling/solid.b2m? y

Remove all B2000++ model databases in the directory examples without prompting for confirmation:

 b2rmdb -rf examples