Releases: zer011b/fdtd3d
Multi-dimensional Parallel Solver for x64/Arm/Arm64/RISC-V/PowerPC architectures with MPI/CUDA support
Introducing version 1.2!
RISC-V and PowerPC support
RISC-V and PowerPC are now fully supported in sequential mode (in addition to x64, Arm and Arm64). Both native and cross compilations for RISC-V and PowerPC are supported, for both gcc and clang toolchains.
Bug fixes
Fixed input using bmp images.
Improved CI
CI now fully covers all supported arches (except cuda launches).
Multi-dimensional Parallel Solver for x64/arm/arm64 with MPI/CUDA support
Introducing version 1.1!
Arm32 and Arm64 support
Arm32 and Arm64 are now fully supported in sequential mode (in addition to x64, which was the only supported arch previously). Both native and cross compilations for arm32 and arm64 are supported, for both gcc and clang toolchains.
Performance improvements
Up to 25% speed improvement is achieved with this release in different scenarios for all architectures.
Improved command line interface
Coordinates setup is simpler now, for example one option --num-cuda-threads x:<Nx>,y:<Ny>,z:<Nz>
can now be used instead of three --num-cuda-threads-x <Nx> --num-cuda-threads-y <Ny> --num-cuda-threads-z <Nz>
.
Build system simplification
Some build flags are automatically set up now, some are fully removed. More build flags are going to be revised in future.
Test system improvements
Test process is now fully documented and test system is changed to support cross arch testing.
Code unification, code improvements and various bug fixes
Multi-dimensional Parallel Solver with MPI/CUDA support
Introducing version 1.0!
Cuda support for all modes
In the base of CPU/GPU computations lies pretty much the same source code, which makes it easier to support both scenarios. To enable GPU computations use --use-cuda
command line option, and --cuda-gpus
to setup GPU ids.
E/H centered layouts
Two different Yee grid layouts are now supported, the one with E at the center of the cell border surface, and the one with H at the center of the cell border surface. Choose E-centered using --layout-type 0
, H-centered using --layout-type 1
.
Separate compilation of modes
All computation modes (six 1D modes, six 2D modes and one 3D mode) can now be compiled either together or separately in all possible combinations. This allows to include only required modes in binary and reduce its size. Basically, this is trade off between binary size (+a bit of memory/speed) and functionality. For example, in a specific scenario, usage of only one of 13 modes leads to binary size reduction of 90%
, usage of six modes leads to binary size reduction of 56%
.
Easier parallel launch
No need to pass --parallel-grid
option (it is removed now), just launch same sequential config under mpiexec.
Precalculated coefficients Ca, Cb, Da, Db
By passing --use-ca-cb
command line option computational time can be significantly reduced because coefficients are cached. However, memory consumption increases. So, --use-ca-cb
, --use-ca-cb-pml
, --use-ca-cb-pml-metamaterials
introduce trade off between computational time and memory consumption.
Current sources
In addition to hard point sources soft point sources are added (J
and M
).
Various optimizations
Grids are now stored in a bit different way, so memory consumption and computational time are reduced. For example, 30% speedup is achieved on sequential 3D mode with size 100^3
on 100 time steps with TF/SF and PML enabled.
MPI+Cuda support
Now CPU/GPU computations can be enabled separately on each computational node (see --cuda-gpus
command line option). For small grids it is still more efficient to use GPU computations only. For large grids usefulness of this feature will be fully shown in next releases.
Design documentation
Some docs on design have been added.
Bug fixes
Many bugs were fixed for this release.
Multi-dimensional (1D, 2D and 3D) Parallel Solver
- Various bug fixes
- Split TF/SF for left and right borders
- Added more examples
- Added more tests in test suite
- reflection & refraction tests for Eps material with PML (for all 1D modes)
- tests for plane wave in vacuum for all modes
- test for comparison of real value and complex value modes
- Added sphere approximation for all dimensions
- Added Doxygen documentation
Multi-dimensional (1D, 2D and 3D) Parallel Solver
- Various bug fixes
- Code unification for different grid dimensions (1D, 2D and 3D) and field components combinations (e.g. TEx, TMy modes, etc.)
- Support of all dimension and
--1d
,--2d
and--3d
command line options in the same binary - Added new unit tests
- Improved test suite
- Significant refactoring of the source code
- Added more comments to source code
- Added new examples (see
Examples/
)
3D Parallel Solver
2D mode is temporarily disabled.
- Fixed bugs
- Added material sphere approximation
- Added parallel NTFF
- Added test suite in CI
- Performed code unification and some other changes
3D Parallel Solver
2D mode is temporarily disabled.
- Added command line interface and command line files support (see
--help
for all available options) - Added some docs to ./Dosc and examples to ./Examples
- Added optimal virtual topology chooser
- Added NTFF
- Added double material resolution
- Improved CI tests
- Added .txt loader
- Added setting of materials through command line interface (sphere)
- Lots of internal improvements
2D,3D Parallel Solver
- Fixed bug with wrong end calculation coordinate for parallel grid
2D,3D Parallel Solver
- Added unit test and CI
- Fixed 3D material (+metamaterial) borders approximation
- Added arbitrary incident wave angle for 2D and 3D modes
- Added orthogonal axis for 3D BMP dumper
- Added parameters with part of grid to save for BMP dumper
- Added TXT dumper (with gnuplot support)
- Fixed minor bugs
- Refactoring and code comments
2D,3D Parallel Solver
2D and 3D Parallel solver with support of MPI and Cuda GPU calculations, TF/SF, UPML, metamaterials with Drude model and complex/real field values