コード例 #1
0
def runSimulation(threads, histories, time):

    ##--------------------------------------------------------------------------##
    ## ------------------------------ MPI Session ----------------------------- ##
    ##--------------------------------------------------------------------------##
    session = MPI.GlobalMPISession(len(sys.argv), sys.argv)
    Utility.removeAllLogs()
    session.initializeLogs(0, True)

    if session.rank() == 0:
        print "The PyFrensie path is set to: ", pyfrensie_path

    properties = setSimulationProperties(histories, time)

    ##--------------------------------------------------------------------------##
    ## ---------------------------- GEOMETRY SETUP ---------------------------- ##
    ##--------------------------------------------------------------------------##

    # Set element zaid and name
    atom = Data.H_ATOM
    zaid = 1000
    element = "H"

    # Set geometry path and type
    model_properties = DagMC.DagMCModelProperties(geometry_path)
    model_properties.useFastIdLookup()

    # Set model
    geom_model = DagMC.DagMCModel(model_properties)

    ##--------------------------------------------------------------------------##
    ## -------------------------- EVENT HANDLER SETUP ------------------------- ##
    ##--------------------------------------------------------------------------##

    # Set event handler
    event_handler = Event.EventHandler(properties)

    # Set the energy bins
    if energy == 0.1:
        bins = list(Utility.doubleArrayFromString("{ 1e-4, 5e-4, 198i, 1e-1}"))
    elif energy == 0.01:
        bins = list(
            Utility.doubleArrayFromString("{ 1e-4, 58i, 6e-3, 99i, 1e-2}"))
    elif energy == 0.001:
        bins = list(Utility.doubleArrayFromString("{ 1e-4, 197i, 1e-3}"))
    else:
        print "ERROR: energy ", energy, " not supported!"

    ## -------------------------- Track Length Flux --------------------------- ##

    # Setup a track length flux estimator
    estimator_id = 1
    cell_ids = [1]
    track_flux_estimator = Event.WeightMultipliedCellTrackLengthFluxEstimator(
        estimator_id, 1.0, cell_ids, geom_model)

    # Set the particle type
    track_flux_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the energy bins
    track_flux_estimator.setEnergyDiscretization(bins)

    # Add the estimator to the event handler
    event_handler.addEstimator(track_flux_estimator)

    ## ------------------------ Surface Flux Estimator ------------------------ ##

    # Setup a surface flux estimator
    estimator_id = 2
    surface_ids = [1]
    surface_flux_estimator = Event.WeightMultipliedSurfaceFluxEstimator(
        estimator_id, 1.0, surface_ids, geom_model)

    # Set the particle type
    surface_flux_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the energy bins
    surface_flux_estimator.setEnergyDiscretization(bins)

    # Add the estimator to the event handler
    event_handler.addEstimator(surface_flux_estimator)

    ## ---------------------- Surface Current Estimator ----------------------- ##

    # Setup a surface current estimator
    estimator_id = 3
    surface_ids = [1]
    surface_current_estimator = Event.WeightMultipliedSurfaceCurrentEstimator(
        estimator_id, 1.0, surface_ids)

    # Set the particle type
    surface_current_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the energy bins
    surface_current_estimator.setEnergyDiscretization(bins)

    # Add the estimator to the event handler
    event_handler.addEstimator(surface_current_estimator)

    ##--------------------------------------------------------------------------##
    ## ----------------------- SIMULATION MANAGER SETUP ----------------------- ##
    ##--------------------------------------------------------------------------##

    # Initialized database
    database = Data.ScatteringCenterPropertiesDatabase(database_path)
    scattering_center_definition_database = Collision.ScatteringCenterDefinitionDatabase(
    )

    # Set element properties
    element_properties = database.getAtomProperties(atom)

    element_definition = scattering_center_definition_database.createDefinition(
        element, Data.ZAID(zaid))

    version = 0
    if file_type == Data.ElectroatomicDataProperties.ACE_EPR_FILE:
        version = 14

    element_definition.setElectroatomicDataProperties(
        element_properties.getSharedElectroatomicDataProperties(
            file_type, version))

    material_definition_database = Collision.MaterialDefinitionDatabase()
    material_definition_database.addDefinition(element, 1, (element, ),
                                               (1.0, ))

    # Fill model
    model = Collision.FilledGeometryModel(
        database_path, scattering_center_definition_database,
        material_definition_database, properties, geom_model, True)

    # Set particle distribution
    particle_distribution = ActiveRegion.StandardParticleDistribution(
        "source distribution")

    # Set the energy dimension distribution
    delta_energy = Distribution.DeltaDistribution(energy)
    energy_dimension_dist = ActiveRegion.IndependentEnergyDimensionDistribution(
        delta_energy)
    particle_distribution.setDimensionDistribution(energy_dimension_dist)

    # Set the spatial dimension distribution
    particle_distribution.setPosition(0.0, 0.0, 0.0)

    particle_distribution.constructDimensionDistributionDependencyTree()

    # Set source components
    source_component = [
        ActiveRegion.StandardElectronSourceComponent(0, 1.0, geom_model,
                                                     particle_distribution)
    ]

    # Set source
    source = ActiveRegion.StandardParticleSource(source_component)

    # Set the archive type
    archive_type = "xml"

    name, title = setSimulationName(properties)

    factory = Manager.ParticleSimulationManagerFactory(model, source,
                                                       event_handler,
                                                       properties, name,
                                                       archive_type, threads)

    manager = factory.getManager()

    Utility.removeAllLogs()
    session.initializeLogs(0, False)

    manager.runSimulation()

    if session.rank() == 0:

        print "Processing the results:"
        processData(event_handler, name, title)

        print "Results will be in ", path.dirname(name)
