Closed yumouwei closed 2 weeks ago
Thank you @yumouwei for the thorough review. Generally, all pre-2000 code blocks need to be thoroughly reviewed and validated. Regarding the specific points raised:
beta_n
. vsurf
as C-Mod had one big poloidal Rogowski loop. Bob Granetz is the one that can solve this point as well.@gtrevisan there are certainly edge cases for DIII-D as well, but we never went into similar detailed analysis of historical data. I am aware of a strong bifurcation in the availability of the n=1 bradial signal. I talked to @yumouwei at the time, he should be aware. Regarding areao
, sure, let's add it to the list of retrieved signals from EFIT. Right now it can be reconstructed via differences between kappa
and kappa_area
.
Following the discussion on 11/4/24, we decided to investigate & address the beta_n, v_surf, & v_loop computations in a separate PR. For now this PR is ready for merging.
Implemented changes
Corrected nodenames in
efit_cols
andcmod/physics.py
:Removed now-unnecessary unit conversions in
cmod/physics.py
Removed
efit_cols_pre_2000
and its references incmod/efit.py
, as all the nodenames inefit_cols
have been corrected & match what were inefit_cols_pre_2000
.Remaining issues to be addressed
1. beta_n
\efit_aeqdsk:betan
is an expressionBuild_Signal(\EFIT_AEQDSK:BETAT / \EFIT_AEQDSK:IN, *, \EFIT_AEQDSK:TIME)
.IN
is the normalized current defined asIp[MA]/(a*Bt)
. This expression of beta_n isn't exactly correct as it should be calculated using the total beta instead of beta_t. Also this node is only available for post-2000 shots.get_efit_parameters
that calculates beta_n for pre-2000 shots. However that code is also wrong as it calculates the total beta and forget to normalize it by IN.https://github.com/MIT-PSFC/disruption-py/blob/8888f3f601b03cf922d8053beef93e10801d2fe8/disruption_py/machine/cmod/efit.py#L133-L139
2. v_surf
v_surf = gradient(SSIBRY)*2pi
whereSSIBRY
is the poloidal flux at the plasma boundary. We need to make sure this is the correct expression.https://github.com/MIT-PSFC/disruption-py/blob/8888f3f601b03cf922d8053beef93e10801d2fe8/disruption_py/machine/cmod/efit.py#L109-L117
\efit_aeqdsk:vsurfa
which is available for all shots but equals 0 for every shot.efit_aeqdsk:vsurf
which is an alias forvsurfa
for post-2000 shots.3. v_loop
v_loop = gradient(SSIMAG)*2pi
where SSIMAG is the poloidal flux at the magnetic axis. I'm not sure why this is needed asvloopt
is available for both pre-and-post-2000 shots. The results also don't matchvloopt
.https://github.com/MIT-PSFC/disruption-py/blob/8888f3f601b03cf922d8053beef93e10801d2fe8/disruption_py/machine/cmod/efit.py#L122-L131
References