Skip to content

Commit

Permalink
Merge branch 'compiled-lj-potential' into trunk
Browse files Browse the repository at this point in the history
  • Loading branch information
joaander committed Feb 21, 2024
2 parents d293bac + 871673c commit b7a658d
Show file tree
Hide file tree
Showing 11 changed files with 239 additions and 250 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ validation test workflows in this repository are organized into signac projects.
* gsd >= 2.8.0
* numpy
* PyYAML
* signac >= 2.0.0
* signac >= 2.2.0
* signac-flow >= 0.25.1
* signac-dashboard [optional]
* Simulation workflow steps require either the [glotzerlab-software container]
Expand Down
47 changes: 28 additions & 19 deletions dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,44 +20,53 @@ class ValidationDashboard(Dashboard):

def job_title(self, job):
"""Name jobs."""
if job.statepoint.subproject == 'lj_fluid':
if job.cached_statepoint['subproject'] == 'lj_fluid':
return (
f'lj_fluid: kT={job.statepoint.kT}, '
f'rho={job.statepoint.density}, '
f'N={job.statepoint.num_particles}'
f'lj_fluid: kT={job.cached_statepoint["kT"]}, '
f'rho={job.cached_statepoint["density"]}, '
f'N={job.cached_statepoint["num_particles"]}'
)

if job.statepoint.subproject == 'lj_union':
return f'lj_union: kT={job.statepoint.kT}, rho={job.statepoint.density}'
if job.cached_statepoint['subproject'] == 'lj_union':
return (
f'lj_union: kT={job.cached_statepoint["kT"]}, '
f'rho={job.cached_statepoint["density"]}'
)

if job.statepoint.subproject == 'alj_2d':
return f'alj_2d: kT={job.statepoint.kT}, rho={job.statepoint.density}'
if job.cached_statepoint['subproject'] == 'alj_2d':
return (
f'alj_2d: kT={job.cached_statepoint["kT"]}, '
f'rho={job.cached_statepoint["density"]}'
)

if job.statepoint.subproject in (
if job.cached_statepoint['subproject'] in (
'hard_disk',
'hard_sphere',
'simple_polygon',
'patchy_particle_pressure',
):
return f'{job.statepoint.subproject}: rho={job.statepoint.density}'
return (
f'{job.cached_statepoint["subproject"]}: '
f'rho={job.cached_statepoint["density"]}'
)

raise RuntimeError('Unexpected job')

def job_sorter(self, job):
"""Sort jobs."""
if job.statepoint.subproject == 'patchy_particle_pressure':
if job.cached_statepoint['subproject'] == 'patchy_particle_pressure':
return (
job.statepoint.subproject,
job.statepoint.density,
job.statepoint.pressure,
job.statepoint.temperature,
job.statepoint.chi,
job.statepoint.replicate_idx,
job.cached_statepoint['subproject'],
job.cached_statepoint['density'],
job.cached_statepoint['pressure'],
job.cached_statepoint['temperature'],
job.cached_statepoint['chi'],
job.cached_statepoint['replicate_idx'],
)

return (
job.statepoint.subproject,
job.statepoint.num_particles,
job.cached_statepoint['subproject'],
job.cached_statepoint['num_particles'],
)


Expand Down
27 changes: 15 additions & 12 deletions hoomd_validation/alj_2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def job_statepoints():

def is_alj_2d(job):
"""Test if a given job is part of the alj_2d subproject."""
return job.statepoint['subproject'] == 'alj_2d'
return job.cached_statepoint['subproject'] == 'alj_2d'


partition_jobs_cpu = aggregator.groupsof(
Expand Down Expand Up @@ -104,8 +104,8 @@ def alj_2d_create_initial_state(*jobs):
message_filename=util.get_message_filename(job, 'create_initial_state.log'),
)

num_particles = job.statepoint['num_particles']
density = job.statepoint['density']
num_particles = job.cached_statepoint['num_particles']
density = job.cached_statepoint['density']

box_volume = num_particles / density
L = box_volume ** (1 / 2.0)
Expand Down Expand Up @@ -231,7 +231,9 @@ def make_md_simulation(
sim.operations.add(thermo)

# thermalize momenta
sim.state.thermalize_particle_momenta(hoomd.filter.All(), job.sp.kT)
sim.state.thermalize_particle_momenta(
hoomd.filter.All(), job.cached_statepoint['kT']
)

return sim

Expand Down Expand Up @@ -405,12 +407,12 @@ def alj_2d_conservation_analyze(*jobs):
)
job_energies[sim_mode] = (
job_energies[sim_mode] - job_energies[sim_mode][0]
) / job.statepoint['num_particles']
) / job.cached_statepoint['num_particles']

momentum_vector = log_traj['hoomd-data/md/Integrator/linear_momentum']
job_linear_momentum[sim_mode] = [
math.sqrt(v[0] ** 2 + v[1] ** 2 + v[2] ** 2)
/ job.statepoint['num_particles']
/ job.cached_statepoint['num_particles']
for v in momentum_vector
]

Expand All @@ -425,7 +427,7 @@ def plot(*, ax, data, quantity_name, legend=False):
ax.plot(
timesteps[i][mode],
data[i][mode],
label=f'{mode}_{job.statepoint.replicate_idx}',
label=f'{mode}_{job.cached_statepoint["replicate_idx"]}',
)
ax.set_xlabel('time step')
ax.set_ylabel(quantity_name)
Expand All @@ -442,13 +444,14 @@ def plot(*, ax, data, quantity_name, legend=False):

