예제 #1
0
def run_chemical_single_reactor():
    data = []

    volume = 1  # m3
    copper_conc = 4 / 63.5

    upstream = reactors.BaseUpStream()
    cstr = reactors.CSTR(volume, upstream)
    metal_rate = reactions.MetalDissolutionRate(
        constants.COPPER,
        copper_conc,
        upstream.flow_out["components"]["ferric"],
        system=constants.CONTINUOUS)
    cstr.create_components(metal_rate)
    i = 0
    # metal_rate.ferric > 1e-9 and metal_rate.component_conc > 1e-9
    while True:
        temp = {}

        cstr_data = cstr.run()
        # print metal_rate.ferric, metal_rate.component_conc
        if metal_rate.ferric < 1e-9 or metal_rate.component_conc < 1e-9:
            break

        temp = {"step": i}
        temp.update(cstr_data)
        data.append(temp)

        i = i + 1

    return data
예제 #2
0
 def add_reactants_to_chem_cstr(self):
     for k, v in self.initial_metals.iteritems():
         metal = reactions.MetalDissolutionRate(k,
                                                v,
                                                system=constants.CONTINUOUS)
         self.chem_cstr.create_components(metal)
         self.system_components.append(metal.reactant_name)
예제 #3
0
    def test_running_cstr_reactor_with_simplified_chemical_equation(self):
        upstream = reactors.BaseUpStream()
        cstr = reactors.CSTR(self.volume, upstream)
        copper_rate = reactions.MetalDissolutionRate(
            constants.COPPER,
            self.copper_conc,
            self.ferric_conc,
            system=constants.CONTINUOUS)

        cstr.create_components(copper_rate)

        self.assertIn(copper_rate, cstr.components)
        self.assertEqual(cstr.flow_in, upstream.flow_out)
        self.assertEqual(cstr.flow_in, cstr.flow_out)
        self.assertIsNotNone(cstr.flow_in)

        # self.assertEqual(cstr.ions[copper_rate.reactant_name], 0)

        output = cstr.run()

        self.assertIn('total_rate_ferric', output["cstr_data"])
        self.assertIn('total_rate_ferrous', output["cstr_data"])

        self.assertIn('Cu', output["cstr_data"]["components"])
        self.assertEqual(output["cstr_data"]['total_rate_ferrous'],
                         -output["cstr_data"]['total_rate_ferric'])
        self.assertEqual(
            output["cstr_data"]["components"][copper_rate.reactant_name]
            ['rate_ferrous'], -output["cstr_data"]["components"][
                copper_rate.reactant_name]['rate_ferric'])

        self.assertEqual(
            output["cstr_data"]['total_rate_ferrous'], output["cstr_data"]
            ["components"][copper_rate.reactant_name]["rate_ferrous"])
        self.assertNotEqual(output["flow_out"]["components"]["ferric"],
                            upstream.flow_out["components"]["ferric"])

        self.assertEqual(output["flow_out"]["components"]["ferric"],
                         cstr.flow_out["components"]["ferric"])

        # Assert that the change in ferric is equal to change in rate
        self.assertAlmostEqual(
            output["flow_out"]["components"]["ferric"] -
            cstr.flow_in["components"]["ferric"], output["cstr_data"]
            ['total_rate_ferric'])  # Almost equal due to floating point errors
예제 #4
0
def run_copper_reaction_rates():
    copper_conc = 0.064
    ferric_conc = 0.171
    copper = reactions.MetalDissolutionRate(constants.COPPER, copper_conc,
                                            ferric_conc)
    data = []
    i = 0
    while copper.ferric > 1e-9 and copper.component_conc > 1e-9:
        temp = {}
        # rate_ferrous, rate_ferric, copper_component_conc  = copper.run()
        output = copper.run()
        temp = {
            "ferric": copper.ferric,
            "step": i,
            "copper": output["component_moles"],
            "cupric": output["ion_moles"]
        }
        temp.update(output)
        data.append(temp)
        i = i + 1
    return data
예제 #5
0
 def test_chemical_reaction_rate(self):
     copper_conc = 2 / 65.3
     ferric_conc = 0.0001
     copper = reactions.MetalDissolutionRate(constants.COPPER, copper_conc,
                                             ferric_conc)
     rate_ferric = copper.metal_powder_rate()