All important and notable changes in the CoSimIO are documented in this file.
-
Changes in Connecting:
- Now instead of specifying
connection_namedirectly,my_nameandconnect_toare used for the call toConnect. - The
CoSimIO::Infothat is returned fromConnectnow contains theconnection_namethat needs to be used in subsequent calls to CoSimIO. - This change was done to make the connection more robust and to make the selection of primary/secondary partner clear. This is only used internally e.g. for who opens a port and who connects to it.
- Now instead of specifying
-
Introduced
CoSimIO::ModelPartfor exchanging of meshes- Simplified version of
Kratos::ModelPart - Simplifies and unifies the usage of
Import-/ExportMesh - See the tutorials on how to use it:
- Simplified version of
-
FileCommunication:
- By default now done in folder. This way leftovers from previous simulations can be easily deleted (done automatically).
- working directory can be specified
- stability of initial connection was significantly improved.
-
Python interface: Data is no longer copied when going from Python to C++ and vice versa.
Import-/ExportDatanow usesCoSimIO::DoubleVector(small wrapper aroundstd::vector)Import-/ExportMeshnow usesCoSimIO::ModelPart
-
Continuous Integration:
- Adding Python 3.9 (now has Python v3.5 - v3.9)
- Adding CentOS 7 build with GCC 4.8.5
- Enforcing C89 standard
-
Many improvements and cleanups under the hood
- Bugfix in remote-controlled CoSimulation (now settings can be passed to the registered functions)
- For this the
Infoobject can now holdInfoobjects itself, hence making it possible to build hierarchical structures.
- Extensive documentation was added: https://kratosmultiphysics.github.io/CoSimIO/
- Now the C++ version of CoSimIO is not header-only any more. Check here for the available build options.
- Support for MPI-parellism is now available (for all supported languages, i.e. C++, C and Python), along with extensive documentation and testing
- Pyramid topologies are available now. See here for details.
- Communication:
- Communication via pipes was added (currently only supported in Linux). See here for the details.
- Communication now uses serialization for exchanging data.
- FileCommuncation now longer adds an index to each file name
- FileCommuncation: Instead of using
renamefor file synchronization, it is now possible to use auxiliary files. See here for the details.
- Improvements and extensions to
CoSimIO::ModelPart:- The
ModelPartinterface was extended to support ghost nodes. See here for details - ModelPart uses
intrusive_ptrfor storing nodes and elements to save memory
- The
- C-Interface: Some functions like
CoSimIO_CreateInfoorCoSimIO_CreateModelPartinternally allocate memory and return a pointer to the allocated object. Discarding the return value leads to memory leaks. Compiler warnings were added to warn the user. Check here for more details. - All CMake macros of CoSimIO now start with
CO_SIM_IO_. This affects especiallyBUILD_CandBUILD_PYTHONwhich are changed toCO_SIM_IO_BUILD_CandCO_SIM_IO_BUILD_PYTHON. - Several minor improvements to the CI (continuous integration)
- Internal errors now give much better error messages including detailed stacktraces
- (Interprocess) Communication
- Socket based communication was added (using TCP network sockets with IPv4). Documentation is available here. Due to its versatility it is the new default (previously it was file-based communication)
- Experimental support for unix domain sockets was added (see here)
- PipeCommunication now supports large data (data larger than pipe buffer). Furthermore the buffer size can be configured with
buffer_size, see the documentation. - Experimental support for communication based on
MPI_Portswas added (see here). It is available when connection is done with MPI and can be enabled withCO_SIM_IO_BUILD_MPI_COMMUNICATION
- Mesh container (
ModelPart)- Creating entities in the ModelPart is now significantly faster. Especially when creating many entities the speedup is several orders of magnitude.
- New interfaces are added to the ModelPart with which multiple entities can be created.
- Improved and extended documentation
- Improved synchronization during initial handshake to avoid deadlocks
- Printing timing information for communication is now unified for all communication methods (can be enabled with
print_timing) - other minor interal improvements and fixes
- Improving communication when the codes are running in admin mode by setting file permissions accordingly
- Minor improvements in tests
- Some work in bringing back the Fortran interface
- Brings back the Fortran interface!
- Fixes compilation problems in some systems with the tests and with the pipe communication (happened only with old Linux kernels)
- Minor improvements in documentation
- Drops support for Python < 3.6
- Fixes problems with displaying error messages in some Windows systems
- Updates external libraries pybind (used in Python-bindings) and ASIO (socket-based communication)