@@ -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