Skip to content

Commit f69ebda

Browse files
authored
Merge pull request #424 from gafusion/ssd/add_kinetic_pressure
Add kinetic pressure
2 parents 13a3e29 + eb24a86 commit f69ebda

2 files changed

Lines changed: 41 additions & 7 deletions

File tree

‎omas/machine_mappings/d3d.json‎

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@
7171
"charge_exchange.channel.:.ion.:": {
7272
"PYTHON": "charge_exchange_data(ods, {pulse}, {analysis_type!r})"
7373
},
74-
"charge_exchange.channel.:.ion.:.n_i_over_n_e.data": {
74+
"charge_exchange.channel.:.ion.:.n_i.data": {
7575
"PYTHON": "charge_exchange_data(ods, {pulse}, {analysis_type!r})"
7676
},
77-
"charge_exchange.channel.:.ion.:.n_i_over_n_e.time": {
77+
"charge_exchange.channel.:.ion.:.n_i.time": {
7878
"PYTHON": "charge_exchange_data(ods, {pulse}, {analysis_type!r})"
7979
},
80-
"charge_exchange.channel.:.ion.:.n_i.data": {
80+
"charge_exchange.channel.:.ion.:.n_i_over_n_e.data": {
8181
"PYTHON": "charge_exchange_data(ods, {pulse}, {analysis_type!r})"
8282
},
83-
"charge_exchange.channel.:.ion.:.n_i.time": {
83+
"charge_exchange.channel.:.ion.:.n_i_over_n_e.time": {
8484
"PYTHON": "charge_exchange_data(ods, {pulse}, {analysis_type!r})"
8585
},
8686
"charge_exchange.channel.:.ion.:.t_i.data": {
@@ -188,6 +188,9 @@
188188
"core_profiles.profiles_1d.:.electrons.density_thermal_error_upper": {
189189
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
190190
},
191+
"core_profiles.profiles_1d.:.electrons.pressure": {
192+
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
193+
},
191194
"core_profiles.profiles_1d.:.electrons.temperature": {
192195
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
193196
},
@@ -296,14 +299,23 @@
296299
"COCOSIO": 11,
297300
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
298301
},
302+
"core_profiles.profiles_1d.:.pressure_ion_non_thermal": {
303+
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
304+
},
305+
"core_profiles.profiles_1d.:.pressure_ion_total": {
306+
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
307+
},
299308
"core_profiles.profiles_1d.:.pressure_perpendicular": {
300309
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
301310
},
311+
"core_profiles.profiles_1d.:.pressure_total": {
312+
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
313+
},
302314
"core_profiles.profiles_1d.:.time": {
303315
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
304316
},
305317
"core_profiles.time": {
306-
"PYTHON": "core_profiles_global_quantities_data(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r})"
318+
"PYTHON": "core_profiles_profile_1d(ods, {pulse}, {PROFILES_tree!r}, {PROFILES_run_id!r}, {core_profiles_strict_grid!r})"
307319
},
308320
"ec_launchers.beam.:": {
309321
"PYTHON": "ec_launcher_active_hardware(ods, {pulse})"
@@ -968,4 +980,4 @@
968980
"wall.time": {
969981
"PYTHON": "wall(ods, {pulse}, {EFIT_tree!r}, {EFIT_run_id!r})"
970982
}
971-
}
983+
}

‎omas/machine_mappings/d3d.py‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1964,6 +1964,13 @@ def add_extra_profile_structures():
19641964
extra_structures["core_profiles"][f"core_profiles.profiles_1d[:].ion[:].velocity.toroidal_fit.psi_norm"] = velo_struct
19651965
extra_structures["core_profiles"][f"core_profiles.profiles_1d[:].ion[:].velocity.toroidal_fit.measured"] = velo_struct
19661966
extra_structures["core_profiles"][f"core_profiles.profiles_1d[:].ion[:].velocity.toroidal_fit.measured_error_upper"] = velo_struct
1967+
# electrons.pressure and pressure_ion_total are standard IMAS nodes; these two are not
1968+
pressure_struct = {"coordinates": sh + "[:].grid.rho_tor_norm"}
1969+
pressure_struct["documentation"] = "Pressure profile added for DIII-D OMFIT_PROFS"
1970+
pressure_struct["data_type"] = "FLT_1D"
1971+
pressure_struct["units"] = "Pa"
1972+
for quant in ["pressure_ion_non_thermal", "pressure_total"]:
1973+
extra_structures["core_profiles"][f"core_profiles.profiles_1d[:].{quant}"] = pressure_struct
19671974
add_extra_structures(extra_structures)
19681975

19691976

@@ -2006,10 +2013,16 @@ def core_profiles_profile_1d(ods, pulse, PROFILES_tree="OMFIT_PROFS", PROFILES_r
20062013
query["ion[1].velocity.toroidal_fit.psi_norm"]= "PS_V_TOR_C"
20072014
query["e_field.radial"] = "ER_C"
20082015
query["grid.rho_tor_norm"] = "rho"
2016+
query["electrons.pressure"] = "P_E"
2017+
query["pressure_ion_non_thermal"] = "P_FAST_D"
20092018
#query["j_total"] = "J_TOT"
20102019
#query["pressur_perpendicular"] = "P_TOT"
2011-
2020+
20122021
normal_entries = set(query.keys()) - set(uncertain_entries)
2022+
# Raw ion pressures fetched here but written manually below: pressure_ion_total
2023+
# and pressure_total are sums and pressure_total is a non-standard structure.
2024+
query["_pressure_deuterium"] = "P_D"
2025+
query["_pressure_carbon"] = "P_C"
20132026
omfit_profiles_node = '\\TOP.'
20142027
for entry in query:
20152028
query[entry] = omfit_profiles_node + query[entry]
@@ -2086,6 +2099,15 @@ def core_profiles_profile_1d(ods, pulse, PROFILES_tree="OMFIT_PROFS", PROFILES_r
20862099
print("================ DATA =================")
20872100
print(data[entry][i_time])
20882101
print(e)
2102+
# pressure_ion_total = P_D + P_C; pressure_total sums the IMAS pressure fields
2103+
pressure_inputs = ["electrons.pressure", "pressure_ion_non_thermal",
2104+
"_pressure_deuterium", "_pressure_carbon"]
2105+
if not any(isinstance(data[entry], Exception) for entry in pressure_inputs):
2106+
p_ion_total = data["_pressure_deuterium"] + data["_pressure_carbon"]
2107+
p_total = data["electrons.pressure"] + data["pressure_ion_non_thermal"] + p_ion_total
2108+
for i_time, time in enumerate(data["time"]):
2109+
ods[f"{sh}[{i_time}].pressure_ion_total"] = p_ion_total[i_time][mask[i_time]]
2110+
ods[f"{sh}[{i_time}].pressure_total"] = p_total[i_time][mask[i_time]]
20892111
for i_time, time in enumerate(data["time"]):
20902112
ods[f"{sh}[{i_time}].ion[0].element[0].z_n"] = 1
20912113
ods[f"{sh}[{i_time}].ion[0].element[0].a"] = 2.0141

0 commit comments

Comments
 (0)