diff --git a/.github/workflows/ut.yml b/.github/workflows/ut.yml index cb794053d..8c1fb2094 100644 --- a/.github/workflows/ut.yml +++ b/.github/workflows/ut.yml @@ -22,7 +22,7 @@ jobs: conda create -n dmff -y python=${{ matrix.python-version }} numpy openmm==7.7.0 pytest rdkit openbabel mdtraj ambertools -c conda-forge conda activate dmff pip install --upgrade pip - pip install jax jaxlib jaxopt networkx parmed pymbar==4.0.1 optax tqdm + pip install jax==0.4.24 jaxlib==0.4.24 jaxopt networkx parmed pymbar==4.0.1 optax tqdm - name: Install DMFF run: | source $CONDA/bin/activate dmff && pip install . diff --git a/backend/openmm_dmff_plugin/python/CMakeLists.txt b/backend/openmm_dmff_plugin/python/CMakeLists.txt index 10372bfac..99dac8e67 100644 --- a/backend/openmm_dmff_plugin/python/CMakeLists.txt +++ b/backend/openmm_dmff_plugin/python/CMakeLists.txt @@ -22,6 +22,12 @@ execute_process( OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) +execute_process( + COMMAND git describe --tags --abbrev=0 + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_VARIABLE GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) # Compile the Python module. add_custom_target(PythonInstall DEPENDS "${WRAP_FILE}") @@ -36,4 +42,3 @@ add_custom_command(TARGET PythonInstall COMMAND "${PYTHON_EXECUTABLE}" setup.py install WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) - diff --git a/backend/openmm_dmff_plugin/python/setup.py b/backend/openmm_dmff_plugin/python/setup.py index df4518358..030cb6e33 100644 --- a/backend/openmm_dmff_plugin/python/setup.py +++ b/backend/openmm_dmff_plugin/python/setup.py @@ -33,7 +33,7 @@ setup(name='OpenMMDMFFPlugin', - version="@GIT_HASH@", + version="@GIT_VERSION@".lstrip('v').replace('-', ''), ext_modules=[extension], packages=['OpenMMDMFFPlugin', "OpenMMDMFFPlugin.tests"], package_data={"OpenMMDMFFPlugin":['data/lj_fluid/*.pb', 'data/lj_fluid/variables/variables.index', 'data/lj_fluid/variables/variables.data-00000-of-00001', 'data/lj_fluid_gpu/*.pb', 'data/lj_fluid_gpu/variables/variables.index', 'data/lj_fluid_gpu/variables/variables.data-00000-of-00001', 'data/*.pdb']}, diff --git a/dmff/admp/multipole.py b/dmff/admp/multipole.py index 0a9adbfb6..5f9091170 100644 --- a/dmff/admp/multipole.py +++ b/dmff/admp/multipole.py @@ -11,6 +11,21 @@ # The important conversion matrices used in multipoles rt3 = 1.73205080757 inv_rt3 = 1.0/rt3 +rt2 = 1.41421356237 +inv_rt2 = 1.0/rt2 +rt5 = 2.2360679775 +inv_rt5 = 1.0/rt5 +rt6 = 2.44948974278 +inv_rt6 = 1.0/rt6 +rt10 = 3.16227766017 +inv_rt10 = 1.0/rt10 +rt8 = 2.82842712475 +rt12 = 3.46410161514 +rt15 = 3.87298334621 +rt24 = 4.89897948557 +inv_rt24 = 1.0/rt24 + + # the dipole conversion matrices, cart2harm and harm2cart C1_h2c = jnp.array([[0, 1, 0], [0, 0, 1], @@ -29,6 +44,29 @@ [ 0, 0, 0, 0, rt3/2], [ 0, rt3/2, 0, 0, 0], [ 0, 0, rt3/2, 0, 0]]) +# the octupole conversion matrices +C3_c2h = jnp.array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], + [ 0, 0, 0, 0, 0, 0, 0, rt3/rt2, 0, 0], + [ 0, 0, 0, 0, 0, 0, 0, 0, rt3/rt2, 0], + [ 0, 0, 0, 0, rt3/rt5, 0, -rt3/rt5, 0, 0, 0], + [ 0, 0, 0, 0, 0, 2*rt3/rt5, 0, 0, 0, 0], + [ inv_rt10, 0, -3*inv_rt10, 0, 0, 0, 0, 0, 0, 0], + [ 0, 3*inv_rt10, 0, -inv_rt10, 0, 0, 0, 0, 0, 0]]) + + +C3_h2c = jnp.array([[ 0, -rt3/rt8, 0, 0, 0, rt5/rt8, 0], + [ 0, 0, -inv_rt24, 0, 0, 0, rt5/rt8], + [ 0, -inv_rt24, 0, 0, 0, -rt5/rt8, 0], + [ 0, 0, -rt3/rt8, 0, 0, 0, -rt5/rt8], + [ -0.5, 0, 0, rt5/rt12, 0, 0, 0], + [ 0, 0, 0, 0, rt5/rt12, 0, 0], + [ -0.5, 0, 0, -rt5/rt12, 0, 0, 0], + [ 0, rt2/rt3, 0, 0, 0, 0, 0], + [ 0, 0, rt2/rt3, 0, 0, 0, 0], + [ 1, 0, 0, 0, 0, 0, 0]]) + + + @partial(vmap, in_axes=(0, None), out_axes=0) @@ -48,8 +86,8 @@ def convert_cart2harm(Theta, lmax): Q: n * (l+1)^2, stores the spherical multipoles ''' - if lmax > 2: - raise ValueError('l > 2 (beyond quadrupole) not supported') + if lmax > 3: + raise ValueError('l > 3 (beyond octupole) not supported') Q_mono = Theta[0:1] @@ -61,13 +99,21 @@ def convert_cart2harm(Theta, lmax): if lmax >= 2: quad_cart = Theta[4:10].T Q_quad = C2_c2h.dot(quad_cart).T - + # octupole + if lmax >= 3: + octu_cart = Theta[10:20].T + Q_octu = C3_c2h.dot(octu_cart).T + if lmax == 0: Q = Q_mono elif lmax == 1: Q = jnp.hstack([Q_mono, Q_dip]) - else: + elif lmax == 2: Q = jnp.hstack([Q_mono, Q_dip, Q_quad]) + elif lmax == 3: + Q = jnp.hstack([Q_mono, Q_dip, Q_quad, Q_octu]) + else: + raise ValueError('l > 3 (beyond octupole) not supported') return Q @@ -90,8 +136,8 @@ def convert_harm2cart(Q, lmax): n * n_cart, stores the cartesian multipoles ''' - if lmax > 2: - raise ValueError('l > 2 (beyond quadrupole) not supported') + if lmax > 3: + raise ValueError('l > 3 (beyond octupole) not supported') T_mono = Q[0:1] @@ -101,13 +147,20 @@ def convert_harm2cart(Q, lmax): # quadrupole if lmax >= 2: T_quad = C2_h2c.dot(Q[4:9].T).T + # octupole + if lmax >= 3: + T_octu = C3_h2c.dot(Q[9:16].T).T if lmax == 0: T = T_mono elif lmax == 1: T = jnp.hstack([T_mono, T_dip]) - else: + elif lmax == 2: T = jnp.hstack([T_mono, T_dip, T_quad]) + elif lmax == 3: + T = jnp.hstack([T_mono, T_dip, T_quad, T_octu]) + else: + raise ValueError('l > 3 (beyond octupole) not supported') return T @@ -143,8 +196,8 @@ def rot_global2local(Q_gh, localframes, lmax=2): Q_lh: n * (l+1)^2, stores the local harmonic multipole moments ''' - if lmax > 2: - raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + if lmax > 3: + raise NotImplementedError('l > 3 (beyond octupole) not supported') # monopole Q_lh_0 = Q_gh[0:1] @@ -204,12 +257,82 @@ def rot_global2local(Q_gh, localframes, lmax=2): ] ).swapaxes(0,1) Q_lh_2 = jnp.einsum('jk,k->j', C2_gl, quadrupoles) + + if lmax >= 3: + octupoles = Q_gh[9:16] + C3_gl_00 = ( -8 * xx * yy + 8 * yx * xy + 5 * zz **3 + 5 * zz) / 2 + C3_gl_01 = (rt6*zx*(5.0*zz**2-1.0))/4.0 + C3_gl_02 = (rt6*zy*(5.0*zz**2-1.0))/4.0 + C3_gl_03 = (rt15*zz*(-2.0*zy**2-zz**2+1.0))/2.0 + C3_gl_04 = rt15*zx*zy*zz + C3_gl_05 = (rt10*zx*(-4.0*zy**2-zz**2+1.0))/4.0 + C3_gl_06 = (rt10*zy*(-4.0*zy**2-3.0*zz**2+3.0))/4.0 + C3_gl_10 = (rt3*xz*(5.0*zz**2-1.0))/(2.0*rt2) + C3_gl_11 = (-10.0*xx*yy**2+15.0*xx*zz**2-xx+10.0*yx*xy*yy)/4.0 + C3_gl_12 = (10.0*xy*yz**2+15.0*xy*zz**2-11.0*xy-10.0*yy*xz*yz)/4.0 + C3_gl_13 = (rt10*(4.0*xy*yy*yz-4.0*yy**2*xz-6.0*zy**2*xz-3.0*xz*zz**2+5.0*xz))/4.0 + C3_gl_14 = rt10*(-xx*yy*yz-yx*xy*yz+2.0*yx*yy*xz+3.0*zx*zy*xz)/2.0 + C3_gl_15 = (rt15*(-2.0*xx*yy**2-4.0*xx*zy**2-xx*zz**2+3.0*xx+2.0*yx*xy*yy))/4.0 + C3_gl_16 = (rt15*(-4.0*xy*zy**2-2.0*xy*yz**2-3.0*xy*zz**2+3.0*xy+2.0*yy*xz*yz))/4.0 + C3_gl_20 = (rt3*yz*(5.0*zz**2-1.0))/(2.0*rt2) + C3_gl_21 = (10.0*yx*zy**2+15.0*yx*zz**2-11.0*yx-10.0*zx*yy*zy)/4.0 + C3_gl_22 = (5.0*yy*zz**2-yy+10.0*zy*yz*zz)/4.0 + C3_gl_23 = (rt10*(-4.0*yy*zy*zz-2.0*zy**2*yz-3.0*yz*zz**2+yz))/4.0 + C3_gl_24 = (rt10*(yx*zy*zz+zx*yy*zz+zx*zy*yz))/2.0 + C3_gl_25 = (rt15*(-2.0*yx*zy**2-yx*zz**2+yx-2.0*zx*yy*zy))/4.0 + C3_gl_26 = (rt15*(-4.0*yy*zy**2-yy*zz**2+yy-2.0*zy*yz*zz))/4.0 + C3_gl_30 = rt15*zz*(-2.0*yz**2-zz**2+1.0)/2.0 + C3_gl_31 = (rt10*(4.0*yx*yy*zy-4.0*zx*yy**2-6.0*zx*yz**2-3.0*zx*zz**2+5.0*zx))/4.0 + C3_gl_32 = (rt10*(-4.0*yy*yz*zz-2.0*zy*yz**2-3.0*zy*zz**2+zy))/4.0 + C3_gl_33 = (-4.0*xx*yy-4.0*yx*xy+12.0*yy**2*zz+6.0*zy**2*zz+6.0*yz**2*zz+3.0*zz**3-9.0*zz)/2.0 + C3_gl_34 = -6.0*yx*yy*zz-3.0*zx*zy*zz-4.0*xy*yy-2.0*xz*yz + C3_gl_35 = (rt6*(4.0*yx*yy*zy+4.0*zx*yy**2+4.0*zx*zy**2+2.0*zx*yz**2+zx*zz**2-3.0*zx))/4.0 + C3_gl_36 = (rt6*(8.0*yy**2*zy+4.0*yy*yz*zz+4.0*zy**3+2.0*zy*yz**2+3.0*zy*zz**2-5.0*zy))/4.0 + C3_gl_40 = rt15*xz*yz*zz + C3_gl_41 = (rt10*(-xx*yy*zy-yx*xy*zy+2.0*zx*xy*yy+3.0*zx*xz*yz))/2.0 + C3_gl_42 = (rt10*(xy*yz*zz+yy*xz*zz+zy*xz*yz))/2.0 + C3_gl_43 = -4.0*yx*yy-2.0*zx*zy-6.0*xy*yy*zz-3.0*xz*yz*zz + C3_gl_44 = 3.0*xx*yy*zz+3.0*yx*xy*zz-4.0*yy**2-2.0*zy**2-2.0*yz**2-zz**2+3.0 + C3_gl_45 = (rt6*(-xx*yy*zy-yx*xy*zy-2.0*zx*xy*yy-zx*xz*yz))/2.0 + C3_gl_46 = (rt6*(-4.0*xy*yy*zy-xy*yz*zz-yy*xz*zz-zy*xz*yz))/2.0 + C3_gl_50 = (rt5*xz*(-4.0*yz**2-zz**2+1.0))/(2.0*rt2) + C3_gl_51 = (rt15*(-2.0*xx*yy**2-4.0*xx*yz**2-xx*zz**2+3.0*xx+2.0*yx*xy*yy))/4.0 + C3_gl_52 = (rt15*(-2.0*xy*yz**2-xy*zz**2+xy-2.0*yy*xz*yz))/4.0 + C3_gl_53 = (rt6*(4.0*xy*yy*yz+4.0*yy**2*xz+2.0*zy**2*xz+4.0*xz*yz**2+xz*zz**2-3.0*xz))/4.0 + C3_gl_54 = (rt6*(-xx*yy*yz-yx*xy*yz-2.0*yx*yy*xz-zx*zy*xz))/2.0 + C3_gl_55 = (10.0*xx*yy**2+4.0*xx*zy**2+4.0*xx*yz**2+xx*zz**2-7.0*xx+6.0*yx*xy*yy)/4.0 + C3_gl_56 = (16.0*xy*yy**2+4.0*xy*zy**2+6.0*xy*yz**2+3.0*xy*zz**2-7.0*xy+6.0*yy*xz*yz)/4.0 + C3_gl_60 = (rt5*yz*(-4.0*yz**2-3.0*zz**2+3.0))/(2.0*rt2) + C3_gl_61 = (rt15*(-2.0*yx*zy**2-4.0*yx*yz**2-3.0*yx*zz**2+3.0*yx+2.0*zx*yy*zy))/4.0 + C3_gl_62 = (rt15*(-4.0*yy*yz**2-yy*zz**2+yy-2.0*zy*yz*zz))/4.0 + C3_gl_63 = (rt6*(8.0*yy**2*yz+4.0*yy*zy*zz+2.0*zy**2*yz+4.0*yz**3+3.0*yz*zz**2-5.0*yz))/4.0 + C3_gl_64 = (rt6*(-4.0*yx*yy*yz-yx*zy*zz-zx*yy*zz-zx*zy*yz))/2.0 + C3_gl_65 = (16.0*yx*yy**2+6.0*yx*zy**2+4.0*yx*yz**2+3.0*yx*zz**2-7.0*yx+6.0*zx*yy*zy)/4.0 + C3_gl_66 = (16.0*yy**3+12.0*yy*zy**2+12.0*yy*yz**2+3.0*yy*zz**2-15.0*yy+6.0*zy*yz*zz)/4.0 + + # rotate + C3_gl = jnp.array( + [ + [C3_gl_00, C3_gl_10, C3_gl_20, C3_gl_30, C3_gl_40, C3_gl_50, C3_gl_60], + [C3_gl_01, C3_gl_11, C3_gl_21, C3_gl_31, C3_gl_41, C3_gl_51, C3_gl_61], + [C3_gl_02, C3_gl_12, C3_gl_22, C3_gl_32, C3_gl_42, C3_gl_52, C3_gl_62], + [C3_gl_03, C3_gl_13, C3_gl_23, C3_gl_33, C3_gl_43, C3_gl_53, C3_gl_63], + [C3_gl_04, C3_gl_14, C3_gl_24, C3_gl_34, C3_gl_44, C3_gl_54, C3_gl_64], + [C3_gl_05, C3_gl_15, C3_gl_25, C3_gl_35, C3_gl_45, C3_gl_55, C3_gl_65], + [C3_gl_06, C3_gl_16, C3_gl_26, C3_gl_36, C3_gl_46, C3_gl_56, C3_gl_66] + ] + ).swapaxes(0,1) + + Q_lh_3 = jnp.einsum('jk,k->j', C3_gl, octupoles) + if lmax == 0: Q_lh = Q_lh_0 elif lmax == 1: Q_lh = jnp.hstack([Q_lh_0, Q_lh_1]) elif lmax == 2: Q_lh = jnp.hstack([Q_lh_0, Q_lh_1, Q_lh_2]) + else: + Q_lh = jnp.hstack([Q_lh_0, Q_lh_1, Q_lh_2, Q_lh_3]) return Q_lh diff --git a/dmff/admp/pme.py b/dmff/admp/pme.py index 878ac66c0..4efa78bc6 100755 --- a/dmff/admp/pme.py +++ b/dmff/admp/pme.py @@ -708,7 +708,35 @@ def calc_e_perm(dr, mscales, kappa, lmax=2): qq_m1 = 0 qq_m2 = 0 - return cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2 + if lmax >= 3: + ## C-O + co = rInvVec[4] * (-mscales - bVec[3] - (4/15)*alphaRVec[5]*X) + ## D-O + do_m0 = -4.0 * rInvVec[5] * (mscales + bVec[4] + (2/15)*alphaRVec[7]*X) + do_m1 = jnp.sqrt(6) * (mscales + bVec[4]) * rInvVec[5] + ## Q-O + qo_m0 = rInvVec[6] * (-10.0 * (mscales + bVec[4]) - (8/45) * (3.0 + 2.0*alphaRVec[2])*alphaRVec[7]*X) + qo_m1 = 5.0 * jnp.sqrt(2) * rInvVec[6] * (mscales + bVec[4] + (8/75)*alphaRVec[7]*X) + qo_m2 = -jnp.sqrt(5) * (mscales + bVec[4]) * rInvVec[6] + ## O-O + oo_m0 = rInvVec[7] * (-20.0*(mscales+bVec[5]) - (8/1575)*(15.0+28.0*alphaRVec[2] + 28.0*alphaRVec[4])*alphaRVec[7]*X) + oo_m1 = rInvVec[7] * (15.0*(mscales+bVec[5]) + (8/525)*(-5.0 + 28.0*alphaRVec[2])*alphaRVec[7]*X) + oo_m2 = rInvVec[7] * (-6.0*(mscales+bVec[5]) - (8/105)*alphaRVec[7]*X) + oo_m3 = rInvVec[7] * ((mscales+bVec[5]) - (8/105)*alphaRVec[7]*X) + else: + co = 0 + do_m0 = 0 + do_m1 = 0 + qo_m0 = 0 + qo_m1 = 0 + qo_m2 = 0 + oo_m0 = 0 + oo_m1 = 0 + oo_m2 = 0 + oo_m3 = 0 + + + return cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2, co, do_m0, do_m1, qo_m0, qo_m1, qo_m2, oo_m0, oo_m1, oo_m2, oo_m3 @jit_condition(static_argnums=()) @@ -817,6 +845,9 @@ def calc_e_ind(dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax=2): thole_d1 = 1.0 - expau * (1.0 + au + 0.5 * au2) thole_q0 = 1.0 - expau * (1.0 + au + 0.5 * au2 + au3 / 6.0 + au4 / 18.0) thole_q1 = 1.0 - expau * (1.0 + au + 0.5 * au2 + au3 / 6.0) + thole_o0 = 1.0 - expau*(1.0 + au + 0.5*au2 + au3/6.0 + au4/24.0 + au5/120.0) + thole_o1 = 1.0 - expau*(1.0 + au + 0.5*au2 + au3/6.0 + au4/30.0) + # copied from calc_e_perm # be aware of unit and dimension !! rInv = 1 / dr @@ -869,6 +900,24 @@ def calc_e_ind(dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax=2): else: udq_m0 = 0.0 udq_m1 = 0.0 + + if lmax >= 3: + ## Uind-O + udo_m0 = ( + -8.0 * + rInvVec[5] * + (pscales * thole_o0 + bVec[4] + (2/15)*alphaRVec[7]*X) + ) + udo_m1 = ( + 2.0 * + jnp.sqrt(6) * + (pscales * thole_o1+bVec[4]) * + rInvVec[5] + ) + else: + udo_m0 = 0.0 + udo_m1 = 0.0 + ## Uind-Uind udud_m0 = ( -2.0 @@ -877,7 +926,7 @@ def calc_e_ind(dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax=2): * (3.0 * (dscales * thole_d0 + bVec[3]) + alphaRVec[3] * X) ) udud_m1 = rInvVec[3] * (dscales * thole_d1 + bVec[3] - 2.0 / 3.0 * alphaRVec[3] * X) - return cud, dud_m0, dud_m1, udq_m0, udq_m1, udud_m0, udud_m1 + return cud, dud_m0, dud_m1, udq_m0, udq_m1, udo_m0, udo_m1, udud_m0, udud_m1 @partial(vmap, in_axes=(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, None, None, None), out_axes=0) @@ -936,11 +985,11 @@ def pme_real_kernel( energy: float, realspace interaction energy between the sites """ - cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2 = calc_e_perm( + cc, cd, dd_m0, dd_m1, cq, dq_m0, dq_m1, qq_m0, qq_m1, qq_m2, co, do_m0, do_m1, qo_m0, qo_m1, qo_m2, oo_m0, oo_m1, oo_m2, oo_m3 = calc_e_perm( dr, mscales, kappa, lmax ) if lpol: - cud, dud_m0, dud_m1, udq_m0, udq_m1, udud_m0, udud_m1 = calc_e_ind( + cud, dud_m0, dud_m1, udq_m0, udq_m1, udo_m0, udo_m1, udud_m0, udud_m1 = calc_e_ind( dr, thole1, thole2, dmp, pscales, dscales, kappa, lmax ) @@ -1017,6 +1066,83 @@ def pme_real_kernel( Vij5 -= udq_m1 * qiUindI[1] Vij6 -= udq_m1 * qiUindI[2] + if lmax >= 3: + # C-O + Vij0 = Vij0 + co*qiQI[9] + Vji9 = co*qiQJ[0] + Vij9 = -co*qiQI[0] + Vji0 = Vji0 - co*qiQJ[9] + # D-O m0 + Vij1 += do_m0*qiQI[9] + Vji9 += do_m0*qiQJ[1] + # O-D m0 + Vij9 += do_m0*qiQI[1] + Vji1 += do_m0*qiQJ[9] + # D-O m1 + Vij2 = Vij2 + do_m1*qiQI[10] + Vji10 = do_m1*qiQJ[2] + Vij3 += do_m1*qiQI[11] + Vji11 = do_m1*qiQJ[3] + # O-D m1 + Vij10 = do_m1*qiQI[2] + Vji2 += do_m1*qiQJ[10] + Vij11 = do_m1*qiQI[3] + Vji3 += do_m1*qiQJ[11] + # Q-O m0 + Vij4 += qo_m0*qiQI[9] + Vji9 += qo_m0*qiQJ[4] + # O-Q m0 + Vij9 -= qo_m0*qiQI[4] + Vji4 -= qo_m0*qiQJ[9] + # Q-O m1 + Vij5 += qo_m1*qiQI[10] + Vji10 += qo_m1*qiQJ[5] + Vij6 += qo_m1*qiQI[11] + Vji11 += qo_m1*qiQJ[6] + # O-Q m1 + Vij10 -= qo_m1*qiQI[5] + Vji5 -= qo_m1*qiQJ[10] + Vij11 -= qo_m1*qiQI[6] + Vji6 -= qo_m1*qiQJ[11] + # Q-O m2 + Vij7 += qo_m2*qiQI[12] + Vji12 = qo_m2*qiQJ[7] + Vij8 += qo_m2*qiQI[13] + Vji13 = qo_m2*qiQJ[8] + # O-Q m2 + Vij12 = -qo_m2*qiQI[7] + Vji7 -= qo_m2*qiQJ[12] + Vij13 = -qo_m2*qiQI[8] + Vji8 -= qo_m2*qiQJ[13] + # O-O m0 + Vij9 += oo_m0*qiQI[9] + Vji9 += oo_m0*qiQJ[9] + # O-O m1 + Vij10 += oo_m1*qiQI[10] + Vji10 += oo_m1*qiQJ[10] + Vij11 += oo_m1*qiQI[11] + Vji11 += oo_m1*qiQJ[11] + # O-O m2 + Vij12 += oo_m2*qiQI[12] + Vji12 += oo_m2*qiQJ[12] + Vij13 += oo_m2*qiQI[13] + Vji13 += oo_m2*qiQJ[13] + # O-O m3 + Vij14 = oo_m3*qiQI[14] + Vji14 = oo_m3*qiQJ[14] + Vij15 = oo_m3*qiQI[15] + Vji15 = oo_m3*qiQJ[15] + if lpol: + # m = 0 + Vji9 += udo_m0*qiUindJ[0] + Vij9 += udo_m0*qiUindI[0] + # m = 1 + Vji10 += udo_m1*qiUindJ[1] + Vji11 += udo_m1*qiUindJ[2] + + Vij10 += udo_m1*qiUindI[1] + Vij11 += udo_m1*qiUindI[2] + # Uind - Uind if lpol: Vij1dd = udud_m0 * qiUindI[0] @@ -1037,6 +1163,9 @@ def pme_real_kernel( elif lmax == 2: Vij = jnp.stack((Vij0, Vij1, Vij2, Vij3, Vij4, Vij5, Vij6, Vij7, Vij8)) Vji = jnp.stack((Vji0, Vji1, Vji2, Vji3, Vji4, Vji5, Vji6, Vji7, Vji8)) + elif lmax == 3: + Vij = jnp.stack((Vij0, Vij1, Vij2, Vij3, Vij4, Vij5, Vij6, Vij7, Vij8, Vij9, Vij10, Vij11, Vij12, Vij13, Vij14, Vij15)) + Vji = jnp.stack((Vji0, Vji1, Vji2, Vji3, Vji4, Vji5, Vji6, Vji7, Vji8, Vji9, Vji10, Vji11, Vji12, Vji13, Vji14, Vji15)) else: raise ValueError(f"Invalid lmax {lmax}. Valid values are 0, 1, 2") @@ -1207,17 +1336,25 @@ def pme_self(Q_h, kappa, lmax=2): 2, ] * 5 + + [ + 3, + ] + * 7 )[:n_harms] l_fac2 = np.array( [1] + [ - 3, + 3 * 1, ] * 3 + [ - 15, + 5 * 3 * 1, ] * 5 + + [ + 7 * 5 * 3 * 1, + ] + * 7 )[:n_harms] factor = kappa / np.sqrt(np.pi) * (2 * kappa**2) ** l_list / l_fac2 return -jnp.sum(factor[np.newaxis] * Q_h**2) * DIELECTRIC diff --git a/dmff/admp/recip.py b/dmff/admp/recip.py index 7ae4e077d..05c8364e9 100755 --- a/dmff/admp/recip.py +++ b/dmff/admp/recip.py @@ -176,6 +176,37 @@ def bspline_prime2(u, order=6): return jnp.sum(jnp.stack([condition * output for condition, output in zip(conditions, outputs)]), axis=0) + def bspline_prime3(u, order=6): + """ + Computes second derivative of the cardinal B-spline function + """ + if order == 6: + + u2 = u ** 2 + u_less_1 = u - 1 + # u_less_2 = u - 2 + + conditions = [ + jnp.logical_and(u >= 0., u < 1.), + jnp.logical_and(u >= 1., u < 2.), + jnp.logical_and(u >= 2., u < 3.), + jnp.logical_and(u >= 3., u < 4.), + jnp.logical_and(u >= 4., u < 5.), + jnp.logical_and(u >= 5., u < 6.) + ] + + outputs = [ + u2 / 2, + u2 / 2 - 3 * (u_less_1) ** 2, + 5 * u2 - 24 * u + 27, + -5 * u2 + 36 * u - 63, + 5 * u2 / 2 - 24 * u + 57, + -u2 / 2 + 6 * u - 18 + ] + + return jnp.sum(jnp.stack([condition * output for condition, output in zip(conditions, outputs)]), + axis=0) + def theta_eval(u, M_u): """ Evaluates the value of theta given 3D u values at ... points @@ -249,6 +280,72 @@ def theta2prime_eval(u, Nj_Aji_star, M_u, Mprime_u, M2prime_u): # Notice that u = m_u0 - R_in_m_basis + 6/2 # therefore the Jacobian du_j/dx_i = - Nj_Aji_star return jnp.einsum("im,jn,kmn->kij", -Nj_Aji_star, -Nj_Aji_star, div) + + def theta3prime_eval(u, Nj_Aji_star, M_u, Mprime_u, M2prime_u, M3prime_u): + """ + compute the 3 x 3 x 3 third derivatives of theta with respect to xyz + + Input: + u + Nj_Aji_star + M_u + Mprime_u + M2prime_u + M3prime_u + Output: + N_A * 3 * 3 * 3 + """ + + div_000 = M3prime_u[:, 0] * M_u[:, 1] * M_u[:, 2] + div_001 = M2prime_u[:, 0] * Mprime_u[:, 1] * M_u[:, 2] + div_002 = M2prime_u[:, 0] * M_u[:, 1] * Mprime_u[:, 2] + div_010 = div_001 + div_011 = Mprime_u[:, 0] * M2prime_u[:, 1] * M_u[:, 2] + div_012 = Mprime_u[:, 0] * Mprime_u[:, 1] * Mprime_u[:, 2] + div_020 = div_002 + div_021 = div_012 + div_022 = Mprime_u[:, 0] * M_u[:, 1] * M2prime_u[:, 2] + + div_100 = div_010 + div_101 = div_011 + div_102 = div_012 + div_110 = div_101 + div_111 = M_u[:, 0] * M3prime_u[:, 1] * M_u[:, 2] + div_112 = M_u[:, 0] * M2prime_u[:, 1] * Mprime_u[:, 2] + div_120 = div_102 + div_121 = div_112 + div_122 = M_u[:, 0] * Mprime_u[:, 1] * M2prime_u[:, 2] + + div_200 = div_020 + div_201 = div_021 + div_202 = div_022 + div_210 = div_012 + div_211 = div_121 + div_212 = div_122 + div_220 = div_022 + div_221 = div_122 + div_222 = M_u[:, 0] * M_u[:, 1] * M3prime_u[:, 2] + + div = jnp.array([ + [ + [div_000, div_001, div_002], + [div_010, div_011, div_012], + [div_020, div_021, div_022] + ], + [ + [div_100, div_101, div_102], + [div_110, div_111, div_112], + [div_120, div_121, div_122] + ], + [ + [div_200, div_201, div_202], + [div_210, div_211, div_212], + [div_220, div_221, div_222] + ] + ] + ).swapaxes(0, 3).swapaxes(1, 2).swapaxes(2, 3) + + return jnp.einsum("im,jn,ko,amno->aijk", -Nj_Aji_star, -Nj_Aji_star, -Nj_Aji_star, div) def sph_harmonics_GO(u0, Nj_Aji_star): @@ -310,8 +407,32 @@ def sph_harmonics_GO(u0, Nj_Aji_star): ) if lmax == 2: return harmonics_2.reshape(N_a, n_mesh, n_harm) - else: - raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + #else: + # raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + + # Octupole + M3prime_u = bspline_prime3(u) + theta3prime = theta3prime_eval(u, Nj_Aji_star, M_u, Mprime_u, M2prime_u, M3prime_u) + rt6 = jnp.sqrt(6) + rt15 = jnp.sqrt(15) + rt10 = jnp.sqrt(10) + + harmonics_3 = jnp.hstack( + [harmonics_2, + jnp.stack([ + (5 * theta3prime[:, 2, 2, 2] - 3 * jnp.trace(theta3prime[:, 2], axis1 = 1, axis2 = 2)) / 2, + rt6 * (5 * theta3prime[:, 0, 2, 2] - jnp.trace(theta3prime[:, 0], axis1 = 1, axis2 = 2)) / 4, + rt6 * (5 * theta3prime[:, 1, 2, 2] - jnp.trace(theta3prime[:, 1], axis1 = 1, axis2 = 2)) / 4, + rt15 * (theta3prime[:, 2, 0, 0] - theta3prime[:, 2, 1, 1]) / 2, + rt15 * theta3prime[:, 0, 1, 2], + rt10 * (theta3prime[:, 0, 0, 0] - 3 * theta3prime[:, 0, 1, 1]) / 4, + rt10 * (3 * theta3prime[:, 0, 0, 1] - theta3prime[:, 1, 1, 1]) / 4 + ], axis=1) + ] + ) + + if lmax == 3: + return harmonics_3.reshape(N_a, n_mesh, n_harm) def Q_m_peratom(Q, sph_harms): @@ -333,8 +454,8 @@ def Q_m_peratom(Q, sph_harms): N_a = sph_harms.shape[0] - if lmax > 2: - raise NotImplementedError('l > 2 (beyond quadrupole) not supported') + if lmax > 3: + raise NotImplementedError('l > 3 (beyond octupole) not supported') Q_dbf = Q[:, 0:1] @@ -342,6 +463,8 @@ def Q_m_peratom(Q, sph_harms): Q_dbf = jnp.hstack([Q_dbf, Q[:,1:4]]) if lmax >= 2: Q_dbf = jnp.hstack([Q_dbf, Q[:,4:9]/3]) + if lmax >= 3: + Q_dbf = jnp.hstack([Q_dbf, Q[:,9:16]/15]) Q_m_pera = jnp.sum(Q_dbf[:,jnp.newaxis,:]* sph_harms, axis=2) diff --git a/dmff/generators/admp.py b/dmff/generators/admp.py index e28576688..29ab2cefa 100644 --- a/dmff/generators/admp.py +++ b/dmff/generators/admp.py @@ -934,7 +934,7 @@ def __init__(self, ffinfo: dict, paramset: ParamSet): for node in self.ffinfo["Forces"][self.name]["node"] if node["name"] in ["Multipole", "Atom"] ] - c0, dX, dY, dZ, qXX, qYY, qZZ, qXY, qXZ, qYZ = ( + c0, dX, dY, dZ, qXX, qYY, qZZ, qXY, qXZ, qYZ, oXXX, oXXY, oXYY, oYYY, oXXZ, oXYZ, oYYZ, oXZZ, oYZZ, oZZZ = ( [], [], [], @@ -945,6 +945,16 @@ def __init__(self, ffinfo: dict, paramset: ParamSet): [], [], [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [] ) kxs, kys, kzs = [], [], [] multipole_masks = [] @@ -987,6 +997,29 @@ def __init__(self, ffinfo: dict, paramset: ParamSet): qXY.append(0.0) qXZ.append(0.0) qYZ.append(0.0) + if self.lmax >= 3: + oXXX.append(float(attribs["oXXX"])) + oXXY.append(float(attribs["oXXY"])) + oXYY.append(float(attribs["oXYY"])) + oYYY.append(float(attribs["oYYY"])) + oXXZ.append(float(attribs["oXXZ"])) + oXYZ.append(float(attribs["oXYZ"])) + oYYZ.append(float(attribs["oYYZ"])) + oXZZ.append(float(attribs["oXZZ"])) + oYZZ.append(float(attribs["oYZZ"])) + oZZZ.append(float(attribs["oZZZ"])) + else: + oXXX.append(0.0) + oXXY.append(0.0) + oXYY.append(0.0) + oYYY.append(0.0) + oXXZ.append(0.0) + oXYZ.append(0.0) + oYYZ.append(0.0) + oXZZ.append(0.0) + oYZZ.append(0.0) + oZZZ.append(0.0) + mask = 1.0 if "mask" in attribs and attribs["mask"].upper() == "TRUE": mask = 0.0 @@ -1044,6 +1077,8 @@ def __init__(self, ffinfo: dict, paramset: ParamSet): n_mtps = 4 elif self.lmax == 2: n_mtps = 10 + elif self.lmax == 3: + n_mtps = 20 Q = np.zeros((n_atoms, n_mtps)) # TDDO: unit conversion @@ -1061,6 +1096,19 @@ def __init__(self, ffinfo: dict, paramset: ParamSet): Q[:, 8] = qXZ Q[:, 9] = qYZ Q[:, 4:10] *= 300 + if self.lmax >= 3: + Q[:, 10] = oXXX + Q[:, 11] = oXXY + Q[:, 12] = oXYY + Q[:, 13] = oYYY + Q[:, 14] = oXXZ + Q[:, 15] = oXYZ + Q[:, 16] = oYYZ + Q[:, 17] = oXZZ + Q[:, 18] = oYZZ + Q[:, 19] = oZZZ + # TO DO: To be decided + Q[:, 10:20] *= 15000 # add all differentiable params to self.params Q_local = convert_cart2harm(jnp.array(Q), self.lmax) @@ -1090,6 +1138,18 @@ def overwrite(self, paramset): node["attrib"]["qXY"] = Q_global[n_multipole, 7] / 300.0 node["attrib"]["qXZ"] = Q_global[n_multipole, 8] / 300.0 node["attrib"]["qYZ"] = Q_global[n_multipole, 9] / 300.0 + if self.lmax >= 3: + node["attrib"]["oXXX"] = Q_global[n_multipole, 10] / 15000.0 + node["attrib"]["oXXY"] = Q_global[n_multipole, 11] / 15000.0 + node["attrib"]["oXYY"] = Q_global[n_multipole, 12] / 15000.0 + node["attrib"]["oYYY"] = Q_global[n_multipole, 13] / 15000.0 + node["attrib"]["oXXZ"] = Q_global[n_multipole, 14] / 15000.0 + node["attrib"]["oXYZ"] = Q_global[n_multipole, 15] / 15000.0 + node["attrib"]["oYYZ"] = Q_global[n_multipole, 16] / 15000.0 + node["attrib"]["oXZZ"] = Q_global[n_multipole, 17] / 15000.0 + node["attrib"]["oYZZ"] = Q_global[n_multipole, 18] / 15000.0 + node["attrib"]["oZZZ"] = Q_global[n_multipole, 19] / 15000.0 + if q_local_masks[n_multipole] < 0.999: node["mask"] = "true" n_multipole += 1 diff --git a/package/docker/develop_gpu.dockerfile b/package/docker/develop_gpu.dockerfile new file mode 100644 index 000000000..d9c8a8c0b --- /dev/null +++ b/package/docker/develop_gpu.dockerfile @@ -0,0 +1,45 @@ +FROM ubuntu:22.04 +SHELL ["/bin/bash", "-c"] +RUN apt-get update && apt-get install -y wget cmake git g++ + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ + bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda && \ + /opt/miniconda/bin/conda init bash && \ + rm -rf Miniconda3-latest-Linux-x86_64.sh + +RUN eval "$(/opt/miniconda/bin/conda shell.bash hook)" && \ + export CONDA_OVERRIDE_CUDA="12.0" && \ + conda create -y -n dmff_omm -c conda-forge python=3.11 openmm libtensorflow_cc tensorflow-gpu swig numpy && \ + conda activate dmff_omm && \ + TF_VERSION=$(python -c 'import tensorflow as tf; print(tf.__version__)') && \ + wget https://github.com/tensorflow/tensorflow/archive/refs/tags/v$TF_VERSION.tar.gz && \ + tar -xf v$TF_VERSION.tar.gz && \ + mkdir -p ${CONDA_PREFIX}/include/tensorflow/c && \ + cp -r tensorflow-$TF_VERSION/tensorflow/c ${CONDA_PREFIX}/include/tensorflow && \ + rm -r tensorflow-$TF_VERSION v$TF_VERSION.tar.gz + +# install TF C API for cppflow: https://www.tensorflow.org/install/lang_c +# wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-$TF_VERSION.tar.gz +# tar -xf libtensorflow-gpu-linux-x86_64-$TF_VERSION.tar.gz -C /usr/local + +RUN eval "$(/opt/miniconda/bin/conda shell.bash hook)" && \ + conda activate dmff_omm && \ + git clone https://github.com/caic99/DMFF.git && \ + git clone https://github.com/serizba/cppflow.git && \ + cd cppflow && \ + git apply ../DMFF/backend/openmm_dmff_plugin/tests/cppflow_empty_constructor.patch && \ + cp -r include/cppflow ${CONDA_PREFIX}/include && \ + cd .. && \ + rm -r cppflow && \ + export OPENMM_INSTALLED_DIR=$CONDA_PREFIX && \ + export CPPFLOW_INSTALLED_DIR=$CONDA_PREFIX && \ + export LIBTENSORFLOW_INSTALLED_DIR=$CONDA_PREFIX && \ + cd DMFF/backend/openmm_dmff_plugin/ && \ + mkdir build && cd build && \ + cmake .. -DOPENMM_DIR=${OPENMM_INSTALLED_DIR} \ + -DCPPFLOW_DIR=${CPPFLOW_INSTALLED_DIR} \ + -DTENSORFLOW_DIR=${LIBTENSORFLOW_INSTALLED_DIR} && \ + make -j && make install && \ + make -j PythonInstall && \ + cd / && rm -r DMFF + # python -m OpenMMDMFFPlugin.tests.test_dmff_plugin_nve -n 100 && \ diff --git a/tests/data/admp_octupole.xml b/tests/data/admp_octupole.xml new file mode 100644 index 000000000..32d6c3a3a --- /dev/null +++ b/tests/data/admp_octupole.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/ala5_dmff.xml b/tests/data/ala5_dmff.xml new file mode 100644 index 000000000..7d8a329e6 --- /dev/null +++ b/tests/data/ala5_dmff.xml @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/ala5_mpid.pdb b/tests/data/ala5_mpid.pdb new file mode 100644 index 000000000..a878bffac --- /dev/null +++ b/tests/data/ala5_mpid.pdb @@ -0,0 +1,84 @@ +REMARK 1 File created by GaussView 6.0.16 +CRYST1 32.000 32.000 32.000 90.00 90.00 90.00 P 1 1 +HETATM 1 N NALAA 1 2.081 -6.518 -1.800 N +HETATM 2 HT1 NALAA 1 2.807 -5.899 -1.290 H +HETATM 3 HT2 NALAA 1 1.378 -5.902 -2.252 H +HETATM 4 HT3 NALAA 1 2.587 -7.070 -2.493 H +HETATM 5 CA NALAA 1 1.439 -7.501 -0.848 C +HETATM 6 HA NALAA 1 1.148 -6.947 -0.007 H +HETATM 7 C NALAA 1 2.256 -8.772 -0.537 C +HETATM 8 O NALAA 1 2.691 -8.967 0.627 O +HETATM 9 CB NALAA 1 0.205 -7.998 -1.600 C +HETATM 10 HB1 NALAA 1 -0.629 -7.248 -1.484 H +HETATM 11 HB2 NALAA 1 0.353 -8.252 -2.718 H +HETATM 12 HB3 NALAA 1 -0.147 -8.989 -1.152 H +ATOM 13 N ALA A 2 2.292 -9.745 -1.480 N +ATOM 14 HN ALA A 2 1.821 -9.560 -2.371 H +ATOM 15 CA ALA A 2 2.752 -11.081 -1.318 C +ATOM 16 HA ALA A 2 2.703 -11.507 -0.291 H +ATOM 17 C ALA A 2 4.205 -11.288 -1.784 C +ATOM 18 O ALA A 2 4.745 -12.408 -1.691 O +ATOM 19 CB ALA A 2 1.824 -11.981 -2.192 C +ATOM 20 HB1 ALA A 2 2.065 -13.041 -2.046 H +ATOM 21 HB2 ALA A 2 0.730 -11.725 -1.877 H +ATOM 22 HB3 ALA A 2 1.929 -11.843 -3.247 H +ATOM 23 N ALA A 3 4.765 -10.243 -2.429 N +ATOM 24 HN ALA A 3 4.200 -9.468 -2.655 H +ATOM 25 CA ALA A 3 6.102 -10.313 -3.009 C +ATOM 26 HA ALA A 3 6.066 -11.083 -3.742 H +ATOM 27 C ALA A 3 7.251 -10.793 -2.047 C +ATOM 28 O ALA A 3 7.259 -10.436 -0.882 O +ATOM 29 CB ALA A 3 6.507 -8.960 -3.589 C +ATOM 30 HB1 ALA A 3 6.051 -8.716 -4.581 H +ATOM 31 HB2 ALA A 3 6.296 -8.189 -2.760 H +ATOM 32 HB3 ALA A 3 7.539 -8.829 -3.913 H +ATOM 33 N ALA A 4 8.275 -11.677 -2.490 N +ATOM 34 HN ALA A 4 8.299 -11.949 -3.430 H +ATOM 35 CA ALA A 4 9.562 -11.904 -1.857 C +ATOM 36 HA ALA A 4 9.221 -12.265 -0.915 H +ATOM 37 C ALA A 4 10.368 -10.605 -1.774 C +ATOM 38 O ALA A 4 10.119 -9.704 -2.585 O +ATOM 39 CB ALA A 4 10.328 -13.006 -2.635 C +ATOM 40 HB1 ALA A 4 11.273 -13.332 -2.274 H +ATOM 41 HB2 ALA A 4 9.851 -14.057 -2.684 H +ATOM 42 HB3 ALA A 4 10.508 -12.729 -3.672 H +HETATM 43 N UALAA 5 11.173 -10.507 -0.677 N +HETATM 44 HN UALAA 5 11.315 -11.245 -0.015 H +HETATM 45 CA UALAA 5 11.938 -9.409 -0.255 C +HETATM 46 HA UALAA 5 11.287 -8.528 -0.432 H +HETATM 47 C UALAA 5 13.128 -9.096 -1.312 C +HETATM 48 OT1 UALAA 5 13.759 -9.889 -1.996 O +HETATM 49 OT2 UALAA 5 13.526 -7.741 -1.332 O +HETATM 50 HT UALAA 5 14.395 -7.677 -1.822 H +HETATM 51 CB UALAA 5 12.406 -9.544 1.199 C +HETATM 52 HB1 UALAA 5 13.031 -10.375 1.390 H +HETATM 53 HB2 UALAA 5 12.992 -8.689 1.548 H +HETATM 54 HB3 UALAA 5 11.571 -9.636 1.853 H +TER +END +CONECT 1 5 2 3 4 +CONECT 2 1 +CONECT 3 1 +CONECT 4 1 +CONECT 5 1 9 7 6 +CONECT 6 5 +CONECT 7 5 13 8 +CONECT 8 7 +CONECT 9 5 10 11 12 +CONECT 10 9 +CONECT 11 9 +CONECT 12 9 +CONECT 13 7 +CONECT 37 43 +CONECT 43 37 44 45 +CONECT 44 43 +CONECT 45 43 47 46 51 +CONECT 46 45 +CONECT 47 45 48 49 +CONECT 48 47 +CONECT 49 47 50 +CONECT 50 49 +CONECT 51 45 52 53 54 +CONECT 52 51 +CONECT 53 51 +CONECT 54 51 diff --git a/tests/data/water_216.pdb b/tests/data/water_216.pdb new file mode 100644 index 000000000..dd740ad59 --- /dev/null +++ b/tests/data/water_216.pdb @@ -0,0 +1,654 @@ +REMARK MD SIMULATION OF A BOX OF 216 WATER MOLECULES +REMARK DATE: 9/ 8/19 14:31:47 CREATED BY USER: tanqz +CRYST1 20.000 20.000 20.000 90.00 90.00 90.00 P 1 1 +MODEL 1 +ATOM 1 O HOH A 1 -7.52046 6.05712 6.61129 1.00 0.00 +ATOM 2 H1 HOH A 1 -7.75049 5.88509 5.65343 1.00 0.00 +ATOM 3 H2 HOH A 1 -8.31964 5.87452 7.18399 1.00 0.00 +ATOM 4 O HOH A 2 -5.54421-8.59666-1.56854 1.00 0.00 +ATOM 5 H1 HOH A 2 -5.11828-7.76634-1.92790 1.00 0.00 +ATOM 6 H2 HOH A 2 -5.24150-9.38511-2.10399 1.00 0.00 +ATOM 7 O HOH A 3 0.88174-0.84642 1.94726 1.00 0.00 +ATOM 8 H1 HOH A 3 1.38376-0.88897 2.81107 1.00 0.00 +ATOM 9 H2 HOH A 3 0.01546-0.36722 2.08846 1.00 0.00 +ATOM 10 O HOH A 4 8.12822-3.03372-6.57392 1.00 0.00 +ATOM 11 H1 HOH A 4 7.49662-2.41529-7.04149 1.00 0.00 +ATOM 12 H2 HOH A 4 9.04680-2.63853-6.57919 1.00 0.00 +ATOM 13 O HOH A 5 -1.31137 0.85523-5.37630 1.00 0.00 +ATOM 14 H1 HOH A 5 -2.25979 0.96116-5.07752 1.00 0.00 +ATOM 15 H2 HOH A 5 -1.29029 0.38294-6.25749 1.00 0.00 +ATOM 16 O HOH A 6 -8.17321-9.28222-4.31165 1.00 0.00 +ATOM 17 H1 HOH A 6 -8.10259-8.77409-5.17003 1.00 0.00 +ATOM 18 H2 HOH A 6 -8.29659-8.64125-3.55406 1.00 0.00 +ATOM 19 O HOH A 7 0.68175-8.69146 4.20036 1.00 0.00 +ATOM 20 H1 HOH A 7 -0.11255-8.42455 3.65462 1.00 0.00 +ATOM 21 H2 HOH A 7 0.55359-8.38986 5.14515 1.00 0.00 +ATOM 22 O HOH A 8 -3.91599 1.09113-4.57780 1.00 0.00 +ATOM 23 H1 HOH A 8 -4.60972 1.15897-5.29484 1.00 0.00 +ATOM 24 H2 HOH A 8 -4.12530 1.74285-3.84879 1.00 0.00 +ATOM 25 O HOH A 9 -3.95962 8.12743-2.97360 1.00 0.00 +ATOM 26 H1 HOH A 9 -3.99835 8.00039-3.96474 1.00 0.00 +ATOM 27 H2 HOH A 9 -3.16714 8.69103-2.74052 1.00 0.00 +ATOM 28 O HOH A 10 -6.33985-2.19159 1.50341 1.00 0.00 +ATOM 29 H1 HOH A 10 -6.36647-2.57385 2.42708 1.00 0.00 +ATOM 30 H2 HOH A 10 -5.42513-1.83288 1.31736 1.00 0.00 +ATOM 31 O HOH A 11 -5.93964-5.48636 8.52134 1.00 0.00 +ATOM 32 H1 HOH A 11 -6.60419-5.01983 9.10505 1.00 0.00 +ATOM 33 H2 HOH A 11 -5.17032-4.87460 8.33724 1.00 0.00 +ATOM 34 O HOH A 12 -3.43787 9.09437 5.67311 1.00 0.00 +ATOM 35 H1 HOH A 12 -3.37299 8.61367 6.54759 1.00 0.00 +ATOM 36 H2 HOH A 12 -4.01477 9.90417 5.77991 1.00 0.00 +ATOM 37 O HOH A 13 6.36080 5.64013 7.63378 1.00 0.00 +ATOM 38 H1 HOH A 13 5.47867 5.25403 7.90356 1.00 0.00 +ATOM 39 H2 HOH A 13 6.40455 5.70695 6.63697 1.00 0.00 +ATOM 40 O HOH A 14 9.09513 5.34108 8.39969 1.00 0.00 +ATOM 41 H1 HOH A 14 9.20380 6.04025 9.10634 1.00 0.00 +ATOM 42 H2 HOH A 14 8.15696 5.35958 8.05399 1.00 0.00 +ATOM 43 O HOH A 15 -4.25089 1.55779 3.38483 1.00 0.00 +ATOM 44 H1 HOH A 15 -3.75950 2.20313 3.96971 1.00 0.00 +ATOM 45 H2 HOH A 15 -4.20595 1.86779 2.43516 1.00 0.00 +ATOM 46 O HOH A 16 -5.87634 8.40569-7.45950 1.00 0.00 +ATOM 47 H1 HOH A 16 -5.93288 7.44455-7.72971 1.00 0.00 +ATOM 48 H2 HOH A 16 -5.58780 8.95582-8.24315 1.00 0.00 +ATOM 49 O HOH A 17 -0.86327-0.67792-7.63870 1.00 0.00 +ATOM 50 H1 HOH A 17 -1.36562-1.53385-7.51611 1.00 0.00 +ATOM 51 H2 HOH A 17 -0.29646-0.73884-8.46029 1.00 0.00 +ATOM 52 O HOH A 18 -7.21770 8.17901 8.51805 1.00 0.00 +ATOM 53 H1 HOH A 18 -6.50598 8.88036 8.55746 1.00 0.00 +ATOM 54 H2 HOH A 18 -7.08549 7.61542 7.70264 1.00 0.00 +ATOM 55 O HOH A 19 3.82353-2.34870 1.44551 1.00 0.00 +ATOM 56 H1 HOH A 19 4.76020-1.99853 1.43900 1.00 0.00 +ATOM 57 H2 HOH A 19 3.45922-2.34338 0.51425 1.00 0.00 +ATOM 58 O HOH A 20 -1.98675-7.42721-8.87510 1.00 0.00 +ATOM 59 H1 HOH A 20 -2.71624-6.80286-8.59576 1.00 0.00 +ATOM 60 H2 HOH A 20 -2.20115-8.35209-8.56102 1.00 0.00 +ATOM 61 O HOH A 21 2.90890-7.93228 8.16128 1.00 0.00 +ATOM 62 H1 HOH A 21 2.78984-8.63684 7.46170 1.00 0.00 +ATOM 63 H2 HOH A 21 2.02952-7.49303 8.34500 1.00 0.00 +ATOM 64 O HOH A 22 -0.81393-5.05451 0.91620 1.00 0.00 +ATOM 65 H1 HOH A 22 -1.74032-4.90515 1.26187 1.00 0.00 +ATOM 66 H2 HOH A 22 -0.19288-5.21137 1.68412 1.00 0.00 +ATOM 67 O HOH A 23 4.31460 0.02272-2.05551 1.00 0.00 +ATOM 68 H1 HOH A 23 4.59956 0.94464-2.31792 1.00 0.00 +ATOM 69 H2 HOH A 23 4.55927-0.14250-1.10008 1.00 0.00 +ATOM 70 O HOH A 24 7.23422-7.20969-4.56209 1.00 0.00 +ATOM 71 H1 HOH A 24 7.10966-8.20012-4.50258 1.00 0.00 +ATOM 72 H2 HOH A 24 6.47922-6.75011-4.09437 1.00 0.00 +ATOM 73 O HOH A 25 -1.68681-3.30954-6.81544 1.00 0.00 +ATOM 74 H1 HOH A 25 -1.78324-4.13865-7.36614 1.00 0.00 +ATOM 75 H2 HOH A 25 -1.58957-3.55883-5.85190 1.00 0.00 +ATOM 76 O HOH A 26 -6.47555 0.09319 4.35099 1.00 0.00 +ATOM 77 H1 HOH A 26 -7.10594 0.70086 4.83406 1.00 0.00 +ATOM 78 H2 HOH A 26 -5.78315 0.63853 3.87856 1.00 0.00 +ATOM 79 O HOH A 27 -8.46814-2.61115-0.26689 1.00 0.00 +ATOM 80 H1 HOH A 27 -7.56373-2.78373 0.12331 1.00 0.00 +ATOM 81 H2 HOH A 27 -9.07871-3.37043-0.04173 1.00 0.00 +ATOM 82 O HOH A 28 0.50427 0.36077 6.37297 1.00 0.00 +ATOM 83 H1 HOH A 28 -0.40426-0.04050 6.48934 1.00 0.00 +ATOM 84 H2 HOH A 28 0.45507 1.34756 6.52729 1.00 0.00 +ATOM 85 O HOH A 29 2.32452-2.86731-8.60278 1.00 0.00 +ATOM 86 H1 HOH A 29 2.58906-1.91230-8.73687 1.00 0.00 +ATOM 87 H2 HOH A 29 2.29693-3.07128-7.62419 1.00 0.00 +ATOM 88 O HOH A 30 4.15865 6.77635 4.78155 1.00 0.00 +ATOM 89 H1 HOH A 30 4.29970 6.54793 3.81826 1.00 0.00 +ATOM 90 H2 HOH A 30 4.36132 5.97676 5.34685 1.00 0.00 +ATOM 91 O HOH A 31 -6.63413 6.27221-2.31800 1.00 0.00 +ATOM 92 H1 HOH A 31 -5.86411 6.88859-2.48270 1.00 0.00 +ATOM 93 H2 HOH A 31 -7.36435 6.46884-2.97231 1.00 0.00 +ATOM 94 O HOH A 32 -5.52421 6.90196 1.61539 1.00 0.00 +ATOM 95 H1 HOH A 32 -5.54105 6.11867 0.99397 1.00 0.00 +ATOM 96 H2 HOH A 32 -5.50718 6.57697 2.56095 1.00 0.00 +ATOM 97 O HOH A 33 1.94203-9.20181-0.91803 1.00 0.00 +ATOM 98 H1 HOH A 33 2.46202-8.39181-0.64687 1.00 0.00 +ATOM 99 H2 HOH A 33 1.05914-9.20372-0.44847 1.00 0.00 +ATOM 100 O HOH A 34 -2.58775 6.66456 1.57299 1.00 0.00 +ATOM 101 H1 HOH A 34 -3.46823 7.13828 1.59150 1.00 0.00 +ATOM 102 H2 HOH A 34 -2.22048 6.67992 0.64300 1.00 0.00 +ATOM 103 O HOH A 35 -3.83501-7.86648 1.38548 1.00 0.00 +ATOM 104 H1 HOH A 35 -4.70157-8.01773 1.86108 1.00 0.00 +ATOM 105 H2 HOH A 35 -3.96908-7.98748 0.40192 1.00 0.00 +ATOM 106 O HOH A 36 -1.07464-4.40438 7.89949 1.00 0.00 +ATOM 107 H1 HOH A 36 -0.73173-3.46839 7.97907 1.00 0.00 +ATOM 108 H2 HOH A 36 -0.53668-5.00763 8.48829 1.00 0.00 +ATOM 109 O HOH A 37 8.93879 4.95410-2.39596 1.00 0.00 +ATOM 110 H1 HOH A 37 8.69802 5.35280-1.51105 1.00 0.00 +ATOM 111 H2 HOH A 37 9.37633 5.64899-2.96665 1.00 0.00 +ATOM 112 O HOH A 38 4.15107 7.60436-0.39645 1.00 0.00 +ATOM 113 H1 HOH A 38 3.19279 7.85548-0.53293 1.00 0.00 +ATOM 114 H2 HOH A 38 4.73939 8.28378-0.83494 1.00 0.00 +ATOM 115 O HOH A 39 -0.92589-7.90535-4.67557 1.00 0.00 +ATOM 116 H1 HOH A 39 -0.69041-8.74005-5.17339 1.00 0.00 +ATOM 117 H2 HOH A 39 -1.79999-7.55312-5.01008 1.00 0.00 +ATOM 118 O HOH A 40 1.24631-6.05019-2.30447 1.00 0.00 +ATOM 119 H1 HOH A 40 1.82292-6.70181-1.81160 1.00 0.00 +ATOM 120 H2 HOH A 40 1.81982-5.33994-2.71266 1.00 0.00 +ATOM 121 O HOH A 41 7.58959-5.91675-7.43654 1.00 0.00 +ATOM 122 H1 HOH A 41 7.94924-5.00348-7.24527 1.00 0.00 +ATOM 123 H2 HOH A 41 7.74553-6.50873-6.64582 1.00 0.00 +ATOM 124 O HOH A 42 -9.51129-3.93411 7.71773 1.00 0.00 +ATOM 125 H1 HOH A 42 -9.72132-4.91069 7.67114 1.00 0.00 +ATOM 126 H2 HOH A 42 -9.11906-3.63564 6.84764 1.00 0.00 +ATOM 127 O HOH A 43 0.09731-2.47614-0.25934 1.00 0.00 +ATOM 128 H1 HOH A 43 0.35616-1.92496 0.53388 1.00 0.00 +ATOM 129 H2 HOH A 43 -0.00123-3.43216 0.01692 1.00 0.00 +ATOM 130 O HOH A 44 -4.29310-1.76150-8.58558 1.00 0.00 +ATOM 131 H1 HOH A 44 -4.65096-2.09600-7.71378 1.00 0.00 +ATOM 132 H2 HOH A 44 -4.18195-0.76868-8.54135 1.00 0.00 +ATOM 133 O HOH A 45 0.70632 1.50498 9.29356 1.00 0.00 +ATOM 134 H1 HOH A 45 0.71132 2.16244 8.54008 1.00 0.00 +ATOM 135 H2 HOH A 45 1.47475 0.87348 9.19001 1.00 0.00 +ATOM 136 O HOH A 46 -7.54565-6.67368 6.85248 1.00 0.00 +ATOM 137 H1 HOH A 46 -6.91115-6.31091 7.53499 1.00 0.00 +ATOM 138 H2 HOH A 46 -8.40359-6.92980 7.29784 1.00 0.00 +ATOM 139 O HOH A 47 6.96170-0.08268-5.05722 1.00 0.00 +ATOM 140 H1 HOH A 47 6.44170 0.70068-4.71671 1.00 0.00 +ATOM 141 H2 HOH A 47 6.76187-0.21906-6.02751 1.00 0.00 +ATOM 142 O HOH A 48 1.23370-2.75937-5.72161 1.00 0.00 +ATOM 143 H1 HOH A 48 0.36636-2.70749-6.21661 1.00 0.00 +ATOM 144 H2 HOH A 48 1.34885-1.93739-5.16386 1.00 0.00 +ATOM 145 O HOH A 49 3.46195-6.94204-0.52520 1.00 0.00 +ATOM 146 H1 HOH A 49 4.44175-6.78298-0.64634 1.00 0.00 +ATOM 147 H2 HOH A 49 3.14766-6.47300 0.30016 1.00 0.00 +ATOM 148 O HOH A 50 -1.22013 3.31663 0.46967 1.00 0.00 +ATOM 149 H1 HOH A 50 -2.12046 3.72418 0.62232 1.00 0.00 +ATOM 150 H2 HOH A 50 -0.53395 4.04073 0.40007 1.00 0.00 +ATOM 151 O HOH A 51 -5.34899 5.41929-7.68274 1.00 0.00 +ATOM 152 H1 HOH A 51 -4.65240 4.94228-7.14680 1.00 0.00 +ATOM 153 H2 HOH A 51 -6.23858 4.98805-7.53222 1.00 0.00 +ATOM 154 O HOH A 52 -7.94724-1.99362-2.96554 1.00 0.00 +ATOM 155 H1 HOH A 52 -8.27195-2.15542-2.03367 1.00 0.00 +ATOM 156 H2 HOH A 52 -7.67176-1.03708-3.06114 1.00 0.00 +ATOM 157 O HOH A 53 6.51809-6.98738 1.90168 1.00 0.00 +ATOM 158 H1 HOH A 53 6.06811-7.22703 2.76197 1.00 0.00 +ATOM 159 H2 HOH A 53 7.19476-7.68732 1.67320 1.00 0.00 +ATOM 160 O HOH A 54 5.30778 2.20496-4.68013 1.00 0.00 +ATOM 161 H1 HOH A 54 4.38926 2.20231-5.07548 1.00 0.00 +ATOM 162 H2 HOH A 54 5.26908 2.56899-3.74955 1.00 0.00 +ATOM 163 O HOH A 55 6.88447-7.97142 5.18545 1.00 0.00 +ATOM 164 H1 HOH A 55 7.75735-7.51618 5.00985 1.00 0.00 +ATOM 165 H2 HOH A 55 6.65595-7.89118 6.15568 1.00 0.00 +ATOM 166 O HOH A 56 8.39892 6.04806 0.03448 1.00 0.00 +ATOM 167 H1 HOH A 56 8.60513 6.95356-0.33639 1.00 0.00 +ATOM 168 H2 HOH A 56 9.02816 5.84379 0.78436 1.00 0.00 +ATOM 169 O HOH A 57 -6.76140 1.88005 7.44963 1.00 0.00 +ATOM 170 H1 HOH A 57 -5.87826 1.44461 7.62418 1.00 0.00 +ATOM 171 H2 HOH A 57 -7.35765 1.24129 6.96336 1.00 0.00 +ATOM 172 O HOH A 58 -8.39092 2.62162 5.08147 1.00 0.00 +ATOM 173 H1 HOH A 58 -7.62304 3.01019 5.59075 1.00 0.00 +ATOM 174 H2 HOH A 58 -8.94811 3.36081 4.70313 1.00 0.00 +ATOM 175 O HOH A 59 -3.88864 1.05069 7.56897 1.00 0.00 +ATOM 176 H1 HOH A 59 -3.54116 1.98699 7.61993 1.00 0.00 +ATOM 177 H2 HOH A 59 -3.33777 0.52556 6.92030 1.00 0.00 +ATOM 178 O HOH A 60 7.65814 1.98590 7.91906 1.00 0.00 +ATOM 179 H1 HOH A 60 7.95678 1.05997 7.68780 1.00 0.00 +ATOM 180 H2 HOH A 60 8.07123 2.63791 7.28327 1.00 0.00 +ATOM 181 O HOH A 61 4.47671 0.42751-7.37985 1.00 0.00 +ATOM 182 H1 HOH A 61 4.03164 0.09717-6.54751 1.00 0.00 +ATOM 183 H2 HOH A 61 5.24883-0.16731-7.60351 1.00 0.00 +ATOM 184 O HOH A 62 3.87894 5.87132-3.86342 1.00 0.00 +ATOM 185 H1 HOH A 62 3.63078 6.78612-3.54473 1.00 0.00 +ATOM 186 H2 HOH A 62 4.79798 5.64408-3.54133 1.00 0.00 +ATOM 187 O HOH A 63 2.81525 9.46134 2.57665 1.00 0.00 +ATOM 188 H1 HOH A 63 2.10230 9.70750 3.23325 1.00 0.00 +ATOM 189 H2 HOH A 63 2.44398 8.81806 1.90706 1.00 0.00 +ATOM 190 O HOH A 64 3.59288-2.73858 4.18067 1.00 0.00 +ATOM 191 H1 HOH A 64 3.10546-1.88706 4.37390 1.00 0.00 +ATOM 192 H2 HOH A 64 3.73187-2.82663 3.19430 1.00 0.00 +ATOM 193 O HOH A 65 3.08249-4.18996-3.35198 1.00 0.00 +ATOM 194 H1 HOH A 65 2.71909-3.31248-3.03900 1.00 0.00 +ATOM 195 H2 HOH A 65 2.96943-4.26321-4.34286 1.00 0.00 +ATOM 196 O HOH A 66 -3.61481-3.50805 5.59448 1.00 0.00 +ATOM 197 H1 HOH A 66 -3.50580-3.66431 6.57616 1.00 0.00 +ATOM 198 H2 HOH A 66 -3.01112-4.12510 5.08969 1.00 0.00 +ATOM 199 O HOH A 67 -4.66100 2.91036-2.79567 1.00 0.00 +ATOM 200 H1 HOH A 67 -5.23402 2.76992-1.98825 1.00 0.00 +ATOM 201 H2 HOH A 67 -4.29653 3.84154-2.78786 1.00 0.00 +ATOM 202 O HOH A 68 7.66896 8.93873 2.65874 1.00 0.00 +ATOM 203 H1 HOH A 68 7.35822 9.07259 3.59976 1.00 0.00 +ATOM 204 H2 HOH A 68 7.16626 8.17881 2.24664 1.00 0.00 +ATOM 205 O HOH A 69 -7.78469-5.17517-7.93270 1.00 0.00 +ATOM 206 H1 HOH A 69 -8.13209-4.38138-8.43192 1.00 0.00 +ATOM 207 H2 HOH A 69 -7.42594-4.88095-7.04685 1.00 0.00 +ATOM 208 O HOH A 70 -0.36648 7.26901 7.03658 1.00 0.00 +ATOM 209 H1 HOH A 70 -1.35283 7.39856 7.13818 1.00 0.00 +ATOM 210 H2 HOH A 70 0.11105 7.76093 7.76459 1.00 0.00 +ATOM 211 O HOH A 71 -0.10408 8.39110-6.01077 1.00 0.00 +ATOM 212 H1 HOH A 71 -0.10489 7.66579-5.32235 1.00 0.00 +ATOM 213 H2 HOH A 71 0.74069 8.34379-6.54380 1.00 0.00 +ATOM 214 O HOH A 72 2.15427-0.47645 4.40849 1.00 0.00 +ATOM 215 H1 HOH A 72 1.59635-0.10427 5.15024 1.00 0.00 +ATOM 216 H2 HOH A 72 2.76209 0.23641 4.05864 1.00 0.00 +ATOM 217 O HOH A 73 1.18963-0.13596-4.85492 1.00 0.00 +ATOM 218 H1 HOH A 73 0.27275 0.13899-5.14429 1.00 0.00 +ATOM 219 H2 HOH A 73 1.50894 0.47710-4.13229 1.00 0.00 +ATOM 220 O HOH A 74 4.58246-5.58699-7.44470 1.00 0.00 +ATOM 221 H1 HOH A 74 5.25920-5.74215-8.16438 1.00 0.00 +ATOM 222 H2 HOH A 74 4.65347-4.64454-7.11798 1.00 0.00 +ATOM 223 O HOH A 75 3.19893-5.18673 5.36767 1.00 0.00 +ATOM 224 H1 HOH A 75 3.32504-4.29996 4.92300 1.00 0.00 +ATOM 225 H2 HOH A 75 3.61808-5.90238 4.80896 1.00 0.00 +ATOM 226 O HOH A 76 5.15481 6.31277 1.81918 1.00 0.00 +ATOM 227 H1 HOH A 76 4.71571 6.89224 1.13259 1.00 0.00 +ATOM 228 H2 HOH A 76 5.52349 5.49446 1.37822 1.00 0.00 +ATOM 229 O HOH A 77 1.21031-6.23490-5.82808 1.00 0.00 +ATOM 230 H1 HOH A 77 0.55065-6.62355-5.18481 1.00 0.00 +ATOM 231 H2 HOH A 77 1.06708-5.24759-5.89661 1.00 0.00 +ATOM 232 O HOH A 78 -6.52412-6.02251 3.02920 1.00 0.00 +ATOM 233 H1 HOH A 78 -6.99755-6.90248 2.99031 1.00 0.00 +ATOM 234 H2 HOH A 78 -6.55870-5.58540 2.13045 1.00 0.00 +ATOM 235 O HOH A 79 1.75358-1.97013-2.43529 1.00 0.00 +ATOM 236 H1 HOH A 79 1.31638-1.29680-3.03150 1.00 0.00 +ATOM 237 H2 HOH A 79 1.15128-2.17249-1.66310 1.00 0.00 +ATOM 238 O HOH A 80 7.59868-9.54169 7.98121 1.00 0.00 +ATOM 239 H1 HOH A 80 6.63057-9.50273 8.22871 1.00 0.00 +ATOM 240 H2 HOH A 80 8.04765-8.69173 8.25688 1.00 0.00 +ATOM 241 O HOH A 81 4.35686-8.27918-4.12139 1.00 0.00 +ATOM 242 H1 HOH A 81 3.89465-8.17338-5.00183 1.00 0.00 +ATOM 243 H2 HOH A 81 4.58685-7.37751-3.75520 1.00 0.00 +ATOM 244 O HOH A 82 -8.98744-6.61285 4.70913 1.00 0.00 +ATOM 245 H1 HOH A 82 -8.31511-6.59562 5.44918 1.00 0.00 +ATOM 246 H2 HOH A 82 -8.65294-7.19547 3.96841 1.00 0.00 +ATOM 247 O HOH A 83 2.24110 3.96490-2.37135 1.00 0.00 +ATOM 248 H1 HOH A 83 2.58459 4.64631-3.01764 1.00 0.00 +ATOM 249 H2 HOH A 83 1.74169 4.42422-1.63677 1.00 0.00 +ATOM 250 O HOH A 84 3.21190 3.95036 0.68793 1.00 0.00 +ATOM 251 H1 HOH A 84 3.12655 3.92914 1.68405 1.00 0.00 +ATOM 252 H2 HOH A 84 4.02147 4.47960 0.43396 1.00 0.00 +ATOM 253 O HOH A 85 -4.73249 5.43628 7.94924 1.00 0.00 +ATOM 254 H1 HOH A 85 -4.90349 5.40748 8.93410 1.00 0.00 +ATOM 255 H2 HOH A 85 -5.60431 5.46569 7.46030 1.00 0.00 +ATOM 256 O HOH A 86 3.28334 5.88608-6.72348 1.00 0.00 +ATOM 257 H1 HOH A 86 3.42945 5.69842-5.75217 1.00 0.00 +ATOM 258 H2 HOH A 86 4.15063 5.79988-7.21376 1.00 0.00 +ATOM 259 O HOH A 87 7.77734 1.99223-0.12996 1.00 0.00 +ATOM 260 H1 HOH A 87 7.53966 1.04946-0.36385 1.00 0.00 +ATOM 261 H2 HOH A 87 8.55557 2.28712-0.68440 1.00 0.00 +ATOM 262 O HOH A 88 4.25796 3.98070 5.39832 1.00 0.00 +ATOM 263 H1 HOH A 88 5.13240 3.62825 5.06494 1.00 0.00 +ATOM 264 H2 HOH A 88 4.25671 3.97740 6.39831 1.00 0.00 +ATOM 265 O HOH A 89 -7.94036-1.91200-6.47143 1.00 0.00 +ATOM 266 H1 HOH A 89 -8.03375-1.50432-5.56309 1.00 0.00 +ATOM 267 H2 HOH A 89 -7.53540-1.24454-7.09632 1.00 0.00 +ATOM 268 O HOH A 90 0.06683 7.59780 1.68512 1.00 0.00 +ATOM 269 H1 HOH A 90 -0.79937 8.09621 1.72104 1.00 0.00 +ATOM 270 H2 HOH A 90 0.36125 7.37378 2.61416 1.00 0.00 +ATOM 271 O HOH A 91 9.22692 5.32803-6.34239 1.00 0.00 +ATOM 272 H1 HOH A 91 8.29498 4.97627-6.43047 1.00 0.00 +ATOM 273 H2 HOH A 91 9.39970 5.99852-7.06390 1.00 0.00 +ATOM 274 O HOH A 92 4.80974-2.69840-1.53401 1.00 0.00 +ATOM 275 H1 HOH A 92 5.69255-2.67697-2.00325 1.00 0.00 +ATOM 276 H2 HOH A 92 4.23258-1.95668-1.87566 1.00 0.00 +ATOM 277 O HOH A 93 -9.02753 2.52465-1.94731 1.00 0.00 +ATOM 278 H1 HOH A 93 -9.00487 1.89320-2.72239 1.00 0.00 +ATOM 279 H2 HOH A 93 -9.35873 3.41700-2.25394 1.00 0.00 +ATOM 280 O HOH A 94 6.65102 8.78168-4.53425 1.00 0.00 +ATOM 281 H1 HOH A 94 5.70746 8.97534-4.26554 1.00 0.00 +ATOM 282 H2 HOH A 94 6.84483 7.81068-4.39429 1.00 0.00 +ATOM 283 O HOH A 95 8.78617 8.36138-1.89147 1.00 0.00 +ATOM 284 H1 HOH A 95 9.31144 9.20789-1.97818 1.00 0.00 +ATOM 285 H2 HOH A 95 9.03319 7.73833-2.63363 1.00 0.00 +ATOM 286 O HOH A 96 6.61683-1.66915 1.64720 1.00 0.00 +ATOM 287 H1 HOH A 96 6.46273-0.75686 2.02664 1.00 0.00 +ATOM 288 H2 HOH A 96 7.06648-1.58857 0.75764 1.00 0.00 +ATOM 289 O HOH A 97 3.77542 2.99162-8.32507 1.00 0.00 +ATOM 290 H1 HOH A 97 3.98097 2.13851-7.84554 1.00 0.00 +ATOM 291 H2 HOH A 97 3.44343 3.67047-7.67013 1.00 0.00 +ATOM 292 O HOH A 98 -6.33739-2.16297 7.47021 1.00 0.00 +ATOM 293 H1 HOH A 98 -5.41579-1.98623 7.81579 1.00 0.00 +ATOM 294 H2 HOH A 98 -6.34376-2.06904 6.47465 1.00 0.00 +ATOM 295 O HOH A 99 0.98487 6.90611 4.28024 1.00 0.00 +ATOM 296 H1 HOH A 99 0.42075 7.17038 5.06249 1.00 0.00 +ATOM 297 H2 HOH A 99 1.91211 7.25977 4.40333 1.00 0.00 +ATOM 298 O HOH A 100 8.80053 5.24764 4.39194 1.00 0.00 +ATOM 299 H1 HOH A 100 9.11687 5.39284 3.45447 1.00 0.00 +ATOM 300 H2 HOH A 100 8.58573 6.12954 4.81159 1.00 0.00 +ATOM 301 O HOH A 101 -3.02597 1.05990-8.30917 1.00 0.00 +ATOM 302 H1 HOH A 101 -3.13770 1.31149-9.27053 1.00 0.00 +ATOM 303 H2 HOH A 101 -2.31450 0.36192-8.22780 1.00 0.00 +ATOM 304 O HOH A 102 -3.64837 0.59035-0.37392 1.00 0.00 +ATOM 305 H1 HOH A 102 -4.48771 1.09716-0.57051 1.00 0.00 +ATOM 306 H2 HOH A 102 -2.94851 0.83084-1.04650 1.00 0.00 +ATOM 307 O HOH A 103 8.41165-6.73121 8.29690 1.00 0.00 +ATOM 308 H1 HOH A 103 7.47511-6.75814 7.94738 1.00 0.00 +ATOM 309 H2 HOH A 103 8.39535-6.55024 9.28025 1.00 0.00 +ATOM 310 O HOH A 104 -1.51847 6.99790-0.94400 1.00 0.00 +ATOM 311 H1 HOH A 104 -1.70301 7.81678-1.48748 1.00 0.00 +ATOM 312 H2 HOH A 104 -0.53618 6.92742-0.77042 1.00 0.00 +ATOM 313 O HOH A 105 2.45893 2.80355-5.39805 1.00 0.00 +ATOM 314 H1 HOH A 105 1.60794 2.71335-5.91543 1.00 0.00 +ATOM 315 H2 HOH A 105 2.26007 3.17642-4.49173 1.00 0.00 +ATOM 316 O HOH A 106 8.60934 1.43428-7.91138 1.00 0.00 +ATOM 317 H1 HOH A 106 8.23235 1.87926-8.72369 1.00 0.00 +ATOM 318 H2 HOH A 106 9.44979 1.90073-7.63558 1.00 0.00 +ATOM 319 O HOH A 107 -7.36914-0.28386 9.63379 1.00 0.00 +ATOM 320 H1 HOH A 107 -8.07859 0.38906 9.42436 1.00 0.00 +ATOM 321 H2 HOH A 107 -7.23347-0.88196 8.84394 1.00 0.00 +ATOM 322 O HOH A 108 0.10928 6.50919-4.04773 1.00 0.00 +ATOM 323 H1 HOH A 108 -0.13953 5.59225-3.73577 1.00 0.00 +ATOM 324 H2 HOH A 108 0.80103 6.89308-3.43608 1.00 0.00 +ATOM 325 O HOH A 109 -8.90404 7.33583-8.14226 1.00 0.00 +ATOM 326 H1 HOH A 109 -8.23192 7.75240-8.75442 1.00 0.00 +ATOM 327 H2 HOH A 109 -9.53573 8.03793-7.81358 1.00 0.00 +ATOM 328 O HOH A 110 -2.51828 3.40766 7.35975 1.00 0.00 +ATOM 329 H1 HOH A 110 -1.52174 3.34727 7.41690 1.00 0.00 +ATOM 330 H2 HOH A 110 -2.82173 4.28068 7.74152 1.00 0.00 +ATOM 331 O HOH A 111 -8.21471-7.98554-1.90436 1.00 0.00 +ATOM 332 H1 HOH A 111 -7.27814-8.13389-1.58682 1.00 0.00 +ATOM 333 H2 HOH A 111 -8.41734-7.00631-1.89889 1.00 0.00 +ATOM 334 O HOH A 112 -1.39970 5.35983 3.63902 1.00 0.00 +ATOM 335 H1 HOH A 112 -0.67465 5.94310 4.00521 1.00 0.00 +ATOM 336 H2 HOH A 112 -1.78295 5.78091 2.81695 1.00 0.00 +ATOM 337 O HOH A 113 0.27792 3.19927 7.09036 1.00 0.00 +ATOM 338 H1 HOH A 113 0.51890 4.04379 7.56859 1.00 0.00 +ATOM 339 H2 HOH A 113 0.68537 3.20546 6.17715 1.00 0.00 +ATOM 340 O HOH A 114 6.91484-0.82514-7.92986 1.00 0.00 +ATOM 341 H1 HOH A 114 7.48907-0.00715-7.96382 1.00 0.00 +ATOM 342 H2 HOH A 114 7.03200-1.34988-8.77303 1.00 0.00 +ATOM 343 O HOH A 115 4.07662 1.31017 3.78025 1.00 0.00 +ATOM 344 H1 HOH A 115 4.88667 1.21915 3.20099 1.00 0.00 +ATOM 345 H2 HOH A 115 3.88492 2.27929 3.93531 1.00 0.00 +ATOM 346 O HOH A 116 3.04123 0.96792 0.40018 1.00 0.00 +ATOM 347 H1 HOH A 116 2.31245 0.58103 0.96516 1.00 0.00 +ATOM 348 H2 HOH A 116 2.86691 1.94140 0.25201 1.00 0.00 +ATOM 349 O HOH A 117 4.83774 2.96646-2.10522 1.00 0.00 +ATOM 350 H1 HOH A 117 5.36491 3.58175-1.51912 1.00 0.00 +ATOM 351 H2 HOH A 117 3.91491 3.33179-2.22740 1.00 0.00 +ATOM 352 O HOH A 118 6.13620-9.18277-1.49894 1.00 0.00 +ATOM 353 H1 HOH A 118 6.95925-9.73192-1.64395 1.00 0.00 +ATOM 354 H2 HOH A 118 6.17708-8.36351-2.07089 1.00 0.00 +ATOM 355 O HOH A 119 -7.44895 3.75868 9.25455 1.00 0.00 +ATOM 356 H1 HOH A 119 -7.10292 3.23214 8.47801 1.00 0.00 +ATOM 357 H2 HOH A 119 -8.24829 4.28742 8.96906 1.00 0.00 +ATOM 358 O HOH A 120 0.20464-1.72147 8.34759 1.00 0.00 +ATOM 359 H1 HOH A 120 0.56764-1.40553 7.47100 1.00 0.00 +ATOM 360 H2 HOH A 120 0.95281-2.07063 8.91179 1.00 0.00 +ATOM 361 O HOH A 121 -1.75932 8.59423-8.39787 1.00 0.00 +ATOM 362 H1 HOH A 121 -0.92998 8.72387-8.94136 1.00 0.00 +ATOM 363 H2 HOH A 121 -1.50897 8.37669-7.45447 1.00 0.00 +ATOM 364 O HOH A 122 -8.65289-5.23152-2.35943 1.00 0.00 +ATOM 365 H1 HOH A 122 -7.76703-5.09871-2.80397 1.00 0.00 +ATOM 366 H2 HOH A 122 -9.38469-4.97954-2.99266 1.00 0.00 +ATOM 367 O HOH A 123 -5.73721 4.05791 4.61075 1.00 0.00 +ATOM 368 H1 HOH A 123 -4.80461 3.70845 4.52056 1.00 0.00 +ATOM 369 H2 HOH A 123 -5.70812 5.01445 4.90091 1.00 0.00 +ATOM 370 O HOH A 124 -0.73339-7.95708 0.39040 1.00 0.00 +ATOM 371 H1 HOH A 124 -0.53040-6.99451 0.21082 1.00 0.00 +ATOM 372 H2 HOH A 124 -1.44051-8.02288 1.09444 1.00 0.00 +ATOM 373 O HOH A 125 -2.74464-0.31320 5.47175 1.00 0.00 +ATOM 374 H1 HOH A 125 -3.01836-1.26813 5.35691 1.00 0.00 +ATOM 375 H2 HOH A 125 -3.12556 0.23460 4.72690 1.00 0.00 +ATOM 376 O HOH A 126 -8.73663 6.71065-4.18900 1.00 0.00 +ATOM 377 H1 HOH A 126 -8.52092 7.66330-4.40329 1.00 0.00 +ATOM 378 H2 HOH A 126 -8.86733 6.19930-5.03838 1.00 0.00 +ATOM 379 O HOH A 127 -2.08643-5.71419 4.76754 1.00 0.00 +ATOM 380 H1 HOH A 127 -1.41816-5.78831 5.50776 1.00 0.00 +ATOM 381 H2 HOH A 127 -1.98776-6.49455 4.15004 1.00 0.00 +ATOM 382 O HOH A 128 3.82889-0.74390-4.80331 1.00 0.00 +ATOM 383 H1 HOH A 128 4.06619-0.56533-3.84843 1.00 0.00 +ATOM 384 H2 HOH A 128 2.87055-0.50442-4.95900 1.00 0.00 +ATOM 385 O HOH A 129 -1.65334-9.14557-2.28924 1.00 0.00 +ATOM 386 H1 HOH A 129 -1.42988-8.76266-3.18559 1.00 0.00 +ATOM 387 H2 HOH A 129 -1.14312-8.65696-1.58147 1.00 0.00 +ATOM 388 O HOH A 130 5.60318 6.19656-7.93957 1.00 0.00 +ATOM 389 H1 HOH A 130 6.15981 6.99380-7.70597 1.00 0.00 +ATOM 390 H2 HOH A 130 5.75229 5.95534-8.89851 1.00 0.00 +ATOM 391 O HOH A 131 -3.70061-5.75025-7.41977 1.00 0.00 +ATOM 392 H1 HOH A 131 -3.81782-6.27867-6.57891 1.00 0.00 +ATOM 393 H2 HOH A 131 -4.15036-4.86257-7.32101 1.00 0.00 +ATOM 394 O HOH A 132 0.83277 8.75421 9.17426 1.00 0.00 +ATOM 395 H1 HOH A 132 1.33639 8.5474710.01309 1.00 0.00 +ATOM 396 H2 HOH A 132 1.31818 9.46102 8.65968 1.00 0.00 +ATOM 397 O HOH A 133 -6.02613 0.97852-6.24502 1.00 0.00 +ATOM 398 H1 HOH A 133 -5.99591 0.28107-6.96102 1.00 0.00 +ATOM 399 H2 HOH A 133 -6.65015 1.71041-6.51876 1.00 0.00 +ATOM 400 O HOH A 134 3.27213-7.86329-6.63500 1.00 0.00 +ATOM 401 H1 HOH A 134 2.43396-7.38906-6.36560 1.00 0.00 +ATOM 402 H2 HOH A 134 3.99046-7.19224-6.81857 1.00 0.00 +ATOM 403 O HOH A 135 -5.03053 6.92406 4.88951 1.00 0.00 +ATOM 404 H1 HOH A 135 -4.25312 7.49297 5.15780 1.00 0.00 +ATOM 405 H2 HOH A 135 -5.85240 7.23668 5.36575 1.00 0.00 +ATOM 406 O HOH A 136 5.27595-5.66340-3.18747 1.00 0.00 +ATOM 407 H1 HOH A 136 4.47515-5.08095-3.04791 1.00 0.00 +ATOM 408 H2 HOH A 136 5.72764-5.82488-2.31004 1.00 0.00 +ATOM 409 O HOH A 137 -1.16895 3.84625-3.83872 1.00 0.00 +ATOM 410 H1 HOH A 137 -1.22267 2.86119-3.67510 1.00 0.00 +ATOM 411 H2 HOH A 137 -1.95911 4.29673-3.42315 1.00 0.00 +ATOM 412 O HOH A 138 -3.25223 5.38347-2.42443 1.00 0.00 +ATOM 413 H1 HOH A 138 -3.91522 6.05204-2.76126 1.00 0.00 +ATOM 414 H2 HOH A 138 -2.69015 5.80179-1.71093 1.00 0.00 +ATOM 415 O HOH A 139 -3.47772-1.68846 1.17033 1.00 0.00 +ATOM 416 H1 HOH A 139 -2.83031-2.36678 0.82285 1.00 0.00 +ATOM 417 H2 HOH A 139 -3.42392-0.86009 0.61273 1.00 0.00 +ATOM 418 O HOH A 140 -7.27589-9.70587 5.46816 1.00 0.00 +ATOM 419 H1 HOH A 140 -6.78280-8.94208 5.88468 1.00 0.00 +ATOM 420 H2 HOH A 140 -7.63823-9.42389 4.57980 1.00 0.00 +ATOM 421 O HOH A 141 -7.44821-7.77943-6.62337 1.00 0.00 +ATOM 422 H1 HOH A 141 -7.63400-7.12926-7.36009 1.00 0.00 +ATOM 423 H2 HOH A 141 -7.03686-8.60711-7.00513 1.00 0.00 +ATOM 424 O HOH A 142 3.00965 8.97079 6.02126 1.00 0.00 +ATOM 425 H1 HOH A 142 3.55304 8.15356 5.82924 1.00 0.00 +ATOM 426 H2 HOH A 142 2.43720 9.18403 5.22953 1.00 0.00 +ATOM 427 O HOH A 143 6.81124 3.17450 4.53842 1.00 0.00 +ATOM 428 H1 HOH A 143 7.48583 3.88655 4.34370 1.00 0.00 +ATOM 429 H2 HOH A 143 6.93508 2.41458 3.90031 1.00 0.00 +ATOM 430 O HOH A 144 0.82924 5.27135 0.07020 1.00 0.00 +ATOM 431 H1 HOH A 144 0.77441 6.14925 0.54588 1.00 0.00 +ATOM 432 H2 HOH A 144 1.70565 4.83548 0.27494 1.00 0.00 +ATOM 433 O HOH A 145 4.42966 0.67519 6.80777 1.00 0.00 +ATOM 434 H1 HOH A 145 5.29341 1.00177 7.19154 1.00 0.00 +ATOM 435 H2 HOH A 145 4.31592 1.04091 5.88402 1.00 0.00 +ATOM 436 O HOH A 146 -4.30783-6.20591-2.61140 1.00 0.00 +ATOM 437 H1 HOH A 146 -4.73675-5.31555-2.76399 1.00 0.00 +ATOM 438 H2 HOH A 146 -3.38604-6.07374-2.24694 1.00 0.00 +ATOM 439 O HOH A 147 4.42375-4.02185 7.81779 1.00 0.00 +ATOM 440 H1 HOH A 147 3.90394-3.69573 8.60737 1.00 0.00 +ATOM 441 H2 HOH A 147 3.80444-4.15954 7.04481 1.00 0.00 +ATOM 442 O HOH A 148 -3.84282-7.43546-5.21485 1.00 0.00 +ATOM 443 H1 HOH A 148 -3.61932-8.39964-5.35767 1.00 0.00 +ATOM 444 H2 HOH A 148 -3.93357-7.25589-4.23530 1.00 0.00 +ATOM 445 O HOH A 149 6.96948 8.42256-7.33736 1.00 0.00 +ATOM 446 H1 HOH A 149 6.88120 8.60366-6.35787 1.00 0.00 +ATOM 447 H2 HOH A 149 6.25441 8.91531-7.83321 1.00 0.00 +ATOM 448 O HOH A 150 -3.90216 3.60570 1.38007 1.00 0.00 +ATOM 449 H1 HOH A 150 -4.57081 4.13648 0.85932 1.00 0.00 +ATOM 450 H2 HOH A 150 -3.71702 4.06388 2.24943 1.00 0.00 +ATOM 451 O HOH A 151 2.53523 4.63355 3.43758 1.00 0.00 +ATOM 452 H1 HOH A 151 1.94587 5.34445 3.82134 1.00 0.00 +ATOM 453 H2 HOH A 151 3.23116 4.37914 4.10911 1.00 0.00 +ATOM 454 O HOH A 152 -1.32105-1.31524-2.90051 1.00 0.00 +ATOM 455 H1 HOH A 152 -1.07682-1.73989-2.02873 1.00 0.00 +ATOM 456 H2 HOH A 152 -1.69024-0.40091-2.73404 1.00 0.00 +ATOM 457 O HOH A 153 9.63669-5.39089 1.30632 1.00 0.00 +ATOM 458 H1 HOH A 153 8.89764-5.00094 1.85563 1.00 0.00 +ATOM 459 H2 HOH A 153 9.34953-6.27683 0.94211 1.00 0.00 +ATOM 460 O HOH A 154 -7.59121 0.36223 1.13952 1.00 0.00 +ATOM 461 H1 HOH A 154 -8.32850 0.56842 1.78287 1.00 0.00 +ATOM 462 H2 HOH A 154 -7.18411-0.52130 1.37113 1.00 0.00 +ATOM 463 O HOH A 155 0.14084 2.58925-6.80754 1.00 0.00 +ATOM 464 H1 HOH A 155 -0.54012 2.01784-6.34950 1.00 0.00 +ATOM 465 H2 HOH A 155 0.30143 2.24091-7.73105 1.00 0.00 +ATOM 466 O HOH A 156 6.94736-2.53288 8.45758 1.00 0.00 +ATOM 467 H1 HOH A 156 7.75498-3.05709 8.18747 1.00 0.00 +ATOM 468 H2 HOH A 156 6.12225-3.04177 8.21213 1.00 0.00 +ATOM 469 O HOH A 157 -8.44877 5.50587 1.87370 1.00 0.00 +ATOM 470 H1 HOH A 157 -8.07434 4.58102 1.80694 1.00 0.00 +ATOM 471 H2 HOH A 157 -7.70330 6.17109 1.83178 1.00 0.00 +ATOM 472 O HOH A 158 2.29098 8.43582-7.30373 1.00 0.00 +ATOM 473 H1 HOH A 158 2.90339 7.67082-7.10441 1.00 0.00 +ATOM 474 H2 HOH A 158 2.73523 9.29410-7.04683 1.00 0.00 +ATOM 475 O HOH A 159 8.58436-1.72762 4.89738 1.00 0.00 +ATOM 476 H1 HOH A 159 7.71195-2.18337 5.07399 1.00 0.00 +ATOM 477 H2 HOH A 159 9.32438-2.39929 4.93236 1.00 0.00 +ATOM 478 O HOH A 160 4.82759-3.05146-6.09531 1.00 0.00 +ATOM 479 H1 HOH A 160 4.43081-2.32780-5.53063 1.00 0.00 +ATOM 480 H2 HOH A 160 5.52122-3.54278-5.56855 1.00 0.00 +ATOM 481 O HOH A 161 -2.26983 5.88033-6.09586 1.00 0.00 +ATOM 482 H1 HOH A 161 -2.64503 4.98362-6.33066 1.00 0.00 +ATOM 483 H2 HOH A 161 -1.45501 5.76247-5.52825 1.00 0.00 +ATOM 484 O HOH A 162 -3.96149-1.61237-4.14344 1.00 0.00 +ATOM 485 H1 HOH A 162 -3.03395-1.94323-3.96970 1.00 0.00 +ATOM 486 H2 HOH A 162 -3.95821-0.61291-4.17610 1.00 0.00 +ATOM 487 O HOH A 163 -1.31421 1.26836 2.27941 1.00 0.00 +ATOM 488 H1 HOH A 163 -2.25523 0.95237 2.15846 1.00 0.00 +ATOM 489 H2 HOH A 163 -1.11526 1.98612 1.61214 1.00 0.00 +ATOM 490 O HOH A 164 4.41037-7.41326 4.12545 1.00 0.00 +ATOM 491 H1 HOH A 164 5.23311-7.78779 4.55304 1.00 0.00 +ATOM 492 H2 HOH A 164 3.85531-8.16031 3.75962 1.00 0.00 +ATOM 493 O HOH A 165 8.52334 7.78416 5.68978 1.00 0.00 +ATOM 494 H1 HOH A 165 9.51544 7.87948 5.77133 1.00 0.00 +ATOM 495 H2 HOH A 165 8.07725 8.31209 6.41248 1.00 0.00 +ATOM 496 O HOH A 166 -3.56440 3.34153-6.56496 1.00 0.00 +ATOM 497 H1 HOH A 166 -3.62987 2.89937-5.67041 1.00 0.00 +ATOM 498 H2 HOH A 166 -3.43064 2.64645-7.27134 1.00 0.00 +ATOM 499 O HOH A 167 6.08152-5.84035-0.60731 1.00 0.00 +ATOM 500 H1 HOH A 167 6.28235-6.16955 0.31535 1.00 0.00 +ATOM 501 H2 HOH A 167 6.00955-4.84300-0.59704 1.00 0.00 +ATOM 502 O HOH A 168 1.50638 1.17335-2.61990 1.00 0.00 +ATOM 503 H1 HOH A 168 2.07064 0.58934-2.03634 1.00 0.00 +ATOM 504 H2 HOH A 168 1.80852 2.12266-2.53317 1.00 0.00 +ATOM 505 O HOH A 169 0.40419-6.33192-9.42006 1.00 0.00 +ATOM 506 H1 HOH A 169 0.91828-6.34348-8.56240 1.00 0.00 +ATOM 507 H2 HOH A 169 -0.49926-6.73445-9.27259 1.00 0.00 +ATOM 508 O HOH A 170 -7.76105 2.91709-6.90851 1.00 0.00 +ATOM 509 H1 HOH A 170 -8.30522 3.62083-6.45175 1.00 0.00 +ATOM 510 H2 HOH A 170 -7.51803 3.22779-7.82743 1.00 0.00 +ATOM 511 O HOH A 171 8.10523-4.63066-4.23880 1.00 0.00 +ATOM 512 H1 HOH A 171 8.23397-4.09229-5.07161 1.00 0.00 +ATOM 513 H2 HOH A 171 7.67412-5.50306-4.46917 1.00 0.00 +ATOM 514 O HOH A 172 3.93308 4.39012 8.03780 1.00 0.00 +ATOM 515 H1 HOH A 172 2.99040 4.71599 7.96591 1.00 0.00 +ATOM 516 H2 HOH A 172 4.01169 3.76618 8.81530 1.00 0.00 +ATOM 517 O HOH A 173 2.87497-0.29722 9.20419 1.00 0.00 +ATOM 518 H1 HOH A 173 3.42050 0.10240 9.94088 1.00 0.00 +ATOM 519 H2 HOH A 173 3.17713 0.07444 8.32638 1.00 0.00 +ATOM 520 O HOH A 174 7.38029-4.13755 2.54204 1.00 0.00 +ATOM 521 H1 HOH A 174 7.00525-3.27912 2.19212 1.00 0.00 +ATOM 522 H2 HOH A 174 7.06740-4.27974 3.48113 1.00 0.00 +ATOM 523 O HOH A 175 9.22819 0.55328 3.37070 1.00 0.00 +ATOM 524 H1 HOH A 175 9.48289 1.25612 4.03489 1.00 0.00 +ATOM 525 H2 HOH A 175 9.14529-0.32893 3.83420 1.00 0.00 +ATOM 526 O HOH A 176 6.67258 1.32510 2.41645 1.00 0.00 +ATOM 527 H1 HOH A 176 6.77213 1.86811 1.58264 1.00 0.00 +ATOM 528 H2 HOH A 176 7.56383 0.95914 2.68429 1.00 0.00 +ATOM 529 O HOH A 177 -5.99349-2.76458 4.41578 1.00 0.00 +ATOM 530 H1 HOH A 177 -5.92992-1.80362 4.14648 1.00 0.00 +ATOM 531 H2 HOH A 177 -5.15186-3.03633 4.88248 1.00 0.00 +ATOM 532 O HOH A 178 -9.09469 1.04375-4.33196 1.00 0.00 +ATOM 533 H1 HOH A 178 -9.99272 0.71564-4.62503 1.00 0.00 +ATOM 534 H2 HOH A 178 -8.58051 1.36325-5.12791 1.00 0.00 +ATOM 535 O HOH A 179 -5.01436-2.85686-6.24212 1.00 0.00 +ATOM 536 H1 HOH A 179 -4.57033-2.50468-5.41822 1.00 0.00 +ATOM 537 H2 HOH A 179 -5.97731-3.04384-6.04778 1.00 0.00 +ATOM 538 O HOH A 180 6.67481 4.26879-6.07047 1.00 0.00 +ATOM 539 H1 HOH A 180 6.38195 3.35160-5.80028 1.00 0.00 +ATOM 540 H2 HOH A 180 6.05906 4.62120-6.77520 1.00 0.00 +ATOM 541 O HOH A 181 -3.81715-3.93411 8.50815 1.00 0.00 +ATOM 542 H1 HOH A 181 -2.85106-4.18261 8.57824 1.00 0.00 +ATOM 543 H2 HOH A 181 -4.00904-3.16637 9.11952 1.00 0.00 +ATOM 544 O HOH A 182 6.27637-3.37921 5.36389 1.00 0.00 +ATOM 545 H1 HOH A 182 5.94054-3.71778 6.24286 1.00 0.00 +ATOM 546 H2 HOH A 182 5.55507-2.85521 4.91094 1.00 0.00 +ATOM 547 O HOH A 183 0.92829-5.80991 3.06323 1.00 0.00 +ATOM 548 H1 HOH A 183 1.01372-6.36544 3.89033 1.00 0.00 +ATOM 549 H2 HOH A 183 1.83172-5.48172 2.78736 1.00 0.00 +ATOM 550 O HOH A 184 -2.04870-8.82266 3.48386 1.00 0.00 +ATOM 551 H1 HOH A 184 -2.50176-9.14574 4.31474 1.00 0.00 +ATOM 552 H2 HOH A 184 -2.72253-8.73189 2.75057 1.00 0.00 +ATOM 553 O HOH A 185 8.45188-0.48738 7.31290 1.00 0.00 +ATOM 554 H1 HOH A 185 8.59197-0.78543 6.36869 1.00 0.00 +ATOM 555 H2 HOH A 185 7.94499-1.18988 7.81246 1.00 0.00 +ATOM 556 O HOH A 186 -1.45422-3.94486-4.19471 1.00 0.00 +ATOM 557 H1 HOH A 186 -1.55257-4.53669-3.39467 1.00 0.00 +ATOM 558 H2 HOH A 186 -1.18026-3.02928-3.90034 1.00 0.00 +ATOM 559 O HOH A 187 -3.44904-4.69551 1.84434 1.00 0.00 +ATOM 560 H1 HOH A 187 -4.00694-3.92017 2.14029 1.00 0.00 +ATOM 561 H2 HOH A 187 -3.88882-5.54879 2.12449 1.00 0.00 +ATOM 562 O HOH A 188 3.02095 8.33713-3.06826 1.00 0.00 +ATOM 563 H1 HOH A 188 3.31132 9.14872-3.57522 1.00 0.00 +ATOM 564 H2 HOH A 188 2.59276 8.61648-2.20883 1.00 0.00 +ATOM 565 O HOH A 189 -6.61360 2.43846-0.79606 1.00 0.00 +ATOM 566 H1 HOH A 189 -7.43631 2.55126-1.35321 1.00 0.00 +ATOM 567 H2 HOH A 189 -6.70915 1.62575-0.22128 1.00 0.00 +ATOM 568 O HOH A 190 -6.45650-5.60106 0.02847 1.00 0.00 +ATOM 569 H1 HOH A 190 -7.31860-5.21369 0.35514 1.00 0.00 +ATOM 570 H2 HOH A 190 -6.34207-5.38849-0.94195 1.00 0.00 +ATOM 571 O HOH A 191 4.97158 8.98603 9.35581 1.00 0.00 +ATOM 572 H1 HOH A 191 4.45838 8.16074 9.12019 1.00 0.00 +ATOM 573 H2 HOH A 191 4.36835 9.78150 9.29808 1.00 0.00 +ATOM 574 O HOH A 192 -3.05699 7.84978 8.04310 1.00 0.00 +ATOM 575 H1 HOH A 192 -2.70669 8.23789 8.89555 1.00 0.00 +ATOM 576 H2 HOH A 192 -3.36545 6.91252 8.20558 1.00 0.00 +ATOM 577 O HOH A 193 -2.92099 3.33308 4.67004 1.00 0.00 +ATOM 578 H1 HOH A 193 -2.74736 3.16533 5.64046 1.00 0.00 +ATOM 579 H2 HOH A 193 -2.32689 4.07005 4.34767 1.00 0.00 +ATOM 580 O HOH A 194 -8.24114-8.63863 2.96619 1.00 0.00 +ATOM 581 H1 HOH A 194 -7.70007-9.00170 2.20762 1.00 0.00 +ATOM 582 H2 HOH A 194 -9.16297-9.02479 2.93289 1.00 0.00 +ATOM 583 O HOH A 195 0.60978 2.67870 4.38623 1.00 0.00 +ATOM 584 H1 HOH A 195 0.12512 2.12726 3.70724 1.00 0.00 +ATOM 585 H2 HOH A 195 1.27265 3.26849 3.92499 1.00 0.00 +ATOM 586 O HOH A 196 -1.67891 5.47316-9.32675 1.00 0.00 +ATOM 587 H1 HOH A 196 -0.96963 5.46913-8.62184 1.00 0.00 +ATOM 588 H2 HOH A 196 -2.54404 5.77658-8.92739 1.00 0.00 +ATOM 589 O HOH A 197 -5.04270-7.24517 5.44553 1.00 0.00 +ATOM 590 H1 HOH A 197 -4.71084-6.72801 4.65659 1.00 0.00 +ATOM 591 H2 HOH A 197 -5.91930-6.86912 5.74579 1.00 0.00 +ATOM 592 O HOH A 198 7.86760-1.02982-0.72361 1.00 0.00 +ATOM 593 H1 HOH A 198 7.77567-1.33248-1.67226 1.00 0.00 +ATOM 594 H2 HOH A 198 8.79249-1.22750-0.39881 1.00 0.00 +ATOM 595 O HOH A 199 6.83423 6.10362-3.83144 1.00 0.00 +ATOM 596 H1 HOH A 199 6.77524 5.49298-4.62115 1.00 0.00 +ATOM 597 H2 HOH A 199 7.63416 5.86186-3.28220 1.00 0.00 +ATOM 598 O HOH A 200 7.03891-2.26613-3.19951 1.00 0.00 +ATOM 599 H1 HOH A 200 7.09872-1.57328-3.91810 1.00 0.00 +ATOM 600 H2 HOH A 200 7.35998-3.14384-3.55522 1.00 0.00 +ATOM 601 O HOH A 201 -7.33477 3.19309 2.34582 1.00 0.00 +ATOM 602 H1 HOH A 201 -7.00710 2.40240 1.82866 1.00 0.00 +ATOM 603 H2 HOH A 201 -6.72171 3.36422 3.11711 1.00 0.00 +ATOM 604 O HOH A 202 -8.37975-3.87919 5.10380 1.00 0.00 +ATOM 605 H1 HOH A 202 -8.60295-4.75016 4.66610 1.00 0.00 +ATOM 606 H2 HOH A 202 -7.50207-3.54755 4.75784 1.00 0.00 +ATOM 607 O HOH A 203 -6.59046 9.33800 1.02041 1.00 0.00 +ATOM 608 H1 HOH A 203 -6.39898 9.76105 0.13476 1.00 0.00 +ATOM 609 H2 HOH A 203 -6.08253 8.47999 1.09672 1.00 0.00 +ATOM 610 O HOH A 204 5.76158-6.69264 7.95186 1.00 0.00 +ATOM 611 H1 HOH A 204 5.35598-5.80028 7.75392 1.00 0.00 +ATOM 612 H2 HOH A 204 5.04986-7.31920 8.26948 1.00 0.00 +ATOM 613 O HOH A 205 -5.55502-3.46727-2.96065 1.00 0.00 +ATOM 614 H1 HOH A 205 -4.85463-2.83154-3.28516 1.00 0.00 +ATOM 615 H2 HOH A 205 -6.42093-2.97997-2.84777 1.00 0.00 +ATOM 616 O HOH A 206 -1.11813 1.54542-1.64598 1.00 0.00 +ATOM 617 H1 HOH A 206 -0.20063 1.37126-2.00357 1.00 0.00 +ATOM 618 H2 HOH A 206 -1.05758 2.15455-0.85522 1.00 0.00 +ATOM 619 O HOH A 207 0.90245 5.06028-7.75445 1.00 0.00 +ATOM 620 H1 HOH A 207 1.69844 5.41545-7.26428 1.00 0.00 +ATOM 621 H2 HOH A 207 0.58210 4.22446-7.30860 1.00 0.00 +ATOM 622 O HOH A 208 6.32094 4.34206-0.27008 1.00 0.00 +ATOM 623 H1 HOH A 208 6.67077 3.43501-0.03579 1.00 0.00 +ATOM 624 H2 HOH A 208 7.03349 5.02542-0.11105 1.00 0.00 +ATOM 625 O HOH A 209 1.35220 5.38820 8.19987 1.00 0.00 +ATOM 626 H1 HOH A 209 1.25178 5.39769 9.19477 1.00 0.00 +ATOM 627 H2 HOH A 209 0.82671 6.14162 7.80461 1.00 0.00 +ATOM 628 O HOH A 210 -1.52265-5.59904-1.88217 1.00 0.00 +ATOM 629 H1 HOH A 210 -0.63634-5.87733-2.25231 1.00 0.00 +ATOM 630 H2 HOH A 210 -1.42198-5.36779-0.91449 1.00 0.00 +ATOM 631 O HOH A 211 -6.58606-5.25492-5.14944 1.00 0.00 +ATOM 632 H1 HOH A 211 -6.50980-6.25097-5.10393 1.00 0.00 +ATOM 633 H2 HOH A 211 -6.01220-4.84398-4.44105 1.00 0.00 +ATOM 634 O HOH A 212 0.65691-6.27428 6.15546 1.00 0.00 +ATOM 635 H1 HOH A 212 1.56766-5.89986 5.98123 1.00 0.00 +ATOM 636 H2 HOH A 212 0.39210-6.08075 7.10014 1.00 0.00 +ATOM 637 O HOH A 213 -3.66409 8.17572-5.67188 1.00 0.00 +ATOM 638 H1 HOH A 213 -3.15161 7.35551-5.92608 1.00 0.00 +ATOM 639 H2 HOH A 213 -4.41613 8.31207-6.31674 1.00 0.00 +ATOM 640 O HOH A 214 -5.91707 4.79302-0.07059 1.00 0.00 +ATOM 641 H1 HOH A 214 -6.17899 5.47258-0.75586 1.00 0.00 +ATOM 642 H2 HOH A 214 -6.20746 3.88528-0.37339 1.00 0.00 +ATOM 643 O HOH A 215 3.35346-5.09321 1.95213 1.00 0.00 +ATOM 644 H1 HOH A 215 3.51906-4.12614 1.75885 1.00 0.00 +ATOM 645 H2 HOH A 215 4.18588-5.50668 2.32106 1.00 0.00 +ATOM 646 O HOH A 216 -5.12886-8.20637 9.08129 1.00 0.00 +ATOM 647 H1 HOH A 216 -5.53325-7.30309 8.93795 1.00 0.00 +ATOM 648 H2 HOH A 216 -4.23510-8.24613 8.63450 1.00 0.00 +TER 649 HOH A 216 +ENDMDL diff --git a/tests/test_admp/test_compute.py b/tests/test_admp/test_compute.py index f3c66a788..e242cedcb 100644 --- a/tests/test_admp/test_compute.py +++ b/tests/test_admp/test_compute.py @@ -26,16 +26,18 @@ def test_init(self): H = Hamiltonian('tests/data/admp.xml') H1 = Hamiltonian('tests/data/admp_mono.xml') H2 = Hamiltonian('tests/data/admp_nonpol.xml') + H3 = Hamiltonian('tests/data/admp_octupole.xml') pdb = app.PDBFile('tests/data/water_dimer.pdb') potential = H.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) potential_aux = H.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5, has_aux=True) potential1 = H1.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) potential2 = H2.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) + potential3 = H3.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5, has_aux=True) - yield potential, potential_aux, potential1, potential2, H.paramset, H1.paramset, H2.paramset + yield potential, potential_aux, potential1, potential2, potential3, H.paramset, H1.paramset, H2.paramset, H3.paramset def test_ADMPPmeForce(self, pot_prm): - potential, potential_aux, potential1, potential2, paramset, paramset1, paramset2 = pot_prm + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm rc = 0.4 pdb = app.PDBFile('tests/data/water_dimer.pdb') positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) @@ -56,7 +58,7 @@ def test_ADMPPmeForce(self, pot_prm): def test_ADMPPmeForce_jit(self, pot_prm): - potential, potential_aux, potential1, potential2, paramset, paramset1, paramset2 = pot_prm + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm rc = 0.4 pdb = app.PDBFile('tests/data/water_dimer.pdb') positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) @@ -76,7 +78,7 @@ def test_ADMPPmeForce_jit(self, pot_prm): np.testing.assert_almost_equal(energy, -35.71585296268245, decimal=1) def test_ADMPPmeForce_aux(self, pot_prm): - potential, potential_aux, potential1, potential2, paramset, paramset1, paramset2 = pot_prm + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm rc = 0.4 pdb = app.PDBFile('tests/data/water_dimer.pdb') positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) @@ -104,7 +106,7 @@ def test_ADMPPmeForce_aux(self, pot_prm): def test_ADMPPmeForce_mono(self, pot_prm): - potential, potential_aux, potential1, potential2, paramset, paramset1, paramset2 = pot_prm + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm rc = 0.4 pdb = app.PDBFile('tests/data/water_dimer.pdb') positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) @@ -125,7 +127,7 @@ def test_ADMPPmeForce_mono(self, pot_prm): def test_ADMPPmeForce_nonpol(self, pot_prm): - potential, potential_aux, potential1, potential2, paramset, paramset1, paramset2 = pot_prm + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm rc = 0.4 pdb = app.PDBFile('tests/data/water_dimer.pdb') positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) @@ -143,3 +145,29 @@ def test_ADMPPmeForce_nonpol(self, pot_prm): energy = pot(positions, box, pairs, paramset2) print(energy) np.testing.assert_almost_equal(energy, -31.65932348, decimal=2) + + def test_ADMPPmeForce_octupole(self, pot_prm): + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm + rc = 0.4 + pdb = app.PDBFile('tests/data/water_dimer.pdb') + positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) + positions = jnp.array(positions) + a, b, c = pdb.topology.getPeriodicBoxVectors().value_in_unit(unit.nanometer) + box = jnp.array([a, b, c]) + # neighbor list + + covalent_map = potential3.meta["cov_map"] + + nblist = NeighborList(box, rc, covalent_map) + nblist.allocate(positions) + pairs = nblist.pairs + pot = potential3.getPotentialFunc(names=["ADMPPmeForce"]) + + aux = dict() + U_ind = jnp.zeros((6, 3)) + aux["U_ind"] = U_ind + + energy_and_aux = pot(positions, box, pairs, paramset3, aux) + energy = energy_and_aux[0] + print("Octupole Included Energy: ", energy) + np.testing.assert_almost_equal(energy, -36.32748562120901, decimal=1) \ No newline at end of file diff --git a/tests/test_admp/test_compute_octupole.py b/tests/test_admp/test_compute_octupole.py new file mode 100644 index 000000000..9896733aa --- /dev/null +++ b/tests/test_admp/test_compute_octupole.py @@ -0,0 +1,125 @@ +import openmm.app as app +import openmm.unit as unit +import numpy as np +import jax.numpy as jnp +import numpy.testing as npt +import pytest +from dmff import Hamiltonian, NeighborList +from jax import jit, value_and_grad + +class TestADMPAPI: + + """ Test ADMP related generators + """ + + @pytest.fixture(scope='class', name='pot_prm') + def test_init(self): + """load generators from XML file + + Yields: + Tuple: ( + ADMPDispForce, + ADMPPmeForce, # polarized + ) + """ + rc = 4.0 + H = Hamiltonian('tests/data/admp.xml') + H1 = Hamiltonian('tests/data/admp_mono.xml') + H2 = Hamiltonian('tests/data/admp_nonpol.xml') + H3 = Hamiltonian('tests/data/admp_octupole.xml') + pdb = app.PDBFile('tests/data/water_dimer.pdb') + potential = H.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) + potential_aux = H.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5, has_aux=True) + potential1 = H1.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) + potential2 = H2.createPotential(pdb.topology, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5) + potential3 = H3.createPotential(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5, has_aux=True) + + yield potential, potential_aux, potential1, potential2, potential3, H.paramset, H1.paramset, H2.paramset, H3.paramset + + def test_ADMPPmeForce_octupole(self, pot_prm): + potential, potential_aux, potential1, potential2, potential3, paramset, paramset1, paramset2, paramset3 = pot_prm + rc = 0.4 + pdb = app.PDBFile('tests/data/water_dimer.pdb') + positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) + positions = jnp.array(positions) + a, b, c = pdb.topology.getPeriodicBoxVectors().value_in_unit(unit.nanometer) + box = jnp.array([a, b, c]) + # neighbor list + + covalent_map = potential3.meta["cov_map"] + + nblist = NeighborList(box, rc, covalent_map) + nblist.allocate(positions) + pairs = nblist.pairs + pot = potential3.getPotentialFunc(names=["ADMPPmeForce"]) + + aux = dict() + U_ind = jnp.zeros((6, 3)) + aux["U_ind"] = U_ind + + energy_and_aux = pot(positions, box, pairs, paramset3, aux) + energy = energy_and_aux[0] + print("Octupole Included Energy: ", energy) + np.testing.assert_almost_equal(energy, -36.32748562120901, decimal=1) + + def test_ADMPPmeForce_octupole_water_216(self): + rc = 8.0 + H3 = Hamiltonian('tests/data/admp_octupole.xml') + pdb = app.PDBFile('tests/data/water_216.pdb') + potential3 = H3.createPotential(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, step_pol=5, has_aux=True) + paramset3 = H3.paramset + + rc = 0.8 + pdb = app.PDBFile('tests/data/water_216.pdb') + positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) + positions = jnp.array(positions) + a, b, c = pdb.topology.getPeriodicBoxVectors().value_in_unit(unit.nanometer) + box = jnp.array([a, b, c]) + # neighbor list + + covalent_map = potential3.meta["cov_map"] + + nblist = NeighborList(box, rc, covalent_map) + nblist.allocate(positions) + pairs = nblist.pairs + pot = potential3.getPotentialFunc(names=["ADMPPmeForce"]) + + aux = dict() + U_ind = jnp.zeros((216 * 3, 3)) + aux["U_ind"] = U_ind + + energy_and_aux = pot(positions, box, pairs, paramset3, aux) + energy = energy_and_aux[0] + print("Octupole Included Energy: ", energy) + np.testing.assert_almost_equal(energy, -9294.40, decimal=1) + + def test_ADMPPmeForce_octupole_ala5(self): + rc = 12.0 + H3 = Hamiltonian('tests/data/ala5_dmff.xml') + pdb = app.PDBFile('tests/data/ala5_mpid.pdb') + potential3 = H3.createPotential(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=rc*unit.angstrom, ethresh=5e-4, has_aux=True) + paramset3 = H3.paramset + + rc = 1.2 + pdb = app.PDBFile('tests/data/ala5_mpid.pdb') + positions = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer) + positions = jnp.array(positions) + a, b, c = pdb.topology.getPeriodicBoxVectors().value_in_unit(unit.nanometer) + box = jnp.array([a, b, c]) + # neighbor list + + covalent_map = potential3.meta["cov_map"] + + nblist = NeighborList(box, rc, covalent_map) + nblist.allocate(positions) + pairs = nblist.pairs + pot = potential3.getPotentialFunc(names=["ADMPPmeForce"]) + + aux = dict() + U_ind = jnp.zeros((54, 3)) + aux["U_ind"] = U_ind + + energy_and_aux = pot(positions, box, pairs, paramset3, aux) + energy = energy_and_aux[0] + print("Octupole Included Energy: ", energy) + np.testing.assert_almost_equal(energy, 63.2, decimal=1)