Skip to content

Commit 428e1f7

Browse files
committed
6f_landau: Added 2nd order perpendicular diffusion terms to eq for Ni, Ti, Te, U, Vipar as is done in STORM. This is to help with numerical stabilization.
1 parent 1ba8c85 commit 428e1f7

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

examples/6f_landau/6f_landau.cxx

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,14 @@ class Elm_6f : public PhysicsModel {
346346
BoutReal hyperviscos; // Hyper-viscosity (radial)
347347
Field3D hyper_mu_x; // Hyper-viscosity coefficient
348348

349+
/// Perpendicular diffusion coefficients.
350+
/// These were not part of the original model but were added for numerical
351+
/// stabilization purposes of turbulence simulations.
352+
bool perpendicular_diffusion; // Include perpendicular diffusion?
353+
Field3D diff_perp_Ni, diff_perp_Ti, diff_perp_Te;
354+
Field3D diff_perp_U, diff_perp_Vipar;
355+
356+
349357
/// position filter
350358
bool pos_filter, pos_filter2, keep_zonalPF;
351359
BoutReal filter_position_ni, filter_position_ti, filter_position_te;
@@ -1559,6 +1567,19 @@ class Elm_6f : public PhysicsModel {
15591567
neoclassic_e = options["neoclassic_e"].doc("switch for electron neoclassical transport").withDefault(false);
15601568
epsilon = options["epsilon"].withDefault(0.2); // the value of reverse aspect ratio
15611569

1570+
perpendicular_diffusion = options["perpendicular_diffusion"].doc("include perpendicular diffusion?").withDefault(false);
1571+
diff_perp_Ni = options["diff_perp_Ni"]
1572+
.doc("2nd order perpendicular diffusion for Ni in [m^2/s]").withDefault(0.0);
1573+
diff_perp_Ti = options["diff_perp_Ti"]
1574+
.doc("2nd order perpendicular diffusion for Ti in [m^2/s]").withDefault(0.0);
1575+
diff_perp_Te = options["diff_perp_Te"]
1576+
.doc("2nd order perpendicular diffusion for Te in [m^2/s]").withDefault(0.0);
1577+
diff_perp_U = options["diff_perp_U"]
1578+
.doc("2nd order perpendicular diffusion for U in [m^2/s]").withDefault(0.0);
1579+
diff_perp_Vipar = options["diff_perp_Vipar"]
1580+
.doc("2nd order perpendicular diffusion for Vipar in [m^2/s]").withDefault(0.0);
1581+
1582+
15621583
// output terms
15631584
output_Teterms = options["output_Teterms"].withDefault(false);
15641585
output_Titerms = options["output_Titerms"].withDefault(false);
@@ -1912,6 +1933,20 @@ class Elm_6f : public PhysicsModel {
19121933
dump.add(hyperdiff_perp_u4, "hyperdiff_perp_u4", 0);
19131934
}
19141935

1936+
if (perpendicular_diffusion > 0.0) {
1937+
output.write("Including perpendicular diffusion. \n");
1938+
// STORM var: SAVE_ONCE(mu_n0, mu_vort0, nu_parallel0, kappa0_perp, diff_perp_U, diff_perp_V);
1939+
1940+
diff_perp_Ni /= Lbar * Va;
1941+
diff_perp_Ti /= Lbar * Va;
1942+
diff_perp_Te /= Lbar * Va;
1943+
diff_perp_U /= Lbar * Va;
1944+
diff_perp_Vipar /= Lbar * Va;
1945+
1946+
SAVE_ONCE(diff_perp_Ni, diff_perp_Ti, diff_perp_Te, diff_perp_U, diff_perp_Vipar);
1947+
}
1948+
1949+
19151950
if (sink_vp > 0.0) {
19161951
output.write("sink_vp(rate): {:e}\n", sink_vp);
19171952
dump.add(sink_vp, "sink_vp", 1);
@@ -4458,6 +4493,7 @@ class Elm_6f : public PhysicsModel {
44584493
//ddt(Psi) += hyperresist * Delp2(Jpar / B0);
44594494
ddt(Apar) += hyperresist * Delp2(Jpar);
44604495
}
4496+
44614497
}
44624498
} else { // emass
44634499

@@ -4765,6 +4801,11 @@ class Elm_6f : public PhysicsModel {
47654801
}
47664802
}
47674803

4804+
if (perpendicular_diffusion > 0.0) {
4805+
ddt(U) += diff_perp_U * Delp2(U);
4806+
// ddt(U) += Grad_perp(diff_perp_U) * Grad_perp(U);
4807+
}
4808+
47684809
// left edge sink terms
47694810
if (sink_Ul > 0.0) {
47704811
ddt(U) -= sink_Ul * sink_tanhxl(P0, U, su_widthl, su_lengthl); // core sink
@@ -4890,6 +4931,12 @@ class Elm_6f : public PhysicsModel {
48904931
tmpN2.applyBoundary();
48914932
ddt(Ni) -= hyperdiff_perp_n4 * Delp2(tmpN2);
48924933
}
4934+
4935+
if (perpendicular_diffusion > 0.0) {
4936+
ddt(Ni) += diff_perp_Ni * Delp2(Ni);
4937+
// ddt(Ni) += Grad_perp(diff_perp_Ni) * Grad_perp(Ni);
4938+
}
4939+
48934940
}
48944941

48954942

@@ -5085,6 +5132,12 @@ class Elm_6f : public PhysicsModel {
50855132
tmpTi2.applyBoundary();
50865133
ddt(Ti) -= hyperdiff_perp_ti4 * Delp2(tmpTi2);
50875134
}
5135+
5136+
if (perpendicular_diffusion > 0.0) {
5137+
ddt(Ti) += diff_perp_Ti * Delp2(Ti);
5138+
// ddt(Ti) += Grad_perp(diff_perp_Ti) * Grad_perp(Ti);
5139+
}
5140+
50885141
}
50895142

50905143
//////////////////////////////////////////////////////////////////
@@ -5301,6 +5354,11 @@ class Elm_6f : public PhysicsModel {
53015354
ddt(Te) -= hyperdiff_perp_te4 * Delp2(tmpTe2);
53025355
}
53035356

5357+
if (perpendicular_diffusion > 0.0) {
5358+
ddt(Te) += diff_perp_Te * Delp2(Te);
5359+
// ddt(Te) += Grad_perp(diff_perp_Te) * Grad_perp(Te);
5360+
}
5361+
53045362
// right edge sink terms
53055363
if (sink_Ter > 0.0) {
53065364
ddt(Te) -= sink_Ter * sink_tanhxr(Te0, Te, ste_widthr, ste_lengthr); // sol sink
@@ -5419,6 +5477,11 @@ class Elm_6f : public PhysicsModel {
54195477
ddt(Vipar) -= hyperdiff_perp_v4 * Delp2(tmpVp2);
54205478
}
54215479

5480+
if (perpendicular_diffusion > 0.0) {
5481+
ddt(Vipar) += diff_perp_Vipar * Delp2(Vipar);
5482+
// ddt(Vipar) += Grad_perp(diff_perp_Vipar) * Grad_perp(Vipar);
5483+
}
5484+
54225485
if (sink_vp > 0.0) {
54235486
if (include_vpar0){
54245487
ddt(Vipar) -= sink_vp * sink_tanhxl(Vipar0, Vipar, sp_width, sp_length); // sink

0 commit comments

Comments
 (0)