Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PuReMD
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SParTA
PuReMD
Commits
ddeb0cd3
Commit
ddeb0cd3
authored
6 years ago
by
Kurt A. O'Hearn
Browse files
Options
Downloads
Patches
Plain Diff
Tools: draft basic SQLite functionality for Python driver.
parent
6450c9ca
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
tools/driver.py
+191
-6
191 additions, 6 deletions
tools/driver.py
with
191 additions
and
6 deletions
tools/driver.py
+
191
−
6
View file @
ddeb0cd3
#!/bin/python3
from
ctypes
import
*
from
ctypes
import
c_int
,
c_double
,
c_char
,
c_char_p
,
c_void_p
,
\
Structure
,
Union
,
POINTER
,
CFUNCTYPE
,
cdll
import
sqlite3
as
sq3
from
os
import
path
class
BondOrderData
(
Structure
):
...
...
@@ -220,7 +223,6 @@ class SimulationData(Structure):
(
"
ext_press
"
,
c_double
*
3
),
(
"
kin_press
"
,
c_double
),
(
"
tot_press
"
,
c_double
*
3
),
(
"
tot_press
"
,
c_double
*
3
),
(
"
timing
"
,
ReaxTiming
),
]
...
...
@@ -236,6 +238,141 @@ class ReaxAtom(Structure):
]
def
create_db
(
name
=
'
spuremd.db
'
):
conn
=
sq3
.
connect
(
name
)
conn
.
executescript
(
"""
CREATE TABLE simulation(
id integer,
date text,
name text,
ensemble_type integer,
steps integer,
time_step integer,
restart_format integer,
random_velocity integer,
reposition_atoms integer,
peroidic_boundary integer,
geo_format integer,
restrict_bonds integer,
tabulate_long_range integer,
reneighbor integer,
vlist_cutoff real,
neighbor_cutoff real,
three_body_cutoff real,
hydrogen_bond_cutoff real,
bond_graph_cutoff real,
charge_method integer,
cm_q_net real,
cm_solver_type integer,
cm_solver_max_iters integer,
cm_solver_restart integer,
cm_solver_q_err real,
cm_domain_sparsity real,
cm_solver_pre_comp_type integer,
cm_solver_pre_comp_refactor integer,
cm_solver_pre_comp_droptol real,
cm_solver_pre_comp_sweeps integer,
cm_solver_pre_comp_sai_thres real,
cm_solver_pre_app_type integer,
cm_solver_pre_app_jacobi_iters integer,
temp_init real,
temp_final real,
temp_mass real,
temp_mode integer,
temp_rate real,
temp_freq integer,
pressure real,
pressure_mass real,
compress integer,
pressure_mode integer,
remove_center_of_mass integer,
debug_level integer,
write_freq integer,
traj_compress integer,
traj_format integer,
traj_title text,
atom_info integer,
atom_velocities integer,
atom_forces integer,
bond_info integer,
angle_info integer,
test_forces integer,
molecule_analysis integer,
freq_molecule_analysis integer,
ignore integer,
dipole_analysis integer,
freq_dipole_analysis integer,
diffusion_coefficient integer,
freq_diffusion_coefficient integer,
restrict_type integer,
PRIMARY KEY (id)
);
CREATE TABLE system_properties(
id integer,
step integer,
total_energy real,
potential_energy real,
kinetic_energy real,
temperature real,
volume real,
pressure real,
PRIMARY KEY (id, step)
);
CREATE TABLE potential(
id integer,
step integer,
bond_energy real,
atom_energy real,
lone_pair_energy real,
angle_energy real,
coa_energy real,
hydrogen_bond_energy real,
torsion_energy real,
conjugation_energy real,
van_der_waals_energy real,
coulombic_energy real,
polarization_energy real,
PRIMARY KEY (id, step)
);
CREATE TABLE trajectory(
id integer,
step integer,
atom_id integer,
position_x real,
position_y real,
position_z real,
charge real,
PRIMARY KEY (id, step, atom_id)
);
CREATE TABLE performance(
id integer,
step integer,
time_total real,
time_nbrs real,
time_init real,
time_bonded real,
time_nonbonded real,
time_cm real,
time_cm_sort real,
cm_solver_iters integer,
time_cm_pre_comp real,
time_cm_pre_app real,
time_cm_solver_spmv real,
time_cm_solver_vec_ops real,
time_cm_solver_orthog real,
time_cm_solver_tri_solve real,
PRIMARY KEY (id, step)
);
"""
)
conn
.
close
()
if
__name__
==
'
__main__
'
:
lib
=
cdll
.
LoadLibrary
(
"
libspuremd.so.1
"
)
...
...
@@ -258,10 +395,6 @@ if __name__ == '__main__':
CALLBACKFUNC
=
CFUNCTYPE
(
None
,
POINTER
(
ReaxAtom
),
POINTER
(
SimulationData
),
POINTER
(
ReaxList
))
def
get_simulation_step_results
(
atoms
,
data
,
lists
):
print
(
"
{0:24.15f} {1:24.15f} {2:24.15f}
"
.
format
(
data
[
0
].
E_Tot
,
data
[
0
].
E_Kin
,
data
[
0
].
E_Pot
))
setup_callback
=
lib
.
setup_callback
setup_callback
.
restype
=
c_int
...
...
@@ -269,6 +402,57 @@ if __name__ == '__main__':
set_output_enabled
.
argtypes
=
[
c_void_p
,
c_int
]
set_output_enabled
.
restype
=
c_int
db_file
=
"
spuremd.db
"
if
not
path
.
isfile
(
db_file
):
create_db
(
db_file
)
conn
=
sq3
.
connect
(
db_file
)
record_potential
=
True
record_trajectory
=
False
record_performance
=
True
def
get_simulation_step_results
(
atoms
,
data
,
lists
):
print
(
"
{0:24.15f} {1:24.15f} {2:24.15f}
"
.
format
(
data
[
0
].
E_Tot
,
data
[
0
].
E_Kin
,
data
[
0
].
E_Pot
))
if
data
[
0
].
step
==
0
:
#TODO: insert data into simulation table
pass
with
conn
:
conn
.
execute
(
"
INSERT INTO system_properties VALUES (?,?,?,?,?,?,?,?)
"
,
(
0
,
data
[
0
].
step
,
data
[
0
].
E_Tot
,
data
[
0
].
E_Pot
,
data
[
0
].
E_Kin
,
data
[
0
].
therm
.
T
,
0.0
,
data
[
0
].
iso_bar
.
P
))
# MISSING: ID, system->box.volume
if
record_potential
:
with
conn
:
conn
.
execute
(
"
INSERT INTO potential VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
"
,
(
0
,
data
[
0
].
step
,
data
[
0
].
E_BE
,
data
[
0
].
E_Ov
+
data
[
0
].
E_Un
,
data
[
0
].
E_Lp
,
data
[
0
].
E_Ang
+
data
[
0
].
E_Pen
,
data
[
0
].
E_Coa
,
data
[
0
].
E_HB
,
data
[
0
].
E_Tor
,
data
[
0
].
E_Con
,
data
[
0
].
E_vdW
,
data
[
0
].
E_Ele
,
data
[
0
].
E_Pol
))
if
record_trajectory
:
with
conn
:
for
i
in
range
(
6540
):
conn
.
execute
(
"
INSERT INTO trajectory VALUES (?,?,?,?,?,?,?)
"
,
(
0
,
data
[
0
].
step
,
i
,
atoms
[
i
].
x
[
0
],
atoms
[
i
].
x
[
1
],
atoms
[
i
].
x
[
2
],
atoms
[
i
].
q
))
if
record_performance
:
with
conn
:
conn
.
execute
(
"
INSERT INTO performance VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
"
,
(
0
,
data
[
0
].
step
,
data
[
0
].
timing
.
total
,
data
[
0
].
timing
.
nbrs
,
data
[
0
].
timing
.
init_forces
,
data
[
0
].
timing
.
bonded
,
data
[
0
].
timing
.
nonb
,
data
[
0
].
timing
.
cm
,
data
[
0
].
timing
.
cm_sort_mat_rows
,
data
[
0
].
timing
.
cm_solver_iters
,
data
[
0
].
timing
.
cm_solver_pre_comp
,
data
[
0
].
timing
.
cm_solver_pre_app
,
data
[
0
].
timing
.
cm_solver_spmv
,
data
[
0
].
timing
.
cm_solver_vector_ops
,
data
[
0
].
timing
.
cm_solver_orthog
,
data
[
0
].
timing
.
cm_solver_tri_solve
))
handle
=
setup
(
b
"
data/benchmarks/water/water_6540.pdb
"
,
b
"
data/benchmarks/water/ffield.water
"
,
b
"
environ/param.gpu.water
"
)
...
...
@@ -288,4 +472,5 @@ if __name__ == '__main__':
print
(
"
{0:9d} {1:24.15f} {2:24.15f} {3:24.15f} {4:24.15f}
"
.
format
(
i
+
1
,
atoms
[
i
].
x
[
0
],
atoms
[
i
].
x
[
1
],
atoms
[
i
].
x
[
2
],
atoms
[
i
].
q
))
conn
.
close
()
cleanup
(
handle
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment