Skip to content

Commit 48ef1c6

Browse files
authored
Write data (#219)
* add trixi_get_data_pointer * add examples working with data pointer * changed file name * improve example using new passive tracer equations * new Trixi compat * adjust time steps * fix access pattern * add trixi_(load|store)_conservative_vars * tests * !fixup * !fixup * fortran test * reference * mention new examples * rename (load|store)*vars to var
1 parent 3e1d8e6 commit 48ef1c6

27 files changed

+759
-174
lines changed

.github/workflows/ci.yml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,12 @@ jobs:
243243
# all controllers
244244
../build/examples/trixi_controller_simple_c . libelixir_tree1d_advection_basic.jl
245245
../build/examples/trixi_controller_simple_f . libelixir_tree1d_advection_basic.jl
246-
../build/examples/trixi_controller_data_c . libelixir_t8code2d_advection_amr.jl
247-
../build/examples/trixi_controller_data_f . libelixir_t8code2d_advection_amr.jl
248-
../build/examples/trixi_controller_t8code_c . libelixir_t8code2d_advection_amr.jl
249-
../build/examples/trixi_controller_t8code_f . libelixir_t8code2d_advection_amr.jl
246+
../build/examples/trixi_controller_data_load_c . libelixir_t8code2d_euler_tracer_amr.jl
247+
../build/examples/trixi_controller_data_load_f . libelixir_t8code2d_euler_tracer_amr.jl
248+
../build/examples/trixi_controller_data_store_c . libelixir_t8code2d_euler_tracer_amr.jl
249+
../build/examples/trixi_controller_data_store_f . libelixir_t8code2d_euler_tracer_amr.jl
250+
../build/examples/trixi_controller_t8code_c . libelixir_t8code2d_euler_tracer_amr.jl
251+
../build/examples/trixi_controller_t8code_f . libelixir_t8code2d_euler_tracer_amr.jl
250252
../build/examples/trixi_controller_baroclinic_c . libelixir_t8code3d_euler_baroclinic_instability.jl
251253
../build/examples/trixi_controller_baroclinic_f . libelixir_t8code3d_euler_baroclinic_instability.jl
252254
mpirun -n 2 ../build/examples/trixi_controller_mpi_c . libelixir_p4est2d_euler_sedov.jl
@@ -275,10 +277,14 @@ jobs:
275277
"../build/examples/trixi_controller_simple_c ." \
276278
"../build/examples/trixi_controller_simple_f" \
277279
"../build/examples/trixi_controller_simple_f ." \
278-
"../build/examples/trixi_controller_data_c" \
279-
"../build/examples/trixi_controller_data_c ." \
280-
"../build/examples/trixi_controller_data_f" \
281-
"../build/examples/trixi_controller_data_f ." \
280+
"../build/examples/trixi_controller_data_load_c" \
281+
"../build/examples/trixi_controller_data_load_c ." \
282+
"../build/examples/trixi_controller_data_load_f" \
283+
"../build/examples/trixi_controller_data_load_f ." \
284+
"../build/examples/trixi_controller_data_store_c" \
285+
"../build/examples/trixi_controller_data_store_c ." \
286+
"../build/examples/trixi_controller_data_store_f" \
287+
"../build/examples/trixi_controller_data_store_f ." \
282288
"../build/examples/trixi_controller_t8code_c" \
283289
"../build/examples/trixi_controller_t8code_c ." \
284290
"../build/examples/trixi_controller_t8code_f" \

LibTrixi.jl/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Trixi = "a7f1ee26-1774-49b1-8366-f1abc58fbfcb"
1313
MPI = "0.20.13"
1414
OrdinaryDiffEq = "6.53.2"
1515
Pkg = "1.8"
16-
Trixi = "0.9.12, 0.10, 0.11, 0.12, 0.13"
16+
Trixi = "0.11.12, 0.12, 0.13"
1717
julia = "1.8"
1818

1919
[preferences.OrdinaryDiffEq]

LibTrixi.jl/examples/libelixir_t8code2d_advection_amr.jl

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
using LibTrixi
2+
using OrdinaryDiffEq
3+
using Trixi
4+
5+
# The function to create the simulation state needs to be named `init_simstate`
6+
function init_simstate()
7+
8+
###############################################################################
9+
# initial condition: density wave + tracer blob
10+
11+
function initial_condition_wave_blob(x, t,
12+
equations::PassiveTracerEquations)
13+
# Initial condition for flow equations: density wave
14+
v1 = 0.1
15+
v2 = 0.2
16+
rho = 1 + 0.5 * sinpi(2 * (x[1] + x[2] - t * (v1 + v2)))
17+
rho_v1 = rho * v1
18+
rho_v2 = rho * v2
19+
p = 20
20+
rho_e = p / (equations.flow_equations.gamma - 1) + 0.5 * rho * (v1^2 + v2^2)
21+
22+
# Initial condition for tracers: blob in fraction of density
23+
tracer = 0.2 * exp(-20 * (x[1] + 0.45)^2 - 10 * (x[2] - 0.15)^2)
24+
25+
return SVector(rho, rho_v1, rho_v2, rho_e, rho * tracer)
26+
end
27+
28+
###############################################################################
29+
# semidiscretization of the compressible Euler equations
30+
31+
gamma = 1.4
32+
flow_equations = CompressibleEulerEquations2D(gamma)
33+
equations = PassiveTracerEquations(flow_equations, n_tracers = 1)
34+
35+
# Create DG solver with polynomial degree = 5, Ranocha flux, and derived tracer flux
36+
solver = DGSEM(polydeg = 5, surface_flux = FluxTracerEquationsCentral(flux_ranocha))
37+
38+
coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))
39+
coordinates_max = ( 1.0, 1.0) # maximum coordinates (max(x), max(y))
40+
trees_per_dimension = (4, 4) # initial resolution (without refinement)
41+
mesh = T8codeMesh(trees_per_dimension, polydeg = 1,
42+
coordinates_min = coordinates_min, coordinates_max = coordinates_max,
43+
initial_refinement_level = 1)
44+
45+
# Create spatial discretization
46+
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_wave_blob,
47+
solver)
48+
49+
###############################################################################
50+
# ODE solvers, callbacks etc.
51+
52+
# Create ODE problem with time span from 0.0 to 2.0
53+
ode = semidiscretize(semi, (0.0, 2.0));
54+
55+
# SummaryCallback prints a summary of the simulation setup and recorded performance data
56+
summary_callback = SummaryCallback()
57+
58+
# AnalysisCallback analyses the solution at regular intervals and prints the results
59+
analysis_interval = 100
60+
analysis_callback = AnalysisCallback(semi, interval=analysis_interval)
61+
62+
# AliveCallback prints a one line summary at regular intervals
63+
alive_callback = AliveCallback(analysis_interval=analysis_interval)
64+
65+
# StepsizeCallback handles the re-calculation of the maximum Δt after each time step
66+
stepsize_callback = StepsizeCallback(cfl = 1.0)
67+
68+
# AMRCallback triggers adaptive mesh refinement
69+
@inline function first_tracer(u, equations::PassiveTracerEquations)
70+
return Trixi.tracers(u, equations)[1]
71+
end
72+
amr_controller = ControllerThreeLevel(semi, IndicatorMax(semi, variable=first_tracer),
73+
base_level=1,
74+
med_level=2, med_threshold=0.05,
75+
max_level=2, max_threshold=0.05)
76+
amr_callback = AMRCallback(semi, amr_controller,
77+
interval=50,
78+
adapt_initial_condition=true,
79+
adapt_initial_condition_only_refine=true)
80+
81+
# SaveSolutionCallback writes the solution at regular intervals
82+
save_solution = SaveSolutionCallback(interval=50,
83+
save_initial_solution=true,
84+
save_final_solution=true,
85+
solution_variables = cons2prim)
86+
87+
# CallbackSet collects all callbacks
88+
callbacks = CallbackSet(summary_callback,
89+
analysis_callback,
90+
alive_callback,
91+
amr_callback,
92+
save_solution,
93+
stepsize_callback)
94+
95+
###############################################################################
96+
# create the time integrator
97+
98+
# OrdinaryDiffEq's `integrator`
99+
integrator = init(ode, CarpenterKennedy2N54(williamson_condition=false),
100+
dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
101+
save_everystep=false, callback=callbacks);
102+
103+
###############################################################################
104+
# Create simulation state
105+
106+
simstate = SimulationState(semi, integrator)
107+
108+
return simstate
109+
end