コード例 #2
0
def runAdjointSimulation( sim_name,
                          db_path,
                          geom_name,
                          num_particles,
                          incoherent_model_type,
                          threads,
                          use_energy_bins = False,
                          log_file= None ):

    ## Initialize the MPI session
    session = MPI.GlobalMPISession( len(sys.argv), sys.argv )

    # Suppress logging on all procs except for the master (proc=0)
    Utility.removeAllLogs()
    session.initializeLogs( 0, True )

    if not log_file is None:
        session.initializeLogs( log_file, 0, True )

    ## Set the simulation properties
    simulation_properties = MonteCarlo.SimulationProperties()

    # Simulate photons only
    simulation_properties.setParticleMode( MonteCarlo.ADJOINT_PHOTON_MODE )
    simulation_properties.setIncoherentAdjointModelType( incoherent_model_type )
    simulation_properties.setMinAdjointPhotonEnergy( 1e-3 )
    
    if incoherent_model_type == MonteCarlo.DB_IMPULSE_INCOHERENT_ADJOINT_MODEL:
        simulation_properties.setMaxAdjointPhotonEnergy( energy_bins[-1]*1.5 )
    else:
        simulation_properties.setMaxAdjointPhotonEnergy( energy_bins[-1] )

    
    simulation_properties.setCriticalAdjointPhotonLineEnergies( [0.186211, 0.241995, 0.2656, 0.2952228, 0.3046, 0.3519321, 0.60932, 0.6496, 0.665447, 0.76836,  0.78596, 0.80618, 0.934056, 1.120294, 1.15521, 1.238122, 1.280976, 1.377669, 1.401515, 1.407988, 1.50921, 1.661274, 1.729595, 1.764491, 1.847429, 2.118514, 2.204059, 2.44770] )
    simulation_properties.setAdjointPhotonRouletteThresholdWeight( 0.0025 )
    simulation_properties.setAdjointPhotonRouletteSurvivalWeight(  0.005 )
    simulation_properties.setNumberOfAdjointPhotonHashGridBins( 100 )

    # Set the number of histories to run and the number of rendezvous
    simulation_properties.setNumberOfHistories( num_particles )
    simulation_properties.setMinNumberOfRendezvous( 100 )
    simulation_properties.setNumberOfSnapshotsPerBatch( 1 )

    ## Set up the materials
    database = Data.ScatteringCenterPropertiesDatabase( db_path )

    # Extract the properties from the database
    c_atom_properties = database.getAtomProperties( Data.ZAID(6000) )
    n_atom_properties = database.getAtomProperties( Data.ZAID(7000) )
    o_atom_properties = database.getAtomProperties( Data.ZAID(8000) )
    na_atom_properties = database.getAtomProperties( Data.ZAID(11000) )
    mg_atom_properties = database.getAtomProperties( Data.ZAID(12000) )
    al_atom_properties = database.getAtomProperties( Data.ZAID(13000) )
    si_atom_properties = database.getAtomProperties( Data.ZAID(14000) )
    ar_atom_properties = database.getAtomProperties( Data.ZAID(18000) )
    k_atom_properties = database.getAtomProperties( Data.ZAID(19000) )
    ca_atom_properties = database.getAtomProperties( Data.ZAID(20000) )
    ti_atom_properties = database.getAtomProperties( Data.ZAID(22000) )
    mn_atom_properties = database.getAtomProperties( Data.ZAID(25000) )
    fe_atom_properties = database.getAtomProperties( Data.ZAID(26000) )

    # Set the atom definitions
    scattering_center_definitions = Collision.ScatteringCenterDefinitionDatabase()

    c_atom_definition = scattering_center_definitions.createDefinition( "C", Data.ZAID(6000) )
    n_atom_definition = scattering_center_definitions.createDefinition( "N", Data.ZAID(7000) )
    o_atom_definition = scattering_center_definitions.createDefinition( "O", Data.ZAID(8000) )
    na_atom_definition = scattering_center_definitions.createDefinition( "Na", Data.ZAID(11000) )
    mg_atom_definition = scattering_center_definitions.createDefinition( "Mg", Data.ZAID(12000) )
    al_atom_definition = scattering_center_definitions.createDefinition( "Al", Data.ZAID(13000) )
    si_atom_definition = scattering_center_definitions.createDefinition( "Si", Data.ZAID(14000) )
    ar_atom_definition = scattering_center_definitions.createDefinition( "Ar", Data.ZAID(18000) )
    k_atom_definition = scattering_center_definitions.createDefinition( "K", Data.ZAID(19000) )
    ca_atom_definition = scattering_center_definitions.createDefinition( "Ca", Data.ZAID(20000) )
    ti_atom_definition = scattering_center_definitions.createDefinition( "Ti", Data.ZAID(22000) )
    mn_atom_definition = scattering_center_definitions.createDefinition( "Mn", Data.ZAID(25000) )
    fe_atom_definition = scattering_center_definitions.createDefinition( "Fe", Data.ZAID(26000) )

    data_file_type = Data.AdjointPhotoatomicDataProperties.Native_EPR_FILE
    file_version = 0

    c_atom_definition.setAdjointPhotoatomicDataProperties( c_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    n_atom_definition.setAdjointPhotoatomicDataProperties( n_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    o_atom_definition.setAdjointPhotoatomicDataProperties( o_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    na_atom_definition.setAdjointPhotoatomicDataProperties( na_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    mg_atom_definition.setAdjointPhotoatomicDataProperties( mg_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    al_atom_definition.setAdjointPhotoatomicDataProperties( al_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    si_atom_definition.setAdjointPhotoatomicDataProperties( si_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    ar_atom_definition.setAdjointPhotoatomicDataProperties( ar_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    k_atom_definition.setAdjointPhotoatomicDataProperties( k_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    ca_atom_definition.setAdjointPhotoatomicDataProperties( ca_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    ti_atom_definition.setAdjointPhotoatomicDataProperties( ti_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    mn_atom_definition.setAdjointPhotoatomicDataProperties( mn_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )
    fe_atom_definition.setAdjointPhotoatomicDataProperties( fe_atom_properties.getSharedAdjointPhotoatomicDataProperties( data_file_type, file_version ) )

    # Set the definition for material 1 (ave soil US from PNNL-15870 Rev1)
    material_definitions = Collision.MaterialDefinitionDatabase()
    material_definitions.addDefinition( "Soil", 1, ["O", "Na", "Mg", "Al", "Si", "K", "Ca", "Ti", "Mn", "Fe"], [0.670604, 0.005578, 0.011432, 0.053073, 0.201665, 0.007653, 0.026664, 0.002009, 0.000272, 0.021050] )
    
    material_definitions.addDefinition( "Air", 2, ["C", "N", "O", "Ar"], [0.000150, 0.784431, 0.231781, 0.004671] )

    # Set up the geometry
    model_properties = DagMC.DagMCModelProperties( geom_name )
    model_properties.setMaterialPropertyName( "mat" )
    model_properties.setDensityPropertyName( "rho" )
    model_properties.setTerminationCellPropertyName( "termination.cell" )
    model_properties.setReflectingSurfacePropertyName( "reflecting.surface" )
    model_properties.setSurfaceFluxName( "surface.flux" )
    model_properties.useFastIdLookup()

    # Load the model
    model = DagMC.DagMCModel( model_properties )

    # Fill the model with the defined material
    filled_model = Collision.FilledGeometryModel( db_path, scattering_center_definitions, material_definitions, simulation_properties, model, True )

    # Set up the source
    particle_distribution = ActiveRegion.StandardParticleDistribution( "isotropic point source" )

    uniform_energy = Distribution.UniformDistribution( 1e-3, energy_bins[-1] )
    energy_dimension_dist = ActiveRegion.IndependentEnergyDimensionDistribution( uniform_energy )
    particle_distribution.setDimensionDistribution( energy_dimension_dist )
    particle_distribution.setPosition( 0.0, 0.0, 5200.0 )
    particle_distribution.constructDimensionDistributionDependencyTree()

    # The generic distribution will be used to generate photons
    adjoint_photon_distribution = ActiveRegion.StandardAdjointPhotonSourceComponent( 0, 1.0, filled_model, particle_distribution )

    # Assign the photon source component to the source
    source = ActiveRegion.StandardParticleSource( [adjoint_photon_distribution] )

    ## Set up the event handler
    event_handler = Event.EventHandler( model, simulation_properties )

    # Create the discrete forward source line energy response function
    discrete_energy_response_function = ActiveRegion.EnergyParticleResponseFunction( Distribution.DiscreteDistribution( [0.186211, 0.241995, 0.2656, 0.2952228, 0.3046, 0.3519321, 0.60932, 0.6496, 0.665447, 0.76836, 0.78596, 0.80618, 0.934056, 1.120294, 1.15521, 1.238122, 1.280976, 1.377669, 1.401515, 1.407988, 1.50921, 1.661274, 1.729595, 1.764491, 1.847429, 2.118514, 2.204059, 2.44770],
                                                                                                                        [0.013622652525055947, 0.02713677292834634, 0.1908668348290806, 0.068936609755915, 0.10478963480812267, 0.13323253568461313, 0.17024573169362503, 0.012724455655272039, 0.0057297475318298504, 0.01831573116967687, 0.00396703617487893, 0.004730503514195252, 0.011627906976744184, 0.05583790540489965, 0.006111481201488011, 0.021833668909663845, 0.005366726296958854, 0.014925037986242614, 0.004977507653385827, 0.00895951377609449, 0.007971497219332189, 0.003918383844432301, 0.010770877463492038, 0.057260050448724176, 0.007578536088801728, 0.004341284870622224, 0.01842800577839986, 0.005793369810106211] ) )

    # Create the flux-to-effective dose from ICRP-116 table A.1, ISO values)
    flux_to_dose_response_function = ActiveRegion.SourceEnergyParticleResponseFunction( Distribution.TabularDistribution_LinLin( [0.01, 0.015, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.15, 0.2, 0.3, 0.4, 0.5, 0.511, 0.6, 0.662, 0.8, 1.0, 1.117, 1.33, 1.5, 2.0, 3.0],
                                                                                                                                 [0.0288, 0.0560, 0.0812, 0.127, 0.158, 0.180, 0.199, 0.218, 0.239, 0.287, 0.429, 0.589, 0.932, 1.28, 1.63, 1.67, 1.97, 2.17, 2.62, 3.25, 3.60, 4.20, 4.66, 5.90, 8.08] ) )

    # Create the complete response function
    response = ActiveRegion.StandardParticleResponse( discrete_energy_response_function*flux_to_dose_response_function/1000.0 )

    source_norm = 1462129.344*(energy_bins[-1] - 1e-3)

    # Create the cell track-length flux estimator
    cell_flux_estimator = Event.WeightMultipliedCellTrackLengthFluxEstimator( 1, source_norm, [2], model )
    cell_flux_estimator.setParticleTypes( [MonteCarlo.ADJOINT_PHOTON] )
    cell_flux_estimator.setResponseFunctions( [response] )

    event_handler.addEstimator( cell_flux_estimator )

    # Create the second estimator
    if use_energy_bins:
        cell_flux_estimator_2 = Event.WeightMultipliedCellTrackLengthFluxEstimator( 2, source_norm, [2], model )
        cell_flux_estimator_2.setSourceEnergyDiscretization( energy_bins )
        cell_flux_estimator_2.setParticleTypes( [MonteCarlo.ADJOINT_PHOTON] )
        cell_flux_estimator_2.setResponseFunctions( [response] )
        
        event_handler.addEstimator( cell_flux_estimator_2 )

    # Set up the simulation manager
    factory = Manager.ParticleSimulationManagerFactory( filled_model,
                                                        source,
                                                        event_handler,
                                                        simulation_properties,
                                                        sim_name,
                                                        "xml",
                                                        threads )

    # Create the simulation manager
    manager = factory.getManager()
    manager.useSingleRendezvousFile()

    # Allow logging on all procs
    session.restoreOutputStreams()

    ## Run the simulation
    if session.size() == 1:
        manager.runInterruptibleSimulation()
    else:
        manager.runSimulation()
コード例 #3
0
# Set the particle type
reflection_current_estimator.setParticleTypes( [MonteCarlo.ELECTRON] )

# Set the cosine bins
cosine_bins = [ -1.0, -0.999999, 1.0 ]
reflection_current_estimator.setCosineDiscretization( cosine_bins )

# Add the estimator to the event handler
event_handler.addEstimator( reflection_current_estimator )

## ---------------------- Track Length Flux Estimator ---------------------- ##

# Setup a track length flux estimator
estimator_id = 3
cell_ids = [7]
track_flux_estimator = Event.WeightMultipliedCellTrackLengthFluxEstimator( estimator_id, 1.0, cell_ids, geom_model )

# Set the particle type
track_flux_estimator.setParticleTypes( [MonteCarlo.ELECTRON] )

# Set the energy bins
energy_bins = numpy.logspace(numpy.log10(1.5e-5), numpy.log10(15.7), num=101) #[ 1.5e-5, 99l, 15.7 ]
track_flux_estimator.setEnergyDiscretization( energy_bins )

# Add the estimator to the event handler
event_handler.addEstimator( track_flux_estimator )

##---------------------------------------------------------------------------##
## ----------------------- SIMULATION MANAGER SETUP ------------------------ ##
##---------------------------------------------------------------------------##
コード例 #4
0
ファイル: hanson.py プロジェクト: psbritt/FRENSIE-tests
def runSimulation(threads, histories, time):

    ##--------------------------------------------------------------------------##
    ## ------------------------------ MPI Session ----------------------------- ##
    ##--------------------------------------------------------------------------##
    session = MPI.GlobalMPISession(len(sys.argv), sys.argv)
    Utility.removeAllLogs()
    session.initializeLogs(0, True)

    if session.rank() == 0:
        print "The PyFrensie path is set to: ", pyfrensie_path

    properties = setSimulationProperties(histories, time)

    ##--------------------------------------------------------------------------##
    ## ---------------------------- GEOMETRY SETUP ---------------------------- ##
    ##--------------------------------------------------------------------------##

    # Set geometry path and type
    geometry_type = "DagMC"  #(ROOT or DAGMC)

    # Set element zaid and name
    atom = Data.Au_ATOM
    zaid = 79000
    element = "Au"

    # Set geometry path and type
    model_properties = DagMC.DagMCModelProperties(geometry_path)
    model_properties.useFastIdLookup()

    # Set model
    geom_model = DagMC.DagMCModel(model_properties)

    ##--------------------------------------------------------------------------##
    ## -------------------------- EVENT HANDLER SETUP ------------------------- ##
    ##--------------------------------------------------------------------------##

    # Set event handler
    event_handler = Event.EventHandler(properties)

    ## -------------------- Transmission Current Estimator -------------------- ##

    # Setup a surface current estimator for the transmission current
    estimator_id = 1
    surface_ids = [1]
    transmission_current_estimator = Event.WeightMultipliedSurfaceCurrentEstimator(
        estimator_id, 1.0, surface_ids)

    # Set the particle type
    transmission_current_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the cosine bins
    cosine_bins_1 = [
        -1.000000000000000, 0.000000000000000, 0.939692620785908,
        0.965925826289068, 0.984807753012208, 0.990268068741570,
        0.994521895368273, 0.995396198367179, 0.996194698091746,
        0.996917333733128, 0.997564050259824, 0.998134798421867,
        0.998629534754574, 0.999048221581858, 0.999390827019096,
        0.999657324975557, 0.999847695156391, 0.999961923064171,
        1.000000000000000
    ]

    transmission_current_estimator.setCosineDiscretization(cosine_bins_1)

    # Add the estimator to the event handler
    event_handler.addEstimator(transmission_current_estimator)

    ## --------------------- Reflection Current Estimator --------------------- ##

    # Setup a surface current estimator for the reflection current
    estimator_id = 2
    surface_ids = [2]
    reflection_current_estimator = Event.WeightMultipliedSurfaceCurrentEstimator(
        estimator_id, 1.0, surface_ids)

    # Set the particle type
    reflection_current_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the cosine bins
    cosine_bins_2 = [-1.0, -0.999999, 0.0, 1.0]
    reflection_current_estimator.setCosineDiscretization(cosine_bins_2)

    # Add the estimator to the event handler
    event_handler.addEstimator(reflection_current_estimator)

    ## ---------------------- Track Length Flux Estimator --------------------- ##

    # Setup a track length flux estimator
    estimator_id = 3
    cell_ids = [1]
    track_flux_estimator = Event.WeightMultipliedCellTrackLengthFluxEstimator(
        estimator_id, 1.0, cell_ids, geom_model)

    # Set the particle type
    track_flux_estimator.setParticleTypes([MonteCarlo.ELECTRON])

    # Set the energy bins
    energy_bins = numpy.logspace(numpy.log10(1.5e-5),
                                 numpy.log10(15.7),
                                 num=101)  #[ 1.5e-5, 99l, 15.7 ]
    track_flux_estimator.setEnergyDiscretization(energy_bins)

    # Add the estimator to the event handler
    event_handler.addEstimator(track_flux_estimator)

    ##--------------------------------------------------------------------------##
    ## ----------------------- SIMULATION MANAGER SETUP ----------------------- ##
    ##--------------------------------------------------------------------------##

    # Initialized database
    database = Data.ScatteringCenterPropertiesDatabase(database_path)
    scattering_center_definition_database = Collision.ScatteringCenterDefinitionDatabase(
    )

    # Set element properties
    element_properties = database.getAtomProperties(atom)

    element_definition = scattering_center_definition_database.createDefinition(
        element, Data.ZAID(zaid))

    version = 0
    if file_type == Data.ElectroatomicDataProperties.ACE_EPR_FILE:
        version = 14

    element_definition.setElectroatomicDataProperties(
        element_properties.getSharedElectroatomicDataProperties(
            file_type, version))

    material_definition_database = Collision.MaterialDefinitionDatabase()
    material_definition_database.addDefinition(element, 1, (element, ),
                                               (1.0, ))

    # Fill model
    model = Collision.FilledGeometryModel(
        database_path, scattering_center_definition_database,
        material_definition_database, properties, geom_model, True)

    # Set particle distribution
    particle_distribution = ActiveRegion.StandardParticleDistribution(
        "source distribution")

    # Set the energy dimension distribution
    delta_energy = Distribution.DeltaDistribution(15.7)
    energy_dimension_dist = ActiveRegion.IndependentEnergyDimensionDistribution(
        delta_energy)
    particle_distribution.setDimensionDistribution(energy_dimension_dist)

    # Set the direction dimension distribution
    particle_distribution.setDirection(0.0, 0.0, 1.0)

    # Set the spatial dimension distribution
    particle_distribution.setPosition(0.0, 0.0, -0.1)

    particle_distribution.constructDimensionDistributionDependencyTree()

    # Set source components
    source_component = [
        ActiveRegion.StandardElectronSourceComponent(0, 1.0, geom_model,
                                                     particle_distribution)
    ]

    # Set source
    source = ActiveRegion.StandardParticleSource(source_component)

    # Set the archive type
    archive_type = "xml"

    name, title = setSimulationName(properties)

    factory = Manager.ParticleSimulationManagerFactory(model, source,
                                                       event_handler,
                                                       properties, name,
                                                       archive_type, threads)

    manager = factory.getManager()

    Utility.removeAllLogs()
    session.initializeLogs(0, False)

    manager.runSimulation()

    if session.rank() == 0:

        print "Processing the results:"
        processCosineBinData(transmission_current_estimator, cosine_bins_1,
                             name, title)

        print "Results will be in ", path.dirname(name)
コード例 #5
0
  particle_distribution.constructDimensionDistributionDependencyTree()

  source_component = ActiveRegion.StandardPhotonSourceComponent(1, 1.0, model, particle_distribution)
  source = ActiveRegion.StandardParticleSource([source_component])

  event_handler = Event.EventHandler( model, simulation_properties )

  #I DON'T THINK MCNP HAS THIS KIND OF ESTIMATOR, SO IGNORE IF IT DOESN'T EXIST

  cell_integral_estimator = Event.WeightMultipliedCellCollisionFluxEstimator(1, 1.0, [1], model)
  cell_integral_estimator.setParticleTypes([MonteCarlo.PHOTON])
  event_handler.addEstimator(cell_integral_estimator)

  #ESTIMATOR OF INTEREST - TRACK LENGTH ESTIMATOR IN VOLUME 5

  cell_integral_tl_estimator = Event.WeightMultipliedCellTrackLengthFluxEstimator(2, 1.0, [1], model)
  cell_integral_tl_estimator.setParticleTypes([MonteCarlo.PHOTON])
  event_handler.addEstimator(cell_integral_tl_estimator)

  factory = Manager.ParticleSimulationManagerFactory( filled_model,
                                                  source,
                                                  event_handler,
                                                  simulation_properties,
                                                  sim_name,
                                                  "xml",
                                                  threads )

  manager = factory.getManager()
  manager.useSingleRendezvousFile()

  #session.restoreOutputStreams()