Trixi.jl follows the interpretation of semantic versioning (semver) used in the Julia ecosystem. Notable changes will be documented in this file for human readability.
- New time integrator
PairedExplicitRK3
, implementing the third-order paired explicit Runge-Kutta method with Convex.jl, ECOS.jl, and NLsolve.jl ([#2008])
- Boundary conditions are now supported on nonconservative terms ([#2062]).
- We removed the first argument
semi
corresponding to aSemidiscretization
from theAnalysisSurfaceIntegral
constructor, as it is no longer needed (see [#1959]). TheAnalysisSurfaceIntegral
now only takes the argumentsboundary_symbols
andvariable
. ([#2069]) - In functions
rhs!
,rhs_parabolic!
we removed the unused argumentinitial_condition
. ([#2037]) Users should not be affected by this. - Nonconservative terms depend only on
normal_direction_average
instead of bothnormal_direction_average
andnormal_direction_ll
, such that the function signature is now identical with conservative fluxes. This required a change of thenormal_direction
influx_nonconservative_powell
([#2062]).
- The AMR routines for
P4estMesh
andT8codeMesh
were changed to work on the product of the Jacobian and the conserved variables instead of the conserved variables only to make AMR fully conservative ([#2028]). This may change AMR results slightly. - Subcell (IDP) limiting is now officially supported and not marked as experimental
anymore (see
VolumeIntegralSubcellLimiting
).
- The specification of boundary names on which
AnalysisSurfaceIntegral
s are computed (such as drag and lift coefficients) has changed fromSymbol
andVector{Symbol}
toNTuple{Symbol}
. Thus, for one boundary the syntax changes from:boundary
to(:boundary,)
and forVector
s[:boundary1, :boundary2]
to(:boundary1, :boundary2)
([#1959]). - The names of output files like the one created from the
SaveSolutionCallback
have changed from%06d
to%09d
to allow longer-running simulations ([#1996]).
- Implementation of
TimeSeriesCallback
for curvilinear meshes onUnstructuredMesh2D
and extension to 1D and 3D onTreeMesh
([#1855], [#1873]). - Implementation of 1D Linearized Euler Equations ([#1867]).
- New analysis callback for 2D
P4estMesh
to compute integrated quantities along a boundary surface, e.g., pressure lift and drag coefficients ([#1812]). - Optional tuple parameter for
GlmSpeedCallback
calledsemi_indices
to specify for which semidiscretization of aSemidiscretizationCoupled
we need to update the GLM speed ([#1835]). - Subcell local one-sided limiting support for nonlinear variables in 2D for
TreeMesh
([#1792]). - New time integrator
PairedExplicitRK2
, implementing the second-order paired explicit Runge-Kutta method with Convex.jl and ECOS.jl ([#1908]) - Add subcell limiting support for
StructuredMesh
([#1946]).
- The default wave speed estimate used within
flux_hll
is nowmin_max_speed_davis
instead ofmin_max_speed_naive
.
- Some specialized shallow water specific features are no longer available directly in
Trixi.jl, but are moved to a dedicated repository: TrixiShallowWater.jl. This includes all features related to wetting and drying, as well as the
ShallowWaterTwoLayerEquations1D
andShallowWaterTwoLayerEquations2D
. However, the basic shallow water equations are still part of Trixi.jl. We'll also be updating the TrixiShallowWater.jl documentation with instructions on how to use these relocated features in the future.
- AMR for hyperbolic-parabolic equations on 3D
P4estMesh
flux_hllc
on non-cartesian meshes forCompressibleEulerEquations{2,3}D
- Different boundary conditions for quad/hex meshes in Abaqus format, even if not generated by HOHQMesh, can now be digested by Trixi in 2D and 3D.
- Subcell (positivity) limiting support for nonlinear variables in 2D for
TreeMesh
- Added Lighthill-Whitham-Richards (LWR) traffic model
- AMR for hyperbolic-parabolic equations on 2D
P4estMesh
- The wave speed estimates for
flux_hll
,FluxHLL()
are now consistent across equations. In particular, the functionsmin_max_speed_naive
,min_max_speed_einfeldt
are now conceptually identical across equations. Users, who have been usingflux_hll
for MHD have now to useflux_hlle
in order to use the Einfeldt wave speed estimate. - Parabolic diffusion terms are now officially supported and not marked as experimental anymore.
- The neural network-based shock indicators have been migrated to a new repository
TrixiSmartShockFinder.jl.
To continue using the indicators, you will need to use both Trixi.jl and
TrixiSmartShockFinder.jl, as explained in the latter packages'
README.md
.
- Experimental support for 3D parabolic diffusion terms has been added.
- Non-uniform
TreeMesh
available for hyperbolic-parabolic equations. - Capability to set truly discontinuous initial conditions in 1D.
- Wetting and drying feature and examples for 1D and 2D shallow water equations
- Implementation of the polytropic Euler equations in 2D
- Implementation of the quasi-1D shallow water and compressible Euler equations
- Subcell (positivity and local min/max) limiting support for conservative variables
in 2D for
TreeMesh
- AMR for hyperbolic-parabolic equations on 2D/3D
TreeMesh
- Added
GradientVariables
type parameter toAbstractEquationsParabolic
- The required Julia version is updated to v1.8 in Trixi.jl v0.5.13.
- The macro
@unpack
(re-exported originally from UnPack.jl) is deprecated and will be removed. Consider using Julia's standard destructuring syntax(; a, b) = stuff
instead of@unpack a, b = stuff
. - The constructor
DGMultiMesh(dg; cells_per_dimension, kwargs...)
is deprecated and will be removed. The new constructorDGMultiMesh(dg, cells_per_dimension; kwargs...)
does not havecells_per_dimesion
as a keyword argument.
- Migrate neural network-based shock indicators to a new repository TrixiSmartShockFinder.jl.
- Compile-time boolean indicators have been changed from
Val{true}
/Val{false}
toTrixi.True
/Trixi.False
. This affects user code only if new equations with nonconservative terms are created. ChangeTrixi.has_nonconservative_terms(::YourEquations) = Val{true}()
toTrixi.has_nonconservative_terms(::YourEquations) = Trixi.True()
. - The (non-exported) DGSEM function
split_form_kernel!
has been renamed toflux_differencing_kernel!
- Trixi.jl updated its dependency P4est.jl
from v0.3 to v0.4. The new bindings of the C library
p4est
have been generated using Clang.jl instead of CBinding.jl v0.9. This affects only user code that is interacting directly withp4est
, e.g., because custom refinement functions have been passed top4est
. Please consult the NEWS.md of P4est.jl for further information.
- The signature of the
DGMultiMesh
constructors has changed - thedg::DGMulti
argument now comes first. - The undocumented and unused
DGMultiMesh(triangulateIO, rd::RefElemData{2, Tri}, boundary_dict::Dict{Symbol, Int})
constructor was removed.
- Everything deprecated in Trixi.jl v0.4.x has been removed.
- Implementation of linearized Euler equations in 2D
- Experimental support for upwind finite difference summation by parts (FDSBP)
has been added in Trixi.jl v0.4.55. The first implementation requires a
TreeMesh
and comes with several examples in theexamples_dir()
of Trixi.jl. - Experimental support for 2D parabolic diffusion terms has been added.
LaplaceDiffusion2D
andCompressibleNavierStokesDiffusion2D
can be used to add diffusion to systems.LaplaceDiffusion2D
can be used to add scalar diffusion to each equation of a system, whileCompressibleNavierStokesDiffusion2D
can be used to add Navier-Stokes diffusion toCompressibleEulerEquations2D
.- Parabolic boundary conditions can be imposed as well. For
LaplaceDiffusion2D
, bothDirichlet
andNeumann
conditions are supported. ForCompressibleNavierStokesDiffusion2D
, viscous no-slip velocity boundary conditions are supported, along with adiabatic and isothermal temperature boundary conditions. See the boundary condition containerBoundaryConditionNavierStokesWall
and boundary condition typesNoSlip
,Adiabatic
, andIsothermal
for more information. CompressibleNavierStokesDiffusion2D
can utilize both primitive variables (which are not guaranteed to provably dissipate entropy) and entropy variables (which provably dissipate entropy at the semi-discrete level).- Please check the
examples
directory for further information about the supported setups. Further documentation will be added later.
- Numerical fluxes
flux_shima_etal_turbo
andflux_ranocha_turbo
that are equivalent to their non-_turbo
counterparts but may enable specialized methods making use of SIMD instructions to increase runtime efficiency - Support for (periodic and non-periodic) SBP operators of
SummationByPartsOperators.jl
as approximation type in
DGMulti
solvers - Initial support for MPI-based parallel simulations using non-conforming meshes of type
P4estMesh
in 2D and 3D including adaptive mesh refinement
- The
VertexMappedMesh
type is removed in favor of theDGMultiMesh
type. TheVertexMappedMesh
constructor is deprecated.
- The required Julia version is updated to v1.7.
- The isentropic vortex setups contained a bug that was fixed in Trixi.jl v0.4.54. Moreover, the setup was made a bit more challenging. See #1269 for further information.
- The
DGMultiMesh
constructor which uses ard::RefElemData
argument is deprecated in favor of the constructor which uses adg::DGMulti
argument instead.
- Experimental support for artificial neural network-based indicators for shock capturing and adaptive mesh refinement ([#632])
- Experimental support for direct-hybrid aeroacoustics simulations ([#712])
- Implementation of shallow water equations in 2D
- Experimental support for interactive visualization with Makie.jl
- Implementation of acoustic perturbation equations now uses the conservative form, i.e. the
perturbed pressure
p_prime
has been replaced withp_prime_scaled = p_prime / c_mean^2
. - Removed the experimental
BoundaryConditionWall
and instead directly compute slip wall boundary condition flux term using the functionboundary_condition_slip_wall
. - Renamed
advectionvelocity
inLinearScalarAdvectionEquation
toadvection_velocity
. - The signature of indicators used for adaptive mesh refinement (AMR) and shock capturing changed to generalize them to curved meshes.
- Many initial/boundary conditions and source terms for typical setups were
moved from
Trixi/src
to the example elixirsTrixi/examples
. Thus, they are no longer available whenusing Trixi
, e.g., the initial condition for the Kelvin Helmholtz instability. - Features deprecated in v0.3 were removed.
- Support for automatic differentiation, e.g.
jacobian_ad_forward
- In-situ visualization and post hoc visualization with Plots.jl
- New systems of equations
- multicomponent compressible Euler and MHD equations
- acoustic perturbation equations
- Lattice-Boltzmann equations
- Composable
FluxPlusDissipation
andFluxLaxFriedrichs()
,FluxHLL()
with adaptable wave speed estimates were added in [#493] - New structured, curvilinear, conforming mesh type
StructuredMesh
- New unstructured, curvilinear, conforming mesh type
UnstructuredMesh2D
in 2D - New unstructured, curvilinear, adaptive (non-conforming) mesh type
P4estMesh
in 2D and 3D - Experimental support for finite difference (FD) summation-by-parts (SBP) methods via SummationByPartsOperators.jl
- New support for modal DG and SBP-DG methods on triangular and tetrahedral meshes via StartUpDG.jl
flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations2D)
andflux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations3D)
were actually using the logic offlux_godunov
. Thus, they were renamed accordingly in [#493]. This is considered a bugfix (released in Trixi.jl v0.3.22).- The required Julia version is updated to v1.6.
calcflux
→flux
([#463])flux_upwind
→flux_godunov
flux_hindenlang
→flux_hindenlang_gassner
- Providing the keyword argument
solution_variables
ofSaveSolutionCallback
asSymbol
is deprecated in favor of using functions likecons2cons
andcons2prim
varnames_cons(equations)
→varnames(cons2cons, equations)
varnames_prim(equations)
→varnames(cons2prim, equations)
- The old interface for nonconservative terms is deprecated. In particular, passing
only a single two-point numerical flux for nonconservative is deprecated. The new
interface is described in a tutorial. Now, a tuple of two numerical fluxes of the
form
(conservative_flux, nonconservative_flux)
needs to be passed for nonconservative equations, see [#657].