Introduction
The B2000++ system makes use of the MemCom data manager system, which has been specially devised for managing FE data.
A B2000++ database is a collection of files and directories stored
under a common file directory with the file name suffix
.b2m
. B2000++ creates at least the following files under the
model directory:
Name |
Type |
Description |
|
Directory |
The MemCom model database contains all data describing the model. |
|
Directory |
Logging (debug) database created when the command-line |
|
File |
B2000++ execution log text file. The amount of information
depends on the command-line |
|
File |
Text file containing meta-information. |
The MemCom model database contains a collection of MemCom datasets accessed by name. The datasets give a complete description of a FE problem. While any dataset explicitly describes a detail of the FE model, the relation between the datasets is implicit, i.e. knowledge of the relations among the datasets and the hierarchy of the datasets is needed. Example: The dataset COOR.<br> consists of an array containing a contiguous array of the x-, y-, and z-coordinates of the mesh nodes. COOR.<br> enters in relation with many other datasets, such as ETAB.<br>, the element descriptions. Evidently, ETAB.<br> would not store the coordinates for all element mesh nodes, but it would contain the indices pointing to the respective coordinates of COOR.<br>.
The Chapter Example Database explains the most important of these relations.
B2000++ Datasets
Datasets are arrays or tables of one or more dimensions containing typed data. The first dimension of a dataset is referred to as the row, and the second dimension the column or sub-division. There are two categories of datasets:
Locical or ‘positional’ arrays: They contain data of a single data type, which can be accessed by position. Examples: Arrays of floats, integers.
Composite or ‘non-positional’ data: They contain data in the form of dictionaries. Examples: MemCom relational tables, array tables, sparse tables.
Relational tables in the context of the MemCom data manager are collections of pairs Key - Values. Relational tables are accessed by name (or key). Thus, the position of the key within a table is irrelevant. The MemCom API offers functions for accessing relational tables and their content. Values are arrays containing a single numerical or character data type. Note that the number of elements in the array is limited by the table size. Being very convenient, the drawback of relational tables is that accessing data is very slow compared to positional tables, and the table size is limited.
All datasets contain an optional relational descriptor table associated to any dataset referred to as dataset descriptor. The descriptor usually contains a brief description of the nature and the purpose of the data contained in the data portion of the data set.
Dataset names
Dataset names are character strings. Within the context of B2000++ a dataset name is composed of one or more fields separated by dots, thus achieving a hierarchical classification of data while keeping a flat access technique. For describing B2000++ database objects the following naming convention has been defined:
field1.field2.field3.field4.field5.field6
Each field usually has the following meaning:
field1
is the generic name, such asCOOR
(coordinates),DISP
(displacement and rotation solutions at the mesh nodes),ETAB
(element description tables) etc.field2
is the branch or subdomain number (1, 2, 3, …).field3
is the computational cycle (time step, load step, etc.).field4
is the computational sub-cycle of the time step or the load step.field5
is the ‘load’ case.field6
is the ‘load’ sub-case or mode.
Example 1: The mesh node coordinates are stored in one array COOR
per subdomain:
gname: COOR
|
branch: 1-------2
| |
setname: COOR.1 COOR.2
Example 2: The displacement and rotation solutions at the mesh nodes
(‘DOF solutions’) are stored in one array DISP
per subdomain, per
case, and per cycle (not listed here):
gname: DISP
|
branch: 1---------------------------2
| |
case: 1-------------2 1-------------2
| | | |
setname: DISP.1.0.0.1 DISP.1.0.0.2 DISP.2.0.0.2 DISP.2.0.0.2
The length of a field can be chosen arbitrarily, but the total length of a dataset name including the dots must not exceed 64 characters (limitation imposed by MemCom).
Dataset types
The dataset type defines the data type, both for representing data in memory and on the database. It also implies converting the data types from database format to the data format required by the current hardware. In the table below Type designates the database data type. The following data types are available:
Ident |
Data type |
Size (bits) |
Description |
I |
mcInt32 |
32 |
Integer |
J |
mcInt64 |
64 |
‘Long’ integer |
E |
mcFloat32 |
32 |
Float |
C |
mcComplexFloat32 |
2 x 32 |
Complex float |
F |
mcFloat64 |
64 |
Double precision float |
Z |
mcComplexFloat64 |
2 x 64 |
Double precision complex float |
K |
char [] |
n * 8 |
Character array |
$ |
mcRTable |
n/a |
Relational table (dictionary) |
AT |
None |
n/a |
Array table |
U |
unsigned char abc[n] |
n * 8 |
Unspecified format, i.e. byte array |
Ident |
Data type |
Size (bits) |
Description |
I |
mcf_i4 (integer*4) |
32 |
Integer |
J |
mcf_i8 (integer*8) |
64 |
‘Long’ integer |
E |
mcf_r4 (real*4) |
32 |
Float |
C |
mcf_c4 (complex*4) |
2 x 32 |
Complex float |
F |
mcf_r84 (real*8) |
64 |
Double precision float |
Z |
mcf_c8 (complex*8) |
2 x 64 |
Double precision complex float |
K |
character*n |
n * 8 |
Character array |
$ |
mcRTable |
mcf_rtable |
Relational table (dictionary) |
AT |
None |
n/a |
Array table |
U |
unsigned char abc[n] |
n/a |
Unspecified format, i.e. byte array |
Another data type is the pointer array consisting of the array and the pointer vector that points to the beginning of each row of data within the array. In B2000++ pointer arrays consist of two datasets: The array containing the data, i.e. integers, reals, or doubles, and the integer pointer array.