Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
5a10f3c
[SPH] ensure that dust can only be enabled in experimental mode
tdavidcl Feb 5, 2026
bb0d28f
add S_j to config
tdavidcl Feb 5, 2026
8676e83
monofluid formula
tdavidcl Feb 5, 2026
8dfdb50
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 9, 2026
8acd150
fix compile
tdavidcl Mar 9, 2026
ccdc245
move to standalone node
tdavidcl Mar 9, 2026
2156535
finish move
tdavidcl Mar 9, 2026
190f083
cleaner
tdavidcl Mar 9, 2026
7f07ef9
ts compute
tdavidcl Mar 9, 2026
7c75bae
yeah boy
tdavidcl Mar 9, 2026
7d73835
connect to config
tdavidcl Mar 9, 2026
149695f
prepare tests
tdavidcl Mar 9, 2026
f890fb1
prepare what will follow
tdavidcl Mar 9, 2026
b548d50
run but unstable
tdavidcl Mar 10, 2026
65c375d
clean
tdavidcl Mar 10, 2026
daca6fa
clean
tdavidcl Mar 10, 2026
d1b722c
progress
tdavidcl Mar 10, 2026
de3ffb5
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 10, 2026
ec0cff2
[SPH] add disc vertical potential for stratified boxes
tdavidcl Mar 10, 2026
883ef98
Apply suggestions from code review
tdavidcl Mar 11, 2026
0c09429
tmp
tdavidcl Mar 11, 2026
457d468
Merge branch 'patch-2026-03-11-00-41' into patch-2026-02-05-15-21
tdavidcl Mar 11, 2026
238cc6b
cleaner
tdavidcl Mar 11, 2026
6d1c1dc
add velocity dissipation
tdavidcl Mar 11, 2026
bc5a90e
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 11, 2026
5f3f0dc
fix
tdavidcl Mar 12, 2026
299fcf1
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 12, 2026
4214b55
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 12, 2026
2018540
better
tdavidcl Mar 12, 2026
d6745fb
update setup
tdavidcl Mar 13, 2026
2fa6c8d
Merge branch 'main' into patch-2026-02-05-15-21
tdavidcl Mar 21, 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
170 changes: 170 additions & 0 deletions examples/sph/run_dusty.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
"""
Testing Sod tube with SPH
=========================

CI test for Sod tube with SPH
"""

import matplotlib.pyplot as plt

import shamrock

shamrock.enable_experimental_features()
import numpy as np

gamma = 1.4
rho = 1


def func_rho_t(r):
return rho


def func_rho_d_j(r, idust):
r_ = np.sqrt(r[0] ** 2 + r[1] ** 2 + r[2] ** 2)
return (0.1 / ndust) * max(1 - (r_ / rc) ** 2, 0)


def func_rho_g(r):
return rho - sum([func_rho_d_j(r, i) for i in range(ndust)])


def func_s_j(r, idust):
rho_t = func_rho_t(r)
rho_d_j = [func_rho_d_j(r, i) for i in range(ndust)]
eps_j = rho_d_j[idust] / rho_t
return np.sqrt(rho_t * eps_j)


cs_g = 1


def uint_g(r):
rho_g = func_rho_g(r)
P = rho_g * cs_g * cs_g / gamma
return P / ((gamma - 1) * rho_g)


ndust = 1
rc = 0.25
stopping_times = [1e-1]


bmin = (-0.6, -0.6, -0.6)
bmax = (0.6, 0.6, 0.6)

N_target = 1e4
scheduler_split_val = int(2e7)
scheduler_merge_val = int(1)

xm, ym, zm = bmin
xM, yM, zM = bmax
vol_b = (xM - xm) * (yM - ym) * (zM - zm)

part_vol = vol_b / N_target

# lattice volume
HCP_PACKING_DENSITY = 0.74
part_vol_lattice = HCP_PACKING_DENSITY * part_vol

dr = (part_vol_lattice / ((4.0 / 3.0) * np.pi)) ** (1.0 / 3.0)

pmass = -1

ctx = shamrock.Context()
ctx.pdata_layout_new()

model = shamrock.get_Model_SPH(context=ctx, vector_type="f64_3", sph_kernel="M6")

cfg = model.gen_default_config()
# cfg.set_artif_viscosity_Constant(alpha_u = 1, alpha_AV = 1, beta_AV = 2)
# cfg.set_artif_viscosity_VaryingMM97(alpha_min = 0.1,alpha_max = 1,sigma_decay = 0.1, alpha_u = 1, beta_AV = 2)
cfg.set_artif_viscosity_VaryingCD10(
alpha_min=0.0, alpha_max=1, sigma_decay=0.1, alpha_u=1, beta_AV=2
)
cfg.set_dust_mode_monofluid_tvi(ndust)
cfg.set_dust_stopping_times(stopping_times)
cfg.set_boundary_periodic()
cfg.set_eos_isothermal(1)
cfg.print_status()
model.set_solver_config(cfg)

model.init_scheduler(int(1e8), 1)


bmin, bmax = model.get_ideal_hcp_box(dr, bmin, bmax)
xm, ym, zm = bmin
xM, yM, zM = bmax

model.resize_simulation_box(bmin, bmax)

setup = model.get_setup()
gen = setup.make_generator_lattice_hcp(dr, bmin, bmax)
setup.apply_setup(gen, insert_step=scheduler_split_val)

for i in range(ndust):

def func_s(r):
return func_s_j(r, i)

model.set_field_value_lambda_f64("s_j", func_s, i)

model.set_field_value_lambda_f64("uint", uint_g)

vol_b = (xM - xm) * (yM - ym) * (zM - zm)
totmass = rho * vol_b
print("Total mass :", totmass)

pmass = model.total_mass_to_part_mass(totmass)
model.set_particle_mass(pmass)
print("Current part mass :", pmass)


model.set_cfl_cour(0.1)
model.set_cfl_force(0.1)

model.timestep()

tnext = 0
for j in range(10):
if j > 0:
tnext += 0.1
model.evolve_until(tnext)

dic = ctx.collect_data()
print(dic["s_j"])

print(dic["xyz"].shape)

x = dic["xyz"][:, 0]
y = dic["xyz"][:, 1]
z = dic["xyz"][:, 2]
s_j = dic["s_j"].reshape(-1, ndust)
ds_j_dt = dic["ds_j_dt"].reshape(-1, ndust)
cs = dic["soundspeed"]

print(s_j)

r = np.sqrt(x * x + y * y + z * z)

hpart = dic["hpart"]
rho = pmass * (model.get_hfact() / np.array(hpart)) ** 3

fig, axs = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
axs[0].scatter(r, rho, label="rho")
axs[0].legend()
for i in range(ndust):
axs[1].scatter(r, s_j[:, i] ** 2 / rho, label=f"eps_j_{i}")
axs[1].legend()

axs[2].scatter(r, cs, label="soundspeed")
axs[2].legend()

for i in range(ndust):
axs[3].scatter(r, ds_j_dt[:, i], label=f"ds_j_dt_{i}")
axs[3].legend()

for k in range(4):
axs[k].set_xlim(-0.1, 1.1)
plt.savefig(f"mono_{j}.png")
plt.close()
Loading
Loading