Boris v3.0 is now available for download.
List of changes:
- Bug fixes (various)
- Fixed CPU code performance issue on Linux (see https://stackoverflow.com/questions/64988525/bug-related-to-g-openmp-when-using-stdthread)
- 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 NetSocks.py 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 NetSocks.py 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)
disabletransportsolver
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
displayrenderthresholds
Thanks to Mateusz Zelent and Krzysztof Szulc for helpful suggestions and bug reports.