Source code for rickshaw.special_archs

"""Special archetypes provided as necessary to the Rickshaw input file. 
Used for fuel cycle niches that have more than just one incommodity and outcommodity.
"""
import random 

[docs]def generate_throwsink(commod, name): """Generic sink for outcommodities that do not become the incommodity of the following archetype. Parameters ---------- commod : String Name of the commidity that the throwsink is receiving. name : String Name for the archetype in the input file. Returns ------- config : Dictionary Dictionary formatted to represent the archetype in the input file. """ vals = {} vals["capacity"] = 1.0e100 vals["in_commods"] = {"val": [commod]} config = {"name": name, "config": {"agents_sink": vals}}
return config
[docs]def generate_throwsource(commod, name): """Generic source for commidities. Parameters ---------- commod : String Name of the commidity that the throwsource is generating. name : String Name for the archetype in the input file. Returns ------- config : Dictionary Dictionary formatted to represent the archetype in the input file. """ vals = {} vals["capacity"] = 1.0e100 vals["commod"] = commod vals["recipe_name"] = 'natural_uranium' config = {"name": name, "config": {"agents_source": vals}}
return config
[docs]def enrich_tails(name, vals, commod): """Generates a sink for the tails commodity stream. Parameters ---------- name : String Name for the archetype in the input file. vals : Dictionary Dictionary containing the specifications for the facilities in the simulation. commod : String The commod name will be tailcommd in this case. Returns ------- sink : Dictionary Dictionary formatted to represent the archetype in the input file. """ vals[name] = 'tailcommod' sink = generate_throwsink('tailcommod', 'enrichsink')
return sink
[docs]def sep_streams(name, vals, commod): """Generates random separation effiencies for the separations facility. Parameters ---------- name : String Name for the archetype in the input file. vals : Dictionary Dictionary containing the specifications for the facilities in the simulation. commod : String Name of the commodity to be separated. """ sep_rand = random.uniform(0.0, 1.0) sep = 1 - (0.0000001)**(1-sep_rand)*(0.1)**sep_rand nucs = ["U", "Pu"] streams = {"streams":{ "item":[{ "commod": commod, "info": { "buf_size": 1e298, "efficiencies": { "item": [] } } }] }} choice = random.choice(nucs) if choice == "U" or choice =="Pu": temp = {"comp": choice, "eff": sep} streams["streams"]["item"][0]["info"]["efficiencies"]["item"].append(temp) vals[name] = streams["streams"]
return 0
[docs]def sep_leftover(name, vals, commod): """Generates a sink facility for the waste material after separation. Parameters ---------- name : String Name for the archetype in the input file. vals : Dictionary Dictionary containing the specifications for the facilities in the simulation. commod : String Name of the commodity to be sent to the sink. Returns ------- sink: Dictionary Dictionary containing the specifications for a sink facility. """ vals[name] = 'leftovercommod' sink = generate_throwsink('leftovercommod', 'sepsink')
return sink
[docs]def ff_fill(name, vals, commod): """Generates a DU source facility for a fuel fabrication facility. Parameters ---------- name : String Name for the archetype in the input file. vals : Dictionary Dictionary containing the specifications for the facilities in the simulation. commod : String Name of the commodity for the source. Returns ------- source: Dictionary Dictionary containing the specifications for a source facility. """ vals[name] = {"val": 'fillcommod'} source = generate_throwsource('fillcommod', 'ffsource')
return source
[docs]def ff_fill_recipe(name, vals, commod): vals[name] = "natural_uranium"
return 0 return 0
[docs]def generate_region_inst(sim, sim_spec): """Creates a null region and inst for the randomized runs. This operated in-place. Parameters ---------- sim : Dictionary Simulation specifications for the cyclus input file. sim_spec : SimSpec The prebuild SimSpec for the simulation. """ sim["region"] = region = { "name": "SingleRegion", "config": {"NullRegion": None}, "institution": { "name": "SingleInstitution", "initialfacilitylist": {"entry": []}, } } entries = sim["region"]["institution"]["initialfacilitylist"]["entry"] if sim_spec.ni == True: sim['region']['institution']['config'] = {"DeployInst": generate_deploy(sim, sim_spec.parameters)} for facility in sim["facility"]: if facility in sim_spec.parameters['facs']: continue else: entry = {"prototype": facility["name"], "number": 1} entries.append(entry) else: sim['region']['institution']['config'] = {"NullInst": None} for facility in sim["facility"]: entry = {"prototype": facility["name"], "number": 1}
entries.append(entry)
[docs]def generate_deploy_inst(sim): """This creates a deploy institution for randomized runs. It will generate a number of deployment times, randomize the times and determine the what to deploy at those times. It operates in place. Parameters ---------- sim : Dictionary Simulation specifications for the cyclus input file. """ randtimes = sim['control']['duration']/12 months = [] config = {'prototypes': {'val':[]}, 'build_times': {'val': []}, 'n_build':{'val': []}, 'lifetimes': {'val':[]}} i = 0 while i < randtimes: months.append(random.randrange(1, sim['control']['duration'], 1)) i+=1 months.sort() for date in months: for facility in sim["facility"]: config['prototypes']['val'].append(facility['name']) config['build_times']['val'].append(date) config['n_build']['val'].append(random.randint(1,10)) config['lifetimes']['val'].append(random.randint(40, 60))
return config
[docs]def trans_init_facs(sim, parameters, config): pstart, facpower = parameters['pstart'], parameters['facpower'] lin = parameters['lin'] facs, facstart, facend = parameters['facs'], lin['facstart'], lin['facend'] startfacs, facnum, power = [], {}, 0.0 for fac in facs: i = facs.index(fac) if facstart[i] == 0: startfacs.append(i) facnum[i] = 0.0 while power < pstart: fac = random.choice(startfacs) facnum[fac] += 1.0 power += facpower[fac] for fac in startfacs: i = 0 while i < facnum[fac]: config['prototypes']['val'].append(facs[fac]) config['build_times']['val'].append(0) config['lifetimes']['val'].append(random.randrange(0,60,1)) config['n_build']['val'].append(1) i+=1
return config
[docs]def generate_deploy(sim, parameters): """Determines the function used to build the deploy institution. Parameters ---------- sim : Dictionary Simulation specifications for the cyclus input file. parameters: Dictionary Parameters used to define the deploy institution. """ config = {} if 'schedule' in parameters.keys(): config = generate_deploy_sch(sim, parameters) if 'lin' in parameters.keys(): config = generate_deploy_lin(sim, parameters)
return config
[docs]def generate_deploy_lin(sim, parameters): """This creates a deploy institution for randomized runs. This deploy institutation is designed to test a given parameter space for the possibility of transition between facilities. Parameters ---------- sim : Dictionary Simulation specifications for the cyclus input file. parameters: Dictionary Parameters used to define the deploy institution. """ randtimes = sim['control']['duration']/12 months = [] lin = parameters['lin'] config = {'prototypes': {'val':[]}, 'build_times': {'val': []}, 'n_build':{'val': []}, 'lifetimes': {'val':[]}} i = 0 facs, facstart, facend, types = parameters['facs'], lin['facstart'], lin['facend'], lin['type'] try: gen_c = parameters['generalchance'] except: print("No generalchance parameter set, using default of 10%") gen_c = 0.1 deploy_c = lin['deploychoice'] config = trans_init_facs(sim, parameters, config) while i < randtimes: months.append(random.randrange(1, sim['control']['duration'], 1)) i+=1 months.sort() for date in months: for facility in sim["facility"]: if facility["name"] in facs: i = facs.index(facility["name"]) if facstart[i] > date or facend[i] < date: continue num = random.choice(deploy_c[i]) if num == 0: continue value, mid = 0, (date-facstart[i])/(facend[i]-facstart[i]) if types[i] is 'inc': value = mid elif types[i] is 'dec': value = 1-mid elif types[i] is 'unity': value = 1 if random.random() < value: config['prototypes']['val'].append(facility['name']) config['build_times']['val'].append(date) config['lifetimes']['val'].append(random.choice([40, 60])) config['n_build']['val'].append(num) else: if random.random() < gen_c: config['n_build']['val'].append(1) config['prototypes']['val'].append(facility['name']) config['build_times']['val'].append(date) config['lifetimes']['val'].append(random.choice([40, 60]))
return config
[docs]def generate_deploy_sch(sim, parameters): """This creates a deploy institution for randomized runs. This deploy institutation is designed to test a given parameter space for the possibility of transition between facilities. Parameters ---------- sim : Dictionary Simulation specifications for the cyclus input file. parameters: Dictionary Parameters used to define the deploy institution. """ config = {'prototypes': {'val':[]}, 'build_times': {'val': []}, 'n_build':{'val': []}, 'lifetimes': {'val':[]}} sched = parameters['schedule'] for fac, dates in sched.items(): for date, values in dates.items(): seed = random.random() i = 0 while seed > values[i]: i+=1 if i > 0: config['prototypes']['val'].append(fac) config['build_times']['val'].append(date) config['lifetimes']['val'].append(40) config['n_build']['val'].append(i)
return config