## 3. Version 1.5.3

The 1.5.3 version of baspl++ contains a small number fixes and improvements as well as support for the new B2000 gradient storage scheme.

### 3.1. Miscellaneous Changes

• FIXED: The CH-face fields stemming from an NSMB CFD analysis were not correctly interpreted. They require special treatment. The Field object now contains code that performs the necessary operations for the CH fields.

• FIXED: Displaying both nodes and elements using a gradient field in the Part would not work.

• FIXED: Display of nodes in NPart was not updated when a colour field was removed.

• FIXED: A problem related to OpenGL display lists when printing offscreen with a view_pstrs object.

• IMPROVED: Reworked gradient extrapolation mechanism and gradient display in the Model editor. This work applies to the old B2000 gradient storage scheme, where, depending on the gradient scheme, a suitable extrapolation method to the nodes must be applied.

• IMPROVED: Increased precision of floating-point number display in Model editor.

• ADDED: For the NPart object, multiple extraction methods can now be defined, for instance:

p.extract = 'elements,nodes'

will extract elements and nodes at the same time. Likewise, for an NSMB CFD database, one could do

p.extract = 'sfvbc,cut'

which would extract the wetted surface plus a cut through the volume.

### 3.2. Support for the new B2000 Gradient Storage Scheme

A part of the ongoing development in the B2000 FEA environment is the implementation of a new gradient storage scheme. The new scheme allows for a much more flexible arrangement of integration points than the old scheme. Integration points can now be arbitrarily placed in the element, this is for instance of importance for p-elements. Further, field quantities can now be prescribed on a per-integration point basis (with the old scheme, they are fixed for a given element type), allowing for straightforward implementation of various yield and failure criteria, plasticity packages, etc., independent of the element type. Finally, the storage scheme is free from data redundancies and is as such very efficient w.r.t. disk space usage.

To this end, the new gradient storage scheme makes use of newly introduced functionality in MemCom. Also, the mcbrowser tool was updated, allowing now for inspection of gradient field data. In baspl++, support for the new scheme was added in the Field object and the NPart object. The Part object and the view_pstrs object only support the old gradient scheme.

fs = m.get_field('STRESS', case=1)

Note The STRS generic name still designate fields stored using the old gradient scheme. The following fields using the new storage scheme have been implemented at this time: STRESS STRAIN COOR_IP DISP_IP

Once the Field object has been created, the field values can be inspected in the Model editor, like for the old gradient storage scheme. There are the following differences, however:

• On the database, the values are stored in the branch-global system always. When a Field object is created, baspl++ transforms these values to the global-global coordinate system.

• There is no data extrapolated to the element's nodes. The reason behind this are that (a) baspl++ should present the data as it was calculated by B2000, and (b) that for more exotic storage schemes, extrapolation to the nodes is often not well-defined.

• Certain derived quantities of tensor data, can be selected in addition to the tensor's components. These are computed by baspl++ on-the-fly from the tensor data and are not stored on disk. For first-order tensors (vectors), the only derived quantity is the amplitude. For symmetric second-order tensors, the derived quantities are:

• S1, S2, S3: The largest, second-largest, and smallest eigenvalue.

• hydrostatic: The hydrostatic value.

• SD1, SD2, SD3: The deviatoric stresses/strains.

• max-shear: The "maximum" shear stress (Tresca).

• max-shear-upper: An upper bound for the maximum shear stress in three dimensions.

• octahedral: The octahedral shear stress.

• von-Mises: The von-Mises criterium.

In order to display the gradient data in a NPart object, it is necessary to load the physical coordinates of the integration points:

fc = m.get_field('COOR_IP', case=1)

If the NPart object is displayed in the deformed configuration, the physical displacements at the integration points must also be loaded:

fd = m.get_field('DISP_IP', case=1)

Both the COOR_IP and DISP_IP fields are also stored using the new gradient storage scheme.

To display the the gradient data in a NPart object, the following example can be used (here, the database contains a beam made of HE8.S.TL elements:

p = NPart(m)
p.att.edge_plot = 1
p.att.face_plot = 0
p.sampling.coor_field = fc
p.sampling.deform_field = fd
p.sampling.field = fs
p.sampling.compname = 'von-Mises'
p.extract = 'elements,sampling'

The field values are displayed at the exact positions of the integration points. This is most noticeable with shell elements. By default, the display is performed by coloured points. The size of these points can be set as usual by

p.att.point_size = 20

It is possible to display the points as coloured spheres, where the sphere radius depends on the value:

p.sampling.fast_draw=0
p.sampling.scale=0.03

Note The best scale factor for the given Field and perspective must be found out by hand. The scale factor may greatly vary between different solution fields, models etc.

Finally, setting the component name to the empty string enables the display of the principals (this applies only to second-order symmetric tensors):

p.sampling.compname = ''

Again, the scale factor must be set to a suitable value. The colours here are taken in function of the eigenvalues of the stress tensors.