From bd64005ae7c8dce7403741224de7a0a554f5d894 Mon Sep 17 00:00:00 2001 From: Ilham Variansyah <variansi@oregonstate.edu> Date: Sat, 17 Aug 2024 17:25:10 +0700 Subject: [PATCH 1/2] remove dsm temporarily --- mcdc/__init__.py | 1 - mcdc/card.py | 7 - mcdc/global_.py | 3 - mcdc/input_.py | 73 +---- mcdc/kernel.py | 429 ++------------------------ mcdc/loop.py | 10 - mcdc/main.py | 8 +- mcdc/type_.py | 58 +--- test/regression/dsm_azurv1/answer.h5 | Bin 265800 -> 0 bytes test/regression/dsm_azurv1/input.py | 37 --- test/regression/dsm_lattice/answer.h5 | Bin 205048 -> 0 bytes test/regression/dsm_lattice/c5g7.h5 | Bin 49104 -> 0 bytes test/regression/dsm_lattice/input.py | 49 --- 13 files changed, 37 insertions(+), 638 deletions(-) delete mode 100644 test/regression/dsm_azurv1/answer.h5 delete mode 100644 test/regression/dsm_azurv1/input.py delete mode 100644 test/regression/dsm_lattice/answer.h5 delete mode 100644 test/regression/dsm_lattice/c5g7.h5 delete mode 100644 test/regression/dsm_lattice/input.py diff --git a/mcdc/__init__.py b/mcdc/__init__.py index c902b276..c36bea2c 100644 --- a/mcdc/__init__.py +++ b/mcdc/__init__.py @@ -18,7 +18,6 @@ iQMC, weight_roulette, IC_generator, - dsm, uq, reset, domain_decomposition, diff --git a/mcdc/card.py b/mcdc/card.py index fa53a1fa..3a989e55 100644 --- a/mcdc/card.py +++ b/mcdc/card.py @@ -54,9 +54,6 @@ def __init__(self, G=1, J=0): self.chi_s = np.zeros([G, G]) self.chi_p = np.zeros([G, G]) self.chi_d = np.zeros([J, G]) - self.sensitivity = False - self.sensitivity_ID = 0 - self.dsm_Np = 1.0 self.uq = False self.flags = [] self.distribution = "" @@ -85,7 +82,6 @@ def __init__(self, N_nuclide, G=1, J=0): self.nu_f = np.zeros(G) self.chi_s = np.zeros([G, G]) self.chi_p = np.zeros([G, G]) - self.sensitivity = False self.uq = False self.flags = [] self.distribution = "" @@ -167,9 +163,6 @@ def __init__(self): self.nx = 0.0 self.ny = 0.0 self.nz = 0.0 - self.sensitivity = False - self.sensitivity_ID = 0 - self.dsm_Np = 1.0 def _create_halfspace(self, positive): region = RegionCard("halfspace") diff --git a/mcdc/global_.py b/mcdc/global_.py index 7de89fbb..8df838f7 100644 --- a/mcdc/global_.py +++ b/mcdc/global_.py @@ -78,8 +78,6 @@ def reset(self): # Below are parameters not copied to mcdc.setting "bank_active_buff": 100, "bank_census_buff": 1.0, - # TODO: Move to technique - "N_sensitivity": 0, } self.technique = { @@ -158,7 +156,6 @@ def reset(self): "IC_precursor_density_max": 0.0, "IC_cycle_stretch": 1.0, "branchless_collision": False, - "dsm_order": 1, "uq": False, } diff --git a/mcdc/input_.py b/mcdc/input_.py index 02c14c77..b40e92f3 100644 --- a/mcdc/input_.py +++ b/mcdc/input_.py @@ -52,8 +52,6 @@ def nuclide( chi_d=None, speed=None, decay=None, - sensitivity=False, - dsm_Np=1.0, ): """ Create a nuclide @@ -80,11 +78,6 @@ def nuclide( Energy group speed [cm/s]. decay : numpy.ndarray (1D), optional Precursor group decay constant [/s]. - sensitivity : bool, optional - Set to `True` to calculate sensitivities to the nuclide. - dsm_Np : float - Average number of derivative particles produced at each - sensitivity nuclide collision. Returns ------- @@ -208,20 +201,6 @@ def nuclide( if np.sum(card.chi_d[dg, :]) > 0.0: card.chi_d[dg, :] /= np.sum(card.chi_d[dg, :]) - # Sensitivity setup - if sensitivity: - # Set flag - card.sensitivity = True - global_.input_deck.technique["sensitivity"] = True - global_.input_deck.technique["weighted_emission"] = False - - # Set ID - global_.input_deck.setting["N_sensitivity"] += 1 - card.sensitivity_ID = global_.input_deck.setting["N_sensitivity"] - - # Set dsm_Np - card.dsm_Np = dsm_Np - # Add to deck global_.input_deck.nuclides.append(card) @@ -240,8 +219,6 @@ def material( chi_d=None, speed=None, decay=None, - sensitivity=False, - dsm_Np=1.0, ): """ Create a material @@ -273,12 +250,6 @@ def material( Energy group speed [cm/s]. decay : numpy.ndarray (1D), optional Precursor group decay constant [/s]. - sensitivity : bool, optional - Set to `True` to calculate sensitivities to the material - (only relevant for single-nuclide material). - dsm_Np : float - Average number of derivative particles produced at each - sensitivity material collision (only relevant for single_nuclide material). Returns ------- @@ -303,8 +274,6 @@ def material( chi_d, speed, decay, - sensitivity, - dsm_Np, ) nuclides = [[card_nuclide, 1.0]] @@ -379,7 +348,7 @@ def material( # Set ID card.ID = len(global_.input_deck.materials) - # Calculate basic XS and determine sensitivity flag + # Calculate basic XS for i in range(N_nuclide): nuc = nuclides[i][0] density = nuclides[i][1] @@ -390,8 +359,6 @@ def material( card.scatter += nuc.scatter * density card.fission += nuc.fission * density card.total += nuc.total * density - card.sensitivity += nuc.sensitivity * density - card.sensitivity = bool(card.sensitivity) # Calculate effective speed # Current approach: weighted by nuclide macroscopic total cross section @@ -450,7 +417,7 @@ def material( return card -def surface(type_, bc="interface", sensitivity=False, dsm_Np=1.0, **kw): +def surface(type_, bc="interface", **kw): """ Create a surface to define the region of a cell. @@ -461,11 +428,6 @@ def surface(type_, bc="interface", sensitivity=False, dsm_Np=1.0, **kw): Surface type. bc : {"interface", "vacuum", "reflective"} Surface boundary condition. - sensitivity : bool, optional - Set to `True` to calculate sensitivities to the surface position. - dsm_Np : int - Average number of derivative particles produced at each - sensitivity surface crossing. Other Parameters ---------------- @@ -538,20 +500,6 @@ def surface(type_, bc="interface", sensitivity=False, dsm_Np=1.0, **kw): ) card.boundary_type = bc - # Sensitivity - if sensitivity: - # Set flag - card.sensitivity = True - global_.input_deck.technique["sensitivity"] = True - global_.input_deck.technique["weighted_emission"] = False - - # Set ID - global_.input_deck.setting["N_sensitivity"] += 1 - card.sensitivity_ID = global_.input_deck.setting["N_sensitivity"] - - # Set dsm_Np - card.dsm_Np = dsm_Np - # ========================================================================== # Surface attributes # ========================================================================== @@ -1776,22 +1724,6 @@ def IC_generator( card_setting["N_active"] = N_cycle -def dsm(order=1): - """ - Direct sensitivity method - - Parameters - ---------- - order : int, optional - order of the sensitivity to probe, by default 1 - """ - - card = global_.input_deck.technique - if order > 2: - print_error("DSM currently only supports up to second-order sensitivities") - card["dsm_order"] = order - - def uq(**kw): """ Activate uncertainty quantification. @@ -1950,7 +1882,6 @@ def make_particle_bank(size): ("g", np.uint64), ("E", np.float64), ("w", np.float64), - ("sensitivity_ID", np.int64), ("rng_seed", np.uint64), ] iqmc_struct = [("w", np.float64, (1,))] diff --git a/mcdc/kernel.py b/mcdc/kernel.py index a02f321f..8992beb0 100644 --- a/mcdc/kernel.py +++ b/mcdc/kernel.py @@ -654,7 +654,6 @@ def source_particle_dd(seed, mcdc): P["uz"] = uz P["g"] = g P["w"] = 1 - P["sensitivity_ID"] = 0 return P @@ -909,8 +908,6 @@ def source_particle(seed, mcdc): P["E"] = E P["w"] = 1.0 - P["sensitivity_ID"] = 0 - return P @@ -987,7 +984,6 @@ def get_particle(P, bank, mcdc): P["iqmc"]["w"] = P_rec["iqmc"]["w"] P["alive"] = True - P["sensitivity_ID"] = P_rec["sensitivity_ID"] # Set default IDs and event P["material_ID"] = -1 @@ -1644,7 +1640,6 @@ def copy_recordlike(P_new, P): P_new["E"] = P["E"] P_new["w"] = P["w"] P_new["rng_seed"] = P["rng_seed"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] P_new["iqmc"]["w"] = P["iqmc"]["w"] copy_track_data(P_new, P) @@ -1687,7 +1682,6 @@ def copy_particle(P_new, P): P_new["surface_ID"] = P["surface_ID"] P_new["translation"] = P["translation"] P_new["event"] = P["event"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] P_new["rng_seed"] = P["rng_seed"] P_new["iqmc"]["w"] = P["iqmc"]["w"] copy_track_data(P_new, P) @@ -2175,7 +2169,6 @@ def score_tracklength(P, distance, mcdc): material = mcdc["materials"][P["material_ID"]] # Get indices - s = P["sensitivity_ID"] t, x, y, z, outside = mesh_get_index(P, tally["mesh"]) mu, azi = mesh_get_angular_index(P, tally["mesh"]) g, outside_energy = mesh_get_energy_index(P, tally["mesh"], mcdc) @@ -2187,20 +2180,20 @@ def score_tracklength(P, distance, mcdc): # Score flux = distance * P["w"] if tally["flux"]: - score_flux(s, g, t, x, y, z, mu, azi, flux, tally["score"]["flux"]) + score_flux(g, t, x, y, z, mu, azi, flux, tally["score"]["flux"]) if tally["density"]: flux /= get_particle_speed(P, mcdc) - score_flux(s, g, t, x, y, z, mu, azi, flux, tally["score"]["density"]) + score_flux(g, t, x, y, z, mu, azi, flux, tally["score"]["density"]) if tally["fission"]: flux *= get_MacroXS(XS_FISSION, material, P, mcdc) - score_flux(s, g, t, x, y, z, mu, azi, flux, tally["score"]["fission"]) + score_flux(g, t, x, y, z, mu, azi, flux, tally["score"]["fission"]) if tally["total"]: flux *= get_MacroXS(XS_TOTAL, material, P, mcdc) - score_flux(s, g, t, x, y, z, mu, azi, flux, tally["score"]["total"]) + score_flux(g, t, x, y, z, mu, azi, flux, tally["score"]["total"]) if tally["current"]: - score_current(s, g, t, x, y, z, flux, P, tally["score"]["current"]) + score_current(g, t, x, y, z, flux, P, tally["score"]["current"]) if tally["eddington"]: - score_eddington(s, g, t, x, y, z, flux, P, tally["score"]["eddington"]) + score_eddington(g, t, x, y, z, flux, P, tally["score"]["eddington"]) @njit @@ -2208,7 +2201,6 @@ def score_exit(P, x, mcdc): tally = mcdc["tally"] material = mcdc["materials"][P["material_ID"]] - s = P["sensitivity_ID"] mu, azi = mesh_get_angular_index(P, tally["mesh"]) g, outside_energy = mesh_get_energy_index(P, tally["mesh"], mcdc) @@ -2218,27 +2210,27 @@ def score_exit(P, x, mcdc): # Score flux = P["w"] / abs(P["ux"]) - score_flux(s, g, 0, x, 0, 0, mu, azi, flux, tally["score"]["exit"]) + score_flux(g, 0, x, 0, 0, mu, azi, flux, tally["score"]["exit"]) @njit -def score_flux(s, g, t, x, y, z, mu, azi, flux, score): +def score_flux(g, t, x, y, z, mu, azi, flux, score): # score["bin"][s, g, t, x, y, z, mu, azi] += flux - adapt.global_add(score["bin"], (s, g, t, x, y, z, mu, azi), flux) + adapt.global_add(score["bin"], (g, t, x, y, z, mu, azi), flux) @njit -def score_current(s, g, t, x, y, z, flux, P, score): +def score_current(g, t, x, y, z, flux, P, score): # score["bin"][s, g, t, x, y, z, 0] += flux * P["ux"] # score["bin"][s, g, t, x, y, z, 1] += flux * P["uy"] # score["bin"][s, g, t, x, y, z, 2] += flux * P["uz"] - adapt.global_add(score["bin"], (s, g, t, x, y, z, 0), flux * P["ux"]) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 1), flux * P["uy"]) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 2), flux * P["uz"]) + adapt.global_add(score["bin"], (g, t, x, y, z, 0), flux * P["ux"]) + adapt.global_add(score["bin"], (g, t, x, y, z, 1), flux * P["uy"]) + adapt.global_add(score["bin"], (g, t, x, y, z, 2), flux * P["uz"]) @njit -def score_eddington(s, g, t, x, y, z, flux, P, score): +def score_eddington(g, t, x, y, z, flux, P, score): ux = P["ux"] uy = P["uy"] uz = P["uz"] @@ -2248,12 +2240,12 @@ def score_eddington(s, g, t, x, y, z, flux, P, score): # score["bin"][s, g, t, x, y, z, 3] += flux * uy * uy # score["bin"][s, g, t, x, y, z, 4] += flux * uy * uz # score["bin"][s, g, t, x, y, z, 5] += flux * uz * uz - adapt.global_add(score["bin"], (s, g, t, x, y, z, 0), flux * ux * ux) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 1), flux * ux * uy) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 2), flux * ux * uz) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 3), flux * uy * uy) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 4), flux * uy * uz) - adapt.global_add(score["bin"], (s, g, t, x, y, z, 5), flux * uz * uz) + adapt.global_add(score["bin"], (g, t, x, y, z, 0), flux * ux * ux) + adapt.global_add(score["bin"], (g, t, x, y, z, 1), flux * ux * uy) + adapt.global_add(score["bin"], (g, t, x, y, z, 2), flux * ux * uz) + adapt.global_add(score["bin"], (g, t, x, y, z, 3), flux * uy * uy) + adapt.global_add(score["bin"], (g, t, x, y, z, 4), flux * uy * uz) + adapt.global_add(score["bin"], (g, t, x, y, z, 5), flux * uz * uz) @njit @@ -2800,9 +2792,6 @@ def surface_crossing(P, prog): # Small shift to ensure crossing surface_shift(P, surface, trans, mcdc) - # Record old material for sensitivity quantification - material_ID_old = P["material_ID"] - # Tally particle exit if mcdc["tally"]["exit"] and not P["alive"]: # Reflectance if P["surface_ID"] == 0, else transmittance @@ -2818,17 +2807,6 @@ def surface_crossing(P, prog): trans = trans_struct["values"] P["cell_ID"] = get_particle_cell(P, UNIVERSE_ROOT, trans, mcdc) - # Sensitivity quantification for surface? - if surface["sensitivity"] and ( - P["sensitivity_ID"] == 0 - or mcdc["technique"]["dsm_order"] == 2 - and P["sensitivity_ID"] <= mcdc["setting"]["N_sensitivity"] - ): - material_ID_new = get_particle_material(P, mcdc) - if material_ID_old != material_ID_new: - # Sample derivative source particles - sensitivity_surface(P, surface, material_ID_old, material_ID_new, prog) - # ============================================================================= # Collision @@ -2940,7 +2918,6 @@ def sample_phasespace_scattering(P, material, P_new, mcdc): P_new["y"] = P["y"] P_new["z"] = P["z"] P_new["t"] = P["t"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] if mcdc["setting"]["mode_MG"]: scattering_MG(P, material, P_new) @@ -2955,7 +2932,6 @@ def sample_phasespace_scattering_nuclide(P, nuclide, P_new, mcdc): P_new["y"] = P["y"] P_new["z"] = P["z"] P_new["t"] = P["t"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] scattering_MG(P, nuclide, P_new) @@ -3230,7 +3206,6 @@ def sample_phasespace_fission(P, material, P_new, mcdc): P_new["y"] = P["y"] P_new["z"] = P["z"] P_new["t"] = P["t"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] # Sample isotropic direction P_new["ux"], P_new["uy"], P_new["uz"] = sample_isotropic_direction(P_new) @@ -3291,7 +3266,6 @@ def sample_phasespace_fission_nuclide(P, nuclide, P_new, mcdc): P_new["y"] = P["y"] P_new["z"] = P["z"] P_new["t"] = P["t"] - P_new["sensitivity_ID"] = P["sensitivity_ID"] # Sample isotropic direction P_new["ux"], P_new["uy"], P_new["uz"] = sample_isotropic_direction(P_new) @@ -3516,346 +3490,6 @@ def weight_roulette(P, mcdc): P["alive"] = False -# ============================================================================== -# Sensitivity quantification (Derivative Source Method) -# ============================================================================= - - -@njit -def sensitivity_surface(P, surface, material_ID_old, material_ID_new, prog): - - mcdc = adapt.device(prog) - - # Sample number of derivative sources - xi = surface["dsm_Np"] - if xi != 1.0: - Np = int(math.floor(xi + rng(P))) - else: - Np = 1 - - # Terminate and put the current particle into the secondary bank - P["alive"] = False - adapt.add_active(copy_record(P), prog) - - # Get sensitivity ID - ID = surface["sensitivity_ID"] - if mcdc["technique"]["dsm_order"] == 2: - ID1 = min(P["sensitivity_ID"], ID) - ID2 = max(P["sensitivity_ID"], ID) - ID = get_DSM_ID(ID1, ID2, mcdc["setting"]["N_sensitivity"]) - - # Get materials - material_old = mcdc["materials"][material_ID_old] - material_new = mcdc["materials"][material_ID_new] - - # Determine the plus and minus components and then their weight signs - trans = P["translation"] - sign_origin = surface_normal_component(P, surface, trans) - if sign_origin > 0.0: - # New is +, old is - - sign_new = -1.0 - sign_old = 1.0 - else: - sign_new = 1.0 - sign_old = -1.0 - - # Get XS - g = P["g"] - SigmaT_old = material_old["total"][g] - SigmaT_new = material_new["total"][g] - SigmaS_old = material_old["scatter"][g] - SigmaS_new = material_new["scatter"][g] - SigmaF_old = material_old["fission"][g] - SigmaF_new = material_new["fission"][g] - nu_s_old = material_old["nu_s"][g] - nu_s_new = material_new["nu_s"][g] - nu_old = material_old["nu_f"][g] - nu_new = material_new["nu_f"][g] - nuSigmaS_old = nu_s_old * SigmaS_old - nuSigmaS_new = nu_s_new * SigmaS_new - nuSigmaF_old = nu_old * SigmaF_old - nuSigmaF_new = nu_new * SigmaF_new - - # Get source type probabilities - delta = -(SigmaT_old * sign_old + SigmaT_new * sign_new) - scatter = nuSigmaS_old * sign_old + nuSigmaS_new * sign_new - fission = nuSigmaF_old * sign_old + nuSigmaF_new * sign_new - p_delta = abs(delta) - p_scatter = abs(scatter) - p_fission = abs(fission) - p_total = p_delta + p_scatter + p_fission - - # Get inducing flux - # Apply constant flux approximation for tangent direction - # [Dupree 2002, Eq. (7.39)] - mu = abs(sign_origin) - epsilon = 0.01 - if mu < epsilon: - mu = epsilon / 2 - flux = P["w"] / mu - - # Base weight - w_hat = p_total * flux / xi - - # Sample the derivative sources - for n in range(Np): - # Create new particle - P_new = split_particle(P) - - # Sample source type - xi = rng(P) * p_total - tot = p_delta - if tot > xi: - # Delta source - sign_delta = delta / p_delta - P_new["w"] = w_hat * sign_delta - else: - tot += p_scatter - if tot > xi: - # Scattering source - total_scatter = nuSigmaS_old + nuSigmaS_new - w_s = w_hat * total_scatter / p_scatter - - # Sample if it is from + or - component - if nuSigmaS_old > rng(P) * total_scatter: - sample_phasespace_scattering(P, material_old, P_new, mcdc) - P_new["w"] = w_s * sign_old - else: - sample_phasespace_scattering(P, material_new, P_new, mcdc) - P_new["w"] = w_s * sign_new - else: - # Fission source - total_fission = nuSigmaF_old + nuSigmaF_new - w_f = w_hat * total_fission / p_fission - - # Sample if it is from + or - component - if nuSigmaF_old > rng(P) * total_fission: - sample_phasespace_fission(P, material_old, P_new, mcdc) - P_new["w"] = w_f * sign_old - else: - sample_phasespace_fission(P, material_new, P_new, mcdc) - P_new["w"] = w_f * sign_new - - # Assign sensitivity_ID - P_new["sensitivity_ID"] = ID - - # Shift back if needed to ensure crossing - sign = surface_normal_component(P_new, surface, trans) - if sign_origin * sign > 0.0: - # Get surface normal - nx, ny, nz = surface_normal(P_new, surface, trans) - - # The shift - if sign > 0.0: - P_new["x"] -= nx * 2 * SHIFT - P_new["y"] -= ny * 2 * SHIFT - P_new["z"] -= nz * 2 * SHIFT - else: - P_new["x"] += nx * 2 * SHIFT - P_new["y"] += ny * 2 * SHIFT - P_new["z"] += nz * 2 * SHIFT - - # Put the current particle into the secondary bank - adapt.add_active(P_new, prog) - - # Sample potential second-order sensitivity particles? - if mcdc["technique"]["dsm_order"] < 2 or P["sensitivity_ID"] > 0: - return - - # Get total probability - p_total = 0.0 - for material in [material_new, material_old]: - if material["sensitivity"]: - N_nuclide = material["N_nuclide"] - for i in range(N_nuclide): - nuclide = mcdc["nuclides"][material["nuclide_IDs"][i]] - if nuclide["sensitivity"]: - sigmaT = nuclide["total"][g] - sigmaS = nuclide["scatter"][g] - sigmaF = nuclide["fission"][g] - nu_s = nuclide["nu_s"][g] - nu = nuclide["nu_f"][g] - nusigmaS = nu_s * sigmaS - nusigmaF = nu * sigmaF - total = sigmaT + nusigmaS + nusigmaF - p_total += total - - # Base weight - w = p_total * flux / surface["dsm_Np"] - - # Sample source - for n in range(Np): - source_obtained = False - - # Create new particle - P_new = split_particle(P) - - # Sample term - xi = rng(P_new) * p_total - tot = 0.0 - - for idx in range(2): - - if idx == 0: - material_ID = material_ID_old - sign = sign_old - else: - material_ID = material_ID_new - sign = sign_new - - material = mcdc["materials"][material_ID] - if material["sensitivity"]: - N_nuclide = material["N_nuclide"] - for i in range(N_nuclide): - nuclide = mcdc["nuclides"][material["nuclide_IDs"][i]] - if nuclide["sensitivity"]: - # Source ID - ID1 = min(nuclide["sensitivity_ID"], surface["sensitivity_ID"]) - ID2 = max(nuclide["sensitivity_ID"], surface["sensitivity_ID"]) - ID_source = get_DSM_ID( - ID1, ID2, mcdc["setting"]["N_sensitivity"] - ) - - sigmaT = nuclide["total"][g] - sigmaS = nuclide["scatter"][g] - sigmaF = nuclide["fission"][g] - nu_s = nuclide["nu_s"][g] - nu = nuclide["nu_f"][g] - nusigmaS = nu_s * sigmaS - nusigmaF = nu * sigmaF - - tot += sigmaT - if tot > xi: - # Delta source - P_new["w"] = -w * sign - P_new["sensitivity_ID"] = ID_source - adapt.add_active(P_new, prog) - source_obtained = True - else: - P_new["w"] = w * sign - - tot += nusigmaS - if tot > xi: - # Scattering source - sample_phasespace_scattering_nuclide( - P, nuclide, P_new, mcdc - ) - P_new["sensitivity_ID"] = ID_source - adapt.add_active(P_new, prog) - source_obtained = True - else: - tot += nusigmaF - if tot > xi: - # Fission source - sample_phasespace_fission_nuclide( - P, nuclide, P_new, mcdc - ) - P_new["sensitivity_ID"] = ID_source - adapt.add_active(P_new, prog) - source_obtained = True - if source_obtained: - break - if source_obtained: - break - - -@njit -def sensitivity_material(P, prog): - - mcdc = adapt.device(prog) - - # The incident particle is already terminated - - # Get material - material = mcdc["materials"][P["material_ID"]] - - # Check if sensitivity nuclide is sampled - g = P["g"] - SigmaT = material["total"][g] - N_nuclide = material["N_nuclide"] - if N_nuclide == 1: - nuclide = mcdc["nuclides"][material["nuclide_IDs"][0]] - else: - xi = rng(P) * SigmaT - tot = 0.0 - for i in range(N_nuclide): - nuclide = mcdc["nuclides"][material["nuclide_IDs"][i]] - density = material["nuclide_densities"][i] - tot += density * nuclide["total"][g] - if xi < tot: - break - if not nuclide["sensitivity"]: - return - - # Sample number of derivative sources - xi = nuclide["dsm_Np"] - if xi != 1.0: - Np = int(math.floor(xi + rng(P))) - else: - Np = 1 - - # Get sensitivity ID - ID = nuclide["sensitivity_ID"] - double = False - if mcdc["technique"]["dsm_order"] == 2: - ID1 = min(P["sensitivity_ID"], ID) - ID2 = max(P["sensitivity_ID"], ID) - ID = get_DSM_ID(ID1, ID2, mcdc["setting"]["N_sensitivity"]) - if ID1 == ID2: - double = True - - # Undo implicit capture - if mcdc["technique"]["implicit_capture"]: - SigmaC = material["capture"][g] - P["w"] *= SigmaT / (SigmaT - SigmaC) - - # Get XS - g = P["g"] - sigmaT = nuclide["total"][g] - sigmaS = nuclide["scatter"][g] - sigmaF = nuclide["fission"][g] - nu_s = nuclide["nu_s"][g] - nu = nuclide["nu_f"][g] - nusigmaS = nu_s * sigmaS - nusigmaF = nu * sigmaF - - # Base weight - total = sigmaT + nusigmaS + nusigmaF - w = total * P["w"] / sigmaT / xi - - # Double if it's self-second-order - if double: - w *= 2 - - # Sample the derivative sources - for n in range(Np): - # Create new particle - P_new = split_particle(P) - - # Sample source type - xi = rng(P_new) * total - tot = sigmaT - if tot > xi: - # Delta source - P_new["w"] = -w - else: - P_new["w"] = w - - tot += nusigmaS - if tot > xi: - # Scattering source - sample_phasespace_scattering_nuclide(P, nuclide, P_new, mcdc) - else: - # Fission source - sample_phasespace_fission_nuclide(P, nuclide, P_new, mcdc) - - # Assign sensitivity_ID - P_new["sensitivity_ID"] = ID - - # Put the current particle into the secondary bank - adapt.add_active(P_new, prog) - - # ============================================================================== # Particle tracker # ============================================================================== @@ -3890,29 +3524,6 @@ def allocate_pid(P, mcdc): P["track_pid"] = adapt.global_add(mcdc["particle_track_particle_ID"], 0, 1) -# ============================================================================== -# Derivative Source Method (DSM) -# ============================================================================== - - -@njit -def get_DSM_ID(ID1, ID2, Np): - # First-order sensitivity - if ID1 == 0: - return ID2 - - # Self second-order - if ID1 == ID2: - return Np + ID1 - - # Cross second-order - ID1 -= 1 - ID2 -= 1 - return int( - 2 * Np + (Np * (Np - 1) / 2) - (Np - ID1) * ((Np - ID1) - 1) / 2 + ID2 - ID1 - ) - - # ============================================================================= # Continuous Energy Physics # ============================================================================= diff --git a/mcdc/loop.py b/mcdc/loop.py index a614bc19..a3d9b04b 100644 --- a/mcdc/loop.py +++ b/mcdc/loop.py @@ -498,15 +498,6 @@ def step_particle(P, prog): elif event == EVENT_FISSION: kernel.fission(P, prog) - # Sensitivity quantification for nuclide? - material = mcdc["materials"][P["material_ID"]] - if material["sensitivity"] and ( - P["sensitivity_ID"] == 0 - or mcdc["technique"]["dsm_order"] == 2 - and P["sensitivity_ID"] <= mcdc["setting"]["N_sensitivity"] - ): - kernel.sensitivity_material(P, prog) - # Surface crossing if event & EVENT_SURFACE: kernel.surface_crossing(P, prog) @@ -565,7 +556,6 @@ def generate_precursor_particle(DNP, particle_idx, seed_work, prog): P_new["rng_seed"] = part_seed P_new["alive"] = True P_new["w"] = 1.0 - P_new["sensitivity_ID"] = 0 # Set position P_new["x"] = DNP["x"] diff --git a/mcdc/main.py b/mcdc/main.py index d47f7e91..06b9a0c8 100644 --- a/mcdc/main.py +++ b/mcdc/main.py @@ -428,7 +428,7 @@ def prepare(): N_nuclide = len(input_deck.nuclides) for i in range(N_nuclide): # General data - for name in ["ID", "fissionable", "sensitivity", "sensitivity_ID", "dsm_Np"]: + for name in ["ID", "fissionable"]: copy_field(mcdc["nuclides"][i], input_deck.nuclides[i], name) # MG data @@ -765,12 +765,6 @@ def prepare(): mcdc["technique"]["iqmc"]["score"][name] = value # minimum particle weight iqmc["w_min"] = 1e-13 - # ========================================================================= - # Derivative Source Method - # ========================================================================= - - # Threshold - mcdc["technique"]["dsm_order"] = input_deck.technique["dsm_order"] # ========================================================================= # Variance Deconvolution - UQ diff --git a/mcdc/type_.py b/mcdc/type_.py index 43b0e333..72592ca3 100644 --- a/mcdc/type_.py +++ b/mcdc/type_.py @@ -184,7 +184,6 @@ def make_type_particle(input_deck): ("surface_ID", int64), ("translation", float64, (3,)), ("event", int64), - ("sensitivity_ID", int64), ("rng_seed", uint64), ] @@ -223,7 +222,6 @@ def make_type_particle_record(input_deck): ("g", uint64), ("E", float64), ("w", float64), - ("sensitivity_ID", int64), ("rng_seed", uint64), ] @@ -348,9 +346,6 @@ def make_type_nuclide(input_deck): struct = [ ("ID", int64), ("fissionable", bool_), - ("sensitivity", bool_), - ("sensitivity_ID", int64), - ("dsm_Np", float64), ("uq", bool_), ] @@ -446,7 +441,6 @@ def make_type_material(input_deck): struct = [ ("ID", int64), ("N_nuclide", int64), - ("sensitivity", bool_), ("nuclide_IDs", int64, (Nmax_nuclide,)), ("nuclide_densities", float64, (Nmax_nuclide,)), ("uq", bool_), @@ -506,9 +500,6 @@ def make_type_surface(input_deck): ("nx", float64), ("ny", float64), ("nz", float64), - ("sensitivity", bool_), - ("sensitivity_ID", int64), - ("dsm_Np", float64), ] ) @@ -659,14 +650,6 @@ def make_type_source(input_deck): def make_type_tally(input_deck): global tally - # Number of sensitivitys parameters - N_sensitivity = input_deck.setting["N_sensitivity"] - - # Number of tally scores - Ns = 1 + N_sensitivity - if input_deck.technique["dsm_order"] == 2: - Ns = 1 + 2 * N_sensitivity + int(0.5 * N_sensitivity * (N_sensitivity - 1)) - # Get card card = input_deck.tally @@ -688,13 +671,13 @@ def make_type_score(shape): # Scores and shapes scores_shapes = [ - ["flux", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["density", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["fission", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["total", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["current", (Ns, Ng, Nt, Nx, Ny, Nz, 3)], - ["eddington", (Ns, Ng, Nt, Nx, Ny, Nz, 6)], - ["exit", (Ns, Ng, Nt, 2, Ny, Nz, Nmu, N_azi)], + ["flux", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["density", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["fission", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["total", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["current", (Ng, Nt, Nx, Ny, Nz, 3)], + ["eddington", (Ng, Nt, Nx, Ny, Nz, 6)], + ["exit", (Ng, Nt, 2, Ny, Nz, Nmu, N_azi)], ] # Add score flags to structure @@ -760,8 +743,6 @@ def make_type_setting(deck): ("IC_file", bool_), ("IC_file_name", str_), ("N_precursor", uint64), - # TODO: Move to technique - ("N_sensitivity", uint64), ] # Finalize setting type @@ -990,14 +971,6 @@ def make_type_technique(input_deck): ("IC_fission", float64), ] - # ========================================================================= - # Derivative Source Method - # ========================================================================= - - struct += [ - ("dsm_order", int64), - ] - # ========================================================================= # Variance Deconvolution # ========================================================================= @@ -1022,9 +995,6 @@ def make_type_uq_score(shape): # Tally estimator flags struct = [] - # Number of tally scores - Ns = 1 + input_deck.setting["N_sensitivity"] - # Tally card tally_card = input_deck.tally @@ -1033,13 +1003,13 @@ def make_type_uq_score(shape): # Scores and shapes scores_shapes = [ - ["flux", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["density", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["fission", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["total", (Ns, Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], - ["current", (Ns, Ng, Nt, Nx, Ny, Nz, 3)], - ["eddington", (Ns, Ng, Nt, Nx, Ny, Nz, 6)], - ["exit", (Ns, Ng, Nt, 2, Ny, Nz, Nmu, N_azi)], + ["flux", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["density", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["fission", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["total", (Ng, Nt, Nx, Ny, Nz, Nmu, N_azi)], + ["current", (Ng, Nt, Nx, Ny, Nz, 3)], + ["eddington", (Ng, Nt, Nx, Ny, Nz, 6)], + ["exit", (Ng, Nt, 2, Ny, Nz, Nmu, N_azi)], ] # Add score flags to structure diff --git a/test/regression/dsm_azurv1/answer.h5 b/test/regression/dsm_azurv1/answer.h5 deleted file mode 100644 index 0c1afb236da165f4c7919f3ecea2eca2c3c3ecb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265800 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 N-5<x}=wE`z{{y{yts?*c diff --git a/test/regression/dsm_azurv1/input.py b/test/regression/dsm_azurv1/input.py deleted file mode 100644 index 2b358100..00000000 --- a/test/regression/dsm_azurv1/input.py +++ /dev/null @@ -1,37 +0,0 @@ -import numpy as np -import h5py - -import mcdc - - -# ========================================================================= -# Set model and run -# ========================================================================= - -n1 = mcdc.nuclide(capture=np.array([0.5])) -n2 = mcdc.nuclide( - capture=np.array([0.1]), - fission=np.array([0.4]), - nu_p=np.array([2.5]), - sensitivity=True, -) - -m = mcdc.material(nuclides=[(n1, 1.0), (n2, 1.0)]) - -s1 = mcdc.surface("plane-x", x=-1e10, bc="reflective") -s2 = mcdc.surface("plane-x", x=1e10, bc="reflective") - -mcdc.cell(+s1 & -s2, m) - -mcdc.source(point=[0.0, 0.0, 0.0], isotropic=True) - -scores = ["flux"] -mcdc.tally( - scores=scores, - x=np.linspace(-20.0, 20.0, 202), - t=np.linspace(0.0, 20.0, 21), -) - -mcdc.setting(N_particle=30) - -mcdc.run() diff --git a/test/regression/dsm_lattice/answer.h5 b/test/regression/dsm_lattice/answer.h5 deleted file mode 100644 index ea8ee263168e7a66774d101961cd98b5a4fccb43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205048 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 diff --git a/test/regression/dsm_lattice/c5g7.h5 b/test/regression/dsm_lattice/c5g7.h5 deleted file mode 100644 index 218b300f5f762dd74ccccea1acbc60fc80f4dac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49104 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 a+Up{BJH)du{++uWMyNBcaJS=k?f(J8mg=1V diff --git a/test/regression/dsm_lattice/input.py b/test/regression/dsm_lattice/input.py deleted file mode 100644 index 7fc70b08..00000000 --- a/test/regression/dsm_lattice/input.py +++ /dev/null @@ -1,49 +0,0 @@ -import numpy as np -import h5py - -import mcdc - - -# ========================================================================= -# Set model and run -# ========================================================================= - -lib = h5py.File("c5g7.h5", "r") - - -def set_mat(mat): - return mcdc.material( - capture=mat["capture"][:], - scatter=mat["scatter"][:], - fission=mat["fission"][:], - nu_p=mat["nu_p"][:], - nu_d=mat["nu_d"][:], - chi_p=mat["chi_p"][:], - chi_d=mat["chi_d"][:], - speed=mat["speed"], - decay=mat["decay"], - sensitivity=True, - ) - - -mat_uo2 = set_mat(lib["uo2"]) # Fuel: UO2 -mat_mod = set_mat(lib["mod"]) # Moderator -mat_cr = set_mat(lib["cr"]) # Control rod - -s1 = mcdc.surface("plane-x", x=0.0, bc="reflective") -s2 = mcdc.surface("plane-x", x=0.5, sensitivity=True) -s3 = mcdc.surface("plane-x", x=1.5, sensitivity=True) -s4 = mcdc.surface("plane-x", x=2.0, bc="reflective") - -mcdc.cell(+s1 & -s2, mat_uo2) -mcdc.cell(+s2 & -s3, mat_mod) -mcdc.cell(+s3 & -s4, mat_cr) - -mcdc.source(point=[1.0, 0.0, 0.0], energy=[1, 0, 0, 0, 0, 0, 0], isotropic=True) - -scores = ["flux"] -mcdc.tally(scores=scores, x=np.linspace(0.0, 2.0, 11), g="all") - -mcdc.setting(N_particle=3, active_bank_buff=1000) - -mcdc.run() From 2be8ac8e83cfd4b83145e542c055d586c8002892 Mon Sep 17 00:00:00 2001 From: Ilham Variansyah <variansi@oregonstate.edu> Date: Sat, 17 Aug 2024 20:35:56 +0700 Subject: [PATCH 2/2] fix unit test --- test/unit/test_input_.py | 81 +--------------------------------------- 1 file changed, 1 insertion(+), 80 deletions(-) diff --git a/test/unit/test_input_.py b/test/unit/test_input_.py index 59158962..b7c8660e 100644 --- a/test/unit/test_input_.py +++ b/test/unit/test_input_.py @@ -50,7 +50,6 @@ def test_nuclide_basic(): ), speed=np.array([1.0, 2.0, 3.0, 4.0]), decay=np.array([1.0, 2.0, 3.0]), - sensitivity=True, ) assert n1.tag == "Nuclide" @@ -80,8 +79,6 @@ def test_nuclide_basic(): assert (n1.chi_s == np.ones([4, 4]) * 0.25).all() assert (n1.chi_p == np.ones([4, 4]) * 0.25).all() assert (n1.chi_d == np.ones([3, 4]) * 0.25).all() - assert n1.sensitivity == True - assert n1.sensitivity_ID == 1 def test_nuclide_default(): @@ -109,8 +106,6 @@ def test_nuclide_default(): assert (n1.chi_s == np.zeros((5, 5))).all() assert (n1.chi_p == np.zeros((5, 5))).all() assert (n1.chi_d == np.zeros((0, 5))).all() - assert n1.sensitivity == False - assert n1.sensitivity_ID == 0 assert (n2.capture == np.zeros(5)).all() assert (n2.scatter == np.ones(5) * 5.0).all() @@ -122,8 +117,6 @@ def test_nuclide_default(): assert (n2.chi_s == np.ones((5, 5)) * 0.2).all() assert (n2.chi_p == np.zeros((5, 5))).all() assert (n2.chi_d == np.zeros((0, 5))).all() - assert n2.sensitivity == False - assert n2.sensitivity_ID == 0 assert (n3.capture == np.zeros(5)).all() assert (n3.scatter == np.zeros(5)).all() @@ -135,45 +128,6 @@ def test_nuclide_default(): assert (n3.chi_s == np.zeros((5, 5))).all() assert (n3.chi_p == np.ones((5, 5)) * 0.2).all() assert (n3.chi_d == np.zeros((0, 5))).all() - assert n3.sensitivity == False - assert n3.sensitivity_ID == 0 - - -def test_nuclide_IDs_sensitivity(): - # Start fresh - mcdc.reset() - - # Create nuclides with various sensitivity tags - n1 = mcdc.nuclide(capture=np.array([1.0]), sensitivity=True) - n2 = mcdc.nuclide(capture=np.array([1.0])) - n3 = mcdc.nuclide(capture=np.array([1.0]), sensitivity=True) - n4 = mcdc.nuclide(capture=np.array([1.0]), sensitivity=True) - n5 = mcdc.nuclide(capture=np.array([1.0])) - n6 = mcdc.nuclide(capture=np.array([1.0])) - n7 = mcdc.nuclide(capture=np.array([1.0]), sensitivity=True) - - # Checks - assert n1.ID == 0 - assert n2.ID == 1 - assert n3.ID == 2 - assert n4.ID == 3 - assert n5.ID == 4 - assert n6.ID == 5 - assert n7.ID == 6 - assert n1.sensitivity - assert not n2.sensitivity - assert n3.sensitivity - assert n4.sensitivity - assert not n5.sensitivity - assert not n6.sensitivity - assert n7.sensitivity - assert n1.sensitivity_ID == 1 - assert n2.sensitivity_ID == 0 - assert n3.sensitivity_ID == 2 - assert n4.sensitivity_ID == 3 - assert n5.sensitivity_ID == 0 - assert n6.sensitivity_ID == 0 - assert n7.sensitivity_ID == 4 # ====================================================================================== @@ -224,7 +178,6 @@ def test_material_single(): ), speed=np.array([1.0, 2.0, 3.0, 4.0]), decay=np.array([1.0, 2.0, 3.0]), - sensitivity=True, ) # Checks @@ -256,7 +209,6 @@ def test_material_single(): assert (m1.nu_f == np.array([4.0, 8.0, 12.0, 16.0])).all() assert (m1.chi_s == np.ones([4, 4]) * 0.25).all() assert (m1.chi_p == np.ones([4, 4]) * 0.25).all() - assert m1.sensitivity == True # Check if the nuclide was registered n2 = mcdc.nuclide(capture=np.ones(5)) @@ -269,7 +221,7 @@ def test_material_multi(): # Create a multi-nuclide material n1 = mcdc.nuclide(capture=np.ones(5), speed=np.ones(5) * 1) - n2 = mcdc.nuclide(scatter=np.ones((5, 5)), speed=np.ones(5) * 2, sensitivity=True) + n2 = mcdc.nuclide(scatter=np.ones((5, 5)), speed=np.ones(5) * 2) n3 = mcdc.nuclide( fission=np.ones(5), nu_p=np.ones(5), chi_p=np.ones((5, 5)), speed=np.ones(5) * 3 ) @@ -285,37 +237,6 @@ def test_material_multi(): assert m1.J == 0 assert (m1.total == np.ones(5) * 14).all() assert (m1.speed == np.ones(5) * 30 / 14).all() - assert m1.sensitivity == True - - -def test_material_IDs_sensitivity(): - # Start fresh - mcdc.reset() - - # Create materials with various sensitivity tags - m1 = mcdc.material(capture=np.array([1.0]), sensitivity=True) - m2 = mcdc.material(capture=np.array([1.0])) - m3 = mcdc.material(capture=np.array([1.0]), sensitivity=True) - m4 = mcdc.material(capture=np.array([1.0]), sensitivity=True) - m5 = mcdc.material(capture=np.array([1.0])) - m6 = mcdc.material(capture=np.array([1.0])) - m7 = mcdc.material(capture=np.array([1.0]), sensitivity=True) - - # Checks - assert m1.ID == 0 - assert m2.ID == 1 - assert m3.ID == 2 - assert m4.ID == 3 - assert m5.ID == 4 - assert m6.ID == 5 - assert m7.ID == 6 - assert m1.sensitivity - assert not m2.sensitivity - assert m3.sensitivity - assert m4.sensitivity - assert not m5.sensitivity - assert not m6.sensitivity - assert m7.sensitivity # ======================================================================================