- FP32 solver mode
- Interpolation based velocity recycling
- Ascent in situ visualisation plugin
- iofld class reading/writing field files including ADIOS2 support
- Addtional output options (element filter and interpolation on uniform grid / different polynomial-order)
- Multi session nek-nek including multi-rate time stepping
- CHT nek-nek support
- nek-nek support for nrsqsub scripts
- Improved JIT compilation performance
- HIP support for BoomerAMG
- Intel GPU support
- Aero forces
- opSEM class
- Mesh surface ops
- Linear implicit velocity source term
- Combined CG for improved performance
- Various bug fixes
- AmgX is no longer available use HYPRE instead
nek::userchk
is no longer called automatically during setup- [reproducibility] variable time step controller restricts dt to 5 significant digits
- send signal (defined in env-var
NEKRS_SIGNUM_UPD
) to process trigger filenekrs.upd
(no automatic check every N steps) - after fixing a bug in the linear solver residual norm, iteration counts have increased compared to previous versions
This list provides an overview of the most significant changes in this release, although it may not encompass all modifications. We acknowledge that this release introduces several breaking changes. These adjustments were essential to enhance the stability of the user interface in future iterations. We apologize for any inconvenience this may cause.
- call
build.sh
instead ofnrsconfig
to build the code - change par section
TEMPERATURE
toSCALAR00
in case it does not represent a physical temperature - use
codedFixedValueScalar
instead ofscalarDirichletConditions
(same for velocity) - use
codedFixedGradientScalar
instead ofscalarNeumannConditions
(same for velocity) - use
nrs->copyToNek
instead of ``nek::copyToNek` (same for all other variants) - use
auto foo = platform->o_memPool.reserve<T>(nWords)
instead of preallocated slices ofocca::memory::o_mempool
- change count argument of
occa::memory::slice, occa::memory::copyFrom, occa::memory::copyTo
to number of words instead of bytes - pass
const occa::memory&
instead ofconst void*
towriteFld
time
in all UDF APU funcrtions is nowdouble
instead of dfloat- remove
nrs_t
argument from UDF API functions (nrs object is now globally accessible within udf if the Navier Stokes solver is enabled) - use
nrs_t::userProperties = std::function<void(double)>
instead ofudf::properties = std::function<void(nrs_t *, dfloat, occa::memory, occa::memory, occa::memory, occa::memory)>
nrs_t::userVelocitySource = std::function<void(double)>
->udf::uEqnSource = std::function<void(nrs_t *, dfloat, occa::memory, occa::memory)>
nrs_t::userScalarSource = std::function<void(double)>
->udf::sEqnSource = std::function<void(nrs_t *, dfloat, occa::memory, occa::memory)>
nrs_t::userConvergenceCheck = std::function<bool(int)>
->udf::udfconv = std::function<int(nrs_t *, int)>
nrs_t::userDivergence = std::function<void(double)>
->udf::udfdif = std::function<void(nrs_t *, dfloat, occa::memory)>
tavg::setup(dlong fieldOffset, const fields& fields)
->tavg::setup(nrs_t*)
planarAvg(mesh_t*, const std::string&, int, int, int, int, dlong, occa::memory o_avg)
->postProcessing::planarAvg(nrs_t*, const std::string&, int, int, int, int, occa::memory)
- use
nrs->o_NLT
instead ofnrs->o_FU
- use
cds->o_NLT
instead ofcds->o_FS
::postProcessing
functions are now members ofnrs_t
(except planarAvg)- access
nekrs::nrsPtr
throughnekrs::platform()
- use
nekrs_registerPtr
instead of common blocks NRSSCPTR / SCNRS in usr file and access them usingnek::ptr
in udf - use
deviceKernel
,deviceKernelProperties
,deviceMemory
,poolDeviceMemory
instead ofocca::
(consult examples for more details) - remove
nrs_t
argument from<plugin>::setup
- use pay key
avm+highestModalDecay
instead ofavm+hpfResidual
nrs->isOutputStep
->nrs->isCheckpointStep
pointInterpolation_t::setPoints
now takes std::vector instead of raw pointers and number points are determined on the vector size- use
iofld
instead ofwriteFld
@kris-rowe, @yslan, @MalachiTimothyPhillips, @tcew
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.
- Lagrangian phase model (one-way coupling)
- Overset grids (neknek)
- Particle tracking
- Single source udf+oudf
- Device support BoomerAMG
- Improved runtime statistics
- 4th-kind Chebyshev smoothers
- Configureable time averaging
- Extrapolation initialGuess method
- Scaleable JIT compilation
- Real gas support for lowMach
- More examples
- Various bug fixes
- [udf] Changes in include files do not trigger a rebuild automatically
- [udf] Plugins kernels will be loaded automatically (call in
UDF_LoadKernels
no longer required)
- [nrsconfig] Ensure env-vars
CC
,CXX
andFC
point to the correct MPI compiler wrappers (see README.md for an example) - [udf] Plugin header files need to be included explicitly
- [udf] Rename
bc->wrk
=>bc->usrwrk
- [udf] Update to new API of lowMach plugin (see lowMach example)
- Time step was added to
nekRS::outfld(..., int step, ...)
- [par] Use
pMGSchedule
instead ofpMultigridCoarsening
(see help for more details) - [par] Rename writeControl value
runTime
=>simulationTime
- [par] Remove multigrid qualifier
coarse
- [par] Remove SEMFEM solver specification from key
preconditioner
, usesemfemSolver
instead - [par] Replace
stressFormulation = true
byequation = navierStokes+variableViscosity
- [par] Replace bcType
fixedValue
bycodedFixedValue
- [par] Replace
elasticity
bypcg+block
for mesh solver - [okl] Replace
@barrier("local")
by@barrier()
- [oudf]
bc
struct membertrn
was removed - Use occa::memory mesh_t objects for vgeo, cubvgeo, ggeom, sgeom, LMM, invLMM (no longer mirrored on host)
- All
boundaryIDs
need to be assigned inboundaryTypeMap
(usenone
for an internal boundary)
@neil-lindquist, @kris-rowe, @pwang234, @nandu90, @yhaomin2007
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.
- Multi-session (uncoupled) support
- Support unaligned symmetry boundary condition
- Support (unaligned) traction boundary condition
- Better performance on AMD MI-GPUs
- FLOP counters
- Various bug fixes
- OpenCL support is now disabled by default
- [udf] Rename
udfBuildKernel
=>oudfBuildKernel
- [par] Separate details of coarse grid discretization from coarse grid solver
e.g.,
coarseSolver = SEMFEM+AmgX
is replaced bycoarseSolver = AmgX
andcoarseGridDiscretization = SEMFEM
- [par] Remove
preconditioner=semg
andpreconditioner=semg_amg
- [udf] Rename plug-in name
avg
=>tavg
- [udf] Rename
udf.converged
=>udf.timeStepConverged
- [nrsconfig] Rename env-var
AMGX_ENABLE
=>ENABLE_AMGX
@tcew, @kris-rowe, @aprilnovak
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.
A special shout out to Tim Warburton at VT for tuning some critical kernels.
- Flexible GMRES
- Constant flow rate
- Time step controller for targetCFL
- Improved runtime statistics
- Support for ROCm version > v4.0
- AVM for scalars
- FEMSEM preconditioner
- Update file (nekrs.upd) for runtime modifications
- Validate key/value input in par
- Various bug fixes
- [par]
preconditioner = multigrid
was replaced bypreconditioner = multigrid+coarse
- [par] Only valid
key/value
pairs will be accepted - [par] Default smootherType is
ASM+Chebyshev+degree=2
(instead of degree=1) - [fld] Only first checkpoint will contain mesh coordinates
- GMRES is now the default linear solver for pressure (higher memory usage)
- [udf] Use std namespace qualifier e.g.
std::cout
instead ofcout
- [udf] Rename
UDF_LoadKernels(nrs_t *nrs)
=>UDF_LoadKernels(occa::properties& kernelInfo)
- [udf] Replace argument
nrs_t *nrs
byocca::properties& kernelInfo
inudfBuildKernel()
,(plugin)::buildKernel()
- [udf]
UDF_LoadKernels(occa::properties& kernelInfo)
is no longer optional - Code crashes (Segmentation fault: invalid permissions) if MPI installation is not GPU aware unless you specify
NEKRS_GPU_MPI=0
in$NEKRS_HOME/nekrs.conf
@RonRahaman, @aprilnovak, @yslan
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.
- Update to latest parRSB version
- Fix restart issue if restart time is non-zero
- Fix io-frequency issue
- Fix JIT issue for lowMach
- Disable gs-timers to prevent performance regression
- ASM and RAS smoother + Chebyshev acceleration
- Improved gs performance
- Initial guess projection
- Runtime averages
- Stress formulation
- ALE formulation to support moving meshes
- Linear algebra helpers
- Various bug fixes
- common block SCRNS was replaced by pointer array NRSSCPTR (see ethier example)
- boundary device functions and bc struct members in oudf were renamed
- manually copying nek's IC in UDF_Setup() is no longer required
- nrs->Nlocal was replaced by mesh->Nlocal
- nrs->options was replaced by platform->options
- nrs->linAlg was replaced by platform->linAlg
- nek_copyFrom() was renamed to nek::copyToNek()
- nek_copyTo() was renamed to nek::copyFromNek()
- cds->fieldOffset was replaced by cds->fieldOffset[i]
- nrs->mesh was replaced by nrs->meshV
- cds->mesh was replaced by cds->mesh[i]
- nrs->meshT was replaced by cds->mesh[0]
- mesh->rank was replaced by platform->comm.mpiRank
- mesh->comm was replaced by platform->comm.mpiComm
- mesh->device was replaced by platform->device
@RonRahaman, @aprilnovak, @roystgnr, @yslan, @pwang234
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.
A special thanks goes to the CAPS Lab at ETHZ who helped to develop the moving mesh support.
- Initial release
- n/a
@AliKarakus, @thilinarmtb, @noelchalmers and @tcew for helping
We are grateful to all who added new features, filed issues or helped resolve them, asked and answered questions, and were part of inspiring discussions.