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

ADDED: Graph objects now support also logarithmic scales.

REMOVED: The splineinterpolation 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 multibranch 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.

ADDED: Added an integrate subobject 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 subobject 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 highquality images, the newly added
fast_quad
flag to the NPart object can be set toFalse
. 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 highquality 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 highquality 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 NavierStokes CFD meshes. In such meshes, the thicknesslength quotient may be in the range of 1e6, which is about the numerical precision of 32bit floatingpoint numbers. This would lead to erroneous results when doing geometric computations inside baspl++ (for instance cuts and isosurfaces are affected). Using doubles (64bit floatingpoint numbers) increases the numerical precision to about 1e15 and thus remedies the problem. The downside of this change is an increased demand of memory.

IMPROVED: The isosurfaces 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.

ADDED: The dptools wizard. It is a reimplementation of the dptools software of ancient days. It contains a few essential CFD postprocessing utilities like XYplots of scalar values over a wing profile, XYplots 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=dptools.dptools() d.multi.displace_sfv=1 d.multi.gname='PRES' d.multi.cycle=1 d.multi.point=[2.5,1,0.15] d.multi.direction=[0, 1, 0] d.multi.length=0.055 d.multi.append('as28g.4.db_16P.mc') d.multi.append('as28g.1.mc') d.multi.extract_wing_profile=1 d.multi.extract_wing_profile.dump('xy.txt')

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 branchglobal coordinate system (thus gradient components must be named
SxxBG
,SxyBG
, 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 nonlinear 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 2127 for HE27type elements has been altered according to how it is now done in B2000. The HE20type elements are treated likewise.

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