Skip to content

Commit 5369fc4

Browse files
committed
6f_landau: Simplified a bit the way we set coef to the phiSolver when impurity_prof is true.
1 parent cf71910 commit 5369fc4

1 file changed

Lines changed: 35 additions & 58 deletions

File tree

examples/6f_landau/6f_landau.cxx

Lines changed: 35 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ class Elm_6f : public PhysicsModel {
135135
Field2D phi0; // When diamagnetic terms used
136136

137137
Field2D N0, Ti0, Te0, Ne0, N_imp0, T_imp0; // number density and temperature
138-
Field2D Pi0, Pe0, P_imp0, density_tmp;
138+
Field2D Pi0, Pe0, P_imp0;
139+
Field2D logn0, density_tmp;
139140
Field2D q95;
140141
BoutReal q95_input;
141142
bool local_q;
@@ -3301,7 +3302,20 @@ class Elm_6f : public PhysicsModel {
33013302
// Save performance metrics to output, using the
33023303
// given name as the prefix.
33033304
phiSolver->savePerformance(*solver, "phiSolver");
3304-
// phiSolver->setCoefC(N0);
3305+
3306+
density_tmp = N0 + A_imp / AA * N_imp0;
3307+
3308+
if (impurity_prof) {
3309+
logn0 = laplace_alpha * density_tmp;
3310+
if (laplace_alpha > 0.0) {
3311+
phiSolver->setCoefC(logn0);
3312+
}
3313+
} else {
3314+
logn0 = laplace_alpha * N0;
3315+
if (laplace_alpha > 0.0) {
3316+
phiSolver->setCoefC(logn0);
3317+
}
3318+
}
33053319

33063320
aparSolver = Laplacian::create(&globalOptions["aparSolver"], loc);
33073321

@@ -3314,43 +3328,25 @@ class Elm_6f : public PhysicsModel {
33143328
ubyn = 0.0;
33153329
ubyn.setBoundary("U");
33163330

3317-
density_tmp = N0 + A_imp / AA * N_imp0;
3318-
33193331
if (!restarting) { // NOTE(malamast): Do we realy need that?
33203332
// Only if not restarting: Check initial perturbation
33213333

33223334
// Set U to zero where P0 < vacuum_pressure
33233335
U = where(P0 - vacuum_pressure, U, 0.0);
33243336

3325-
// Field2D lap_temp = 0.0;
3326-
// TODO: diamag in U?
33273337
if (impurity_prof) {
3328-
Field2D logn0 = laplace_alpha * density_tmp;
33293338
ubyn = U * B0 / density_tmp;
3330-
mesh->communicate(ubyn);
3331-
ubyn.applyBoundary();
3332-
3333-
// Phi should be consistent with U
3334-
if (laplace_alpha <= 0.0) {
3335-
phi = phiSolver->solve(ubyn);
3336-
} else {
3337-
phiSolver->setCoefC(logn0);
3338-
phi = phiSolver->solve(ubyn);
3339-
}
3339+
// Ni_tot = N0+A_imp*N_imp0;
3340+
// else
3341+
// Ni_tot = N0;
33403342
} else {
3341-
Field2D logn0 = laplace_alpha * N0;
33423343
ubyn = U * B0 / N0;
3343-
mesh->communicate(ubyn);
3344-
ubyn.applyBoundary();
3345-
3346-
// Phi should be consistent with U
3347-
if (laplace_alpha <= 0.0) {
3348-
phi = phiSolver->solve(ubyn);
3349-
} else {
3350-
phiSolver->setCoefC(logn0);
3351-
phi = phiSolver->solve(ubyn);
3352-
}
33533344
}
3345+
mesh->communicate(ubyn);
3346+
ubyn.applyBoundary();
3347+
3348+
// Phi should be consistent with U
3349+
phi = phiSolver->solve(ubyn);
33543350
}
33553351
// mesh->communicate(phi);
33563352
// phi.applyBoundary();
@@ -3595,48 +3591,28 @@ class Elm_6f : public PhysicsModel {
35953591
SBC_Gradpar(phi, zero, PF_limit, PF_limit_range);
35963592
}
35973593

3598-
// Field2D lap_temp=0.0;
3599-
// Field2D logn0 = laplace_alpha * N0;
36003594
// ubyn = U * B0 / max(N0, true);
36013595
if (impurity_prof) {
36023596
ubyn = U * B0 / density_tmp;
36033597
if (diamag) {
36043598
ubyn -= Upara0 / density_tmp * Delp2(Pi);
3605-
3606-
// ubyn -= Grad_perp(phi0) * Grad_perp(Ni) / N0; // NOTE(malamast): TODO<! check
3607-
3608-
}
3609-
ubyn.applyBoundary();
3610-
mesh->communicate(ubyn);
3611-
3612-
// Invert laplacian for phi
3613-
if (laplace_alpha <= 0.0) {
3614-
phi = phiSolver->solve(ubyn);
3615-
} else {
3616-
phiSolver->setCoefC(density_tmp);
3617-
phi = phiSolver->solve(ubyn);
3599+
// ubyn -= Upara0 / density_tmp * Laplace_perp(Pi);
3600+
// ubyn -= Grad_perp(phi0) * Grad_perp(Ni) / density_tmp; // NOTE(malamast): TODO<! check
36183601
}
36193602
} else {
36203603
ubyn = U * B0 / N0;
36213604
if (diamag) {
36223605
ubyn -= Upara0 / N0 * Delp2(Pi);
36233606
// ubyn -= Upara0 / N0 * Laplace_perp(Pi);
3624-
36253607
// ubyn -= Grad_perp(phi0) * Grad_perp(Ni) / N0; // NOTE(malamast): TODO<! check
3626-
3627-
}
3628-
ubyn.applyBoundary();
3629-
mesh->communicate(ubyn);
3630-
3631-
// Invert laplacian for phi
3632-
if (laplace_alpha <= 0.0) {
3633-
phi = phiSolver->solve(ubyn);
3634-
} else {
3635-
phiSolver->setCoefC(N0);
3636-
phi = phiSolver->solve(ubyn); // NOTE(malamast): a) Should this be N0 + Ni instead of just N0
3637-
// b) Should we subtract the term 1/N0 Grad_perp(phi0) * Grad_perp(Ni) like we did above with Upara0 / N0 * Delp2(Pi)?
36383608
}
36393609
}
3610+
ubyn.applyBoundary();
3611+
mesh->communicate(ubyn);
3612+
// Invert laplacian for phi
3613+
phi = phiSolver->solve(ubyn); // NOTE(malamast): a) Should this be N0 + Ni instead of just N0
3614+
// b) Should we subtract the term 1/N0 Grad_perp(phi0) * Grad_perp(Ni) like we did above with Upara0 / N0 * Delp2(Pi)?
3615+
36403616
// mesh->communicate(phi);
36413617
// phi.applyBoundary();
36423618

@@ -6201,7 +6177,8 @@ class Elm_6f : public PhysicsModel {
62016177
// third metrix
62026178
BoutReal Ntemp = max(N0, true);
62036179
// TODO: diamag in U?
6204-
phi_tmp = phiSolver->solve(U * B0 / Ntemp);
6180+
// phi_tmp = invert_laplace(U * B0 / Ntemp, phi_flags, NULL);
6181+
phi_tmp = phiSolver->solve(U * B0 / Ntemp); // What is the alpha coef here?
62056182
mesh->communicate(phi_tmp);
62066183
phi_tmp.applyBoundary();
62076184
Ni = ni_tmp - gamma * bracket(phi_tmp, N0, bm_exb);
@@ -6238,7 +6215,7 @@ class Elm_6f : public PhysicsModel {
62386215
*****************************************************************************/
62396216

62406217
int precon_phi(BoutReal UNUSED(t), BoutReal UNUSED(cj), BoutReal UNUSED(delta)) {
6241-
ddt(phi) = phiSolver->solve(C_phi - ddt(U));
6218+
ddt(phi) = phiSolver->solve(C_phi - ddt(U)); // What is the alpha coef here?
62426219
return 0;
62436220
}
62446221
};

0 commit comments

Comments
 (0)