Boris v3.0 Released

Boris v3.0 is now available for download.

List of changes:


  • Bug fixes (various)
  • Fixed CPU code performance issue on Linux (see
  • Number of OpenMP threads can be changed (threads command and startup options)
  • Allow selecting GPU for workstations with multiple GPUs (now successfully tested on multi-GPU workstation)
  • Asynchronous data save and display refresh, improves performance for data-bound simulations
  • Allow changing of script server port and responsivity tuning
  • Can now set a server password to authenticate remote client messages
  • Reworked module to allow control of multiple remote Boris instances, and allow automatic Boris instance startup (localhost) if none exists listening on indicated port
  • Fixed issue where if using a Python IDE (e.g. Spyder3), if communication with server didn’t end gracefully then Python IDE needed restart
  • Command line arguments added: port cudaDevice (0/1/2/3/…) windowMode (front/back) password
  • Warnings and Errors visible in Python scripts command return data
  • Added absorbing boundary layers as spatial variation generators, namely polynomial – including linear as special case – (abl_pol), tanh (abl_tanh), as described in JMMM, 450, 34 (2018), and exponential (abl_exp).
  • Parallel (CPU, GPU) standard/constrained adaptive Metropolis Monte Carlo algorithms for atomistic meshes (publication pending) – over order of magnitude faster than serial version
  • Various codebase improvements (removed all “using namespace std;” statements, replaced quicksort algorithm with parallel version of std::sort from C++17 stl)
  • NVCC compilation using CUDA 11.0 for Windows installers, which now include Ampere architecture executable (RTX 30, A100 cards)
  • Dedicated commands for loading externally computed temperature and current density using ovf2 files – intended for use with disabled heat and transport solvers
  • Shape generators and modifiers (rotation, repetition settings to generate arrays): rectangle, triangle, disk, ellipsoid, torus, tetrahedron, pyramid, cone
  • Shape generators can also be used as masks to set magnetization angle and material parameter values
  • Composite shapes can be constructed with a high-level Python interface provided through for easy manipulation and region definition.
  • Allow setting magnetization angle inside a solid object containing a given set of coordinates.
  • Shift-click in mesh viewer displays coordinate in console : useful for various commands which need coordinates or rectangles.
  • Significantly improved rendering speed for large meshes by using thresholds based on number of displayed cells: 1) switch to rendering simpler elements, 2) don’t draw obscured elements, 3) draw on checkerboard pattern only. User can adjust thresholds.

    Commands changed:
    random : added seed parameter
    roughenmesh : added side parameter
    delrect: if called without parameters voids entire mesh
    dp_getexactprofile: sets up to 4 dp arrays, where first is the position along profile, thus now works similarly to dp_getprofile command (but directly on mesh data, not display data).

    New commands:
    threads, serverport, serversleepms, selectcudadevice, serverpassword, newinstance
    loadovf2temp : load externally computed temperature (can be used with heat module iteration disabled or as a starting point)
    loadovf2curr : load externally computed current density (can be used with transport module iteration disabled)
    setcurrentdensity : set uniform current density (can be used with transport module iteration disabled)
    shape_rotation, shape_repetitions, shape_displacement, shape_method
    shape_disk, shape_rect, shape_triangle, shape_ellipsoid, shape_pyramid, shape_tetrahedron, shape_cone, shape_torus, shape_set
    shape_setangle, shape_setparam, setobjectangle

    Thanks to Mateusz Zelent and Krzysztof Szulc for helpful suggestions and bug reports.