예제 #1
0
    def test_options(self):

        filename = 'xdsm_test_options'
        spec_dir = filename + '_specs'

        # Change `use_sfmath` to False to use computer modern
        x = XDSM(use_sfmath=False)

        x.add_system('opt', 'Optimization', r'\text{Optimizer}')
        x.add_system('solver', 'MDA', r'\text{Newton}')
        x.add_system('D1', 'Function', 'D_1', text_width=2.0)
        x.add_system('D2', 'Function', 'D_2', stack=False)
        x.add_system('F', 'Function', 'F', faded=True)
        x.add_system('G', 'Function', 'G', spec_name="G_spec")

        x.connect('opt', 'D1', 'x, z')
        x.connect('opt', 'D2', 'z')
        x.connect('opt', 'F', 'x, z')
        x.connect('solver', 'D1', 'y_2')
        x.connect('solver', 'D2', 'y_1')
        x.connect('D1', 'solver', r'\mathcal{R}(y_1)')
        x.connect('solver', 'F', 'y_1, y_2')
        x.connect('D2', 'solver', r'\mathcal{R}(y_2)')
        x.connect('solver', 'G', 'y_1, y_2')

        x.connect('F', 'opt', 'f')
        x.connect('G', 'opt', 'g')

        x.add_output('opt', 'x^*, z^*', side='right')
        x.add_output('D1', 'y_1^*', side='left', stack=True)
        x.add_output('D2', 'y_2^*', side='left')
        x.add_output('F', 'f^*', side='left')
        x.add_output('G', 'g^*')
        x.write(filename)
        x.write_sys_specs(spec_dir)

        # Test if files where created
        self.assertTrue(os.path.isfile(filename + '.tikz'))
        self.assertTrue(os.path.isfile(filename + '.tex'))
        self.assertTrue(os.path.isdir(spec_dir))
        self.assertTrue(os.path.isfile(os.path.join(spec_dir, 'F.json')))
        self.assertTrue(os.path.isfile(os.path.join(spec_dir, 'G_spec.json')))
예제 #2
0
    def test_options(self):

        filename = "xdsm_test_options"
        spec_dir = filename + "_specs"

        # Change `use_sfmath` to False to use computer modern
        x = XDSM(use_sfmath=False)

        x.add_system("opt", OPT, r"\text{Optimizer}")
        x.add_system("solver", SOLVER, r"\text{Newton}")
        x.add_system("D1", FUNC, "D_1", label_width=2)
        x.add_system("D2", FUNC, "D_2", stack=False)
        x.add_system("F", FUNC, "F", faded=True)
        x.add_system("G", FUNC, "G", spec_name="G_spec")

        x.connect("opt", "D1", "x, z")
        x.connect("opt", "D2", "z")
        x.connect("opt", "F", "x, z")
        x.connect("solver", "D1", "y_2")
        x.connect("solver", "D2", "y_1")
        x.connect("D1", "solver", r"\mathcal{R}(y_1)")
        x.connect("solver", "F", "y_1, y_2")
        x.connect("D2", "solver", r"\mathcal{R}(y_2)")
        x.connect("solver", "G", "y_1, y_2")

        x.connect("F", "opt", "f")
        x.connect("G", "opt", "g")

        x.add_output("opt", "x^*, z^*", side="right")
        x.add_output("D1", "y_1^*", side="left", stack=True)
        x.add_output("D2", "y_2^*", side="left")
        x.add_output("F", "f^*", side="left")
        x.add_output("G", "g^*")
        x.write(filename)
        x.write_sys_specs(spec_dir)

        # Test if files where created
        self.assertTrue(os.path.isfile(filename + ".tikz"))
        self.assertTrue(os.path.isfile(filename + ".tex"))
        self.assertTrue(os.path.isdir(spec_dir))
        self.assertTrue(os.path.isfile(os.path.join(spec_dir, "F.json")))
        self.assertTrue(os.path.isfile(os.path.join(spec_dir, "G_spec.json")))
예제 #3
0
x.connect("opt", "G2", "z")
x.connect("opt", "F", "x, z")
x.connect("opt", "F", "y_1, y_2")

# you can also stack variables
x.connect("opt", "H", "y_1, y_2", stack=True)

x.connect("D1", "opt", r"\mathcal{R}(y_1)")
x.connect("D2", "opt", r"\mathcal{R}(y_2)")

x.connect("F", "opt", "f")
x.connect("H", "opt", "h", stack=True)

# can specify inputs to represent external information coming into the XDSM
x.add_input("D1", "P_1")
x.add_input("D2", "P_2")
x.add_input("opt", r"x_0", stack=True)

# can put outputs on the left or right sides
x.add_output("opt", r"x^*, z^*", side="right")
x.add_output("D1", r"y_1^*", side="left")
x.add_output("D2", r"y_2^*", side="left")
x.add_output("F", r"f^*", side="right")
x.add_output("H", r"h^*", side="right")
x.add_output("opt", r"y^*", side="left")

x.add_process(["output_opt", "opt", "left_output_opt"])

x.write("kitchen_sink", cleanup=False)
x.write_sys_specs("sink_specs")
예제 #4
0
x.connect('opt', 'G2', 'z')
x.connect('opt', 'F', 'x, z')
x.connect('opt', 'F', 'y_1, y_2')

# you can also stack variables
x.connect('opt', 'H', 'y_1, y_2', stack=True)

x.connect('D1', 'opt', r'\mathcal{R}(y_1)')
x.connect('D2', 'opt', r'\mathcal{R}(y_2)')

