Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/utils/euler-manufactured.jl
2055 views
1
#= Usage:
2
3
# Start Julia
4
julia --color=yes
5
6
# Install Reduce.jl package (only necessary once)
7
import Pkg; Pkg.add("Reduce");
8
9
# Load file
10
julia> using Revise
11
julia> includet("euler-manufactured.jl")
12
13
# Run methods to generate source terms. The source terms that need to be
14
# implemented can be found in the `source_...` variables of the quote'd output.
15
# If you want, you can also modify, e.g., the ini method to get different manufactured solutions.
16
julia> euler1d()
17
julia> euler2d()
18
julia> euler3d()
19
=#
20
21
using Reduce
22
@force using Reduce.Algebra
23
24
# Original Reduce code (CompressibleEulerEquations 1D)
25
#=
26
clear(γ,f,A,ω,c,ini,rho,rho_v1,rho_v2,rho_v3,rho_e,v1,v2,p,x,y,t,u1,u2,u3,u4);
27
28
ini := c + A * sin(ω * (x - t));
29
rho := ini;
30
rho_v1 := ini;
31
rho_e := ini^2;
32
33
v1 := rho_v1 / rho;
34
p := (γ - 1) * (rho_e - 1/2 * rho * v1^2);
35
36
source_rho := df(rho, t) + df(rho_v1, x)
37
source_rho_v1 := df(rho_v1, t) + df(rho * v1^2 + p, x)
38
source_rho_e := df(rho_e, t) + df((rho_e + p) * v1, x)
39
=#
40
41
function euler1d()
42
quote
43
ini = c + a * sin(ω * (x - t))
44
rho = ini
45
rho_v1 = ini
46
rho_e = ini^2
47
48
v1 = rho_v1 / rho
49
p = (γ - 1) * (rho_e - 1 / 2 * rho * v1^2)
50
51
#! format: off
52
source_rho = df(rho, t) + df(rho_v1, x)
53
source_rho_v1 = df(rho_v1, t) + df(rho * v1^2 + p, x)
54
source_rho_e = df(rho_e, t) + df((rho_e + p) * v1, x)
55
#! format: on
56
end |> rcall
57
end
58
59
# Original Reduce code (CompressibleEulerEquations 2D)
60
#=
61
clear(γ,f,A,ω,c,ini,rho,rho_v1,rho_v2,rho_v3,rho_e,v1,v2,p,x,y,t,u1,u2,u3,u4);
62
63
ini := c + A * sin(ω * (x + y - t));
64
rho := ini;
65
rho_v1 := ini;
66
rho_v2 := ini;
67
rho_e := ini^2;
68
69
v1 := rho_v1 / rho;
70
v2 := rho_v2 / rho;
71
p := (γ - 1) * (rho_e - 1/2 * rho * (v1^2 + v2^2));
72
73
source_rho := df(rho, t) + df(rho_v1, x) + df(rho_v2, y);
74
source_rho_v1 := df(rho_v1, t) + df(rho * v1^2 + p, x) + df(rho * v1 * v2, y);
75
source_rho_v2 := df(rho_v2, t) + df(rho * v1 * v2, x) + df(rho * v2^2 + p, y);
76
source_rho_e := df(rho_e, t) + df((rho_e + p) * v1, x) + df((rho_e + p) * v2, y);
77
=#
78
79
function euler2d()
80
quote
81
ini = c + a * sin(ω * (x + y - t))
82
rho = ini
83
rho_v1 = ini
84
rho_v2 = ini
85
rho_e = ini^2
86
87
v1 = rho_v1 / rho
88
v2 = rho_v2 / rho
89
p = (γ - 1) * (rho_e - 1 / 2 * rho * (v1^2 + v2^2))
90
91
#! format: off
92
source_rho = df(rho, t) + df(rho_v1, x) + df(rho_v2, y)
93
source_rho_v1 = df(rho_v1, t) + df(rho * v1^2 + p, x) + df(rho * v1 * v2, y)
94
source_rho_v2 = df(rho_v2, t) + df(rho * v1 * v2, x) + df(rho * v2^2 + p, y)
95
source_rho_e = df(rho_e, t) + df((rho_e + p) * v1, x) + df((rho_e + p) * v2, y)
96
#! format: on
97
end |> rcall
98
end
99
100
# Original Reduce code (CompressibleEulerEquations 3D)
101
#=
102
clear(γ,f,A,ω,c,a1,a2,a3,ini,rho,rho_v1,rho_v2,rho_v3,rho_e,v1,v2,v3,p,x,y,z,t);
103
104
ini := c + A * sin(ω * (x + y + z - t));
105
rho := ini;
106
rho_v1 := ini;
107
rho_v2 := ini;
108
rho_v3 := ini;
109
rho_e := ini^2;
110
111
v1 := rho_v1 / rho;
112
v2 := rho_v2 / rho;
113
v3 := rho_v3 / rho;
114
p := (γ - 1) * (rho_e - 1/2 * rho * (v1^2 + v2^2 + v3^2));
115
116
source_rho := df(rho, t) + df(rho_v1, x) + df(rho_v2, y) + df(rho_v3, z);
117
source_rho_v1 := df(rho_v1, t) + df(rho * v1^2 + p, x) + df(rho * v1 * v2, y) + df(rho * v1 * v3, z);
118
source_rho_v2 := df(rho_v2, t) + df(rho * v1 * v2, x) + df(rho * v2^2 + p, y) + df(rho * v2 * v3, z);
119
source_rho_v3 := df(rho_v3, t) + df(rho * v1 * v3, x) + df(rho * v3 * v3, y) + df(rho * v3^2 + p, z);
120
source_rho_e := df(rho_e, t) + df((rho_e + p) * v1, x) + df((rho_e + p) * v2, y) + df((rho_e + p) * v3, z);
121
=#
122
123
function euler3d()
124
quote
125
ini = c + a * sin(ω * (x + y + z - t))
126
rho = ini
127
rho_v1 = ini
128
rho_v2 = ini
129
rho_v3 = ini
130
rho_e = ini^2
131
132
v1 = rho_v1 / rho
133
v2 = rho_v2 / rho
134
v3 = rho_v3 / rho
135
p = (γ - 1) * (rho_e - 1 / 2 * rho * (v1^2 + v2^2 + v3^2))
136
137
#! format: off
138
source_rho = df(rho, t) + df(rho_v1, x) + df(rho_v2, y) + df(rho_v3, z)
139
source_rho_v1 = df(rho_v1, t) + df(rho * v1^2 + p, x) + df(rho * v1 * v2, y) + df(rho * v1 * v3, z)
140
source_rho_v2 = df(rho_v2, t) + df(rho * v1 * v2, x) + df(rho * v2^2 + p, y) + df(rho * v2 * v3, z)
141
source_rho_v3 = df(rho_v3, t) + df(rho * v1 * v3, x) + df(rho * v3 * v3, y) + df(rho * v3^2 + p, z)
142
source_rho_e = df(rho_e, t) + df((rho_e + p) * v1, x) + df((rho_e + p) * v2, y) + df((rho_e + p) * v3, z)
143
#! format: on
144
end |> rcall
145
end
146
147