|
31 | 31 | from torax._src.orchestration import sim_state as sim_state_lib |
32 | 32 | from torax._src.output_tools import impurity_radiation |
33 | 33 | from torax._src.output_tools import safety_factor_fit |
| 34 | +from torax._src.physics import collisions |
34 | 35 | from torax._src.physics import formulas |
35 | 36 | from torax._src.physics import psi_calculations |
36 | 37 | from torax._src.physics import rotation |
@@ -203,6 +204,8 @@ class PostProcessedOutputs: |
203 | 204 | impurity_species: Dictionary of outputs for each impurity species. |
204 | 205 | poloidal_velocity: Poloidal velocity [m/s] |
205 | 206 | radial_electric_field: Radial electric field [V/m] |
| 207 | + nu_star: Electron-ion collisionality (collision frequency normalized by |
| 208 | + bounce frequency) on the face grid [dimensionless]. |
206 | 209 | first_step: Whether the outputs are from the first step of the simulation. |
207 | 210 | """ |
208 | 211 |
|
@@ -319,6 +322,7 @@ class PostProcessedOutputs: |
319 | 322 | impurity_species: dict[str, impurity_radiation.ImpuritySpeciesOutput] |
320 | 323 | poloidal_velocity: array_typing.FloatVector |
321 | 324 | radial_electric_field: array_typing.FloatVector |
| 325 | + nu_star: array_typing.FloatVector |
322 | 326 | first_step: array_typing.BoolScalar |
323 | 327 | # pylint: enable=invalid-name |
324 | 328 |
|
@@ -432,6 +436,7 @@ def zeros(cls, geo: geometry.Geometry) -> typing_extensions.Self: |
432 | 436 | impurity_species={}, |
433 | 437 | poloidal_velocity=jnp.zeros(geo.rho_face.shape), |
434 | 438 | radial_electric_field=jnp.zeros(geo.rho_face.shape), |
| 439 | + nu_star=jnp.zeros(geo.rho_face.shape), |
435 | 440 | first_step=jnp.array(True), |
436 | 441 | ) |
437 | 442 |
|
@@ -931,6 +936,14 @@ def cumulative_values(): |
931 | 936 | sim_state.core_profiles, sim_state.geometry |
932 | 937 | ) |
933 | 938 |
|
| 939 | + # Use collisionality_multiplier=1.0 for the physical value. The non-unity |
| 940 | + # multiplier in QLKNN is a model-specific calibration factor, not physics. |
| 941 | + nu_star = collisions.calc_nu_star( |
| 942 | + geo=sim_state.geometry, |
| 943 | + core_profiles=sim_state.core_profiles, |
| 944 | + collisionality_multiplier=1.0, |
| 945 | + ) |
| 946 | + |
934 | 947 | rotation_output = rotation.calculate_rotation( |
935 | 948 | T_i=sim_state.core_profiles.T_i, |
936 | 949 | psi=sim_state.core_profiles.psi, |
@@ -1021,6 +1034,7 @@ def cumulative_values(): |
1021 | 1034 | impurity_species=impurity_radiation_outputs, |
1022 | 1035 | poloidal_velocity=rotation_output.poloidal_velocity.face_value(), |
1023 | 1036 | radial_electric_field=rotation_output.Er.face_value(), |
| 1037 | + nu_star=nu_star, |
1024 | 1038 | first_step=jnp.array(False), |
1025 | 1039 | ) |
1026 | 1040 |
|
|
0 commit comments