if int(sys.argv[1]): with_plots = False # read 500x2 S matrix wl_span = np.arange(180, 230, 10) S_parameters = Lorentzian_parameters() S_frame = generate_absorbance_data(wl_span, S_parameters) # components concentrations = {'A': 1, 'B': 0} # create template model builder = TemplateBuilder() builder.add_mixture_component(concentrations) builder.add_parameter('k', 0.1) builder.add_absorption_data(S_frame) builder.add_measurement_times([i for i in range(0, 50, 10)]) dataDirectory = os.path.abspath( os.path.join( os.path.dirname( os.path.abspath(inspect.getfile(inspect.currentframe()))), '..', 'data_sets')) # filename = os.path.join(dataDirectory,'Dij_case52a.txt') filename = os.path.join(dataDirectory, 'Sij_small.txt') write_absorption_data_to_txt(filename, S_frame) # define explicit system of ODEs def rule_odes(m, t): exprs = dict() exprs['A'] = -m.P['k'] * m.Z[t, 'A']
os.path.dirname( os.path.abspath(inspect.getfile(inspect.currentframe()))), '..', '..', 'data_sets')) filename = os.path.join(dataDirectory, 'Slk_case51a.txt') S_frame = read_absorption_data_from_txt(filename) # create template model builder = TemplateBuilder() builder.add_mixture_component('A', 1) builder.add_mixture_component('B', 0) builder.add_mixture_component('C', 0) builder.add_parameter('k1', 2.0) builder.add_parameter('k2', 0.2) # includes absorption data in the template and defines measurement sets builder.add_absorption_data(S_frame) builder.add_measurement_times([i * 0.0333 for i in range(300)]) # define explicit system of ODEs def rule_odes(m, t): exprs = dict() exprs['A'] = -m.P['k1'] * m.Z[t, 'A'] exprs['B'] = m.P['k1'] * m.Z[t, 'A'] - m.P['k2'] * m.Z[t, 'B'] exprs['C'] = m.P['k2'] * m.Z[t, 'B'] return exprs builder.set_odes_rule(rule_odes) # create an instance of a pyomo model template # the template includes # - Z variables indexed over time and components names e.g. m.Z[t,'A'] # - C variables indexed over measurement t_i and components names e.g. m.C[t_i,'A']
# this defines the measurement points t_i and l_j as well dataDirectory = os.path.abspath( os.path.join( os.path.dirname( os.path.abspath(inspect.getfile(inspect.currentframe()))), '..', '..', 'data_sets')) filename = os.path.join(dataDirectory, 'Slk_sawall.txt') S_frame = read_absorption_data_from_txt(filename) # create template model builder = TemplateBuilder() builder.add_mixture_component({'A': 1, 'B': 0}) builder.add_parameter('k', 0.01) # includes spectra data in the template and defines measurement sets builder.add_absorption_data(S_frame) builder.add_measurement_times([i for i in range(200)]) # define explicit system of ODEs def rule_odes(m, t): exprs = dict() exprs['A'] = -m.P['k'] * m.Z[t, 'A'] exprs['B'] = m.P['k'] * m.Z[t, 'A'] return exprs builder.set_odes_rule(rule_odes) # create an instance of a casadi model template # the template includes # - Z variables indexed over time and components names e.g. m.Z[t,'A'] # - C variables indexed over measurement t_i and components names e.g. m.C[t_i,'A'] # - P parameters indexed over the parameter names m.P['k']
builder.add_parameter(params) def rule_odes(m,t): exprs = dict() exprs['A'] = -m.P['k1']*m.Z[t,'A'] exprs['B'] = m.P['k1']*m.Z[t,'A']-m.P['k2']*m.Z[t,'B'] exprs['C'] = m.P['k2']*m.Z[t,'B'] exprs['D'] = -m.P['k3']*m.Z[t,'D'] exprs['E'] = m.P['k3']*m.Z[t,'D'] return exprs builder.set_odes_rule(rule_odes) builder.add_measurement_times([i for i in frange(0., 10., 0.1)]) #Add time points where feed as discrete jump should take place: #feed_times=[101.035, 303.126]#, 400. #builder.add_feed_times(feed_times) model = builder.create_pyomo_model(0, 10) builder.add_absorption_data(S_frame) write_absorption_data_to_txt('Sij_multexp1.txt', S_frame) model = builder.create_pyomo_model(0., 10.) #========================================================================= #USER INPUT SECTION - FE Factory #=========================================================================
(210.0 - m.Y[t, '5']) / ((210.0 - m.Y[t, '5'])**2 + eta**2)**0.5) exprs['V'] = 7.27609e-05 * step V = m.X[t, 'V'] # mass balances for c in m.mixture_components: exprs[c] = gammas[c][0] * m.Y[t, '0'] + gammas[c][1] * m.Y[ t, '1'] + gammas[c][2] * m.Y[t, '2'] + gammas[c][3] * m.Y[ t, '3'] + gammas[c][4] * m.Y[ t, '4'] - exprs['V'] / V * m.Z[t, c] if c == 'C': exprs[c] += 0.02247311828 / (m.X[t, 'V'] * 210) * step return exprs builder.set_odes_rule(rule_odes) builder.add_measurement_times([i for i in frange(0., 600., 2.)]) #Add time points where feed as discrete jump should take place: feed_times = [101.035, 303.126] #, 400. builder.add_feed_times(feed_times) model = builder.create_pyomo_model(0, 600.) builder.add_absorption_data(S_frame) write_absorption_data_to_txt('Sij_FEcaseexample5-2.txt', S_frame) model = builder.create_pyomo_model(0., 600.) #========================================================================= #USER INPUT SECTION - FE Factory #=========================================================================