Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Simplifications
  • Loading branch information
paulromano committed Oct 3, 2025
commit ab97ff94d0726c1e5ba496e0cf54a5c1d5eaabfe
20 changes: 7 additions & 13 deletions openmc/deplete/d1s.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,30 +99,24 @@ def time_correction_factors(
timesteps, source_rates = _normalize_timesteps(
timesteps, source_rates, timestep_units)

# Convert to numpy arrays for faster access
timesteps = np.asarray(timesteps)
source_rates = np.asarray(source_rates)

log_2 = log(2.0)
# Calculate decay rate for each nuclide with cached log(2)
decay_rate = np.array([log_2 / half_life(x) for x in nuclides])
# Calculate decay rate for each nuclide
decay_rate = np.array([log(2.0) / half_life(x) for x in nuclides])

n_timesteps = len(timesteps) + 1
n_nuclides = len(nuclides)

# Create a 2D array for the time correction factors
h = np.zeros((n_timesteps, n_nuclides))

# Vectorized computation - precompute all exponential terms
# Shape: (n_timesteps, n_nuclides)
decay_dt_matrix = decay_rate[np.newaxis, :] * timesteps[:, np.newaxis]
g_matrix = np.exp(-decay_dt_matrix)
one_minus_g_matrix = -np.expm1(-decay_dt_matrix)
# Precompute all exponential terms with same shape as h
decay_dt = decay_rate[np.newaxis, :] * timesteps[:, np.newaxis]
g = np.exp(-decay_dt)
one_minus_g = -np.expm1(-decay_dt)

# Apply recurrence relation step by step
for i in range(len(timesteps)):
# Eq. (4) in doi:10.1016/j.fusengdes.2019.111399
h[i + 1] = source_rates[i] * one_minus_g_matrix[i] + h[i] * g_matrix[i]
h[i + 1] = source_rates[i] * one_minus_g[i] + h[i] * g[i]

return {nuclides[i]: h[:, i] for i in range(n_nuclides)}

Expand Down