All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
We mark updates with a (pre-)release tag on github.
Creating a release on github will create an associated archived version on zenodo.
As of v8.0 we try to follow Semantic versioning i.e. major version number changes break backwards compatibility and minor version number changes indicate new features. Before that we kind of made up our own version numbers. A new major version number is often associated with a journal publication, but other than that there is no defined mapping from the amount or kind of change to a version number.
Only changes in code are reported here, we do not track changes in the doxygen documentation, READMEs or tex writeups. As of v7.0 we also stop reporting changes in test and benchmark programs.
- Fix non-standard use of uint
- Fix OpenMP 2 compliance on Windows
- Fix OpenMP version detection using
_OPENMPMacro instead of by-compiler detection - Fix error in Probes module where only first coordinate is written to file
- Fix a bug in Feltor's restart routine
- msvc-omp cmake preset for Windows
- Optimize implementation of
dg::geo::solovevanddg::geo::polynomialflux functions. Speed up evaluation and fieldline integration. - Change cmake location of test and benchmark executables to follow original
folder structure exactly (i.e.
build/testsandbuild/benchmarksreplaced withbuild/inc) - Fully integrate geometries and matrix into Catch2 tests. Changed some file
names from
*_t.cppto*_b.cppto strictly enforce all ``*_t.cppfiles as Catch2 test files. For exampleds_t.cpp` is now called `ds_b.cpp`
- Update cccl dependency version from 2.8.0 to 2.8.4
- Fix all warnings and errors from clang-19
- Fix some remaining warnings from msvc
FP_FAST_FMAmacro no longer used for fma support test except for GCC
- Revmove
DG_BENCHMARKmacro everywhere
- Complete cmake build system for all programs and libraries
- Macro
VCL_NO_INCLUDE_PREFIXcan be used to includevectorclass.hdirectly
- matrix now depends on
lapackdirectly, notlapacke - The timestamp in the file history now follows ISO8601 formatting in UTC
- probes_params uses
std::vectorinstead ofthrust::host_vector - All remaining
*.cufiles are renamed to*.cpp - Moved all diag programs to their respective src project
- everything compiles without warnings from
-Wextra -Wpedanticand\W4on Windows - Remove the use of variable length arrays (VLAs)
- Change
uinttounsignedinmpi_kron.h - Change iterator type in
dg::Viewto given pointer type (else undefined construction of unkown iterator type from pointer) dg::is_divisableignoredepsparameter- Avoid zero sized array warnings in
aRealMPITopologyforNd=0 - filesystem paths are given in
wcharon windows; fix ability to read wchar - Fixed MPI file write error when get does not set value type
- Fix probes parser when using nlohmann-json
diag/compare.cppRemoved because it can be trivially implemented in python- Boost dependency of geometries header completely removed using C++17 special functions, in particular in
taylor.h
- Aliases in
dg::blas1::pointwiseDotanddg::blas1::pointwiseDividelead to wrong results
- New
dg::SparseMatrixclass to replace our previouscusp::csr_matrixandcusp::coo_matrix - The
SPARSELIBMakefile variables expands to-lcusparsewhen compiling with cuda - resize method in
dg::TriDiagonal - Writeable data method in
dg::SquareMatrix
- The
LIBSMakefile variable includes-lcusparsedependency when compiling with cuda. This is rather trivial because cuda ships with cusparse. - Default build should now use
https://github.com/nvidia/ccclrepository - Default build should now use
https://github.com/vectorclass/version2(instead of version1) - All dg functions/classes/typedefs returning or depending on any cusp coo or csr matrix now use
dg::SparseMatrix - All dg functions/classes returning or depending on
cusp::dia_matrixnow usedg::TriDiagonal - All dg functions/classes returning or depending on
cusp::array1dnow usethrust::host_vector - All dg functions/classes returning or depending on
cusp::array2dnow usedg::SquareMatrix - The inverse type of tridiagonal matrices in
dg/matrix/matrix.hisdg::SquareMatrix
dg::InverseTriDiagonalbecause untested and unused overdg::mat::compute_Tinv_y
- All cusp header files are removed from
dg/algorithm.h,dg/geometries/geometries.handdg/matrix/matrix.h(The relevant tensor traits for cusp can still manually be included though)
- Thrust library can now be used at newest version
- A novel C++17 style
dg::file::NcFileclass together with its MPI counterpart and supporting infrastructure that greatly simplifies netCDF-4 output - Add modular
dg::file::Probesclass with defaultdg::file::parse_probesthat can be added to any project - Simplify output design with
dg::file::Record - Add possibility to use
nlohmann::jsoninstead ofjsoncppin our WrappedJsonValue using the macroDG_USE_JSONHPP - New blas1 function
dg::blas1::kroneckerfor Nd dimensional product space evaluations - New blas1 function
dg::blas1::vdotthat can handle general and in particular complex scalar products - Novel N-dimensional Grid class
dg::aRealTopologyanddg::RealGrid(and its MPI counterparts) that generalize the previous 1d, 2d and 3d grids. Previous grid classes still fully function using typedefs. - Use Catch2 as a unit test framework for
dg,dg/fileanddg/topology. We introducetests/run-all-testsscript - A novel MPI communication backend allowing for consistent overlapping communication and computation in all sparse matrices
dg::mpi_cart_xxxwithxxxincreate,kron,splitfor more consistent and easier Cartesian communicator handling in MPI gridsdg::mpi_read*functions for more consistent and easier MPI initialisation- Improved handling of cuda-aware MPI detection for non-OpenMPI libraries
- Add default constructors to most classes notably Grid classes
- Add optional weights parameter to
dg::least_squares - Add experimental
extrapolate_least_squaresmethod todg::Extrapolate(unfortunately not very successful) - Template version of
dg::is_same - Add more verbose output to
SeparatrixOrthogonal - Add
dg::mat::BesselJanddg::mat::LaguerreLanddg::mat::GyroLagKfunctors - Add
dg::exblas::fpedot_cpu,dg::exblas::fpedot_gpuanddg::exblas::fpedot_omp - Add
dg::exblas::ufloat - Probes module in feltor 3d code
- More general interfaces working with new N dimensional grid class to all topology functions like evaluate, interpolate, derivatives etc.
dg::cHVec,dg::cDVec,dg::cMHVecanddg::cMDVectypedefs for complex vector types- Expose
dg::is_scalar_v,dg::is_vector_v,dg::has_policy_vanddg::is_matrix_vtype predicates - Extended Tag system on scalar types in particular complex types (
std::complexandthrust::complex) - Add
dg::geo::SOLRegionanddg::geo::ClosedFieldlineRegionas predicates - Add predicate parameter to
dg::geo::WallFieldlineDistanceanddg::geo::WallFieldlineCoordinate, which may accelerate sheath generation by a factor 4 - Add double X-point switch in
dg::geo::createModifiedFieldas "sol_pfr_2X"
- std=c++17 Change C++ standard to C++-17
dg::Averagehas one additional template parameter (the interpolation matrix). Changed in all occurences in src programs.dg::EllSparseBlockMatanddg::CooSparseBlockMatgot one additional template parameter (but does not matter if used throughdg::HMatrixtypedef)- Bump Doxyfile(s) to 1.9.8
dg::mpi_initnow also sets GPUdg/geometries/geometries.hnow always includesdg/file/json_utilities.h- The main documentation page is changed to
topics.htmlfrommodules.html - Complete rework of MPI sparse matrix communication backend
- Most
*.cufile endings were changed to*.cpp(Nicer for C++ automatic syntax highlighting) - Most
inc/*_mpi*.cppprograms were merged into its correspondinginc/*.cppprogram (reduces future maintenance load) - Changed
static inlinefunction declarations toinline - MPI grid classes can handle arbitrary parallelization (even those that do not evenly divide cell numbers)
dg::geo::DSclass no longer adds jump terms in its symv method. Thus removed one template parameter fromdg::geo::DSclass. Adapted in all src prorams.SeparatrixOrthogonalclass only integrates with1e-11default accuracy (prior1e-13)dg/geometries/geometries.hnow automatically incursjsondependency- The
tridiagmethod ofdg::mat::UniversalLanczosnow returns the tridagonal matrix T - Restructure feltor, feltorSH, feltorSHp, feltorSesol, feltorShw, toefl, lamb-dipole, geometry-diag programs using new I/O design
- Use WrappedJsonValue in poet, esol, hasegawa and heat code
- Use macro
WITH_MPIin most executable programs for easy compiler switch - Move
ping_mpit.cuprogram tosrc/ping/mpi-ping.cpp - Changed x,y,z coordinate to R,Z,P in geometry-diag
- Add capability for 2nd X-point in geometry-diag
- Add ClosedFieldlineRegion and SOL output in geometry-diag
- Major code refactoring of 3d feltor code in preparation of thermal code
- Member functions of
dg::DLTare now static dg::Operatoris now nameddg::SquareMatrixand can be used indg::blas2::symvfunctions together withstd::vector(dg::Operatortypedef still exists for backward compatibility)dg::lu_solveis now exposed in main dg namespace- Allow general value types in all blas1 functions
dg::zeroanddg::onehave more general template interfacedg::blas1::dotanddg::blas2::dotallow complex input vectors (in fact they allow any addable type)dg::MPI_Vector::set_communicatormember only needs oneMPI_Commparameter
- All previous netcdf utilitiy functions are now deprecated
dg::mpi_init1d,dg::mpi_init2danddg::mpi_init3dand all overloads
dg::EllSparseBlockMatDeviceanddg::CooSparseBlockMatDevicenow merged intodg::EllSparseBlockMatanddg::CooSparseBlockMatdg::sainv_precondas it is not useddevice=cppis no longer supported. Usedevice=cpu.- Last remains of
DG_DEBUGandSILENTmacros completely removed - doxygen-awesome css and js files. We now use doxygen-awesome as external library instead of keeping copies in
feltor/doc dg::averageanddg::mpi_average(now replaced bydg::create::reduction)dg::extend_lineanddg::extend_column (now replaced bydg::create::prolongation`)diag/probes.his now replaced by dg/file/probes.h- Some low level operator generators for dg derivatives
- fehlberg-4-2-3, billington-3-3-2, trbdf2-3-3-2 Butcher tableaus as they performed very badly and should not be used
dg::transposecommunicator_modandcommunicator_mod_reducemembers ofdg::MPI_Vector- All previous MPI communication objects
dg::Buffermemory class
- Fix unnecessary copy in Adaptive and SingleStep timeloop
- Fix Broadcase in
mpi_init3dgoes to comm not to world - Fix value init in default constructor of
dg::MPI_Vector - Fix bug in double version of
dg::is_same - Fix sign in
SafetyFactor - Fix grid generation close to O-point
- Fix verbose output in SeparatrixOrthogonal
- Performance of serial sparseblock matrix now equals that of OpenMP with 1 thread
- A left looking sparse inverse preconditioner
dg::sainv_precond(sadly did not yield any benefits overdg::nested_iterationsin our tests so we did not implement an MPI version) dg::blas2::parallel_forfor general parallelization tasks on shared memory containers (very close in functionality tokokkos::parallel_fordg::blas2::stencilA generalization ofdg::blas2::parallel_forthat works for MPI parallelization at the cost of having to encode the communication stencil in a sparse matrix and only one vector argumentdg::create::window_stencilanddg::create::limiter_stenciloverloaded for various topologies for use as communication stencils indg::blas2::stencil- Functors
dg::CSRSlopeLimiter,dg::CSRMedianFilter,dg::CSRSWMFilter,dg::CSRAverageFilter,dg::CSRSymvFilterfor use as functors indg::blas2::stencil isLocalBijectivemethod indg::SurjectiveComm- write access to
inner_matrixandouter_matrixindg::MPI_Matrix MPI_Commparameter in constructor ofdg::NearestNeighborCommset_right_sizeandset_left_sizemethods indg::EllSarseBlockMatdg::Elliptic1d(since we have 2d and 3d versions)dg::Signa 1d functor that returns the sign of its argumentdg::GeneralHelmholtzgeneralizes all the Helmholtz classes into one class (and specializes todg::Helmholtz1d,dg::Helmholtz,dg::Helmholtz2d,dg::Helmholtz3d- Experimental
dg::FilteredERKStepclass (sadly does not work so well) nmethod to access number of polynomial coefficients indg::DLTdg::create::fast_transformfor creating block diagonal matrices on various topologies- overloads for
dg::create::fast_interpolationanddg::create::fast_projectionto select directions - new fem functionality:
dg::create::fem_linear2const,dg::create::inv_fem_massdg::create::inv_fem_linear2const,dg::create::fem_mass2d,dg::create::inv_fem_mass2d,dg::create::fem_linear2const2d,dg::create::inv_fem_linear2const2d dg::create::interpolationanddg::create::projectionfunctions now all have amethodparameter (that defaults to "dg")dg::invertoverload acting ondg::Operatoras an alias todg::create::inversedg::create::backprojectanddg::create::inv_backprojectfor projecting a dG grid vector to an equidistant grid and backdg::create::inv_backscatterfor inverting an interpolation to an equidistant griddg::convertGlobal2LocalRowsanddg::convertLocal2GlobalColshelper functions to enable mpi conversion of column distributed matricesaccess_stringmethod indg::file::WrappedJsonValueto access creation history of an object- Restructure of
dg::geo::Fieldalignedto allow for different interpolation and backprojection from dG to fine grid and back (to a possibly equidistant grid and with possibly cubic, linear or nearest methods) - in
dg::geo::DSthe derivative methods now have the general zero transform dg::geo::createCircularFieldhas now two radii parameter to allow for the creation of an ellipsis and changed the signdg::geo::SeparatrixOrthogonalAdaptorto create Separatrix grids without XGrid topology- Utilities for exponential integration:
dg::mat::ExponentialStep,dg::mat::ExponentialERKStep,dg::mat::phi1,dg::mat::phi2,dg::mat::phi3,dg::mat::phi4,dg::mat::FuncionalButcherTableau,dg::mat::ConvertsToFunctionalButcherTableauwith the four methods "Euler", "Midpoint-2-2", "Runge-Kutta-4-4", and "Hochbruck-3-3-4" - Utility function
dg::mat::MatrixFunctionfor easy general purpose use - Test of filters and Limiters and implicit timesteppers in the
src/lamb_dipoleproject - Test of new schemes in
src/navier_stokesproject - File
src/toefl/input/default_hpc.jsonto be consistent with Quick Start guide
- explicit use of "default" constructors in
dg::Adaptive,dg::Advection,dg::AndersonAcceleration,dg::ArakawaX,dg::BijectiveComm,dg::GeneralComm,dg::BICGSTABl,dg::ChebyshevIteration,dg::EVE,dg::LGMRES,dg::MultigridCG2d,dg::PCG,dg::Poisson,dg::ERKStep,dg::SinglestepTimeloop,dg::ButcherTableau,dg::ShuOSherTableau,dg::RealGrid1d,dg::Operator dg::create::modal_filterno longer returns adg::MultiMatrixdirectly. Instead, adg::Operatoris returned that can be converted todg::MultiMatrixusingdg::create::fast_transform- rename
getLocalGatherMaptogetLocalIndexMapindg::SurjectiveCommanddg::GeneralComm - rename
getPidGatherMaptogetPidIndexMapindg::SurjectiveCommanddg::GeneralComm - rename
getSortedGatherMaptogetSortedIndexMapindg::SurjectiveComm - Constructors of
dg::Helmholtz, anddg::Helmholtz3dchange the orders of parameteralphaand reverts to constructor of respectivedg::Ellipticclass - 1d overloads for
dg::create::fast_interpolationanddg::create::fast_projectionreturndg::HMatrix_tinstead ofdg::MultiMatrix dg::create::fem_massnow returnsdg::TriDiagonalinstead ofcusp::coo_matrixdg::create::precondoverload fordg::DLTrenamed todg::create::inv_weights- parameters to
dg::tensorproductchanged fromcusp::coo_matrixtocusp::csr_matrix - all appearances of
guentherorGuentherindg::geoare corrected toguenterrespectivelyGuenter(because that is how her name is spelled) cloneand other virtual methods indg::geo::RealCurvilinearGridX2d,dg::geo::RealCurvilinearProductGridX3d,dg::geo::DSPGenerator,dg::geo::FluxGenerator,dg::geo::Hector,dg::geo::RealCurvilinearProductMPIGrid3d,dg::geo::PolarGenerator,dg::geo::LogPolarGenerator,dg::geo::Ribeiro,dg::geo::RibeiroX,dg::geo::SimpleOrthogonalX,dg::geo::SeparatrixOrthogonal,dg::geo::SimpleOrthogonalhaveoverride finalkeywords- default parameters changed in
dg::geo::Fieldalignedconstructor - restructure of the
src/feltorproject (including renaming*.cufiles to*.cpp)
dg::geo::createModifiedSolovevFieldis superseded bydg::geo::make_field
dg::ModalFilteris removed in favor of generating and usingdg::MultiMatrixdirectlydg::transpose_dispatch(replaced bydg::blas2::parallel_for)dg::extend_line(replaced bydg::blas2::parallel_for)dg::extend_column(replaced bydg::blas2::parallel_for)dg::create::interpolationT(is not used anywhere)- file
src/toefl/toefl_hpc.cu(was previously merged intotoefl.cpp dg::integratereplaced bydg::aTimeloopfunctionalitydg::integrateERKreplaced bydg::aTimeloopfunctionalitydg::stepperRKreplaced bydg::aTimeloopfunctionality
- Fix left shift in exblas::AccumulateWord by -1 by explicit conversion to unsigned
- Fix
isCommunicatingindg::BijectiveComm - Fix
global_gatherandglobal_scatter_reduceindg::aCommunicatorin the case that a map is not communicating but still needs to locally gather values. This makes the two functions truly the transpose of each other. - Fix
dg::ShuOshercopyable method segmentation fault in case of default constructed - Fix size method in
dg::Operatorfor integer value types - Fix convergence criterion in fieldline integrator for
dg::geo::SimpleOrthogonal - Fix constructor of
dg::mat::PolChargeanddg::mat::PolChargeN
- Add ability to use lambdas and functors without
dg::TensorTraitsindg::apply,dg::blas2::symvanddg::blas2::gemv(Extremely useful!) - Add
--extended-lambdaflag in defaultNVCCFLAGS - New class
dg::file::WrappedJsonValueplus test file; allows easy bug-tracing on jsoncpp file input - Allow arbitrary
nx, ny, nzpolynomial number in all grids; adapt all weights, derivatives, etc. creation accordingly - New sub-project
dg/matrix/matrix.hwritten by Markus and optimized by Matthias. Allows matrix-function computations in particular square roots CONTRIBUTING.mdfile (moved from homepage)LAPACKLIBvariable in Makefile configuration- new
device=cpuconfiguration (enable to compile without parallelization) - new file
config/version.mkprovides git hash and branch information for file output - new wall and sheath generation capabilities in
inc/geometries - new
dg::aTimeloopfamily of classes to help create time-stepping - new explicit timesteppers Cavaglieri-3-1-3 (explicit and implicit), Fehlberg-3-2-3, Fehlberg-4-2-3, Cavaglieri-4-2-3 (explicit and implicit), Tsitouras09/11-7-4-5, Verner-9-5-6, Verner-10-6-7, Dormand-Prince-13-7-8,
- new implicit timesteppers SDIRK-4-2-3, Sanchez-3-3, Sanchez-3-4, Sanchez-6-5, Sanchez-7-6
- Add vector support for
std::mapinblas1functions - Add UnaryOp parameter to
dg::blas1::reduce - Add DenseMatrix-Vector multiplication suppoert in
dg::blas2::symv - Add append method to
dg::Message - Add
dg::abort_programfunction - Add more cuda Error management in backend functions
- Add convenience
dg::mpi_initfunction - Matrix conversion from
dg::EllSparseBlockMattocusp::coo_matrixand associateddg::tensorproductanddg::create::diagonalfunction to re-create elliptic operators - Add convenience mpi Macro
DG_RANK0helping to write shared/mpi programs more easily - Add new multigrid implementation
dg::nested_iterationsfor maximum modularity, sovlers can be separately chosen at each stage - Add experimental and preliminary FEM support
- Add
dg::least_squaresfunction - project
esolEdge-SOL turbulence in Full-F models - project
poetFull-F Full-K blob simulations - project
navier_stokes3d field-aligned Navier-Stokes equations
- Redesign implicit and semi-implicit timestepper interfaces for more modularity and the ability to use lambdas
- Redesign
dg::Adaptive - Unify stopping criterions for Matrix inversion classes and use of weighted scalar product
dg::apply,dg::blas2::symvanddg::blas2::gemvare now formally the samedg::PCGworks with self-adjoint matrices in weights instead of symmetric ones- Renamed
dg::lr_pivottodg::lu_pivotand make it use binary reproducible dot functions, same fordg::lu_solve - Rename
dg::create::inverttodg::creat::inverse - Redesign project
src/toefl; follows standard design on user-guide - Redesign project
src/reco2D; follows standard design on user-guide - Redesign project
src/lamb_dipole; adapt todg::file::WrappedJsonValue - Adapt all
srcprojects to new semi-implicit timestepper interface - Redesign DS and all related projects
- Rename
inc/geometries/magnetic_field_t.cutoinc/geometries/solovev_t.cu
dg::integrateERKreplaced bydg::aTimeloopfunctionalitydg::stepperRKreplaced bydg::aTimeloopfunctionality
dg::FilteredImplicitMultistep; barely any theory behind thatdg::Karniadakiswas marked deprecated before- "Verner-8-5-6" Timestepper tableau
dg::norm; Everything is normed now; adapt all codes to it; specifically also makesinv_weightsandinv_volumefunctions unnecessary; matrix inversion works with weighted scalar products- class
dg::Invert; replaced by lambda functionality - file
diag/impRdiag.cu; replaced by python diagnostics - file
diag/reco2Ddiag.cu; replaced by python diagnostics - file
diag/toeflEPdiag.cu; replaced by python diagnostics - file
diag/toeflRdiag.cu; replaced by python diagnostics - file
diag/vmaxnc.cu; replaced by python diagnostics - file
diag/window_params.txt; Useless - project
src/ep; merged and oursourced withimpuritiesproject - project
src/polar; Useless - project
src/impurities; outsourced tohttps://github.com/mwiesenberger/impurities nc_enddefandnc_redefcalls; they are unnecessary according to netcdf documentation- all files
inc/geometries/[*magnetic-geometry.js*]These are now part of a separate magnetic field repository hector_t.cu,ribeiro_t.cu,simple_orthogonal_t.cumerged intoflux_t.cu
- fix bug from linking
-lhdf5by linking-lhdf5_serialin default.mk - fix bug nvcc did not compile
.cppprograms now it does - fix bugs in
dg::AndersonAcceleration - fix bugs in
dg::LGMRES - fix bugs in
dg::BICGSTABl - fix bug in
exblas/accumulate.cuhandexblas/accumulate.h - fix bug in
dg::ClonePtrcopy-constructor - fix bug symv call to CooMatrix in
mpi_matrix.h - fix NaN bugs in
dg::blas2::symveven thoughbeta == 0 - fix nvcc compiler warnings when using host lambdas in
dg::blas1functions - fix tableau Tsitouras11-7-4-5
- M100 config file
- json utility functions
dg::file::get, dg::file::get_idxindg/file/json_utilities.hwhich adds a small abstraction layer that gives a user more control over what happens if a variable is not found - json utility functions
dg::file::file2Json, anddg::file::string2Jsonin json_utilities.h which adds a small abstraction layer that gives a user more control over what happens if an error happens during the parsing of a file - "easy output" netcdf utility functions that are particularly useful for MPI output: either write data in parallel or funnel through the master thread
- new include files
dg/file/file.h,dg/file/json_utilities.handdg/exblas/exblas.h - new class
dg::Gradientfor gradient - new class
dg::Advectionfor the upwind advection scheme - new
dg::blas1::reducefunction for custom reductions - new "exchangeable"
dg::x::DVec,dg::x::HVec, ...,dg::x::CartesianGrid2d, ...,dg::x::IHMatrix, ... typedefs. The idea is that these resolve to either shared memory or mpi distributed memory versions depending on the MPI_VERSION macro. This helps merging shared and mpi programs into single ones. - added "simple" mode to
dg::Averagecomputation, which is beneficial for GPU computing - add
dg::integratethat computes an indefinite integral of a function (essentially the opposite of the derivative) - add
dg::ModalFilterand tests thereof - new
dg::composefunction that concatenates two or more functors to one - add
dg::cooRZP2Xcoordinate transformation functions to easily transform between Cylindrical and Cartesian coordinates - interpolate function has an additional
dg::spaceparameter to indicate nodal or modal values - Grid classes now have
host_vectorandhost_gridmember typedefs - new tensor functions
dg::tensor::scalar_product2danddg::scalar_product3dthat can compute uE2 in one go - new extended tensor functions
dg::tensor::multiply2danddg::multiply3dthat can compute uE2 in one go - new single step timestepper
dg::ShuOsherincluding newdg::ShuOsherTableauanddg::ConvertsToShuOsherTableauclasses to hold corresponding coefficients - new ShuOsher tableaus SSPRK
- new Runge Kutta embedded tableaus tsitouras, the default timesteppers in Julia
- new implicit RK tableau trapezoidal, implicit midpoint and sdirk-2-1-2
- new class Simpsons that implements Simpsons rule for (time) integration
- new implicit timesteppers
dg::DIRKStepanddg::ImplicitRungeKutta - Redesign of multistep time steppers consistent with Runge-Kutta ones in terms of
dg::MultistepTableauanddg::ConvertsToMultistepTableau - a host of new explicit, implicit and semi-implicit multistep tableaus
- experimental "filtered" multistep time-steppers that allow modal filtering (first tests are not promising though)
- new experimental multigrid solvers involving Chebyshev iterations as smoother (but none are better than nested iterations so they remain experimental)
- new class
dg::EVEthat computes the largest Eigenvalue of a matrix (courtesy of Eduard Reiter) - new class
dg::ChebyshevIterationsanddg::ChebyshevPreconditioner(for chebyshev iterations) - new solvers
dg::LGMRES,dg::BICGSTABL, and dg::AndersonAcceleration(courtesy of Aslak Poulsen) - new
dg::FixedPointSolveranddg::AndersonSolverfor nonlinear problems in time - a host of new functors for the evaluate and pullback functions
dg::geo::FluxSurfaceIntegral,dg::geo::FluxVolumeIntegralanddg::geo::SafetyFactorAverageclasses- new implementation:
dg::geo::ds_centered_bc_along_fieldanddg::geo::dss_centered_bc_along_fieldthat implement boundary condition "Stegmeir" style along the magnetic field lines - new Fieldaligned member functions
integrate_between_coarse_gridandinterpolate_from_coarse_gridthat allow field-aligned interpolations dg::geo::Periodifyclass anddg::geo::periodifyfunction to extend flux-functions periodically beyond grid boundaries- new
dg::geo::findCriticalPointfunction that generalizes X-point and O-point identification - new classes
dg::geo::SquareNormanddg::geo::ScalarProductthat work on cylindrical vector fields - new set utility functors
dg::geo::SetUnion,dg::geo::SetIntersection, anddg::geo::SetNotthat help construct damping regions dg::geo::createMagneticFieldanddg::geo::createModifiedFieldwith associated utility functions and classes that generalize the creation of magnetic flux functions and wall and sheath regions- new polynomial expansion and associated
dg::Horner2dfunctor for magnetic flux functions that can in particular approximate any experimental equilibrium - new equilibrium, modifier and description fields for tokamak magnetic fields
- Sign reversal of magnetic field and associated flux functions is now possible
- new utility
dg::geo::createAlignmentTensoranddg::geo::createProjectionTensorwith respect to the magnetic unit vector
- namespace file changed to dg::file and exblas changed to dg::exblas (for consistency reasons, everything should go into the dg namespace, which in particular reduces the chance for name-clashes to just one, namely 'dg')
- Moved variation member function into dg::Elliptic (previously in ArakawaX and Poisson)
- std=c++14 We use the C++-14 standard now (previously 11)
- vectorclass dependency changed to vectorclass/version1 (previously we used a custom upload on feltor-dev repository)
- default cuda compute capability bumped to sm-61 (previously sm-35)
- marconi config now uses jsoncpp module (previously manually installed)
dg::blas1::dotanddg::blas2::dotand corresponding exblas functions now detect NaN and Inf errorsdg::blas1::dotanddg::blas2::dotnow both do not accumulate rest of multiplication (inconsistent before)- All blas1 functions that do not read or alias their result vector now overwrite NaN and Inf
- all our mpi communications on GPUs now fall-back to host2host communication for cuda-unaware mpi-installations
- swapped input and output parameters in
dg::blas1::evaluatefirst subroutine - the fast_interpolation and fast_projection functions now can also double / divide the polynomial coefficient consistent with the grids
- change
shift_topologic()shared RealTopology member functions toshift()and have an additionalnegativeparameter that indicates sign swaps - clarify and unify the behaviour of the interpolation functions when points lie outside the grid boundaries
- split and join functions have an additional real_type template parameter
- improved stopping criterion for
dg::bisection1dfunction - implicit time steppers give access to solver
- multistep time-stepper now initialize with Runge-Kutta timesteppers of corresponding order
- Multigrid nested iteration algorithm now allows accuracies for each stage separately (which can give a significant speed-up)
dg::inverse( bc)function is now a free-standing function to invert a boundary conditiondg::Ellipticclasses now havejump_weightingmember functiondg::CGoperator now has atest-frequencyparameter to control the number of times the error condition is evaluateddg::Extrapolationclass now has aderivemember function to interpolate the derivative of the interpolating polynomial- Adapt all src and diag projects to changed file and json utilities and the moved variation member
- Rename all input files with correct json file-ending
- Complete redesign of src/feltor and src/lamb_dipole
- Merge toefl_hpc with old toefl_mpi program
- bump Doxygen version to 1.8.17
- DS forward, backward, centered and dss functions are now free-standing, only requiring a fielaligned object, plus, and minus applications (this allows to reduce the number of times the plus and minus interpolation has to be applied)
- changed Fieldaligned members hp_inv to hbp
- changed name
dg::forward_transformfunction (previouslydg::create::forward_transform) - new
dg::geo::MagneticFieldParametersstruct to unify the representation of Meta-data in thedg::geo::TokamakMagneticFieldclass (simplifies construction)
dg::Karniadakistime-stepper is now superceded by thedg::ImExMultistepclass
- remove diag/feltordiag.cu
- remove dg::MemoryTraits and associated dimensionality and memory_category traits in favor of direct host_vector and host_grid typedefs in topology classes
- old txt input files
dg::geo::DeltaFunctionanddg::geo::Alphafor the computation of flux-surface averages no longer needed- dg::blas1::transfer (previously marked deprecated)
- Fix bug: race condition in
dg::blas1::dotanddg::blas2::doton GPUs that led to hard to reproduce and seemingly unreasonable crashes - Fix bug: std namespace in diag/probes.h
- Fix bug: const in
exblas::cpu::get_element - Fix bug: correct indices in
exblas::cpu::make_vcl_vec8d - Fix bug: infinite creation of MPI communicators in
exblas::mpi_reduce_communicator. Lead to MPI crashes due to memory overflow. - Fix bug: correct capture of cuda-aware mpi in configuration
- Fix bug: test for no-communication in mpi_communicator.h (indicated false positives)
- Fix bug: coefficient and initialization in
dg::Extrpolate - Fix bug: Fpsi safety-factor in case nan is encountered still works
- Fix bug: Fpsi safety-factor works up to the O-point
- Fix bug:
dg::pushForwardPerpon functors computed wrong result (only affectsdg::geo::Hector) - Fix bug(s): several bugs in
dg::geo::Hectorwhich computed wrong grid (happened probably when we changed the grid design to polymorphic) - Fix bug: in perpendicular grid of MPI Curvlinear grid
- Fix bug: missing direction initialization in mpi fieldaligned class
- Fix bug: host mpi code compiled with nvcc
- Fix bug: non-zero parallel boundary condition in mpi fieldaligned
- Fix bug: GPU symv on X-point grids
- dg::Elliptic3d: a three-dimensional version of dg::Elliptic
- Add 4 parameter symv member to dg::Elliptic class
- dg::Helmholtz3d: a three-dimensional version of dg::Helmholtz
- a 2nd set_chi function in Elliptic allowing a SparseTensor argument
- new member functions for DS
- Adaptive timesteppers through the dg::Adaptive and dg::ERKStep and dg::ARKStep classes in inc/dg/adaptive.h and tests in inc/dg/adaptive_t.cu
- dg::ButcherTableau and dg::ConvertsToButcherTableau in inc/dg/tableau.h
- Add interface to Extrapolation class so that it can take a time variable
- dg::View vector view class in inc/dg/view.h usable in dg::blas1 and dg::blas2 functions (tested in inc/dg/view_t.cu)
- introduce dg::assign and dg::construct that replace the dg::transfer functions and have increased flexibility through an additional template parameter pack
- dg::tensor::inv_multiply3d and dg::tensor::inv_multiply2d functions
- Add unified typedefs for geometry, matrix, container and value types in dg library classes
- Add more ContainerType template parameters to ArakawaX, CG, Invert, Elliptic and Helmholtz class members
- Add set_chi member to ArakawaX to allow for an optional prefactor (like the magnetic field)
- Additional constructors in BijectiveComm consistent with SujectiveComm
- Add consistency test to mpi_collective_mpit.cu
- copyable member function in CG, Invert, RungeKutta, AdamsBashforth and Karniadakis
- float overloads of dg::one and dg::zero functions
- Add trivial 2d and 3d operator() for most 1d functors in functors.h
- New subroutines in subroutines.h
- Add shift_topologic member to RealTopology overriding boundary conditions
- Redesign: dg::AB now named dg::AdamsBashforth and stages not a template parameter any more (changed src/lamb_dipole/shu_time.cu accordingly)
- Redesign: dg::RK now named dg::RungeKutta and stages not a template parameter any more
- stepperRK does not need a stage template parameter any more
- Redesign dg::SparseTensor and all associated dg::tensor functions; (Not allowing unset values significantly reduces complexity and especially allows easy and fast implementation of dg::tensor::multiply2d and dg::tensor::multiply3d in terms of dg::blas1::subroutine)
- Change construction of Metric and Jacobian in grid geometries and implementation of dg::pushForward transformation functions
- Change grids() method interface of Multigrid class to grid(unsigned) and adapt this in all programs using it (now we completely avoid exposing ClonePtr to users)
- Reimplement and merge src/feltor with src/asela
- Reimplement src/heat project
- experimental use of adaptive timestepper in src/toeflR.cu and src/toeflR.cuh
- change folder name from inc/dg/geometry to inc/dg/topology (mainly to avoid clashes with the new inc/dg/geometries) and adapt include directives accordingly
- dg::split now creates vector views instead of hard copies
- default constructor of MPI_Vector constructs empty communicator instead of MPI_COMM_WORLD
- set_communicator in MPI_Vector takes three arguments now to avoid group creation
- cuda-aware mpi no longer a requirement, fall-back to traditional mpi implemented
- rewrite feltordiag.cu merging ncdiag and filamentdiag
- Remove container argument from dg::geo::SafetyFactor constructor (Since it always takes Alpha)
- More general interface for geometries/init.h functors including Nprofile and ZonalFlow (Old Psi functors are now regular functors)
- Rename BinaryFunctors to CylindricalFunctors (they are not only binary after all) and change files in inc/geometries accordingly
- Rewrite dg::ClonePtr as a true pointer class and adapt memory_t.cu
- dg::pushForwardPerp for tensors uses SparseTensor as output argument
- interface for DS
- boundary condition implementation of Fieldaligned (reflected in parallel.pdf)
- boundary conditions in interpolation functions due to Fieldaligned
- better test programs ds_t.cu, ds_curv_t.cu and ds_guenther_t.cu including corresponding *mpit.cu programs
- FieldR, FieldZ and FieldP are now named BFieldR, BFieldZ and BFieldP
- change default optimization to -O2 due to gcc-7 bug
- replace use of dg::transfer with either dg::assign or dg::construct throughout the dg library
- improve 3d benchmark functionality in cluster_mpib.cu
- add hasXpoint() and default parameters to solovev::parameter
- add map_index to NearestNeighborComm to signify responsibility of mapping matrix indices to buffer indices
- Optimization: implement fast EllSparseBlockMat kernel for z derivative
- Optimization: change buffer layout in dg::NearestNeighborComm and CooSparseBlockMat kernels to avoid slow scatter/gather operations in mpi matrix-vector multiplication
- Optimization: implement faster kernels for CooSparseBlockMat symv kernel to accelerate mpi symv with low computation to communication ratio
- separate modification of fluxfunctions into mod namespace that works on flux functions in general (previously only solovev)
- dg::blas1::transfer (replaced by the more general dg::assign and dg::construct)
- the header geometries/geometries.h (now dg/geometries/geometries.h is preferred for unified access and easier recognition as a dg header file)
- the header file/nc_utilities.h ( now dg/file/nc_utilities.h is preferred for unified access and easier recognition as a dg header file)
- the Helmholtz2 class (it's much faster to use Helmholtz twice)
- diag/filamentdiag.cu and diag/ncdiag.cpp (merged into feltordiag.cu)
- src/asela and src/asela2d (now merged into src/feltor and src/feltor2d)
- src/feltor2D (now merged in src/feltor project as an input parameter)
- src/feltor/feltor.cu (not really useful any more with our adatpive Timesteppers as we don't need to find suitable timesteps anymore)
- src/feltor/feltor_mpi.cu (now merged into feltor_hpc.cu)
- BinaryFunctorAdapter and aCloneableBinaryFunctor ( we now use the better CylindricalFunctor based on std::function to do the type erasure)
- TensorElliptic, GeneralElliptic and GeneralEllipticSym classes ( superceded by Elliptic3d)
- inc/geometries/ds_geom_t.cu and ds_guenther_b.cu (superceded by better test programs)
- dg::SparseElement (it's more intuitive and practical to use a container directly and the performance gain is negligeable)
- src/heat/init.h
- dg::join (no longer necessary because split works on views)
- fix bug in diag/reco2Ddiag.cu regarding DVec in interpolation
- fix bug in src/reco2D/reconnection_mpi.cu regarding output
- fix bug in src/polar/polar.cu regarding DVec in interpolation function
- fix bug of too many constructor parameters in BathRZ constructor in src/feltorShw/feltur.cu, feltorShw/feltor_hpc.cu, feltorShw/feltor_mpi.cu, inc/dg/bathRZ_t.cu
- fix bug in src/feltorSHp/feltor_hpc.cu regarding step function in timestepper
- fix bug in inc/dg/backend/exblas/mylibm.hpp regarding msvc preprocessor
- fix bug in dg::Histogramm: remove DG_DEVICE from operator()
- change parameter type in members of aCommunicator and NearesNeighborComm to pointer types to allow different container types in blas2 functions for mpi vectors too
- fix bug in GeneralComm global_scatter_reduce member initializing values to zero and adding local_size to constructor
- geometries functors can now be used as std::function (by removing the clone method)
- geometries/geometries.h and file/nc_utilities.h headers are now also includable by multiple translation units