LibTrixi.jl/src/LibTrixi.jl

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,24 @@ export trixi_load_node_reference_coordinates,
5252
export trixi_load_node_weights,
5353
trixi_load_node_weights_cfptr,
5454
trixi_load_node_weights_jl
55-
export trixi_load_primitive_vars,
56-
trixi_load_primitive_vars_cfptr,
57-
trixi_load_primitive_vars_jl
58-
export trixi_load_element_averaged_primitive_vars,
59-
trixi_load_element_averaged_primitive_vars_cfptr,
60-
trixi_load_element_averaged_primitive_vars_jl
55+
export trixi_load_conservative_var,
56+
trixi_load_conservative_var_cfptr,
57+
trixi_load_conservative_var_jl
58+
export trixi_load_primitive_var,
59+
trixi_load_primitive_var_cfptr,
60+
trixi_load_primitive_var_jl
61+
export trixi_load_element_averaged_primitive_var,
62+
trixi_load_element_averaged_primitive_var_cfptr,
63+
trixi_load_element_averaged_primitive_var_jl
64+
export trixi_store_conservative_var,
65+
trixi_store_conservative_var_cfptr,
66+
trixi_store_conservative_var_jl
6167
export trixi_register_data,
6268
trixi_register_data_cfptr,
6369
trixi_register_data_jl
70+
export trixi_get_conservative_vars_pointer,
71+
trixi_get_conservative_vars_pointer_cfptr,
72+
trixi_get_conservative_vars_pointer_jl
6473
export trixi_version_library,
6574
trixi_version_library_cfptr,
6675
trixi_version_library_jl

0 commit comments

Comments
 (0)