@@ -222,34 +222,55 @@ def get_value(
222222 conductivity ,
223223 )
224224 case sources_runtime_params_lib .Mode .PRESCRIBED :
225- if len (self .affected_core_profiles ) != len (
226- source_params .prescribed_values
225+ expected_len = len (self .affected_core_profiles )
226+ prescribed_len = len (source_params .prescribed_values )
227+ if (
228+ AffectedCoreProfile .FAST_IONS in self .affected_core_profiles
229+ and not runtime_params .numerics .enable_fast_ions
230+ and prescribed_len == expected_len - 1
227231 ):
232+ fast_ions_idx = self .affected_core_profiles .index (
233+ AffectedCoreProfile .FAST_IONS
234+ )
235+ res_list = list (source_params .prescribed_values )
236+ res_list .insert (fast_ions_idx , ())
237+ res = tuple (res_list )
238+ elif prescribed_len != expected_len :
228239 raise ValueError (
229240 'When using PRESCRIBED mode, the number of prescribed values must'
230241 ' match the number of affected core profiles. Was: '
231242 f'{ len (source_params .prescribed_values )} '
232243 f' Expected: { len (self .affected_core_profiles )} .'
233244 )
234- res = source_params .prescribed_values
245+ else :
246+ res = source_params .prescribed_values
235247 case sources_runtime_params_lib .Mode .ZERO :
236248 zeros = jnp .zeros (geo .rho_norm .shape )
237- res = tuple (
238- self .zero_fast_ions (geo )
239- if acp == AffectedCoreProfile .FAST_IONS
240- else zeros
241- for acp in self .affected_core_profiles
242- )
249+ res_list = []
250+ for affected_core_profile in self .affected_core_profiles :
251+ if affected_core_profile == AffectedCoreProfile .FAST_IONS :
252+ if runtime_params .numerics .enable_fast_ions :
253+ res_list .append (self .zero_fast_ions (geo ))
254+ else :
255+ res_list .append (())
256+ else :
257+ res_list .append (zeros )
258+ res = tuple (res_list )
243259 case _:
244260 raise ValueError (f'Unknown mode: { mode } ' )
245261
246262 if AffectedCoreProfile .FAST_IONS in self .affected_core_profiles :
247263 fast_ions_idx = self .affected_core_profiles .index (
248264 AffectedCoreProfile .FAST_IONS
249265 )
250- self ._validate_fast_ions (
251- res [fast_ions_idx ],
252- geo ,
253- )
266+ if runtime_params .numerics .enable_fast_ions :
267+ self ._validate_fast_ions (
268+ res [fast_ions_idx ],
269+ geo ,
270+ )
271+ elif res [fast_ions_idx ]:
272+ res_list = list (res )
273+ res_list [fast_ions_idx ] = ()
274+ res = tuple (res_list )
254275
255276 return res
0 commit comments