5. Version 1.4.9

The 1.4.9 version of baspl++ is an intermediate release, incorporating a moderate amount of changes.

5.1. General Improvements and Fixes

  • ADDED: Graph objects now support also logarithmic scales.

  • REMOVED: The spline-interpolation functionality has been removed from the Curve object. The reason for this is that the quality of the interpolation is often insufficient (oscillations, endpoint derivatives).

  • IMPROVED: Curve objects are now restricted to draw only inside the Graph's area.

  • IMPROVED: The screenshot functionality (Scene.export_to_file()) has been made more robust. The routine will attempt to use double buffering method if single buffering is not accepted. Some hardware only supports double buffering.

  • FIXED: For multi-branch models and fields with different number of columns (components) per branch, selecting the higher components would give an error message.

  • FIXED: Made baspl++ more robust against wrong dataset types.

  • FIXED: Removed a memory leak in the gradient data extraction routines.

5.2. Improvements on NPart Objects

  • ADDED: Added an integrate sub-object to NPart. It permits to integrate scalar and vector fields over the whole part. This is useful for instance to compute the total force and moment acting on a part of the model. The integrate sub-object permits to specify the coordinates of a reference point. It also has a function to compute the point where the moment is minimal.

    m = Model('mdo.db')              # Open a MemCom db, in this case a CFD db.
    f = m.get_field('PRES', cycle=1) # Load pressure field.
    v = m.get_field('CF', cycle=1)   # Load skin friction field.
    p = NPart(m)                     # Create an NPart.
    p.integrate.point_1=[3.5,30,-2.5]# Set the reference point.
    p.integrate.scalar.field=f       # Set the scalar field to integrate.
    # Print results.
    print 'Total force=',p.integrate.result.force
    print 'Total moment=',p.integrate.result.moment

    For more information, type on the baspl++ command line:

    >>> help(p.integrate)
  • ADDED: Modern graphics hardware usually handles only triangles. Thus, quadrilaterals are decomposed in two triangles. When interpolating colours, the colour interpolation is in such cases not bilinear anymore. To produce high-quality images, the newly added fast_quad flag to the NPart object can be set to False. Then, each quadrilateral is subdivided into a large number of triangles, and the colour values at these triangle vertices are interpolated by baspl++ in bilinear fashion. This kind of rendering is slow, but produces high-quality images.

    m = Model('mdo.db')  # Open a MemCom db, in this case a CFD db.
    f = m.get_field('PRES', cycle=1) # Load pressure field.
    p = NPart(m)         # Create an NPart just like a Part.
    p.colour.field=f     # Display the pressure field as colours.
    p.colour.fast_quad=0 # Enable high-quality interpolation.
    p.extract = 'sfvbc'  # Extract skin from CFD model.
    s = Scene()          # Create a Scene object
    s.add(p)             # and add the NPart object to it.

    The above Python excerpt demonstrates how to use the fast_quad option. The two pictures below show its effect: In the left picture, the fast_quad option is enabled (default), and the colours are not interpolated in a bilinear fashion. In the picture to the right, the option is disabled, and colours are interpolated in bilinear fashion.

  • IMPROVED: Converted data extraction and interpolation in NPart from float to double. This is necessary for very thin elements, as are often found in Navier-Stokes CFD meshes. In such meshes, the thickness-length quotient may be in the range of 1e-6, which is about the numerical precision of 32bit floating-point numbers. This would lead to erroneous results when doing geometric computations inside baspl++ (for instance cuts and iso-surfaces are affected). Using doubles (64bit floating-point numbers) increases the numerical precision to about 1e-15 and thus remedies the problem. The downside of this change is an increased demand of memory.

  • IMPROVED: The iso-surfaces functionality in the NPart object has been improved and is now considered ready for production use. The picture below shows the isosurface of the velocity field with a value equal to mach 1.

5.3. Changes specific to CFD Post-Processing

  • ADDED: The dptools wizard. It is a re-implementation of the dptools software of ancient days. It contains a few essential CFD post-processing utilities like XY-plots of scalar values over a wing profile, XY-plots of scalar values along a line, and integration of scalar fields over a surface. The wizard has a graphical user interface, but can also be scripted. Results can be output to ASCII files for further processing.

    import dptools
    d.multi.direction=[0, 1, 0]

5.4. Changes specific to B2000 CSM Post-Processing

  • ADDED: Helper class for principal stresses. This class permits to draw the principal stresses at the Gauss points of shell and 2D elements. The stresses (and strains) must be saved in the branch-global coordinate system (thus gradient components must be named Sxx-BG, Sxy-BG, etc.), like the MITC element does. The class is implemented entirely in Python.

  • IMPROVED: baspl++ is now capable of handling 64bit gradient fields. For B2000 version 2.6.2 and above, it is assumed that gradient indices (like STRS) are 64bit. This is necessary when the overall gradient data (for instance, from a non-linear simulation over multiple cycles) exceeds 2GB.

  • IMPROVED: Essential boundary conditions (EBC) can now have an arbitrary number of dof per node (before it was restricted to 10). Also, display of EBC in Part and NPart has been modified such that they can cope efficiently with strings of different lengths.

  • CHANGED: The enumeration of nodes 21-27 for HE27-type elements has been altered according to how it is now done in B2000. The HE20-type elements are treated likewise.

  • FIXED: The WE (wedge) elements are now treated like PE and HW Elements (not like PR).