Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
ef67faa
correct language and general update pass
svchb Mar 9, 2026
a84e50c
improve maths
svchb Mar 9, 2026
1182397
improve the formatting
svchb Mar 9, 2026
54502ee
better overview page
svchb Mar 15, 2026
9d9a040
add
svchb Mar 15, 2026
e211388
Merge branch 'main' into add_tutorial_for_STL_geoms
svchb Mar 15, 2026
1397926
Merge remote-tracking branch 'origin/main' into improve_docs
svchb Mar 19, 2026
b9c01c4
Merge branch 'main' into improve_docs
svchb Mar 19, 2026
daf705a
Merge branch 'main' into improve_docs
svchb Mar 30, 2026
5ae6ea5
Merge branch 'main' into improve_docs
svchb Apr 15, 2026
91ef5c6
Refactor boundary model initialization to use high-level builders for…
svchb Apr 17, 2026
3482840
format
svchb Apr 17, 2026
234d80a
Merge branch 'main' into improve_docs
svchb Apr 27, 2026
cca7c02
Clarify GPU support for devices
svchb Apr 27, 2026
f203727
Merge branch 'main' into improve_docs
svchb Apr 29, 2026
b489783
Merge branch 'main' into api/high-level-boundary-builders
svchb Apr 29, 2026
7d75830
Merge branch 'main' into api/high-level-boundary-builders
svchb May 4, 2026
2d10888
fix regression
svchb May 4, 2026
e926518
format
svchb May 4, 2026
a17bdd8
missing state equation for IISHP
svchb May 4, 2026
4d68c33
Merge branch 'improve_docs' into check_math_in_docs
svchb May 11, 2026
c1ff9b9
Merge branch 'check_math_in_docs' into formatting
svchb May 11, 2026
cfbe73b
Fix custom quantity reductions
svchb May 12, 2026
b34d761
Merge branch 'main' into fix/custom-quantities-active-particles
svchb May 12, 2026
4ad609d
Close 2D geometry curves by default
svchb May 12, 2026
99df83b
Normalize preprocessing point inputs
svchb May 12, 2026
bc478e6
Rebuild geometry data after face deletion
svchb May 12, 2026
09347e4
Avoid NaN normals for degenerate triangles
svchb May 12, 2026
2fc14ac
detect unclosed curves
svchb May 17, 2026
217ca63
add comments
svchb May 17, 2026
495543a
fix
svchb May 17, 2026
f47d55f
fix
svchb May 17, 2026
c382bce
cleanup
svchb May 17, 2026
8433ea1
Fix rectangular shape input handling
svchb May 17, 2026
0b678dd
Fix rectangular tank validation and overlap
svchb May 17, 2026
ca4fe12
Fix complex boundary sampling bounds
svchb May 17, 2026
af3e52a
Validate shape cutout and extrusion inputs
svchb May 17, 2026
700ebcd
Fix open-boundary characteristic zone handling
svchb May 17, 2026
2ffebc9
Validate 3D open-boundary face geometry
svchb May 17, 2026
6927e67
format
svchb May 26, 2026
a895243
Merge branch 'main' into fix/rectangular-shape-inputs
svchb May 26, 2026
eaf401d
Merge branch 'fix/rectangular-shape-inputs' of https://github.com/svc…
svchb May 26, 2026
da0ee32
Merge branch 'main' into fix/rectangular-tank-validation-overlap
svchb May 26, 2026
98a62a0
Merge branch 'main' into fix/complex-shape-sample-boundary
svchb May 26, 2026
75458e4
Merge branch 'main' into fix/setup-shape-extrude-validation
svchb May 26, 2026
c0a73ef
Merge branch 'main' into fix/boundary-zone-geometry-validation
svchb May 26, 2026
6397b86
Merge branch 'main' into fix/open-boundary-characteristics
svchb May 26, 2026
14192e4
review
svchb May 26, 2026
5721f18
review
svchb May 26, 2026
fed6d70
review
svchb May 26, 2026
d40be92
review
svchb May 26, 2026
e1b580e
review
svchb May 26, 2026
4ed8dec
review
svchb May 26, 2026
537edd7
review
svchb May 26, 2026
2c132c8
Fix EDAC restart pressure row
svchb May 26, 2026
d7d71b5
Validate fluid surface tension consistency
svchb May 26, 2026
30c7ba4
Fix IISPH density error accounting
svchb May 26, 2026
691219a
Fix IISPH neighbor coordinate wrapping
svchb May 26, 2026
bb26a60
Reject IISPH EDAC mixing
svchb May 26, 2026
25428e9
Update EDAC correction caches
svchb May 26, 2026
a16e0a4
fix tests
svchb May 27, 2026
82e6d99
Merge branch 'main' into preprocessing/fix-deleteat-geometry-cache-co…
svchb May 27, 2026
6317c25
format
svchb May 27, 2026
3d0974a
Merge branch 'main' into fix/rectangular-shape-inputs
svchb May 27, 2026
0f089a2
Merge remote-tracking branch 'upstream/main' into add_tutorial_for_ST…
svchb Jul 6, 2026
bed33ff
fix
svchb Jul 6, 2026
6583c15
fix geom
svchb Jul 6, 2026
4f8d3e3
format
svchb Jul 7, 2026
9bcf0ec
fix docs
svchb Jul 7, 2026
ae4b14b
fixes
svchb Jul 7, 2026
5131cd0
Merge remote-tracking branch 'upstream/main' into check_math_in_docs
svchb Jul 7, 2026
22522ac
Merge remote-tracking branch 'upstream/main' into check_math_in_docs
svchb Jul 7, 2026
c86c514
Merge branch 'check_math_in_docs' of https://github.com/trixi-framewo…
svchb Jul 7, 2026
7e6967b
Clarify SPH docs wording
svchb Jul 7, 2026
c79d885
fixes
svchb Jul 7, 2026
cba6a95
Merge branch 'main' into fix/edac-restart-continuity-density
svchb Jul 7, 2026
ae2403b
Merge branch 'main' into fix/iisph-density-error-accounting
svchb Jul 7, 2026
9b46c0a
Merge branch 'main' into fix/iisph-neighbor-coordinate-wrap
svchb Jul 7, 2026
a9cc49e
Merge branch 'main' into fix/iisph-reject-edac-mixing
svchb Jul 7, 2026
d7c46e9
Merge branch 'main' into fix/edac-update-corrections
svchb Jul 7, 2026
865bfa8
Merge branch 'main' into api/high-level-boundary-builders
svchb Jul 23, 2026
e43c6fb
Merge branch 'main' into fix/custom-quantities-active-particles
svchb Jul 23, 2026
5b42943
Merge branch 'main' into fix/open-boundary-characteristics
svchb Jul 23, 2026
95dcfbe
Merge branch 'main' into preprocessing/fix-deleteat-geometry-cache-co…
svchb Jul 30, 2026
baab2ff
Merge branch 'main' into fix/fluid-surface-tension-config
svchb Jul 30, 2026
0bd170c
Merge PR #1184: Fix custom quantity reductions
svchb Jul 30, 2026
df7fc01
Merge PR #1191: Avoid NaN normals for degenerate triangles
svchb Jul 30, 2026
b012b5d
Merge PR #1188: Normalize preprocessing point inputs
svchb Jul 30, 2026
605c3f5
Merge PR #1187: Close 2D geometry curves by default
svchb Jul 30, 2026
03c28f4
Merge PR #1190: Rebuild geometry data after face deletion
svchb Jul 30, 2026
fe69cab
Merge PR #1196: Fix rectangular shape input handling
svchb Jul 30, 2026
d0f59b0
Merge PR #1198: Fix rectangular tank validation and overlap
svchb Jul 30, 2026
0a3b545
Merge PR #1199: Fix complex boundary sampling bounds
svchb Jul 30, 2026
7ccd359
Merge PR #1145: Add high-level boundary builders
svchb Jul 30, 2026
8d89fca
Merge PR #1094: Add geometry tutorial
svchb Jul 30, 2026
678aa11
Merge PR #1086: Correct mathematical documentation
svchb Jul 30, 2026
44009e7
Fix merged PR integration regressions
svchb Jul 30, 2026
0a693d0
Merge PR #1087: Format documentation
svchb Jul 30, 2026
65b035e
Merge PR #1200: Validate shape cutout and extrusion inputs
svchb Jul 30, 2026
fa29adf
Merge PR #1202: Validate 3D open-boundary face geometry
svchb Jul 30, 2026
0bf4d37
Merge PR #1203: Fix open-boundary characteristic zone handling
svchb Jul 30, 2026
bb73289
Merge PR #1213: Fix EDAC restart pressure row
svchb Jul 30, 2026
8abecf8
Merge PR #1214: Validate fluid surface tension consistency
svchb Jul 30, 2026
bb0e15d
Merge PR #1215: Fix IISPH density error accounting
svchb Jul 30, 2026
0e280b3
Merge PR #1216: Fix IISPH neighbor coordinate wrapping
svchb Jul 30, 2026
970a937
Merge PR #1217: Reject IISPH EDAC mixing
svchb Jul 30, 2026
89b6882
Merge PR #1218: Update EDAC correction caches
svchb Jul 30, 2026
8cd5f06
Merge branch 'main' into bug_fixed
svchb Aug 3, 2026
7e1da19
format
svchb Aug 3, 2026
e6dc5a1
Add C-CSF free-surface core
svchb Aug 8, 2026
de8f84f
Add smooth Morris interface activity
svchb Aug 8, 2026
631909a
Add balanced CSS surface tension
svchb Aug 9, 2026
d7c32a3
Add normal smoothing and VTK diagnostics
svchb Aug 9, 2026
c66b019
Add free-surface tangential shifting
svchb Aug 9, 2026
5579f43
Add interface-aware tensile instability control
svchb Aug 9, 2026
114d776
Add boundary surface quadrature
svchb Aug 9, 2026
f2339f3
Add wetted-area contact angle
svchb Aug 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 33 additions & 5 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,39 @@ TrixiParticles.jl follows the interpretation of
[semantic versioning (semver)](https://julialang.github.io/Pkg.jl/dev/compatibility/#Version-specifier-format-1)
used in the Julia ecosystem. Notable changes will be documented in this file for human readability.

## Version 0.5.3

### Features

- Added the computation of boundary normals for `RectangularTank`s and `SphereShape`s.
## Version 0.5.3

### API Changes

- Corrected `SurfaceTensionMorris` to apply its local CSF acceleration once per particle and
retain the required one-phase surface delta. Previous coefficients compensated implicitly
for a dimensionally incomplete force repeated once per fluid neighbor and must be recalibrated.
- For `SurfaceTensionMorris` and `SurfaceTensionMomentumMorris` with
`ColorfieldSurfaceNormal`, `ideal_density_threshold` now denotes a fraction of the continuous
complete-support kernel moment instead of an integer neighbor-count fraction. The default zero
still disables interior filtering.

### Features

- Reworked `SurfaceTensionMomentumMorris` as a balanced continuum-surface-stress operator with a
symmetric support correction. It conserves pairwise linear momentum without a cached stress
tensor or global reduction.
- Added opt-in activity-weighted Shepard normal smoothing for Morris CSF/CSS and expanded VTK
output with raw and capillary normals, surface delta, activity, support, force, and reconstructed
stress diagnostics.
- Added `FreeSurfaceTangentialShifting`, an opt-in treatment that smoothly removes the
interface-normal component of Sun particle shifting while retaining full interior shifting.
- Added `InterfaceAwareTensileInstabilityControl`, an opt-in pressure formulation that applies
tensile-instability control in fluid interiors and smoothly disables it at free surfaces.
- Added optional per-particle `surface_measure` quadrature data to dummy-particle boundaries.
- Added `WettedAreaContactAngle`, an opt-in Young wall-energy model for supported 3D Morris CSS
simulations with force- and torque-conserving fixed-wall and rigid-body reactions.
- Added C1 interface activation for Morris CSF and CSS with `ColorfieldSurfaceNormal`.
Color-gradient and continuous support-moment indicators taper the physical surface delta without
another neighbor pass.
- Added `CorrectedCSFSurfaceNormal`, an explicit free-surface implementation of the C-CSF
interface geometry from Vergnaud et al. (2022) for `SurfaceTensionMorris`.
- Added the computation of boundary normals for `RectangularTank`s and `SphereShape`s.
- Added `flush` keyword argument to `InfoCallback` to flush `stdout` after each output,
useful for monitoring progress in real-time on clusters or batch systems (#1246).
- Added the number of split integration time steps to the `InfoCallback` output
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,24 @@ It offers intuitive configuration, robust pre- and post-processing, and vendor-a
We provide several example simulation setups in the `examples` folder (which can be accessed from Julia via `examples_dir()`).

<table align="center" border="0">
<tr>
</tr>
<tr>
<td align="center">
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/683e9363-5705-49cc-9a5c-3b47d73ea4b8" style="width: 80% !important;"/><br><figcaption>2D Dam Break</figcaption>
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/683e9363-5705-49cc-9a5c-3b47d73ea4b8" style="width: 80% !important;"/><br />
<figcaption>2D Dam Break</figcaption>
</td>
<td align="center">
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/c10faddf-0400-47c9-b225-f5d286a8ecb8" style="width: 80% !important;"/><br><figcaption>Moving Wall</figcaption>
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/c10faddf-0400-47c9-b225-f5d286a8ecb8" style="width: 80% !important;"/><br />
<figcaption>Moving Wall</figcaption>
</td>
</tr>
<tr>
</tr>
<tr>
<td align="center">
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/e05ace63-e330-441a-a391-eda3d2764074" style="width: 80% !important;"/><br><figcaption>Oscillating Beam</figcaption>
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/e05ace63-e330-441a-a391-eda3d2764074" style="width: 80% !important;"/><br />
<figcaption>Oscillating Beam</figcaption>
</td>
<td align="center">
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/ada0d554-e0ba-44ed-923d-2b77ef252258" style="width: 80% !important;"/><br><figcaption>Dam Break with Elastic Plate</figcaption>
<img src="https://github.com/trixi-framework/TrixiParticles.jl/assets/10238714/ada0d554-e0ba-44ed-923d-2b77ef252258" style="width: 80% !important;"/><br />
<figcaption>Dam Break with Elastic Plate</figcaption>
</td>
</tr>
</table>
Expand Down
155 changes: 155 additions & 0 deletions docs/literate/src/tut_2d_geometry.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# # [Setting up a 2D simulation from geometry files](@id tut_2d_geometry)

# In this tutorial, we build two genuine 2D setups from geometry files:
# 1. a curved pipe, where one geometry file defines the outer wall envelope and a second
# one defines the empty channel cut out of it,
# 2. a dam-break basin with a coastline profile, where one geometry file defines the
# filled coastline wall together with the seawall on the right.
#
# For a real 2D setup, we use 2D geometry formats such as `.asc` or `.dxf`.
# STL files are surface meshes and therefore naturally lead to thin 3D setups instead.

# First, we import TrixiParticles.jl together with
# `OrdinaryDiffEqLowStorageRK` of
# [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl)
# and [Plots.jl](https://docs.juliaplots.org/stable/).
using TrixiParticles
using OrdinaryDiffEqLowStorageRK
using Plots

# ## Resolution

# We use the same particle spacing for the fluid and for the wall geometries.
particle_spacing = 0.03
fluid_density = 1000.0
gravity = 9.81
sound_speed = 10.0
state_equation = StateEquationCole(; sound_speed, reference_density=fluid_density,
exponent=7)
nothing # hide

# ## Loading 2D geometry files

# The following helper loads a closed 2D geometry file and samples particles in its interior:
# 1. load the polygon with [`load_geometry`](@ref),
# 2. fill the polygon with [`ComplexShape`](@ref).
#
# This creates a true 2D solid region instead of a hollow shell around the polygon edges.
function solid_from_geometry_file(file; particle_spacing, density)
geometry = load_geometry(file)
solid = ComplexShape(geometry; particle_spacing, density,
grid_offset=0.5particle_spacing)

return (; geometry, solid)
end

# ## A curved pipe from two filled geometries

# The pipe wall is a solid L-shaped region with a channel cut out of it:
# 1. one geometry file describes the outer pipe envelope,
# 2. one geometry file describes the empty channel,
# 3. the `setdiff` operation subtracts the channel from the solid envelope.
pipe_outer_file = pkgdir(TrixiParticles, "examples", "preprocessing", "data",
"curved_pipe_outer_2d.asc")
pipe_channel_file = pkgdir(TrixiParticles, "examples", "preprocessing", "data",
"curved_pipe_channel_2d.asc")

pipe_outer = solid_from_geometry_file(pipe_outer_file; particle_spacing,
density=fluid_density)
pipe_channel = load_geometry(pipe_channel_file)

pipe_setup = (; wall=setdiff(pipe_outer.solid, pipe_channel),
outer_geometry=pipe_outer.geometry,
channel_geometry=pipe_channel)

# ## A dam-break basin with a coastline profile

# In the second setup, a single 2D geometry file defines a filled coastline wall:
# the beach profile on top, a finite wall thickness below it, and the seawall on the right.
coast_file = pkgdir(TrixiParticles, "examples", "preprocessing", "data",
"coastline_profile_2d.asc")
coast = solid_from_geometry_file(coast_file; particle_spacing, density=fluid_density)

# The geometry file gives the coastline bed and the right wall as a solid region.
# We add the left wall explicitly as a rectangular particle block and place a
# 1.5x taller rectangular dam-break water column next to it.
left_wall = RectangularShape(particle_spacing, (5, 50), (0.0, -0.12),
density=fluid_density)
reservoir = RectangularShape(particle_spacing, (28, 42), (0.15, 0.03),
acceleration=(0.0, -gravity),
state_equation=state_equation)
coast_setup = (; geometry=coast.geometry,
wall=union(coast.solid, left_wall),
fluid=setdiff(reservoir, coast.geometry))

p_pipe = plot(pipe_setup.wall, label="wall", title="Curved pipe",
markerstrokewidth=0, markersize=4)
plot!(p_pipe, showaxis=false, aspect_ratio=:equal,
xlims=(-0.03, 1.23), ylims=(-0.03, 1.23))

p_coast = plot(coast_setup.fluid, coast_setup.wall,
labels=["fluid" "wall"], title="Coastline dam break",
markerstrokewidth=0, markersize=3)
plot!(p_coast, showaxis=false, aspect_ratio=:equal,
xlims=(0.0, 2.75), ylims=(-0.15, 1.35))

plot(p_pipe, p_coast, layout=(1, 2), size=(900, 360))
savefig("tut_2d_geometry_plot.png"); # hide
# ![2D geometry based initial conditions](tut_2d_geometry_plot.png)

# ## Building the simulation systems

# To keep the example focused, we continue with the coastline setup.
# From this point on, the simulation setup is the same as in other 2D simulation files.
setup = coast_setup
tspan = (0.0, 0.03)
nothing # hide

# We define the state equation, smoothing kernel, and viscosity for a
# weakly compressible SPH simulation.
smoothing_length = 1.2 * particle_spacing
smoothing_kernel = SchoenbergCubicSplineKernel{2}()
viscosity = ArtificialViscosityMonaghan(alpha=0.02, beta=0.0)

fluid_density_calculator = ContinuityDensity()
density_diffusion = DensityDiffusionMolteniColagrossi(delta=0.1)

fluid_system = WeaklyCompressibleSPHSystem(setup.fluid;
density_calculator=fluid_density_calculator,
state_equation, smoothing_kernel,
smoothing_length, viscosity=viscosity,
density_diffusion=density_diffusion,
acceleration=(0.0, -gravity))
nothing # hide

# For the wall, we reuse the combined solid wall particles created above. The high-level
# constructor obtains the smoothing kernel, smoothing length, and state equation from the fluid.
boundary_model = BoundaryModelDummyParticles(setup.wall; fluid_system)
boundary_system = WallBoundarySystem(setup.wall, boundary_model)
nothing # hide

# ## Semidiscretization

# With fluid and wall particles defined, we can build the
# [`Semidiscretization`](@ref TrixiParticles.Semidiscretization) exactly as in other tutorials.
semi = Semidiscretization(fluid_system, boundary_system)
ode = semidiscretize(semi, tspan)
nothing # hide

# ## Time integration

# The setup is now complete.
# To start the simulation, run for example
# ```julia
# callbacks = CallbackSet(InfoCallback(interval=10))
# sol = solve(ode, RDPK3SpFSAL35(), save_everystep=false, callback=callbacks)
# ```
# This is the same final step as in [the basic setup tutorial](@ref tut_setup).
callbacks = CallbackSet(InfoCallback(interval=10))
nothing # hide

sol = solve(ode, RDPK3SpFSAL35(), save_everystep=false, callback=callbacks) #!md

# For more accurate body-fitted particles around sharper features, you can also
# apply the [particle packing workflow](@ref tut_packing) to the 2D geometry files
# before starting the simulation.
17 changes: 10 additions & 7 deletions docs/literate/src/tut_packing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ plot!(right_margin=5Plots.mm) #hide
# ## Creating an initial configuration of boundary particles

# To create the initial configuration of the boundary particles,
# we use the sampled points of the SDF whose signed distance lies between 0
# and `boundary_thickness`.
# we use the sampled points of the SDF whose signed distance lies between the
# geometry offset implied by `place_on_shell` and `boundary_thickness`.
# Here, we need to specify the `density` of the boundary particles.
# As an example, we choose `1.0` for all particles.
# This gives us an [`InitialCondition`](@ref InitialCondition) for the boundary particles.
Expand Down Expand Up @@ -125,7 +125,8 @@ plot!(geometry, linestyle=:dash, label=nothing, showaxis=false, color=:black,
# ## Particle packing

# In the following, we will essentially follow the same steps described in the fluid tutorials.
# That means we will generate systems that are then passed to the [`Semidiscretization`](@ref).
# That means we will generate systems that are then passed to the
# [`Semidiscretization`](@ref TrixiParticles.Semidiscretization).
# The difference from a typical physical simulation is that we use [`ParticlePackingSystem`](@ref),
# which does not represent any physical law. Instead, we only use the simulation framework to time-integrate
# the packing process.
Expand Down Expand Up @@ -211,7 +212,7 @@ plot!(geometry, seriestype=:path, color=:black, label=nothing, linewidth=2)
boundary_system = ParticlePackingSystem(boundary_sampled; is_boundary=true,
smoothing_kernel, smoothing_length,
boundary_compress_factor=0.7, signed_distance_field,
background_pressure)
boundary_thickness, background_pressure)

# We can now couple the boundary system with the interior system:
semi = Semidiscretization(packing_system, boundary_system)
Expand Down Expand Up @@ -251,10 +252,12 @@ fixed_system = ParticlePackingSystem(packed_ic; smoothing_kernel, smoothing_leng

# Now we define a rectangular domain that we want to pack.
# In practice, you could create any `InitialCondition` that encloses your complex geometry.
tank_domain = RectangularTank(particle_spacing, (4, 4), (0, 0), min_coordinates=(-1, -2),
density)
domain_size = (4, 4)
n_particles_per_dimension = round.(Int, domain_size ./ particle_spacing)
tank_domain = RectangularShape(particle_spacing, n_particles_per_dimension, (-1, -2);
density)

sampled_outer_domain = setdiff(tank_domain.fluid, packed_ic)
sampled_outer_domain = setdiff(tank_domain, packed_ic)

# If we plot these two `InitialCondition`s, we can see
# that the geometry interface is not properly represented yet.
Expand Down
8 changes: 2 additions & 6 deletions docs/literate/src/tut_rigid_body_fsi.jl
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,8 @@ nothing # hide
# See [the docs on dummy particles](@ref boundary_models) for a definition for these terms.

boundary_density_calculator = AdamiPressureExtrapolation()
tank_boundary_model = BoundaryModelDummyParticles(tank.boundary.density,
tank.boundary.mass,
boundary_density_calculator,
fluid_smoothing_kernel,
fluid_smoothing_length;
state_equation)
tank_boundary_model = BoundaryModelDummyParticles(tank.boundary; fluid_system=fluid_system,
boundary_density_calculator)

boundary_system = WallBoundarySystem(tank.boundary, tank_boundary_model)
nothing # hide
Expand Down
16 changes: 7 additions & 9 deletions docs/literate/src/tut_setup.jl
Original file line number Diff line number Diff line change
Expand Up @@ -131,20 +131,18 @@ nothing # hide

# To model the boundary, we use particle-based boundary conditions, in which particles
# are sampled in the boundary that interact with the fluid particles to avoid penetration.
# In order to define a boundary system, we first have to choose a boundary model,
# which defines how the fluid interacts with boundary particles.
# We will use the [`BoundaryModelDummyParticles`](@ref) with [`AdamiPressureExtrapolation`](@ref).
# See [here](@ref boundary_models) for a comprehensive overview over boundary models.
boundary_model = BoundaryModelDummyParticles(tank.boundary.density, tank.boundary.mass,
AdamiPressureExtrapolation(),
smoothing_kernel, smoothing_length;
state_equation)
# Here, we explicitly choose the dummy-particle boundary model and use its high-level
# builder to infer kernel and equation-of-state-related settings from the adjacent
# fluid system. See [here](@ref boundary_models) for a comprehensive overview over
# boundary models.
boundary_model = BoundaryModelDummyParticles(tank.boundary; fluid_system=fluid_system)
boundary_system = WallBoundarySystem(tank.boundary, boundary_model)
nothing # hide

# ## [Semidiscretization](@id tut_setup_semi)

# The key component of every simulation is the [`Semidiscretization`](@ref),
# The key component of every simulation is the
# [`Semidiscretization`](@ref TrixiParticles.Semidiscretization),
# which couples all systems of the simulation.
# All simulation methods in TrixiParticles.jl are semidiscretizations, which discretize
# the equations in space to provide an ordinary differential equation that still
Expand Down
4 changes: 4 additions & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ Literate.markdown(joinpath("docs", "literate", "src", "tut_rigid_body_fsi.jl"),
joinpath("docs", "src", "tutorials"))
Literate.markdown(joinpath("docs", "literate", "src", "tut_packing.jl"),
joinpath("docs", "src", "tutorials"))
Literate.markdown(joinpath("docs", "literate", "src", "tut_2d_geometry.jl"),
joinpath("docs", "src", "tutorials"))

copy_file("AUTHORS.md",
"in the [LICENSE.md](LICENSE.md) file" => "under [License](@ref)")
Expand Down Expand Up @@ -94,6 +96,8 @@ makedocs(sitename="TrixiParticles.jl",
"tut_rigid_body_fsi.md")
],
"Preprocessing" => [
"Setting up a 2D simulation from geometry files" => joinpath("tutorials",
"tut_2d_geometry.md"),
"Particle packing tutorial" => joinpath("tutorials",
"tut_packing.md")
]
Expand Down
Loading