diff --git a/dpdata/amber/sqm.py b/dpdata/amber/sqm.py index 6d5843126..840f4e139 100644 --- a/dpdata/amber/sqm.py +++ b/dpdata/amber/sqm.py @@ -1,11 +1,13 @@ import numpy as np +from ..periodic_table import ELEMENTS START = 0 -READ_CHARGE = 1 -READ_CHARGE_SUCCESS = 2 +READ_ENERGY = 1 +READ_CHARGE = 2 READ_COORDS_START = 3 READ_COORDS = 6 +READ_FORCES = 7 def parse_sqm_out(fname): ''' @@ -14,15 +16,26 @@ def parse_sqm_out(fname): atom_symbols = [] coords = [] charges = [] + forces = [] + energies = [] + with open(fname) as f: - flag = 0 + flag = START for line in f: - if line.startswith(" Atom Element Mulliken Charge"): + if line.startswith(" Total SCF energy"): + flag = READ_ENERGY + elif line.startswith(" Atom Element Mulliken Charge"): flag = READ_CHARGE elif line.startswith(" Total Mulliken Charge"): - flag = READ_CHARGE_SUCCESS + flag = START elif line.startswith(" Final Structure"): flag = READ_COORDS_START + elif line.startswith("QMMM: Forces on QM atoms"): + flag = READ_FORCES + elif flag == READ_ENERGY: + energy = float(line.strip().split()[-2]) + energies.append(energy) + flag = START elif flag == READ_CHARGE: ls = line.strip().split() atom_symbols.append(ls[-2]) @@ -30,25 +43,60 @@ def parse_sqm_out(fname): elif READ_COORDS_START <= flag < READ_COORDS: flag += 1 elif flag == READ_COORDS: - ls = line.strip() - if not ls: - break - else: - symbol = line.strip().split()[-4] - coord = list(map(float, line.strip().split()[-3:])) - coords.append(coord) - return atom_symbols, charges, np.array(coords) - - -def to_system_data(fname): + coords.append([float(x) for x in line.strip().split()[-3:]]) + if len(coords) == len(charges): + flag = START + elif flag == READ_FORCES: + forces.append([float(x) for x in line.strip().split()[-3:]]) + if len(forces) == len(charges): + flag = START + data = {} - atom_symbols, charges, coords = parse_sqm_out(fname) atom_names, data['atom_types'], atom_numbs = np.unique(atom_symbols, return_inverse=True, return_counts=True) + data['charges'] = np.array(charges) data['atom_names'] = list(atom_names) data['atom_numbs'] = list(atom_numbs) - data['charges'] = np.array([charges]) - data['coords'] = np.array([coords]) data['orig'] = np.array([0, 0, 0]) data['cells'] = np.array([[[100., 0., 0.], [0., 100., 0.], [0., 0., 100.]]]) data['nopbc'] = True + data['coords'] = np.array([coords]) + + energies = np.array(energies) + forces = np.array([forces], dtype=np.float32) + if len(forces) > 0: + data['energies'] = energies + data['forces'] = forces + return data + +def make_sqm_in(data, fname=None, frame_idx=0, **kwargs): + symbols = [data['atom_names'][ii] for ii in data['atom_types']] + atomic_numbers = [ELEMENTS.index(ss) + 1 for ss in symbols] + charge = kwargs.get("charge", 0) + + # multiplicity + mult = kwargs.get("mult", 1) + if mult != 1 : + raise RuntimeError("Multiplicity is not 1, which is not supported by sqm") + + maxcyc = kwargs.get("maxcyc", 0) # 0 represents a single-point calculation + theory = kwargs.get("qm_theory", "DFTB3") + ret = "Run semi-emperical minimization\n" + ret += " &qmmm\n" + ret += f" qm_theory='{theory}'\n" + ret += f" qmcharge={charge}\n" + ret += f" maxcyc={maxcyc}\n" + ret += " verbosity=4\n" + ret += " /\n" + for ii in range(len(data['atom_types'])): + ret += "{:>4s}{:>6s}{:>14s}{:>14s}{:>14s}\n".format( + str(atomic_numbers[ii]), + str(symbols[ii]), + f"{data['coords'][frame_idx][ii, 0]:.4f}", + f"{data['coords'][frame_idx][ii, 1]:.4f}", + f"{data['coords'][frame_idx][ii, 2]:.4f}" + ) + if fname is not None: + with open(fname, 'w') as fp: + fp.write(ret) + return ret \ No newline at end of file diff --git a/dpdata/gromacs/gro.py b/dpdata/gromacs/gro.py index b2473a03b..d2349bb14 100644 --- a/dpdata/gromacs/gro.py +++ b/dpdata/gromacs/gro.py @@ -41,7 +41,7 @@ def _get_cell(line): cell = cell * nm2ang return cell -def file_to_system_data(fname, format_atom_name=True): +def file_to_system_data(fname, format_atom_name=True, **kwargs): system = {'coords': [], 'cells': []} with open(fname) as fp: frame = 0 @@ -74,7 +74,9 @@ def file_to_system_data(fname, format_atom_name=True): system['cells'] = np.array(system['cells']) return system -def from_system_data(system, f_idx=0): +def from_system_data(system, f_idx=0, **kwargs): + resname = kwargs.get("resname", "MOL") + shift = kwargs.get("shift", 0) ret = "" ret += " molecule" + "\n" n_atoms = sum(system["atom_numbs"]) @@ -83,8 +85,8 @@ def from_system_data(system, f_idx=0): atom_type = system["atom_types"][i] atom_name = system["atom_names"][atom_type] coords = system["coords"][f_idx] * ang2nm - ret += "{:>5d}{:<5s}{:>5s}{:5d}{:8.3f}{:8.3f}{:8.3f}\n".format(1, "MOL", atom_name, i+1, *tuple(coords[i])) + ret += "{:>5d}{:<5s}{:>5s}{:5d}{:8.3f}{:8.3f}{:8.3f}\n".format(1, resname, atom_name, i+shift+1, *tuple(coords[i])) cell = (system["cells"][f_idx].flatten() * ang2nm)[cell_idx_gmx2dp] - ret += " " + " ".join([str(x) for x in cell]) + ret += " " + " ".join([f"{x:.3f}" for x in cell]) return ret diff --git a/dpdata/plugins/amber.py b/dpdata/plugins/amber.py index 1568dd528..2c6fa56a5 100644 --- a/dpdata/plugins/amber.py +++ b/dpdata/plugins/amber.py @@ -34,4 +34,20 @@ def from_system(self, fname, **kwargs): ''' Read from ambertools sqm.out ''' - return dpdata.amber.sqm.to_system_data(fname) + return dpdata.amber.sqm.parse_sqm_out(fname) + + def from_labeled_system(self, fname, **kwargs): + ''' + Read from ambertools sqm.out + ''' + data = dpdata.amber.sqm.parse_sqm_out(fname) + assert "forces" in list(data.keys()), f"No forces in {fname}" + return data + +@Format.register("sqm/in") +class SQMINFormat(Format): + def to_system(self, data, fname=None, frame_idx=0, **kwargs): + """ + Generate input files for semi-emperical calculation in sqm software + """ + return dpdata.amber.sqm.make_sqm_in(data, fname, frame_idx, **kwargs) diff --git a/dpdata/plugins/gromacs.py b/dpdata/plugins/gromacs.py index a061918ba..f4e3d5285 100644 --- a/dpdata/plugins/gromacs.py +++ b/dpdata/plugins/gromacs.py @@ -14,7 +14,7 @@ def from_system(self, file_name, format_atom_name=True, **kwargs): file_name : str The input file name """ - return dpdata.gromacs.gro.file_to_system_data(file_name, format_atom_name=format_atom_name) + return dpdata.gromacs.gro.file_to_system_data(file_name, format_atom_name=format_atom_name, **kwargs) def to_system(self, data, file_name=None, frame_idx=-1, **kwargs): """ @@ -31,12 +31,13 @@ def to_system(self, data, file_name=None, frame_idx=-1, **kwargs): if frame_idx == -1: strs = [] for idx in range(data['coords'].shape[0]): - gro_str = dpdata.gromacs.gro.from_system_data(data, f_idx=idx) + gro_str = dpdata.gromacs.gro.from_system_data(data, f_idx=idx, + **kwargs) strs.append(gro_str) gro_str = "\n".join(strs) else: gro_str = dpdata.gromacs.gro.from_system_data( - data, f_idx=frame_idx) + data, f_idx=frame_idx, **kwargs) if file_name is None: return gro_str diff --git a/tests/amber/methane.mol b/tests/amber/methane.mol new file mode 100644 index 000000000..bc9be67b6 --- /dev/null +++ b/tests/amber/methane.mol @@ -0,0 +1,14 @@ + + RDKit 3D + + 5 4 0 0 0 0 0 0 0 0999 V2000 + -0.0221 0.0032 0.0165 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6690 0.8894 -0.1009 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3778 -0.8578 -0.5883 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0964 -0.3151 1.0638 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9725 0.2803 -0.3911 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 1 3 1 0 + 1 4 1 0 + 1 5 1 0 +M END diff --git a/tests/amber/sqm.in b/tests/amber/sqm.in new file mode 100644 index 000000000..8f4120085 --- /dev/null +++ b/tests/amber/sqm.in @@ -0,0 +1,12 @@ +Run semi-emperical minimization + &qmmm + qm_theory='DFTB3' + qmcharge=0 + maxcyc=0 + verbosity=4 + / + 6 C -0.0221 0.0032 0.0165 + 1 H -0.6690 0.8894 -0.1009 + 1 H -0.3778 -0.8578 -0.5883 + 1 H 0.0964 -0.3151 1.0638 + 1 H 0.9725 0.2803 -0.3911 diff --git a/tests/amber/sqm_forces.out b/tests/amber/sqm_forces.out new file mode 100644 index 000000000..e4c2405d4 --- /dev/null +++ b/tests/amber/sqm_forces.out @@ -0,0 +1,392 @@ + -------------------------------------------------------- + AMBER SQM VERSION 19 + + By + Ross C. Walker, Michael F. Crowley, Scott Brozell, + Tim Giese, Andreas W. Goetz, + Tai-Sung Lee and David A. Case + + -------------------------------------------------------- + + +-------------------------------------------------------------------------------- + QM CALCULATION INFO +-------------------------------------------------------------------------------- + +| QMMM: Citation for AMBER QMMM Run: +| QMMM: R.C. Walker, M.F. Crowley and D.A. Case, J. COMP. CHEM. 29:1019, 2008 + +| QMMM: DFTB Calculation - Additional citation for AMBER DFTB QMMM Run: +| QMMM: Seabra, G.M., Walker, R.C. et al., J. PHYS. CHEM. A., 111, 5655, (2007) + +| QMMM: DFTB3 - Additional citation to follow. Implementation by: +| QMMM: A.W. Goetz +| QMMM: +| QMMM: DFTB3 method citation: +| QMMM: M. Gaus, Q. Cui, M. Elstner, J. CHEM. THEORY COMPUT. 7, 931 (2011) +| QMMM: +| QMMM: DFTB3 dispersion correction [D3(BJ)] and halogen correction not available. + +| QMMM: Please cite also the appropriate references for the DFTB parameters +| QMMM: that you are using (see the manual and www.dftb.org). + + +QMMM: SINGLET STATE CALCULATION +QMMM: RHF CALCULATION, NO. OF DOUBLY OCCUPIED LEVELS = 66 + +| QMMM: *** SCF convergence criteria *** +| QMMM: Energy change : 0.1D-09 kcal/mol +| QMMM: Error matrix |FP-PF| : 0.1D+00 au +| QMMM: Density matrix change : 0.5D-06 +| QMMM: Maximum number of SCF cycles : 1000 + DFTB: Number of atom types = 6 + + Parameter files: + TYP (AT) TYP (AT) SK integral FILE +| 1 1 (H ) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-H.skf +| 2 1 (H ) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-Cl.skf +| 3 1 (H ) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-N.skf +| 4 1 (H ) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-F.skf +| 5 1 (H ) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-C.skf +| 6 1 (H ) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/H-O.skf +| 7 2 (Cl) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-H.skf +| 8 2 (Cl) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-Cl.skf +| 9 2 (Cl) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-N.skf +| 10 2 (Cl) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-F.skf +| 11 2 (Cl) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-C.skf +| 12 2 (Cl) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/Cl-O.skf +| 13 3 (N ) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-H.skf +| 14 3 (N ) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-Cl.skf +| 15 3 (N ) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-N.skf +| 16 3 (N ) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-F.skf +| 17 3 (N ) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-C.skf +| 18 3 (N ) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/N-O.skf +| 19 4 (F ) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-H.skf +| 20 4 (F ) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-Cl.skf +| 21 4 (F ) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-N.skf +| 22 4 (F ) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-F.skf +| 23 4 (F ) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-C.skf +| 24 4 (F ) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/F-O.skf +| 25 5 (C ) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-H.skf +| 26 5 (C ) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-Cl.skf +| 27 5 (C ) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-N.skf +| 28 5 (C ) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-F.skf +| 29 5 (C ) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-C.skf +| 30 5 (C ) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/C-O.skf +| 31 6 (O ) 1 (H ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-H.skf +| 32 6 (O ) 2 (Cl) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-Cl.skf +| 33 6 (O ) 3 (N ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-N.skf +| 34 6 (O ) 4 (F ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-F.skf +| 35 6 (O ) 5 (C ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-C.skf +| 36 6 (O ) 6 (O ) /opt/anaconda3/envs/deepchem/dat/slko/3ob-3-1/O-O.skf + +QMMM: Hubbard Derivatives dU/dq: +QMMM: H -0.185700 +QMMM: Cl -0.069700 +QMMM: N -0.153500 +QMMM: F -0.157500 +QMMM: C -0.149200 +QMMM: O -0.157500 + +QMMM: zeta = 4.000000 + + QMMM: QM Region Cartesian Coordinates (*=link atom) + QMMM: QM_NO. MM_NO. ATOM X Y Z + QMMM: 1 1 H -3.2480 16.7500 48.5690 + QMMM: 2 2 H -5.8110 17.5130 48.7760 + QMMM: 3 3 H -5.2480 19.0560 49.7070 + QMMM: 4 4 H 1.5010 14.9330 51.1720 + QMMM: 5 5 Cl 1.4590 28.6690 49.7060 + QMMM: 6 6 N 1.5970 22.7720 52.6590 + QMMM: 7 7 F 3.2720 26.3910 49.9790 + QMMM: 8 8 C -0.6920 25.3770 50.5860 + QMMM: 9 9 C -0.3220 26.6740 50.2790 + QMMM: 10 10 C 2.4140 21.7490 53.2910 + QMMM: 11 11 C 1.5860 24.7340 50.4600 + QMMM: 12 12 C -0.2430 20.2390 50.6080 + QMMM: 13 13 C 1.4860 18.6010 51.9670 + QMMM: 14 14 C 1.6900 16.0010 51.2810 + QMMM: 15 15 C -3.5540 17.6700 49.0670 + QMMM: 16 16 O -3.0180 19.5790 50.3580 + QMMM: 17 17 C -2.5910 18.6340 49.7030 + QMMM: 18 18 C 0.2560 24.3780 50.6770 + QMMM: 19 19 C 1.9850 26.0320 50.1740 + QMMM: 20 20 C -0.2890 18.8740 50.3880 + QMMM: 21 21 C 1.0090 26.9990 50.0810 + QMMM: 22 22 C 0.5890 18.0550 51.0710 + QMMM: 23 23 C 0.6790 22.1640 51.7100 + QMMM: 24 24 C 1.5360 19.9630 52.1990 + QMMM: 25 25 C 0.6610 20.7900 51.4970 + QMMM: 26 26 C -5.0110 18.1230 49.1960 + QMMM: 27 27 N 2.4160 20.4320 53.0930 + QMMM: 28 28 N -1.2370 18.3410 49.4770 + QMMM: 29 29 N -0.1760 23.0610 51.0220 + QMMM: 30 30 O 0.5230 16.6890 50.8330 + QMMM: 31 31 H -1.6870 25.1540 50.7490 + QMMM: 32 32 H -1.0450 27.4060 50.1970 + QMMM: 33 33 H 3.0750 22.1330 53.9840 + QMMM: 34 34 H 2.3080 23.9980 50.5140 + QMMM: 35 35 H -0.8950 20.8570 50.1000 + QMMM: 36 36 H 2.1340 17.9790 52.4750 + QMMM: 37 37 H 1.8940 16.2470 52.3020 + QMMM: 38 38 H 2.5460 16.2790 50.7020 + QMMM: 39 39 H -0.9560 17.7860 48.7140 + QMMM: 40 40 H -1.0840 22.7710 50.7770 + +-------------------------------------------------------------------------------- + RESULTS +-------------------------------------------------------------------------------- + + QMMM SCC-DFTB: No external charges defined. + + QMMM SCC-DFTB: QM Region Input Cartesian Coordinates + QMMM SCC-DFTB: NO. TYP L AT# SYM X Y Z Charge + QMMM SCC-DFTB: 1 1 1 1 H -3.2480000000 16.7500000000 48.5690000000 0.0000000000 + QMMM SCC-DFTB: 2 1 1 1 H -5.8110000000 17.5130000000 48.7760000000 0.0000000000 + QMMM SCC-DFTB: 3 1 1 1 H -5.2480000000 19.0560000000 49.7070000000 0.0000000000 + QMMM SCC-DFTB: 4 1 1 1 H 1.5010000000 14.9330000000 51.1720000000 0.0000000000 + QMMM SCC-DFTB: 5 2 3 17 Cl 1.4590000000 28.6690000000 49.7060000000 0.0000000000 + QMMM SCC-DFTB: 6 3 2 7 N 1.5970000000 22.7720000000 52.6590000000 0.0000000000 + QMMM SCC-DFTB: 7 4 2 9 F 3.2720000000 26.3910000000 49.9790000000 0.0000000000 + QMMM SCC-DFTB: 8 5 2 6 C -0.6920000000 25.3770000000 50.5860000000 0.0000000000 + QMMM SCC-DFTB: 9 5 2 6 C -0.3220000000 26.6740000000 50.2790000000 0.0000000000 + QMMM SCC-DFTB: 10 5 2 6 C 2.4140000000 21.7490000000 53.2910000000 0.0000000000 + QMMM SCC-DFTB: 11 5 2 6 C 1.5860000000 24.7340000000 50.4600000000 0.0000000000 + QMMM SCC-DFTB: 12 5 2 6 C -0.2430000000 20.2390000000 50.6080000000 0.0000000000 + QMMM SCC-DFTB: 13 5 2 6 C 1.4860000000 18.6010000000 51.9670000000 0.0000000000 + QMMM SCC-DFTB: 14 5 2 6 C 1.6900000000 16.0010000000 51.2810000000 0.0000000000 + QMMM SCC-DFTB: 15 5 2 6 C -3.5540000000 17.6700000000 49.0670000000 0.0000000000 + QMMM SCC-DFTB: 16 6 2 8 O -3.0180000000 19.5790000000 50.3580000000 0.0000000000 + QMMM SCC-DFTB: 17 5 2 6 C -2.5910000000 18.6340000000 49.7030000000 0.0000000000 + QMMM SCC-DFTB: 18 5 2 6 C 0.2560000000 24.3780000000 50.6770000000 0.0000000000 + QMMM SCC-DFTB: 19 5 2 6 C 1.9850000000 26.0320000000 50.1740000000 0.0000000000 + QMMM SCC-DFTB: 20 5 2 6 C -0.2890000000 18.8740000000 50.3880000000 0.0000000000 + QMMM SCC-DFTB: 21 5 2 6 C 1.0090000000 26.9990000000 50.0810000000 0.0000000000 + QMMM SCC-DFTB: 22 5 2 6 C 0.5890000000 18.0550000000 51.0710000000 0.0000000000 + QMMM SCC-DFTB: 23 5 2 6 C 0.6790000000 22.1640000000 51.7100000000 0.0000000000 + QMMM SCC-DFTB: 24 5 2 6 C 1.5360000000 19.9630000000 52.1990000000 0.0000000000 + QMMM SCC-DFTB: 25 5 2 6 C 0.6610000000 20.7900000000 51.4970000000 0.0000000000 + QMMM SCC-DFTB: 26 5 2 6 C -5.0110000000 18.1230000000 49.1960000000 0.0000000000 + QMMM SCC-DFTB: 27 3 2 7 N 2.4160000000 20.4320000000 53.0930000000 0.0000000000 + QMMM SCC-DFTB: 28 3 2 7 N -1.2370000000 18.3410000000 49.4770000000 0.0000000000 + QMMM SCC-DFTB: 29 3 2 7 N -0.1760000000 23.0610000000 51.0220000000 0.0000000000 + QMMM SCC-DFTB: 30 6 2 8 O 0.5230000000 16.6890000000 50.8330000000 0.0000000000 + QMMM SCC-DFTB: 31 1 1 1 H -1.6870000000 25.1540000000 50.7490000000 0.0000000000 + QMMM SCC-DFTB: 32 1 1 1 H -1.0450000000 27.4060000000 50.1970000000 0.0000000000 + QMMM SCC-DFTB: 33 1 1 1 H 3.0750000000 22.1330000000 53.9840000000 0.0000000000 + QMMM SCC-DFTB: 34 1 1 1 H 2.3080000000 23.9980000000 50.5140000000 0.0000000000 + QMMM SCC-DFTB: 35 1 1 1 H -0.8950000000 20.8570000000 50.1000000000 0.0000000000 + QMMM SCC-DFTB: 36 1 1 1 H 2.1340000000 17.9790000000 52.4750000000 0.0000000000 + QMMM SCC-DFTB: 37 1 1 1 H 1.8940000000 16.2470000000 52.3020000000 0.0000000000 + QMMM SCC-DFTB: 38 1 1 1 H 2.5460000000 16.2790000000 50.7020000000 0.0000000000 + QMMM SCC-DFTB: 39 1 1 1 H -0.9560000000 17.7860000000 48.7140000000 0.0000000000 + QMMM SCC-DFTB: 40 1 1 1 H -1.0840000000 22.7710000000 50.7770000000 0.0000000000 + + QMMM SCC-DFTB: SCC convergence criteria: + QMMM SCC-DFTB: Energy: 1.0E-10 + QMMM SCC-DFTB: Charge: 5.0E-07 + QMMM SCC-DFTB: Telec : 0.000K + QMMM SCC-DFTB: It# Energy Diff MaxChDiff At# Index Symb MullikCh + QMMM SCC-DFTB: 1 -60.798600944606008 + QMMM SCC-DFTB: 2 -60.761310277605311 0.037290667000697 0.595754712212091 16 16 O -0.77468 + QMMM SCC-DFTB: 3 -60.690761389922393 0.070548887682918 0.162169321675918 28 28 N -0.34943 + QMMM SCC-DFTB: 4 -60.693582112240911 -0.002820722318518 0.057212899956027 26 26 C -0.18805 + QMMM SCC-DFTB: 5 -60.693810112125625 -0.000227999884714 0.034126287054791 26 26 C -0.18625 + QMMM SCC-DFTB: 6 -60.694758814978442 -0.000948702852817 0.006280640593352 10 10 C 0.26492 + QMMM SCC-DFTB: 7 -60.694683794994447 0.000075019983996 0.001188656812445 14 14 C 0.02853 + QMMM SCC-DFTB: 8 -60.694671884036232 0.000011910958214 0.000754530995241 24 24 C 0.24619 + QMMM SCC-DFTB: 9 -60.694667355499796 0.000004528536437 0.000226900277553 14 14 C 0.02864 + QMMM SCC-DFTB: 10 -60.694665432744969 0.000001922754826 0.000062045483471 18 18 C 0.19381 + QMMM SCC-DFTB: 11 -60.694668962789393 -0.000003530044424 0.000015615528849 11 11 C -0.22899 + QMMM SCC-DFTB: 12 -60.694667911003613 0.000001051785780 0.000009751821261 26 26 C -0.17321 + QMMM SCC-DFTB: 13 -60.694667846256891 0.000000064746722 0.000002027486490 12 12 C -0.14319 + QMMM SCC-DFTB: 14 -60.694667872515218 -0.000000026258327 0.000000853761193 12 12 C -0.14320 + QMMM SCC-DFTB: 15 -60.694667834521049 0.000000037994170 0.000000335782053 26 26 C -0.17321 + QMMM SCC-DFTB: 16 -60.694667845507233 -0.000000010986184 0.000000061336410 22 22 C 0.27074 + QMMM SCC-DFTB: 17 -60.694667845634164 -0.000000000126931 0.000000011315413 13 13 C -0.25843 + QMMM SCC-DFTB: 18 -60.694667845907794 -0.000000000273630 0.000000009087084 28 28 N -0.30551 + QMMM SCC-DFTB: 19 -60.694667845785801 0.000000000121993 0.000000002561571 9 9 C -0.11560 + QMMM SCC-DFTB: 20 -60.694667845807182 -0.000000000021380 0.000000000342425 14 14 C 0.02867 + QMMM SCC-DFTB: SCC-DFTB for step 0 converged in 20 cycles. + + QMMM SCC-DFTB: + QMMM SCC-DFTB: Atomization Energy (eV) = -1425.999680715001 + QMMM SCC-DFTB: Electronic Energy (eV) = -1651.501912084414 + QMMM SCC-DFTB: Repulsive Energy (eV) = 27.941863707373 + QMMM SCC-DFTB: Total Energy (eV) = -1623.560048377041 + QMMM SCC-DFTB: SCF Energy (eV) = -197.560367662040 + QMMM SCC-DFTB: + QMMM SCC-DFTB: + QMMM SCC-DFTB: Atomization Energy (a.u.) = -52.407191500000 + QMMM SCC-DFTB: Electronic Energy (a.u.) = -60.694667845807 + QMMM SCC-DFTB: Repulsive Energy (a.u.) = 1.026896865394 + QMMM SCC-DFTB: Total Energy (a.u.) = -59.667770980413 + QMMM SCC-DFTB: SCF Energy (a.u.) = -7.260579480413 + QMMM SCC-DFTB: +QMMM: +QMMM: SCF Energy = -4555.93963865431033 KCal/mol, -19062.05144812963408 KJ/mol +QMMM: +QMMM: Electronic energy = -1651.50191208 eV ( -38085.28559458 KCal/mol) +QMMM: Repulsive energy = 27.94186371 eV ( 644.36731896 KCal/mol) +QMMM: Total energy = -1623.56004838 eV ( -37440.91827562 KCal/mol) + + Final MO eigenvalues (au): + -1.0678 -0.9168 -0.8819 -0.8091 -0.7922 -0.7767 -0.7663 -0.7146 + -0.7040 -0.6908 -0.6470 -0.6399 -0.6319 -0.6195 -0.6123 -0.5854 + -0.5491 -0.5352 -0.5223 -0.5130 -0.5092 -0.4936 -0.4794 -0.4578 + -0.4553 -0.4438 -0.4275 -0.4160 -0.4109 -0.4081 -0.4035 -0.4018 + -0.3975 -0.3919 -0.3896 -0.3838 -0.3733 -0.3707 -0.3675 -0.3562 + -0.3556 -0.3519 -0.3486 -0.3408 -0.3388 -0.3341 -0.3307 -0.3258 + -0.3231 -0.3211 -0.3141 -0.3067 -0.3021 -0.2999 -0.2874 -0.2770 + -0.2707 -0.2682 -0.2618 -0.2562 -0.2505 -0.2329 -0.2320 -0.2265 + -0.2248 -0.2086 -0.1292 -0.1036 -0.0653 -0.0615 -0.0509 -0.0262 + -0.0147 0.0102 0.0235 0.0502 0.0541 0.0702 0.0974 0.1356 + 0.1625 0.3045 0.3303 0.3330 0.3578 0.3670 0.3792 0.3898 + 0.3945 0.4153 0.4226 0.4356 0.4547 0.4654 0.5158 0.5206 + 0.5342 0.5503 0.5853 0.5957 0.5997 0.6140 0.6254 0.6388 + 0.6557 0.6633 0.6742 0.7431 0.7823 0.7996 0.8108 0.8206 + 0.8616 0.9009 0.9073 0.9275 0.9732 1.0088 1.0131 1.0738 + 1.1570 1.1766 1.2328 + + Heat of formation = -4555.93963865 kcal/mol ( -197.56036766 eV) + + Total SCF energy = -37440.91827562 kcal/mol ( -1623.56004838 eV) + Electronic energy = -38085.28559458 kcal/mol ( -1651.50191208 eV) + Core-core repulsion = 644.36731896 kcal/mol ( 27.94186371 eV) + + Atomic Charges for Step 1 : + Atom Element Mulliken Charge + 1 H 0.114 + 2 H 0.109 + 3 H 0.149 + 4 H 0.065 + 5 Cl -0.117 + 6 N -0.449 + 7 F -0.241 + 8 C -0.189 + 9 C -0.116 + 10 C 0.267 + 11 C -0.229 + 12 C -0.143 + 13 C -0.258 + 14 C 0.029 + 15 C -0.229 + 16 O -0.561 + 17 C 0.575 + 18 C 0.194 + 19 C 0.360 + 20 C 0.087 + 21 C 0.053 + 22 C 0.271 + 23 C 0.332 + 24 C 0.246 + 25 C -0.084 + 26 C -0.173 + 27 N -0.375 + 28 N -0.306 + 29 N -0.257 + 30 O -0.317 + 31 H 0.101 + 32 H 0.107 + 33 H 0.062 + 34 H 0.121 + 35 H 0.109 + 36 H 0.111 + 37 H 0.065 + 38 H 0.058 + 39 H 0.227 + 40 H 0.229 + Total Mulliken Charge = -0.000 + + X Y Z TOTAL + QM DIPOLE -1.681 -6.267 -2.968 7.135 + + Final Structure + + QMMM: QM Region Cartesian Coordinates (*=link atom) + QMMM: QM_NO. MM_NO. ATOM X Y Z + QMMM: 1 1 H -3.2480 16.7500 48.5690 + QMMM: 2 2 H -5.8110 17.5130 48.7760 + QMMM: 3 3 H -5.2480 19.0560 49.7070 + QMMM: 4 4 H 1.5010 14.9330 51.1720 + QMMM: 5 5 Cl 1.4590 28.6690 49.7060 + QMMM: 6 6 N 1.5970 22.7720 52.6590 + QMMM: 7 7 F 3.2720 26.3910 49.9790 + QMMM: 8 8 C -0.6920 25.3770 50.5860 + QMMM: 9 9 C -0.3220 26.6740 50.2790 + QMMM: 10 10 C 2.4140 21.7490 53.2910 + QMMM: 11 11 C 1.5860 24.7340 50.4600 + QMMM: 12 12 C -0.2430 20.2390 50.6080 + QMMM: 13 13 C 1.4860 18.6010 51.9670 + QMMM: 14 14 C 1.6900 16.0010 51.2810 + QMMM: 15 15 C -3.5540 17.6700 49.0670 + QMMM: 16 16 O -3.0180 19.5790 50.3580 + QMMM: 17 17 C -2.5910 18.6340 49.7030 + QMMM: 18 18 C 0.2560 24.3780 50.6770 + QMMM: 19 19 C 1.9850 26.0320 50.1740 + QMMM: 20 20 C -0.2890 18.8740 50.3880 + QMMM: 21 21 C 1.0090 26.9990 50.0810 + QMMM: 22 22 C 0.5890 18.0550 51.0710 + QMMM: 23 23 C 0.6790 22.1640 51.7100 + QMMM: 24 24 C 1.5360 19.9630 52.1990 + QMMM: 25 25 C 0.6610 20.7900 51.4970 + QMMM: 26 26 C -5.0110 18.1230 49.1960 + QMMM: 27 27 N 2.4160 20.4320 53.0930 + QMMM: 28 28 N -1.2370 18.3410 49.4770 + QMMM: 29 29 N -0.1760 23.0610 51.0220 + QMMM: 30 30 O 0.5230 16.6890 50.8330 + QMMM: 31 31 H -1.6870 25.1540 50.7490 + QMMM: 32 32 H -1.0450 27.4060 50.1970 + QMMM: 33 33 H 3.0750 22.1330 53.9840 + QMMM: 34 34 H 2.3080 23.9980 50.5140 + QMMM: 35 35 H -0.8950 20.8570 50.1000 + QMMM: 36 36 H 2.1340 17.9790 52.4750 + QMMM: 37 37 H 1.8940 16.2470 52.3020 + QMMM: 38 38 H 2.5460 16.2790 50.7020 + QMMM: 39 39 H -0.9560 17.7860 48.7140 + QMMM: 40 40 H -1.0840 22.7710 50.7770 +QMMM: +QMMM: Forces on QM atoms from SCF calculation +QMMM: Atm 1: 4.42339900482660 -1.84568335347418 -0.24491557798460 +QMMM: Atm 2: -3.23209970326899 -1.85584446015013 -2.20135365689389 +QMMM: Atm 3: -5.54210962602182 4.34957265805574 1.85035027143676 +QMMM: Atm 4: -0.64965287663571 1.94602348403655 -0.17030626388226 +QMMM: Atm 5: -0.54449676554692 11.45822560763962 -2.23770926902059 +QMMM: Atm 6: 19.47767949569608 114.02040828112732 39.17663967370635 +QMMM: Atm 7: 12.28770551313949 9.37687303025295 -2.02590726598390 +QMMM: Atm 8: -4.17307911860172 -18.69156102467198 8.61144913000140 +QMMM: Atm 9: -20.91151485959386 13.33542543081089 0.98315413859869 +QMMM: Atm 10: 57.81213096995776 -43.13681964739768 50.26857285156537 +QMMM: Atm 11: -14.70155414401897 2.29929204647827 1.84376932601349 +QMMM: Atm 12: 4.28968365278840 35.79519808443145 9.42895880861141 +QMMM: Atm 13: 11.76171363201617 19.00313683654644 18.40255685642010 +QMMM: Atm 14: 22.59203204962653 19.11376183395772 6.26353761850374 +QMMM: Atm 15: 152.71558007062131 -68.12292270331908 -19.48655475555291 +QMMM: Atm 16: -11.49476927523302 -14.61363615332107 -14.50049097275524 +QMMM: Atm 17: 7.28101898453634 32.58120230458048 30.69803359813822 +QMMM: Atm 18: 9.48563330633164 19.48973417471588 -14.39963078054814 +QMMM: Atm 19: -2.57982902102892 -2.92469180692160 0.27432319603930 +QMMM: Atm 20: 16.42510244833950 -31.10011261537555 26.07624637232345 +QMMM: Atm 21: 5.95178221473678 -32.84667693126916 5.72361951573615 +QMMM: Atm 22: -18.14365819340035 45.09266296196960 -10.97576744543044 +QMMM: Atm 23: -49.99748863934114 -104.43344069703645 -58.63304911115858 +QMMM: Atm 24: 3.59176294072371 11.23725074178902 2.97938234668701 +QMMM: Atm 25: 14.25157155772366 -12.74688632731251 -0.57220250477898 +QMMM: Atm 26: -143.19251827591333 60.79644824364138 22.33937110909451 +QMMM: Atm 27: -24.79071168291482 -36.88401899016046 -28.12203350267119 +QMMM: Atm 28: 28.91417842070531 -25.77427818785100 -30.66892606163460 +QMMM: Atm 29: -65.89101186031054 -5.88522174153298 -15.16631581275175 +QMMM: Atm 30: -10.73880633055260 -17.96543583547968 -1.06061838010930 +QMMM: Atm 31: 40.65299260949839 8.02283309252694 -6.07635657301762 +QMMM: Atm 32: 27.20908459427808 -29.72514804363591 2.48242778109588 +QMMM: Atm 33: -34.45616935317404 -17.96764452127526 -35.82036618876448 +QMMM: Atm 34: -31.01578164575134 30.29115946335486 -3.86716445062276 +QMMM: Atm 35: 26.66256743652963 -22.40890209908388 21.54264045155386 +QMMM: Atm 36: -26.57370510314600 16.55720434422381 -22.58257785285205 +QMMM: Atm 37: -2.11072325158175 6.70223481725448 -18.68189818816325 +QMMM: Atm 38: -15.33603012995946 -5.01932540898593 13.24968460082511 +QMMM: Atm 39: -7.53701805911437 25.50230569784656 15.96574322862577 +QMMM: Atm 40: 27.82710899111730 6.97729738125887 9.33368373960077 + + --------- Calculation Completed ---------- + diff --git a/tests/amber/sqm.out b/tests/amber/sqm_no_forces.out similarity index 100% rename from tests/amber/sqm.out rename to tests/amber/sqm_no_forces.out diff --git a/tests/test_amber_sqm.py b/tests/test_amber_sqm.py index 48342c4cc..dc98a3167 100644 --- a/tests/test_amber_sqm.py +++ b/tests/test_amber_sqm.py @@ -2,20 +2,50 @@ import unittest import shutil from context import dpdata -from comp_sys import CompSys, IsNoPBC +from comp_sys import CompSys, CompLabeledSys, IsNoPBC class TestAmberSqmOut(unittest.TestCase, CompSys, IsNoPBC): def setUp (self) : - self.system_1 = dpdata.System('amber/sqm.out', fmt = 'sqm/out') - self.system_1.to('deepmd/npy','tmp.deepmd.npy') - self.system_2 = dpdata.System('tmp.deepmd.npy', fmt = 'deepmd/npy') + self.system_1 = dpdata.System('amber/sqm_no_forces.out', fmt = 'sqm/out') + self.system_1.to('deepmd/npy','tmp.sqm.noforces') + self.system_2 = dpdata.System('tmp.sqm.noforces', fmt = 'deepmd/npy') self.places = 5 self.e_places = 4 self.f_places = 6 self.v_places = 6 def tearDown(self) : - if os.path.exists('tmp.deepmd.npy'): - shutil.rmtree('tmp.deepmd.npy') + if os.path.exists('tmp.sqm.noforces'): + shutil.rmtree('tmp.sqm.noforces') + +class TestAmberSqmOutLabeled(unittest.TestCase, CompLabeledSys, IsNoPBC): + def setUp(self) : + self.system_1 = dpdata.LabeledSystem('amber/sqm_forces.out', fmt = 'sqm/out') + self.system_1.to('deepmd/npy','tmp.sqm.forces') + self.system_2 = dpdata.LabeledSystem('tmp.sqm.forces', fmt = 'deepmd/npy') + self.places = 5 + self.e_places = 4 + self.f_places = 6 + self.v_places = 6 + + def tearDown(self) : + if os.path.exists('tmp.sqm.forces'): + shutil.rmtree('tmp.sqm.forces') + +class TestAmberSqmIn(unittest.TestCase): + def setUp(self): + self.system = dpdata.BondOrderSystem("amber/methane.mol", fmt='mol', type_map=['H','C']) + with open('amber/sqm.in', 'r') as f: + self.sqm_in = f.read() + + def test_sqm_in(self): + self.system.to("sqm/in", 'amber/sqm_test.in') + with open('amber/sqm_test.in', 'r') as f: + self.sqm_in_test = f.read() + self.assertEqual(self.sqm_in, self.sqm_in_test) + + def tearDown(self): + if os.path.isfile("amber/sqm_test.in"): + os.remove("amber/sqm_test.in")