1+ function coupled_equations (params:: Dict{Symbol,Any} ,simcase:: SimulationCase )
2+ @sunpack skew, ν,dt, θ, D = simcase
3+
4+ sprob = simcase. sprob
5+ @unpack dΩ = params
6+ @unpack skew = sprob
7+
8+ # Conservations equations
9+ Rc (u) = ∇ ⋅ u
10+ dRc (du) = ∇ ⋅ du
11+ Rm (t, (u, p)) = ∂t (u) + u ⋅ ∇ (u) + ∇ (p) # - ν*Δ(u)
12+ dRm ((u, p), (du, dp), (v, q)) = du ⋅ ∇ (u) + u ⋅ ∇ (du) + ∇ (dp) # - ν*Δ(du)
13+ stab_coeff = compute_stab_coeff (simcase,params)
14+
15+ Tm (u) = momentum_stabilization (u, stab_coeff, simcase)
16+ Tc (u) = continuity_stabilization (u, stab_coeff, simcase)
17+
18+
19+ θvp = 1.0
20+
21+ # VMS equations
22+ # Function used in VMS terms
23+ TRm (t, (u, p)) = Tm (u. cellfield) * Rm (t, (u, p))
24+
25+ # Variational equations
26+ Bᴳ (t, (u, p), (v, q)) = ∫ (∂t (u) ⋅ v)dΩ + ∫ ((u ⋅ ∇ (u)) ⋅ v)dΩ - ∫ ((∇ ⋅ v) * p)dΩ + ∫ ((q * (∇ ⋅ u)))dΩ + ν * ∫ (∇ (v) ⊙ ∇ (u))dΩ
27+
28+ # SUPG terms
29+ B_SUPG (t, (u, p), (v, q)) = ∫ ((u ⋅ ∇ (v) + ∇ (q)) ⊙ TRm (t, (u, p)))dΩ + ∫ ((∇ ⋅ v) ⊙ (Tc (u. cellfield) * Rc (u)))dΩ
30+
31+ # First VMS term
32+ B_VMS1 (t, (u, p), (v, q)) = ∫ ((u ⋅ (∇ (v))' ) ⊙ TRm (t, (u, p)))dΩ
33+
34+ # Second VMS term
35+ B_VMS2 (t, (u, p), (v, q)) = - 1 * ∫ ((∇ (v)) ⊙ (outer (TRm (t, (u, p)), TRm (t, (u, p)))))dΩ
36+
37+ # Adding all the contributions
38+ Bᴹ (t, (u, p), (v, q)) = Bᴳ (t, (u, p), (v, q)) + B_SUPG (t, (u, p), (v, q)) + B_VMS1 (t, (u, p), (v, q)) + B_VMS2 (t, (u, p), (v, q))
39+
40+ res (t, (u, p), (v, q)) = Bᴹ (t, (u, p), (v, q))
41+
42+ # VMS Jacobian
43+ # Function used in the VMS terms - derivative
44+ dTRm ((u, p), (du, dp), (v, q)) = Tm (u. cellfield)* dRm ((u, p), (du, dp), (v, q)) # Derivative of the Function used in the second VMS term
45+
46+ # Variational equations - derivative
47+ dBᴳ (t, (u, p), (du, dp), (v, q)) = ∫ (((du ⋅ ∇ (u)) ⋅ v) + ((u ⋅ ∇ (du)) ⋅ v) + (∇ (dp) ⋅ v) + (q * (∇ ⋅ du)))dΩ + ν * ∫ (∇ (v) ⊙ ∇ (du))dΩ
48+
49+ # SUPG terms derivative
50+ dB_SUPG (t, (u, p), (du, dp), (v, q)) = ∫ (((du ⋅ ∇ (v)) ⋅ TRm (t, (u, p))) + ((u ⋅ ∇ (v) + ∇ (q)) ⋅ dTRm ((u, p), (du, dp), (v, q))) + ((∇ ⋅ v) ⋅ ( Tc (u. cellfield) .* dRc (du))))dΩ
51+
52+ # First VMS term derivative
53+ dB_VMS1 (t, (u, p), (du, dp), (v, q)) = ∫ (((du ⋅ ∇ (v)' ) ⊙ TRm (t, (u, p))) + ((u ⋅ ∇ (v)' ) ⊙ dTRm ((u, p), (du, dp), (v, q))))dΩ
54+
55+
56+ # Second VMS term derivative
57+ dB_VMS2 (t, (u, p), (du, dp), (v, q)) = ∫ (∇ (v) ⊙ (outer (dTRm ((u, p), (du, dp), (v, q)), TRm (t, (u, p)))))dΩ + ∫ (∇ (v) ⊙ (outer (TRm (t, (u, p)), dTRm ((u, p), (du, dp), (v, q)))))dΩ
58+
59+
60+ # Adding all the contributions
61+ jac (t, (u, p), (du, dp), (v, q)) = dBᴳ (t, (u, p), (du, dp), (v, q)) + dB_SUPG (t, (u, p), (du, dp), (v, q)) + dB_VMS1 (t, (u, p), (du, dp), (v, q)) - dB_VMS2 (t, (u, p), (du, dp), (v, q))
62+
63+ # VMS time-Jacobian
64+ dtTRm (t, (u, p), (dut, dpt), (v, q)) = ( Tm (u. cellfield)) ⋅ dut # Derivative of the Function used in the second VMS term
65+
66+ dtBᴳ (t, (u, p), (dut, dpt), (v, q)) = ∫ (dut ⋅ v)dΩ
67+ dtB_SUPG (t, (u, p), (dut, dpt), (v, q)) = ∫ ((u ⋅ ∇ (v) + (θvp)* ∇ (q)) ⊙ dtTRm (t, (u, p), (dut, dpt), (v, q)))dΩ
68+ dtB_VMS1 (t, (u, p), (dut, dpt), (v, q)) = ∫ ((u ⋅ (∇ (v))' ) ⊙ dtTRm (t, (u, p), (dut, dpt), (v, q)))dΩ
69+ dtB_VMS2 (t, (u, p), (dut, dpt), (v, q)) = ∫ ((∇ (v)) ⊙ (outer (dtTRm (t, (u, p), (dut, dpt), (v, q)), TRm (t, (u, p)))))dΩ + ∫ ((∇ (v)) ⊙ (outer (TRm (t, (u, p)), dtTRm (t, (u, p), (dut, dpt), (v, q)))))dΩ
70+
71+ jac_t (t, (u, p), (dut, dpt), (v, q)) = dtBᴳ (t, (u, p), (dut, dpt), (v, q)) + dtB_SUPG (t, (u, p), (dut, dpt), (v, q)) + dtB_VMS1 (t, (u, p), (dut, dpt), (v, q)) - dtB_VMS2 (t, (u, p), (dut, dpt), (v, q))
72+
73+ res, jac, jac_t
74+
75+ end
76+
77+
78+
79+
0 commit comments