In [ ]:
from __future__ import print_function
import numpy as np
import glob
## Boilerplate path hack to give access to full clustered_SNe package
import sys, os
if __package__ is None:
if os.pardir not in sys.path[0]:
file_dir = os.getcwd()
sys.path.insert(0, os.path.join(file_dir,
os.pardir,
os.pardir))
from clustered_SNe import data_dir_default
from clustered_SNe.analysis.constants import m_proton, pc, yr, M_solar, \
metallicity_solar
from clustered_SNe.analysis.parse import Overview, RunSummary, \
Inputs, \
get_full_id_from_partial_id, \
checkpoint_num_from_filename
from clustered_SNe.analysis.database_helpers import session, \
Simulation, \
Simulation_Inputs, \
Simulation_Status
In [ ]:
data_dir = data_dir_default
In [ ]:
id_tuples = []
for filename in glob.glob(os.path.join(data_dir, "*_overview.dat")):
overview = Overview(filename)
if overview.num_SNe != 1:
continue
run_summary = RunSummary(overview.dirname, overview.id)
current_status = session.query(Simulation_Status).get(overview.id).status
delta_time = run_summary.times.max() - run_summary.times.min()
if delta_time <=0 :
raise RuntimeError("delta_time not positive")
if np.any(run_summary.momentum < 0):
id_tuples.append((overview.id, "negative momentum", current_status, delta_time))
continue
if run_summary.num_momenta_maxima() > 1:
id_tuples.append((overview.id, "too many momentum maxima", current_status, delta_time))
continue
if run_summary.num_momenta_maxima == 0 :
id_tuples.append((overview.id, "no momentum maxima?", current_status, delta_time))
continue
if not run_summary.is_time_resolved():
id_tuples.append((overview.id, "not time resolved", current_status, delta_time))
continue
In [ ]:
id_tuples = [("adea4ef1-5b5f-4e12-bffd-977a8581946c", "not time resolved", "complete", 3e14)]
In [ ]:
restart_dir = "restart_resolution"
qsub_systems = set(["SGE", "PBS"])
qsub_system = "PBS"
assert(qsub_system in qsub_systems)
f_submit = open("submit_script", mode="w")
f_submit.write("#!/bin/bash \n")
f_delete = open("delete_script", mode="w")
f_delete.write("#!/bin/bash \n")
f_delete.write("mkdir -p _tmp_ \n")
f_copy = open("copy_script", mode="w")
f_copy.write("#!/bin/bash \n")
f_copy.write("mkdir -p ../" + restart_dir + "\n")
for id, reason, status, delta_time in id_tuples:
print("id: ", id)
first_checkpoint_filename = id + "_checkpoint_0000.dat"
restart_checkpoints_needed = 99
restart_time_needed = .3 * delta_time
print("extra time needed: ", restart_time_needed, "[s]")
print("")
CFL = .025
f_submit.write("qsub " +
"-v RESTART_ID=" + id + ","
+ "RESTART_N_CHECKPOINTS=" + str(restart_checkpoints_needed) + ","
+ "RESTART_DELTA_TIME=" + str(restart_time_needed) + ","
+ "RESTART_CFL=" + str(CFL)
+ " -N " + id + "_restart.batch "
+ " ../scripts/" + qsub_system + "/restart.batch.env_variables \n")
f_delete.write("cp -p " + first_checkpoint_filename + " _tmp_/ \n")
f_delete.write("rm " + id + "_checkpoint_*.dat \n")
f_delete.write("cp -p _tmp_/" + first_checkpoint_filename + " . \n")
f_copy.write("cp -p " + first_checkpoint_filename + " ../" + restart_dir + " \n")
f_copy.write("cp -p " + id + "_overview.dat " + " ../" + restart_dir + " \n")
f_copy.write("cp -p " + id + "_SNe.dat " + " ../" + restart_dir + " \n")
f_copy.write("cp -p " + id + "_inputs.dat " + " ../" + restart_dir + " \n")
f_delete.write("rm -rf _tmp_ \n")
f_submit.close()
f_copy.close()
f_delete.close()
In [ ]:
for id in ids:
session.query(Simulation_Status).filter(Simulation_Status.id == id).update({"status":"Running"})
sim_status = session.query(Simulation_Status).get(id)
print(sim_status.status)
print(id)
In [ ]:
session.commit()