Last active
August 29, 2015 14:16
-
-
Save koverholt/f9805c53eee42f928168 to your computer and use it in GitHub Desktop.
Anaconda Cluster - FDS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from conda_cluster.config import get_cluster_list | |
| import subprocess | |
| SSH_KEY_LOCATION = '/Users/koverholt/.ssh/koverholt.pem' | |
| CLUSTER_NAME = 'cluster_fds' | |
| USER = 'ubuntu' | |
| # List of cluster nodes from conda-cluster | |
| clusters = get_cluster_list() | |
| compute_nodes = clusters[CLUSTER_NAME]['machines']['compute'] | |
| # head_ip = clusters[CLUSTER_NAME]['machines']['head'][0] | |
| # compute_ip = clusters[CLUSTER_NAME]['machines']['compute'][0] | |
| # Template input file for FDS simulation software | |
| fds_template = """&HEAD CHID='%(basename)s', TITLE='Test of VENT activation/deactivation' / | |
| &MESH IJK=21,10,10, XB=0.0,2.1,0.0,1.0,0.0,1.0 / | |
| &TIME DT=0.05, T_END=20. / | |
| &SURF ID='BLOW 1', VEL=-0.2, COLOR='PURPLE', PART_ID='TRACER 1' / | |
| &SURF ID='BLOW 2', VEL=-0.2, COLOR='RED', PART_ID='TRACER 2' / | |
| &SURF ID='BLOW 3', VEL=-0.2, COLOR='ORANGE', PART_ID='TRACER 3' / | |
| &SURF ID='BLOW 4', VEL=-0.2, COLOR='YELLOW', PART_ID='TRACER 4' / | |
| &SURF ID='BLOW 5', VEL=-0.2, COLOR='GREEN', PART_ID='TRACER 5' / | |
| &SURF ID='BLOW 6', VEL=-0.2, COLOR='CYAN', PART_ID='TRACER 6' / | |
| &SURF ID='BLOW 7', VEL=-0.2, COLOR='BLUE', PART_ID='TRACER 7' / | |
| &PART ID='TRACER 1', MASSLESS=.TRUE., COLOR='PURPLE' / | |
| &PART ID='TRACER 2', MASSLESS=.TRUE., COLOR='RED' / | |
| &PART ID='TRACER 3', MASSLESS=.TRUE., COLOR='ORANGE' / | |
| &PART ID='TRACER 4', MASSLESS=.TRUE., COLOR='YELLOW' / | |
| &PART ID='TRACER 5', MASSLESS=.TRUE., COLOR='GREEN' / | |
| &PART ID='TRACER 6', MASSLESS=.TRUE., COLOR='CYAN' / | |
| &PART ID='TRACER 7', MASSLESS=.TRUE., COLOR='BLUE', DEVC_ID='timer 7b' / | |
| &VENT XB=0.10,0.20,0.40,0.60,0.00,0.00, SURF_ID='BLOW 1', COLOR='PURPLE', CTRL_ID='controller 1' / | |
| &VENT XB=0.40,0.50,0.40,0.60,0.00,0.00, SURF_ID='BLOW 2', COLOR='RED', DEVC_ID='timer 2' / | |
| &VENT XB=0.70,0.80,0.40,0.60,0.00,0.00, SURF_ID='BLOW 3', COLOR='ORANGE', CTRL_ID='controller 3' / | |
| &VENT XB=1.00,1.10,0.40,0.60,0.00,0.00, SURF_ID='BLOW 4', COLOR='YELLOW', CTRL_ID='controller 4' / | |
| &VENT XB=1.30,1.40,0.40,0.60,0.00,0.00, SURF_ID='BLOW 5', COLOR='GREEN', DEVC_ID='timer 5' / | |
| &VENT XB=1.60,1.70,0.40,0.60,0.00,0.00, SURF_ID='BLOW 6', COLOR='CYAN', DEVC_ID='timer 6' / | |
| &VENT XB=1.90,2.00,0.40,0.60,0.00,0.00, SURF_ID='BLOW 7', COLOR='BLUE', DEVC_ID='timer 7' / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='clock 1', QUANTITY='TIME' / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='timer 2', QUANTITY='TIME', SETPOINT= 5.0 / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='timer 5', QUANTITY='TIME', SETPOINT= 5.0 / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='timer 6', QUANTITY='TIME', SETPOINT= 6.0 / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='timer 7', QUANTITY='TIME', SETPOINT= 7.0 / | |
| &DEVC XYZ=0.1,0.1,0.1, ID='timer 7b', QUANTITY='TIME', SETPOINT=11.0 / | |
| &CTRL ID='controller 1', FUNCTION_TYPE='CUSTOM', INPUT_ID='clock 1', RAMP_ID='ramp 1' / | |
| &RAMP ID='ramp 1', T= 0.00, F=-1. / | |
| &RAMP ID='ramp 1', T= 2.99, F=-1. / | |
| &RAMP ID='ramp 1', T= 3.01, F= 1. / | |
| &RAMP ID='ramp 1', T= 5.99, F= 1. / | |
| &RAMP ID='ramp 1', T= 6.01, F=-1. / | |
| &RAMP ID='ramp 1', T=11.99, F=-1. / | |
| &RAMP ID='ramp 1', T=12.01, F= 1. / | |
| &CTRL ID='controller 3', FUNCTION_TYPE='TIME_DELAY', INPUT_ID='timer 2', DELAY=%(delay)i / | |
| &CTRL ID='controller 4', FUNCTION_TYPE='ALL', INPUT_ID='controller 1','controller 3' / | |
| &VENT MB='XMIN', SURF_ID='OPEN' / | |
| &VENT MB='XMAX', SURF_ID='OPEN' / | |
| &VENT MB='YMIN', SURF_ID='OPEN' / | |
| &VENT MB='YMAX', SURF_ID='OPEN' / | |
| &VENT MB='ZMAX', SURF_ID='OPEN' / | |
| &TAIL / | |
| """ | |
| for i, node in enumerate(compute_nodes, start=1): | |
| print '### Job: ' + str(i) + '; Node: ' + str(node) + ' ###' | |
| # Create input file from template | |
| basename = 'fds_input_' + str(i) | |
| filename = basename + '.fds' | |
| output = fds_template % { | |
| 'delay': i, | |
| 'basename': basename | |
| } | |
| f = open(filename, 'w') | |
| f.write(output) | |
| f.close() | |
| # (1/3) scp copy input file from local machine to remote node | |
| remote_location = USER + '@' + node + ':~/' | |
| cmd_push = [ | |
| 'scp', | |
| '-i', | |
| SSH_KEY_LOCATION, | |
| filename, | |
| remote_location | |
| ] | |
| print '1/3) Pushing input file to Node ' + str(i) + ' (' + str(node) + ') ...' | |
| subprocess.call(cmd_push) | |
| # (2/3) Define env. variables and run simulation on input file | |
| cmd_run = [ | |
| 'conda', | |
| 'cluster', | |
| 'run.cmd', | |
| CLUSTER_NAME, | |
| 'export PATH=/home/ubuntu/FDS/FDS6/bin:$PATH; ' + | |
| 'export LD_LIBRARY_PATH=/home/ubuntu/FDS/FDS6/bin/LIB64:$LD_LIBRARY_PATH; ' + | |
| 'fds ' + filename + ' &> ' + basename + '.err', | |
| '--node=' + str(i), | |
| '--home', | |
| '-s' | |
| ] | |
| print '2/3) Running simulation on Node ' + str(i) + ' (' + str(node) + ') ...' | |
| subprocess.call(cmd_run) | |
| # (3/3) scp copy output files from remote node to local machine | |
| remote_files = USER + '@' + node + ':~/' + basename + '*' | |
| local_files = '/Users/koverholt/Desktop/cluster_fds/' | |
| print remote_files, local_files | |
| cmd_get = [ | |
| 'scp', | |
| '-i', | |
| SSH_KEY_LOCATION, | |
| remote_files, | |
| local_files | |
| ] | |
| print '3/3) Getting output files from Node ' + str(i) + ' (' + str(node) + ') ...' | |
| subprocess.call(cmd_get) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| wget http://dl.bintray.com/nist-fire-research/releases/FDS_6.1.2-SMV_6.1.12_linux64.sh -O fds.sh | |
| sudo apt-get install expect -y | |
| cat > ~/inputs.sh << "EOF" | |
| #!/usr/bin/expect | |
| spawn bash fds.sh | |
| expect "1) Press <Enter> to begin installation" | |
| send "\r" | |
| expect "Press 1 to install in" | |
| send "1\r" | |
| expect "Do you wish to begin the installation?" | |
| send "yes\r" | |
| expect "$ " | |
| EOF | |
| expect inputs.sh | |
| rm fds.sh inputs.sh |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment