All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
We agreed to updating the master branch on feltor-dev/feltor very seldomnly and only when significant changes merit the effort to brush everything up, document and make everyone update their codes as well. We mark those updates with a (pre-)release tag on github.
Creating a release on github will create an associated archived version on zenodo, so we reserve releases for when we publish an article.
We kind of make up our own version numbers right now. 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. Semantiv versioning might serve as a guideline but we are far away from strictly following it really.
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.
- A left looking sparse inverse preconditioner
dg::sainv_precond
(sadly did not yield any benefits overdg::nested_iterations
in our tests so we did not implement an MPI version) dg::blas2::parallel_for
for general parallelization tasks on shared memory containers (very close in functionality tokokkos::parallel_for
dg::blas2::stencil
A generalization ofdg::blas2::parallel_for
that 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_stencil
anddg::create::limiter_stencil
overloaded for various topologies for use as communication stencils indg::blas2::stencil
- Functors
dg::CSRSlopeLimiter
,dg::CSRMedianFilter
,dg::CSRSWMFilter
,dg::CSRAverageFilter
,dg::CSRSymvFilter
for use as functors indg::blas2::stencil
isLocalBijective
method indg::SurjectiveComm
- write access to
inner_matrix
andouter_matrix
indg::MPI_Matrix
MPI_Comm
parameter in constructor ofdg::NearestNeighborComm
set_right_size
andset_left_size
methods indg::EllSarseBlockMat
dg::Elliptic1d
(since we have 2d and 3d versions)dg::Sign
a 1d functor that returns the sign of its argumentdg::GeneralHelmholtz
generalizes all the Helmholtz classes into one class (and specializes todg::Helmholtz1d
,dg::Helmholtz
,dg::Helmholtz2d
,dg::Helmholtz3d
- Experimental
dg::FilteredERKStep
class (sadly does not work so well) n
method to access number of polynomial coefficients indg::DLT
dg::create::fast_transform
for creating block diagonal matrices on various topologies- overloads for
dg::create::fast_interpolation
anddg::create::fast_projection
to select directions - new fem functionality:
dg::create::fem_linear2const
,dg::create::inv_fem_mass
dg::create::inv_fem_linear2const
,dg::create::fem_mass2d
,dg::create::inv_fem_mass2d
,dg::create::fem_linear2const2d
,dg::create::inv_fem_linear2const2d
dg::create::interpolation
anddg::create::projection
functions now all have amethod
parameter (that defaults to "dg")dg::invert
overload acting ondg::Operator
as an alias todg::create::inverse
dg::create::backproject
anddg::create::inv_backproject
for projecting a dG grid vector to an equidistant grid and backdg::create::inv_backscatter
for inverting an interpolation to an equidistant griddg::convertGlobal2LocalRows
anddg::convertLocal2GlobalCols
helper functions to enable mpi conversion of column distributed matricesaccess_string
method indg::file::WrappedJsonValue
to access creation history of an object- Restructure of
dg::geo::Fieldaligned
to 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::DS
the derivative methods now have the general zero transform dg::geo::createCircularField
has now two radii parameter to allow for the creation of an ellipsis and changed the signdg::geo::SeparatrixOrthogonalAdaptor
to 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::ConvertsToFunctionalButcherTableau
with the four methods "Euler", "Midpoint-2-2", "Runge-Kutta-4-4", and "Hochbruck-3-3-4" - Utility function
dg::mat::MatrixFunction
for easy general purpose use - Test of filters and Limiters and implicit timesteppers in the
src/lamb_dipole
project - Test of new schemes in
src/navier_stokes
project - File
src/toefl/input/default_hpc.json
to 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_filter
no longer returns adg::MultiMatrix
directly. Instead, adg::Operator
is returned that can be converted todg::MultiMatrix
usingdg::create::fast_transform
- rename
getLocalGatherMap
togetLocalIndexMap
indg::SurjectiveComm
anddg::GeneralComm
- rename
getPidGatherMap
togetPidIndexMap
indg::SurjectiveComm
anddg::GeneralComm
- rename
getSortedGatherMap
togetSortedIndexMap
indg::SurjectiveComm
- Constructors of
dg::Helmholtz
, anddg::Helmholtz3d
change the orders of parameteralpha
and reverts to constructor of respectivedg::Elliptic
class - 1d overloads for
dg::create::fast_interpolation
anddg::create::fast_projection
returndg::HMatrix_t
instead ofdg::MultiMatrix
dg::create::fem_mass
now returnsdg::TriDiagonal
instead ofcusp::coo_matrix
dg::create::precond
overload fordg::DLT
renamed todg::create::inv_weights
- parameters to
dg::tensorproduct
changed fromcusp::coo_matrix
tocusp::csr_matrix
- all appearances of
guenther
orGuenther
indg::geo
are corrected toguenter
respectivelyGuenter
(because that is how her name is spelled) clone
and 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::SimpleOrthogonal
haveoverride final
keywords- default parameters changed in
dg::geo::Fieldaligned
constructor - restructure of the
src/feltor
project (including renaming*.cu
files to*.cpp
)
dg::geo::createModifiedSolovevField
is superseded bydg::geo::make_field
dg::ModalFilter
is removed in favor of generating and usingdg::MultiMatrix
directlydg::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::integrate
replaced bydg::aTimeloop
functionalitydg::integrateERK
replaced bydg::aTimeloop
functionalitydg::stepperRK
replaced bydg::aTimeloop
functionality
- Fix left shift in exblas::AccumulateWord by -1 by explicit conversion to unsigned
- Fix
isCommunicating
indg::BijectiveComm
- Fix
global_gather
andglobal_scatter_reduce
indg::aCommunicator
in 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::ShuOsher
copyable method segmentation fault in case of default constructed - Fix size method in
dg::Operator
for integer value types - Fix convergence criterion in fieldline integrator for
dg::geo::SimpleOrthogonal
- Fix constructor of
dg::mat::PolCharge
anddg::mat::PolChargeN
- Add ability to use lambdas and functors without
dg::TensorTraits
indg::apply
,dg::blas2::symv
anddg::blas2::gemv
(Extremely useful!) - Add
--extended-lambda
flag in defaultNVCCFLAGS
- New class
dg::file::WrappedJsonValue
plus test file; allows easy bug-tracing on jsoncpp file input - Allow arbitrary
nx, ny, nz
polynomial number in all grids; adapt all weights, derivatives, etc. creation accordingly - New sub-project
dg/matrix/matrix.h
written by Markus and optimized by Matthias. Allows matrix-function computations in particular square roots CONTRIBUTING.md
file (moved from homepage)LAPACKLIB
variable in Makefile configuration- new
device=cpu
configuration (enable to compile without parallelization) - new file
config/version.mk
provides git hash and branch information for file output - new wall and sheath generation capabilities in
inc/geometries
- new
dg::aTimeloop
family 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::map
inblas1
functions - 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_program
function - Add more cuda Error management in backend functions
- Add convenience
dg::mpi_init
function - Matrix conversion from
dg::EllSparseBlockMat
tocusp::coo_matrix
and associateddg::tensorproduct
anddg::create::diagonal
function to re-create elliptic operators - Add convenience mpi Macro
DG_RANK0
helping to write shared/mpi programs more easily - Add new multigrid implementation
dg::nested_iterations
for maximum modularity, sovlers can be separately chosen at each stage - Add experimental and preliminary FEM support
- Add
dg::least_squares
function - project
esol
Edge-SOL turbulence in Full-F models - project
poet
Full-F Full-K blob simulations - project
navier_stokes
3d 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::symv
anddg::blas2::gemv
are now formally the samedg::PCG
works with self-adjoint matrices in weights instead of symmetric ones- Renamed
dg::lr_pivot
todg::lu_pivot
and make it use binary reproducible dot functions, same fordg::lu_solve
- Rename
dg::create::invert
todg::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
src
projects to new semi-implicit timestepper interface - Redesign DS and all related projects
- Rename
inc/geometries/magnetic_field_t.cu
toinc/geometries/solovev_t.cu
dg::integrateERK
replaced bydg::aTimeloop
functionalitydg::stepperRK
replaced bydg::aTimeloop
functionality
dg::FilteredImplicitMultistep
; barely any theory behind thatdg::Karniadakis
was marked deprecated before- "Verner-8-5-6" Timestepper tableau
dg::norm
; Everything is normed now; adapt all codes to it; specifically also makesinv_weights
andinv_volume
functions 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 withimpurities
project - project
src/polar
; Useless - project
src/impurities
; outsourced tohttps://github.com/mwiesenberger/impurities
nc_enddef
andnc_redef
calls; 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.cu
merged intoflux_t.cu
- fix bug from linking
-lhdf5
by linking-lhdf5_serial
in default.mk - fix bug nvcc did not compile
.cpp
programs now it does - fix bugs in
dg::AndersonAcceleration
- fix bugs in
dg::LGMRES
- fix bugs in
dg::BICGSTABl
- fix bug in
exblas/accumulate.cuh
andexblas/accumulate.h
- fix bug in
dg::ClonePtr
copy-constructor - fix bug symv call to CooMatrix in
mpi_matrix.h
- fix NaN bugs in
dg::blas2::symv
even thoughbeta == 0
- fix nvcc compiler warnings when using host lambdas in
dg::blas1
functions - fix tableau Tsitouras11-7-4-5
- M100 config file
- json utility functions
dg::file::get, dg::file::get_idx
indg/file/json_utilities.h
which 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::string2Json
in 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.h
anddg/exblas/exblas.h
- new class
dg::Gradient
for gradient - new class
dg::Advection
for the upwind advection scheme - new
dg::blas1::reduce
function 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::Average
computation, which is beneficial for GPU computing - add
dg::integrate
that computes an indefinite integral of a function (essentially the opposite of the derivative) - add
dg::ModalFilter
and tests thereof - new
dg::compose
function that concatenates two or more functors to one - add
dg::cooRZP2X
coordinate transformation functions to easily transform between Cylindrical and Cartesian coordinates - interpolate function has an additional
dg::space
parameter to indicate nodal or modal values - Grid classes now have
host_vector
andhost_grid
member typedefs - new tensor functions
dg::tensor::scalar_product2d
anddg::scalar_product3d
that can compute uE2 in one go - new extended tensor functions
dg::tensor::multiply2d
anddg::multiply3d
that can compute uE2 in one go - new single step timestepper
dg::ShuOsher
including newdg::ShuOsherTableau
anddg::ConvertsToShuOsherTableau
classes 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::DIRKStep
anddg::ImplicitRungeKutta
- Redesign of multistep time steppers consistent with Runge-Kutta ones in terms of
dg::MultistepTableau
anddg::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::EVE
that computes the largest Eigenvalue of a matrix (courtesy of Eduard Reiter) - new class
dg::ChebyshevIterations
anddg::ChebyshevPreconditioner
(for chebyshev iterations) - new solvers
dg::LGMRES
,dg::BICGSTABL
, and dg::AndersonAcceleration
(courtesy of Aslak Poulsen) - new
dg::FixedPointSolver
anddg::AndersonSolver
for nonlinear problems in time - a host of new functors for the evaluate and pullback functions
dg::geo::FluxSurfaceIntegral
,dg::geo::FluxVolumeIntegral
anddg::geo::SafetyFactorAverage
classes- new implementation:
dg::geo::ds_centered_bc_along_field
anddg::geo::dss_centered_bc_along_field
that implement boundary condition "Stegmeir" style along the magnetic field lines - new Fieldaligned member functions
integrate_between_coarse_grid
andinterpolate_from_coarse_grid
that allow field-aligned interpolations dg::geo::Periodify
class anddg::geo::periodify
function to extend flux-functions periodically beyond grid boundaries- new
dg::geo::findCriticalPoint
function that generalizes X-point and O-point identification - new classes
dg::geo::SquareNorm
anddg::geo::ScalarProduct
that work on cylindrical vector fields - new set utility functors
dg::geo::SetUnion
,dg::geo::SetIntersection
, anddg::geo::SetNot
that help construct damping regions dg::geo::createMagneticField
anddg::geo::createModifiedField
with associated utility functions and classes that generalize the creation of magnetic flux functions and wall and sheath regions- new polynomial expansion and associated
dg::Horner2d
functor 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::createAlignmentTensor
anddg::geo::createProjectionTensor
with 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::dot
anddg::blas2::dot
and corresponding exblas functions now detect NaN and Inf errorsdg::blas1::dot
anddg::blas2::dot
now 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::evaluate
first 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 additionalnegative
parameter 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::bisection1d
function - 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::Elliptic
classes now havejump_weighting
member functiondg::CG
operator now has atest-frequency
parameter to control the number of times the error condition is evaluateddg::Extrapolation
class now has aderive
member 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_transform
function (previouslydg::create::forward_transform
) - new
dg::geo::MagneticFieldParameters
struct to unify the representation of Meta-data in thedg::geo::TokamakMagneticField
class (simplifies construction)
dg::Karniadakis
time-stepper is now superceded by thedg::ImExMultistep
class
- 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::DeltaFunction
anddg::geo::Alpha
for the computation of flux-surface averages no longer needed- dg::blas1::transfer (previously marked deprecated)
- Fix bug: race condition in
dg::blas1::dot
anddg::blas2::dot
on 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::pushForwardPerp
on functors computed wrong result (only affectsdg::geo::Hector
) - Fix bug(s): several bugs in
dg::geo::Hector
which 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