fig.suptitle(
'ALJ 2D conservation tests: '
f'$kT={job.statepoint.kT}$, $\\rho={job.statepoint.density}$, '
f'$N={job.statepoint.num_particles}$'
f'$kT={job.cached_statepoint["kT"]}$, '
f'$\\rho={job.cached_statepoint["density"]}$, '
f'$N={job.cached_statepoint["num_particles"]}$'
)
filename = (
f'alj_2d_conservation_kT{job.statepoint.kT}_'
f'density{round(job.statepoint.density, 2)}_'
f'N{job.statepoint.num_particles}.svg'
f'alj_2d_conservation_kT{job.cached_statepoint["kT"]}_'
f'density{round(job.cached_statepoint["density"], 2)}_'
f'N{job.cached_statepoint["num_particles"]}.svg'
)

fig.savefig(os.path.join(jobs[0]._project.path, filename), bbox_inches='tight')
Expand Down
18 changes: 9 additions & 9 deletions hoomd_validation/hard_disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def job_statepoints():

def is_hard_disk(job):
"""Test if a given job is part of the hard_disk subproject."""
return job.statepoint['subproject'] == 'hard_disk'
return job.cached_statepoint['subproject'] == 'hard_disk'


partition_jobs_cpu_serial = aggregator.groupsof(
Expand Down Expand Up @@ -93,8 +93,8 @@ def hard_disk_create_initial_state(*jobs):
if communicator.rank == 0:
print('starting hard_disk_create_initial_state:', job)

num_particles = job.statepoint['num_particles']
density = job.statepoint['density']
num_particles = job.cached_statepoint['num_particles']
density = job.cached_statepoint['density']

box_volume = num_particles / density
L = box_volume ** (1 / 2.0)
Expand Down Expand Up @@ -303,7 +303,7 @@ def run_npt_sim(job, device, complete_filename):

# box updates
boxmc = hoomd.hpmc.update.BoxMC(
betaP=job.statepoint.pressure, trigger=hoomd.trigger.Periodic(1)
betaP=job.cached_statepoint['pressure'], trigger=hoomd.trigger.Periodic(1)
)
boxmc.volume = dict(weight=1.0, mode='ln', delta=1e-6)

Expand Down Expand Up @@ -681,7 +681,7 @@ def hard_disk_analyze(job):
timesteps=timesteps,
data=densities,
ylabel=r'$\rho$',
expected=job.sp.density,
expected=job.cached_statepoint['density'],
max_points=500,
)
ax.legend()
Expand All @@ -692,14 +692,14 @@ def hard_disk_analyze(job):
timesteps=timesteps,
data=pressures,
ylabel=r'$\beta P$',
expected=job.sp.pressure,
expected=job.cached_statepoint['pressure'],
max_points=500,
)

fig.suptitle(
f'$\\rho={job.statepoint.density}$, '
f'$N={job.statepoint.num_particles}$, '
f'replicate={job.statepoint.replicate_idx}'
f'$\\rho={job.cached_statepoint["density"]}$, '
f'$N={job.cached_statepoint["num_particles"]}$, '
f'replicate={job.cached_statepoint["replicate_idx"]}'
)
fig.savefig(job.fn('nvt_npt_plots.svg'), bbox_inches='tight')

Expand Down
18 changes: 9 additions & 9 deletions hoomd_validation/hard_sphere.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def job_statepoints():

def is_hard_sphere(job):
"""Test if a given job is part of the hard_sphere subproject."""
return job.statepoint['subproject'] == 'hard_sphere'
return job.cached_statepoint['subproject'] == 'hard_sphere'


partition_jobs_cpu_serial = aggregator.groupsof(
Expand Down Expand Up @@ -88,8 +88,8 @@ def hard_sphere_create_initial_state(*jobs):
if communicator.rank == 0:
print('starting hard_sphere_create_initial_state:', job)

num_particles = job.statepoint['num_particles']
density = job.statepoint['density']
num_particles = job.cached_statepoint['num_particles']
density = job.cached_statepoint['density']

box_volume = num_particles / density
L = box_volume ** (1 / 3.0)
Expand Down Expand Up @@ -254,7 +254,7 @@ def run_npt_sim(job, device, complete_filename):

# box updates
boxmc = hoomd.hpmc.update.BoxMC(
betaP=job.statepoint.pressure, trigger=hoomd.trigger.Periodic(1)
betaP=job.cached_statepoint['pressure'], trigger=hoomd.trigger.Periodic(1)
)
boxmc.volume = dict(weight=1.0, mode='ln', delta=1e-6)

Expand Down Expand Up @@ -544,7 +544,7 @@ def hard_sphere_analyze(job):
timesteps=timesteps,
data=densities,
ylabel=r'$\rho$',
expected=job.sp.density,
expected=job.cached_statepoint['density'],
max_points=500,
)
ax.legend()
Expand All @@ -555,14 +555,14 @@ def hard_sphere_analyze(job):
timesteps=timesteps,
data=pressures,
ylabel=r'$\beta P$',
expected=job.sp.pressure,
expected=job.cached_statepoint['pressure'],
max_points=500,
)

fig.suptitle(
f'$\\rho={job.statepoint.density}$, '
f'$N={job.statepoint.num_particles}$, '
f'replicate={job.statepoint.replicate_idx}'
f'$\\rho={job.cached_statepoint["density"]}$, '
f'$N={job.cached_statepoint["num_particles"]}$, '
f'replicate={job.cached_statepoint["replicate_idx"]}'
)
fig.savefig(job.fn('nvt_npt_plots.svg'), bbox_inches='tight')

Expand Down
Loading

0 comments on commit b7a658d

Please sign in to comment.