def test_alara_responses_output_zone(): # test decay_heat response = ["decay_heat", "specific_activity"] exp_response_code = """output zone total_heat specific_activity end""" response_code = responses_output_zone(response) assert_equal(response_code, exp_response_code) # wrong nuc option raise test assert_raises(ValueError, responses_output_zone, "test")
def irradiation_setup(flux_mesh, cell_mats, cell_fracs, alara_params, tally_num=4, num_rays=10, grid=False, flux_tag="n_flux", fluxin="alara_fluxin", reverse=False, alara_inp="alara_inp", alara_matlib="alara_matlib", output_mesh="r2s_step1.h5m", output_material=False, decay_times=None, sub_voxel=False, responses=None, wdr_file=None): """This function is used to setup the irradiation inputs after the first R2S transport step. Parameters ---------- flux_mesh : PyNE Meshtal object, Mesh object, or str The source of the neutron flux information. This can be a PyNE Meshtal object, a pyne Mesh object, or the filename an MCNP meshtal file, or the filename of an unstructured mesh tagged with fluxes. cell_mats : dict Maps geometry cell numbers to PyNE Material objects. cell_fracs : record array The output of dagmc.discretize_geom(). alara_params : str The ALARA input blocks specifying everything except the geometry and materials. This can either be passed as string or as a file name. tally_num : int The MCNP FMESH4 tally number of the neutron flux tally within the meshtal file. num_rays : int, optional The number of rays to fire down a mesh row for geometry discretization. This number must be a perfect square if grid=True. grid : bool, optional The if False, geometry discretization will be done with randomly fired rays. If true, a grid of sqrt(num_rays) x sqrt(num_rays) rays is used for each mesh row. flux_tag : str, optional The mesh tag for the neutron flux. fluxin : str, optional The name of the ALARA fluxin file to be created. reverse : bool, optional If True the fluxes in the fluxin file will be printed in the reverse order of how they appear within the flux vector tag. Since MCNP and the Meshtal class order fluxes from low energy to high energy, this option should only be true if the transmutation data being used is ordered from high energy to low energy. alara_inp : str, optional The name of the ALARA input file to be created. alara_matlib : str, optional The name of the alara_matlib file to be created. output_mesh : str, optional A mesh containing all the fluxes and materials used for irradiation setup. output_material : bool, optional If true, output mesh will have materials as determined by dagmc.discretize_geom() decay_times: list List of the decay times. If no decay times given, use '1 s'. sub_voxel : bool, optional If true, sub-voxel r2s work flow will be used. responses : list of str, optional The list of requested responses. wdr_file : str Path to the wdr file. """ m = resolve_mesh(flux_mesh, tally_num, flux_tag, output_material) if output_material: m.cell_fracs_to_mats(cell_fracs, cell_mats) mesh_to_fluxin(m, flux_tag, fluxin, reverse, sub_voxel, cell_fracs, cell_mats) record_to_geom(m, cell_fracs, cell_mats, alara_inp, alara_matlib, sub_voxel=sub_voxel) # write decay times into alara_inp if decay_times is None: decay_times = ['1 s'] decay_str = 'cooling\n' for dc in decay_times: decay_str = ''.join([decay_str, ' ', dc, '\n']) decay_str = ''.join([decay_str, 'end\n']) with open(alara_inp, 'a') as f: f.write(decay_str) if isfile(alara_params): with open(alara_params, 'r') as f: alara_params = f.read() with open(alara_inp, 'a') as f: f.write("\n" + alara_params) # append responses output zone with open(alara_inp, 'a') as f: f.write(responses_output_zone(responses, wdr_file, alara_params)) m.write_hdf5(output_mesh)