diff --git a/hoomd_validation/alj_2d.py b/hoomd_validation/alj_2d.py index 4c74dd76..8fb49a3c 100644 --- a/hoomd_validation/alj_2d.py +++ b/hoomd_validation/alj_2d.py @@ -91,7 +91,7 @@ def alj_2d_create_initial_state(*jobs): device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) num_particles = job.statepoint['num_particles'] density = job.statepoint['density'] @@ -322,7 +322,7 @@ def alj_2d_nve_md_job(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{sim_mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{sim_mode}_{device_name}.log')) run_nve_md_sim(job, device, complete_filename=f'{sim_mode}_{device_name}_complete') diff --git a/hoomd_validation/hard_disk.py b/hoomd_validation/hard_disk.py index 195169ef..2e252f31 100644 --- a/hoomd_validation/hard_disk.py +++ b/hoomd_validation/hard_disk.py @@ -101,7 +101,7 @@ def hard_disk_create_initial_state(*jobs): # create snapshot device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) snap = hoomd.Snapshot(communicator) if communicator.rank == 0: @@ -566,7 +566,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{mode}_{device_name}.log')) globals().get(f'run_{mode}_sim')( job, device, complete_filename=f'{mode}_{device_name}_complete') diff --git a/hoomd_validation/hard_sphere.py b/hoomd_validation/hard_sphere.py index d2c6de26..93e3680d 100644 --- a/hoomd_validation/hard_sphere.py +++ b/hoomd_validation/hard_sphere.py @@ -96,7 +96,7 @@ def hard_sphere_create_initial_state(*jobs): # create snapshot device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) snap = hoomd.Snapshot(device.communicator) if device.communicator.rank == 0: @@ -445,7 +445,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'run_{mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'run_{mode}_{device_name}.log')) globals().get(f'run_{mode}_sim')( job, device, complete_filename=f'{mode}_{device_name}_complete') diff --git a/hoomd_validation/lj_fluid.py b/hoomd_validation/lj_fluid.py index 9dba4319..28ad7b14 100644 --- a/hoomd_validation/lj_fluid.py +++ b/hoomd_validation/lj_fluid.py @@ -111,7 +111,7 @@ def lj_fluid_create_initial_state(*jobs): sp = job.sp device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) box_volume = sp["num_particles"] / sp["density"] L = box_volume**(1 / 3.) @@ -409,7 +409,7 @@ def md_sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{sim_mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{sim_mode}_{device_name}.log')) run_md_sim(job, device, @@ -808,7 +808,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{mode}_mc_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{mode}_mc_{device_name}.log')) globals().get(f'run_{mode}_mc_sim')( job, device, complete_filename=f'{mode}_mc_{device_name}_complete') @@ -1338,7 +1338,7 @@ def lj_fluid_nve_md_job(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{sim_mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{sim_mode}_{device_name}.log')) run_nve_md_sim(job, device, run_length=run_length, diff --git a/hoomd_validation/lj_union.py b/hoomd_validation/lj_union.py index f675b0b8..cc21d9eb 100644 --- a/hoomd_validation/lj_union.py +++ b/hoomd_validation/lj_union.py @@ -99,7 +99,7 @@ def lj_union_create_initial_state(*jobs): sp = job.sp device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) box_volume = sp["num_particles"] / sp["density"] L = box_volume**(1 / 3.) @@ -439,7 +439,7 @@ def md_sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{sim_mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{sim_mode}_{device_name}.log')) run_md_sim(job, device, @@ -866,7 +866,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{mode}_mc_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{mode}_mc_{device_name}.log')) globals().get(f'run_{mode}_mc_sim')( job, device, complete_filename=f'{mode}_mc_{device_name}_complete') @@ -1420,7 +1420,7 @@ def lj_union_nve_md_job(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{sim_mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{sim_mode}_{device_name}.log')) run_nve_md_sim(job, device, run_length=run_length, diff --git a/hoomd_validation/patchy_particle_pressure.py b/hoomd_validation/patchy_particle_pressure.py index 672fbd99..47647eab 100644 --- a/hoomd_validation/patchy_particle_pressure.py +++ b/hoomd_validation/patchy_particle_pressure.py @@ -192,7 +192,7 @@ def patchy_particle_pressure_create_initial_state(*jobs): # create snapshot device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) snap = hoomd.Snapshot(communicator) if communicator.rank == 0: @@ -602,7 +602,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{mode}_{device_name}.log')) globals().get(f'run_{mode}_sim')( job, device, complete_filename=f'{mode}_{device_name}_complete') diff --git a/hoomd_validation/simple_polygon.py b/hoomd_validation/simple_polygon.py index b82da41f..3d1eeb6a 100644 --- a/hoomd_validation/simple_polygon.py +++ b/hoomd_validation/simple_polygon.py @@ -112,7 +112,7 @@ def simple_polygon_create_initial_state(*jobs): # create snapshot device = hoomd.device.CPU( communicator=communicator, - message_filename=job.fn('create_initial_state.log')) + message_filename=util.get_message_filename(job, 'create_initial_state.log')) snap = hoomd.Snapshot(communicator) if communicator.rank == 0: @@ -488,7 +488,7 @@ def sampling_operation(*jobs): device = device_cls( communicator=communicator, - message_filename=job.fn(f'{mode}_{device_name}.log')) + message_filename=util.get_message_filename(job, f'{mode}_{device_name}.log')) globals().get(f'run_{mode}_sim')( job, device, complete_filename=f'{mode}_{device_name}_complete') diff --git a/hoomd_validation/util.py b/hoomd_validation/util.py index 8c6676b8..e39f60e4 100644 --- a/hoomd_validation/util.py +++ b/hoomd_validation/util.py @@ -5,6 +5,7 @@ import numpy import signac +import os def true_all(*jobs, key): @@ -28,6 +29,15 @@ def get_job_filename(sim_mode, device, name, type): return f"{sim_mode}_{suffix}_{name}.{type}" +def get_message_filename(job, filename): + """Get a cluster job unique message filename. + """ + cluster_id = os.environ.get('SLURM_JOB_ID', None) + if cluster_id is not None: + return job.fn(f'{cluster_id}-{filename}') + else: + return job.fn(filename) + def run_up_to_walltime(sim, end_step, steps, walltime_stop): """Run a simulation, stopping early if a walltime limit is reached.