summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luevano <55825613+luevano@users.noreply.github.com>2019-12-12 20:49:41 -0700
committerDavid Luevano <55825613+luevano@users.noreply.github.com>2019-12-12 20:49:41 -0700
commitada04a42528c29ea86e48f0a19cb8723c8bc0a66 (patch)
tree4c72d4aaec333f34cb0e8b699e190583b3fd910b
parent4c1c9c0e6c74f51c2557fb2ef2d236321b62f43a (diff)
First working parallelism
-rw-r--r--c_matrix.py10
-rw-r--r--lj_matrix.py10
-rw-r--r--main.py97
3 files changed, 80 insertions, 37 deletions
diff --git a/c_matrix.py b/c_matrix.py
index 2bc4d4c0c..75cc4d8a2 100644
--- a/c_matrix.py
+++ b/c_matrix.py
@@ -30,7 +30,7 @@ from numpy.linalg import eig
def c_matrix(mol_data,
nc_data,
max_len=25,
- as_eig=False,
+ as_eig=True,
bohr_radius_units=False):
"""
Creates the Coulomb Matrix from the molecule data given.
@@ -150,13 +150,16 @@ def c_matrix(mol_data,
def c_matrix_multiple(mol_data,
nc_data,
+ pipe=None,
max_len=25,
- as_eig=False,
+ as_eig=True,
bohr_radius_units=False):
"""
Calculates the Coulomb Matrix of multiple molecules.
mol_data: molecule data, matrix of atom coordinates.
nc_data: nuclear charge data, array of atom data.
+ pipe: for multiprocessing purposes. Sends the data calculated
+ through a pipe.
max_len: maximum amount of atoms in molecule.
as_eig: if data should be returned as matrix or array of eigenvalues.
bohr_radius_units: if units should be in bohr's radius units.
@@ -167,6 +170,9 @@ def c_matrix_multiple(mol_data,
cm_data = np.array([c_matrix(mol, nc, max_len, as_eig, bohr_radius_units)
for mol, nc in zip(mol_data, nc_data)])
+ if pipe:
+ pipe.send(cm_data)
+
toc = time.perf_counter()
printc('\tCM calculation took {:.4f} seconds.'.format(toc - tic), 'GREEN')
diff --git a/lj_matrix.py b/lj_matrix.py
index 6769bc0c3..55e729c56 100644
--- a/lj_matrix.py
+++ b/lj_matrix.py
@@ -30,7 +30,7 @@ from numpy.linalg import eig
def lj_matrix(mol_data,
nc_data,
max_len=25,
- as_eig=False,
+ as_eig=True,
bohr_radius_units=False):
"""
Creates the Lennard-Jones Matrix from the molecule data given.
@@ -168,13 +168,16 @@ def lj_matrix(mol_data,
def lj_matrix_multiple(mol_data,
nc_data,
+ pipe=None,
max_len=25,
- as_eig=False,
+ as_eig=True,
bohr_radius_units=False):
"""
Calculates the Lennard-Jones Matrix of multiple molecules.
mol_data: molecule data, matrix of atom coordinates.
nc_data: nuclear charge data, array of atom data.
+ pipe: for multiprocessing purposes. Sends the data calculated
+ through a pipe.
max_len: maximum amount of atoms in molecule.
as_eig: if data should be returned as matrix or array of eigenvalues.
bohr_radius_units: if units should be in bohr's radius units.
@@ -185,6 +188,9 @@ def lj_matrix_multiple(mol_data,
ljm_data = np.array([lj_matrix(mol, nc, max_len, as_eig, bohr_radius_units)
for mol, nc in zip(mol_data, nc_data)])
+ if pipe:
+ pipe.send(ljm_data)
+
toc = time.perf_counter()
printc('\tL-JM calculation took {:.4f} seconds.'.format(toc-tic), 'GREEN')
diff --git a/main.py b/main.py
index 734069920..9d7d3a645 100644
--- a/main.py
+++ b/main.py
@@ -21,40 +21,71 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
import time
-from misc import printc
+from multiprocessing import Process, Pipe
# import matplotlib.pyplot as plt
+from misc import printc
from read_qm7_data import read_qm7_data
from c_matrix import c_matrix_multiple
from lj_matrix import lj_matrix_multiple
-from do_ml import do_ml
-
-
-# Initialization time.
-init_time = time.perf_counter()
-
-# Data reading.
-zi_data, molecules, nuclear_charge, energy_pbe0, energy_delta =\
- read_qm7_data()
-
-# Matrices calculation.
-cm_data = c_matrix_multiple(molecules, nuclear_charge, as_eig=True)
-ljm_data = lj_matrix_multiple(molecules, nuclear_charge, as_eig=True)
-
-# ML calculation.
-do_ml(cm_data,
- energy_pbe0,
- 1000,
- test_size=100,
- sigma=1000.0,
- desc_type='CM')
-do_ml(ljm_data,
- energy_pbe0,
- 1000,
- test_size=100,
- sigma=1000.0,
- desc_type='L-JM')
-
-# End of program
-end_time = time.perf_counter()
-printc('Program took {:.4f} seconds of runtime.'.format(end_time - init_time),
- 'CYAN')
+# from do_ml import do_ml
+
+
+def main():
+ # Initialization time.
+ init_time = time.perf_counter()
+ procs = []
+ pipes = []
+
+ # Data reading.
+ zi_data, molecules, nuclear_charge, energy_pbe0, energy_delta =\
+ read_qm7_data()
+
+ # Matrices calculation.
+ cm_recv, cm_send = Pipe()
+ pipes.append(cm_send)
+ p1 = Process(target=c_matrix_multiple,
+ args=(molecules, nuclear_charge, cm_send))
+ procs.append(p1)
+ p1.start()
+
+ ljm_recv, ljm_send = Pipe()
+ pipes.append(ljm_send)
+ p2 = Process(target=lj_matrix_multiple,
+ args=(molecules, nuclear_charge, ljm_send))
+ procs.append(p2)
+ p2.start()
+
+ cm_data = cm_recv.recv()
+ ljm_data = ljm_recv.recv()
+
+ for pipe, proc in zip(pipes, procs):
+ pipe.close()
+ proc.join()
+
+ print(type(cm_data), cm_data[0])
+ print(type(ljm_data), ljm_data[0])
+
+ """
+ # ML calculation.
+ do_ml(cm_data,
+ energy_pbe0,
+ 1000,
+ test_size=100,
+ sigma=1000.0,
+ desc_type='CM')
+ do_ml(ljm_data,
+ energy_pbe0,
+ 1000,
+ test_size=100,
+ sigma=1000.0,
+ desc_type='L-JM')
+ """
+
+ # End of program
+ end_time = time.perf_counter()
+ printc('Program took {:.4f} seconds.'.format(end_time - init_time),
+ 'CYAN')
+
+
+if __name__ == '__main__':
+ main()