x.connect('F', 'opt', 'f')
x.connect('H', 'opt', 'h', stack=True)

# can specify inputs to represent external information coming into the XDSM
x.add_input('D1', 'P_1')
x.add_input('D2', 'P_2')
x.add_input('opt', r'x_0', stack=True)

# can put outputs on the left or right sides
x.add_output('opt', r'x^*, z^*', side='right')
x.add_output('D1', r'y_1^*', side='left')
x.add_output('D2', r'y_2^*', side='left')
x.add_output('F', r'f^*', side='right')
x.add_output('H', r'h^*', side='right')
x.add_output('opt', r'y^*', side='left')

x.add_process(['output_opt', 'opt', 'left_output_opt'])

x.write('kitchen_sink', cleanup=False)
x.write_sys_specs('sink_specs')
예제 #5
0
x.connect('e_solver', 'battery', '')

# Connect Zappy outputs to subsystems
x.connect('e_comp', 'battery', 'I_{batt}')
x.add_output('e_comp', 'Q_{lines}', side='right') # output to thermal phase
# x.add_output('e_comp', r'C_{max}', side='right')

# Connect Battery outputs to subsystems
x.add_input('battery', ['n_{series}','n_{parallel}','Q_{max}'])
x.connect('battery', 'DYMOS', ['dXdt:SOC', 'dXdt:V_{thev}','dXdt:PCM_{sat}'])
x.connect('battery', 'e_comp', 'V_{batt,actual}')
x.connect('battery', 'e_solver', '')
x.connect('battery', 'TMS', ['T_{cold}'])
x.add_output('battery', ['T_{batt}'], side='right')

x.add_input('TMS', ['A_{cold}'])
x.connect('TMS','battery',['Q_{rej}'])


# # Connect Thermal outputs to subsystems
# x.add_input('tms_comp', [r'W_{coolant}', 'mass_{res,coolant}',r'mass_{motor}',r'mass_{battery}',r'width_{ACC}',r'height_{ACCc}',r'height_{ACCa}',r'Area_{throat}'])
# x.connect('tms_comp', 'DYMOS', ['dXdt:T_{coolant}','dXdt:T_{batt}','dXdt:T_{motor}'])
# x.add_output('tms_comp', 'Power_{TMS}', side='right')
# x.add_output('tms_comp', r'T_{coolant}', side='right')
# #x.connect('tms_comp', 'drag_comp', 'D_{cool}')

x.write('ODE_XDSM')

x.write_sys_specs('ODE_specs')

예제 #6
0
# Optimizer
x.connect('Optimizer', 'pack_design',
          ['energy_{required}', 'eta_{batt}', 'I_{batt}'])

# Pack Size
x.add_input('pack_design', [
    'L_{pack}', 'W_{pack}', 'L_{cell}', 'W_{cell}', 'H_{cell}', 'mass_{cell}',
    'voltage_{low,cell}', 'voltage_{nom,cell}', 'dischargeRate_{cell}',
    'Q_{max}', 'V_{batt}'
])
x.connect('pack_design', 'PCM', ['n_{cpk}', 'n_{kps}'])
x.connect('pack_design', 'Struct', 'mass_{cell}')
x.add_output('pack_design', ['n_{series}', 'n_{parallel}'], side='right')

# PCM
x.connect('PCM', 'pack_design', 't_{PCM}')
x.connect('PCM', 'Struct', 'mass_{PCM}')

# HP
x.add_input('heat_pipe', ['d_{init}', 'rho_{HP}', 'L_{pack}'])
x.connect('heat_pipe', 'Struct', 'mass_{HP}')
x.connect('heat_pipe', 'pack_design', 't_{HP}')

# Struct
x.connect('Struct', 'pack_design', 't_{wall}')
x.add_output('Struct', ['mass_{battery}'], side='right')

x.write('Design_XDSM')

x.write_sys_specs('Design_specs')
예제 #7
0
# Dymos
#x.connect('dymos','Optimizer','T_{neighbor}')
x.connect('dymos', 'heat_pipe', 'T_{wall}', stack=True)
x.connect('dymos', 'PCM', 'T_{pcm}', stack=True)
x.connect('dymos', 'battery', 'T_{cell}', stack=True)

# Battery
x.add_input('battery', ['rho/cp_{cell}', 'q_{in,cell}'])
x.connect('battery', 'PCM', ['q_{in,pcm}'], stack=True)
x.connect('battery', 'dymos', 'dT_{cells}/dt', stack=True)
# x.add_output('battery', ['n_{series}','n_{parallel}'], side='right')

# PCM
x.add_input(
    'PCM',
    ['t_{pad}, A_{pad}', 'porosity', 'rho/LH/K/cp_{foam/pcm}', 'T_{hi/lo}'])
x.connect('PCM', 'dymos', 'dT_{pcm}/dt', stack=True)
x.connect('PCM', 'heat_pipe', 'q_{in,hp}', stack=True)
x.connect('PCM', 'battery', 'q_{out,pcm}', stack=True)
x.add_output('PCM', ['PS'], side='right', stack=True)

# HP
x.add_input('heat_pipe', ['geometry (round/flat)', 'num_{cells}'])
x.connect('heat_pipe', 'PCM', 'q_{out,hp}', stack=True)
x.connect('heat_pipe', 'dymos', 'dT_{wall}/dt', stack=True)

x.write('Transient_XDSM')

x.write_sys_specs('Transient_specs')