From aca48a9c99bba60d90fe530b864872fe06870438 Mon Sep 17 00:00:00 2001 From: peterli3819 Date: Wed, 18 Jun 2025 11:36:06 -0600 Subject: [PATCH] fix issues with Krylov subspace update by replacing fixed number of rank updates with adding condition with the error threshold --- examples/latte_interface/bomd/input.in | 6 +- examples/latte_interface/bomd/main.py | 125 +- examples/latte_interface/bomd/water_128.xyz | 386 --- .../scf_energy_forces/input.in | 2 +- .../latte_interface/scf_energy_forces/main.py | 17 +- .../scf_energy_forces/water_128.xyz | 386 --- .../scf_energy_forces_kernel/coords_100.pdb | 306 ++ .../scf_energy_forces_kernel/coords_1299.pdb | 1305 ++++++++ .../scf_energy_forces_kernel/coords_2955.pdb | 2961 +++++++++++++++++ .../scf_energy_forces_kernel/latte.in | 56 + .../scf_energy_forces_kernel/main.py | 56 + .../scf_energy_forces_kernel/vars | 20 + parameters/latte/TBparam/electrons.dat | 13 +- proxies/c/README.md | 1 + proxies/c/build.sh | 2 + proxies/c/proxy_a.c | 48 + proxies/c/proxy_a.h | 14 + proxies/c/proxy_a_lib.c | 253 ++ proxies/fortran/CMakeLists.txt | 107 + proxies/fortran/compile.sh | 1 + proxies/fortran/compile_with_cmake.sh | 24 + proxies/fortran/proxy_a.F90 | 31 + proxies/fortran/proxy_a_lib.F90 | 113 + proxies/fortran/proxy_a_mod.F90 | 232 ++ proxies/matlab/AtomicDensityMatrix.m | 36 + proxies/matlab/BondIntegral.m | 18 + proxies/matlab/COORD.m | 51 + proxies/matlab/CoulombMatrix.m | 16 + proxies/matlab/DM_Fermi.m | 37 + proxies/matlab/DM_PRT_Fermi.m | 43 + proxies/matlab/DensityMatrix.m | 13 + proxies/matlab/DensityMatrixPRT.m | 34 + proxies/matlab/Energy.m | 34 + proxies/matlab/Energy_save_00.m | 34 + proxies/matlab/Ewald_Real_Space.m | 97 + proxies/matlab/Ewald_k_Space.m | 108 + proxies/matlab/Forces.m | 109 + proxies/matlab/Forces_save_00.m | 108 + proxies/matlab/Get_q.m | 9 + proxies/matlab/GetdC.m | 86 + proxies/matlab/GetdH.m | 38 + proxies/matlab/GetdS.m | 37 + proxies/matlab/H0_and_S.m | 95 + proxies/matlab/LoadBondIntegralParameters_H.m | 261 ++ proxies/matlab/LoadBondIntegralParameters_S.m | 123 + proxies/matlab/Main.m | 145 + proxies/matlab/Main_save_00.m | 85 + proxies/matlab/Main_save_01.m | 110 + proxies/matlab/PBC_Coulomb.m | 11 + proxies/matlab/PBC_CoulombPot.m | 29 + proxies/matlab/PBC_Energy.m | 30 + proxies/matlab/PBC_Forces.m | 36 + proxies/matlab/PBC_Hamiltonian.m | 12 + proxies/matlab/PBC_SCF.m | 21 + proxies/matlab/PBC_SCF_PRT.m | 43 + proxies/matlab/PBC_SCF_PRT_0.m | 42 + proxies/matlab/PBC_SCF_PRT_X.m | 48 + proxies/matlab/PBC_main.m | 101 + proxies/matlab/SCF.m | 50 + proxies/matlab/SCF_save_00.m | 50 + proxies/matlab/ScaleTail.m | 26 + proxies/matlab/Slater_Koster_Block.m | 104 + proxies/matlab/Slater_Koster_Pair.m | 94 + proxies/matlab/Thresh.m | 10 + proxies/matlab/nearestneighborlist.m | 67 + proxies/python/aosa_hamiltonian.py | 130 + proxies/python/chemical_potential.py | 211 ++ proxies/python/coordinates.py | 58 + proxies/python/density_matrix.py | 309 ++ proxies/python/dnnprt.py | 279 ++ proxies/python/energy_and_forces.py | 664 ++++ proxies/python/first_level.py | 441 +++ proxies/python/first_level_gpu.py | 303 ++ proxies/python/hamiltonian.py | 182 + proxies/python/hamiltonian_elements.py | 309 ++ proxies/python/hamiltonian_random.py | 57 + proxies/python/init_proxy.py | 107 + proxies/python/nonortho.py | 35 + proxies/python/proxy_global.py | 106 + proxies/python/random_numbers.py | 69 + proxies/vars | 11 + src/sedacs/charges.py | 2 +- src/sedacs/chemical_potential.py | 12 +- src/sedacs/coulombic.py | 3 +- .../driver/graph_adaptive_kernel_scf.py | 395 +++ src/sedacs/driver/graph_adaptive_scf.py | 46 +- .../driver/graph_adaptive_sp_energy_forces.py | 81 +- src/sedacs/driver/graph_kernel_byparts.py | 592 ++++ src/sedacs/driver/init.py | 6 +- src/sedacs/graph.py | 33 +- src/sedacs/interface_modules.py | 45 +- src/sedacs/mixer.py | 4 +- src/sedacs/mpi.py | 37 + src/sedacs/sdc_evals_dvals.py | 4 +- src/sedacs/sdc_hamiltonian.py | 4 +- src/sedacs/system.py | 16 + 96 files changed, 12605 insertions(+), 912 deletions(-) delete mode 100644 examples/latte_interface/bomd/water_128.xyz delete mode 100644 examples/latte_interface/scf_energy_forces/water_128.xyz create mode 100644 examples/latte_interface/scf_energy_forces_kernel/coords_100.pdb create mode 100644 examples/latte_interface/scf_energy_forces_kernel/coords_1299.pdb create mode 100644 examples/latte_interface/scf_energy_forces_kernel/coords_2955.pdb create mode 100644 examples/latte_interface/scf_energy_forces_kernel/latte.in create mode 100644 examples/latte_interface/scf_energy_forces_kernel/main.py create mode 100644 examples/latte_interface/scf_energy_forces_kernel/vars create mode 100644 proxies/c/README.md create mode 100644 proxies/c/build.sh create mode 100644 proxies/c/proxy_a.c create mode 100644 proxies/c/proxy_a.h create mode 100644 proxies/c/proxy_a_lib.c create mode 100644 proxies/fortran/CMakeLists.txt create mode 100644 proxies/fortran/compile.sh create mode 100644 proxies/fortran/compile_with_cmake.sh create mode 100644 proxies/fortran/proxy_a.F90 create mode 100644 proxies/fortran/proxy_a_lib.F90 create mode 100644 proxies/fortran/proxy_a_mod.F90 create mode 100644 proxies/matlab/AtomicDensityMatrix.m create mode 100644 proxies/matlab/BondIntegral.m create mode 100644 proxies/matlab/COORD.m create mode 100644 proxies/matlab/CoulombMatrix.m create mode 100644 proxies/matlab/DM_Fermi.m create mode 100644 proxies/matlab/DM_PRT_Fermi.m create mode 100644 proxies/matlab/DensityMatrix.m create mode 100644 proxies/matlab/DensityMatrixPRT.m create mode 100644 proxies/matlab/Energy.m create mode 100644 proxies/matlab/Energy_save_00.m create mode 100644 proxies/matlab/Ewald_Real_Space.m create mode 100644 proxies/matlab/Ewald_k_Space.m create mode 100644 proxies/matlab/Forces.m create mode 100644 proxies/matlab/Forces_save_00.m create mode 100644 proxies/matlab/Get_q.m create mode 100644 proxies/matlab/GetdC.m create mode 100644 proxies/matlab/GetdH.m create mode 100644 proxies/matlab/GetdS.m create mode 100644 proxies/matlab/H0_and_S.m create mode 100644 proxies/matlab/LoadBondIntegralParameters_H.m create mode 100644 proxies/matlab/LoadBondIntegralParameters_S.m create mode 100644 proxies/matlab/Main.m create mode 100644 proxies/matlab/Main_save_00.m create mode 100644 proxies/matlab/Main_save_01.m create mode 100644 proxies/matlab/PBC_Coulomb.m create mode 100644 proxies/matlab/PBC_CoulombPot.m create mode 100644 proxies/matlab/PBC_Energy.m create mode 100644 proxies/matlab/PBC_Forces.m create mode 100644 proxies/matlab/PBC_Hamiltonian.m create mode 100644 proxies/matlab/PBC_SCF.m create mode 100644 proxies/matlab/PBC_SCF_PRT.m create mode 100644 proxies/matlab/PBC_SCF_PRT_0.m create mode 100644 proxies/matlab/PBC_SCF_PRT_X.m create mode 100644 proxies/matlab/PBC_main.m create mode 100644 proxies/matlab/SCF.m create mode 100644 proxies/matlab/SCF_save_00.m create mode 100644 proxies/matlab/ScaleTail.m create mode 100644 proxies/matlab/Slater_Koster_Block.m create mode 100644 proxies/matlab/Slater_Koster_Pair.m create mode 100644 proxies/matlab/Thresh.m create mode 100644 proxies/matlab/nearestneighborlist.m create mode 100644 proxies/python/aosa_hamiltonian.py create mode 100644 proxies/python/chemical_potential.py create mode 100644 proxies/python/coordinates.py create mode 100644 proxies/python/density_matrix.py create mode 100644 proxies/python/dnnprt.py create mode 100644 proxies/python/energy_and_forces.py create mode 100644 proxies/python/first_level.py create mode 100644 proxies/python/first_level_gpu.py create mode 100644 proxies/python/hamiltonian.py create mode 100644 proxies/python/hamiltonian_elements.py create mode 100644 proxies/python/hamiltonian_random.py create mode 100644 proxies/python/init_proxy.py create mode 100644 proxies/python/nonortho.py create mode 100644 proxies/python/proxy_global.py create mode 100644 proxies/python/random_numbers.py create mode 100644 proxies/vars create mode 100644 src/sedacs/driver/graph_adaptive_kernel_scf.py create mode 100644 src/sedacs/driver/graph_kernel_byparts.py diff --git a/examples/latte_interface/bomd/input.in b/examples/latte_interface/bomd/input.in index c31fc353..ee3bbc85 100644 --- a/examples/latte_interface/bomd/input.in +++ b/examples/latte_interface/bomd/input.in @@ -7,14 +7,14 @@ Threshold= 1.0E-7 #CoordsFile= coords_2955.pdb CoordsFile= coords_100.pdb #CoordsFile= water_128.xyz -GraphThreshold= 0.01 +GraphThreshold= 0.0001 MaxDeg= 500 #Max graph degree Rcut= 3.0 #Radius cutoff PartitionType= Metis #PartitionType= Regular #PartitionType= MinCut -NumParts= 1 -SCFTol= 1.0E-4 +NumParts= 4 +SCFTol= 1.0E-7 Overlap= True ElectronicTemperature= 1000 MuCalculationType= #FromParts, Dynamical, None diff --git a/examples/latte_interface/bomd/main.py b/examples/latte_interface/bomd/main.py index 3406ec2e..2ef3a1e7 100644 --- a/examples/latte_interface/bomd/main.py +++ b/examples/latte_interface/bomd/main.py @@ -12,10 +12,13 @@ import torch import numpy as np import gc +from copy import deepcopy torch.set_default_dtype(torch.float64) from sedacs.driver.init import init, available_device +from sedacs.graph_partition import get_coreHaloIndices, graph_partition +from sedacs.driver.graph_kernel_byparts import get_kernel_byParts, apply_kernel_byParts, rankN_update_byParts from sedacs.driver.graph_adaptive_scf import get_adaptiveSCFDM from sedacs.driver.graph_adaptive_sp_energy_forces import get_adaptive_sp_energy_forces from sedacs.file_io import read_latte_tbparams @@ -61,6 +64,8 @@ def main(args): Temperature = args.temp # If we want to run shadow md shadow_md = args.shadow_md + # If we want to use kernel + use_kernel = args.use_kernel # Initialize periodic table pt = PeriodicTable() # Get the atomic symbols for each atom in the system @@ -72,6 +77,7 @@ def main(args): # Get the Hubbard U values for each atom in the system Hubbard_U = [latte_tbparams[symbol]["HubbardU"] for symbol in sy.symbols] Hubbard_U = np.array(Hubbard_U)[sy.types] + sy.hubbard_u = Hubbard_U # Get the atomic masses for each atom in the system Mnuc = [pt.mass[pt.get_atomic_number(symbol)] for symbol in sy.symbols] Mnuc = np.array(Mnuc)[sy.types] @@ -84,15 +90,15 @@ def main(args): ) # Read the coordinates as tensors coords = torch.tensor(sy.coords) - # Perform a graph-adaptive calculation of the charges with SCF cycles - graphDH, sy.charges, mu, parts, subSysOnRank = get_adaptiveSCFDM( + graphDH, sy.charges, mu, parts, partsCoreHalo, subSysOnRank = get_adaptiveSCFDM( sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu ) + #breakpoint() # Perform a single-point graph-adaptive calculation of the energy and forces - graphDH, charges, EPOT, FTOT, mu, parts, subSysOnRank = ( + graphDH, charges, EPOT, FTOT, mu, parts, partsCoreHalo, subSysOnRank = ( get_adaptive_sp_energy_forces( - sdc, eng, comm, rank, numranks, sy, hindex, graphDH, mu + sdc, eng, comm, rank, numranks, sy, parts, partsCoreHalo, hindex, graphDH, mu ) ) # Convert the charges to a tensor @@ -134,6 +140,7 @@ def main(args): # Record unwrapped coordsinates unwrap_coords = coords.clone().detach().double() + renew = 0 # MAIN MD LOOP {dR2(0)/dt2: V(0)->V(1/2); dn2(0)/dt2: n(0)->n(1); V(1/2): R(0)->R(1); dR2(1)/dt2: V(1/2)->V(1)} for MD_step in range(MD_Iter): # Calculate kinetic energy from particle velocities @@ -154,7 +161,7 @@ def main(args): # Here we record the time, temperature, and charges. Note that the last term, q, would be constant if not solving exact charges during MD with torch.no_grad(): Energy_dat.write( - f"{Time/1000:<16.8f} {ETOT:<16.16f} {Temperature:<16.8f} {EKIN.item():<16.16f} {EPOT.item():<16.16f}\n" + f"{Time/1000:<16.8f} {ETOT:<16.16f} {Temperature:<16.8f} {EKIN.item():<16.16f} {EPOT.item():<16.16f} {torch.sum(q).item():<16.16f} {torch.sum(n_0).item():<16.16f} {mu:<16.16f}\n" ) # Here we dump the MD trajectory @@ -173,12 +180,50 @@ def main(args): comm.Allreduce(coords, coords_sum, op=MPI.SUM) coords = coords_sum / numranks + # Caculate the residual between q[n] and n + Res = q - n_0 # Note that n_0 is n from the previous step + # if use_kernel: + if use_kernel: + if MD_step == 0 or renew == 1: + get_kernel_byParts(sdc, rank, numranks, parts, partsCoreHalo, sy, mu) + syk = deepcopy(sy) + syk.subSy_list = deepcopy(sy.subSy_list) + for i, subSy in enumerate(syk.subSy_list): + subSy.ker = deepcopy(sy.subSy_list[i].ker) + partsk = deepcopy(parts) + partsCoreHalok = deepcopy(partsCoreHalo) + #breakpoint() + #KK0 = torch.tensor(sy.subSy_list[0].ker) + #KK0 = torch.tensor(collect_kernel_byParts( + # q, n_0, sdc, rank, numranks, comm, parts, partsCoreHalo, sy + #)) + #dn2dt2 = -torch.matmul(KK0, Res) + dn2dt2 = 0 + # ker = sy.subSy_list[0].ker + #else: + # sy.subSy_list[0].ker = ker + renew = 0 + if MD_step > 0: + for i, subSy in enumerate(sy.subSy_list): + subSy.ker = deepcopy(syk.subSy_list[i].ker) + dn2dt2 = -rankN_update_byParts( + q, n_0, 6, sdc, rank, numranks, comm, parts, partsCoreHalo, sy, mu=mu + ) + #dn2dt2 = -rankN_update_byParts( + # q, n_0, 6, sdc, eng, rank, numranks, comm, partsk, partsCoreHalok, syk, hindex, mu=mu + # ) + #dn2dt2 = -torch.tensor(apply_kernel_byParts( + # q, n_0, sdc, rank, numranks, comm, partsk, syk + #)) + #breakpoint() + else: + dn2dt2 = 0.8 * Res # Propagating charge vector n for a better initial guess # Or Propagating charge vector for shadow MD n = ( 2 * n_0 - n_1 - + 0.8 * kappa * (q - n_0) + + kappa * dn2dt2 + alpha * ( C0 * n_0 @@ -210,27 +255,46 @@ def main(args): # Update sy.coords in the system object sy.coords = coords.numpy() # Update neighbor list - nl, nlTrX, nlTrY, nlTrZ = build_nlist( - sy.coords, - sy.latticeVectors, - sdc.rcut, - api="old", - rank=rank, - numranks=numranks, - verb=False, - ) - comm.Barrier() + #nl, nlTrX, nlTrY, nlTrZ = build_nlist( + # sy.coords, + # sy.latticeVectors, + # sdc.rcut, + # api="old", + # rank=rank, + # numranks=numranks, + # verb=False, + #) + #comm.Barrier() # Create initial graph based on distances - if rank == 0: - graphNL = get_initial_graph(sy.coords, nl, sdc.rcut, sdc.maxDeg) - graphNL = comm.bcast(graphNL, root=0) + #if rank == 0: + # graphNL = get_initial_graph(sy.coords, nl, sdc.rcut, sdc.maxDeg) + #graphNL = comm.bcast(graphNL, root=0) if not shadow_md: # Perform a graph-adaptive calculation of the charges with SCF cycles graphDH, sy.charges, mu, parts, subSysOnRank = get_adaptiveSCFDM( - sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu + sdc, eng, comm, rank, numranks, sy, hindex, graphDH, mu ) + #else: + # graphDH = graphNL + + if MD_step % 100 == 99: + # Partition the graph + #parts = graph_partition( + # sdc, eng, graphDH, sdc.partitionType, sdc.nparts, sy.coords, True + #) + + renew = 1 + + njumps = 1 + partsCoreHalo = [] + numCores = [] + for i in range(sdc.nparts): + coreHalo, nc, nh = get_coreHaloIndices(parts[i], graphDH, njumps) + partsCoreHalo.append(coreHalo) + numCores.append(nc) + print("MD_step, core,halo size:", MD_step, i, "=", nc, nh) # Perform a single-point graph-adaptive calculation of the energy and forces - graphDH, sy.charges, EPOT, FTOT, mu, parts, subSysOnRank = ( + graphDH, sy.charges, EPOT, FTOT, mu, parts, partsCoreHalo, subSysOnRank = ( get_adaptive_sp_energy_forces( sdc, eng, @@ -238,6 +302,8 @@ def main(args): rank, numranks, sy, + parts, + partsCoreHalo, hindex, graphDH, mu, @@ -245,15 +311,18 @@ def main(args): ) ) q = torch.tensor(sy.charges) + # Constant shift in charges to maintain exact charge neutrality + #q = q - (torch.sum(q)/len(q)) # Convert the energy and forces to tensors EPOT = torch.tensor(EPOT) FTOT = torch.tensor(FTOT) # dR2(1)/dt2: V(1/2)->V(1) V = V + 0.5 * dt * F2V * FTOT / Mnuc.unsqueeze(1) - - MD_xyz.close() - Energy_dat.close() + + if rank == 0: + MD_xyz.close() + Energy_dat.close() if __name__ == "__main__": @@ -272,7 +341,7 @@ def main(args): default="input.in", ) parser.add_argument( - "--md_iter", type=int, default=100000, help="Number of timesteps" + "--md_iter", type=int, default=10000, help="Number of timesteps" ) parser.add_argument("--dt", type=float, default=0.5, help="Timestep size (fs)") parser.add_argument( @@ -287,6 +356,12 @@ def main(args): default=1, help="Set to 1/0 to enable/disable shadow MD", ) + parser.add_argument( + "--use_kernel", + type=int, + default=1, + help="Set to 1/0 to enable/disable kernel calculation", + ) args = parser.parse_args() if args.use_torch: args.device = available_device() diff --git a/examples/latte_interface/bomd/water_128.xyz b/examples/latte_interface/bomd/water_128.xyz deleted file mode 100644 index ddf850a9..00000000 --- a/examples/latte_interface/bomd/water_128.xyz +++ /dev/null @@ -1,386 +0,0 @@ -384 -Lattice="15.66 0.0 0.0 0.0 15.66 0.0 0.0 0.0 15.66" -H 1.4821741580963135 14.427353858947754 2.953700065612793 -O 1.6885966062545776 15.210265159606934 2.3970494270324707 -H 2.3674094676971436 14.887577056884766 1.7750413417816162 -H 1.725602626800537 1.2087194919586182 10.28447151184082 -O 1.457163691520691 0.2813889980316162 10.563945770263672 -H 1.375484585762024 0.24449187517166138 11.546887397766113 -H 12.558568954467773 14.682812690734863 9.085963249206543 -O 13.374778747558594 15.202472686767578 8.868748664855957 -H 14.192708969116211 14.738236427307129 9.219833374023438 -H 6.220971584320068 10.90986442565918 3.922910690307617 -O 5.395566463470459 11.367801666259766 3.851719856262207 -H 5.097456455230713 11.388015747070312 2.87663197517395 -H 13.928208351135254 6.038353443145752 1.3187469244003296 -O 14.39126968383789 6.452458381652832 0.5244671106338501 -H 14.677336692810059 5.6653947830200195 15.641419410705566 -H 11.000219345092773 1.4569547176361084 0.45885026454925537 -O 11.63747501373291 2.104846715927124 0.8563565611839294 -H 12.253790855407715 1.5968525409698486 1.4643044471740723 -H 8.34492301940918 10.484837532043457 4.09354305267334 -O 7.658782958984375 9.694025039672852 4.098236560821533 -H 8.161250114440918 8.91158390045166 4.3958234786987305 -H 15.37078857421875 9.183189392089844 11.81903076171875 -O 0.6639226675033569 9.312712669372559 11.556085586547852 -H 1.1555242538452148 8.781630516052246 12.177814483642578 -H 2.469231367111206 4.930058479309082 6.316625118255615 -O 1.8953945636749268 5.428220272064209 6.90617036819458 -H 1.317298173904419 4.663173198699951 7.2908854484558105 -H 4.391626834869385 1.8281409740447998 2.7765512466430664 -O 5.01270055770874 1.8962875604629517 2.043304443359375 -H 4.4229350090026855 2.101100444793701 1.224356770515442 -H 11.354153633117676 9.732658386230469 1.4163808822631836 -O 12.010466575622559 10.312472343444824 1.0070639848709106 -H 12.736639022827148 9.787837982177734 0.45557060837745667 -H 15.223688125610352 4.653311729431152 13.862953186035156 -O 14.768438339233398 4.34467887878418 14.679522514343262 -H 13.97741413116455 3.8146629333496094 14.375483512878418 -H 2.5933477878570557 2.2602338790893555 4.078963756561279 -O 3.5907583236694336 1.9742355346679688 4.357860565185547 -H 3.4221041202545166 1.4155670404434204 5.144217491149902 -H 11.827882766723633 5.23652458190918 12.129922866821289 -O 11.420333862304688 4.348351001739502 12.450085639953613 -H 11.13693618774414 3.948350667953491 11.59998893737793 -H 3.122493267059326 14.13240909576416 15.377690315246582 -O 3.406907320022583 13.9873685836792 0.637580156326294 -H 4.268272399902344 14.468565940856934 0.7348317503929138 -H 11.982939720153809 3.2170681953430176 6.133591651916504 -O 12.74484920501709 3.6578142642974854 6.557803630828857 -H 12.507513046264648 4.57366418838501 6.91209077835083 -H 4.577542304992676 5.402759075164795 0.7480008006095886 -O 3.8300294876098633 5.114811420440674 0.15346001088619232 -H 3.705512046813965 5.906427383422852 15.198246002197266 -H 4.8761677742004395 2.076591730117798 14.366914749145508 -O 5.596246242523193 1.586893081665039 13.9247465133667 -H 5.811666965484619 2.142857551574707 13.113996505737305 -H 13.377649307250977 1.042777180671692 9.423595428466797 -O 13.151018142700195 1.8292531967163086 10.050421714782715 -H 13.835417747497559 2.495191812515259 9.988792419433594 -H 7.997742176055908 11.266412734985352 9.060665130615234 -O 8.366767883300781 10.735424995422363 8.289185523986816 -H 7.682319641113281 10.126465797424316 8.000984191894531 -H 6.61982536315918 5.436073303222656 1.7336512804031372 -O 5.908255577087402 6.083886623382568 1.5545637607574463 -H 5.400964736938477 6.177191257476807 2.360203504562378 -H 13.306570053100586 8.240872383117676 12.238951683044434 -O 13.812541961669922 8.967954635620117 12.561972618103027 -H 13.299116134643555 9.732105255126953 12.134977340698242 -H 13.150106430053711 10.962871551513672 2.506638765335083 -O 13.738313674926758 11.23777961730957 3.2231998443603516 -H 14.14203929901123 12.027764320373535 2.7478020191192627 -H 9.468901634216309 8.692893028259277 11.753732681274414 -O 9.996575355529785 8.272689819335938 11.04357624053955 -H 9.358142852783203 7.589511394500732 10.609314918518066 -H 9.184500694274902 12.010608673095703 3.185051918029785 -O 9.332493782043457 11.644781112670898 4.082911014556885 -H 10.308004379272461 11.81727123260498 4.252378463745117 -H 14.13718318939209 3.084084987640381 6.320530414581299 -O 15.026741027832031 2.7198779582977295 6.185760021209717 -H 15.581278800964355 2.8094310760498047 7.003511428833008 -H 1.805783987045288 13.039594650268555 13.465221405029297 -O 1.2811273336410522 12.223275184631348 13.247485160827637 -H 0.8052940368652344 11.954380989074707 14.096330642700195 -H 8.574115753173828 12.27851676940918 1.1447495222091675 -O 9.307392120361328 12.729674339294434 1.5993788242340088 -H 8.992727279663086 13.581256866455078 1.8648567199707031 -H 0.4504242539405823 2.9571290016174316 4.610954761505127 -O 1.1356279850006104 2.80627703666687 3.858980894088745 -H 0.6570261716842651 2.2529356479644775 3.161118984222412 -H 2.2259984016418457 1.135374665260315 7.197758197784424 -O 2.8197834491729736 0.5862197875976562 6.640344619750977 -H 3.361316680908203 0.13465867936611176 7.2745137214660645 -H 2.7605855464935303 3.5155222415924072 10.508090019226074 -O 2.7270185947418213 2.7197012901306152 9.998039245605469 -H 3.6602747440338135 2.449582576751709 9.736455917358398 -H 5.481457233428955 0.6800147891044617 1.2360972166061401 -O 5.735907077789307 15.55340576171875 0.6875582933425903 -H 5.908614158630371 0.24427083134651184 15.490666389465332 -H 6.483280658721924 6.651552677154541 12.702972412109375 -O 6.861117839813232 5.836682319641113 12.391767501831055 -H 7.664957046508789 5.7625226974487305 13.000656127929688 -H 5.648747444152832 3.2264184951782227 8.506119728088379 -O 5.52994966506958 2.848599910736084 9.409486770629883 -H 6.039980888366699 2.0285658836364746 9.292366981506348 -H 12.85450553894043 6.765137195587158 10.680105209350586 -O 12.331360816955566 6.957432270050049 11.530010223388672 -H 11.486471176147461 7.264204025268555 11.158045768737793 -H 7.362239837646484 9.154353141784668 0.3254317045211792 -O 7.498302459716797 9.510848999023438 15.109041213989258 -H 8.419239044189453 9.094351768493652 14.665138244628906 -H 1.5374337434768677 4.2605109214782715 2.7824814319610596 -O 1.6234899759292603 5.16341495513916 2.2621734142303467 -H 2.4345974922180176 5.093528747558594 1.753399133682251 -H 13.98061466217041 13.565018653869629 0.982430636882782 -O 13.24919319152832 14.127765655517578 0.6269434690475464 -H 12.569368362426758 13.48637866973877 0.3310380280017853 -H 3.5146663188934326 10.071371078491211 1.0377812385559082 -O 2.739107131958008 9.517007827758789 0.8543626070022583 -H 2.8032007217407227 8.92596435546875 1.6306871175765991 -H 3.2404215335845947 9.397064208984375 7.563103199005127 -O 3.697007656097412 10.221046447753906 7.237059116363525 -H 3.5571937561035156 10.893165588378906 7.9507975578308105 -H 9.887673377990723 12.222174644470215 12.364692687988281 -O 9.317317962646484 13.004202842712402 11.984381675720215 -H 9.826249122619629 13.767129898071289 12.294698715209961 -H 14.60256576538086 1.0523858070373535 6.485602855682373 -O 14.413382530212402 0.06270215660333633 6.496177673339844 -H 14.147909164428711 15.534577369689941 7.447587966918945 -H 13.379937171936035 6.094424724578857 8.554449081420898 -O 13.894918441772461 6.2347235679626465 9.342596054077148 -H 14.61241626739502 6.858521938323975 9.085838317871094 -H 8.004314422607422 12.405964851379395 11.07300090789795 -O 7.369335651397705 12.221914291381836 10.350719451904297 -H 6.828718185424805 13.049220085144043 10.023193359375 -H 6.5086822509765625 14.756935119628906 4.994861602783203 -O 6.839446544647217 15.60968017578125 4.6459126472473145 -H 6.100698471069336 0.509876012802124 4.77648401260376 -H 1.814298391342163 7.485466480255127 14.199212074279785 -O 0.9792758822441101 7.4431376457214355 13.722976684570312 -H 0.34630855917930603 7.4032135009765625 14.47954273223877 -H 6.28085994720459 13.820106506347656 13.516830444335938 -O 6.905226230621338 13.168272972106934 13.857548713684082 -H 7.748592376708984 13.196846961975098 13.40528678894043 -H 2.5069146156311035 11.916142463684082 9.840462684631348 -O 2.6829140186309814 12.13232135772705 8.878107070922852 -H 1.8113011121749878 12.242073059082031 8.437335968017578 -H 14.037789344787598 9.845786094665527 4.642851829528809 -O 13.800369262695312 9.396403312683105 5.5100417137146 -H 14.389450073242188 8.535675048828125 5.423510551452637 -H 12.178966522216797 3.552061080932617 13.457749366760254 -O 12.67518424987793 2.939744710922241 14.132843971252441 -H 12.050117492675781 2.740718126296997 14.851271629333496 -H 6.341159820556641 4.153588771820068 12.246420860290527 -O 5.721994876861572 3.38653564453125 12.11013412475586 -H 5.833896160125732 3.1198267936706543 11.189043045043945 -H 0.4187822639942169 6.928407669067383 5.925801753997803 -O 15.306794166564941 7.189908027648926 5.43982458114624 -H 0.07627714425325394 7.3125996589660645 4.559133529663086 -H 15.205296516418457 13.601235389709473 10.856249809265137 -O 15.426885604858398 14.0115385055542 9.955629348754883 -H 0.4404774010181427 14.725579261779785 10.123786926269531 -H 7.781744480133057 6.341546058654785 10.87021255493164 -O 8.193033218383789 6.693912982940674 10.09223461151123 -H 7.419920921325684 6.874934673309326 9.521349906921387 -H 4.713289260864258 13.532459259033203 7.1375813484191895 -O 4.18504524230957 13.934209823608398 7.856135368347168 -H 3.663506269454956 13.236863136291504 8.294808387756348 -H 1.4324342012405396 7.933252811431885 8.537219047546387 -O 2.39997935295105 7.775256156921387 8.192770004272461 -H 2.2801403999328613 6.949921607971191 7.6617207527160645 -H 0.5963254570960999 6.013045310974121 12.672981262207031 -O 0.5425719022750854 4.989353179931641 12.51000690460205 -H 1.4733445644378662 4.74129056930542 12.26429271697998 -H 5.787660598754883 12.561777114868164 4.9811110496521 -O 5.850313663482666 13.304183006286621 5.696791172027588 -H 6.695471286773682 13.148829460144043 6.1641845703125 -H 9.32719898223877 8.223834991455078 1.8639791011810303 -O 10.29822063446045 8.110273361206055 1.9925719499588013 -H 10.310250282287598 7.87868595123291 2.945894479751587 -H 0.277807354927063 3.5526158809661865 8.722700119018555 -O 0.9846296906471252 3.210406541824341 8.203073501586914 -H 1.7031030654907227 3.0266921520233154 8.867362976074219 -H 2.8105833530426025 2.196861982345581 15.392070770263672 -O 3.735032796859741 2.4994215965270996 15.570079803466797 -H 3.644773006439209 3.4426615238189697 0.03853387013077736 -H 14.682604789733887 1.0238474607467651 2.0653231143951416 -O 15.566673278808594 1.3636430501937866 1.7907549142837524 -H 0.5717520117759705 0.6591038703918457 1.8086328506469727 -H 11.107076644897461 8.861739158630371 7.134167671203613 -O 11.434098243713379 8.342004776000977 6.366227149963379 -H 12.278743743896484 8.585103988647461 6.036701679229736 -H 6.849724292755127 2.226242780685425 14.659040451049805 -O 7.6959028244018555 2.413717269897461 15.109258651733398 -H 8.172039031982422 3.1463210582733154 14.650622367858887 -H 4.415694236755371 12.286710739135742 1.0233668088912964 -O 4.88289213180542 11.490494728088379 1.3367034196853638 -H 5.81308126449585 11.642242431640625 0.9043989777565002 -H 10.558619499206543 9.060455322265625 9.619710922241211 -O 10.549599647521973 9.386129379272461 8.682696342468262 -H 9.6725492477417 9.819774627685547 8.593550682067871 -H 6.1465864181518555 15.147404670715332 9.628643035888672 -O 5.529297351837158 14.445521354675293 9.938332557678223 -H 4.890136241912842 14.265419006347656 9.203654289245605 -H 12.137746810913086 14.339106559753418 4.88058614730835 -O 12.554288864135742 15.224326133728027 4.790942668914795 -H 13.392069816589355 15.262238502502441 5.262670993804932 -H 12.538585662841797 4.795741558074951 2.6958494186401367 -O 13.156197547912598 5.574193000793457 2.774204730987549 -H 13.542095184326172 5.429687976837158 3.6601510047912598 -H 1.6302706003189087 14.983660697937012 5.979812145233154 -O 0.8948200941085815 14.330414772033691 6.0626373291015625 -H 0.1337418407201767 14.884979248046875 6.267165660858154 -H 4.088843822479248 7.9247822761535645 14.16343879699707 -O 3.351106643676758 7.655316352844238 14.735418319702148 -H 3.2007994651794434 8.391205787658691 15.35331916809082 -H 0.15970730781555176 12.594325065612793 2.4045615196228027 -O 15.217007637023926 12.903790473937988 1.7151750326156616 -H 15.467392921447754 12.415807723999023 0.8731029033660889 -H 10.299698829650879 7.86765193939209 5.2782793045043945 -O 9.465031623840332 7.6437177658081055 4.793709754943848 -H 9.516728401184082 6.686868667602539 4.577350616455078 -H 11.606966972351074 11.700885772705078 0.35497593879699707 -O 11.372387886047363 12.519648551940918 15.574257850646973 -H 10.634315490722656 12.839116096496582 0.46611565351486206 -H 8.778069496154785 1.2632012367248535 15.487536430358887 -O 9.388166427612305 0.5421920418739319 0.13583745062351227 -H 9.037282943725586 0.09930628538131714 0.9319953322410583 -H 6.16838264465332 5.261773586273193 7.558151721954346 -O 6.098697662353516 4.416169166564941 7.145912170410156 -H 7.055895805358887 4.16866397857666 7.010154724121094 -H 7.392298221588135 10.838863372802734 15.570189476013184 -O 7.205356597900391 11.764328956604004 0.33388379216194153 -H 7.023780345916748 12.40236759185791 15.264869689941406 -H 8.928775787353516 4.274104595184326 5.8341803550720215 -O 8.753131866455078 3.6826674938201904 6.5963945388793945 -H 8.974727630615234 2.730682373046875 6.358644008636475 -H 0.35756778717041016 3.3287155628204346 15.077012062072754 -O 0.9291011691093445 2.5445761680603027 15.223231315612793 -H 0.5748293399810791 2.0781967639923096 0.3547714650630951 -H 4.015512466430664 3.467869758605957 4.926387310028076 -O 4.089820861816406 4.415233612060547 5.229217529296875 -H 4.887458801269531 4.509295463562012 5.778048038482666 -H 5.291957855224609 14.813364028930664 11.435693740844727 -O 5.140069007873535 14.953418731689453 12.421006202697754 -H 5.216044902801514 0.23042252659797668 12.654684066772461 -H 13.444220542907715 11.729223251342773 11.851582527160645 -O 12.642805099487305 11.136754989624023 11.598742485046387 -H 12.548523902893066 11.20355224609375 10.628812789916992 -H 9.697056770324707 15.593395233154297 14.027965545654297 -O 10.087967872619629 15.423428535461426 13.162454605102539 -H 11.05064868927002 0.002158439252525568 13.155196189880371 -H 2.523853063583374 11.595932006835938 12.188504219055176 -O 2.7947349548339844 11.257299423217773 11.32616901397705 -H 2.0624139308929443 10.607105255126953 11.156081199645996 -H 13.958531379699707 8.130409240722656 15.528944969177246 -O 13.822677612304688 9.02670955657959 15.227170944213867 -H 13.791452407836914 9.062285423278809 14.228338241577148 -H 10.27184772491455 9.424518585205078 13.943780899047852 -O 9.732276916503906 8.618180274963379 14.051572799682617 -H 10.166350364685059 8.033967971801758 14.658818244934082 -H 8.461220741271973 12.057075500488281 7.043845176696777 -O 8.419132232666016 12.80543041229248 6.415385723114014 -H 8.736284255981445 12.338397979736328 5.5919036865234375 -H 8.171420097351074 0.7793318033218384 5.426231861114502 -O 8.820952415466309 1.2351326942443848 6.013558864593506 -H 9.01926326751709 0.6126450300216675 6.739671230316162 -H 2.0820090770721436 7.869522571563721 3.1253793239593506 -O 2.9208269119262695 8.372122764587402 3.1731083393096924 -H 2.627509355545044 9.106399536132812 3.720787525177002 -H 11.650372505187988 10.628031730651855 8.698492050170898 -O 12.256834030151367 11.429168701171875 8.799505233764648 -H 13.083629608154297 11.129518508911133 8.284788131713867 -H 13.960386276245117 14.537196159362793 14.816256523132324 -O 14.3788480758667 14.84691047668457 13.965582847595215 -H 13.691018104553223 15.364837646484375 13.521903038024902 -H 11.58198356628418 1.196730613708496 5.081545829772949 -O 11.163005828857422 2.0494470596313477 5.276447772979736 -H 10.318563461303711 1.797735571861267 5.718932151794434 -H 6.0017476081848145 10.59385871887207 10.80034065246582 -O 5.272309303283691 10.05134105682373 11.150882720947266 -H 4.443428039550781 10.651139259338379 11.057957649230957 -H 12.516849517822266 11.899116516113281 4.271182060241699 -O 11.869437217712402 12.347843170166016 4.853531837463379 -H 12.166669845581055 12.171024322509766 5.7557244300842285 -H 15.470584869384766 4.516737461090088 11.073837280273438 -O 15.1124849319458 4.111335277557373 10.25562858581543 -H 14.591557502746582 4.877866744995117 9.938982963562012 -H 15.495829582214355 12.599084854125977 12.530135154724121 -O 14.549777030944824 12.876575469970703 12.166041374206543 -H 14.274829864501953 13.484247207641602 12.92894172668457 -H 4.544622421264648 5.858673572540283 4.278730869293213 -O 4.853733062744141 6.651581287384033 3.80159854888916 -H 4.038316249847412 7.112107276916504 3.6127209663391113 -H 11.086899757385254 2.9105334281921387 3.527799129486084 -O 11.044354438781738 3.5479931831359863 2.813129425048828 -H 11.100714683532715 3.017974376678467 2.005096435546875 -H 11.167326927185059 5.955437660217285 0.33261048793792725 -O 10.39560604095459 6.435065746307373 0.020402710884809494 -H 10.094603538513184 6.954756259918213 0.794249415397644 -H 5.193816661834717 9.804295539855957 7.193893909454346 -O 6.119728088378906 9.39712905883789 7.226724624633789 -H 6.320915699005127 9.148200988769531 6.31579065322876 -H 10.59584903717041 3.775369882583618 9.694656372070312 -O 10.687355041503906 2.999478340148926 10.27226734161377 -H 11.493496894836426 2.6317555904388428 9.933670043945312 -H 9.679096221923828 4.952756404876709 13.074913024902344 -O 8.934259414672852 4.986400127410889 13.691017150878906 -H 9.434240341186523 5.47733211517334 14.371708869934082 -H 3.9072349071502686 4.0586981773376465 11.940484046936035 -O 3.154937267303467 4.696625709533691 12.053990364074707 -H 3.5881435871124268 5.517663955688477 11.802338600158691 -H 0.2335490584373474 0.01581624709069729 13.774118423461914 -O 0.980350911617279 0.5342038869857788 13.378776550292969 -H 0.9922274947166443 1.4501113891601562 13.837281227111816 -H 12.65897274017334 0.9930011630058289 11.683954238891602 -O 12.707582473754883 0.764843225479126 12.696332931518555 -H 12.694315910339355 1.5772038698196411 13.278538703918457 -H 10.812484741210938 11.850899696350098 14.067712783813477 -O 10.624994277954102 11.294839859008789 13.30173397064209 -H 11.430129051208496 11.36072826385498 12.707429885864258 -H 7.020813941955566 7.331269264221191 1.747533917427063 -O 7.554996013641357 8.1338529586792 1.842114806175232 -H 7.4181599617004395 8.49007797241211 2.763763666152954 -H 11.144770622253418 5.892538547515869 8.100217819213867 -O 12.011418342590332 6.053420543670654 7.622436046600342 -H 11.807604789733887 6.768427848815918 7.026505947113037 -H 0.804131269454956 13.10036849975586 4.533726215362549 -O 1.1628715991973877 12.663919448852539 3.6855170726776123 -H 1.7346456050872803 11.923086166381836 3.9333012104034424 -H 9.218413352966309 1.9028451442718506 10.826943397521973 -O 8.582201957702637 1.300583004951477 11.322752952575684 -H 9.201321601867676 0.7191085815429688 11.809184074401855 -H 3.442178726196289 14.570088386535645 13.23493766784668 -O 2.64837646484375 14.339696884155273 13.757745742797852 -H 2.056213617324829 15.07002067565918 13.468094825744629 -H 6.184440612792969 8.607916831970215 14.012269973754883 -O 5.613175392150879 8.24959659576416 13.366471290588379 -H 5.421210289001465 8.999065399169922 12.734549522399902 -H 14.156079292297363 10.09754753112793 6.937656879425049 -O 14.381294250488281 10.39493465423584 7.833716869354248 -H 15.031318664550781 11.204416275024414 7.830630302429199 -H 9.186308860778809 5.373661041259766 9.201058387756348 -O 9.884927749633789 4.853215217590332 8.791373252868652 -H 9.495500564575195 4.389050006866455 7.994511127471924 -H 7.909711837768555 0.8771836757659912 10.073674201965332 -O 7.3992815017700195 0.40500327944755554 9.375271797180176 -H 8.047890663146973 0.01646227203309536 8.824193954467773 -H 4.144155025482178 7.798429012298584 11.0037202835083 -O 3.6634180545806885 7.110377311706543 10.5337553024292 -H 3.0318245887756348 7.595344543457031 9.977286338806152 -H 11.543298721313477 12.845231056213379 9.526606559753418 -O 11.121271133422852 13.702033042907715 9.871810913085938 -H 10.621376991271973 13.381515502929688 10.645342826843262 -H 7.287951469421387 15.405527114868164 1.4838590621948242 -O 8.058247566223145 15.133753776550293 2.1102092266082764 -H 7.733454704284668 15.314888954162598 3.0118229389190674 -H 5.935088634490967 7.812267303466797 7.968081951141357 -O 6.042677879333496 6.951498031616211 8.45356559753418 -H 5.2108025550842285 6.850614070892334 8.959635734558105 -H 15.26892375946045 9.244001388549805 8.84305191040039 -O 0.033080607652664185 8.36771297454834 9.159706115722656 -H 0.16065479815006256 8.65696907043457 10.071883201599121 -H 15.44448471069336 7.283434867858887 2.2880680561065674 -O 0.4308568835258484 7.290805816650391 2.960726737976074 -H 0.8542476892471313 6.4178080558776855 2.8072118759155273 -H 6.653284549713135 3.0818610191345215 2.4921748638153076 -O 7.361125946044922 3.674710988998413 2.2265164852142334 -H 7.656304359436035 3.247504234313965 1.4033161401748657 -H 13.179733276367188 15.35033893585205 1.7865592241287231 -O 13.136012077331543 0.4361955523490906 2.404041290283203 -H 13.092921257019043 15.597688674926758 3.281696081161499 -H 3.2176342010498047 10.340422630310059 5.482553958892822 -O 2.859381914138794 10.761625289916992 4.600158214569092 -H 3.671846389770508 10.996495246887207 4.227005958557129 -H 9.0103178024292 14.254643440246582 7.299729824066162 -O 9.379074096679688 15.032605171203613 7.842066287994385 -H 9.993480682373047 14.663202285766602 8.487648963928223 -H 1.057732105255127 10.423288345336914 0.49331533908843994 -O 0.2989242374897003 10.900001525878906 0.0640338882803917 -H 15.468161582946777 10.141322135925293 15.32434368133545 -H 0.5501918792724609 13.092039108276367 7.281371593475342 -O 0.34184548258781433 12.450984001159668 7.994649887084961 -H 0.06924410164356232 13.057560920715332 8.765048027038574 -H 9.83470630645752 4.528668403625488 3.769052028656006 -O 9.009892463684082 4.8917107582092285 4.168781280517578 -H 8.33976936340332 4.487730026245117 3.5564870834350586 diff --git a/examples/latte_interface/scf_energy_forces/input.in b/examples/latte_interface/scf_energy_forces/input.in index ed6f495f..510820fa 100644 --- a/examples/latte_interface/scf_energy_forces/input.in +++ b/examples/latte_interface/scf_energy_forces/input.in @@ -14,7 +14,7 @@ PartitionType= Metis #PartitionType= Regular #PartitionType= MinCut NumParts= 1 -SCFTol= 1.0E-6 +SCFTol= 1.0E-12 Overlap= True ElectronicTemperature= 1000 MuCalculationType= #FromParts, Dynamical, None diff --git a/examples/latte_interface/scf_energy_forces/main.py b/examples/latte_interface/scf_energy_forces/main.py index 8aa7460a..16a39ab0 100644 --- a/examples/latte_interface/scf_energy_forces/main.py +++ b/examples/latte_interface/scf_energy_forces/main.py @@ -15,6 +15,7 @@ from sedacs.driver.graph_adaptive_scf import get_adaptiveSCFDM from sedacs.driver.graph_adaptive_sp_energy_forces import get_adaptive_sp_energy_forces from sedacs.driver.init import get_args, init +from sedacs.file_io import read_latte_tbparams from sedacs.charges import get_charges import sedacs.globals as gl @@ -33,15 +34,23 @@ sdc.verb = True +# Load the LATTE tight-binding parameters +latte_tbparams = read_latte_tbparams( + "../../../parameters/latte/TBparam/electrons.dat" +) +# Get the Hubbard U values for each atom in the system +Hubbard_U = [latte_tbparams[symbol]["HubbardU"] for symbol in sy.symbols] +Hubbard_U = np.array(Hubbard_U)[sy.types] +sy.hubbard_u = Hubbard_U + # Perform a graph-adaptive calculation of the density matrix through SCF cycles mu = 0.0 -graphDH, sy.charges, mu, parts, subSysOnRank = get_adaptiveSCFDM( +graphDH, sy.charges, mu, parts, partsCoreHalo, subSysOnRank = get_adaptiveSCFDM( sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu ) # Perform a single-point graph-adaptive calculation of the energy and forces -graphDH, sy.charges, energy, forces, mu, parts, subSysOnRank = get_adaptive_sp_energy_forces( - sdc, eng, comm, rank, numranks, sy, hindex, graphDH, mu +graphDH, sy.charges, energy, forces, mu, parts, partsCoreHalo, subSysOnRank = get_adaptive_sp_energy_forces( + sdc, eng, comm, rank, numranks, sy, parts, partsCoreHalo, hindex, graphDH, mu ) - print("total energy:", energy) print("forces:", forces[0]) diff --git a/examples/latte_interface/scf_energy_forces/water_128.xyz b/examples/latte_interface/scf_energy_forces/water_128.xyz deleted file mode 100644 index ddf850a9..00000000 --- a/examples/latte_interface/scf_energy_forces/water_128.xyz +++ /dev/null @@ -1,386 +0,0 @@ -384 -Lattice="15.66 0.0 0.0 0.0 15.66 0.0 0.0 0.0 15.66" -H 1.4821741580963135 14.427353858947754 2.953700065612793 -O 1.6885966062545776 15.210265159606934 2.3970494270324707 -H 2.3674094676971436 14.887577056884766 1.7750413417816162 -H 1.725602626800537 1.2087194919586182 10.28447151184082 -O 1.457163691520691 0.2813889980316162 10.563945770263672 -H 1.375484585762024 0.24449187517166138 11.546887397766113 -H 12.558568954467773 14.682812690734863 9.085963249206543 -O 13.374778747558594 15.202472686767578 8.868748664855957 -H 14.192708969116211 14.738236427307129 9.219833374023438 -H 6.220971584320068 10.90986442565918 3.922910690307617 -O 5.395566463470459 11.367801666259766 3.851719856262207 -H 5.097456455230713 11.388015747070312 2.87663197517395 -H 13.928208351135254 6.038353443145752 1.3187469244003296 -O 14.39126968383789 6.452458381652832 0.5244671106338501 -H 14.677336692810059 5.6653947830200195 15.641419410705566 -H 11.000219345092773 1.4569547176361084 0.45885026454925537 -O 11.63747501373291 2.104846715927124 0.8563565611839294 -H 12.253790855407715 1.5968525409698486 1.4643044471740723 -H 8.34492301940918 10.484837532043457 4.09354305267334 -O 7.658782958984375 9.694025039672852 4.098236560821533 -H 8.161250114440918 8.91158390045166 4.3958234786987305 -H 15.37078857421875 9.183189392089844 11.81903076171875 -O 0.6639226675033569 9.312712669372559 11.556085586547852 -H 1.1555242538452148 8.781630516052246 12.177814483642578 -H 2.469231367111206 4.930058479309082 6.316625118255615 -O 1.8953945636749268 5.428220272064209 6.90617036819458 -H 1.317298173904419 4.663173198699951 7.2908854484558105 -H 4.391626834869385 1.8281409740447998 2.7765512466430664 -O 5.01270055770874 1.8962875604629517 2.043304443359375 -H 4.4229350090026855 2.101100444793701 1.224356770515442 -H 11.354153633117676 9.732658386230469 1.4163808822631836 -O 12.010466575622559 10.312472343444824 1.0070639848709106 -H 12.736639022827148 9.787837982177734 0.45557060837745667 -H 15.223688125610352 4.653311729431152 13.862953186035156 -O 14.768438339233398 4.34467887878418 14.679522514343262 -H 13.97741413116455 3.8146629333496094 14.375483512878418 -H 2.5933477878570557 2.2602338790893555 4.078963756561279 -O 3.5907583236694336 1.9742355346679688 4.357860565185547 -H 3.4221041202545166 1.4155670404434204 5.144217491149902 -H 11.827882766723633 5.23652458190918 12.129922866821289 -O 11.420333862304688 4.348351001739502 12.450085639953613 -H 11.13693618774414 3.948350667953491 11.59998893737793 -H 3.122493267059326 14.13240909576416 15.377690315246582 -O 3.406907320022583 13.9873685836792 0.637580156326294 -H 4.268272399902344 14.468565940856934 0.7348317503929138 -H 11.982939720153809 3.2170681953430176 6.133591651916504 -O 12.74484920501709 3.6578142642974854 6.557803630828857 -H 12.507513046264648 4.57366418838501 6.91209077835083 -H 4.577542304992676 5.402759075164795 0.7480008006095886 -O 3.8300294876098633 5.114811420440674 0.15346001088619232 -H 3.705512046813965 5.906427383422852 15.198246002197266 -H 4.8761677742004395 2.076591730117798 14.366914749145508 -O 5.596246242523193 1.586893081665039 13.9247465133667 -H 5.811666965484619 2.142857551574707 13.113996505737305 -H 13.377649307250977 1.042777180671692 9.423595428466797 -O 13.151018142700195 1.8292531967163086 10.050421714782715 -H 13.835417747497559 2.495191812515259 9.988792419433594 -H 7.997742176055908 11.266412734985352 9.060665130615234 -O 8.366767883300781 10.735424995422363 8.289185523986816 -H 7.682319641113281 10.126465797424316 8.000984191894531 -H 6.61982536315918 5.436073303222656 1.7336512804031372 -O 5.908255577087402 6.083886623382568 1.5545637607574463 -H 5.400964736938477 6.177191257476807 2.360203504562378 -H 13.306570053100586 8.240872383117676 12.238951683044434 -O 13.812541961669922 8.967954635620117 12.561972618103027 -H 13.299116134643555 9.732105255126953 12.134977340698242 -H 13.150106430053711 10.962871551513672 2.506638765335083 -O 13.738313674926758 11.23777961730957 3.2231998443603516 -H 14.14203929901123 12.027764320373535 2.7478020191192627 -H 9.468901634216309 8.692893028259277 11.753732681274414 -O 9.996575355529785 8.272689819335938 11.04357624053955 -H 9.358142852783203 7.589511394500732 10.609314918518066 -H 9.184500694274902 12.010608673095703 3.185051918029785 -O 9.332493782043457 11.644781112670898 4.082911014556885 -H 10.308004379272461 11.81727123260498 4.252378463745117 -H 14.13718318939209 3.084084987640381 6.320530414581299 -O 15.026741027832031 2.7198779582977295 6.185760021209717 -H 15.581278800964355 2.8094310760498047 7.003511428833008 -H 1.805783987045288 13.039594650268555 13.465221405029297 -O 1.2811273336410522 12.223275184631348 13.247485160827637 -H 0.8052940368652344 11.954380989074707 14.096330642700195 -H 8.574115753173828 12.27851676940918 1.1447495222091675 -O 9.307392120361328 12.729674339294434 1.5993788242340088 -H 8.992727279663086 13.581256866455078 1.8648567199707031 -H 0.4504242539405823 2.9571290016174316 4.610954761505127 -O 1.1356279850006104 2.80627703666687 3.858980894088745 -H 0.6570261716842651 2.2529356479644775 3.161118984222412 -H 2.2259984016418457 1.135374665260315 7.197758197784424 -O 2.8197834491729736 0.5862197875976562 6.640344619750977 -H 3.361316680908203 0.13465867936611176 7.2745137214660645 -H 2.7605855464935303 3.5155222415924072 10.508090019226074 -O 2.7270185947418213 2.7197012901306152 9.998039245605469 -H 3.6602747440338135 2.449582576751709 9.736455917358398 -H 5.481457233428955 0.6800147891044617 1.2360972166061401 -O 5.735907077789307 15.55340576171875 0.6875582933425903 -H 5.908614158630371 0.24427083134651184 15.490666389465332 -H 6.483280658721924 6.651552677154541 12.702972412109375 -O 6.861117839813232 5.836682319641113 12.391767501831055 -H 7.664957046508789 5.7625226974487305 13.000656127929688 -H 5.648747444152832 3.2264184951782227 8.506119728088379 -O 5.52994966506958 2.848599910736084 9.409486770629883 -H 6.039980888366699 2.0285658836364746 9.292366981506348 -H 12.85450553894043 6.765137195587158 10.680105209350586 -O 12.331360816955566 6.957432270050049 11.530010223388672 -H 11.486471176147461 7.264204025268555 11.158045768737793 -H 7.362239837646484 9.154353141784668 0.3254317045211792 -O 7.498302459716797 9.510848999023438 15.109041213989258 -H 8.419239044189453 9.094351768493652 14.665138244628906 -H 1.5374337434768677 4.2605109214782715 2.7824814319610596 -O 1.6234899759292603 5.16341495513916 2.2621734142303467 -H 2.4345974922180176 5.093528747558594 1.753399133682251 -H 13.98061466217041 13.565018653869629 0.982430636882782 -O 13.24919319152832 14.127765655517578 0.6269434690475464 -H 12.569368362426758 13.48637866973877 0.3310380280017853 -H 3.5146663188934326 10.071371078491211 1.0377812385559082 -O 2.739107131958008 9.517007827758789 0.8543626070022583 -H 2.8032007217407227 8.92596435546875 1.6306871175765991 -H 3.2404215335845947 9.397064208984375 7.563103199005127 -O 3.697007656097412 10.221046447753906 7.237059116363525 -H 3.5571937561035156 10.893165588378906 7.9507975578308105 -H 9.887673377990723 12.222174644470215 12.364692687988281 -O 9.317317962646484 13.004202842712402 11.984381675720215 -H 9.826249122619629 13.767129898071289 12.294698715209961 -H 14.60256576538086 1.0523858070373535 6.485602855682373 -O 14.413382530212402 0.06270215660333633 6.496177673339844 -H 14.147909164428711 15.534577369689941 7.447587966918945 -H 13.379937171936035 6.094424724578857 8.554449081420898 -O 13.894918441772461 6.2347235679626465 9.342596054077148 -H 14.61241626739502 6.858521938323975 9.085838317871094 -H 8.004314422607422 12.405964851379395 11.07300090789795 -O 7.369335651397705 12.221914291381836 10.350719451904297 -H 6.828718185424805 13.049220085144043 10.023193359375 -H 6.5086822509765625 14.756935119628906 4.994861602783203 -O 6.839446544647217 15.60968017578125 4.6459126472473145 -H 6.100698471069336 0.509876012802124 4.77648401260376 -H 1.814298391342163 7.485466480255127 14.199212074279785 -O 0.9792758822441101 7.4431376457214355 13.722976684570312 -H 0.34630855917930603 7.4032135009765625 14.47954273223877 -H 6.28085994720459 13.820106506347656 13.516830444335938 -O 6.905226230621338 13.168272972106934 13.857548713684082 -H 7.748592376708984 13.196846961975098 13.40528678894043 -H 2.5069146156311035 11.916142463684082 9.840462684631348 -O 2.6829140186309814 12.13232135772705 8.878107070922852 -H 1.8113011121749878 12.242073059082031 8.437335968017578 -H 14.037789344787598 9.845786094665527 4.642851829528809 -O 13.800369262695312 9.396403312683105 5.5100417137146 -H 14.389450073242188 8.535675048828125 5.423510551452637 -H 12.178966522216797 3.552061080932617 13.457749366760254 -O 12.67518424987793 2.939744710922241 14.132843971252441 -H 12.050117492675781 2.740718126296997 14.851271629333496 -H 6.341159820556641 4.153588771820068 12.246420860290527 -O 5.721994876861572 3.38653564453125 12.11013412475586 -H 5.833896160125732 3.1198267936706543 11.189043045043945 -H 0.4187822639942169 6.928407669067383 5.925801753997803 -O 15.306794166564941 7.189908027648926 5.43982458114624 -H 0.07627714425325394 7.3125996589660645 4.559133529663086 -H 15.205296516418457 13.601235389709473 10.856249809265137 -O 15.426885604858398 14.0115385055542 9.955629348754883 -H 0.4404774010181427 14.725579261779785 10.123786926269531 -H 7.781744480133057 6.341546058654785 10.87021255493164 -O 8.193033218383789 6.693912982940674 10.09223461151123 -H 7.419920921325684 6.874934673309326 9.521349906921387 -H 4.713289260864258 13.532459259033203 7.1375813484191895 -O 4.18504524230957 13.934209823608398 7.856135368347168 -H 3.663506269454956 13.236863136291504 8.294808387756348 -H 1.4324342012405396 7.933252811431885 8.537219047546387 -O 2.39997935295105 7.775256156921387 8.192770004272461 -H 2.2801403999328613 6.949921607971191 7.6617207527160645 -H 0.5963254570960999 6.013045310974121 12.672981262207031 -O 0.5425719022750854 4.989353179931641 12.51000690460205 -H 1.4733445644378662 4.74129056930542 12.26429271697998 -H 5.787660598754883 12.561777114868164 4.9811110496521 -O 5.850313663482666 13.304183006286621 5.696791172027588 -H 6.695471286773682 13.148829460144043 6.1641845703125 -H 9.32719898223877 8.223834991455078 1.8639791011810303 -O 10.29822063446045 8.110273361206055 1.9925719499588013 -H 10.310250282287598 7.87868595123291 2.945894479751587 -H 0.277807354927063 3.5526158809661865 8.722700119018555 -O 0.9846296906471252 3.210406541824341 8.203073501586914 -H 1.7031030654907227 3.0266921520233154 8.867362976074219 -H 2.8105833530426025 2.196861982345581 15.392070770263672 -O 3.735032796859741 2.4994215965270996 15.570079803466797 -H 3.644773006439209 3.4426615238189697 0.03853387013077736 -H 14.682604789733887 1.0238474607467651 2.0653231143951416 -O 15.566673278808594 1.3636430501937866 1.7907549142837524 -H 0.5717520117759705 0.6591038703918457 1.8086328506469727 -H 11.107076644897461 8.861739158630371 7.134167671203613 -O 11.434098243713379 8.342004776000977 6.366227149963379 -H 12.278743743896484 8.585103988647461 6.036701679229736 -H 6.849724292755127 2.226242780685425 14.659040451049805 -O 7.6959028244018555 2.413717269897461 15.109258651733398 -H 8.172039031982422 3.1463210582733154 14.650622367858887 -H 4.415694236755371 12.286710739135742 1.0233668088912964 -O 4.88289213180542 11.490494728088379 1.3367034196853638 -H 5.81308126449585 11.642242431640625 0.9043989777565002 -H 10.558619499206543 9.060455322265625 9.619710922241211 -O 10.549599647521973 9.386129379272461 8.682696342468262 -H 9.6725492477417 9.819774627685547 8.593550682067871 -H 6.1465864181518555 15.147404670715332 9.628643035888672 -O 5.529297351837158 14.445521354675293 9.938332557678223 -H 4.890136241912842 14.265419006347656 9.203654289245605 -H 12.137746810913086 14.339106559753418 4.88058614730835 -O 12.554288864135742 15.224326133728027 4.790942668914795 -H 13.392069816589355 15.262238502502441 5.262670993804932 -H 12.538585662841797 4.795741558074951 2.6958494186401367 -O 13.156197547912598 5.574193000793457 2.774204730987549 -H 13.542095184326172 5.429687976837158 3.6601510047912598 -H 1.6302706003189087 14.983660697937012 5.979812145233154 -O 0.8948200941085815 14.330414772033691 6.0626373291015625 -H 0.1337418407201767 14.884979248046875 6.267165660858154 -H 4.088843822479248 7.9247822761535645 14.16343879699707 -O 3.351106643676758 7.655316352844238 14.735418319702148 -H 3.2007994651794434 8.391205787658691 15.35331916809082 -H 0.15970730781555176 12.594325065612793 2.4045615196228027 -O 15.217007637023926 12.903790473937988 1.7151750326156616 -H 15.467392921447754 12.415807723999023 0.8731029033660889 -H 10.299698829650879 7.86765193939209 5.2782793045043945 -O 9.465031623840332 7.6437177658081055 4.793709754943848 -H 9.516728401184082 6.686868667602539 4.577350616455078 -H 11.606966972351074 11.700885772705078 0.35497593879699707 -O 11.372387886047363 12.519648551940918 15.574257850646973 -H 10.634315490722656 12.839116096496582 0.46611565351486206 -H 8.778069496154785 1.2632012367248535 15.487536430358887 -O 9.388166427612305 0.5421920418739319 0.13583745062351227 -H 9.037282943725586 0.09930628538131714 0.9319953322410583 -H 6.16838264465332 5.261773586273193 7.558151721954346 -O 6.098697662353516 4.416169166564941 7.145912170410156 -H 7.055895805358887 4.16866397857666 7.010154724121094 -H 7.392298221588135 10.838863372802734 15.570189476013184 -O 7.205356597900391 11.764328956604004 0.33388379216194153 -H 7.023780345916748 12.40236759185791 15.264869689941406 -H 8.928775787353516 4.274104595184326 5.8341803550720215 -O 8.753131866455078 3.6826674938201904 6.5963945388793945 -H 8.974727630615234 2.730682373046875 6.358644008636475 -H 0.35756778717041016 3.3287155628204346 15.077012062072754 -O 0.9291011691093445 2.5445761680603027 15.223231315612793 -H 0.5748293399810791 2.0781967639923096 0.3547714650630951 -H 4.015512466430664 3.467869758605957 4.926387310028076 -O 4.089820861816406 4.415233612060547 5.229217529296875 -H 4.887458801269531 4.509295463562012 5.778048038482666 -H 5.291957855224609 14.813364028930664 11.435693740844727 -O 5.140069007873535 14.953418731689453 12.421006202697754 -H 5.216044902801514 0.23042252659797668 12.654684066772461 -H 13.444220542907715 11.729223251342773 11.851582527160645 -O 12.642805099487305 11.136754989624023 11.598742485046387 -H 12.548523902893066 11.20355224609375 10.628812789916992 -H 9.697056770324707 15.593395233154297 14.027965545654297 -O 10.087967872619629 15.423428535461426 13.162454605102539 -H 11.05064868927002 0.002158439252525568 13.155196189880371 -H 2.523853063583374 11.595932006835938 12.188504219055176 -O 2.7947349548339844 11.257299423217773 11.32616901397705 -H 2.0624139308929443 10.607105255126953 11.156081199645996 -H 13.958531379699707 8.130409240722656 15.528944969177246 -O 13.822677612304688 9.02670955657959 15.227170944213867 -H 13.791452407836914 9.062285423278809 14.228338241577148 -H 10.27184772491455 9.424518585205078 13.943780899047852 -O 9.732276916503906 8.618180274963379 14.051572799682617 -H 10.166350364685059 8.033967971801758 14.658818244934082 -H 8.461220741271973 12.057075500488281 7.043845176696777 -O 8.419132232666016 12.80543041229248 6.415385723114014 -H 8.736284255981445 12.338397979736328 5.5919036865234375 -H 8.171420097351074 0.7793318033218384 5.426231861114502 -O 8.820952415466309 1.2351326942443848 6.013558864593506 -H 9.01926326751709 0.6126450300216675 6.739671230316162 -H 2.0820090770721436 7.869522571563721 3.1253793239593506 -O 2.9208269119262695 8.372122764587402 3.1731083393096924 -H 2.627509355545044 9.106399536132812 3.720787525177002 -H 11.650372505187988 10.628031730651855 8.698492050170898 -O 12.256834030151367 11.429168701171875 8.799505233764648 -H 13.083629608154297 11.129518508911133 8.284788131713867 -H 13.960386276245117 14.537196159362793 14.816256523132324 -O 14.3788480758667 14.84691047668457 13.965582847595215 -H 13.691018104553223 15.364837646484375 13.521903038024902 -H 11.58198356628418 1.196730613708496 5.081545829772949 -O 11.163005828857422 2.0494470596313477 5.276447772979736 -H 10.318563461303711 1.797735571861267 5.718932151794434 -H 6.0017476081848145 10.59385871887207 10.80034065246582 -O 5.272309303283691 10.05134105682373 11.150882720947266 -H 4.443428039550781 10.651139259338379 11.057957649230957 -H 12.516849517822266 11.899116516113281 4.271182060241699 -O 11.869437217712402 12.347843170166016 4.853531837463379 -H 12.166669845581055 12.171024322509766 5.7557244300842285 -H 15.470584869384766 4.516737461090088 11.073837280273438 -O 15.1124849319458 4.111335277557373 10.25562858581543 -H 14.591557502746582 4.877866744995117 9.938982963562012 -H 15.495829582214355 12.599084854125977 12.530135154724121 -O 14.549777030944824 12.876575469970703 12.166041374206543 -H 14.274829864501953 13.484247207641602 12.92894172668457 -H 4.544622421264648 5.858673572540283 4.278730869293213 -O 4.853733062744141 6.651581287384033 3.80159854888916 -H 4.038316249847412 7.112107276916504 3.6127209663391113 -H 11.086899757385254 2.9105334281921387 3.527799129486084 -O 11.044354438781738 3.5479931831359863 2.813129425048828 -H 11.100714683532715 3.017974376678467 2.005096435546875 -H 11.167326927185059 5.955437660217285 0.33261048793792725 -O 10.39560604095459 6.435065746307373 0.020402710884809494 -H 10.094603538513184 6.954756259918213 0.794249415397644 -H 5.193816661834717 9.804295539855957 7.193893909454346 -O 6.119728088378906 9.39712905883789 7.226724624633789 -H 6.320915699005127 9.148200988769531 6.31579065322876 -H 10.59584903717041 3.775369882583618 9.694656372070312 -O 10.687355041503906 2.999478340148926 10.27226734161377 -H 11.493496894836426 2.6317555904388428 9.933670043945312 -H 9.679096221923828 4.952756404876709 13.074913024902344 -O 8.934259414672852 4.986400127410889 13.691017150878906 -H 9.434240341186523 5.47733211517334 14.371708869934082 -H 3.9072349071502686 4.0586981773376465 11.940484046936035 -O 3.154937267303467 4.696625709533691 12.053990364074707 -H 3.5881435871124268 5.517663955688477 11.802338600158691 -H 0.2335490584373474 0.01581624709069729 13.774118423461914 -O 0.980350911617279 0.5342038869857788 13.378776550292969 -H 0.9922274947166443 1.4501113891601562 13.837281227111816 -H 12.65897274017334 0.9930011630058289 11.683954238891602 -O 12.707582473754883 0.764843225479126 12.696332931518555 -H 12.694315910339355 1.5772038698196411 13.278538703918457 -H 10.812484741210938 11.850899696350098 14.067712783813477 -O 10.624994277954102 11.294839859008789 13.30173397064209 -H 11.430129051208496 11.36072826385498 12.707429885864258 -H 7.020813941955566 7.331269264221191 1.747533917427063 -O 7.554996013641357 8.1338529586792 1.842114806175232 -H 7.4181599617004395 8.49007797241211 2.763763666152954 -H 11.144770622253418 5.892538547515869 8.100217819213867 -O 12.011418342590332 6.053420543670654 7.622436046600342 -H 11.807604789733887 6.768427848815918 7.026505947113037 -H 0.804131269454956 13.10036849975586 4.533726215362549 -O 1.1628715991973877 12.663919448852539 3.6855170726776123 -H 1.7346456050872803 11.923086166381836 3.9333012104034424 -H 9.218413352966309 1.9028451442718506 10.826943397521973 -O 8.582201957702637 1.300583004951477 11.322752952575684 -H 9.201321601867676 0.7191085815429688 11.809184074401855 -H 3.442178726196289 14.570088386535645 13.23493766784668 -O 2.64837646484375 14.339696884155273 13.757745742797852 -H 2.056213617324829 15.07002067565918 13.468094825744629 -H 6.184440612792969 8.607916831970215 14.012269973754883 -O 5.613175392150879 8.24959659576416 13.366471290588379 -H 5.421210289001465 8.999065399169922 12.734549522399902 -H 14.156079292297363 10.09754753112793 6.937656879425049 -O 14.381294250488281 10.39493465423584 7.833716869354248 -H 15.031318664550781 11.204416275024414 7.830630302429199 -H 9.186308860778809 5.373661041259766 9.201058387756348 -O 9.884927749633789 4.853215217590332 8.791373252868652 -H 9.495500564575195 4.389050006866455 7.994511127471924 -H 7.909711837768555 0.8771836757659912 10.073674201965332 -O 7.3992815017700195 0.40500327944755554 9.375271797180176 -H 8.047890663146973 0.01646227203309536 8.824193954467773 -H 4.144155025482178 7.798429012298584 11.0037202835083 -O 3.6634180545806885 7.110377311706543 10.5337553024292 -H 3.0318245887756348 7.595344543457031 9.977286338806152 -H 11.543298721313477 12.845231056213379 9.526606559753418 -O 11.121271133422852 13.702033042907715 9.871810913085938 -H 10.621376991271973 13.381515502929688 10.645342826843262 -H 7.287951469421387 15.405527114868164 1.4838590621948242 -O 8.058247566223145 15.133753776550293 2.1102092266082764 -H 7.733454704284668 15.314888954162598 3.0118229389190674 -H 5.935088634490967 7.812267303466797 7.968081951141357 -O 6.042677879333496 6.951498031616211 8.45356559753418 -H 5.2108025550842285 6.850614070892334 8.959635734558105 -H 15.26892375946045 9.244001388549805 8.84305191040039 -O 0.033080607652664185 8.36771297454834 9.159706115722656 -H 0.16065479815006256 8.65696907043457 10.071883201599121 -H 15.44448471069336 7.283434867858887 2.2880680561065674 -O 0.4308568835258484 7.290805816650391 2.960726737976074 -H 0.8542476892471313 6.4178080558776855 2.8072118759155273 -H 6.653284549713135 3.0818610191345215 2.4921748638153076 -O 7.361125946044922 3.674710988998413 2.2265164852142334 -H 7.656304359436035 3.247504234313965 1.4033161401748657 -H 13.179733276367188 15.35033893585205 1.7865592241287231 -O 13.136012077331543 0.4361955523490906 2.404041290283203 -H 13.092921257019043 15.597688674926758 3.281696081161499 -H 3.2176342010498047 10.340422630310059 5.482553958892822 -O 2.859381914138794 10.761625289916992 4.600158214569092 -H 3.671846389770508 10.996495246887207 4.227005958557129 -H 9.0103178024292 14.254643440246582 7.299729824066162 -O 9.379074096679688 15.032605171203613 7.842066287994385 -H 9.993480682373047 14.663202285766602 8.487648963928223 -H 1.057732105255127 10.423288345336914 0.49331533908843994 -O 0.2989242374897003 10.900001525878906 0.0640338882803917 -H 15.468161582946777 10.141322135925293 15.32434368133545 -H 0.5501918792724609 13.092039108276367 7.281371593475342 -O 0.34184548258781433 12.450984001159668 7.994649887084961 -H 0.06924410164356232 13.057560920715332 8.765048027038574 -H 9.83470630645752 4.528668403625488 3.769052028656006 -O 9.009892463684082 4.8917107582092285 4.168781280517578 -H 8.33976936340332 4.487730026245117 3.5564870834350586 diff --git a/examples/latte_interface/scf_energy_forces_kernel/coords_100.pdb b/examples/latte_interface/scf_energy_forces_kernel/coords_100.pdb new file mode 100644 index 00000000..63234eda --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/coords_100.pdb @@ -0,0 +1,306 @@ +REMARK Generated by PROGRESS library +TITLE coords_100.pdb +CRYST1 15.459 15.459 15.459 90.00 90.00 90.00 P 1 1 +MODEL 1 +ATOM 1 H MOL 1 0.024 -0.035 0.000 0.00 0.00 H +ATOM 2 O MOL 1 0.965 0.020 0.000 0.00 0.00 O +ATOM 3 H MOL 1 1.141 -0.907 0.000 0.00 0.00 H +ATOM 4 H MOL 1 1.462 1.513 1.709 0.00 0.00 H +ATOM 5 O MOL 1 2.404 1.568 1.709 0.00 0.00 O +ATOM 6 H MOL 1 2.579 0.641 1.709 0.00 0.00 H +ATOM 7 H MOL 1 2.820 2.865 3.165 0.00 0.00 H +ATOM 8 O MOL 1 3.761 2.919 3.165 0.00 0.00 O +ATOM 9 H MOL 1 3.937 1.993 3.165 0.00 0.00 H +ATOM 10 H MOL 1 4.153 4.495 4.880 0.00 0.00 H +ATOM 11 O MOL 1 5.095 4.549 4.880 0.00 0.00 O +ATOM 12 H MOL 1 5.270 3.623 4.880 0.00 0.00 H +ATOM 13 H MOL 1 6.507 6.886 7.361 0.00 0.00 H +ATOM 14 O MOL 1 7.449 6.940 7.361 0.00 0.00 O +ATOM 15 H MOL 1 7.624 6.013 7.361 0.00 0.00 H +ATOM 16 H MOL 1 8.157 8.371 9.279 0.00 0.00 H +ATOM 17 O MOL 1 9.098 8.425 9.279 0.00 0.00 O +ATOM 18 H MOL 1 9.273 7.498 9.279 0.00 0.00 H +ATOM 19 H MOL 1 9.844 10.492 11.575 0.00 0.00 H +ATOM 20 O MOL 1 10.786 10.546 11.575 0.00 0.00 O +ATOM 21 H MOL 1 10.961 9.619 11.575 0.00 0.00 H +ATOM 22 H MOL 1 13.862 1.975 4.386 0.00 0.00 H +ATOM 23 O MOL 1 14.804 2.029 4.386 0.00 0.00 O +ATOM 24 H MOL 1 14.979 1.102 4.386 0.00 0.00 H +ATOM 25 H MOL 1 6.255 9.846 11.439 0.00 0.00 H +ATOM 26 O MOL 1 7.196 9.900 11.439 0.00 0.00 O +ATOM 27 H MOL 1 7.371 8.973 11.439 0.00 0.00 H +ATOM 28 H MOL 1 0.905 3.897 6.882 0.00 0.00 H +ATOM 29 O MOL 1 1.846 3.951 6.882 0.00 0.00 O +ATOM 30 H MOL 1 2.021 3.024 6.882 0.00 0.00 H +ATOM 31 H MOL 1 11.955 14.153 5.458 0.00 0.00 H +ATOM 32 O MOL 1 12.896 14.207 5.458 0.00 0.00 O +ATOM 33 H MOL 1 13.072 13.281 5.458 0.00 0.00 H +ATOM 34 H MOL 1 9.388 13.982 6.497 0.00 0.00 H +ATOM 35 O MOL 1 10.330 14.036 6.497 0.00 0.00 O +ATOM 36 H MOL 1 10.505 13.110 6.497 0.00 0.00 H +ATOM 37 H MOL 1 9.916 3.729 8.798 0.00 0.00 H +ATOM 38 O MOL 1 10.857 3.783 8.798 0.00 0.00 O +ATOM 39 H MOL 1 11.033 2.857 8.798 0.00 0.00 H +ATOM 40 H MOL 1 1.645 10.849 1.718 0.00 0.00 H +ATOM 41 O MOL 1 2.586 10.904 1.718 0.00 0.00 O +ATOM 42 H MOL 1 2.761 9.977 1.718 0.00 0.00 H +ATOM 43 H MOL 1 13.668 5.798 2.502 0.00 0.00 H +ATOM 44 O MOL 1 14.610 5.852 2.502 0.00 0.00 O +ATOM 45 H MOL 1 14.785 4.925 2.502 0.00 0.00 H +ATOM 46 H MOL 1 0.434 8.566 11.170 0.00 0.00 H +ATOM 47 O MOL 1 1.376 8.620 11.170 0.00 0.00 O +ATOM 48 H MOL 1 1.551 7.693 11.170 0.00 0.00 H +ATOM 49 H MOL 1 8.236 3.228 1.102 0.00 0.00 H +ATOM 50 O MOL 1 9.177 3.283 1.102 0.00 0.00 O +ATOM 51 H MOL 1 9.352 2.356 1.102 0.00 0.00 H +ATOM 52 H MOL 1 14.171 2.786 10.963 0.00 0.00 H +ATOM 53 O MOL 1 15.112 2.840 10.963 0.00 0.00 O +ATOM 54 H MOL 1 15.287 1.913 10.963 0.00 0.00 H +ATOM 55 H MOL 1 10.024 12.300 0.152 0.00 0.00 H +ATOM 56 O MOL 1 10.966 12.354 0.152 0.00 0.00 O +ATOM 57 H MOL 1 11.141 11.428 0.152 0.00 0.00 H +ATOM 58 H MOL 1 11.444 7.694 1.210 0.00 0.00 H +ATOM 59 O MOL 1 12.386 7.748 1.210 0.00 0.00 O +ATOM 60 H MOL 1 12.561 6.822 1.210 0.00 0.00 H +ATOM 61 H MOL 1 5.914 9.892 5.228 0.00 0.00 H +ATOM 62 O MOL 1 6.855 9.947 5.228 0.00 0.00 O +ATOM 63 H MOL 1 7.030 9.020 5.228 0.00 0.00 H +ATOM 64 H MOL 1 11.015 2.278 3.209 0.00 0.00 H +ATOM 65 O MOL 1 11.957 2.332 3.209 0.00 0.00 O +ATOM 66 H MOL 1 12.132 1.406 3.209 0.00 0.00 H +ATOM 67 H MOL 1 5.157 14.137 9.690 0.00 0.00 H +ATOM 68 O MOL 1 6.099 14.192 9.690 0.00 0.00 O +ATOM 69 H MOL 1 6.274 13.265 9.690 0.00 0.00 H +ATOM 70 H MOL 1 13.014 10.851 2.149 0.00 0.00 H +ATOM 71 O MOL 1 13.956 10.906 2.149 0.00 0.00 O +ATOM 72 H MOL 1 14.131 9.979 2.149 0.00 0.00 H +ATOM 73 H MOL 1 6.432 7.342 4.083 0.00 0.00 H +ATOM 74 O MOL 1 7.373 7.396 4.083 0.00 0.00 O +ATOM 75 H MOL 1 7.548 6.469 4.083 0.00 0.00 H +ATOM 76 H MOL 1 13.237 7.650 6.098 0.00 0.00 H +ATOM 77 O MOL 1 14.178 7.704 6.098 0.00 0.00 O +ATOM 78 H MOL 1 14.353 6.777 6.098 0.00 0.00 H +ATOM 79 H MOL 1 8.056 0.377 3.941 0.00 0.00 H +ATOM 80 O MOL 1 8.997 0.431 3.941 0.00 0.00 O +ATOM 81 H MOL 1 9.172 -0.495 3.941 0.00 0.00 H +ATOM 82 H MOL 1 4.396 9.364 7.094 0.00 0.00 H +ATOM 83 O MOL 1 5.337 9.418 7.094 0.00 0.00 O +ATOM 84 H MOL 1 5.512 8.491 7.094 0.00 0.00 H +ATOM 85 H MOL 1 5.060 0.593 11.823 0.00 0.00 H +ATOM 86 O MOL 1 6.002 0.647 11.823 0.00 0.00 O +ATOM 87 H MOL 1 6.177 -0.280 11.823 0.00 0.00 H +ATOM 88 H MOL 1 10.805 13.676 1.929 0.00 0.00 H +ATOM 89 O MOL 1 11.747 13.730 1.929 0.00 0.00 O +ATOM 90 H MOL 1 11.922 12.804 1.929 0.00 0.00 H +ATOM 91 H MOL 1 10.422 5.195 5.779 0.00 0.00 H +ATOM 92 O MOL 1 11.364 5.250 5.779 0.00 0.00 O +ATOM 93 H MOL 1 11.539 4.323 5.779 0.00 0.00 H +ATOM 94 H MOL 1 2.609 5.311 0.365 0.00 0.00 H +ATOM 95 O MOL 1 3.551 5.365 0.365 0.00 0.00 O +ATOM 96 H MOL 1 3.726 4.438 0.365 0.00 0.00 H +ATOM 97 H MOL 1 0.247 12.838 7.622 0.00 0.00 H +ATOM 98 O MOL 1 1.189 12.892 7.622 0.00 0.00 O +ATOM 99 H MOL 1 1.364 11.966 7.622 0.00 0.00 H +ATOM 100 H MOL 1 0.400 4.030 12.734 0.00 0.00 H +ATOM 101 O MOL 1 1.342 4.084 12.734 0.00 0.00 O +ATOM 102 H MOL 1 1.517 3.158 12.734 0.00 0.00 H +ATOM 103 H MOL 1 6.344 11.570 0.306 0.00 0.00 H +ATOM 104 O MOL 1 7.286 11.624 0.306 0.00 0.00 O +ATOM 105 H MOL 1 7.461 10.698 0.306 0.00 0.00 H +ATOM 106 H MOL 1 1.457 8.882 5.810 0.00 0.00 H +ATOM 107 O MOL 1 2.399 8.937 5.810 0.00 0.00 O +ATOM 108 H MOL 1 2.574 8.010 5.810 0.00 0.00 H +ATOM 109 H MOL 1 1.246 12.939 10.266 0.00 0.00 H +ATOM 110 O MOL 1 2.187 12.993 10.266 0.00 0.00 O +ATOM 111 H MOL 1 2.362 12.067 10.266 0.00 0.00 H +ATOM 112 H MOL 1 5.844 10.735 2.510 0.00 0.00 H +ATOM 113 O MOL 1 6.786 10.789 2.510 0.00 0.00 O +ATOM 114 H MOL 1 6.961 9.862 2.510 0.00 0.00 H +ATOM 115 H MOL 1 9.752 5.415 11.518 0.00 0.00 H +ATOM 116 O MOL 1 10.694 5.470 11.518 0.00 0.00 O +ATOM 117 H MOL 1 10.869 4.543 11.518 0.00 0.00 H +ATOM 118 H MOL 1 10.062 11.535 7.714 0.00 0.00 H +ATOM 119 O MOL 1 11.004 11.590 7.714 0.00 0.00 O +ATOM 120 H MOL 1 11.179 10.663 7.714 0.00 0.00 H +ATOM 121 H MOL 1 11.140 0.576 13.274 0.00 0.00 H +ATOM 122 O MOL 1 12.081 0.630 13.274 0.00 0.00 O +ATOM 123 H MOL 1 12.256 -0.297 13.274 0.00 0.00 H +ATOM 124 H MOL 1 8.664 2.794 6.440 0.00 0.00 H +ATOM 125 O MOL 1 9.606 2.848 6.440 0.00 0.00 O +ATOM 126 H MOL 1 9.781 1.921 6.440 0.00 0.00 H +ATOM 127 H MOL 1 1.908 5.146 9.029 0.00 0.00 H +ATOM 128 O MOL 1 2.849 5.201 9.029 0.00 0.00 O +ATOM 129 H MOL 1 3.024 4.274 9.029 0.00 0.00 H +ATOM 130 H MOL 1 12.294 7.322 11.253 0.00 0.00 H +ATOM 131 O MOL 1 13.235 7.377 11.253 0.00 0.00 O +ATOM 132 H MOL 1 13.410 6.450 11.253 0.00 0.00 H +ATOM 133 H MOL 1 11.098 6.253 8.089 0.00 0.00 H +ATOM 134 O MOL 1 12.039 6.307 8.089 0.00 0.00 O +ATOM 135 H MOL 1 12.214 5.381 8.089 0.00 0.00 H +ATOM 136 H MOL 1 4.497 3.412 10.233 0.00 0.00 H +ATOM 137 O MOL 1 5.438 3.466 10.233 0.00 0.00 O +ATOM 138 H MOL 1 5.613 2.539 10.233 0.00 0.00 H +ATOM 139 H MOL 1 12.642 9.031 8.163 0.00 0.00 H +ATOM 140 O MOL 1 13.584 9.085 8.163 0.00 0.00 O +ATOM 141 H MOL 1 13.759 8.159 8.163 0.00 0.00 H +ATOM 142 H MOL 1 1.618 12.178 5.523 0.00 0.00 H +ATOM 143 O MOL 1 2.560 12.233 5.523 0.00 0.00 O +ATOM 144 H MOL 1 2.735 11.306 5.523 0.00 0.00 H +ATOM 145 H MOL 1 11.030 2.396 11.405 0.00 0.00 H +ATOM 146 O MOL 1 11.971 2.450 11.405 0.00 0.00 O +ATOM 147 H MOL 1 12.146 1.524 11.405 0.00 0.00 H +ATOM 148 H MOL 1 13.962 8.475 13.187 0.00 0.00 H +ATOM 149 O MOL 1 14.903 8.529 13.187 0.00 0.00 O +ATOM 150 H MOL 1 15.078 7.602 13.187 0.00 0.00 H +ATOM 151 H MOL 1 9.462 8.027 5.394 0.00 0.00 H +ATOM 152 O MOL 1 10.404 8.081 5.394 0.00 0.00 O +ATOM 153 H MOL 1 10.579 7.155 5.394 0.00 0.00 H +ATOM 154 H MOL 1 8.529 8.120 2.400 0.00 0.00 H +ATOM 155 O MOL 1 9.471 8.175 2.400 0.00 0.00 O +ATOM 156 H MOL 1 9.646 7.248 2.400 0.00 0.00 H +ATOM 157 H MOL 1 8.139 0.978 12.304 0.00 0.00 H +ATOM 158 O MOL 1 9.081 1.033 12.304 0.00 0.00 O +ATOM 159 H MOL 1 9.256 0.106 12.304 0.00 0.00 H +ATOM 160 H MOL 1 1.628 12.028 12.490 0.00 0.00 H +ATOM 161 O MOL 1 2.569 12.082 12.490 0.00 0.00 O +ATOM 162 H MOL 1 2.744 11.155 12.490 0.00 0.00 H +ATOM 163 H MOL 1 6.188 3.476 7.931 0.00 0.00 H +ATOM 164 O MOL 1 7.129 3.530 7.931 0.00 0.00 O +ATOM 165 H MOL 1 7.305 2.604 7.931 0.00 0.00 H +ATOM 166 H MOL 1 11.865 12.623 9.604 0.00 0.00 H +ATOM 167 O MOL 1 12.807 12.677 9.604 0.00 0.00 O +ATOM 168 H MOL 1 12.982 11.750 9.604 0.00 0.00 H +ATOM 169 H MOL 1 9.083 5.793 0.741 0.00 0.00 H +ATOM 170 O MOL 1 10.025 5.847 0.741 0.00 0.00 O +ATOM 171 H MOL 1 10.200 4.921 0.741 0.00 0.00 H +ATOM 172 H MOL 1 13.001 1.894 6.496 0.00 0.00 H +ATOM 173 O MOL 1 13.942 1.949 6.496 0.00 0.00 O +ATOM 174 H MOL 1 14.117 1.022 6.496 0.00 0.00 H +ATOM 175 H MOL 1 1.513 8.921 9.234 0.00 0.00 H +ATOM 176 O MOL 1 2.454 8.975 9.234 0.00 0.00 O +ATOM 177 H MOL 1 2.629 8.049 9.234 0.00 0.00 H +ATOM 178 H MOL 1 5.013 8.716 0.609 0.00 0.00 H +ATOM 179 O MOL 1 5.954 8.770 0.609 0.00 0.00 O +ATOM 180 H MOL 1 6.129 7.843 0.609 0.00 0.00 H +ATOM 181 H MOL 1 6.661 3.635 13.318 0.00 0.00 H +ATOM 182 O MOL 1 7.602 3.690 13.318 0.00 0.00 O +ATOM 183 H MOL 1 7.777 2.763 13.318 0.00 0.00 H +ATOM 184 H MOL 1 5.109 3.641 1.722 0.00 0.00 H +ATOM 185 O MOL 1 6.050 3.696 1.722 0.00 0.00 O +ATOM 186 H MOL 1 6.225 2.769 1.722 0.00 0.00 H +ATOM 187 H MOL 1 6.461 0.702 0.842 0.00 0.00 H +ATOM 188 O MOL 1 7.402 0.757 0.842 0.00 0.00 O +ATOM 189 H MOL 1 7.577 -0.170 0.842 0.00 0.00 H +ATOM 190 H MOL 1 3.083 7.592 2.472 0.00 0.00 H +ATOM 191 O MOL 1 4.025 7.646 2.472 0.00 0.00 O +ATOM 192 H MOL 1 4.200 6.720 2.472 0.00 0.00 H +ATOM 193 H MOL 1 8.638 14.297 9.461 0.00 0.00 H +ATOM 194 O MOL 1 9.579 14.352 9.461 0.00 0.00 O +ATOM 195 H MOL 1 9.754 13.425 9.461 0.00 0.00 H +ATOM 196 H MOL 1 4.773 13.629 6.292 0.00 0.00 H +ATOM 197 O MOL 1 5.714 13.684 6.292 0.00 0.00 O +ATOM 198 H MOL 1 5.889 12.757 6.292 0.00 0.00 H +ATOM 199 H MOL 1 7.047 3.198 3.702 0.00 0.00 H +ATOM 200 O MOL 1 7.989 3.252 3.702 0.00 0.00 O +ATOM 201 H MOL 1 8.164 2.326 3.702 0.00 0.00 H +ATOM 202 H MOL 1 2.094 0.204 8.780 0.00 0.00 H +ATOM 203 O MOL 1 3.035 0.258 8.780 0.00 0.00 O +ATOM 204 H MOL 1 3.210 -0.669 8.780 0.00 0.00 H +ATOM 205 H MOL 1 6.427 6.710 13.409 0.00 0.00 H +ATOM 206 O MOL 1 7.368 6.765 13.409 0.00 0.00 O +ATOM 207 H MOL 1 7.543 5.838 13.409 0.00 0.00 H +ATOM 208 H MOL 1 4.534 6.437 9.463 0.00 0.00 H +ATOM 209 O MOL 1 5.476 6.491 9.463 0.00 0.00 O +ATOM 210 H MOL 1 5.651 5.565 9.463 0.00 0.00 H +ATOM 211 H MOL 1 2.755 13.902 4.044 0.00 0.00 H +ATOM 212 O MOL 1 3.697 13.957 4.044 0.00 0.00 O +ATOM 213 H MOL 1 3.872 13.030 4.044 0.00 0.00 H +ATOM 214 H MOL 1 3.647 9.025 13.044 0.00 0.00 H +ATOM 215 O MOL 1 4.589 9.080 13.044 0.00 0.00 O +ATOM 216 H MOL 1 4.764 8.153 13.044 0.00 0.00 H +ATOM 217 H MOL 1 2.475 1.170 14.119 0.00 0.00 H +ATOM 218 O MOL 1 3.416 1.224 14.119 0.00 0.00 O +ATOM 219 H MOL 1 3.592 0.298 14.119 0.00 0.00 H +ATOM 220 H MOL 1 9.573 10.933 2.915 0.00 0.00 H +ATOM 221 O MOL 1 10.514 10.988 2.915 0.00 0.00 O +ATOM 222 H MOL 1 10.689 10.061 2.915 0.00 0.00 H +ATOM 223 H MOL 1 6.960 10.953 7.307 0.00 0.00 H +ATOM 224 O MOL 1 7.901 11.007 7.307 0.00 0.00 O +ATOM 225 H MOL 1 8.076 10.080 7.307 0.00 0.00 H +ATOM 226 H MOL 1 12.713 4.501 0.595 0.00 0.00 H +ATOM 227 O MOL 1 13.655 4.555 0.595 0.00 0.00 O +ATOM 228 H MOL 1 13.830 3.628 0.595 0.00 0.00 H +ATOM 229 H MOL 1 13.212 11.633 13.218 0.00 0.00 H +ATOM 230 O MOL 1 14.154 11.687 13.218 0.00 0.00 O +ATOM 231 H MOL 1 14.329 10.761 13.218 0.00 0.00 H +ATOM 232 H MOL 1 11.861 13.431 11.502 0.00 0.00 H +ATOM 233 O MOL 1 12.803 13.485 11.502 0.00 0.00 O +ATOM 234 H MOL 1 12.978 12.558 11.502 0.00 0.00 H +ATOM 235 H MOL 1 9.400 8.430 13.259 0.00 0.00 H +ATOM 236 O MOL 1 10.342 8.485 13.259 0.00 0.00 O +ATOM 237 H MOL 1 10.517 7.558 13.259 0.00 0.00 H +ATOM 238 H MOL 1 2.820 1.799 5.389 0.00 0.00 H +ATOM 239 O MOL 1 3.762 1.854 5.389 0.00 0.00 O +ATOM 240 H MOL 1 3.937 0.927 5.389 0.00 0.00 H +ATOM 241 H MOL 1 9.302 11.302 5.371 0.00 0.00 H +ATOM 242 O MOL 1 10.244 11.357 5.371 0.00 0.00 O +ATOM 243 H MOL 1 10.419 10.430 5.371 0.00 0.00 H +ATOM 244 H MOL 1 7.076 12.436 12.400 0.00 0.00 H +ATOM 245 O MOL 1 8.017 12.491 12.400 0.00 0.00 O +ATOM 246 H MOL 1 8.192 11.564 12.400 0.00 0.00 H +ATOM 247 H MOL 1 0.564 8.190 0.846 0.00 0.00 H +ATOM 248 O MOL 1 1.505 8.245 0.846 0.00 0.00 O +ATOM 249 H MOL 1 1.680 7.318 0.846 0.00 0.00 H +ATOM 250 H MOL 1 7.010 11.136 9.638 0.00 0.00 H +ATOM 251 O MOL 1 7.952 11.191 9.638 0.00 0.00 O +ATOM 252 H MOL 1 8.127 10.264 9.638 0.00 0.00 H +ATOM 253 H MOL 1 9.268 5.723 3.606 0.00 0.00 H +ATOM 254 O MOL 1 10.209 5.777 3.606 0.00 0.00 O +ATOM 255 H MOL 1 10.384 4.850 3.606 0.00 0.00 H +ATOM 256 H MOL 1 13.390 10.203 4.472 0.00 0.00 H +ATOM 257 O MOL 1 14.332 10.257 4.472 0.00 0.00 O +ATOM 258 H MOL 1 14.507 9.330 4.472 0.00 0.00 H +ATOM 259 H MOL 1 3.876 5.191 11.945 0.00 0.00 H +ATOM 260 O MOL 1 4.818 5.246 11.945 0.00 0.00 O +ATOM 261 H MOL 1 4.993 4.319 11.945 0.00 0.00 H +ATOM 262 H MOL 1 6.226 6.828 11.264 0.00 0.00 H +ATOM 263 O MOL 1 7.167 6.882 11.264 0.00 0.00 O +ATOM 264 H MOL 1 7.342 5.955 11.264 0.00 0.00 H +ATOM 265 H MOL 1 3.202 9.766 3.900 0.00 0.00 H +ATOM 266 O MOL 1 4.143 9.821 3.900 0.00 0.00 O +ATOM 267 H MOL 1 4.318 8.894 3.900 0.00 0.00 H +ATOM 268 H MOL 1 12.942 5.592 4.532 0.00 0.00 H +ATOM 269 O MOL 1 13.884 5.646 4.532 0.00 0.00 O +ATOM 270 H MOL 1 14.059 4.719 4.532 0.00 0.00 H +ATOM 271 H MOL 1 4.341 9.628 9.004 0.00 0.00 H +ATOM 272 O MOL 1 5.282 9.682 9.004 0.00 0.00 O +ATOM 273 H MOL 1 5.458 8.755 9.004 0.00 0.00 H +ATOM 274 H MOL 1 13.274 13.142 3.549 0.00 0.00 H +ATOM 275 O MOL 1 14.216 13.197 3.549 0.00 0.00 O +ATOM 276 H MOL 1 14.391 12.270 3.549 0.00 0.00 H +ATOM 277 H MOL 1 3.276 6.152 7.287 0.00 0.00 H +ATOM 278 O MOL 1 4.217 6.206 7.287 0.00 0.00 O +ATOM 279 H MOL 1 4.392 5.279 7.287 0.00 0.00 H +ATOM 280 H MOL 1 6.608 12.279 4.127 0.00 0.00 H +ATOM 281 O MOL 1 7.550 12.333 4.127 0.00 0.00 O +ATOM 282 H MOL 1 7.725 11.406 4.127 0.00 0.00 H +ATOM 283 H MOL 1 14.089 2.765 8.432 0.00 0.00 H +ATOM 284 O MOL 1 15.031 2.819 8.432 0.00 0.00 O +ATOM 285 H MOL 1 15.206 1.892 8.432 0.00 0.00 H +ATOM 286 H MOL 1 12.247 0.859 8.664 0.00 0.00 H +ATOM 287 O MOL 1 13.188 0.913 8.664 0.00 0.00 O +ATOM 288 H MOL 1 13.363 -0.014 8.664 0.00 0.00 H +ATOM 289 H MOL 1 4.467 13.517 1.951 0.00 0.00 H +ATOM 290 O MOL 1 5.409 13.571 1.951 0.00 0.00 O +ATOM 291 H MOL 1 5.584 12.645 1.951 0.00 0.00 H +ATOM 292 H MOL 1 14.342 0.329 12.432 0.00 0.00 H +ATOM 293 O MOL 1 15.283 0.384 12.432 0.00 0.00 O +ATOM 294 H MOL 1 15.459 -0.543 12.432 0.00 0.00 H +ATOM 295 H MOL 1 11.322 2.305 0.943 0.00 0.00 H +ATOM 296 O MOL 1 12.263 2.360 0.943 0.00 0.00 O +ATOM 297 H MOL 1 12.438 1.433 0.943 0.00 0.00 H +ATOM 298 H MOL 1 7.319 4.026 10.612 0.00 0.00 H +ATOM 299 O MOL 1 8.261 4.081 10.612 0.00 0.00 O +ATOM 300 H MOL 1 8.436 3.154 10.612 0.00 0.00 H +TER +END diff --git a/examples/latte_interface/scf_energy_forces_kernel/coords_1299.pdb b/examples/latte_interface/scf_energy_forces_kernel/coords_1299.pdb new file mode 100644 index 00000000..55d5d1ad --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/coords_1299.pdb @@ -0,0 +1,1305 @@ +TITLE Built with Packmol +REMARK Packmol generated pdb file +CRYST1 40.230 40.230 40.230 90.00 90.00 90.00 P 1 1 +MODEL 1 +ATOM 1 H HOH 0 24.812 22.184 19.109 1.00 0.00 H +ATOM 2 O HOH 1 24.014 22.044 19.696 1.00 0.00 O +ATOM 3 H HOH 0 23.492 21.337 19.219 1.00 0.00 H +ATOM 4 OW SOL 1 17.915 12.852 12.888 1.00 0.00 O +ATOM 5 HW1 SOL 1 18.247 13.543 12.247 1.00 0.00 H +ATOM 6 HW2 SOL 1 17.565 12.128 12.294 1.00 0.00 H +ATOM 7 OW SOL 2 17.524 28.252 22.152 1.00 0.00 O +ATOM 8 HW1 SOL 2 17.842 29.134 21.806 1.00 0.00 H +ATOM 9 HW2 SOL 2 16.749 28.493 22.736 1.00 0.00 H +ATOM 10 OW SOL 3 18.272 22.452 8.081 1.00 0.00 O +ATOM 11 HW1 SOL 3 18.633 21.922 8.848 1.00 0.00 H +ATOM 12 HW2 SOL 3 17.651 21.814 7.625 1.00 0.00 H +ATOM 13 OW SOL 4 22.430 24.527 31.340 1.00 0.00 O +ATOM 14 HW1 SOL 4 22.675 23.743 31.910 1.00 0.00 H +ATOM 15 HW2 SOL 4 22.090 25.200 31.998 1.00 0.00 H +ATOM 16 OW SOL 5 25.090 23.960 22.405 1.00 0.00 O +ATOM 17 HW1 SOL 5 24.836 23.682 21.479 1.00 0.00 H +ATOM 18 HW2 SOL 5 26.000 23.563 22.529 1.00 0.00 H +ATOM 19 OW SOL 6 24.774 20.640 26.519 1.00 0.00 O +ATOM 20 HW1 SOL 6 24.293 19.797 26.761 1.00 0.00 H +ATOM 21 HW2 SOL 6 24.915 21.092 27.400 1.00 0.00 H +ATOM 22 OW SOL 7 26.990 22.203 21.118 1.00 0.00 O +ATOM 23 HW1 SOL 7 26.249 21.867 21.698 1.00 0.00 H +ATOM 24 HW2 SOL 7 26.681 23.114 20.845 1.00 0.00 H +ATOM 25 OW SOL 8 6.883 20.799 22.990 1.00 0.00 O +ATOM 26 HW1 SOL 8 7.731 20.467 23.403 1.00 0.00 H +ATOM 27 HW2 SOL 8 6.530 21.448 23.664 1.00 0.00 H +ATOM 28 OW SOL 9 22.196 12.513 19.542 1.00 0.00 O +ATOM 29 HW1 SOL 9 21.895 11.768 20.137 1.00 0.00 H +ATOM 30 HW2 SOL 9 22.528 13.206 20.181 1.00 0.00 H +ATOM 31 OW SOL 10 24.367 14.196 27.807 1.00 0.00 O +ATOM 32 HW1 SOL 10 24.759 13.864 26.949 1.00 0.00 H +ATOM 33 HW2 SOL 10 25.039 14.862 28.132 1.00 0.00 H +ATOM 34 OW SOL 11 9.054 23.271 16.103 1.00 0.00 O +ATOM 35 HW1 SOL 11 9.000 23.179 15.109 1.00 0.00 H +ATOM 36 HW2 SOL 11 10.012 23.068 16.307 1.00 0.00 H +ATOM 37 OW SOL 12 13.728 24.315 29.715 1.00 0.00 O +ATOM 38 HW1 SOL 12 14.398 24.828 29.178 1.00 0.00 H +ATOM 39 HW2 SOL 12 13.236 23.780 29.028 1.00 0.00 H +ATOM 40 OW SOL 13 14.471 25.164 21.554 1.00 0.00 O +ATOM 41 HW1 SOL 13 14.885 25.186 22.464 1.00 0.00 H +ATOM 42 HW2 SOL 13 13.759 25.864 21.602 1.00 0.00 H +ATOM 43 OW SOL 14 26.294 31.275 22.228 1.00 0.00 O +ATOM 44 HW1 SOL 14 26.728 31.339 23.126 1.00 0.00 H +ATOM 45 HW2 SOL 14 26.431 30.319 21.968 1.00 0.00 H +ATOM 46 OW SOL 15 26.994 11.521 25.850 1.00 0.00 O +ATOM 47 HW1 SOL 15 26.171 11.436 25.288 1.00 0.00 H +ATOM 48 HW2 SOL 15 27.117 12.509 25.940 1.00 0.00 H +ATOM 49 OW SOL 16 16.539 28.602 27.834 1.00 0.00 O +ATOM 50 HW1 SOL 16 15.693 28.079 27.733 1.00 0.00 H +ATOM 51 HW2 SOL 16 16.972 28.525 26.936 1.00 0.00 H +ATOM 52 OW SOL 17 22.819 23.562 21.747 1.00 0.00 O +ATOM 53 HW1 SOL 17 23.183 24.097 22.509 1.00 0.00 H +ATOM 54 HW2 SOL 17 22.769 22.633 22.114 1.00 0.00 H +ATOM 55 OW SOL 18 19.599 24.838 14.635 1.00 0.00 O +ATOM 56 HW1 SOL 18 20.294 25.205 14.016 1.00 0.00 H +ATOM 57 HW2 SOL 18 18.904 24.470 14.018 1.00 0.00 H +ATOM 58 OW SOL 19 11.460 21.896 29.300 1.00 0.00 O +ATOM 59 HW1 SOL 19 12.202 22.159 29.917 1.00 0.00 H +ATOM 60 HW2 SOL 19 10.878 21.312 29.867 1.00 0.00 H +ATOM 61 OW SOL 20 13.460 8.606 19.737 1.00 0.00 O +ATOM 62 HW1 SOL 20 13.490 8.653 20.735 1.00 0.00 H +ATOM 63 HW2 SOL 20 13.017 7.729 19.555 1.00 0.00 H +ATOM 64 OW SOL 21 26.689 19.633 27.144 1.00 0.00 O +ATOM 65 HW1 SOL 21 25.881 19.410 27.689 1.00 0.00 H +ATOM 66 HW2 SOL 21 27.282 20.115 27.789 1.00 0.00 H +ATOM 67 OW SOL 22 12.680 24.355 15.838 1.00 0.00 O +ATOM 68 HW1 SOL 22 12.330 25.241 16.143 1.00 0.00 H +ATOM 69 HW2 SOL 22 13.173 24.574 14.996 1.00 0.00 H +ATOM 70 OW SOL 23 17.500 25.332 29.830 1.00 0.00 O +ATOM 71 HW1 SOL 23 18.055 26.125 29.579 1.00 0.00 H +ATOM 72 HW2 SOL 23 18.141 24.567 29.772 1.00 0.00 H +ATOM 73 OW SOL 24 24.609 7.817 20.898 1.00 0.00 O +ATOM 74 HW1 SOL 24 25.282 8.251 21.495 1.00 0.00 H +ATOM 75 HW2 SOL 24 23.751 7.908 21.404 1.00 0.00 H +ATOM 76 OW SOL 25 19.438 10.285 16.542 1.00 0.00 O +ATOM 77 HW1 SOL 25 18.832 10.543 15.790 1.00 0.00 H +ATOM 78 HW2 SOL 25 18.857 9.725 17.132 1.00 0.00 H +ATOM 79 OW SOL 26 11.378 19.670 24.247 1.00 0.00 O +ATOM 80 HW1 SOL 26 12.271 19.520 24.670 1.00 0.00 H +ATOM 81 HW2 SOL 26 11.565 20.341 23.530 1.00 0.00 H +ATOM 82 OW SOL 27 19.982 33.490 17.847 1.00 0.00 O +ATOM 83 HW1 SOL 27 20.767 33.113 18.339 1.00 0.00 H +ATOM 84 HW2 SOL 27 19.790 34.344 18.330 1.00 0.00 H +ATOM 85 OW SOL 28 16.937 23.412 19.668 1.00 0.00 O +ATOM 86 HW1 SOL 28 16.821 22.419 19.661 1.00 0.00 H +ATOM 87 HW2 SOL 28 17.719 23.554 20.275 1.00 0.00 H +ATOM 88 OW SOL 29 27.579 22.373 10.254 1.00 0.00 O +ATOM 89 HW1 SOL 29 28.063 21.629 9.795 1.00 0.00 H +ATOM 90 HW2 SOL 29 26.978 22.738 9.543 1.00 0.00 H +ATOM 91 OW SOL 30 12.743 19.748 16.777 1.00 0.00 O +ATOM 92 HW1 SOL 30 12.101 19.822 16.015 1.00 0.00 H +ATOM 93 HW2 SOL 30 13.630 19.635 16.329 1.00 0.00 H +ATOM 94 OW SOL 31 22.687 17.370 21.870 1.00 0.00 O +ATOM 95 HW1 SOL 31 23.080 16.659 22.453 1.00 0.00 H +ATOM 96 HW2 SOL 31 22.590 18.152 22.485 1.00 0.00 H +ATOM 97 OW SOL 32 22.513 10.240 16.651 1.00 0.00 O +ATOM 98 HW1 SOL 32 22.192 10.135 17.592 1.00 0.00 H +ATOM 99 HW2 SOL 32 22.854 11.179 16.622 1.00 0.00 H +ATOM 100 OW SOL 33 10.472 16.762 13.933 1.00 0.00 O +ATOM 101 HW1 SOL 33 9.659 16.888 14.501 1.00 0.00 H +ATOM 102 HW2 SOL 33 10.489 15.777 13.761 1.00 0.00 H +ATOM 103 OW SOL 34 24.723 25.943 21.674 1.00 0.00 O +ATOM 104 HW1 SOL 34 23.754 25.698 21.658 1.00 0.00 H +ATOM 105 HW2 SOL 34 24.933 26.139 20.717 1.00 0.00 H +ATOM 106 OW SOL 35 8.848 23.597 22.834 1.00 0.00 O +ATOM 107 HW1 SOL 35 8.137 23.529 23.534 1.00 0.00 H +ATOM 108 HW2 SOL 35 8.911 22.667 22.471 1.00 0.00 H +ATOM 109 OW SOL 36 25.003 14.221 21.630 1.00 0.00 O +ATOM 110 HW1 SOL 36 25.360 13.898 22.506 1.00 0.00 H +ATOM 111 HW2 SOL 36 25.075 15.216 21.699 1.00 0.00 H +ATOM 112 OW SOL 37 17.024 25.204 21.412 1.00 0.00 O +ATOM 113 HW1 SOL 37 17.045 26.028 20.846 1.00 0.00 H +ATOM 114 HW2 SOL 37 16.331 24.633 20.973 1.00 0.00 H +ATOM 115 OW SOL 38 21.145 21.407 11.963 1.00 0.00 O +ATOM 116 HW1 SOL 38 20.834 22.357 11.979 1.00 0.00 H +ATOM 117 HW2 SOL 38 21.433 21.237 12.905 1.00 0.00 H +ATOM 118 OW SOL 39 22.328 19.648 17.502 1.00 0.00 O +ATOM 119 HW1 SOL 39 21.950 18.759 17.242 1.00 0.00 H +ATOM 120 HW2 SOL 39 22.819 19.945 16.683 1.00 0.00 H +ATOM 121 OW SOL 40 31.232 18.191 16.282 1.00 0.00 O +ATOM 122 HW1 SOL 40 30.255 18.039 16.436 1.00 0.00 H +ATOM 123 HW2 SOL 40 31.500 17.427 15.695 1.00 0.00 H +ATOM 124 OW SOL 41 20.472 22.025 28.044 1.00 0.00 O +ATOM 125 HW1 SOL 41 19.910 21.201 28.114 1.00 0.00 H +ATOM 126 HW2 SOL 41 21.206 21.867 28.705 1.00 0.00 H +ATOM 127 OW SOL 42 29.525 27.024 26.006 1.00 0.00 O +ATOM 128 HW1 SOL 42 29.545 26.084 25.664 1.00 0.00 H +ATOM 129 HW2 SOL 42 30.425 27.384 25.760 1.00 0.00 H +ATOM 130 OW SOL 43 12.572 19.293 19.563 1.00 0.00 O +ATOM 131 HW1 SOL 43 12.235 19.147 18.633 1.00 0.00 H +ATOM 132 HW2 SOL 43 13.127 20.121 19.486 1.00 0.00 H +ATOM 133 OW SOL 44 28.904 25.278 27.929 1.00 0.00 O +ATOM 134 HW1 SOL 44 29.793 25.123 27.500 1.00 0.00 H +ATOM 135 HW2 SOL 44 28.261 25.227 27.165 1.00 0.00 H +ATOM 136 OW SOL 45 18.890 24.136 9.158 1.00 0.00 O +ATOM 137 HW1 SOL 45 18.386 24.659 9.845 1.00 0.00 H +ATOM 138 HW2 SOL 45 19.809 24.063 9.544 1.00 0.00 H +ATOM 139 OW SOL 46 22.411 19.995 11.347 1.00 0.00 O +ATOM 140 HW1 SOL 46 22.844 19.382 10.686 1.00 0.00 H +ATOM 141 HW2 SOL 46 22.765 20.897 11.099 1.00 0.00 H +ATOM 142 OW SOL 47 15.126 24.616 8.500 1.00 0.00 O +ATOM 143 HW1 SOL 47 14.587 24.550 9.339 1.00 0.00 H +ATOM 144 HW2 SOL 47 14.440 24.578 7.774 1.00 0.00 H +ATOM 145 OW SOL 48 19.778 11.195 20.586 1.00 0.00 O +ATOM 146 HW1 SOL 48 19.350 12.051 20.295 1.00 0.00 H +ATOM 147 HW2 SOL 48 20.122 11.403 21.502 1.00 0.00 H +ATOM 148 OW SOL 49 14.611 23.092 15.349 1.00 0.00 O +ATOM 149 HW1 SOL 49 14.685 22.211 14.880 1.00 0.00 H +ATOM 150 HW2 SOL 49 15.054 22.928 16.230 1.00 0.00 H +ATOM 151 OW SOL 50 16.022 14.205 14.111 1.00 0.00 O +ATOM 152 HW1 SOL 50 15.842 15.127 14.455 1.00 0.00 H +ATOM 153 HW2 SOL 50 16.550 14.364 13.276 1.00 0.00 H +ATOM 154 OW SOL 51 30.145 24.475 24.408 1.00 0.00 O +ATOM 155 HW1 SOL 51 30.977 24.710 24.911 1.00 0.00 H +ATOM 156 HW2 SOL 51 29.480 24.281 25.129 1.00 0.00 H +ATOM 157 OW SOL 52 19.974 12.135 30.934 1.00 0.00 O +ATOM 158 HW1 SOL 52 19.765 11.696 31.808 1.00 0.00 H +ATOM 159 HW2 SOL 52 20.496 12.947 31.197 1.00 0.00 H +ATOM 160 OW SOL 53 27.407 10.681 16.793 1.00 0.00 O +ATOM 161 HW1 SOL 53 28.348 10.992 16.659 1.00 0.00 H +ATOM 162 HW2 SOL 53 27.414 9.747 16.436 1.00 0.00 H +ATOM 163 OW SOL 54 20.295 15.208 16.437 1.00 0.00 O +ATOM 164 HW1 SOL 54 20.039 14.270 16.202 1.00 0.00 H +ATOM 165 HW2 SOL 54 20.500 15.626 15.552 1.00 0.00 H +ATOM 166 OW SOL 55 20.140 14.679 26.490 1.00 0.00 O +ATOM 167 HW1 SOL 55 19.541 14.035 26.967 1.00 0.00 H +ATOM 168 HW2 SOL 55 20.592 15.175 27.231 1.00 0.00 H +ATOM 169 OW SOL 56 18.049 18.312 23.379 1.00 0.00 O +ATOM 170 HW1 SOL 56 17.709 18.188 22.447 1.00 0.00 H +ATOM 171 HW2 SOL 56 17.257 18.669 23.874 1.00 0.00 H +ATOM 172 OW SOL 57 23.087 28.689 17.079 1.00 0.00 O +ATOM 173 HW1 SOL 57 22.894 29.416 16.421 1.00 0.00 H +ATOM 174 HW2 SOL 57 22.180 28.392 17.375 1.00 0.00 H +ATOM 175 OW SOL 58 17.652 16.214 32.063 1.00 0.00 O +ATOM 176 HW1 SOL 58 17.465 16.870 31.332 1.00 0.00 H +ATOM 177 HW2 SOL 58 17.266 15.359 31.717 1.00 0.00 H +ATOM 178 OW SOL 59 10.164 21.661 24.153 1.00 0.00 O +ATOM 179 HW1 SOL 59 9.226 21.407 23.917 1.00 0.00 H +ATOM 180 HW2 SOL 59 10.548 21.978 23.286 1.00 0.00 H +ATOM 181 OW SOL 60 20.915 17.894 29.118 1.00 0.00 O +ATOM 182 HW1 SOL 60 20.640 18.563 28.429 1.00 0.00 H +ATOM 183 HW2 SOL 60 21.002 17.043 28.600 1.00 0.00 H +ATOM 184 OW SOL 61 17.367 26.246 23.017 1.00 0.00 O +ATOM 185 HW1 SOL 61 16.659 26.364 23.712 1.00 0.00 H +ATOM 186 HW2 SOL 61 18.116 25.808 23.515 1.00 0.00 H +ATOM 187 OW SOL 62 21.776 22.893 24.986 1.00 0.00 O +ATOM 188 HW1 SOL 62 21.561 22.185 24.313 1.00 0.00 H +ATOM 189 HW2 SOL 62 21.893 23.717 24.431 1.00 0.00 H +ATOM 190 OW SOL 63 25.728 14.610 30.886 1.00 0.00 O +ATOM 191 HW1 SOL 63 26.527 14.773 30.307 1.00 0.00 H +ATOM 192 HW2 SOL 63 25.225 13.898 30.398 1.00 0.00 H +ATOM 193 OW SOL 64 25.135 11.052 12.970 1.00 0.00 O +ATOM 194 HW1 SOL 64 25.032 10.506 12.139 1.00 0.00 H +ATOM 195 HW2 SOL 64 25.610 10.438 13.599 1.00 0.00 H +ATOM 196 OW SOL 65 21.134 31.228 16.691 1.00 0.00 O +ATOM 197 HW1 SOL 65 21.641 31.978 17.115 1.00 0.00 H +ATOM 198 HW2 SOL 65 20.392 31.050 17.337 1.00 0.00 H +ATOM 199 OW SOL 66 15.661 24.773 31.063 1.00 0.00 O +ATOM 200 HW1 SOL 66 15.729 24.124 30.306 1.00 0.00 H +ATOM 201 HW2 SOL 66 15.321 25.607 30.629 1.00 0.00 H +ATOM 202 OW SOL 67 25.005 27.999 10.964 1.00 0.00 O +ATOM 203 HW1 SOL 67 25.289 28.514 10.155 1.00 0.00 H +ATOM 204 HW2 SOL 67 24.617 27.159 10.584 1.00 0.00 H +ATOM 205 OW SOL 68 23.912 25.698 23.933 1.00 0.00 O +ATOM 206 HW1 SOL 68 23.423 25.068 24.535 1.00 0.00 H +ATOM 207 HW2 SOL 68 24.848 25.346 23.932 1.00 0.00 H +ATOM 208 OW SOL 69 7.050 20.594 15.260 1.00 0.00 O +ATOM 209 HW1 SOL 69 6.133 20.372 15.590 1.00 0.00 H +ATOM 210 HW2 SOL 69 7.033 21.590 15.169 1.00 0.00 H +ATOM 211 OW SOL 70 10.707 29.314 23.961 1.00 0.00 O +ATOM 212 HW1 SOL 70 10.092 28.529 24.042 1.00 0.00 H +ATOM 213 HW2 SOL 70 10.103 30.057 23.672 1.00 0.00 H +ATOM 214 OW SOL 71 20.974 26.571 12.738 1.00 0.00 O +ATOM 215 HW1 SOL 71 21.250 26.511 11.779 1.00 0.00 H +ATOM 216 HW2 SOL 71 20.503 27.452 12.792 1.00 0.00 H +ATOM 217 OW SOL 72 19.050 11.882 24.746 1.00 0.00 O +ATOM 218 HW1 SOL 72 18.512 11.125 24.374 1.00 0.00 H +ATOM 219 HW2 SOL 72 19.945 11.769 24.315 1.00 0.00 H +ATOM 220 OW SOL 73 16.829 19.778 32.330 1.00 0.00 O +ATOM 221 HW1 SOL 73 16.123 20.115 32.953 1.00 0.00 H +ATOM 222 HW2 SOL 73 17.160 20.606 31.878 1.00 0.00 H +ATOM 223 OW SOL 74 27.194 11.819 10.655 1.00 0.00 O +ATOM 224 HW1 SOL 74 27.283 11.033 11.266 1.00 0.00 H +ATOM 225 HW2 SOL 74 26.907 12.560 11.262 1.00 0.00 H +ATOM 226 OW SOL 75 9.143 26.922 18.015 1.00 0.00 O +ATOM 227 HW1 SOL 75 9.732 26.265 18.486 1.00 0.00 H +ATOM 228 HW2 SOL 75 8.240 26.494 18.047 1.00 0.00 H +ATOM 229 OW SOL 76 24.798 18.634 30.721 1.00 0.00 O +ATOM 230 HW1 SOL 76 24.248 18.074 30.101 1.00 0.00 H +ATOM 231 HW2 SOL 76 25.641 18.795 30.208 1.00 0.00 H +ATOM 232 OW SOL 77 19.713 11.078 9.455 1.00 0.00 O +ATOM 233 HW1 SOL 77 19.886 10.367 10.137 1.00 0.00 H +ATOM 234 HW2 SOL 77 19.629 11.912 10.000 1.00 0.00 H +ATOM 235 OW SOL 78 19.949 16.434 18.234 1.00 0.00 O +ATOM 236 HW1 SOL 78 20.849 16.785 17.978 1.00 0.00 H +ATOM 237 HW2 SOL 78 19.360 16.720 17.479 1.00 0.00 H +ATOM 238 OW SOL 79 26.100 20.094 24.860 1.00 0.00 O +ATOM 239 HW1 SOL 79 25.929 20.125 23.875 1.00 0.00 H +ATOM 240 HW2 SOL 79 27.079 19.902 24.923 1.00 0.00 H +ATOM 241 OW SOL 80 28.245 23.176 16.401 1.00 0.00 O +ATOM 242 HW1 SOL 80 29.089 23.075 16.928 1.00 0.00 H +ATOM 243 HW2 SOL 80 27.898 22.241 16.330 1.00 0.00 H +ATOM 244 OW SOL 81 23.429 7.658 15.115 1.00 0.00 O +ATOM 245 HW1 SOL 81 23.809 7.098 14.379 1.00 0.00 H +ATOM 246 HW2 SOL 81 22.872 8.334 14.633 1.00 0.00 H +ATOM 247 OW SOL 82 10.552 26.955 16.715 1.00 0.00 O +ATOM 248 HW1 SOL 82 10.884 27.105 15.784 1.00 0.00 H +ATOM 249 HW2 SOL 82 10.537 27.873 17.111 1.00 0.00 H +ATOM 250 OW SOL 83 16.927 19.868 15.041 1.00 0.00 O +ATOM 251 HW1 SOL 83 17.297 20.069 14.134 1.00 0.00 H +ATOM 252 HW2 SOL 83 17.447 19.066 15.335 1.00 0.00 H +ATOM 253 OW SOL 84 13.998 26.748 24.005 1.00 0.00 O +ATOM 254 HW1 SOL 84 13.596 25.972 23.519 1.00 0.00 H +ATOM 255 HW2 SOL 84 13.297 27.458 23.937 1.00 0.00 H +ATOM 256 OW SOL 85 14.352 31.295 25.838 1.00 0.00 O +ATOM 257 HW1 SOL 85 13.403 31.109 25.586 1.00 0.00 H +ATOM 258 HW2 SOL 85 14.735 31.719 25.018 1.00 0.00 H +ATOM 259 OW SOL 86 25.245 18.847 22.053 1.00 0.00 O +ATOM 260 HW1 SOL 86 24.739 19.112 22.874 1.00 0.00 H +ATOM 261 HW2 SOL 86 24.714 18.083 21.686 1.00 0.00 H +ATOM 262 OW SOL 87 18.110 19.707 19.148 1.00 0.00 O +ATOM 263 HW1 SOL 87 18.008 20.702 19.124 1.00 0.00 H +ATOM 264 HW2 SOL 87 17.670 19.405 18.303 1.00 0.00 H +ATOM 265 OW SOL 88 18.407 29.100 15.428 1.00 0.00 O +ATOM 266 HW1 SOL 88 17.629 28.693 15.907 1.00 0.00 H +ATOM 267 HW2 SOL 88 18.057 29.264 14.506 1.00 0.00 H +ATOM 268 OW SOL 89 21.496 27.940 30.924 1.00 0.00 O +ATOM 269 HW1 SOL 89 22.219 28.126 31.589 1.00 0.00 H +ATOM 270 HW2 SOL 89 21.009 27.160 31.317 1.00 0.00 H +ATOM 271 OW SOL 90 21.396 23.151 19.398 1.00 0.00 O +ATOM 272 HW1 SOL 90 22.203 22.959 18.839 1.00 0.00 H +ATOM 273 HW2 SOL 90 21.351 24.150 19.414 1.00 0.00 H +ATOM 274 OW SOL 91 32.625 27.206 21.159 1.00 0.00 O +ATOM 275 HW1 SOL 91 32.437 26.355 21.649 1.00 0.00 H +ATOM 276 HW2 SOL 91 31.757 27.700 21.202 1.00 0.00 H +ATOM 277 OW SOL 92 28.432 18.158 21.287 1.00 0.00 O +ATOM 278 HW1 SOL 92 28.045 18.046 20.373 1.00 0.00 H +ATOM 279 HW2 SOL 92 27.657 17.989 21.895 1.00 0.00 H +ATOM 280 OW SOL 93 21.854 13.532 15.062 1.00 0.00 O +ATOM 281 HW1 SOL 93 22.622 14.072 15.406 1.00 0.00 H +ATOM 282 HW2 SOL 93 21.496 13.083 15.881 1.00 0.00 H +ATOM 283 OW SOL 94 24.782 18.353 11.187 1.00 0.00 O +ATOM 284 HW1 SOL 94 25.623 17.860 10.966 1.00 0.00 H +ATOM 285 HW2 SOL 94 24.721 19.048 10.471 1.00 0.00 H +ATOM 286 OW SOL 95 18.737 27.913 27.854 1.00 0.00 O +ATOM 287 HW1 SOL 95 19.078 27.134 28.380 1.00 0.00 H +ATOM 288 HW2 SOL 95 18.398 28.541 28.555 1.00 0.00 H +ATOM 289 OW SOL 96 18.869 14.640 29.839 1.00 0.00 O +ATOM 290 HW1 SOL 96 17.889 14.819 29.925 1.00 0.00 H +ATOM 291 HW2 SOL 96 19.162 14.476 30.781 1.00 0.00 H +ATOM 292 OW SOL 97 15.633 29.145 19.667 1.00 0.00 O +ATOM 293 HW1 SOL 97 16.374 28.912 20.297 1.00 0.00 H +ATOM 294 HW2 SOL 97 14.874 29.383 20.273 1.00 0.00 H +ATOM 295 OW SOL 98 17.231 13.661 27.274 1.00 0.00 O +ATOM 296 HW1 SOL 98 17.386 14.182 28.113 1.00 0.00 H +ATOM 297 HW2 SOL 98 17.027 12.739 27.603 1.00 0.00 H +ATOM 298 OW SOL 99 22.474 9.875 11.065 1.00 0.00 O +ATOM 299 HW1 SOL 99 22.471 10.847 10.828 1.00 0.00 H +ATOM 300 HW2 SOL 99 23.197 9.495 10.488 1.00 0.00 H +ATOM 301 OW SOL 100 9.546 17.626 27.369 1.00 0.00 O +ATOM 302 HW1 SOL 100 9.197 18.507 27.050 1.00 0.00 H +ATOM 303 HW2 SOL 100 9.858 17.179 26.530 1.00 0.00 H +ATOM 304 OW SOL 101 29.435 20.599 25.289 1.00 0.00 O +ATOM 305 HW1 SOL 101 29.100 21.122 24.506 1.00 0.00 H +ATOM 306 HW2 SOL 101 29.952 19.852 24.871 1.00 0.00 H +ATOM 307 OW SOL 102 16.859 24.623 17.953 1.00 0.00 O +ATOM 308 HW1 SOL 102 16.278 24.398 17.171 1.00 0.00 H +ATOM 309 HW2 SOL 102 17.749 24.814 17.538 1.00 0.00 H +ATOM 310 OW SOL 103 22.411 17.494 8.922 1.00 0.00 O +ATOM 311 HW1 SOL 103 22.525 17.755 7.964 1.00 0.00 H +ATOM 312 HW2 SOL 103 23.034 16.721 9.033 1.00 0.00 H +ATOM 313 OW SOL 104 27.718 17.918 18.028 1.00 0.00 O +ATOM 314 HW1 SOL 104 27.794 18.719 18.621 1.00 0.00 H +ATOM 315 HW2 SOL 104 26.973 17.390 18.437 1.00 0.00 H +ATOM 316 OW SOL 105 19.428 28.867 22.791 1.00 0.00 O +ATOM 317 HW1 SOL 105 20.268 29.090 23.285 1.00 0.00 H +ATOM 318 HW2 SOL 105 18.738 28.811 23.513 1.00 0.00 H +ATOM 319 OW SOL 106 10.198 24.333 21.376 1.00 0.00 O +ATOM 320 HW1 SOL 106 10.435 23.555 21.958 1.00 0.00 H +ATOM 321 HW2 SOL 106 10.262 25.117 21.992 1.00 0.00 H +ATOM 322 OW SOL 107 22.196 18.465 31.449 1.00 0.00 O +ATOM 323 HW1 SOL 107 22.006 17.752 30.774 1.00 0.00 H +ATOM 324 HW2 SOL 107 22.312 19.289 30.895 1.00 0.00 H +ATOM 325 OW SOL 108 19.177 16.695 28.844 1.00 0.00 O +ATOM 326 HW1 SOL 108 18.541 17.348 29.254 1.00 0.00 H +ATOM 327 HW2 SOL 108 18.616 16.205 28.178 1.00 0.00 H +ATOM 328 OW SOL 109 14.256 13.056 21.586 1.00 0.00 O +ATOM 329 HW1 SOL 109 14.417 12.261 21.002 1.00 0.00 H +ATOM 330 HW2 SOL 109 13.308 13.307 21.387 1.00 0.00 H +ATOM 331 OW SOL 110 19.769 17.841 19.874 1.00 0.00 O +ATOM 332 HW1 SOL 110 20.206 17.669 20.757 1.00 0.00 H +ATOM 333 HW2 SOL 110 18.942 18.349 20.116 1.00 0.00 H +ATOM 334 OW SOL 111 19.177 24.021 24.409 1.00 0.00 O +ATOM 335 HW1 SOL 111 18.930 24.860 24.895 1.00 0.00 H +ATOM 336 HW2 SOL 111 19.348 23.365 25.144 1.00 0.00 H +ATOM 337 OW SOL 112 13.128 19.682 21.718 1.00 0.00 O +ATOM 338 HW1 SOL 112 12.916 20.560 21.288 1.00 0.00 H +ATOM 339 HW2 SOL 112 13.991 19.413 21.292 1.00 0.00 H +ATOM 340 OW SOL 113 24.265 10.766 24.493 1.00 0.00 O +ATOM 341 HW1 SOL 113 24.149 11.305 25.328 1.00 0.00 H +ATOM 342 HW2 SOL 113 24.889 10.035 24.769 1.00 0.00 H +ATOM 343 OW SOL 114 15.224 12.544 26.191 1.00 0.00 O +ATOM 344 HW1 SOL 114 14.815 12.639 25.284 1.00 0.00 H +ATOM 345 HW2 SOL 114 15.905 11.822 26.067 1.00 0.00 H +ATOM 346 OW SOL 115 16.171 28.128 25.166 1.00 0.00 O +ATOM 347 HW1 SOL 115 15.398 28.548 25.641 1.00 0.00 H +ATOM 348 HW2 SOL 115 16.066 27.153 25.360 1.00 0.00 H +ATOM 349 OW SOL 116 16.179 7.973 18.838 1.00 0.00 O +ATOM 350 HW1 SOL 116 15.811 8.610 19.516 1.00 0.00 H +ATOM 351 HW2 SOL 116 17.002 7.611 19.277 1.00 0.00 H +ATOM 352 OW SOL 117 14.860 10.741 22.956 1.00 0.00 O +ATOM 353 HW1 SOL 117 14.672 10.505 22.002 1.00 0.00 H +ATOM 354 HW2 SOL 117 14.057 11.269 23.231 1.00 0.00 H +ATOM 355 OW SOL 118 20.264 22.364 7.812 1.00 0.00 O +ATOM 356 HW1 SOL 118 20.097 22.151 6.850 1.00 0.00 H +ATOM 357 HW2 SOL 118 21.123 21.893 8.013 1.00 0.00 H +ATOM 358 OW SOL 119 14.432 13.841 28.501 1.00 0.00 O +ATOM 359 HW1 SOL 119 14.895 13.802 27.616 1.00 0.00 H +ATOM 360 HW2 SOL 119 13.754 13.108 28.445 1.00 0.00 H +ATOM 361 OW SOL 120 23.949 28.612 28.421 1.00 0.00 O +ATOM 362 HW1 SOL 120 23.700 29.051 29.285 1.00 0.00 H +ATOM 363 HW2 SOL 120 23.114 28.673 27.876 1.00 0.00 H +ATOM 364 OW SOL 121 24.860 26.234 15.593 1.00 0.00 O +ATOM 365 HW1 SOL 121 24.021 26.709 15.327 1.00 0.00 H +ATOM 366 HW2 SOL 121 24.678 25.941 16.531 1.00 0.00 H +ATOM 367 OW SOL 122 13.994 20.898 31.066 1.00 0.00 O +ATOM 368 HW1 SOL 122 14.720 21.484 30.705 1.00 0.00 H +ATOM 369 HW2 SOL 122 14.403 20.493 31.884 1.00 0.00 H +ATOM 370 OW SOL 123 19.763 31.059 19.445 1.00 0.00 O +ATOM 371 HW1 SOL 123 18.818 31.118 19.767 1.00 0.00 H +ATOM 372 HW2 SOL 123 20.274 30.793 20.262 1.00 0.00 H +ATOM 373 OW SOL 124 15.319 22.439 27.337 1.00 0.00 O +ATOM 374 HW1 SOL 124 15.956 23.111 27.716 1.00 0.00 H +ATOM 375 HW2 SOL 124 14.687 22.262 28.091 1.00 0.00 H +ATOM 376 OW SOL 125 22.320 32.061 22.179 1.00 0.00 O +ATOM 377 HW1 SOL 125 22.491 31.137 21.839 1.00 0.00 H +ATOM 378 HW2 SOL 125 22.019 32.560 21.367 1.00 0.00 H +ATOM 379 OW SOL 126 27.110 12.879 27.942 1.00 0.00 O +ATOM 380 HW1 SOL 126 26.163 12.568 27.865 1.00 0.00 H +ATOM 381 HW2 SOL 126 27.090 13.507 28.719 1.00 0.00 H +ATOM 382 OW SOL 127 9.308 20.552 15.865 1.00 0.00 O +ATOM 383 HW1 SOL 127 8.830 21.419 15.729 1.00 0.00 H +ATOM 384 HW2 SOL 127 9.870 20.716 16.675 1.00 0.00 H +ATOM 385 OW SOL 128 8.347 18.938 14.159 1.00 0.00 O +ATOM 386 HW1 SOL 128 9.293 18.804 13.864 1.00 0.00 H +ATOM 387 HW2 SOL 128 8.389 18.811 15.149 1.00 0.00 H +ATOM 388 OW SOL 129 24.213 29.125 21.625 1.00 0.00 O +ATOM 389 HW1 SOL 129 23.525 29.555 21.040 1.00 0.00 H +ATOM 390 HW2 SOL 129 25.014 29.053 21.031 1.00 0.00 H +ATOM 391 OW SOL 130 15.833 23.752 32.917 1.00 0.00 O +ATOM 392 HW1 SOL 130 14.936 24.157 32.743 1.00 0.00 H +ATOM 393 HW2 SOL 130 15.904 23.030 32.229 1.00 0.00 H +ATOM 394 OW SOL 131 16.075 23.397 13.754 1.00 0.00 O +ATOM 395 HW1 SOL 131 16.295 24.212 14.289 1.00 0.00 H +ATOM 396 HW2 SOL 131 16.944 22.904 13.705 1.00 0.00 H +ATOM 397 OW SOL 132 20.326 20.875 18.699 1.00 0.00 O +ATOM 398 HW1 SOL 132 20.765 21.712 18.372 1.00 0.00 H +ATOM 399 HW2 SOL 132 20.345 20.271 17.903 1.00 0.00 H +ATOM 400 OW SOL 133 9.929 15.192 16.898 1.00 0.00 O +ATOM 401 HW1 SOL 133 10.630 15.898 16.998 1.00 0.00 H +ATOM 402 HW2 SOL 133 9.460 15.197 17.781 1.00 0.00 H +ATOM 403 OW SOL 134 16.787 20.325 25.209 1.00 0.00 O +ATOM 404 HW1 SOL 134 16.624 20.233 26.192 1.00 0.00 H +ATOM 405 HW2 SOL 134 17.637 20.849 25.159 1.00 0.00 H +ATOM 406 OW SOL 135 17.520 21.373 23.048 1.00 0.00 O +ATOM 407 HW1 SOL 135 16.601 21.519 23.412 1.00 0.00 H +ATOM 408 HW2 SOL 135 17.589 22.039 22.305 1.00 0.00 H +ATOM 409 OW SOL 136 23.555 18.200 32.700 1.00 0.00 O +ATOM 410 HW1 SOL 136 23.865 19.126 32.915 1.00 0.00 H +ATOM 411 HW2 SOL 136 23.912 17.651 33.456 1.00 0.00 H +ATOM 412 OW SOL 137 23.805 17.377 24.654 1.00 0.00 O +ATOM 413 HW1 SOL 137 22.966 16.841 24.563 1.00 0.00 H +ATOM 414 HW2 SOL 137 24.198 17.057 25.515 1.00 0.00 H +ATOM 415 OW SOL 138 26.351 32.443 20.268 1.00 0.00 O +ATOM 416 HW1 SOL 138 25.929 32.467 19.362 1.00 0.00 H +ATOM 417 HW2 SOL 138 26.686 31.505 20.348 1.00 0.00 H +ATOM 418 OW SOL 139 29.387 20.828 17.230 1.00 0.00 O +ATOM 419 HW1 SOL 139 28.756 20.608 17.974 1.00 0.00 H +ATOM 420 HW2 SOL 139 29.627 19.934 16.852 1.00 0.00 H +ATOM 421 OW SOL 140 14.191 23.512 23.343 1.00 0.00 O +ATOM 422 HW1 SOL 140 14.176 23.411 22.348 1.00 0.00 H +ATOM 423 HW2 SOL 140 14.034 22.582 23.676 1.00 0.00 H +ATOM 424 OW SOL 141 15.756 15.625 22.699 1.00 0.00 O +ATOM 425 HW1 SOL 141 15.667 16.593 22.933 1.00 0.00 H +ATOM 426 HW2 SOL 141 15.942 15.186 23.577 1.00 0.00 H +ATOM 427 OW SOL 142 20.510 13.333 11.927 1.00 0.00 O +ATOM 428 HW1 SOL 142 20.283 14.306 11.925 1.00 0.00 H +ATOM 429 HW2 SOL 142 20.679 13.131 12.892 1.00 0.00 H +ATOM 430 OW SOL 143 24.585 21.862 22.891 1.00 0.00 O +ATOM 431 HW1 SOL 143 24.215 21.242 23.583 1.00 0.00 H +ATOM 432 HW2 SOL 143 24.284 21.457 22.027 1.00 0.00 H +ATOM 433 OW SOL 144 19.090 26.889 31.259 1.00 0.00 O +ATOM 434 HW1 SOL 144 18.787 27.543 30.565 1.00 0.00 H +ATOM 435 HW2 SOL 144 19.301 27.464 32.049 1.00 0.00 H +ATOM 436 OW SOL 145 7.500 15.159 18.426 1.00 0.00 O +ATOM 437 HW1 SOL 145 8.026 14.423 18.852 1.00 0.00 H +ATOM 438 HW2 SOL 145 7.359 15.810 19.171 1.00 0.00 H +ATOM 439 OW SOL 146 27.618 20.029 10.797 1.00 0.00 O +ATOM 440 HW1 SOL 146 28.084 19.652 9.998 1.00 0.00 H +ATOM 441 HW2 SOL 146 26.728 19.574 10.788 1.00 0.00 H +ATOM 442 OW SOL 147 11.282 12.159 12.611 1.00 0.00 O +ATOM 443 HW1 SOL 147 11.736 11.951 13.478 1.00 0.00 H +ATOM 444 HW2 SOL 147 10.338 11.869 12.764 1.00 0.00 H +ATOM 445 OW SOL 148 15.008 16.634 8.329 1.00 0.00 O +ATOM 446 HW1 SOL 148 14.565 17.240 8.990 1.00 0.00 H +ATOM 447 HW2 SOL 148 14.744 17.017 7.444 1.00 0.00 H +ATOM 448 OW SOL 149 29.329 17.460 13.545 1.00 0.00 O +ATOM 449 HW1 SOL 149 29.799 16.662 13.921 1.00 0.00 H +ATOM 450 HW2 SOL 149 29.197 18.052 14.340 1.00 0.00 H +ATOM 451 OW SOL 150 11.143 29.847 21.994 1.00 0.00 O +ATOM 452 HW1 SOL 150 11.288 29.066 21.386 1.00 0.00 H +ATOM 453 HW2 SOL 150 11.125 30.629 21.372 1.00 0.00 H +ATOM 454 OW SOL 151 12.115 21.477 18.277 1.00 0.00 O +ATOM 455 HW1 SOL 151 13.049 21.751 18.052 1.00 0.00 H +ATOM 456 HW2 SOL 151 11.688 21.338 17.383 1.00 0.00 H +ATOM 457 OW SOL 152 22.610 13.864 17.470 1.00 0.00 O +ATOM 458 HW1 SOL 152 22.705 12.875 17.359 1.00 0.00 H +ATOM 459 HW2 SOL 152 22.548 13.985 18.461 1.00 0.00 H +ATOM 460 OW SOL 153 29.100 16.537 16.520 1.00 0.00 O +ATOM 461 HW1 SOL 153 28.138 16.665 16.280 1.00 0.00 H +ATOM 462 HW2 SOL 153 29.337 15.667 16.089 1.00 0.00 H +ATOM 463 OW SOL 154 12.381 21.642 14.486 1.00 0.00 O +ATOM 464 HW1 SOL 154 13.077 20.974 14.750 1.00 0.00 H +ATOM 465 HW2 SOL 154 11.884 21.814 15.337 1.00 0.00 H +ATOM 466 OW SOL 155 31.757 13.163 21.010 1.00 0.00 O +ATOM 467 HW1 SOL 155 31.139 13.597 21.665 1.00 0.00 H +ATOM 468 HW2 SOL 155 32.466 12.758 21.587 1.00 0.00 H +ATOM 469 OW SOL 156 21.536 18.257 25.616 1.00 0.00 O +ATOM 470 HW1 SOL 156 21.932 18.565 26.481 1.00 0.00 H +ATOM 471 HW2 SOL 156 22.086 18.726 24.925 1.00 0.00 H +ATOM 472 OW SOL 157 20.543 27.375 25.907 1.00 0.00 O +ATOM 473 HW1 SOL 157 19.895 26.941 26.533 1.00 0.00 H +ATOM 474 HW2 SOL 157 21.169 27.861 26.515 1.00 0.00 H +ATOM 475 OW SOL 158 13.721 27.318 16.382 1.00 0.00 O +ATOM 476 HW1 SOL 158 12.766 27.561 16.555 1.00 0.00 H +ATOM 477 HW2 SOL 158 14.081 27.115 17.292 1.00 0.00 H +ATOM 478 OW SOL 159 11.109 14.336 28.727 1.00 0.00 O +ATOM 479 HW1 SOL 159 10.922 15.263 29.051 1.00 0.00 H +ATOM 480 HW2 SOL 159 11.994 14.116 29.138 1.00 0.00 H +ATOM 481 OW SOL 160 7.998 25.909 14.509 1.00 0.00 O +ATOM 482 HW1 SOL 160 7.826 25.064 14.002 1.00 0.00 H +ATOM 483 HW2 SOL 160 8.506 26.475 13.860 1.00 0.00 H +ATOM 484 OW SOL 161 25.404 24.209 13.944 1.00 0.00 O +ATOM 485 HW1 SOL 161 25.354 23.381 14.502 1.00 0.00 H +ATOM 486 HW2 SOL 161 26.173 24.712 14.336 1.00 0.00 H +ATOM 487 OW SOL 162 24.844 25.891 26.881 1.00 0.00 O +ATOM 488 HW1 SOL 162 25.424 25.089 27.018 1.00 0.00 H +ATOM 489 HW2 SOL 162 24.491 25.772 25.953 1.00 0.00 H +ATOM 490 OW SOL 163 14.619 20.558 23.171 1.00 0.00 O +ATOM 491 HW1 SOL 163 15.041 20.548 24.077 1.00 0.00 H +ATOM 492 HW2 SOL 163 13.641 20.481 23.366 1.00 0.00 H +ATOM 493 OW SOL 164 27.083 10.805 27.618 1.00 0.00 O +ATOM 494 HW1 SOL 164 27.958 10.356 27.439 1.00 0.00 H +ATOM 495 HW2 SOL 164 26.964 10.702 28.606 1.00 0.00 H +ATOM 496 OW SOL 165 23.957 28.645 23.912 1.00 0.00 O +ATOM 497 HW1 SOL 165 23.636 27.724 23.693 1.00 0.00 H +ATOM 498 HW2 SOL 165 24.334 28.551 24.833 1.00 0.00 H +ATOM 499 OW SOL 166 21.857 28.095 24.745 1.00 0.00 O +ATOM 500 HW1 SOL 166 21.651 27.780 23.818 1.00 0.00 H +ATOM 501 HW2 SOL 166 22.393 27.346 25.134 1.00 0.00 H +ATOM 502 OW SOL 167 14.267 8.489 17.721 1.00 0.00 O +ATOM 503 HW1 SOL 167 14.806 9.323 17.839 1.00 0.00 H +ATOM 504 HW2 SOL 167 14.352 8.289 16.745 1.00 0.00 H +ATOM 505 OW SOL 168 15.230 32.590 23.368 1.00 0.00 O +ATOM 506 HW1 SOL 168 15.697 33.435 23.630 1.00 0.00 H +ATOM 507 HW2 SOL 168 15.330 32.564 22.374 1.00 0.00 H +ATOM 508 OW SOL 169 20.692 18.024 12.789 1.00 0.00 O +ATOM 509 HW1 SOL 169 20.383 17.682 13.676 1.00 0.00 H +ATOM 510 HW2 SOL 169 21.344 17.331 12.483 1.00 0.00 H +ATOM 511 OW SOL 170 20.941 14.283 32.482 1.00 0.00 O +ATOM 512 HW1 SOL 170 20.807 15.094 31.913 1.00 0.00 H +ATOM 513 HW2 SOL 170 21.798 13.896 32.144 1.00 0.00 H +ATOM 514 OW SOL 171 20.572 24.087 21.759 1.00 0.00 O +ATOM 515 HW1 SOL 171 20.177 24.703 21.078 1.00 0.00 H +ATOM 516 HW2 SOL 171 21.047 23.401 21.209 1.00 0.00 H +ATOM 517 OW SOL 172 27.011 21.983 12.689 1.00 0.00 O +ATOM 518 HW1 SOL 172 26.589 21.796 13.576 1.00 0.00 H +ATOM 519 HW2 SOL 172 27.502 21.138 12.478 1.00 0.00 H +ATOM 520 OW SOL 173 27.873 21.492 26.173 1.00 0.00 O +ATOM 521 HW1 SOL 173 28.092 21.918 27.051 1.00 0.00 H +ATOM 522 HW2 SOL 173 26.908 21.715 26.036 1.00 0.00 H +ATOM 523 OW SOL 174 18.801 23.348 22.703 1.00 0.00 O +ATOM 524 HW1 SOL 174 18.700 24.180 22.157 1.00 0.00 H +ATOM 525 HW2 SOL 174 19.279 22.720 22.089 1.00 0.00 H +ATOM 526 OW SOL 175 28.842 13.423 18.022 1.00 0.00 O +ATOM 527 HW1 SOL 175 28.740 12.648 18.646 1.00 0.00 H +ATOM 528 HW2 SOL 175 28.519 14.202 18.559 1.00 0.00 H +ATOM 529 OW SOL 176 25.404 27.238 13.894 1.00 0.00 O +ATOM 530 HW1 SOL 176 25.057 28.141 13.642 1.00 0.00 H +ATOM 531 HW2 SOL 176 25.068 26.644 13.164 1.00 0.00 H +ATOM 532 OW SOL 177 13.648 31.004 20.523 1.00 0.00 O +ATOM 533 HW1 SOL 177 14.154 31.859 20.403 1.00 0.00 H +ATOM 534 HW2 SOL 177 13.311 30.798 19.605 1.00 0.00 H +ATOM 535 OW SOL 178 14.229 17.416 17.143 1.00 0.00 O +ATOM 536 HW1 SOL 178 13.948 16.941 16.310 1.00 0.00 H +ATOM 537 HW2 SOL 178 15.227 17.369 17.117 1.00 0.00 H +ATOM 538 OW SOL 179 15.646 10.903 29.696 1.00 0.00 O +ATOM 539 HW1 SOL 179 16.138 11.535 29.097 1.00 0.00 H +ATOM 540 HW2 SOL 179 16.141 10.966 30.562 1.00 0.00 H +ATOM 541 OW SOL 180 19.621 22.063 14.117 1.00 0.00 O +ATOM 542 HW1 SOL 180 19.137 22.720 14.695 1.00 0.00 H +ATOM 543 HW2 SOL 180 19.979 21.395 14.768 1.00 0.00 H +ATOM 544 OW SOL 181 30.397 26.314 19.886 1.00 0.00 O +ATOM 545 HW1 SOL 181 30.779 26.155 20.796 1.00 0.00 H +ATOM 546 HW2 SOL 181 30.028 25.421 19.626 1.00 0.00 H +ATOM 547 OW SOL 182 19.674 13.424 22.478 1.00 0.00 O +ATOM 548 HW1 SOL 182 18.963 12.986 21.929 1.00 0.00 H +ATOM 549 HW2 SOL 182 20.211 13.934 21.806 1.00 0.00 H +ATOM 550 OW SOL 183 18.668 14.883 20.010 1.00 0.00 O +ATOM 551 HW1 SOL 183 18.273 14.187 20.610 1.00 0.00 H +ATOM 552 HW2 SOL 183 19.045 15.557 20.645 1.00 0.00 H +ATOM 553 OW SOL 184 17.034 29.023 9.488 1.00 0.00 O +ATOM 554 HW1 SOL 184 17.506 29.166 10.358 1.00 0.00 H +ATOM 555 HW2 SOL 184 17.634 28.392 8.995 1.00 0.00 H +ATOM 556 OW SOL 185 22.961 20.786 25.713 1.00 0.00 O +ATOM 557 HW1 SOL 185 22.731 20.546 24.770 1.00 0.00 H +ATOM 558 HW2 SOL 185 22.071 20.838 26.166 1.00 0.00 H +ATOM 559 OW SOL 186 26.286 17.329 31.213 1.00 0.00 O +ATOM 560 HW1 SOL 186 26.404 17.825 32.073 1.00 0.00 H +ATOM 561 HW2 SOL 186 26.241 16.371 31.498 1.00 0.00 H +ATOM 562 OW SOL 187 27.580 14.914 14.672 1.00 0.00 O +ATOM 563 HW1 SOL 187 27.811 14.051 15.121 1.00 0.00 H +ATOM 564 HW2 SOL 187 27.719 14.720 13.701 1.00 0.00 H +ATOM 565 OW SOL 188 23.031 33.085 25.667 1.00 0.00 O +ATOM 566 HW1 SOL 188 23.825 32.541 25.398 1.00 0.00 H +ATOM 567 HW2 SOL 188 22.449 33.071 24.854 1.00 0.00 H +ATOM 568 OW SOL 189 15.597 15.370 30.674 1.00 0.00 O +ATOM 569 HW1 SOL 189 15.625 16.152 31.297 1.00 0.00 H +ATOM 570 HW2 SOL 189 15.518 14.583 31.286 1.00 0.00 H +ATOM 571 OW SOL 190 16.883 26.648 31.638 1.00 0.00 O +ATOM 572 HW1 SOL 190 16.297 26.276 32.357 1.00 0.00 H +ATOM 573 HW2 SOL 190 16.832 27.637 31.780 1.00 0.00 H +ATOM 574 OW SOL 191 19.861 24.244 32.586 1.00 0.00 O +ATOM 575 HW1 SOL 191 19.950 23.992 31.623 1.00 0.00 H +ATOM 576 HW2 SOL 191 20.144 25.202 32.606 1.00 0.00 H +ATOM 577 OW SOL 192 15.257 9.758 26.764 1.00 0.00 O +ATOM 578 HW1 SOL 192 14.827 10.581 27.136 1.00 0.00 H +ATOM 579 HW2 SOL 192 16.212 10.027 26.639 1.00 0.00 H +ATOM 580 OW SOL 193 21.738 19.826 33.281 1.00 0.00 O +ATOM 581 HW1 SOL 193 22.076 20.323 32.483 1.00 0.00 H +ATOM 582 HW2 SOL 193 20.856 20.258 33.472 1.00 0.00 H +ATOM 583 OW SOL 194 10.469 18.366 28.899 1.00 0.00 O +ATOM 584 HW1 SOL 194 11.297 18.486 28.352 1.00 0.00 H +ATOM 585 HW2 SOL 194 10.007 19.250 28.826 1.00 0.00 H +ATOM 586 OW SOL 195 19.058 31.288 28.229 1.00 0.00 O +ATOM 587 HW1 SOL 195 18.137 31.553 28.515 1.00 0.00 H +ATOM 588 HW2 SOL 195 19.157 31.712 27.329 1.00 0.00 H +ATOM 589 OW SOL 196 15.716 28.774 16.471 1.00 0.00 O +ATOM 590 HW1 SOL 196 15.871 28.372 17.373 1.00 0.00 H +ATOM 591 HW2 SOL 196 14.924 29.367 16.610 1.00 0.00 H +ATOM 592 OW SOL 197 15.165 21.070 10.861 1.00 0.00 O +ATOM 593 HW1 SOL 197 14.773 20.723 11.713 1.00 0.00 H +ATOM 594 HW2 SOL 197 14.363 21.299 10.309 1.00 0.00 H +ATOM 595 OW SOL 198 18.682 30.296 17.929 1.00 0.00 O +ATOM 596 HW1 SOL 198 18.616 30.245 16.933 1.00 0.00 H +ATOM 597 HW2 SOL 198 19.420 29.658 18.149 1.00 0.00 H +ATOM 598 OW SOL 199 25.446 15.251 13.605 1.00 0.00 O +ATOM 599 HW1 SOL 199 25.367 14.695 12.778 1.00 0.00 H +ATOM 600 HW2 SOL 199 25.061 14.668 14.320 1.00 0.00 H +ATOM 601 OW SOL 200 25.596 23.079 27.017 1.00 0.00 O +ATOM 602 HW1 SOL 200 24.713 23.143 27.480 1.00 0.00 H +ATOM 603 HW2 SOL 200 26.235 22.861 27.754 1.00 0.00 H +ATOM 604 OW SOL 201 23.494 11.771 21.543 1.00 0.00 O +ATOM 605 HW1 SOL 201 23.982 12.630 21.693 1.00 0.00 H +ATOM 606 HW2 SOL 201 24.210 11.143 21.237 1.00 0.00 H +ATOM 607 OW SOL 202 26.800 29.112 25.566 1.00 0.00 O +ATOM 608 HW1 SOL 202 26.671 30.102 25.515 1.00 0.00 H +ATOM 609 HW2 SOL 202 26.164 28.828 26.284 1.00 0.00 H +ATOM 610 OW SOL 203 26.261 24.860 10.711 1.00 0.00 O +ATOM 611 HW1 SOL 203 26.533 25.358 11.534 1.00 0.00 H +ATOM 612 HW2 SOL 203 27.110 24.432 10.402 1.00 0.00 H +ATOM 613 OW SOL 204 9.456 24.988 15.424 1.00 0.00 O +ATOM 614 HW1 SOL 204 10.300 24.942 15.958 1.00 0.00 H +ATOM 615 HW2 SOL 204 8.761 25.229 16.101 1.00 0.00 H +ATOM 616 OW SOL 205 21.383 27.255 22.046 1.00 0.00 O +ATOM 617 HW1 SOL 205 20.602 26.772 21.650 1.00 0.00 H +ATOM 618 HW2 SOL 205 22.099 26.558 22.080 1.00 0.00 H +ATOM 619 OW SOL 206 14.538 22.985 19.831 1.00 0.00 O +ATOM 620 HW1 SOL 206 13.872 23.579 20.283 1.00 0.00 H +ATOM 621 HW2 SOL 206 15.176 22.748 20.563 1.00 0.00 H +ATOM 622 OW SOL 207 12.256 23.724 21.874 1.00 0.00 O +ATOM 623 HW1 SOL 207 12.712 24.484 22.336 1.00 0.00 H +ATOM 624 HW2 SOL 207 12.160 23.034 22.592 1.00 0.00 H +ATOM 625 OW SOL 208 17.301 22.623 16.712 1.00 0.00 O +ATOM 626 HW1 SOL 208 16.786 22.266 15.933 1.00 0.00 H +ATOM 627 HW2 SOL 208 16.708 22.435 17.494 1.00 0.00 H +ATOM 628 OW SOL 209 27.289 17.023 25.562 1.00 0.00 O +ATOM 629 HW1 SOL 209 27.950 17.324 26.250 1.00 0.00 H +ATOM 630 HW2 SOL 209 26.475 16.802 26.098 1.00 0.00 H +ATOM 631 OW SOL 210 12.046 11.028 23.486 1.00 0.00 O +ATOM 632 HW1 SOL 210 12.209 11.923 23.901 1.00 0.00 H +ATOM 633 HW2 SOL 210 11.256 11.184 22.893 1.00 0.00 H +ATOM 634 OW SOL 211 12.971 23.755 12.904 1.00 0.00 O +ATOM 635 HW1 SOL 211 13.462 22.993 13.326 1.00 0.00 H +ATOM 636 HW2 SOL 211 12.946 23.511 11.935 1.00 0.00 H +ATOM 637 OW SOL 212 18.713 14.967 23.853 1.00 0.00 O +ATOM 638 HW1 SOL 212 18.097 15.333 23.155 1.00 0.00 H +ATOM 639 HW2 SOL 212 18.527 13.985 23.839 1.00 0.00 H +ATOM 640 OW SOL 213 17.844 16.429 18.517 1.00 0.00 O +ATOM 641 HW1 SOL 213 17.744 15.500 18.162 1.00 0.00 H +ATOM 642 HW2 SOL 213 16.981 16.870 18.271 1.00 0.00 H +ATOM 643 OW SOL 214 26.348 27.255 19.389 1.00 0.00 O +ATOM 644 HW1 SOL 214 26.764 27.895 18.744 1.00 0.00 H +ATOM 645 HW2 SOL 214 26.129 27.826 20.180 1.00 0.00 H +ATOM 646 OW SOL 215 19.468 25.203 11.319 1.00 0.00 O +ATOM 647 HW1 SOL 215 19.836 25.775 10.587 1.00 0.00 H +ATOM 648 HW2 SOL 215 20.233 24.606 11.560 1.00 0.00 H +ATOM 649 OW SOL 216 24.482 16.998 15.713 1.00 0.00 O +ATOM 650 HW1 SOL 216 23.782 16.352 15.411 1.00 0.00 H +ATOM 651 HW2 SOL 216 23.957 17.723 16.159 1.00 0.00 H +ATOM 652 OW SOL 217 22.863 24.643 26.438 1.00 0.00 O +ATOM 653 HW1 SOL 217 23.205 23.713 26.305 1.00 0.00 H +ATOM 654 HW2 SOL 217 23.295 24.934 27.291 1.00 0.00 H +ATOM 655 OW SOL 218 16.581 23.137 9.018 1.00 0.00 O +ATOM 656 HW1 SOL 218 15.746 22.632 9.233 1.00 0.00 H +ATOM 657 HW2 SOL 218 16.633 23.826 9.740 1.00 0.00 H +ATOM 658 OW SOL 219 12.098 27.383 14.371 1.00 0.00 O +ATOM 659 HW1 SOL 219 11.253 27.822 14.067 1.00 0.00 H +ATOM 660 HW2 SOL 219 12.162 26.569 13.793 1.00 0.00 H +ATOM 661 OW SOL 220 18.497 10.087 28.018 1.00 0.00 O +ATOM 662 HW1 SOL 220 19.198 10.734 28.318 1.00 0.00 H +ATOM 663 HW2 SOL 220 17.867 10.652 27.485 1.00 0.00 H +ATOM 664 OW SOL 221 23.758 24.161 29.453 1.00 0.00 O +ATOM 665 HW1 SOL 221 24.089 23.218 29.494 1.00 0.00 H +ATOM 666 HW2 SOL 221 24.587 24.695 29.288 1.00 0.00 H +ATOM 667 OW SOL 222 21.864 13.608 29.368 1.00 0.00 O +ATOM 668 HW1 SOL 222 21.386 12.750 29.559 1.00 0.00 H +ATOM 669 HW2 SOL 222 21.214 14.121 28.809 1.00 0.00 H +ATOM 670 OW SOL 223 29.881 27.987 21.278 1.00 0.00 O +ATOM 671 HW1 SOL 223 30.280 28.463 22.060 1.00 0.00 H +ATOM 672 HW2 SOL 223 28.896 28.064 21.433 1.00 0.00 H +ATOM 673 OW SOL 224 14.384 27.766 12.575 1.00 0.00 O +ATOM 674 HW1 SOL 224 13.656 27.745 13.259 1.00 0.00 H +ATOM 675 HW2 SOL 224 15.210 27.928 13.114 1.00 0.00 H +ATOM 676 OW SOL 225 17.381 25.415 12.307 1.00 0.00 O +ATOM 677 HW1 SOL 225 16.685 25.906 11.784 1.00 0.00 H +ATOM 678 HW2 SOL 225 17.361 24.493 11.919 1.00 0.00 H +ATOM 679 OW SOL 226 18.771 26.327 16.968 1.00 0.00 O +ATOM 680 HW1 SOL 226 19.165 26.197 17.878 1.00 0.00 H +ATOM 681 HW2 SOL 226 19.149 25.570 16.436 1.00 0.00 H +ATOM 682 OW SOL 227 26.894 25.793 22.690 1.00 0.00 O +ATOM 683 HW1 SOL 227 27.095 26.573 23.283 1.00 0.00 H +ATOM 684 HW2 SOL 227 26.892 25.014 23.317 1.00 0.00 H +ATOM 685 OW SOL 228 29.615 14.551 22.456 1.00 0.00 O +ATOM 686 HW1 SOL 228 29.405 13.573 22.445 1.00 0.00 H +ATOM 687 HW2 SOL 228 29.346 14.860 21.544 1.00 0.00 H +ATOM 688 OW SOL 229 14.566 25.605 27.425 1.00 0.00 O +ATOM 689 HW1 SOL 229 14.245 25.596 26.478 1.00 0.00 H +ATOM 690 HW2 SOL 229 15.214 24.844 27.462 1.00 0.00 H +ATOM 691 OW SOL 230 20.391 25.772 30.067 1.00 0.00 O +ATOM 692 HW1 SOL 230 21.375 25.748 29.888 1.00 0.00 H +ATOM 693 HW2 SOL 230 20.078 24.864 29.790 1.00 0.00 H +ATOM 694 OW SOL 231 23.233 14.897 21.299 1.00 0.00 O +ATOM 695 HW1 SOL 231 22.260 14.863 21.070 1.00 0.00 H +ATOM 696 HW2 SOL 231 23.269 14.533 22.230 1.00 0.00 H +ATOM 697 OW SOL 232 13.951 14.271 26.024 1.00 0.00 O +ATOM 698 HW1 SOL 232 13.866 15.163 26.468 1.00 0.00 H +ATOM 699 HW2 SOL 232 13.345 13.682 26.559 1.00 0.00 H +ATOM 700 OW SOL 233 28.373 27.959 24.651 1.00 0.00 O +ATOM 701 HW1 SOL 233 27.950 28.614 24.025 1.00 0.00 H +ATOM 702 HW2 SOL 233 28.738 27.253 24.044 1.00 0.00 H +ATOM 703 OW SOL 234 25.500 16.383 23.895 1.00 0.00 O +ATOM 704 HW1 SOL 234 25.500 17.138 23.239 1.00 0.00 H +ATOM 705 HW2 SOL 234 24.639 15.909 23.710 1.00 0.00 H +ATOM 706 OW SOL 235 28.002 12.440 13.022 1.00 0.00 O +ATOM 707 HW1 SOL 235 28.815 12.998 12.852 1.00 0.00 H +ATOM 708 HW2 SOL 235 28.343 11.502 12.958 1.00 0.00 H +ATOM 709 OW SOL 236 18.282 22.984 28.431 1.00 0.00 O +ATOM 710 HW1 SOL 236 17.839 22.956 27.535 1.00 0.00 H +ATOM 711 HW2 SOL 236 17.744 22.345 28.980 1.00 0.00 H +ATOM 712 OW SOL 237 15.334 10.807 19.052 1.00 0.00 O +ATOM 713 HW1 SOL 237 16.230 10.739 18.613 1.00 0.00 H +ATOM 714 HW2 SOL 237 15.543 10.729 20.027 1.00 0.00 H +ATOM 715 OW SOL 238 26.453 20.193 17.035 1.00 0.00 O +ATOM 716 HW1 SOL 238 27.285 19.738 16.718 1.00 0.00 H +ATOM 717 HW2 SOL 238 26.145 20.706 16.234 1.00 0.00 H +ATOM 718 OW SOL 239 10.845 27.204 26.439 1.00 0.00 O +ATOM 719 HW1 SOL 239 11.492 26.526 26.787 1.00 0.00 H +ATOM 720 HW2 SOL 239 10.226 27.356 27.209 1.00 0.00 H +ATOM 721 OW SOL 240 23.318 20.552 29.910 1.00 0.00 O +ATOM 722 HW1 SOL 240 23.322 19.973 29.095 1.00 0.00 H +ATOM 723 HW2 SOL 240 24.208 20.374 30.330 1.00 0.00 H +ATOM 724 OW SOL 241 12.360 11.799 19.506 1.00 0.00 O +ATOM 725 HW1 SOL 241 11.587 12.232 19.969 1.00 0.00 H +ATOM 726 HW2 SOL 241 12.913 11.439 20.258 1.00 0.00 H +ATOM 727 OW SOL 242 10.015 16.482 23.582 1.00 0.00 O +ATOM 728 HW1 SOL 242 9.278 17.021 23.174 1.00 0.00 H +ATOM 729 HW2 SOL 242 10.842 16.856 23.162 1.00 0.00 H +ATOM 730 OW SOL 243 24.378 12.205 18.326 1.00 0.00 O +ATOM 731 HW1 SOL 243 24.260 11.939 19.283 1.00 0.00 H +ATOM 732 HW2 SOL 243 24.465 11.331 17.848 1.00 0.00 H +ATOM 733 OW SOL 244 27.338 13.664 23.454 1.00 0.00 O +ATOM 734 HW1 SOL 244 28.230 13.837 23.870 1.00 0.00 H +ATOM 735 HW2 SOL 244 27.455 13.969 22.509 1.00 0.00 H +ATOM 736 OW SOL 245 16.940 13.384 31.601 1.00 0.00 O +ATOM 737 HW1 SOL 245 17.109 13.112 30.654 1.00 0.00 H +ATOM 738 HW2 SOL 245 17.669 12.928 32.111 1.00 0.00 H +ATOM 739 OW SOL 246 32.005 13.657 23.624 1.00 0.00 O +ATOM 740 HW1 SOL 246 32.257 13.911 24.558 1.00 0.00 H +ATOM 741 HW2 SOL 246 31.963 14.533 23.145 1.00 0.00 H +ATOM 742 OW SOL 247 28.888 16.640 31.052 1.00 0.00 O +ATOM 743 HW1 SOL 247 28.877 16.525 30.058 1.00 0.00 H +ATOM 744 HW2 SOL 247 28.475 17.540 31.190 1.00 0.00 H +ATOM 745 OW SOL 248 30.517 21.634 27.971 1.00 0.00 O +ATOM 746 HW1 SOL 248 30.413 20.686 27.671 1.00 0.00 H +ATOM 747 HW2 SOL 248 29.614 21.868 28.330 1.00 0.00 H +ATOM 748 OW SOL 249 29.278 25.405 14.874 1.00 0.00 O +ATOM 749 HW1 SOL 249 30.211 25.764 14.901 1.00 0.00 H +ATOM 750 HW2 SOL 249 28.781 25.992 15.513 1.00 0.00 H +ATOM 751 OW SOL 250 28.968 21.899 14.796 1.00 0.00 O +ATOM 752 HW1 SOL 250 28.346 22.644 14.559 1.00 0.00 H +ATOM 753 HW2 SOL 250 28.495 21.082 14.467 1.00 0.00 H +ATOM 754 OW SOL 251 14.191 11.981 16.094 1.00 0.00 O +ATOM 755 HW1 SOL 251 14.407 12.074 15.122 1.00 0.00 H +ATOM 756 HW2 SOL 251 14.275 10.999 16.261 1.00 0.00 H +ATOM 757 OW SOL 252 17.788 32.955 15.832 1.00 0.00 O +ATOM 758 HW1 SOL 252 17.315 32.902 14.953 1.00 0.00 H +ATOM 759 HW2 SOL 252 18.279 33.824 15.785 1.00 0.00 H +ATOM 760 OW SOL 253 14.053 32.614 18.037 1.00 0.00 O +ATOM 761 HW1 SOL 253 14.707 32.156 18.638 1.00 0.00 H +ATOM 762 HW2 SOL 253 13.297 32.849 18.647 1.00 0.00 H +ATOM 763 OW SOL 254 15.162 6.761 17.608 1.00 0.00 O +ATOM 764 HW1 SOL 254 16.124 6.787 17.336 1.00 0.00 H +ATOM 765 HW2 SOL 254 15.183 6.326 18.508 1.00 0.00 H +ATOM 766 OW SOL 255 23.403 24.435 19.289 1.00 0.00 O +ATOM 767 HW1 SOL 255 22.966 24.938 20.034 1.00 0.00 H +ATOM 768 HW2 SOL 255 24.203 24.019 19.721 1.00 0.00 H +ATOM 769 OW SOL 256 11.933 18.281 8.865 1.00 0.00 O +ATOM 770 HW1 SOL 256 12.169 18.288 7.894 1.00 0.00 H +ATOM 771 HW2 SOL 256 11.288 17.520 8.945 1.00 0.00 H +ATOM 772 OW SOL 257 17.352 17.223 12.875 1.00 0.00 O +ATOM 773 HW1 SOL 257 17.075 17.788 12.098 1.00 0.00 H +ATOM 774 HW2 SOL 257 16.594 16.579 12.980 1.00 0.00 H +ATOM 775 OW SOL 258 20.845 31.014 24.506 1.00 0.00 O +ATOM 776 HW1 SOL 258 21.494 30.971 23.747 1.00 0.00 H +ATOM 777 HW2 SOL 258 21.299 31.607 25.171 1.00 0.00 H +ATOM 778 OW SOL 259 16.173 30.639 14.579 1.00 0.00 O +ATOM 779 HW1 SOL 259 17.087 31.003 14.755 1.00 0.00 H +ATOM 780 HW2 SOL 259 15.597 31.456 14.545 1.00 0.00 H +ATOM 781 OW SOL 260 26.861 14.882 24.781 1.00 0.00 O +ATOM 782 HW1 SOL 260 27.331 15.619 24.295 1.00 0.00 H +ATOM 783 HW2 SOL 260 27.066 15.066 25.742 1.00 0.00 H +ATOM 784 OW SOL 261 20.147 18.767 8.642 1.00 0.00 O +ATOM 785 HW1 SOL 261 19.932 18.177 7.865 1.00 0.00 H +ATOM 786 HW2 SOL 261 19.754 18.282 9.423 1.00 0.00 H +ATOM 787 OW SOL 262 16.330 11.853 15.027 1.00 0.00 O +ATOM 788 HW1 SOL 262 16.561 11.180 15.729 1.00 0.00 H +ATOM 789 HW2 SOL 262 16.187 12.696 15.546 1.00 0.00 H +ATOM 790 OW SOL 263 19.998 14.127 14.342 1.00 0.00 O +ATOM 791 HW1 SOL 263 19.093 13.932 13.964 1.00 0.00 H +ATOM 792 HW2 SOL 263 20.377 14.802 13.709 1.00 0.00 H +ATOM 793 OW SOL 264 15.286 6.974 21.690 1.00 0.00 O +ATOM 794 HW1 SOL 264 14.490 6.733 21.134 1.00 0.00 H +ATOM 795 HW2 SOL 264 15.987 7.198 21.013 1.00 0.00 H +ATOM 796 OW SOL 265 22.572 20.878 22.776 1.00 0.00 O +ATOM 797 HW1 SOL 265 22.895 20.110 22.224 1.00 0.00 H +ATOM 798 HW2 SOL 265 21.659 21.062 22.413 1.00 0.00 H +ATOM 799 OW SOL 266 13.021 22.353 8.271 1.00 0.00 O +ATOM 800 HW1 SOL 266 13.103 21.539 7.695 1.00 0.00 H +ATOM 801 HW2 SOL 266 12.965 23.103 7.612 1.00 0.00 H +ATOM 802 OW SOL 267 29.306 12.539 20.816 1.00 0.00 O +ATOM 803 HW1 SOL 267 29.850 13.011 20.123 1.00 0.00 H +ATOM 804 HW2 SOL 267 29.587 11.583 20.726 1.00 0.00 H +ATOM 805 OW SOL 268 27.591 8.306 19.715 1.00 0.00 O +ATOM 806 HW1 SOL 268 26.981 8.960 20.162 1.00 0.00 H +ATOM 807 HW2 SOL 268 28.102 7.902 20.473 1.00 0.00 H +ATOM 808 OW SOL 269 14.625 19.150 27.877 1.00 0.00 O +ATOM 809 HW1 SOL 269 14.905 19.901 28.474 1.00 0.00 H +ATOM 810 HW2 SOL 269 14.485 18.387 28.507 1.00 0.00 H +ATOM 811 OW SOL 270 15.053 18.138 11.940 1.00 0.00 O +ATOM 812 HW1 SOL 270 14.083 18.294 12.126 1.00 0.00 H +ATOM 813 HW2 SOL 270 15.179 18.501 11.017 1.00 0.00 H +ATOM 814 OW SOL 271 20.480 10.066 25.281 1.00 0.00 O +ATOM 815 HW1 SOL 271 20.492 10.653 26.090 1.00 0.00 H +ATOM 816 HW2 SOL 271 20.115 9.200 25.622 1.00 0.00 H +ATOM 817 OW SOL 272 16.687 16.821 21.152 1.00 0.00 O +ATOM 818 HW1 SOL 272 17.392 17.113 20.506 1.00 0.00 H +ATOM 819 HW2 SOL 272 16.033 16.326 20.580 1.00 0.00 H +ATOM 820 OW SOL 273 20.496 9.997 18.857 1.00 0.00 O +ATOM 821 HW1 SOL 273 19.529 9.992 19.113 1.00 0.00 H +ATOM 822 HW2 SOL 273 20.580 10.799 18.267 1.00 0.00 H +ATOM 823 OW SOL 274 25.891 27.591 29.791 1.00 0.00 O +ATOM 824 HW1 SOL 274 25.008 27.972 30.067 1.00 0.00 H +ATOM 825 HW2 SOL 274 26.443 27.649 30.622 1.00 0.00 H +ATOM 826 OW SOL 275 10.510 26.690 23.469 1.00 0.00 O +ATOM 827 HW1 SOL 275 9.710 26.679 24.068 1.00 0.00 H +ATOM 828 HW2 SOL 275 11.238 27.046 24.054 1.00 0.00 H +ATOM 829 OW SOL 276 25.856 13.235 20.210 1.00 0.00 O +ATOM 830 HW1 SOL 276 26.425 12.798 19.514 1.00 0.00 H +ATOM 831 HW2 SOL 276 25.294 13.876 19.686 1.00 0.00 H +ATOM 832 OW SOL 277 10.188 21.626 13.254 1.00 0.00 O +ATOM 833 HW1 SOL 277 10.108 20.717 12.847 1.00 0.00 H +ATOM 834 HW2 SOL 277 10.441 21.439 14.203 1.00 0.00 H +ATOM 835 OW SOL 278 13.376 16.662 19.239 1.00 0.00 O +ATOM 836 HW1 SOL 278 12.555 16.358 18.757 1.00 0.00 H +ATOM 837 HW2 SOL 278 13.509 17.597 18.911 1.00 0.00 H +ATOM 838 OW SOL 279 19.716 33.214 25.227 1.00 0.00 O +ATOM 839 HW1 SOL 279 20.555 33.286 25.766 1.00 0.00 H +ATOM 840 HW2 SOL 279 18.992 33.211 25.917 1.00 0.00 H +ATOM 841 OW SOL 280 21.318 16.043 23.168 1.00 0.00 O +ATOM 842 HW1 SOL 280 20.740 15.644 22.456 1.00 0.00 H +ATOM 843 HW2 SOL 280 21.291 15.365 23.902 1.00 0.00 H +ATOM 844 OW SOL 281 29.072 25.241 18.007 1.00 0.00 O +ATOM 845 HW1 SOL 281 29.017 24.363 18.482 1.00 0.00 H +ATOM 846 HW2 SOL 281 28.392 25.159 17.279 1.00 0.00 H +ATOM 847 OW SOL 282 16.906 12.470 24.437 1.00 0.00 O +ATOM 848 HW1 SOL 282 16.760 13.426 24.688 1.00 0.00 H +ATOM 849 HW2 SOL 282 17.418 12.526 23.580 1.00 0.00 H +ATOM 850 OW SOL 283 11.005 16.545 20.975 1.00 0.00 O +ATOM 851 HW1 SOL 283 11.185 17.280 20.321 1.00 0.00 H +ATOM 852 HW2 SOL 283 11.645 15.826 20.704 1.00 0.00 H +ATOM 853 OW SOL 284 19.808 19.268 16.414 1.00 0.00 O +ATOM 854 HW1 SOL 284 18.955 18.964 16.838 1.00 0.00 H +ATOM 855 HW2 SOL 284 19.515 19.632 15.530 1.00 0.00 H +ATOM 856 OW SOL 285 19.928 17.083 32.305 1.00 0.00 O +ATOM 857 HW1 SOL 285 19.062 17.537 32.093 1.00 0.00 H +ATOM 858 HW2 SOL 285 20.282 16.821 31.407 1.00 0.00 H +ATOM 859 OW SOL 286 21.167 10.656 13.563 1.00 0.00 O +ATOM 860 HW1 SOL 286 22.068 10.422 13.199 1.00 0.00 H +ATOM 861 HW2 SOL 286 20.751 11.196 12.831 1.00 0.00 H +ATOM 862 OW SOL 287 25.467 23.335 16.932 1.00 0.00 O +ATOM 863 HW1 SOL 287 25.022 24.043 16.383 1.00 0.00 H +ATOM 864 HW2 SOL 287 25.864 22.722 16.249 1.00 0.00 H +ATOM 865 OW SOL 288 11.779 10.659 26.429 1.00 0.00 O +ATOM 866 HW1 SOL 288 11.727 9.775 25.964 1.00 0.00 H +ATOM 867 HW2 SOL 288 11.701 11.322 25.684 1.00 0.00 H +ATOM 868 OW SOL 289 20.631 25.552 23.948 1.00 0.00 O +ATOM 869 HW1 SOL 289 20.171 26.439 23.917 1.00 0.00 H +ATOM 870 HW2 SOL 289 21.576 25.768 23.702 1.00 0.00 H +ATOM 871 OW SOL 290 31.043 16.337 17.275 1.00 0.00 O +ATOM 872 HW1 SOL 290 31.810 15.800 17.627 1.00 0.00 H +ATOM 873 HW2 SOL 290 30.548 16.609 18.100 1.00 0.00 H +ATOM 874 OW SOL 291 12.491 25.394 18.555 1.00 0.00 O +ATOM 875 HW1 SOL 291 11.721 25.934 18.215 1.00 0.00 H +ATOM 876 HW2 SOL 291 12.354 24.497 18.136 1.00 0.00 H +ATOM 877 OW SOL 292 25.292 13.571 16.035 1.00 0.00 O +ATOM 878 HW1 SOL 292 25.055 12.601 16.090 1.00 0.00 H +ATOM 879 HW2 SOL 292 24.754 13.987 16.769 1.00 0.00 H +ATOM 880 OW SOL 293 9.792 18.248 17.146 1.00 0.00 O +ATOM 881 HW1 SOL 293 10.249 17.869 17.951 1.00 0.00 H +ATOM 882 HW2 SOL 293 9.494 17.438 16.641 1.00 0.00 H +ATOM 883 OW SOL 294 17.876 26.066 14.738 1.00 0.00 O +ATOM 884 HW1 SOL 294 18.251 26.859 15.218 1.00 0.00 H +ATOM 885 HW2 SOL 294 17.107 26.444 14.222 1.00 0.00 H +ATOM 886 OW SOL 295 13.351 26.592 29.897 1.00 0.00 O +ATOM 887 HW1 SOL 295 13.162 26.831 30.850 1.00 0.00 H +ATOM 888 HW2 SOL 295 12.534 26.092 29.613 1.00 0.00 H +ATOM 889 OW SOL 296 12.037 28.641 18.185 1.00 0.00 O +ATOM 890 HW1 SOL 296 12.138 29.311 18.919 1.00 0.00 H +ATOM 891 HW2 SOL 296 11.798 27.798 18.666 1.00 0.00 H +ATOM 892 OW SOL 297 13.949 14.903 14.018 1.00 0.00 O +ATOM 893 HW1 SOL 297 13.391 14.944 14.846 1.00 0.00 H +ATOM 894 HW2 SOL 297 13.286 15.029 13.280 1.00 0.00 H +ATOM 895 OW SOL 298 24.441 9.774 18.896 1.00 0.00 O +ATOM 896 HW1 SOL 298 24.484 8.795 18.698 1.00 0.00 H +ATOM 897 HW2 SOL 298 23.461 9.959 18.959 1.00 0.00 H +ATOM 898 OW SOL 299 24.825 20.625 13.710 1.00 0.00 O +ATOM 899 HW1 SOL 299 24.699 19.834 13.111 1.00 0.00 H +ATOM 900 HW2 SOL 299 24.759 21.405 13.087 1.00 0.00 H +ATOM 901 OW SOL 300 30.311 15.797 23.908 1.00 0.00 O +ATOM 902 HW1 SOL 300 30.013 16.347 23.128 1.00 0.00 H +ATOM 903 HW2 SOL 300 31.248 16.106 24.070 1.00 0.00 H +ATOM 904 OW SOL 301 14.689 25.210 19.062 1.00 0.00 O +ATOM 905 HW1 SOL 301 14.868 24.486 18.395 1.00 0.00 H +ATOM 906 HW2 SOL 301 15.310 25.943 18.787 1.00 0.00 H +ATOM 907 OW SOL 302 25.131 30.384 14.211 1.00 0.00 O +ATOM 908 HW1 SOL 302 25.229 30.043 15.146 1.00 0.00 H +ATOM 909 HW2 SOL 302 24.835 31.331 14.335 1.00 0.00 H +ATOM 910 OW SOL 303 26.817 28.630 15.931 1.00 0.00 O +ATOM 911 HW1 SOL 303 26.854 29.598 16.177 1.00 0.00 H +ATOM 912 HW2 SOL 303 27.762 28.323 16.039 1.00 0.00 H +ATOM 913 OW SOL 304 25.870 28.779 23.498 1.00 0.00 O +ATOM 914 HW1 SOL 304 26.007 28.035 24.152 1.00 0.00 H +ATOM 915 HW2 SOL 304 26.345 28.462 22.677 1.00 0.00 H +ATOM 916 OW SOL 305 21.224 20.028 20.919 1.00 0.00 O +ATOM 917 HW1 SOL 305 20.868 19.663 20.059 1.00 0.00 H +ATOM 918 HW2 SOL 305 21.455 19.210 21.445 1.00 0.00 H +ATOM 919 OW SOL 306 23.951 18.581 19.460 1.00 0.00 O +ATOM 920 HW1 SOL 306 24.755 18.081 19.139 1.00 0.00 H +ATOM 921 HW2 SOL 306 23.703 19.155 18.679 1.00 0.00 H +ATOM 922 OW SOL 307 14.745 23.638 10.984 1.00 0.00 O +ATOM 923 HW1 SOL 307 14.721 24.346 11.689 1.00 0.00 H +ATOM 924 HW2 SOL 307 14.730 22.785 11.506 1.00 0.00 H +ATOM 925 OW SOL 308 20.995 28.107 28.584 1.00 0.00 O +ATOM 926 HW1 SOL 308 21.030 29.030 28.201 1.00 0.00 H +ATOM 927 HW2 SOL 308 20.408 28.206 29.388 1.00 0.00 H +ATOM 928 OW SOL 309 21.468 30.225 29.577 1.00 0.00 O +ATOM 929 HW1 SOL 309 22.120 30.435 28.848 1.00 0.00 H +ATOM 930 HW2 SOL 309 20.824 30.989 29.546 1.00 0.00 H +ATOM 931 OW SOL 310 24.896 27.982 17.390 1.00 0.00 O +ATOM 932 HW1 SOL 310 25.409 28.790 17.677 1.00 0.00 H +ATOM 933 HW2 SOL 310 24.781 28.112 16.405 1.00 0.00 H +ATOM 934 OW SOL 311 10.694 13.902 19.257 1.00 0.00 O +ATOM 935 HW1 SOL 311 9.883 14.455 19.452 1.00 0.00 H +ATOM 936 HW2 SOL 311 11.300 14.094 20.029 1.00 0.00 H +ATOM 937 OW SOL 312 12.486 10.419 18.077 1.00 0.00 O +ATOM 938 HW1 SOL 312 11.824 11.058 17.686 1.00 0.00 H +ATOM 939 HW2 SOL 312 12.027 10.075 18.896 1.00 0.00 H +ATOM 940 OW SOL 313 21.726 12.250 26.675 1.00 0.00 O +ATOM 941 HW1 SOL 313 21.308 12.626 25.848 1.00 0.00 H +ATOM 942 HW2 SOL 313 21.836 13.048 27.268 1.00 0.00 H +ATOM 943 OW SOL 314 20.056 23.431 18.133 1.00 0.00 O +ATOM 944 HW1 SOL 314 19.555 24.081 17.561 1.00 0.00 H +ATOM 945 HW2 SOL 314 19.366 23.106 18.780 1.00 0.00 H +ATOM 946 OW SOL 315 8.353 22.549 12.108 1.00 0.00 O +ATOM 947 HW1 SOL 315 7.981 23.298 12.656 1.00 0.00 H +ATOM 948 HW2 SOL 315 8.381 21.780 12.747 1.00 0.00 H +ATOM 949 OW SOL 316 23.066 24.865 12.477 1.00 0.00 O +ATOM 950 HW1 SOL 316 23.923 24.801 11.966 1.00 0.00 H +ATOM 951 HW2 SOL 316 22.364 24.788 11.770 1.00 0.00 H +ATOM 952 OW SOL 317 21.609 21.802 31.335 1.00 0.00 O +ATOM 953 HW1 SOL 317 20.981 21.226 30.812 1.00 0.00 H +ATOM 954 HW2 SOL 317 22.229 22.167 30.639 1.00 0.00 H +ATOM 955 OW SOL 318 11.152 12.741 16.477 1.00 0.00 O +ATOM 956 HW1 SOL 318 10.489 13.482 16.374 1.00 0.00 H +ATOM 957 HW2 SOL 318 11.749 12.847 15.682 1.00 0.00 H +ATOM 958 OW SOL 319 16.479 19.355 30.032 1.00 0.00 O +ATOM 959 HW1 SOL 319 15.718 19.991 30.156 1.00 0.00 H +ATOM 960 HW2 SOL 319 17.195 19.922 29.624 1.00 0.00 H +ATOM 961 OW SOL 320 16.511 25.983 28.210 1.00 0.00 O +ATOM 962 HW1 SOL 320 15.788 26.358 28.790 1.00 0.00 H +ATOM 963 HW2 SOL 320 17.095 26.773 28.022 1.00 0.00 H +ATOM 964 OW SOL 321 11.555 9.180 21.060 1.00 0.00 O +ATOM 965 HW1 SOL 321 11.639 8.600 21.869 1.00 0.00 H +ATOM 966 HW2 SOL 321 12.093 9.990 21.293 1.00 0.00 H +ATOM 967 OW SOL 322 29.258 22.693 23.080 1.00 0.00 O +ATOM 968 HW1 SOL 322 28.713 23.180 23.763 1.00 0.00 H +ATOM 969 HW2 SOL 322 28.812 22.924 22.215 1.00 0.00 H +ATOM 970 OW SOL 323 15.293 7.604 25.247 1.00 0.00 O +ATOM 971 HW1 SOL 323 15.848 8.208 24.676 1.00 0.00 H +ATOM 972 HW2 SOL 323 14.580 7.280 24.626 1.00 0.00 H +ATOM 973 OW SOL 324 16.703 32.803 18.354 1.00 0.00 O +ATOM 974 HW1 SOL 324 16.126 33.380 18.931 1.00 0.00 H +ATOM 975 HW2 SOL 324 17.349 32.396 18.999 1.00 0.00 H +ATOM 976 OW SOL 325 13.842 12.645 18.127 1.00 0.00 O +ATOM 977 HW1 SOL 325 14.323 13.243 17.486 1.00 0.00 H +ATOM 978 HW2 SOL 325 12.897 12.662 17.801 1.00 0.00 H +ATOM 979 OW SOL 326 14.556 13.983 8.009 1.00 0.00 O +ATOM 980 HW1 SOL 326 14.206 14.169 8.926 1.00 0.00 H +ATOM 981 HW2 SOL 326 14.445 14.854 7.532 1.00 0.00 H +ATOM 982 OW SOL 327 27.488 22.281 18.419 1.00 0.00 O +ATOM 983 HW1 SOL 327 26.914 22.997 18.815 1.00 0.00 H +ATOM 984 HW2 SOL 327 27.033 21.434 18.693 1.00 0.00 H +ATOM 985 OW SOL 328 20.380 31.224 13.120 1.00 0.00 O +ATOM 986 HW1 SOL 328 20.139 30.588 13.853 1.00 0.00 H +ATOM 987 HW2 SOL 328 20.743 32.019 13.608 1.00 0.00 H +ATOM 988 OW SOL 329 28.233 19.659 23.418 1.00 0.00 O +ATOM 989 HW1 SOL 329 27.999 19.815 22.459 1.00 0.00 H +ATOM 990 HW2 SOL 329 28.599 18.729 23.424 1.00 0.00 H +ATOM 991 OW SOL 330 27.613 9.786 25.228 1.00 0.00 O +ATOM 992 HW1 SOL 330 28.516 9.582 25.605 1.00 0.00 H +ATOM 993 HW2 SOL 330 27.816 10.233 24.357 1.00 0.00 H +ATOM 994 OW SOL 331 26.953 11.666 23.287 1.00 0.00 O +ATOM 995 HW1 SOL 331 27.240 10.967 22.632 1.00 0.00 H +ATOM 996 HW2 SOL 331 26.091 12.004 22.908 1.00 0.00 H +ATOM 997 OW SOL 332 17.325 7.120 22.392 1.00 0.00 O +ATOM 998 HW1 SOL 332 17.426 8.040 22.770 1.00 0.00 H +ATOM 999 HW2 SOL 332 17.048 6.571 23.181 1.00 0.00 H +ATOM 1000 OW SOL 333 11.304 17.823 11.869 1.00 0.00 O +ATOM 1001 HW1 SOL 333 11.740 18.013 12.749 1.00 0.00 H +ATOM 1002 HW2 SOL 333 10.327 17.871 12.075 1.00 0.00 H +ATOM 1003 OW SOL 334 30.392 14.897 18.837 1.00 0.00 O +ATOM 1004 HW1 SOL 334 30.071 15.409 19.634 1.00 0.00 H +ATOM 1005 HW2 SOL 334 31.097 14.295 19.212 1.00 0.00 H +ATOM 1006 OW SOL 335 20.738 13.693 19.175 1.00 0.00 O +ATOM 1007 HW1 SOL 335 19.925 13.716 18.593 1.00 0.00 H +ATOM 1008 HW2 SOL 335 20.469 14.225 19.977 1.00 0.00 H +ATOM 1009 OW SOL 336 22.146 8.872 20.606 1.00 0.00 O +ATOM 1010 HW1 SOL 336 22.323 8.101 19.994 1.00 0.00 H +ATOM 1011 HW2 SOL 336 21.919 9.621 19.984 1.00 0.00 H +ATOM 1012 OW SOL 337 17.898 29.877 12.282 1.00 0.00 O +ATOM 1013 HW1 SOL 337 18.653 29.401 12.733 1.00 0.00 H +ATOM 1014 HW2 SOL 337 17.369 30.254 13.042 1.00 0.00 H +ATOM 1015 OW SOL 338 9.579 23.791 27.081 1.00 0.00 O +ATOM 1016 HW1 SOL 338 9.173 24.458 27.705 1.00 0.00 H +ATOM 1017 HW2 SOL 338 8.955 23.789 26.299 1.00 0.00 H +ATOM 1018 OW SOL 339 18.804 7.349 14.881 1.00 0.00 O +ATOM 1019 HW1 SOL 339 18.160 6.979 15.551 1.00 0.00 H +ATOM 1020 HW2 SOL 339 19.408 7.927 15.429 1.00 0.00 H +ATOM 1021 OW SOL 340 17.958 31.886 24.386 1.00 0.00 O +ATOM 1022 HW1 SOL 340 18.675 31.220 24.183 1.00 0.00 H +ATOM 1023 HW2 SOL 340 18.213 32.682 23.837 1.00 0.00 H +ATOM 1024 OW SOL 341 25.496 25.147 30.905 1.00 0.00 O +ATOM 1025 HW1 SOL 341 25.379 25.434 31.855 1.00 0.00 H +ATOM 1026 HW2 SOL 341 26.139 25.816 30.533 1.00 0.00 H +ATOM 1027 OW SOL 342 22.647 25.090 16.394 1.00 0.00 O +ATOM 1028 HW1 SOL 342 22.824 25.814 17.061 1.00 0.00 H +ATOM 1029 HW2 SOL 342 22.426 25.589 15.557 1.00 0.00 H +ATOM 1030 OW SOL 343 7.347 20.812 17.781 1.00 0.00 O +ATOM 1031 HW1 SOL 343 7.132 20.349 18.640 1.00 0.00 H +ATOM 1032 HW2 SOL 343 7.366 20.070 17.111 1.00 0.00 H +ATOM 1033 OW SOL 344 15.251 10.366 24.890 1.00 0.00 O +ATOM 1034 HW1 SOL 344 14.474 9.836 24.551 1.00 0.00 H +ATOM 1035 HW2 SOL 344 16.010 10.071 24.309 1.00 0.00 H +ATOM 1036 OW SOL 345 13.711 29.075 24.741 1.00 0.00 O +ATOM 1037 HW1 SOL 345 12.999 28.666 25.312 1.00 0.00 H +ATOM 1038 HW2 SOL 345 13.198 29.521 24.008 1.00 0.00 H +ATOM 1039 OW SOL 346 12.199 23.930 24.988 1.00 0.00 O +ATOM 1040 HW1 SOL 346 12.707 23.203 25.448 1.00 0.00 H +ATOM 1041 HW2 SOL 346 12.905 24.433 24.490 1.00 0.00 H +ATOM 1042 OW SOL 347 30.271 18.583 18.904 1.00 0.00 O +ATOM 1043 HW1 SOL 347 29.513 19.052 19.356 1.00 0.00 H +ATOM 1044 HW2 SOL 347 30.661 18.013 19.627 1.00 0.00 H +ATOM 1045 OW SOL 348 18.452 13.467 15.734 1.00 0.00 O +ATOM 1046 HW1 SOL 348 18.745 13.009 16.573 1.00 0.00 H +ATOM 1047 HW2 SOL 348 18.019 14.306 16.061 1.00 0.00 H +ATOM 1048 OW SOL 349 27.608 25.406 21.006 1.00 0.00 O +ATOM 1049 HW1 SOL 349 28.239 25.387 20.230 1.00 0.00 H +ATOM 1050 HW2 SOL 349 26.879 26.019 20.703 1.00 0.00 H +ATOM 1051 OW SOL 350 29.293 13.162 26.803 1.00 0.00 O +ATOM 1052 HW1 SOL 350 28.984 12.418 27.395 1.00 0.00 H +ATOM 1053 HW2 SOL 350 28.454 13.670 26.605 1.00 0.00 H +ATOM 1054 OW SOL 351 25.367 16.306 20.113 1.00 0.00 O +ATOM 1055 HW1 SOL 351 25.891 17.140 20.287 1.00 0.00 H +ATOM 1056 HW2 SOL 351 24.438 16.548 20.392 1.00 0.00 H +ATOM 1057 OW SOL 352 30.822 27.105 23.424 1.00 0.00 O +ATOM 1058 HW1 SOL 352 31.202 27.871 23.943 1.00 0.00 H +ATOM 1059 HW2 SOL 352 30.581 26.439 24.130 1.00 0.00 H +ATOM 1060 OW SOL 353 23.941 14.747 25.295 1.00 0.00 O +ATOM 1061 HW1 SOL 353 24.843 15.162 25.416 1.00 0.00 H +ATOM 1062 HW2 SOL 353 23.374 15.211 25.975 1.00 0.00 H +ATOM 1063 OW SOL 354 13.604 17.251 21.190 1.00 0.00 O +ATOM 1064 HW1 SOL 354 12.826 17.862 21.334 1.00 0.00 H +ATOM 1065 HW2 SOL 354 13.569 16.634 21.976 1.00 0.00 H +ATOM 1066 OW SOL 355 18.949 7.925 24.760 1.00 0.00 O +ATOM 1067 HW1 SOL 355 19.061 8.403 23.889 1.00 0.00 H +ATOM 1068 HW2 SOL 355 17.959 7.917 24.900 1.00 0.00 H +ATOM 1069 OW SOL 356 8.916 14.706 23.338 1.00 0.00 O +ATOM 1070 HW1 SOL 356 9.277 14.271 24.163 1.00 0.00 H +ATOM 1071 HW2 SOL 356 8.325 15.430 23.693 1.00 0.00 H +ATOM 1072 OW SOL 357 26.796 12.444 17.183 1.00 0.00 O +ATOM 1073 HW1 SOL 357 27.461 12.928 16.616 1.00 0.00 H +ATOM 1074 HW2 SOL 357 26.186 13.168 17.503 1.00 0.00 H +ATOM 1075 OW SOL 358 13.234 9.422 15.555 1.00 0.00 O +ATOM 1076 HW1 SOL 358 12.639 9.431 16.359 1.00 0.00 H +ATOM 1077 HW2 SOL 358 12.597 9.516 14.790 1.00 0.00 H +ATOM 1078 OW SOL 359 16.066 17.405 24.928 1.00 0.00 O +ATOM 1079 HW1 SOL 359 15.432 17.970 24.400 1.00 0.00 H +ATOM 1080 HW2 SOL 359 15.787 17.561 25.875 1.00 0.00 H +ATOM 1081 OW SOL 360 18.659 24.815 26.775 1.00 0.00 O +ATOM 1082 HW1 SOL 360 19.219 24.209 27.339 1.00 0.00 H +ATOM 1083 HW2 SOL 360 18.065 25.272 27.437 1.00 0.00 H +ATOM 1084 OW SOL 361 10.600 13.243 25.686 1.00 0.00 O +ATOM 1085 HW1 SOL 361 11.333 13.874 25.432 1.00 0.00 H +ATOM 1086 HW2 SOL 361 10.318 12.846 24.812 1.00 0.00 H +ATOM 1087 OW SOL 362 10.012 29.575 16.524 1.00 0.00 O +ATOM 1088 HW1 SOL 362 9.500 29.086 15.818 1.00 0.00 H +ATOM 1089 HW2 SOL 362 10.877 29.798 16.075 1.00 0.00 H +ATOM 1090 OW SOL 363 23.586 27.355 19.055 1.00 0.00 O +ATOM 1091 HW1 SOL 363 24.502 26.964 18.967 1.00 0.00 H +ATOM 1092 HW2 SOL 363 23.752 28.341 19.077 1.00 0.00 H +ATOM 1093 OW SOL 364 9.635 19.206 24.800 1.00 0.00 O +ATOM 1094 HW1 SOL 364 9.097 19.827 25.370 1.00 0.00 H +ATOM 1095 HW2 SOL 364 10.251 18.762 25.452 1.00 0.00 H +ATOM 1096 OW SOL 365 14.658 26.293 14.899 1.00 0.00 O +ATOM 1097 HW1 SOL 365 14.872 25.976 13.975 1.00 0.00 H +ATOM 1098 HW2 SOL 365 15.201 27.127 14.994 1.00 0.00 H +ATOM 1099 OW SOL 366 13.759 14.754 20.145 1.00 0.00 O +ATOM 1100 HW1 SOL 366 13.554 14.035 19.482 1.00 0.00 H +ATOM 1101 HW2 SOL 366 14.756 14.731 20.219 1.00 0.00 H +ATOM 1102 OW SOL 367 12.001 14.814 10.866 1.00 0.00 O +ATOM 1103 HW1 SOL 367 12.869 14.379 10.626 1.00 0.00 H +ATOM 1104 HW2 SOL 367 11.604 15.053 9.980 1.00 0.00 H +ATOM 1105 OW SOL 368 18.668 20.118 8.220 1.00 0.00 O +ATOM 1106 HW1 SOL 368 17.814 20.193 8.735 1.00 0.00 H +ATOM 1107 HW2 SOL 368 18.404 19.611 7.399 1.00 0.00 H +ATOM 1108 OW SOL 369 23.926 13.005 24.371 1.00 0.00 O +ATOM 1109 HW1 SOL 369 23.334 13.133 23.575 1.00 0.00 H +ATOM 1110 HW2 SOL 369 24.838 12.905 23.974 1.00 0.00 H +ATOM 1111 OW SOL 370 23.517 7.462 17.110 1.00 0.00 O +ATOM 1112 HW1 SOL 370 24.488 7.690 17.189 1.00 0.00 H +ATOM 1113 HW2 SOL 370 23.088 8.336 16.880 1.00 0.00 H +ATOM 1114 OW SOL 371 26.357 18.637 14.769 1.00 0.00 O +ATOM 1115 HW1 SOL 371 26.316 19.578 14.433 1.00 0.00 H +ATOM 1116 HW2 SOL 371 27.258 18.319 14.472 1.00 0.00 H +ATOM 1117 OW SOL 372 21.116 28.517 20.056 1.00 0.00 O +ATOM 1118 HW1 SOL 372 20.534 27.824 19.631 1.00 0.00 H +ATOM 1119 HW2 SOL 372 21.533 28.985 19.277 1.00 0.00 H +ATOM 1120 OW SOL 373 27.604 11.145 20.199 1.00 0.00 O +ATOM 1121 HW1 SOL 373 27.072 11.634 20.889 1.00 0.00 H +ATOM 1122 HW2 SOL 373 28.093 10.450 20.726 1.00 0.00 H +ATOM 1123 OW SOL 374 11.692 16.705 31.095 1.00 0.00 O +ATOM 1124 HW1 SOL 374 10.808 16.892 30.666 1.00 0.00 H +ATOM 1125 HW2 SOL 374 12.254 16.366 30.340 1.00 0.00 H +ATOM 1126 OW SOL 375 17.350 29.821 30.443 1.00 0.00 O +ATOM 1127 HW1 SOL 375 17.988 29.961 29.686 1.00 0.00 H +ATOM 1128 HW2 SOL 375 17.740 29.048 30.941 1.00 0.00 H +ATOM 1129 OW SOL 376 16.689 13.349 21.122 1.00 0.00 O +ATOM 1130 HW1 SOL 376 16.772 12.656 21.838 1.00 0.00 H +ATOM 1131 HW2 SOL 376 16.237 14.113 21.584 1.00 0.00 H +ATOM 1132 OW SOL 377 15.870 18.012 32.581 1.00 0.00 O +ATOM 1133 HW1 SOL 377 15.987 18.011 31.588 1.00 0.00 H +ATOM 1134 HW2 SOL 377 16.784 17.796 32.926 1.00 0.00 H +ATOM 1135 OW SOL 378 18.304 16.070 15.111 1.00 0.00 O +ATOM 1136 HW1 SOL 378 18.299 17.006 14.760 1.00 0.00 H +ATOM 1137 HW2 SOL 378 17.907 15.536 14.364 1.00 0.00 H +ATOM 1138 OW SOL 379 18.903 20.198 10.486 1.00 0.00 O +ATOM 1139 HW1 SOL 379 19.030 19.297 10.901 1.00 0.00 H +ATOM 1140 HW2 SOL 379 19.667 20.733 10.846 1.00 0.00 H +ATOM 1141 OW SOL 380 22.502 15.710 17.837 1.00 0.00 O +ATOM 1142 HW1 SOL 380 22.313 15.970 18.784 1.00 0.00 H +ATOM 1143 HW2 SOL 380 22.606 16.588 17.368 1.00 0.00 H +ATOM 1144 OW SOL 381 29.683 30.062 19.831 1.00 0.00 O +ATOM 1145 HW1 SOL 381 29.674 29.784 20.792 1.00 0.00 H +ATOM 1146 HW2 SOL 381 28.829 30.570 19.724 1.00 0.00 H +ATOM 1147 OW SOL 382 26.170 27.205 27.204 1.00 0.00 O +ATOM 1148 HW1 SOL 382 26.836 26.494 27.429 1.00 0.00 H +ATOM 1149 HW2 SOL 382 25.555 27.210 27.993 1.00 0.00 H +ATOM 1150 OW SOL 383 16.106 13.386 18.542 1.00 0.00 O +ATOM 1151 HW1 SOL 383 16.962 13.868 18.728 1.00 0.00 H +ATOM 1152 HW2 SOL 383 15.997 12.785 19.334 1.00 0.00 H +ATOM 1153 OW SOL 384 18.518 21.201 17.289 1.00 0.00 O +ATOM 1154 HW1 SOL 384 18.236 20.768 16.433 1.00 0.00 H +ATOM 1155 HW2 SOL 384 19.194 21.879 17.000 1.00 0.00 H +ATOM 1156 OW SOL 385 27.338 17.916 28.534 1.00 0.00 O +ATOM 1157 HW1 SOL 385 27.345 17.201 29.232 1.00 0.00 H +ATOM 1158 HW2 SOL 385 27.179 18.754 29.056 1.00 0.00 H +ATOM 1159 OW SOL 386 22.872 26.440 9.393 1.00 0.00 O +ATOM 1160 HW1 SOL 386 22.770 25.847 10.192 1.00 0.00 H +ATOM 1161 HW2 SOL 386 22.487 27.312 9.696 1.00 0.00 H +ATOM 1162 OW SOL 387 26.300 16.482 16.316 1.00 0.00 O +ATOM 1163 HW1 SOL 387 25.677 16.528 17.097 1.00 0.00 H +ATOM 1164 HW2 SOL 387 25.909 15.761 15.744 1.00 0.00 H +ATOM 1165 OW SOL 388 25.715 22.803 30.761 1.00 0.00 O +ATOM 1166 HW1 SOL 388 26.272 21.975 30.708 1.00 0.00 H +ATOM 1167 HW2 SOL 388 26.349 23.531 30.501 1.00 0.00 H +ATOM 1168 OW SOL 389 24.335 9.089 13.169 1.00 0.00 O +ATOM 1169 HW1 SOL 389 24.710 8.808 14.052 1.00 0.00 H +ATOM 1170 HW2 SOL 389 24.584 8.337 12.558 1.00 0.00 H +ATOM 1171 OW SOL 390 19.492 13.050 28.693 1.00 0.00 O +ATOM 1172 HW1 SOL 390 18.690 12.532 28.990 1.00 0.00 H +ATOM 1173 HW2 SOL 390 19.954 12.428 28.062 1.00 0.00 H +ATOM 1174 OW SOL 391 15.319 18.192 20.811 1.00 0.00 O +ATOM 1175 HW1 SOL 391 15.078 18.658 19.960 1.00 0.00 H +ATOM 1176 HW2 SOL 391 16.106 18.708 21.148 1.00 0.00 H +ATOM 1177 OW SOL 392 10.011 10.867 21.045 1.00 0.00 O +ATOM 1178 HW1 SOL 392 10.224 10.284 20.261 1.00 0.00 H +ATOM 1179 HW2 SOL 392 9.590 11.674 20.630 1.00 0.00 H +ATOM 1180 OW SOL 393 29.350 11.459 25.227 1.00 0.00 O +ATOM 1181 HW1 SOL 393 30.300 11.760 25.311 1.00 0.00 H +ATOM 1182 HW2 SOL 393 29.123 11.659 24.275 1.00 0.00 H +ATOM 1183 OW SOL 394 12.469 18.947 30.412 1.00 0.00 O +ATOM 1184 HW1 SOL 394 11.739 19.586 30.172 1.00 0.00 H +ATOM 1185 HW2 SOL 394 12.924 18.769 29.540 1.00 0.00 H +ATOM 1186 OW SOL 395 27.922 15.175 20.298 1.00 0.00 O +ATOM 1187 HW1 SOL 395 27.229 15.856 20.059 1.00 0.00 H +ATOM 1188 HW2 SOL 395 27.389 14.420 20.680 1.00 0.00 H +ATOM 1189 OW SOL 396 16.812 9.336 28.303 1.00 0.00 O +ATOM 1190 HW1 SOL 396 16.960 9.171 29.278 1.00 0.00 H +ATOM 1191 HW2 SOL 396 16.286 8.540 28.006 1.00 0.00 H +ATOM 1192 OW SOL 397 15.418 29.692 28.828 1.00 0.00 O +ATOM 1193 HW1 SOL 397 16.073 30.447 28.800 1.00 0.00 H +ATOM 1194 HW2 SOL 397 15.156 29.643 29.792 1.00 0.00 H +ATOM 1195 OW SOL 398 27.811 30.191 14.603 1.00 0.00 O +ATOM 1196 HW1 SOL 398 27.420 31.110 14.628 1.00 0.00 H +ATOM 1197 HW2 SOL 398 27.684 29.906 13.653 1.00 0.00 H +ATOM 1198 OW SOL 399 11.736 20.569 9.793 1.00 0.00 O +ATOM 1199 HW1 SOL 399 11.736 20.456 8.800 1.00 0.00 H +ATOM 1200 HW2 SOL 399 10.834 20.237 10.069 1.00 0.00 H +ATOM 1201 OW SOL 400 15.485 14.225 11.483 1.00 0.00 O +ATOM 1202 HW1 SOL 400 15.008 14.268 10.605 1.00 0.00 H +ATOM 1203 HW2 SOL 400 16.443 14.371 11.237 1.00 0.00 H +ATOM 1204 OW SOL 401 12.709 30.471 13.919 1.00 0.00 O +ATOM 1205 HW1 SOL 401 11.788 30.503 14.307 1.00 0.00 H +ATOM 1206 HW2 SOL 401 13.084 29.615 14.272 1.00 0.00 H +ATOM 1207 OW SOL 402 31.111 20.994 19.932 1.00 0.00 O +ATOM 1208 HW1 SOL 402 31.576 21.475 20.675 1.00 0.00 H +ATOM 1209 HW2 SOL 402 30.467 20.394 20.407 1.00 0.00 H +ATOM 1210 OW SOL 403 24.062 30.747 23.377 1.00 0.00 O +ATOM 1211 HW1 SOL 403 24.332 31.552 23.905 1.00 0.00 H +ATOM 1212 HW2 SOL 403 24.483 30.900 22.483 1.00 0.00 H +ATOM 1213 OW SOL 404 18.431 11.951 18.140 1.00 0.00 O +ATOM 1214 HW1 SOL 404 17.742 11.640 17.485 1.00 0.00 H +ATOM 1215 HW2 SOL 404 17.895 12.194 18.948 1.00 0.00 H +ATOM 1216 OW SOL 405 16.283 31.157 26.623 1.00 0.00 O +ATOM 1217 HW1 SOL 405 16.910 31.868 26.305 1.00 0.00 H +ATOM 1218 HW2 SOL 405 16.305 30.478 25.890 1.00 0.00 H +ATOM 1219 OW SOL 406 18.803 21.710 12.232 1.00 0.00 O +ATOM 1220 HW1 SOL 406 18.994 22.675 12.415 1.00 0.00 H +ATOM 1221 HW2 SOL 406 17.880 21.581 12.593 1.00 0.00 H +ATOM 1222 OW SOL 407 11.286 24.629 11.978 1.00 0.00 O +ATOM 1223 HW1 SOL 407 10.390 25.020 12.189 1.00 0.00 H +ATOM 1224 HW2 SOL 407 11.927 25.339 12.271 1.00 0.00 H +ATOM 1225 OW SOL 408 25.149 18.535 17.370 1.00 0.00 O +ATOM 1226 HW1 SOL 408 25.862 18.381 16.686 1.00 0.00 H +ATOM 1227 HW2 SOL 408 24.761 19.420 17.110 1.00 0.00 H +ATOM 1228 OW SOL 409 19.328 20.068 13.042 1.00 0.00 O +ATOM 1229 HW1 SOL 409 18.576 19.495 12.717 1.00 0.00 H +ATOM 1230 HW2 SOL 409 19.812 19.477 13.687 1.00 0.00 H +ATOM 1231 OW SOL 410 21.237 25.471 27.521 1.00 0.00 O +ATOM 1232 HW1 SOL 410 21.435 24.646 28.050 1.00 0.00 H +ATOM 1233 HW2 SOL 410 20.625 25.992 28.116 1.00 0.00 H +ATOM 1234 OW SOL 411 12.074 20.398 27.067 1.00 0.00 O +ATOM 1235 HW1 SOL 411 12.603 19.796 27.664 1.00 0.00 H +ATOM 1236 HW2 SOL 411 11.489 20.905 27.700 1.00 0.00 H +ATOM 1237 OW SOL 412 13.812 21.589 25.906 1.00 0.00 O +ATOM 1238 HW1 SOL 412 12.974 21.098 25.669 1.00 0.00 H +ATOM 1239 HW2 SOL 412 14.451 20.860 26.151 1.00 0.00 H +ATOM 1240 OW SOL 413 25.688 30.704 27.010 1.00 0.00 O +ATOM 1241 HW1 SOL 413 25.097 30.864 26.221 1.00 0.00 H +ATOM 1242 HW2 SOL 413 25.225 31.186 27.754 1.00 0.00 H +ATOM 1243 OW SOL 414 13.208 18.032 32.434 1.00 0.00 O +ATOM 1244 HW1 SOL 414 14.078 18.249 31.993 1.00 0.00 H +ATOM 1245 HW2 SOL 414 12.655 18.852 32.282 1.00 0.00 H +ATOM 1246 OW SOL 415 7.108 16.434 22.080 1.00 0.00 O +ATOM 1247 HW1 SOL 415 7.484 17.358 22.011 1.00 0.00 H +ATOM 1248 HW2 SOL 415 7.761 15.875 21.567 1.00 0.00 H +ATOM 1249 OW SOL 416 14.774 20.761 17.474 1.00 0.00 O +ATOM 1250 HW1 SOL 416 14.703 19.946 18.048 1.00 0.00 H +ATOM 1251 HW2 SOL 416 15.365 20.469 16.722 1.00 0.00 H +ATOM 1252 OW SOL 417 25.788 20.505 20.425 1.00 0.00 O +ATOM 1253 HW1 SOL 417 24.806 20.348 20.318 1.00 0.00 H +ATOM 1254 HW2 SOL 417 26.199 19.650 20.108 1.00 0.00 H +ATOM 1255 OW SOL 418 9.167 20.054 18.678 1.00 0.00 O +ATOM 1256 HW1 SOL 418 8.771 19.152 18.849 1.00 0.00 H +ATOM 1257 HW2 SOL 418 10.121 19.854 18.456 1.00 0.00 H +ATOM 1258 OW SOL 419 9.447 26.979 21.497 1.00 0.00 O +ATOM 1259 HW1 SOL 419 9.976 26.656 20.713 1.00 0.00 H +ATOM 1260 HW2 SOL 419 8.504 26.750 21.255 1.00 0.00 H +ATOM 1261 OW SOL 420 18.650 8.256 26.647 1.00 0.00 O +ATOM 1262 HW1 SOL 420 19.333 8.559 27.311 1.00 0.00 H +ATOM 1263 HW2 SOL 420 18.178 9.099 26.392 1.00 0.00 H +ATOM 1264 OW SOL 421 15.908 15.453 17.743 1.00 0.00 O +ATOM 1265 HW1 SOL 421 15.775 14.632 17.188 1.00 0.00 H +ATOM 1266 HW2 SOL 421 15.282 15.322 18.512 1.00 0.00 H +ATOM 1267 OW SOL 422 11.188 23.471 19.185 1.00 0.00 O +ATOM 1268 HW1 SOL 422 11.046 23.246 18.221 1.00 0.00 H +ATOM 1269 HW2 SOL 422 10.980 22.615 19.659 1.00 0.00 H +ATOM 1270 OW SOL 423 29.510 25.440 22.026 1.00 0.00 O +ATOM 1271 HW1 SOL 423 28.759 25.853 22.540 1.00 0.00 H +ATOM 1272 HW2 SOL 423 29.659 24.566 22.487 1.00 0.00 H +ATOM 1273 OW SOL 424 15.725 17.515 14.579 1.00 0.00 O +ATOM 1274 HW1 SOL 424 15.688 18.487 14.813 1.00 0.00 H +ATOM 1275 HW2 SOL 424 16.285 17.119 15.307 1.00 0.00 H +ATOM 1276 OW SOL 425 18.623 29.156 26.325 1.00 0.00 O +ATOM 1277 HW1 SOL 425 18.714 29.852 25.612 1.00 0.00 H +ATOM 1278 HW2 SOL 425 18.470 28.311 25.812 1.00 0.00 H +ATOM 1279 OW SOL 426 21.211 9.001 15.334 1.00 0.00 O +ATOM 1280 HW1 SOL 426 20.960 8.753 14.399 1.00 0.00 H +ATOM 1281 HW2 SOL 426 21.147 9.998 15.339 1.00 0.00 H +ATOM 1282 OW SOL 427 19.904 17.241 23.554 1.00 0.00 O +ATOM 1283 HW1 SOL 427 19.290 16.757 22.932 1.00 0.00 H +ATOM 1284 HW2 SOL 427 19.962 16.637 24.348 1.00 0.00 H +ATOM 1285 OW SOL 428 21.748 11.771 22.640 1.00 0.00 O +ATOM 1286 HW1 SOL 428 21.852 12.618 22.120 1.00 0.00 H +ATOM 1287 HW2 SOL 428 21.788 12.072 23.593 1.00 0.00 H +ATOM 1288 OW SOL 429 24.392 10.424 15.644 1.00 0.00 O +ATOM 1289 HW1 SOL 429 25.310 10.820 15.617 1.00 0.00 H +ATOM 1290 HW2 SOL 429 23.962 10.771 14.811 1.00 0.00 H +ATOM 1291 OW SOL 430 10.495 24.796 24.754 1.00 0.00 O +ATOM 1292 HW1 SOL 430 9.585 25.143 24.981 1.00 0.00 H +ATOM 1293 HW2 SOL 430 11.113 25.458 25.178 1.00 0.00 H +ATOM 1294 OW SOL 431 25.149 15.809 11.203 1.00 0.00 O +ATOM 1295 HW1 SOL 431 24.365 15.298 10.851 1.00 0.00 H +ATOM 1296 HW2 SOL 431 24.776 16.298 11.992 1.00 0.00 H +ATOM 1297 OW SOL 432 22.707 30.090 25.598 1.00 0.00 O +ATOM 1298 HW1 SOL 432 22.038 29.827 26.292 1.00 0.00 H +ATOM 1299 HW2 SOL 432 23.157 30.890 25.995 1.00 0.00 H +TER +ENDMDL diff --git a/examples/latte_interface/scf_energy_forces_kernel/coords_2955.pdb b/examples/latte_interface/scf_energy_forces_kernel/coords_2955.pdb new file mode 100644 index 00000000..04974ee5 --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/coords_2955.pdb @@ -0,0 +1,2961 @@ +TITLE my_single_water.xyz +REMARK THIS IS A SIMULATION BOX +CRYST1 31.230 31.230 31.230 90.00 90.00 90.00 P 1 1 +MODEL 1 +ATOM 1 H HOH 0 15.009 16.295 15.615 1.00 0.00 H +ATOM 2 O HOH 1 15.427 15.434 15.615 1.00 0.00 O +ATOM 3 H HOH 0 16.408 15.115 15.615 1.00 0.00 H +ATOM 4 OW SOL 1 5.690 12.751 11.651 1.00 0.00 O +ATOM 5 HW1 SOL 1 4.760 12.681 11.281 1.00 0.00 H +ATOM 6 HW2 SOL 1 5.800 13.641 12.091 1.00 0.00 H +ATOM 7 OW SOL 2 15.551 15.111 7.030 1.00 0.00 O +ATOM 8 HW1 SOL 2 14.981 14.951 7.840 1.00 0.00 H +ATOM 9 HW2 SOL 2 14.961 15.211 6.230 1.00 0.00 H +ATOM 10 OW SOL 3 17.431 6.180 8.560 1.00 0.00 O +ATOM 11 HW1 SOL 3 17.761 7.120 8.560 1.00 0.00 H +ATOM 12 HW2 SOL 3 17.941 5.640 9.220 1.00 0.00 H +ATOM 13 OW SOL 4 11.351 7.030 7.170 1.00 0.00 O +ATOM 14 HW1 SOL 4 11.921 7.810 6.920 1.00 0.00 H +ATOM 15 HW2 SOL 4 10.751 7.290 7.930 1.00 0.00 H +ATOM 16 OW SOL 5 17.551 6.070 2.310 1.00 0.00 O +ATOM 17 HW1 SOL 5 17.431 5.940 1.320 1.00 0.00 H +ATOM 18 HW2 SOL 5 17.251 5.260 2.800 1.00 0.00 H +ATOM 19 OW SOL 6 7.680 11.441 10.231 1.00 0.00 O +ATOM 20 HW1 SOL 6 6.900 11.611 10.831 1.00 0.00 H +ATOM 21 HW2 SOL 6 8.020 12.311 9.871 1.00 0.00 H +ATOM 22 OW SOL 7 8.500 7.980 18.231 1.00 0.00 O +ATOM 23 HW1 SOL 7 8.460 8.740 18.881 1.00 0.00 H +ATOM 24 HW2 SOL 7 8.720 8.340 17.321 1.00 0.00 H +ATOM 25 OW SOL 8 6.850 10.121 6.650 1.00 0.00 O +ATOM 26 HW1 SOL 8 7.540 9.961 7.350 1.00 0.00 H +ATOM 27 HW2 SOL 8 6.120 10.691 7.030 1.00 0.00 H +ATOM 28 OW SOL 9 6.860 11.611 18.031 1.00 0.00 O +ATOM 29 HW1 SOL 9 7.460 12.401 18.171 1.00 0.00 H +ATOM 30 HW2 SOL 9 6.000 11.921 17.621 1.00 0.00 H +ATOM 31 OW SOL 10 14.601 15.051 13.391 1.00 0.00 O +ATOM 32 HW1 SOL 10 14.841 15.991 13.651 1.00 0.00 H +ATOM 33 HW2 SOL 10 14.441 14.511 14.211 1.00 0.00 H +ATOM 34 OW SOL 11 4.380 3.920 14.991 1.00 0.00 O +ATOM 35 HW1 SOL 11 5.200 3.360 15.081 1.00 0.00 H +ATOM 36 HW2 SOL 11 3.570 3.340 15.031 1.00 0.00 H +ATOM 37 OW SOL 12 16.031 4.470 7.370 1.00 0.00 O +ATOM 38 HW1 SOL 12 15.291 4.930 6.870 1.00 0.00 H +ATOM 39 HW2 SOL 12 16.541 5.150 7.900 1.00 0.00 H +ATOM 40 OW SOL 13 11.271 13.411 16.901 1.00 0.00 O +ATOM 41 HW1 SOL 13 11.741 13.411 17.781 1.00 0.00 H +ATOM 42 HW2 SOL 13 10.791 12.541 16.791 1.00 0.00 H +ATOM 43 OW SOL 14 2.400 10.911 8.860 1.00 0.00 O +ATOM 44 HW1 SOL 14 2.540 10.071 9.380 1.00 0.00 H +ATOM 45 HW2 SOL 14 1.850 11.551 9.410 1.00 0.00 H +ATOM 46 OW SOL 15 6.200 17.861 14.391 1.00 0.00 O +ATOM 47 HW1 SOL 15 5.280 17.691 14.741 1.00 0.00 H +ATOM 48 HW2 SOL 15 6.480 18.781 14.651 1.00 0.00 H +ATOM 49 OW SOL 16 6.060 9.641 1.230 1.00 0.00 O +ATOM 50 HW1 SOL 16 6.130 10.481 0.690 1.00 0.00 H +ATOM 51 HW2 SOL 16 6.520 9.771 2.110 1.00 0.00 H +ATOM 52 OW SOL 17 15.941 1.140 14.801 1.00 0.00 O +ATOM 53 HW1 SOL 17 15.761 1.810 14.081 1.00 0.00 H +ATOM 54 HW2 SOL 17 15.911 1.600 15.691 1.00 0.00 H +ATOM 55 OW SOL 18 1.220 6.430 5.630 1.00 0.00 O +ATOM 56 HW1 SOL 18 0.770 5.550 5.800 1.00 0.00 H +ATOM 57 HW2 SOL 18 1.210 6.970 6.470 1.00 0.00 H +ATOM 58 OW SOL 19 18.421 17.671 3.590 1.00 0.00 O +ATOM 59 HW1 SOL 19 18.961 17.381 4.390 1.00 0.00 H +ATOM 60 HW2 SOL 19 18.721 18.571 3.300 1.00 0.00 H +ATOM 61 OW SOL 20 16.891 9.220 6.120 1.00 0.00 O +ATOM 62 HW1 SOL 20 17.841 8.930 6.200 1.00 0.00 H +ATOM 63 HW2 SOL 20 16.811 9.870 5.370 1.00 0.00 H +ATOM 64 OW SOL 21 16.411 11.081 4.320 1.00 0.00 O +ATOM 65 HW1 SOL 21 17.271 11.101 3.800 1.00 0.00 H +ATOM 66 HW2 SOL 21 16.551 11.551 5.200 1.00 0.00 H +ATOM 67 OW SOL 22 1.130 7.370 15.971 1.00 0.00 O +ATOM 68 HW1 SOL 22 2.010 7.240 16.421 1.00 0.00 H +ATOM 69 HW2 SOL 22 1.000 8.340 15.751 1.00 0.00 H +ATOM 70 OW SOL 23 6.130 13.651 7.260 1.00 0.00 O +ATOM 71 HW1 SOL 23 5.640 12.781 7.350 1.00 0.00 H +ATOM 72 HW2 SOL 23 5.900 14.081 6.390 1.00 0.00 H +ATOM 73 OW SOL 24 12.931 12.281 14.231 1.00 0.00 O +ATOM 74 HW1 SOL 24 13.301 11.551 13.651 1.00 0.00 H +ATOM 75 HW2 SOL 24 13.451 12.331 15.081 1.00 0.00 H +ATOM 76 OW SOL 25 8.090 0.040 5.020 1.00 0.00 O +ATOM 77 HW1 SOL 25 8.490 0.950 4.930 1.00 0.00 H +ATOM 78 HW2 SOL 25 7.090 0.120 5.080 1.00 0.00 H +ATOM 79 OW SOL 26 15.251 9.991 1.900 1.00 0.00 O +ATOM 80 HW1 SOL 26 14.621 9.231 2.030 1.00 0.00 H +ATOM 81 HW2 SOL 26 15.731 10.171 2.760 1.00 0.00 H +ATOM 82 OW SOL 27 11.871 17.921 16.161 1.00 0.00 O +ATOM 83 HW1 SOL 27 12.111 18.521 15.401 1.00 0.00 H +ATOM 84 HW2 SOL 27 11.941 16.971 15.861 1.00 0.00 H +ATOM 85 OW SOL 28 3.170 2.510 18.011 1.00 0.00 O +ATOM 86 HW1 SOL 28 3.880 3.220 18.071 1.00 0.00 H +ATOM 87 HW2 SOL 28 2.290 2.900 18.291 1.00 0.00 H +ATOM 88 OW SOL 29 14.661 14.171 9.531 1.00 0.00 O +ATOM 89 HW1 SOL 29 14.071 14.231 10.331 1.00 0.00 H +ATOM 90 HW2 SOL 29 14.511 13.291 9.071 1.00 0.00 H +ATOM 91 OW SOL 30 16.671 17.141 5.720 1.00 0.00 O +ATOM 92 HW1 SOL 30 16.261 16.911 4.840 1.00 0.00 H +ATOM 93 HW2 SOL 30 16.491 16.401 6.370 1.00 0.00 H +ATOM 94 OW SOL 31 5.980 7.290 2.700 1.00 0.00 O +ATOM 95 HW1 SOL 31 6.220 7.980 2.020 1.00 0.00 H +ATOM 96 HW2 SOL 31 5.200 7.620 3.240 1.00 0.00 H +ATOM 97 OW SOL 32 12.811 3.450 9.441 1.00 0.00 O +ATOM 98 HW1 SOL 32 11.951 2.950 9.311 1.00 0.00 H +ATOM 99 HW2 SOL 32 13.431 2.910 10.001 1.00 0.00 H +ATOM 100 OW SOL 33 15.761 16.621 3.070 1.00 0.00 O +ATOM 101 HW1 SOL 33 16.651 17.081 3.100 1.00 0.00 H +ATOM 102 HW2 SOL 33 15.551 16.381 2.120 1.00 0.00 H +ATOM 103 OW SOL 34 8.070 6.050 14.651 1.00 0.00 O +ATOM 104 HW1 SOL 34 7.600 6.020 15.541 1.00 0.00 H +ATOM 105 HW2 SOL 34 7.560 5.500 13.991 1.00 0.00 H +ATOM 106 OW SOL 35 13.941 4.690 16.741 1.00 0.00 O +ATOM 107 HW1 SOL 35 13.741 5.120 17.621 1.00 0.00 H +ATOM 108 HW2 SOL 35 14.721 4.070 16.831 1.00 0.00 H +ATOM 109 OW SOL 36 9.731 8.900 15.721 1.00 0.00 O +ATOM 110 HW1 SOL 36 10.191 8.060 15.431 1.00 0.00 H +ATOM 111 HW2 SOL 36 9.171 9.240 14.971 1.00 0.00 H +ATOM 112 OW SOL 37 9.911 4.100 12.421 1.00 0.00 O +ATOM 113 HW1 SOL 37 9.141 4.440 12.961 1.00 0.00 H +ATOM 114 HW2 SOL 37 9.571 3.590 11.631 1.00 0.00 H +ATOM 115 OW SOL 38 10.411 7.010 4.290 1.00 0.00 O +ATOM 116 HW1 SOL 38 10.671 6.970 5.250 1.00 0.00 H +ATOM 117 HW2 SOL 38 9.561 6.500 4.150 1.00 0.00 H +ATOM 118 OW SOL 39 8.650 3.480 1.950 1.00 0.00 O +ATOM 119 HW1 SOL 39 9.240 4.110 1.460 1.00 0.00 H +ATOM 120 HW2 SOL 39 8.840 2.540 1.660 1.00 0.00 H +ATOM 121 OW SOL 40 17.191 5.850 18.311 1.00 0.00 O +ATOM 122 HW1 SOL 40 16.931 6.740 17.951 1.00 0.00 H +ATOM 123 HW2 SOL 40 17.171 5.170 17.581 1.00 0.00 H +ATOM 124 OW SOL 41 13.621 11.441 5.450 1.00 0.00 O +ATOM 125 HW1 SOL 41 14.451 11.151 4.970 1.00 0.00 H +ATOM 126 HW2 SOL 41 13.131 12.111 4.890 1.00 0.00 H +ATOM 127 OW SOL 42 5.500 1.960 8.850 1.00 0.00 O +ATOM 128 HW1 SOL 42 5.450 1.910 9.850 1.00 0.00 H +ATOM 129 HW2 SOL 42 5.520 2.920 8.560 1.00 0.00 H +ATOM 130 OW SOL 43 10.081 14.561 4.770 1.00 0.00 O +ATOM 131 HW1 SOL 43 9.621 15.281 4.250 1.00 0.00 H +ATOM 132 HW2 SOL 43 10.041 14.761 5.750 1.00 0.00 H +ATOM 133 OW SOL 44 3.510 18.011 8.530 1.00 0.00 O +ATOM 134 HW1 SOL 44 4.010 17.151 8.590 1.00 0.00 H +ATOM 135 HW2 SOL 44 4.160 18.781 8.500 1.00 0.00 H +ATOM 136 OW SOL 45 17.951 10.661 8.730 1.00 0.00 O +ATOM 137 HW1 SOL 45 17.331 10.511 7.970 1.00 0.00 H +ATOM 138 HW2 SOL 45 17.431 10.771 9.580 1.00 0.00 H +ATOM 139 OW SOL 46 12.271 15.501 15.061 1.00 0.00 O +ATOM 140 HW1 SOL 46 12.331 14.731 15.701 1.00 0.00 H +ATOM 141 HW2 SOL 46 11.751 15.241 14.261 1.00 0.00 H +ATOM 142 OW SOL 47 3.210 9.431 2.420 1.00 0.00 O +ATOM 143 HW1 SOL 47 4.030 9.821 2.000 1.00 0.00 H +ATOM 144 HW2 SOL 47 2.940 8.611 1.930 1.00 0.00 H +ATOM 145 OW SOL 48 14.581 7.350 7.280 1.00 0.00 O +ATOM 146 HW1 SOL 48 14.531 6.700 8.030 1.00 0.00 H +ATOM 147 HW2 SOL 48 15.381 7.940 7.410 1.00 0.00 H +ATOM 148 OW SOL 49 4.610 12.661 17.271 1.00 0.00 O +ATOM 149 HW1 SOL 49 4.110 12.671 16.411 1.00 0.00 H +ATOM 150 HW2 SOL 49 3.980 12.481 18.031 1.00 0.00 H +ATOM 151 OW SOL 50 11.111 17.761 2.370 1.00 0.00 O +ATOM 152 HW1 SOL 50 10.511 17.141 2.870 1.00 0.00 H +ATOM 153 HW2 SOL 50 11.421 17.321 1.520 1.00 0.00 H +ATOM 154 OW SOL 51 2.020 2.850 14.981 1.00 0.00 O +ATOM 155 HW1 SOL 51 1.220 3.450 14.851 1.00 0.00 H +ATOM 156 HW2 SOL 51 1.920 2.360 15.841 1.00 0.00 H +ATOM 157 OW SOL 52 16.321 13.771 0.810 1.00 0.00 O +ATOM 158 HW1 SOL 52 16.001 14.711 0.710 1.00 0.00 H +ATOM 159 HW2 SOL 52 15.561 13.141 0.690 1.00 0.00 H +ATOM 160 OW SOL 53 4.640 17.431 3.230 1.00 0.00 O +ATOM 161 HW1 SOL 53 4.970 17.821 4.090 1.00 0.00 H +ATOM 162 HW2 SOL 53 5.400 17.361 2.580 1.00 0.00 H +ATOM 163 OW SOL 54 14.001 1.070 4.260 1.00 0.00 O +ATOM 164 HW1 SOL 54 13.761 0.700 3.360 1.00 0.00 H +ATOM 165 HW2 SOL 54 14.991 1.230 4.300 1.00 0.00 H +ATOM 166 OW SOL 55 2.490 17.851 12.411 1.00 0.00 O +ATOM 167 HW1 SOL 55 3.060 17.201 12.911 1.00 0.00 H +ATOM 168 HW2 SOL 55 2.330 17.521 11.481 1.00 0.00 H +ATOM 169 OW SOL 56 9.401 16.981 9.040 1.00 0.00 O +ATOM 170 HW1 SOL 56 10.201 16.411 9.250 1.00 0.00 H +ATOM 171 HW2 SOL 56 8.911 16.581 8.270 1.00 0.00 H +ATOM 172 OW SOL 57 3.820 7.000 4.800 1.00 0.00 O +ATOM 173 HW1 SOL 57 4.270 6.100 4.770 1.00 0.00 H +ATOM 174 HW2 SOL 57 2.880 6.890 5.130 1.00 0.00 H +ATOM 175 OW SOL 58 15.471 2.220 17.291 1.00 0.00 O +ATOM 176 HW1 SOL 58 15.421 2.590 18.211 1.00 0.00 H +ATOM 177 HW2 SOL 58 14.751 1.530 17.171 1.00 0.00 H +ATOM 178 OW SOL 59 6.140 1.220 1.170 1.00 0.00 O +ATOM 179 HW1 SOL 59 7.120 1.000 1.240 1.00 0.00 H +ATOM 180 HW2 SOL 59 5.830 1.050 0.240 1.00 0.00 H +ATOM 181 OW SOL 60 7.810 2.640 17.491 1.00 0.00 O +ATOM 182 HW1 SOL 60 8.480 2.030 17.921 1.00 0.00 H +ATOM 183 HW2 SOL 60 7.080 2.830 18.141 1.00 0.00 H +ATOM 184 OW SOL 61 8.880 15.141 11.951 1.00 0.00 O +ATOM 185 HW1 SOL 61 8.650 14.891 11.011 1.00 0.00 H +ATOM 186 HW2 SOL 61 9.490 14.451 12.341 1.00 0.00 H +ATOM 187 OW SOL 62 13.511 5.900 14.331 1.00 0.00 O +ATOM 188 HW1 SOL 62 13.791 5.470 15.181 1.00 0.00 H +ATOM 189 HW2 SOL 62 13.761 6.860 14.341 1.00 0.00 H +ATOM 190 OW SOL 63 8.030 14.021 9.240 1.00 0.00 O +ATOM 191 HW1 SOL 63 8.930 14.161 8.820 1.00 0.00 H +ATOM 192 HW2 SOL 63 7.320 14.041 8.530 1.00 0.00 H +ATOM 193 OW SOL 64 9.220 5.030 8.990 1.00 0.00 O +ATOM 194 HW1 SOL 64 8.970 4.940 8.030 1.00 0.00 H +ATOM 195 HW2 SOL 64 9.700 4.210 9.300 1.00 0.00 H +ATOM 196 OW SOL 65 5.390 0.640 5.120 1.00 0.00 O +ATOM 197 HW1 SOL 65 4.580 0.650 5.700 1.00 0.00 H +ATOM 198 HW2 SOL 65 5.420 1.470 4.570 1.00 0.00 H +ATOM 199 OW SOL 66 14.341 11.881 0.410 1.00 0.00 O +ATOM 200 HW1 SOL 66 14.661 11.121 0.980 1.00 0.00 H +ATOM 201 HW2 SOL 66 13.421 12.151 0.710 1.00 0.00 H +ATOM 202 OW SOL 67 2.970 0.350 1.710 1.00 0.00 O +ATOM 203 HW1 SOL 67 3.460 1.190 1.500 1.00 0.00 H +ATOM 204 HW2 SOL 67 3.590 -0.300 2.160 1.00 0.00 H +ATOM 205 OW SOL 68 9.351 2.360 4.800 1.00 0.00 O +ATOM 206 HW1 SOL 68 8.871 2.770 4.020 1.00 0.00 H +ATOM 207 HW2 SOL 68 10.341 2.340 4.610 1.00 0.00 H +ATOM 208 OW SOL 69 10.761 6.830 14.641 1.00 0.00 O +ATOM 209 HW1 SOL 69 9.961 6.220 14.671 1.00 0.00 H +ATOM 210 HW2 SOL 69 11.571 6.300 14.401 1.00 0.00 H +ATOM 211 OW SOL 70 12.271 15.701 7.930 1.00 0.00 O +ATOM 212 HW1 SOL 70 12.481 16.441 7.280 1.00 0.00 H +ATOM 213 HW2 SOL 70 12.951 15.701 8.660 1.00 0.00 H +ATOM 214 OW SOL 71 4.590 11.521 7.410 1.00 0.00 O +ATOM 215 HW1 SOL 71 3.880 11.251 8.060 1.00 0.00 H +ATOM 216 HW2 SOL 71 4.330 11.241 6.480 1.00 0.00 H +ATOM 217 OW SOL 72 12.711 17.971 5.910 1.00 0.00 O +ATOM 218 HW1 SOL 72 13.151 18.611 5.270 1.00 0.00 H +ATOM 219 HW2 SOL 72 12.211 18.491 6.610 1.00 0.00 H +ATOM 220 OW SOL 73 10.321 5.490 0.160 1.00 0.00 O +ATOM 221 HW1 SOL 73 9.911 6.310 -0.230 1.00 0.00 H +ATOM 222 HW2 SOL 73 10.961 5.750 0.890 1.00 0.00 H +ATOM 223 OW SOL 74 5.610 2.220 11.471 1.00 0.00 O +ATOM 224 HW1 SOL 74 5.990 1.380 11.841 1.00 0.00 H +ATOM 225 HW2 SOL 74 4.730 2.410 11.911 1.00 0.00 H +ATOM 226 OW SOL 75 8.660 4.540 6.420 1.00 0.00 O +ATOM 227 HW1 SOL 75 8.340 5.260 5.800 1.00 0.00 H +ATOM 228 HW2 SOL 75 8.900 3.730 5.890 1.00 0.00 H +ATOM 229 OW SOL 76 10.171 0.390 7.530 1.00 0.00 O +ATOM 230 HW1 SOL 76 9.451 0.440 6.840 1.00 0.00 H +ATOM 231 HW2 SOL 76 9.931 -0.300 8.220 1.00 0.00 H +ATOM 232 OW SOL 77 14.291 11.731 8.670 1.00 0.00 O +ATOM 233 HW1 SOL 77 13.741 10.891 8.600 1.00 0.00 H +ATOM 234 HW2 SOL 77 14.551 12.021 7.750 1.00 0.00 H +ATOM 235 OW SOL 78 14.661 5.900 9.921 1.00 0.00 O +ATOM 236 HW1 SOL 78 14.361 4.950 9.991 1.00 0.00 H +ATOM 237 HW2 SOL 78 15.391 6.060 10.581 1.00 0.00 H +ATOM 238 OW SOL 79 18.571 8.330 3.770 1.00 0.00 O +ATOM 239 HW1 SOL 79 18.991 7.690 4.410 1.00 0.00 H +ATOM 240 HW2 SOL 79 18.191 7.820 2.990 1.00 0.00 H +ATOM 241 OW SOL 80 4.880 13.851 1.740 1.00 0.00 O +ATOM 242 HW1 SOL 80 4.010 13.701 2.210 1.00 0.00 H +ATOM 243 HW2 SOL 80 4.710 14.111 0.790 1.00 0.00 H +ATOM 244 OW SOL 81 16.641 12.801 6.570 1.00 0.00 O +ATOM 245 HW1 SOL 81 17.631 12.881 6.710 1.00 0.00 H +ATOM 246 HW2 SOL 81 16.191 13.641 6.880 1.00 0.00 H +ATOM 247 OW SOL 82 13.901 5.750 0.780 1.00 0.00 O +ATOM 248 HW1 SOL 82 13.361 5.540 1.590 1.00 0.00 H +ATOM 249 HW2 SOL 82 14.811 5.340 0.870 1.00 0.00 H +ATOM 250 OW SOL 83 5.270 2.560 3.280 1.00 0.00 O +ATOM 251 HW1 SOL 83 5.540 1.970 2.530 1.00 0.00 H +ATOM 252 HW2 SOL 83 5.270 3.510 2.970 1.00 0.00 H +ATOM 253 OW SOL 84 17.541 12.231 15.881 1.00 0.00 O +ATOM 254 HW1 SOL 84 18.451 11.841 15.751 1.00 0.00 H +ATOM 255 HW2 SOL 84 17.621 13.191 16.121 1.00 0.00 H +ATOM 256 OW SOL 85 10.641 13.471 13.401 1.00 0.00 O +ATOM 257 HW1 SOL 85 9.841 13.241 13.951 1.00 0.00 H +ATOM 258 HW2 SOL 85 11.471 13.211 13.891 1.00 0.00 H +ATOM 259 OW SOL 86 11.111 11.951 11.001 1.00 0.00 O +ATOM 260 HW1 SOL 86 10.711 12.391 11.811 1.00 0.00 H +ATOM 261 HW2 SOL 86 10.701 12.321 10.171 1.00 0.00 H +ATOM 262 OW SOL 87 16.381 10.991 10.791 1.00 0.00 O +ATOM 263 HW1 SOL 87 16.431 11.801 11.381 1.00 0.00 H +ATOM 264 HW2 SOL 87 15.521 11.011 10.281 1.00 0.00 H +ATOM 265 OW SOL 88 9.150 0.890 14.021 1.00 0.00 O +ATOM 266 HW1 SOL 88 9.400 0.690 13.071 1.00 0.00 H +ATOM 267 HW2 SOL 88 9.870 1.450 14.441 1.00 0.00 H +ATOM 268 OW SOL 89 9.801 11.161 17.191 1.00 0.00 O +ATOM 269 HW1 SOL 89 8.811 11.221 17.291 1.00 0.00 H +ATOM 270 HW2 SOL 89 10.031 10.361 16.631 1.00 0.00 H +ATOM 271 OW SOL 90 7.050 10.501 3.680 1.00 0.00 O +ATOM 272 HW1 SOL 90 6.910 10.571 4.670 1.00 0.00 H +ATOM 273 HW2 SOL 90 7.890 9.991 3.500 1.00 0.00 H +ATOM 274 OW SOL 91 4.100 8.130 12.511 1.00 0.00 O +ATOM 275 HW1 SOL 91 4.960 8.250 13.011 1.00 0.00 H +ATOM 276 HW2 SOL 91 3.680 7.260 12.781 1.00 0.00 H +ATOM 277 OW SOL 92 12.741 3.860 12.621 1.00 0.00 O +ATOM 278 HW1 SOL 92 12.951 4.600 13.261 1.00 0.00 H +ATOM 279 HW2 SOL 92 11.851 4.030 12.191 1.00 0.00 H +ATOM 280 OW SOL 93 0.640 15.641 13.311 1.00 0.00 O +ATOM 281 HW1 SOL 93 0.180 16.461 12.971 1.00 0.00 H +ATOM 282 HW2 SOL 93 1.620 15.831 13.401 1.00 0.00 H +ATOM 283 OW SOL 94 3.670 11.001 5.010 1.00 0.00 O +ATOM 284 HW1 SOL 94 3.600 11.831 4.450 1.00 0.00 H +ATOM 285 HW2 SOL 94 3.710 10.201 4.410 1.00 0.00 H +ATOM 286 OW SOL 95 5.660 5.370 8.650 1.00 0.00 O +ATOM 287 HW1 SOL 95 5.780 6.030 7.910 1.00 0.00 H +ATOM 288 HW2 SOL 95 6.120 5.710 9.480 1.00 0.00 H +ATOM 289 OW SOL 96 12.521 13.481 3.880 1.00 0.00 O +ATOM 290 HW1 SOL 96 13.021 14.251 4.280 1.00 0.00 H +ATOM 291 HW2 SOL 96 11.571 13.501 4.200 1.00 0.00 H +ATOM 292 OW SOL 97 12.721 14.451 11.421 1.00 0.00 O +ATOM 293 HW1 SOL 97 13.191 14.581 12.291 1.00 0.00 H +ATOM 294 HW2 SOL 97 12.061 13.711 11.511 1.00 0.00 H +ATOM 295 OW SOL 98 15.821 6.390 4.720 1.00 0.00 O +ATOM 296 HW1 SOL 98 15.511 7.000 5.450 1.00 0.00 H +ATOM 297 HW2 SOL 98 16.321 6.910 4.030 1.00 0.00 H +ATOM 298 OW SOL 99 3.540 15.101 13.291 1.00 0.00 O +ATOM 299 HW1 SOL 99 3.330 14.661 12.421 1.00 0.00 H +ATOM 300 HW2 SOL 99 4.510 15.361 13.321 1.00 0.00 H +ATOM 301 OW SOL 100 4.020 7.510 15.981 1.00 0.00 O +ATOM 302 HW1 SOL 100 4.700 8.060 15.511 1.00 0.00 H +ATOM 303 HW2 SOL 100 4.420 6.630 16.251 1.00 0.00 H +ATOM 304 OW SOL 101 15.871 7.790 16.701 1.00 0.00 O +ATOM 305 HW1 SOL 101 14.951 8.170 16.651 1.00 0.00 H +ATOM 306 HW2 SOL 101 16.471 8.260 16.051 1.00 0.00 H +ATOM 307 OW SOL 102 10.131 1.050 17.701 1.00 0.00 O +ATOM 308 HW1 SOL 102 10.191 1.900 17.181 1.00 0.00 H +ATOM 309 HW2 SOL 102 10.451 0.290 17.131 1.00 0.00 H +ATOM 310 OW SOL 103 5.040 0.500 17.401 1.00 0.00 O +ATOM 311 HW1 SOL 103 4.620 -0.070 16.701 1.00 0.00 H +ATOM 312 HW2 SOL 103 4.380 1.190 17.721 1.00 0.00 H +ATOM 313 OW SOL 104 5.730 8.700 10.291 1.00 0.00 O +ATOM 314 HW1 SOL 104 6.170 9.590 10.201 1.00 0.00 H +ATOM 315 HW2 SOL 104 5.100 8.700 11.061 1.00 0.00 H +ATOM 316 OW SOL 105 13.601 8.620 10.451 1.00 0.00 O +ATOM 317 HW1 SOL 105 12.851 8.620 9.791 1.00 0.00 H +ATOM 318 HW2 SOL 105 13.971 7.700 10.541 1.00 0.00 H +ATOM 319 OW SOL 106 12.091 5.250 2.750 1.00 0.00 O +ATOM 320 HW1 SOL 106 12.221 4.410 3.290 1.00 0.00 H +ATOM 321 HW2 SOL 106 11.801 5.990 3.350 1.00 0.00 H +ATOM 322 OW SOL 107 0.370 13.101 12.821 1.00 0.00 O +ATOM 323 HW1 SOL 107 0.900 12.611 13.501 1.00 0.00 H +ATOM 324 HW2 SOL 107 0.590 14.081 12.871 1.00 0.00 H +ATOM 325 OW SOL 108 7.320 6.340 10.641 1.00 0.00 O +ATOM 326 HW1 SOL 108 7.910 6.080 9.881 1.00 0.00 H +ATOM 327 HW2 SOL 108 7.040 7.300 10.531 1.00 0.00 H +ATOM 328 OW SOL 109 17.281 9.351 18.541 1.00 0.00 O +ATOM 329 HW1 SOL 109 16.821 9.281 17.651 1.00 0.00 H +ATOM 330 HW2 SOL 109 16.661 9.791 19.201 1.00 0.00 H +ATOM 331 OW SOL 110 3.070 0.630 6.180 1.00 0.00 O +ATOM 332 HW1 SOL 110 2.960 1.570 6.510 1.00 0.00 H +ATOM 333 HW2 SOL 110 3.020 0.000 6.950 1.00 0.00 H +ATOM 334 OW SOL 111 16.221 3.670 3.740 1.00 0.00 O +ATOM 335 HW1 SOL 111 16.241 2.910 4.380 1.00 0.00 H +ATOM 336 HW2 SOL 111 15.741 4.440 4.140 1.00 0.00 H +ATOM 337 OW SOL 112 10.231 7.660 9.661 1.00 0.00 O +ATOM 338 HW1 SOL 112 10.381 7.870 10.621 1.00 0.00 H +ATOM 339 HW2 SOL 112 9.931 6.710 9.571 1.00 0.00 H +ATOM 340 OW SOL 113 9.801 15.731 17.001 1.00 0.00 O +ATOM 341 HW1 SOL 113 9.601 16.171 16.121 1.00 0.00 H +ATOM 342 HW2 SOL 113 10.191 14.821 16.841 1.00 0.00 H +ATOM 343 OW SOL 114 18.591 15.181 16.051 1.00 0.00 O +ATOM 344 HW1 SOL 114 18.731 15.451 15.101 1.00 0.00 H +ATOM 345 HW2 SOL 114 19.421 15.401 16.581 1.00 0.00 H +ATOM 346 OW SOL 115 3.500 8.980 18.041 1.00 0.00 O +ATOM 347 HW1 SOL 115 4.260 9.420 18.521 1.00 0.00 H +ATOM 348 HW2 SOL 115 3.850 8.510 17.221 1.00 0.00 H +ATOM 349 OW SOL 116 15.401 2.740 1.250 1.00 0.00 O +ATOM 350 HW1 SOL 116 14.791 1.990 1.480 1.00 0.00 H +ATOM 351 HW2 SOL 116 15.621 3.260 2.080 1.00 0.00 H +ATOM 352 OW SOL 117 13.031 8.380 0.420 1.00 0.00 O +ATOM 353 HW1 SOL 117 13.371 7.450 0.570 1.00 0.00 H +ATOM 354 HW2 SOL 117 13.211 8.650 -0.530 1.00 0.00 H +ATOM 355 OW SOL 118 10.681 13.331 8.490 1.00 0.00 O +ATOM 356 HW1 SOL 118 10.751 12.491 7.940 1.00 0.00 H +ATOM 357 HW2 SOL 118 11.301 14.021 8.130 1.00 0.00 H +ATOM 358 OW SOL 119 3.190 8.100 9.491 1.00 0.00 O +ATOM 359 HW1 SOL 119 4.120 8.460 9.541 1.00 0.00 H +ATOM 360 HW2 SOL 119 3.130 7.250 10.011 1.00 0.00 H +ATOM 361 OW SOL 120 3.390 5.090 10.061 1.00 0.00 O +ATOM 362 HW1 SOL 120 2.870 4.260 9.891 1.00 0.00 H +ATOM 363 HW2 SOL 120 4.160 5.140 9.421 1.00 0.00 H +ATOM 364 OW SOL 121 11.381 3.800 16.781 1.00 0.00 O +ATOM 365 HW1 SOL 121 10.931 4.430 17.421 1.00 0.00 H +ATOM 366 HW2 SOL 121 12.311 4.110 16.611 1.00 0.00 H +ATOM 367 OW SOL 122 11.601 2.070 14.771 1.00 0.00 O +ATOM 368 HW1 SOL 122 11.601 2.710 15.541 1.00 0.00 H +ATOM 369 HW2 SOL 122 11.881 2.550 13.941 1.00 0.00 H +ATOM 370 OW SOL 123 0.880 18.011 9.270 1.00 0.00 O +ATOM 371 HW1 SOL 123 0.460 17.151 9.000 1.00 0.00 H +ATOM 372 HW2 SOL 123 1.820 18.041 8.930 1.00 0.00 H +ATOM 373 OW SOL 124 5.040 15.681 9.100 1.00 0.00 O +ATOM 374 HW1 SOL 124 5.700 16.421 9.190 1.00 0.00 H +ATOM 375 HW2 SOL 124 5.480 14.891 8.680 1.00 0.00 H +ATOM 376 OW SOL 125 10.021 7.960 12.381 1.00 0.00 O +ATOM 377 HW1 SOL 125 10.431 7.640 13.241 1.00 0.00 H +ATOM 378 HW2 SOL 125 9.061 7.690 12.351 1.00 0.00 H +ATOM 379 OW SOL 126 0.400 5.440 11.141 1.00 0.00 O +ATOM 380 HW1 SOL 126 1.250 5.110 10.731 1.00 0.00 H +ATOM 381 HW2 SOL 126 0.530 5.590 12.121 1.00 0.00 H +ATOM 382 OW SOL 127 1.890 5.200 17.221 1.00 0.00 O +ATOM 383 HW1 SOL 127 2.480 4.800 16.521 1.00 0.00 H +ATOM 384 HW2 SOL 127 1.310 5.910 16.811 1.00 0.00 H +ATOM 385 OW SOL 128 13.691 9.501 16.601 1.00 0.00 O +ATOM 386 HW1 SOL 128 14.081 10.391 16.801 1.00 0.00 H +ATOM 387 HW2 SOL 128 13.791 9.301 15.631 1.00 0.00 H +ATOM 388 OW SOL 129 8.150 5.720 3.250 1.00 0.00 O +ATOM 389 HW1 SOL 129 8.220 4.830 2.790 1.00 0.00 H +ATOM 390 HW2 SOL 129 7.210 6.060 3.170 1.00 0.00 H +ATOM 391 OW SOL 130 16.571 6.040 12.061 1.00 0.00 O +ATOM 392 HW1 SOL 130 16.191 5.350 12.681 1.00 0.00 H +ATOM 393 HW2 SOL 130 17.391 5.680 11.621 1.00 0.00 H +ATOM 394 OW SOL 131 2.520 15.641 17.441 1.00 0.00 O +ATOM 395 HW1 SOL 131 2.220 16.211 18.201 1.00 0.00 H +ATOM 396 HW2 SOL 131 2.450 14.671 17.701 1.00 0.00 H +ATOM 397 OW SOL 132 6.710 4.640 12.691 1.00 0.00 O +ATOM 398 HW1 SOL 132 6.370 3.750 12.391 1.00 0.00 H +ATOM 399 HW2 SOL 132 6.970 5.180 11.891 1.00 0.00 H +ATOM 400 OW SOL 133 9.300 16.781 14.651 1.00 0.00 O +ATOM 401 HW1 SOL 133 9.060 16.601 13.701 1.00 0.00 H +ATOM 402 HW2 SOL 133 9.600 17.721 14.751 1.00 0.00 H +ATOM 403 OW SOL 134 4.730 5.000 1.910 1.00 0.00 O +ATOM 404 HW1 SOL 134 5.340 5.800 1.950 1.00 0.00 H +ATOM 405 HW2 SOL 134 3.780 5.310 1.980 1.00 0.00 H +ATOM 406 OW SOL 135 1.590 11.371 14.661 1.00 0.00 O +ATOM 407 HW1 SOL 135 1.810 10.761 15.421 1.00 0.00 H +ATOM 408 HW2 SOL 135 1.690 10.881 13.801 1.00 0.00 H +ATOM 409 OW SOL 136 13.471 10.591 12.341 1.00 0.00 O +ATOM 410 HW1 SOL 136 13.711 9.961 11.601 1.00 0.00 H +ATOM 411 HW2 SOL 136 12.571 10.991 12.161 1.00 0.00 H +ATOM 412 OW SOL 137 13.021 8.550 3.090 1.00 0.00 O +ATOM 413 HW1 SOL 137 12.161 8.240 3.510 1.00 0.00 H +ATOM 414 HW2 SOL 137 12.981 8.410 2.100 1.00 0.00 H +ATOM 415 OW SOL 138 17.591 17.471 11.541 1.00 0.00 O +ATOM 416 HW1 SOL 138 18.201 17.771 10.811 1.00 0.00 H +ATOM 417 HW2 SOL 138 17.211 16.581 11.321 1.00 0.00 H +ATOM 418 OW SOL 139 12.521 17.311 11.281 1.00 0.00 O +ATOM 419 HW1 SOL 139 13.361 17.361 10.741 1.00 0.00 H +ATOM 420 HW2 SOL 139 12.291 16.351 11.461 1.00 0.00 H +ATOM 421 OW SOL 140 0.830 12.581 10.221 1.00 0.00 O +ATOM 422 HW1 SOL 140 0.780 12.571 11.221 1.00 0.00 H +ATOM 423 HW2 SOL 140 0.000 12.171 9.841 1.00 0.00 H +ATOM 424 OW SOL 141 6.880 16.621 17.161 1.00 0.00 O +ATOM 425 HW1 SOL 141 6.320 17.431 17.251 1.00 0.00 H +ATOM 426 HW2 SOL 141 7.400 16.661 16.301 1.00 0.00 H +ATOM 427 OW SOL 142 9.030 0.860 1.330 1.00 0.00 O +ATOM 428 HW1 SOL 142 9.540 0.870 0.470 1.00 0.00 H +ATOM 429 HW2 SOL 142 9.590 0.440 2.040 1.00 0.00 H +ATOM 430 OW SOL 143 17.261 1.350 5.230 1.00 0.00 O +ATOM 431 HW1 SOL 143 17.991 1.180 4.560 1.00 0.00 H +ATOM 432 HW2 SOL 143 16.951 0.480 5.610 1.00 0.00 H +ATOM 433 OW SOL 144 13.881 15.731 4.770 1.00 0.00 O +ATOM 434 HW1 SOL 144 14.551 15.851 4.030 1.00 0.00 H +ATOM 435 HW2 SOL 144 13.481 16.621 5.000 1.00 0.00 H +ATOM 436 OW SOL 145 12.801 9.270 6.720 1.00 0.00 O +ATOM 437 HW1 SOL 145 13.401 8.460 6.740 1.00 0.00 H +ATOM 438 HW2 SOL 145 13.201 9.960 6.120 1.00 0.00 H +ATOM 439 OW SOL 146 8.300 12.731 14.221 1.00 0.00 O +ATOM 440 HW1 SOL 146 8.250 13.061 15.171 1.00 0.00 H +ATOM 441 HW2 SOL 146 7.440 12.921 13.761 1.00 0.00 H +ATOM 442 OW SOL 147 6.720 16.161 1.540 1.00 0.00 O +ATOM 443 HW1 SOL 147 6.810 16.261 0.550 1.00 0.00 H +ATOM 444 HW2 SOL 147 6.320 15.271 1.750 1.00 0.00 H +ATOM 445 OW SOL 148 16.501 17.201 13.941 1.00 0.00 O +ATOM 446 HW1 SOL 148 17.031 17.301 13.101 1.00 0.00 H +ATOM 447 HW2 SOL 148 16.231 18.101 14.281 1.00 0.00 H +ATOM 448 OW SOL 149 2.630 3.260 7.200 1.00 0.00 O +ATOM 449 HW1 SOL 149 1.840 3.770 6.860 1.00 0.00 H +ATOM 450 HW2 SOL 149 2.540 3.110 8.180 1.00 0.00 H +ATOM 451 OW SOL 150 11.941 16.121 0.310 1.00 0.00 O +ATOM 452 HW1 SOL 150 12.001 15.191 0.680 1.00 0.00 H +ATOM 453 HW2 SOL 150 11.351 16.121 -0.490 1.00 0.00 H +ATOM 454 OW SOL 151 8.220 10.021 13.721 1.00 0.00 O +ATOM 455 HW1 SOL 151 8.620 10.011 12.801 1.00 0.00 H +ATOM 456 HW2 SOL 151 8.320 10.941 14.121 1.00 0.00 H +ATOM 457 OW SOL 152 9.160 9.100 2.910 1.00 0.00 O +ATOM 458 HW1 SOL 152 9.790 9.480 2.230 1.00 0.00 H +ATOM 459 HW2 SOL 152 9.560 8.270 3.300 1.00 0.00 H +ATOM 460 OW SOL 153 15.041 16.071 0.440 1.00 0.00 O +ATOM 461 HW1 SOL 153 14.121 16.441 0.510 1.00 0.00 H +ATOM 462 HW2 SOL 153 15.421 16.271 -0.460 1.00 0.00 H +ATOM 463 OW SOL 154 3.720 12.881 14.901 1.00 0.00 O +ATOM 464 HW1 SOL 154 3.590 13.811 14.561 1.00 0.00 H +ATOM 465 HW2 SOL 154 2.880 12.361 14.771 1.00 0.00 H +ATOM 466 OW SOL 155 16.141 12.921 12.891 1.00 0.00 O +ATOM 467 HW1 SOL 155 16.741 12.951 13.691 1.00 0.00 H +ATOM 468 HW2 SOL 155 15.391 13.561 13.021 1.00 0.00 H +ATOM 469 OW SOL 156 10.391 10.981 6.960 1.00 0.00 O +ATOM 470 HW1 SOL 156 9.691 10.511 7.500 1.00 0.00 H +ATOM 471 HW2 SOL 156 10.981 10.301 6.530 1.00 0.00 H +ATOM 472 OW SOL 157 10.141 2.360 9.711 1.00 0.00 O +ATOM 473 HW1 SOL 157 10.061 2.000 8.781 1.00 0.00 H +ATOM 474 HW2 SOL 157 10.121 1.600 10.361 1.00 0.00 H +ATOM 475 OW SOL 158 5.900 14.871 4.910 1.00 0.00 O +ATOM 476 HW1 SOL 158 6.320 14.291 4.210 1.00 0.00 H +ATOM 477 HW2 SOL 158 5.460 15.661 4.470 1.00 0.00 H +ATOM 478 OW SOL 159 17.091 3.850 13.811 1.00 0.00 O +ATOM 479 HW1 SOL 159 17.821 4.540 13.851 1.00 0.00 H +ATOM 480 HW2 SOL 159 17.371 3.100 13.221 1.00 0.00 H +ATOM 481 OW SOL 160 2.550 13.481 2.900 1.00 0.00 O +ATOM 482 HW1 SOL 160 1.590 13.491 2.630 1.00 0.00 H +ATOM 483 HW2 SOL 160 2.670 14.011 3.740 1.00 0.00 H +ATOM 484 OW SOL 161 6.720 2.030 14.891 1.00 0.00 O +ATOM 485 HW1 SOL 161 7.620 1.870 14.491 1.00 0.00 H +ATOM 486 HW2 SOL 161 6.800 2.080 15.881 1.00 0.00 H +ATOM 487 OW SOL 162 14.401 8.560 13.981 1.00 0.00 O +ATOM 488 HW1 SOL 162 13.831 9.080 13.351 1.00 0.00 H +ATOM 489 HW2 SOL 162 15.361 8.680 13.741 1.00 0.00 H +ATOM 490 OW SOL 163 11.831 13.351 1.190 1.00 0.00 O +ATOM 491 HW1 SOL 163 10.841 13.241 1.210 1.00 0.00 H +ATOM 492 HW2 SOL 163 12.171 13.501 2.120 1.00 0.00 H +ATOM 493 OW SOL 164 6.130 8.420 14.311 1.00 0.00 O +ATOM 494 HW1 SOL 164 6.690 9.230 14.141 1.00 0.00 H +ATOM 495 HW2 SOL 164 6.720 7.620 14.341 1.00 0.00 H +ATOM 496 OW SOL 165 14.931 17.671 9.591 1.00 0.00 O +ATOM 497 HW1 SOL 165 15.261 18.311 8.901 1.00 0.00 H +ATOM 498 HW2 SOL 165 15.591 17.611 10.341 1.00 0.00 H +ATOM 499 OW SOL 166 7.160 5.650 17.081 1.00 0.00 O +ATOM 500 HW1 SOL 166 7.350 6.300 17.821 1.00 0.00 H +ATOM 501 HW2 SOL 166 7.760 4.850 17.171 1.00 0.00 H +ATOM 502 OW SOL 167 14.501 12.201 16.331 1.00 0.00 O +ATOM 503 HW1 SOL 167 14.411 12.101 17.321 1.00 0.00 H +ATOM 504 HW2 SOL 167 15.461 12.131 16.071 1.00 0.00 H +ATOM 505 OW SOL 168 3.900 17.411 15.601 1.00 0.00 O +ATOM 506 HW1 SOL 168 2.990 17.821 15.581 1.00 0.00 H +ATOM 507 HW2 SOL 168 3.830 16.471 15.921 1.00 0.00 H +ATOM 508 OW SOL 169 16.741 8.830 12.541 1.00 0.00 O +ATOM 509 HW1 SOL 169 16.471 7.940 12.171 1.00 0.00 H +ATOM 510 HW2 SOL 169 16.751 9.510 11.811 1.00 0.00 H +ATOM 511 OW SOL 170 12.251 3.250 4.490 1.00 0.00 O +ATOM 512 HW1 SOL 170 12.901 2.510 4.380 1.00 0.00 H +ATOM 513 HW2 SOL 170 12.451 3.750 5.330 1.00 0.00 H +ATOM 514 OW SOL 171 5.940 7.450 6.520 1.00 0.00 O +ATOM 515 HW1 SOL 171 6.440 8.300 6.330 1.00 0.00 H +ATOM 516 HW2 SOL 171 5.060 7.470 6.040 1.00 0.00 H +ATOM 517 OW SOL 172 17.771 3.420 16.421 1.00 0.00 O +ATOM 518 HW1 SOL 172 17.601 3.730 15.481 1.00 0.00 H +ATOM 519 HW2 SOL 172 16.931 3.050 16.801 1.00 0.00 H +ATOM 520 OW SOL 173 17.301 9.341 15.171 1.00 0.00 O +ATOM 521 HW1 SOL 173 17.681 10.251 15.321 1.00 0.00 H +ATOM 522 HW2 SOL 173 17.221 9.171 14.181 1.00 0.00 H +ATOM 523 OW SOL 174 8.590 13.741 0.160 1.00 0.00 O +ATOM 524 HW1 SOL 174 8.130 13.891 1.040 1.00 0.00 H +ATOM 525 HW2 SOL 174 9.030 14.591 -0.140 1.00 0.00 H +ATOM 526 OW SOL 175 6.610 17.901 9.531 1.00 0.00 O +ATOM 527 HW1 SOL 175 6.150 18.781 9.401 1.00 0.00 H +ATOM 528 HW2 SOL 175 7.600 18.021 9.461 1.00 0.00 H +ATOM 529 OW SOL 176 14.081 18.511 17.201 1.00 0.00 O +ATOM 530 HW1 SOL 176 13.121 18.401 16.931 1.00 0.00 H +ATOM 531 HW2 SOL 176 14.641 17.841 16.721 1.00 0.00 H +ATOM 532 OW SOL 177 8.590 9.561 8.610 1.00 0.00 O +ATOM 533 HW1 SOL 177 9.130 8.871 9.090 1.00 0.00 H +ATOM 534 HW2 SOL 177 8.270 10.251 9.270 1.00 0.00 H +ATOM 535 OW SOL 178 10.831 9.841 0.870 1.00 0.00 O +ATOM 536 HW1 SOL 178 10.601 10.371 0.050 1.00 0.00 H +ATOM 537 HW2 SOL 178 11.641 9.281 0.680 1.00 0.00 H +ATOM 538 OW SOL 179 18.611 15.691 8.510 1.00 0.00 O +ATOM 539 HW1 SOL 179 17.901 15.571 7.810 1.00 0.00 H +ATOM 540 HW2 SOL 179 18.621 14.901 9.110 1.00 0.00 H +ATOM 541 OW SOL 180 0.790 12.401 6.530 1.00 0.00 O +ATOM 542 HW1 SOL 180 0.780 11.931 7.410 1.00 0.00 H +ATOM 543 HW2 SOL 180 1.610 12.121 6.020 1.00 0.00 H +ATOM 544 OW SOL 181 6.720 13.911 16.241 1.00 0.00 O +ATOM 545 HW1 SOL 181 5.940 13.411 16.621 1.00 0.00 H +ATOM 546 HW2 SOL 181 6.690 14.861 16.551 1.00 0.00 H +ATOM 547 OW SOL 182 4.280 4.240 5.200 1.00 0.00 O +ATOM 548 HW1 SOL 182 4.580 3.520 4.580 1.00 0.00 H +ATOM 549 HW2 SOL 182 3.890 3.840 6.030 1.00 0.00 H +ATOM 550 OW SOL 183 17.051 14.871 11.041 1.00 0.00 O +ATOM 551 HW1 SOL 183 16.121 14.621 10.771 1.00 0.00 H +ATOM 552 HW2 SOL 183 17.311 14.371 11.861 1.00 0.00 H +ATOM 553 OW SOL 184 3.170 5.470 12.801 1.00 0.00 O +ATOM 554 HW1 SOL 184 3.550 4.880 13.521 1.00 0.00 H +ATOM 555 HW2 SOL 184 3.570 5.210 11.921 1.00 0.00 H +ATOM 556 OW SOL 185 8.120 15.861 6.870 1.00 0.00 O +ATOM 557 HW1 SOL 185 8.440 15.961 5.930 1.00 0.00 H +ATOM 558 HW2 SOL 185 7.330 15.241 6.890 1.00 0.00 H +ATOM 559 OW SOL 186 14.241 2.140 11.121 1.00 0.00 O +ATOM 560 HW1 SOL 186 14.761 1.490 11.671 1.00 0.00 H +ATOM 561 HW2 SOL 186 13.751 2.770 11.731 1.00 0.00 H +ATOM 562 OW SOL 187 10.011 0.340 11.541 1.00 0.00 O +ATOM 563 HW1 SOL 187 9.381 -0.380 11.231 1.00 0.00 H +ATOM 564 HW2 SOL 187 10.941 -0.020 11.541 1.00 0.00 H +ATOM 565 OW SOL 188 7.700 13.301 3.010 1.00 0.00 O +ATOM 566 HW1 SOL 188 7.240 12.431 3.180 1.00 0.00 H +ATOM 567 HW2 SOL 188 8.610 13.271 3.420 1.00 0.00 H +ATOM 568 OW SOL 189 6.180 15.671 12.841 1.00 0.00 O +ATOM 569 HW1 SOL 189 6.130 16.491 13.411 1.00 0.00 H +ATOM 570 HW2 SOL 189 7.070 15.641 12.391 1.00 0.00 H +ATOM 571 OW SOL 190 13.521 0.520 1.680 1.00 0.00 O +ATOM 572 HW1 SOL 190 13.871 0.110 0.840 1.00 0.00 H +ATOM 573 HW2 SOL 190 12.621 0.140 1.880 1.00 0.00 H +ATOM 574 OW SOL 191 13.001 4.530 6.910 1.00 0.00 O +ATOM 575 HW1 SOL 191 12.411 5.330 6.950 1.00 0.00 H +ATOM 576 HW2 SOL 191 13.151 4.180 7.840 1.00 0.00 H +ATOM 577 OW SOL 192 15.931 2.210 8.820 1.00 0.00 O +ATOM 578 HW1 SOL 192 15.091 2.200 9.360 1.00 0.00 H +ATOM 579 HW2 SOL 192 15.951 3.040 8.260 1.00 0.00 H +ATOM 580 OW SOL 193 0.390 10.771 3.000 1.00 0.00 O +ATOM 581 HW1 SOL 193 1.380 10.661 2.910 1.00 0.00 H +ATOM 582 HW2 SOL 193 -0.010 9.911 3.320 1.00 0.00 H +ATOM 583 OW SOL 194 8.750 16.461 3.370 1.00 0.00 O +ATOM 584 HW1 SOL 194 7.980 16.111 2.830 1.00 0.00 H +ATOM 585 HW2 SOL 194 8.430 17.171 3.990 1.00 0.00 H +ATOM 586 OW SOL 195 5.690 12.751 30.271 1.00 0.00 O +ATOM 587 HW1 SOL 195 4.760 12.681 29.901 1.00 0.00 H +ATOM 588 HW2 SOL 195 5.800 13.641 30.711 1.00 0.00 H +ATOM 589 OW SOL 196 15.551 15.111 25.651 1.00 0.00 O +ATOM 590 HW1 SOL 196 14.981 14.951 26.461 1.00 0.00 H +ATOM 591 HW2 SOL 196 14.961 15.211 24.851 1.00 0.00 H +ATOM 592 OW SOL 197 17.431 6.180 27.181 1.00 0.00 O +ATOM 593 HW1 SOL 197 17.761 7.120 27.181 1.00 0.00 H +ATOM 594 HW2 SOL 197 17.941 5.640 27.841 1.00 0.00 H +ATOM 595 OW SOL 198 11.351 7.030 25.791 1.00 0.00 O +ATOM 596 HW1 SOL 198 11.921 7.810 25.541 1.00 0.00 H +ATOM 597 HW2 SOL 198 10.751 7.290 26.551 1.00 0.00 H +ATOM 598 OW SOL 199 17.551 6.070 20.931 1.00 0.00 O +ATOM 599 HW1 SOL 199 17.431 5.940 19.941 1.00 0.00 H +ATOM 600 HW2 SOL 199 17.251 5.260 21.421 1.00 0.00 H +ATOM 601 OW SOL 200 7.680 11.441 28.851 1.00 0.00 O +ATOM 602 HW1 SOL 200 6.900 11.611 29.451 1.00 0.00 H +ATOM 603 HW2 SOL 200 8.020 12.311 28.491 1.00 0.00 H +ATOM 604 OW SOL 201 6.850 10.121 25.271 1.00 0.00 O +ATOM 605 HW1 SOL 201 7.540 9.961 25.971 1.00 0.00 H +ATOM 606 HW2 SOL 201 6.120 10.691 25.651 1.00 0.00 H +ATOM 607 OW SOL 202 2.400 10.911 27.481 1.00 0.00 O +ATOM 608 HW1 SOL 202 2.540 10.071 28.001 1.00 0.00 H +ATOM 609 HW2 SOL 202 1.850 11.551 28.031 1.00 0.00 H +ATOM 610 OW SOL 203 6.060 9.641 19.851 1.00 0.00 O +ATOM 611 HW1 SOL 203 6.130 10.481 19.311 1.00 0.00 H +ATOM 612 HW2 SOL 203 6.520 9.771 20.731 1.00 0.00 H +ATOM 613 OW SOL 204 1.220 6.430 24.251 1.00 0.00 O +ATOM 614 HW1 SOL 204 0.770 5.550 24.421 1.00 0.00 H +ATOM 615 HW2 SOL 204 1.210 6.970 25.091 1.00 0.00 H +ATOM 616 OW SOL 205 18.421 17.671 22.211 1.00 0.00 O +ATOM 617 HW1 SOL 205 18.961 17.381 23.011 1.00 0.00 H +ATOM 618 HW2 SOL 205 18.721 18.571 21.921 1.00 0.00 H +ATOM 619 OW SOL 206 16.891 9.220 24.741 1.00 0.00 O +ATOM 620 HW1 SOL 206 17.841 8.930 24.821 1.00 0.00 H +ATOM 621 HW2 SOL 206 16.811 9.870 23.991 1.00 0.00 H +ATOM 622 OW SOL 207 16.411 11.081 22.941 1.00 0.00 O +ATOM 623 HW1 SOL 207 17.271 11.101 22.421 1.00 0.00 H +ATOM 624 HW2 SOL 207 16.551 11.551 23.821 1.00 0.00 H +ATOM 625 OW SOL 208 6.130 13.651 25.881 1.00 0.00 O +ATOM 626 HW1 SOL 208 5.640 12.781 25.971 1.00 0.00 H +ATOM 627 HW2 SOL 208 5.900 14.081 25.011 1.00 0.00 H +ATOM 628 OW SOL 209 8.090 0.040 23.641 1.00 0.00 O +ATOM 629 HW1 SOL 209 8.490 0.950 23.551 1.00 0.00 H +ATOM 630 HW2 SOL 209 7.090 0.120 23.701 1.00 0.00 H +ATOM 631 OW SOL 210 1.970 9.761 0.031 1.00 0.00 O +ATOM 632 HW1 SOL 210 2.860 9.311 -0.109 1.00 0.00 H +ATOM 633 HW2 SOL 210 1.240 9.111 -0.159 1.00 0.00 H +ATOM 634 OW SOL 211 15.251 9.991 20.521 1.00 0.00 O +ATOM 635 HW1 SOL 211 14.621 9.231 20.651 1.00 0.00 H +ATOM 636 HW2 SOL 211 15.731 10.171 21.381 1.00 0.00 H +ATOM 637 OW SOL 212 14.661 14.171 28.151 1.00 0.00 O +ATOM 638 HW1 SOL 212 14.071 14.231 28.951 1.00 0.00 H +ATOM 639 HW2 SOL 212 14.511 13.291 27.691 1.00 0.00 H +ATOM 640 OW SOL 213 16.671 17.141 24.341 1.00 0.00 O +ATOM 641 HW1 SOL 213 16.261 16.911 23.461 1.00 0.00 H +ATOM 642 HW2 SOL 213 16.491 16.401 24.991 1.00 0.00 H +ATOM 643 OW SOL 214 5.980 7.290 21.321 1.00 0.00 O +ATOM 644 HW1 SOL 214 6.220 7.980 20.641 1.00 0.00 H +ATOM 645 HW2 SOL 214 5.200 7.620 21.861 1.00 0.00 H +ATOM 646 OW SOL 215 12.811 3.450 28.061 1.00 0.00 O +ATOM 647 HW1 SOL 215 11.951 2.950 27.931 1.00 0.00 H +ATOM 648 HW2 SOL 215 13.431 2.910 28.621 1.00 0.00 H +ATOM 649 OW SOL 216 15.761 16.621 21.691 1.00 0.00 O +ATOM 650 HW1 SOL 216 16.651 17.081 21.721 1.00 0.00 H +ATOM 651 HW2 SOL 216 15.551 16.381 20.741 1.00 0.00 H +ATOM 652 OW SOL 217 10.411 7.010 22.911 1.00 0.00 O +ATOM 653 HW1 SOL 217 10.671 6.970 23.871 1.00 0.00 H +ATOM 654 HW2 SOL 217 9.561 6.500 22.771 1.00 0.00 H +ATOM 655 OW SOL 218 8.650 3.480 20.571 1.00 0.00 O +ATOM 656 HW1 SOL 218 9.240 4.110 20.081 1.00 0.00 H +ATOM 657 HW2 SOL 218 8.840 2.540 20.281 1.00 0.00 H +ATOM 658 OW SOL 219 13.621 11.441 24.071 1.00 0.00 O +ATOM 659 HW1 SOL 219 14.451 11.151 23.591 1.00 0.00 H +ATOM 660 HW2 SOL 219 13.131 12.111 23.511 1.00 0.00 H +ATOM 661 OW SOL 220 5.500 1.960 27.471 1.00 0.00 O +ATOM 662 HW1 SOL 220 5.450 1.910 28.471 1.00 0.00 H +ATOM 663 HW2 SOL 220 5.520 2.920 27.181 1.00 0.00 H +ATOM 664 OW SOL 221 10.081 14.561 23.391 1.00 0.00 O +ATOM 665 HW1 SOL 221 9.621 15.281 22.871 1.00 0.00 H +ATOM 666 HW2 SOL 221 10.041 14.761 24.371 1.00 0.00 H +ATOM 667 OW SOL 222 3.510 18.011 27.151 1.00 0.00 O +ATOM 668 HW1 SOL 222 4.010 17.151 27.211 1.00 0.00 H +ATOM 669 HW2 SOL 222 4.160 18.781 27.121 1.00 0.00 H +ATOM 670 OW SOL 223 17.951 10.661 27.351 1.00 0.00 O +ATOM 671 HW1 SOL 223 17.331 10.511 26.591 1.00 0.00 H +ATOM 672 HW2 SOL 223 17.431 10.771 28.201 1.00 0.00 H +ATOM 673 OW SOL 224 3.210 9.431 21.041 1.00 0.00 O +ATOM 674 HW1 SOL 224 4.030 9.821 20.621 1.00 0.00 H +ATOM 675 HW2 SOL 224 2.940 8.611 20.551 1.00 0.00 H +ATOM 676 OW SOL 225 14.581 7.350 25.901 1.00 0.00 O +ATOM 677 HW1 SOL 225 14.531 6.700 26.651 1.00 0.00 H +ATOM 678 HW2 SOL 225 15.381 7.940 26.031 1.00 0.00 H +ATOM 679 OW SOL 226 11.111 17.761 20.991 1.00 0.00 O +ATOM 680 HW1 SOL 226 10.511 17.141 21.491 1.00 0.00 H +ATOM 681 HW2 SOL 226 11.421 17.321 20.141 1.00 0.00 H +ATOM 682 OW SOL 227 16.321 13.771 19.431 1.00 0.00 O +ATOM 683 HW1 SOL 227 16.001 14.711 19.331 1.00 0.00 H +ATOM 684 HW2 SOL 227 15.561 13.141 19.311 1.00 0.00 H +ATOM 685 OW SOL 228 4.640 17.431 21.851 1.00 0.00 O +ATOM 686 HW1 SOL 228 4.970 17.821 22.711 1.00 0.00 H +ATOM 687 HW2 SOL 228 5.400 17.361 21.201 1.00 0.00 H +ATOM 688 OW SOL 229 14.001 1.070 22.881 1.00 0.00 O +ATOM 689 HW1 SOL 229 13.761 0.700 21.981 1.00 0.00 H +ATOM 690 HW2 SOL 229 14.991 1.230 22.921 1.00 0.00 H +ATOM 691 OW SOL 230 2.490 17.851 31.031 1.00 0.00 O +ATOM 692 HW1 SOL 230 3.060 17.201 31.531 1.00 0.00 H +ATOM 693 HW2 SOL 230 2.330 17.521 30.101 1.00 0.00 H +ATOM 694 OW SOL 231 9.401 16.981 27.661 1.00 0.00 O +ATOM 695 HW1 SOL 231 10.201 16.411 27.871 1.00 0.00 H +ATOM 696 HW2 SOL 231 8.911 16.581 26.891 1.00 0.00 H +ATOM 697 OW SOL 232 3.820 7.000 23.421 1.00 0.00 O +ATOM 698 HW1 SOL 232 4.270 6.100 23.391 1.00 0.00 H +ATOM 699 HW2 SOL 232 2.880 6.890 23.751 1.00 0.00 H +ATOM 700 OW SOL 233 6.140 1.220 19.791 1.00 0.00 O +ATOM 701 HW1 SOL 233 7.120 1.000 19.861 1.00 0.00 H +ATOM 702 HW2 SOL 233 5.830 1.050 18.861 1.00 0.00 H +ATOM 703 OW SOL 234 8.030 14.021 27.861 1.00 0.00 O +ATOM 704 HW1 SOL 234 8.930 14.161 27.441 1.00 0.00 H +ATOM 705 HW2 SOL 234 7.320 14.041 27.151 1.00 0.00 H +ATOM 706 OW SOL 235 9.220 5.030 27.611 1.00 0.00 O +ATOM 707 HW1 SOL 235 8.970 4.940 26.651 1.00 0.00 H +ATOM 708 HW2 SOL 235 9.700 4.210 27.921 1.00 0.00 H +ATOM 709 OW SOL 236 5.390 0.640 23.741 1.00 0.00 O +ATOM 710 HW1 SOL 236 4.580 0.650 24.321 1.00 0.00 H +ATOM 711 HW2 SOL 236 5.420 1.470 23.191 1.00 0.00 H +ATOM 712 OW SOL 237 14.341 11.881 19.031 1.00 0.00 O +ATOM 713 HW1 SOL 237 14.661 11.121 19.601 1.00 0.00 H +ATOM 714 HW2 SOL 237 13.421 12.151 19.331 1.00 0.00 H +ATOM 715 OW SOL 238 2.970 0.350 20.331 1.00 0.00 O +ATOM 716 HW1 SOL 238 3.460 1.190 20.121 1.00 0.00 H +ATOM 717 HW2 SOL 238 3.590 -0.300 20.781 1.00 0.00 H +ATOM 718 OW SOL 239 9.351 2.360 23.421 1.00 0.00 O +ATOM 719 HW1 SOL 239 8.871 2.770 22.641 1.00 0.00 H +ATOM 720 HW2 SOL 239 10.341 2.340 23.231 1.00 0.00 H +ATOM 721 OW SOL 240 12.271 15.701 26.551 1.00 0.00 O +ATOM 722 HW1 SOL 240 12.481 16.441 25.901 1.00 0.00 H +ATOM 723 HW2 SOL 240 12.951 15.701 27.281 1.00 0.00 H +ATOM 724 OW SOL 241 4.590 11.521 26.031 1.00 0.00 O +ATOM 725 HW1 SOL 241 3.880 11.251 26.681 1.00 0.00 H +ATOM 726 HW2 SOL 241 4.330 11.241 25.101 1.00 0.00 H +ATOM 727 OW SOL 242 12.711 17.971 24.531 1.00 0.00 O +ATOM 728 HW1 SOL 242 13.151 18.611 23.891 1.00 0.00 H +ATOM 729 HW2 SOL 242 12.211 18.491 25.231 1.00 0.00 H +ATOM 730 OW SOL 243 10.321 5.490 18.781 1.00 0.00 O +ATOM 731 HW1 SOL 243 9.911 6.310 18.391 1.00 0.00 H +ATOM 732 HW2 SOL 243 10.961 5.750 19.511 1.00 0.00 H +ATOM 733 OW SOL 244 8.660 4.540 25.041 1.00 0.00 O +ATOM 734 HW1 SOL 244 8.340 5.260 24.421 1.00 0.00 H +ATOM 735 HW2 SOL 244 8.900 3.730 24.511 1.00 0.00 H +ATOM 736 OW SOL 245 10.171 0.390 26.151 1.00 0.00 O +ATOM 737 HW1 SOL 245 9.451 0.440 25.461 1.00 0.00 H +ATOM 738 HW2 SOL 245 9.931 -0.300 26.841 1.00 0.00 H +ATOM 739 OW SOL 246 14.291 11.731 27.291 1.00 0.00 O +ATOM 740 HW1 SOL 246 13.741 10.891 27.221 1.00 0.00 H +ATOM 741 HW2 SOL 246 14.551 12.021 26.371 1.00 0.00 H +ATOM 742 OW SOL 247 14.661 5.900 28.541 1.00 0.00 O +ATOM 743 HW1 SOL 247 14.361 4.950 28.611 1.00 0.00 H +ATOM 744 HW2 SOL 247 15.391 6.060 29.201 1.00 0.00 H +ATOM 745 OW SOL 248 18.571 8.330 22.391 1.00 0.00 O +ATOM 746 HW1 SOL 248 18.991 7.690 23.031 1.00 0.00 H +ATOM 747 HW2 SOL 248 18.191 7.820 21.611 1.00 0.00 H +ATOM 748 OW SOL 249 4.880 13.851 20.361 1.00 0.00 O +ATOM 749 HW1 SOL 249 4.010 13.701 20.831 1.00 0.00 H +ATOM 750 HW2 SOL 249 4.710 14.111 19.411 1.00 0.00 H +ATOM 751 OW SOL 250 16.641 12.801 25.191 1.00 0.00 O +ATOM 752 HW1 SOL 250 17.631 12.881 25.331 1.00 0.00 H +ATOM 753 HW2 SOL 250 16.191 13.641 25.501 1.00 0.00 H +ATOM 754 OW SOL 251 13.901 5.750 19.401 1.00 0.00 O +ATOM 755 HW1 SOL 251 13.361 5.540 20.211 1.00 0.00 H +ATOM 756 HW2 SOL 251 14.811 5.340 19.491 1.00 0.00 H +ATOM 757 OW SOL 252 5.270 2.560 21.901 1.00 0.00 O +ATOM 758 HW1 SOL 252 5.540 1.970 21.151 1.00 0.00 H +ATOM 759 HW2 SOL 252 5.270 3.510 21.591 1.00 0.00 H +ATOM 760 OW SOL 253 11.111 11.951 29.621 1.00 0.00 O +ATOM 761 HW1 SOL 253 10.711 12.391 30.431 1.00 0.00 H +ATOM 762 HW2 SOL 253 10.701 12.321 28.791 1.00 0.00 H +ATOM 763 OW SOL 254 16.381 10.991 29.411 1.00 0.00 O +ATOM 764 HW1 SOL 254 16.431 11.801 30.001 1.00 0.00 H +ATOM 765 HW2 SOL 254 15.521 11.011 28.901 1.00 0.00 H +ATOM 766 OW SOL 255 7.050 10.501 22.301 1.00 0.00 O +ATOM 767 HW1 SOL 255 6.910 10.571 23.291 1.00 0.00 H +ATOM 768 HW2 SOL 255 7.890 9.991 22.121 1.00 0.00 H +ATOM 769 OW SOL 256 4.100 8.130 31.131 1.00 0.00 O +ATOM 770 HW1 SOL 256 4.960 8.250 31.631 1.00 0.00 H +ATOM 771 HW2 SOL 256 3.680 7.260 31.401 1.00 0.00 H +ATOM 772 OW SOL 257 3.670 11.001 23.631 1.00 0.00 O +ATOM 773 HW1 SOL 257 3.600 11.831 23.071 1.00 0.00 H +ATOM 774 HW2 SOL 257 3.710 10.201 23.031 1.00 0.00 H +ATOM 775 OW SOL 258 5.660 5.370 27.271 1.00 0.00 O +ATOM 776 HW1 SOL 258 5.780 6.030 26.531 1.00 0.00 H +ATOM 777 HW2 SOL 258 6.120 5.710 28.101 1.00 0.00 H +ATOM 778 OW SOL 259 12.521 13.481 22.501 1.00 0.00 O +ATOM 779 HW1 SOL 259 13.021 14.251 22.901 1.00 0.00 H +ATOM 780 HW2 SOL 259 11.571 13.501 22.821 1.00 0.00 H +ATOM 781 OW SOL 260 12.721 14.451 30.041 1.00 0.00 O +ATOM 782 HW1 SOL 260 13.191 14.581 30.911 1.00 0.00 H +ATOM 783 HW2 SOL 260 12.061 13.711 30.131 1.00 0.00 H +ATOM 784 OW SOL 261 15.821 6.390 23.341 1.00 0.00 O +ATOM 785 HW1 SOL 261 15.511 7.000 24.071 1.00 0.00 H +ATOM 786 HW2 SOL 261 16.321 6.910 22.651 1.00 0.00 H +ATOM 787 OW SOL 262 5.730 8.700 28.911 1.00 0.00 O +ATOM 788 HW1 SOL 262 6.170 9.590 28.821 1.00 0.00 H +ATOM 789 HW2 SOL 262 5.100 8.700 29.681 1.00 0.00 H +ATOM 790 OW SOL 263 13.601 8.620 29.071 1.00 0.00 O +ATOM 791 HW1 SOL 263 12.851 8.620 28.411 1.00 0.00 H +ATOM 792 HW2 SOL 263 13.971 7.700 29.161 1.00 0.00 H +ATOM 793 OW SOL 264 12.091 5.250 21.371 1.00 0.00 O +ATOM 794 HW1 SOL 264 12.221 4.410 21.911 1.00 0.00 H +ATOM 795 HW2 SOL 264 11.801 5.990 21.971 1.00 0.00 H +ATOM 796 OW SOL 265 7.320 6.340 29.261 1.00 0.00 O +ATOM 797 HW1 SOL 265 7.910 6.080 28.501 1.00 0.00 H +ATOM 798 HW2 SOL 265 7.040 7.300 29.151 1.00 0.00 H +ATOM 799 OW SOL 266 3.070 0.630 24.801 1.00 0.00 O +ATOM 800 HW1 SOL 266 2.960 1.570 25.131 1.00 0.00 H +ATOM 801 HW2 SOL 266 3.020 0.000 25.571 1.00 0.00 H +ATOM 802 OW SOL 267 16.221 3.670 22.361 1.00 0.00 O +ATOM 803 HW1 SOL 267 16.241 2.910 23.001 1.00 0.00 H +ATOM 804 HW2 SOL 267 15.741 4.440 22.761 1.00 0.00 H +ATOM 805 OW SOL 268 10.231 7.660 28.281 1.00 0.00 O +ATOM 806 HW1 SOL 268 10.381 7.870 29.241 1.00 0.00 H +ATOM 807 HW2 SOL 268 9.931 6.710 28.191 1.00 0.00 H +ATOM 808 OW SOL 269 15.401 2.740 19.871 1.00 0.00 O +ATOM 809 HW1 SOL 269 14.791 1.990 20.101 1.00 0.00 H +ATOM 810 HW2 SOL 269 15.621 3.260 20.701 1.00 0.00 H +ATOM 811 OW SOL 270 13.031 8.380 19.041 1.00 0.00 O +ATOM 812 HW1 SOL 270 13.371 7.450 19.191 1.00 0.00 H +ATOM 813 HW2 SOL 270 13.211 8.650 18.091 1.00 0.00 H +ATOM 814 OW SOL 271 10.681 13.331 27.111 1.00 0.00 O +ATOM 815 HW1 SOL 271 10.751 12.491 26.561 1.00 0.00 H +ATOM 816 HW2 SOL 271 11.301 14.021 26.751 1.00 0.00 H +ATOM 817 OW SOL 272 3.190 8.100 28.111 1.00 0.00 O +ATOM 818 HW1 SOL 272 4.120 8.460 28.161 1.00 0.00 H +ATOM 819 HW2 SOL 272 3.130 7.250 28.631 1.00 0.00 H +ATOM 820 OW SOL 273 3.390 5.090 28.681 1.00 0.00 O +ATOM 821 HW1 SOL 273 2.870 4.260 28.511 1.00 0.00 H +ATOM 822 HW2 SOL 273 4.160 5.140 28.041 1.00 0.00 H +ATOM 823 OW SOL 274 0.880 18.011 27.891 1.00 0.00 O +ATOM 824 HW1 SOL 274 0.460 17.151 27.621 1.00 0.00 H +ATOM 825 HW2 SOL 274 1.820 18.041 27.551 1.00 0.00 H +ATOM 826 OW SOL 275 5.040 15.681 27.721 1.00 0.00 O +ATOM 827 HW1 SOL 275 5.700 16.421 27.811 1.00 0.00 H +ATOM 828 HW2 SOL 275 5.480 14.891 27.301 1.00 0.00 H +ATOM 829 OW SOL 276 10.021 7.960 31.001 1.00 0.00 O +ATOM 830 HW1 SOL 276 10.431 7.640 31.861 1.00 0.00 H +ATOM 831 HW2 SOL 276 9.061 7.690 30.971 1.00 0.00 H +ATOM 832 OW SOL 277 0.400 5.440 29.761 1.00 0.00 O +ATOM 833 HW1 SOL 277 1.250 5.110 29.351 1.00 0.00 H +ATOM 834 HW2 SOL 277 0.530 5.590 30.741 1.00 0.00 H +ATOM 835 OW SOL 278 8.150 5.720 21.871 1.00 0.00 O +ATOM 836 HW1 SOL 278 8.220 4.830 21.411 1.00 0.00 H +ATOM 837 HW2 SOL 278 7.210 6.060 21.791 1.00 0.00 H +ATOM 838 OW SOL 279 16.571 6.040 30.681 1.00 0.00 O +ATOM 839 HW1 SOL 279 16.191 5.350 31.301 1.00 0.00 H +ATOM 840 HW2 SOL 279 17.391 5.680 30.241 1.00 0.00 H +ATOM 841 OW SOL 280 6.710 4.640 0.081 1.00 0.00 O +ATOM 842 HW1 SOL 280 6.370 3.750 -0.219 1.00 0.00 H +ATOM 843 HW2 SOL 280 6.970 5.180 -0.719 1.00 0.00 H +ATOM 844 OW SOL 281 4.730 5.000 20.531 1.00 0.00 O +ATOM 845 HW1 SOL 281 5.340 5.800 20.571 1.00 0.00 H +ATOM 846 HW2 SOL 281 3.780 5.310 20.601 1.00 0.00 H +ATOM 847 OW SOL 282 13.021 8.550 21.711 1.00 0.00 O +ATOM 848 HW1 SOL 282 12.161 8.240 22.131 1.00 0.00 H +ATOM 849 HW2 SOL 282 12.981 8.410 20.721 1.00 0.00 H +ATOM 850 OW SOL 283 17.591 17.471 30.161 1.00 0.00 O +ATOM 851 HW1 SOL 283 18.201 17.771 29.431 1.00 0.00 H +ATOM 852 HW2 SOL 283 17.211 16.581 29.941 1.00 0.00 H +ATOM 853 OW SOL 284 0.830 12.581 28.841 1.00 0.00 O +ATOM 854 HW1 SOL 284 0.780 12.571 29.841 1.00 0.00 H +ATOM 855 HW2 SOL 284 0.000 12.171 28.461 1.00 0.00 H +ATOM 856 OW SOL 285 17.261 1.350 23.851 1.00 0.00 O +ATOM 857 HW1 SOL 285 17.991 1.180 23.181 1.00 0.00 H +ATOM 858 HW2 SOL 285 16.951 0.480 24.231 1.00 0.00 H +ATOM 859 OW SOL 286 13.881 15.731 23.391 1.00 0.00 O +ATOM 860 HW1 SOL 286 14.551 15.851 22.651 1.00 0.00 H +ATOM 861 HW2 SOL 286 13.481 16.621 23.621 1.00 0.00 H +ATOM 862 OW SOL 287 12.801 9.270 25.341 1.00 0.00 O +ATOM 863 HW1 SOL 287 13.401 8.460 25.361 1.00 0.00 H +ATOM 864 HW2 SOL 287 13.201 9.960 24.741 1.00 0.00 H +ATOM 865 OW SOL 288 6.720 16.161 20.161 1.00 0.00 O +ATOM 866 HW1 SOL 288 6.810 16.261 19.171 1.00 0.00 H +ATOM 867 HW2 SOL 288 6.320 15.271 20.371 1.00 0.00 H +ATOM 868 OW SOL 289 2.630 3.260 25.821 1.00 0.00 O +ATOM 869 HW1 SOL 289 1.840 3.770 25.481 1.00 0.00 H +ATOM 870 HW2 SOL 289 2.540 3.110 26.801 1.00 0.00 H +ATOM 871 OW SOL 290 11.941 16.121 18.931 1.00 0.00 O +ATOM 872 HW1 SOL 290 12.001 15.191 19.301 1.00 0.00 H +ATOM 873 HW2 SOL 290 11.351 16.121 18.131 1.00 0.00 H +ATOM 874 OW SOL 291 8.220 10.021 1.111 1.00 0.00 O +ATOM 875 HW1 SOL 291 8.620 10.011 0.191 1.00 0.00 H +ATOM 876 HW2 SOL 291 8.320 10.941 1.511 1.00 0.00 H +ATOM 877 OW SOL 292 9.160 9.100 21.531 1.00 0.00 O +ATOM 878 HW1 SOL 292 9.790 9.480 20.851 1.00 0.00 H +ATOM 879 HW2 SOL 292 9.560 8.270 21.921 1.00 0.00 H +ATOM 880 OW SOL 293 15.041 16.071 19.061 1.00 0.00 O +ATOM 881 HW1 SOL 293 14.121 16.441 19.131 1.00 0.00 H +ATOM 882 HW2 SOL 293 15.421 16.271 18.161 1.00 0.00 H +ATOM 883 OW SOL 294 10.391 10.981 25.581 1.00 0.00 O +ATOM 884 HW1 SOL 294 9.691 10.511 26.121 1.00 0.00 H +ATOM 885 HW2 SOL 294 10.981 10.301 25.151 1.00 0.00 H +ATOM 886 OW SOL 295 10.141 2.360 28.331 1.00 0.00 O +ATOM 887 HW1 SOL 295 10.061 2.000 27.401 1.00 0.00 H +ATOM 888 HW2 SOL 295 10.121 1.600 28.981 1.00 0.00 H +ATOM 889 OW SOL 296 5.900 14.871 23.531 1.00 0.00 O +ATOM 890 HW1 SOL 296 6.320 14.291 22.831 1.00 0.00 H +ATOM 891 HW2 SOL 296 5.460 15.661 23.091 1.00 0.00 H +ATOM 892 OW SOL 297 17.091 3.850 1.201 1.00 0.00 O +ATOM 893 HW1 SOL 297 17.821 4.540 1.241 1.00 0.00 H +ATOM 894 HW2 SOL 297 17.371 3.100 0.611 1.00 0.00 H +ATOM 895 OW SOL 298 2.550 13.481 21.521 1.00 0.00 O +ATOM 896 HW1 SOL 298 1.590 13.491 21.251 1.00 0.00 H +ATOM 897 HW2 SOL 298 2.670 14.011 22.361 1.00 0.00 H +ATOM 898 OW SOL 299 0.750 3.450 18.951 1.00 0.00 O +ATOM 899 HW1 SOL 299 -0.170 3.170 18.661 1.00 0.00 H +ATOM 900 HW2 SOL 299 1.060 4.220 18.391 1.00 0.00 H +ATOM 901 OW SOL 300 11.831 13.351 19.811 1.00 0.00 O +ATOM 902 HW1 SOL 300 10.841 13.241 19.831 1.00 0.00 H +ATOM 903 HW2 SOL 300 12.171 13.501 20.741 1.00 0.00 H +ATOM 904 OW SOL 301 14.931 17.671 28.211 1.00 0.00 O +ATOM 905 HW1 SOL 301 15.261 18.311 27.521 1.00 0.00 H +ATOM 906 HW2 SOL 301 15.591 17.611 28.961 1.00 0.00 H +ATOM 907 OW SOL 302 16.741 8.830 31.161 1.00 0.00 O +ATOM 908 HW1 SOL 302 16.471 7.940 30.791 1.00 0.00 H +ATOM 909 HW2 SOL 302 16.751 9.510 30.431 1.00 0.00 H +ATOM 910 OW SOL 303 12.251 3.250 23.111 1.00 0.00 O +ATOM 911 HW1 SOL 303 12.901 2.510 23.001 1.00 0.00 H +ATOM 912 HW2 SOL 303 12.451 3.750 23.951 1.00 0.00 H +ATOM 913 OW SOL 304 5.940 7.450 25.141 1.00 0.00 O +ATOM 914 HW1 SOL 304 6.440 8.300 24.951 1.00 0.00 H +ATOM 915 HW2 SOL 304 5.060 7.470 24.661 1.00 0.00 H +ATOM 916 OW SOL 305 8.590 13.741 18.781 1.00 0.00 O +ATOM 917 HW1 SOL 305 8.130 13.891 19.661 1.00 0.00 H +ATOM 918 HW2 SOL 305 9.030 14.591 18.481 1.00 0.00 H +ATOM 919 OW SOL 306 6.610 17.901 28.151 1.00 0.00 O +ATOM 920 HW1 SOL 306 6.150 18.781 28.021 1.00 0.00 H +ATOM 921 HW2 SOL 306 7.600 18.021 28.081 1.00 0.00 H +ATOM 922 OW SOL 307 8.590 9.561 27.231 1.00 0.00 O +ATOM 923 HW1 SOL 307 9.130 8.871 27.711 1.00 0.00 H +ATOM 924 HW2 SOL 307 8.270 10.251 27.891 1.00 0.00 H +ATOM 925 OW SOL 308 10.831 9.841 19.491 1.00 0.00 O +ATOM 926 HW1 SOL 308 10.601 10.371 18.671 1.00 0.00 H +ATOM 927 HW2 SOL 308 11.641 9.281 19.301 1.00 0.00 H +ATOM 928 OW SOL 309 18.611 15.691 27.131 1.00 0.00 O +ATOM 929 HW1 SOL 309 17.901 15.571 26.431 1.00 0.00 H +ATOM 930 HW2 SOL 309 18.621 14.901 27.731 1.00 0.00 H +ATOM 931 OW SOL 310 0.790 12.401 25.151 1.00 0.00 O +ATOM 932 HW1 SOL 310 0.780 11.931 26.031 1.00 0.00 H +ATOM 933 HW2 SOL 310 1.610 12.121 24.641 1.00 0.00 H +ATOM 934 OW SOL 311 4.280 4.240 23.821 1.00 0.00 O +ATOM 935 HW1 SOL 311 4.580 3.520 23.201 1.00 0.00 H +ATOM 936 HW2 SOL 311 3.890 3.840 24.651 1.00 0.00 H +ATOM 937 OW SOL 312 17.051 14.871 29.661 1.00 0.00 O +ATOM 938 HW1 SOL 312 16.121 14.621 29.391 1.00 0.00 H +ATOM 939 HW2 SOL 312 17.311 14.371 30.481 1.00 0.00 H +ATOM 940 OW SOL 313 8.120 15.861 25.491 1.00 0.00 O +ATOM 941 HW1 SOL 313 8.440 15.961 24.551 1.00 0.00 H +ATOM 942 HW2 SOL 313 7.330 15.241 25.511 1.00 0.00 H +ATOM 943 OW SOL 314 14.241 2.140 29.741 1.00 0.00 O +ATOM 944 HW1 SOL 314 14.761 1.490 30.291 1.00 0.00 H +ATOM 945 HW2 SOL 314 13.751 2.770 30.351 1.00 0.00 H +ATOM 946 OW SOL 315 10.011 0.340 30.161 1.00 0.00 O +ATOM 947 HW1 SOL 315 9.381 -0.380 29.851 1.00 0.00 H +ATOM 948 HW2 SOL 315 10.941 -0.020 30.161 1.00 0.00 H +ATOM 949 OW SOL 316 7.700 13.301 21.631 1.00 0.00 O +ATOM 950 HW1 SOL 316 7.240 12.431 21.801 1.00 0.00 H +ATOM 951 HW2 SOL 316 8.610 13.271 22.041 1.00 0.00 H +ATOM 952 OW SOL 317 13.521 0.520 20.301 1.00 0.00 O +ATOM 953 HW1 SOL 317 13.871 0.110 19.461 1.00 0.00 H +ATOM 954 HW2 SOL 317 12.621 0.140 20.501 1.00 0.00 H +ATOM 955 OW SOL 318 13.001 4.530 25.531 1.00 0.00 O +ATOM 956 HW1 SOL 318 12.411 5.330 25.571 1.00 0.00 H +ATOM 957 HW2 SOL 318 13.151 4.180 26.461 1.00 0.00 H +ATOM 958 OW SOL 319 15.931 2.210 27.441 1.00 0.00 O +ATOM 959 HW1 SOL 319 15.091 2.200 27.981 1.00 0.00 H +ATOM 960 HW2 SOL 319 15.951 3.040 26.881 1.00 0.00 H +ATOM 961 OW SOL 320 0.390 10.771 21.621 1.00 0.00 O +ATOM 962 HW1 SOL 320 1.380 10.661 21.531 1.00 0.00 H +ATOM 963 HW2 SOL 320 -0.010 9.911 21.941 1.00 0.00 H +ATOM 964 OW SOL 321 8.750 16.461 21.991 1.00 0.00 O +ATOM 965 HW1 SOL 321 7.980 16.111 21.451 1.00 0.00 H +ATOM 966 HW2 SOL 321 8.430 17.171 22.611 1.00 0.00 H +ATOM 967 OW SOL 322 17.431 24.801 8.560 1.00 0.00 O +ATOM 968 HW1 SOL 322 17.761 25.741 8.560 1.00 0.00 H +ATOM 969 HW2 SOL 322 17.941 24.261 9.220 1.00 0.00 H +ATOM 970 OW SOL 323 11.351 25.651 7.170 1.00 0.00 O +ATOM 971 HW1 SOL 323 11.921 26.431 6.920 1.00 0.00 H +ATOM 972 HW2 SOL 323 10.751 25.911 7.930 1.00 0.00 H +ATOM 973 OW SOL 324 17.551 24.691 2.310 1.00 0.00 O +ATOM 974 HW1 SOL 324 17.431 24.561 1.320 1.00 0.00 H +ATOM 975 HW2 SOL 324 17.251 23.881 2.800 1.00 0.00 H +ATOM 976 OW SOL 325 7.680 30.061 10.231 1.00 0.00 O +ATOM 977 HW1 SOL 325 6.900 30.231 10.831 1.00 0.00 H +ATOM 978 HW2 SOL 325 8.020 30.931 9.871 1.00 0.00 H +ATOM 979 OW SOL 326 8.500 26.601 18.231 1.00 0.00 O +ATOM 980 HW1 SOL 326 8.460 27.361 18.881 1.00 0.00 H +ATOM 981 HW2 SOL 326 8.720 26.961 17.321 1.00 0.00 H +ATOM 982 OW SOL 327 6.850 28.741 6.650 1.00 0.00 O +ATOM 983 HW1 SOL 327 7.540 28.581 7.350 1.00 0.00 H +ATOM 984 HW2 SOL 327 6.120 29.311 7.030 1.00 0.00 H +ATOM 985 OW SOL 328 4.380 22.541 14.991 1.00 0.00 O +ATOM 986 HW1 SOL 328 5.200 21.981 15.081 1.00 0.00 H +ATOM 987 HW2 SOL 328 3.570 21.961 15.031 1.00 0.00 H +ATOM 988 OW SOL 329 16.031 23.091 7.370 1.00 0.00 O +ATOM 989 HW1 SOL 329 15.291 23.551 6.870 1.00 0.00 H +ATOM 990 HW2 SOL 329 16.541 23.771 7.900 1.00 0.00 H +ATOM 991 OW SOL 330 2.400 29.531 8.860 1.00 0.00 O +ATOM 992 HW1 SOL 330 2.540 28.691 9.380 1.00 0.00 H +ATOM 993 HW2 SOL 330 1.850 30.171 9.410 1.00 0.00 H +ATOM 994 OW SOL 331 6.060 28.261 1.230 1.00 0.00 O +ATOM 995 HW1 SOL 331 6.130 29.101 0.690 1.00 0.00 H +ATOM 996 HW2 SOL 331 6.520 28.391 2.110 1.00 0.00 H +ATOM 997 OW SOL 332 15.941 19.761 14.801 1.00 0.00 O +ATOM 998 HW1 SOL 332 15.761 20.431 14.081 1.00 0.00 H +ATOM 999 HW2 SOL 332 15.911 20.221 15.691 1.00 0.00 H +ATOM 1000 OW SOL 333 1.220 25.051 5.630 1.00 0.00 O +ATOM 1001 HW1 SOL 333 0.770 24.171 5.800 1.00 0.00 H +ATOM 1002 HW2 SOL 333 1.210 25.591 6.470 1.00 0.00 H +ATOM 1003 OW SOL 334 16.891 27.841 6.120 1.00 0.00 O +ATOM 1004 HW1 SOL 334 17.841 27.551 6.200 1.00 0.00 H +ATOM 1005 HW2 SOL 334 16.811 28.491 5.370 1.00 0.00 H +ATOM 1006 OW SOL 335 16.411 29.701 4.320 1.00 0.00 O +ATOM 1007 HW1 SOL 335 17.271 29.721 3.800 1.00 0.00 H +ATOM 1008 HW2 SOL 335 16.551 30.171 5.200 1.00 0.00 H +ATOM 1009 OW SOL 336 1.130 25.991 15.971 1.00 0.00 O +ATOM 1010 HW1 SOL 336 2.010 25.861 16.421 1.00 0.00 H +ATOM 1011 HW2 SOL 336 1.000 26.961 15.751 1.00 0.00 H +ATOM 1012 OW SOL 337 6.130 1.041 7.260 1.00 0.00 O +ATOM 1013 HW1 SOL 337 5.640 0.171 7.350 1.00 0.00 H +ATOM 1014 HW2 SOL 337 5.900 1.471 6.390 1.00 0.00 H +ATOM 1015 OW SOL 338 12.931 30.901 14.231 1.00 0.00 O +ATOM 1016 HW1 SOL 338 13.301 30.171 13.651 1.00 0.00 H +ATOM 1017 HW2 SOL 338 13.451 30.951 15.081 1.00 0.00 H +ATOM 1018 OW SOL 339 8.090 18.661 5.020 1.00 0.00 O +ATOM 1019 HW1 SOL 339 8.490 19.571 4.930 1.00 0.00 H +ATOM 1020 HW2 SOL 339 7.090 18.741 5.080 1.00 0.00 H +ATOM 1021 OW SOL 340 15.251 28.611 1.900 1.00 0.00 O +ATOM 1022 HW1 SOL 340 14.621 27.851 2.030 1.00 0.00 H +ATOM 1023 HW2 SOL 340 15.731 28.791 2.760 1.00 0.00 H +ATOM 1024 OW SOL 341 3.170 21.131 18.011 1.00 0.00 O +ATOM 1025 HW1 SOL 341 3.880 21.841 18.071 1.00 0.00 H +ATOM 1026 HW2 SOL 341 2.290 21.521 18.291 1.00 0.00 H +ATOM 1027 OW SOL 342 5.980 25.911 2.700 1.00 0.00 O +ATOM 1028 HW1 SOL 342 6.220 26.601 2.020 1.00 0.00 H +ATOM 1029 HW2 SOL 342 5.200 26.241 3.240 1.00 0.00 H +ATOM 1030 OW SOL 343 12.811 22.071 9.441 1.00 0.00 O +ATOM 1031 HW1 SOL 343 11.951 21.571 9.311 1.00 0.00 H +ATOM 1032 HW2 SOL 343 13.431 21.531 10.001 1.00 0.00 H +ATOM 1033 OW SOL 344 8.070 24.671 14.651 1.00 0.00 O +ATOM 1034 HW1 SOL 344 7.600 24.641 15.541 1.00 0.00 H +ATOM 1035 HW2 SOL 344 7.560 24.121 13.991 1.00 0.00 H +ATOM 1036 OW SOL 345 13.941 23.311 16.741 1.00 0.00 O +ATOM 1037 HW1 SOL 345 13.741 23.741 17.621 1.00 0.00 H +ATOM 1038 HW2 SOL 345 14.721 22.691 16.831 1.00 0.00 H +ATOM 1039 OW SOL 346 9.731 27.521 15.721 1.00 0.00 O +ATOM 1040 HW1 SOL 346 10.191 26.681 15.431 1.00 0.00 H +ATOM 1041 HW2 SOL 346 9.171 27.861 14.971 1.00 0.00 H +ATOM 1042 OW SOL 347 9.911 22.721 12.421 1.00 0.00 O +ATOM 1043 HW1 SOL 347 9.141 23.061 12.961 1.00 0.00 H +ATOM 1044 HW2 SOL 347 9.571 22.211 11.631 1.00 0.00 H +ATOM 1045 OW SOL 348 10.411 25.631 4.290 1.00 0.00 O +ATOM 1046 HW1 SOL 348 10.671 25.591 5.250 1.00 0.00 H +ATOM 1047 HW2 SOL 348 9.561 25.121 4.150 1.00 0.00 H +ATOM 1048 OW SOL 349 8.650 22.101 1.950 1.00 0.00 O +ATOM 1049 HW1 SOL 349 9.240 22.731 1.460 1.00 0.00 H +ATOM 1050 HW2 SOL 349 8.840 21.161 1.660 1.00 0.00 H +ATOM 1051 OW SOL 350 17.191 24.471 18.311 1.00 0.00 O +ATOM 1052 HW1 SOL 350 16.931 25.361 17.951 1.00 0.00 H +ATOM 1053 HW2 SOL 350 17.171 23.791 17.581 1.00 0.00 H +ATOM 1054 OW SOL 351 13.621 30.061 5.450 1.00 0.00 O +ATOM 1055 HW1 SOL 351 14.451 29.771 4.970 1.00 0.00 H +ATOM 1056 HW2 SOL 351 13.131 30.731 4.890 1.00 0.00 H +ATOM 1057 OW SOL 352 5.500 20.581 8.850 1.00 0.00 O +ATOM 1058 HW1 SOL 352 5.450 20.531 9.850 1.00 0.00 H +ATOM 1059 HW2 SOL 352 5.520 21.541 8.560 1.00 0.00 H +ATOM 1060 OW SOL 353 17.951 29.281 8.730 1.00 0.00 O +ATOM 1061 HW1 SOL 353 17.331 29.131 7.970 1.00 0.00 H +ATOM 1062 HW2 SOL 353 17.431 29.391 9.580 1.00 0.00 H +ATOM 1063 OW SOL 354 3.210 28.051 2.420 1.00 0.00 O +ATOM 1064 HW1 SOL 354 4.030 28.441 2.000 1.00 0.00 H +ATOM 1065 HW2 SOL 354 2.940 27.231 1.930 1.00 0.00 H +ATOM 1066 OW SOL 355 14.581 25.971 7.280 1.00 0.00 O +ATOM 1067 HW1 SOL 355 14.531 25.321 8.030 1.00 0.00 H +ATOM 1068 HW2 SOL 355 15.381 26.561 7.410 1.00 0.00 H +ATOM 1069 OW SOL 356 2.020 21.471 14.981 1.00 0.00 O +ATOM 1070 HW1 SOL 356 1.220 22.071 14.851 1.00 0.00 H +ATOM 1071 HW2 SOL 356 1.920 20.981 15.841 1.00 0.00 H +ATOM 1072 OW SOL 357 14.001 19.691 4.260 1.00 0.00 O +ATOM 1073 HW1 SOL 357 13.761 19.321 3.360 1.00 0.00 H +ATOM 1074 HW2 SOL 357 14.991 19.851 4.300 1.00 0.00 H +ATOM 1075 OW SOL 358 3.820 25.621 4.800 1.00 0.00 O +ATOM 1076 HW1 SOL 358 4.270 24.721 4.770 1.00 0.00 H +ATOM 1077 HW2 SOL 358 2.880 25.511 5.130 1.00 0.00 H +ATOM 1078 OW SOL 359 15.471 20.841 17.291 1.00 0.00 O +ATOM 1079 HW1 SOL 359 15.421 21.211 18.211 1.00 0.00 H +ATOM 1080 HW2 SOL 359 14.751 20.151 17.171 1.00 0.00 H +ATOM 1081 OW SOL 360 6.140 19.841 1.170 1.00 0.00 O +ATOM 1082 HW1 SOL 360 7.120 19.621 1.240 1.00 0.00 H +ATOM 1083 HW2 SOL 360 5.830 19.671 0.240 1.00 0.00 H +ATOM 1084 OW SOL 361 7.810 21.261 17.491 1.00 0.00 O +ATOM 1085 HW1 SOL 361 8.480 20.651 17.921 1.00 0.00 H +ATOM 1086 HW2 SOL 361 7.080 21.451 18.141 1.00 0.00 H +ATOM 1087 OW SOL 362 13.511 24.521 14.331 1.00 0.00 O +ATOM 1088 HW1 SOL 362 13.791 24.091 15.181 1.00 0.00 H +ATOM 1089 HW2 SOL 362 13.761 25.481 14.341 1.00 0.00 H +ATOM 1090 OW SOL 363 9.220 23.651 8.990 1.00 0.00 O +ATOM 1091 HW1 SOL 363 8.970 23.561 8.030 1.00 0.00 H +ATOM 1092 HW2 SOL 363 9.700 22.831 9.300 1.00 0.00 H +ATOM 1093 OW SOL 364 5.390 19.261 5.120 1.00 0.00 O +ATOM 1094 HW1 SOL 364 4.580 19.271 5.700 1.00 0.00 H +ATOM 1095 HW2 SOL 364 5.420 20.091 4.570 1.00 0.00 H +ATOM 1096 OW SOL 365 2.970 18.971 1.710 1.00 0.00 O +ATOM 1097 HW1 SOL 365 3.460 19.811 1.500 1.00 0.00 H +ATOM 1098 HW2 SOL 365 3.590 18.321 2.160 1.00 0.00 H +ATOM 1099 OW SOL 366 9.351 20.981 4.800 1.00 0.00 O +ATOM 1100 HW1 SOL 366 8.871 21.391 4.020 1.00 0.00 H +ATOM 1101 HW2 SOL 366 10.341 20.961 4.610 1.00 0.00 H +ATOM 1102 OW SOL 367 10.761 25.451 14.641 1.00 0.00 O +ATOM 1103 HW1 SOL 367 9.961 24.841 14.671 1.00 0.00 H +ATOM 1104 HW2 SOL 367 11.571 24.921 14.401 1.00 0.00 H +ATOM 1105 OW SOL 368 4.590 30.141 7.410 1.00 0.00 O +ATOM 1106 HW1 SOL 368 3.880 29.871 8.060 1.00 0.00 H +ATOM 1107 HW2 SOL 368 4.330 29.861 6.480 1.00 0.00 H +ATOM 1108 OW SOL 369 10.321 24.111 0.160 1.00 0.00 O +ATOM 1109 HW1 SOL 369 9.911 24.931 -0.230 1.00 0.00 H +ATOM 1110 HW2 SOL 369 10.961 24.371 0.890 1.00 0.00 H +ATOM 1111 OW SOL 370 5.610 20.841 11.471 1.00 0.00 O +ATOM 1112 HW1 SOL 370 5.990 20.001 11.841 1.00 0.00 H +ATOM 1113 HW2 SOL 370 4.730 21.031 11.911 1.00 0.00 H +ATOM 1114 OW SOL 371 8.660 23.161 6.420 1.00 0.00 O +ATOM 1115 HW1 SOL 371 8.340 23.881 5.800 1.00 0.00 H +ATOM 1116 HW2 SOL 371 8.900 22.351 5.890 1.00 0.00 H +ATOM 1117 OW SOL 372 10.171 19.011 7.530 1.00 0.00 O +ATOM 1118 HW1 SOL 372 9.451 19.061 6.840 1.00 0.00 H +ATOM 1119 HW2 SOL 372 9.931 18.321 8.220 1.00 0.00 H +ATOM 1120 OW SOL 373 14.291 30.351 8.670 1.00 0.00 O +ATOM 1121 HW1 SOL 373 13.741 29.511 8.600 1.00 0.00 H +ATOM 1122 HW2 SOL 373 14.551 30.641 7.750 1.00 0.00 H +ATOM 1123 OW SOL 374 14.661 24.521 9.921 1.00 0.00 O +ATOM 1124 HW1 SOL 374 14.361 23.571 9.991 1.00 0.00 H +ATOM 1125 HW2 SOL 374 15.391 24.681 10.581 1.00 0.00 H +ATOM 1126 OW SOL 375 18.571 26.951 3.770 1.00 0.00 O +ATOM 1127 HW1 SOL 375 18.991 26.311 4.410 1.00 0.00 H +ATOM 1128 HW2 SOL 375 18.191 26.441 2.990 1.00 0.00 H +ATOM 1129 OW SOL 376 13.901 24.371 0.780 1.00 0.00 O +ATOM 1130 HW1 SOL 376 13.361 24.161 1.590 1.00 0.00 H +ATOM 1131 HW2 SOL 376 14.811 23.961 0.870 1.00 0.00 H +ATOM 1132 OW SOL 377 5.270 21.181 3.280 1.00 0.00 O +ATOM 1133 HW1 SOL 377 5.540 20.591 2.530 1.00 0.00 H +ATOM 1134 HW2 SOL 377 5.270 22.131 2.970 1.00 0.00 H +ATOM 1135 OW SOL 378 17.541 30.851 15.881 1.00 0.00 O +ATOM 1136 HW1 SOL 378 18.451 30.461 15.751 1.00 0.00 H +ATOM 1137 HW2 SOL 378 17.621 31.811 16.121 1.00 0.00 H +ATOM 1138 OW SOL 379 16.381 29.611 10.791 1.00 0.00 O +ATOM 1139 HW1 SOL 379 16.431 30.421 11.381 1.00 0.00 H +ATOM 1140 HW2 SOL 379 15.521 29.631 10.281 1.00 0.00 H +ATOM 1141 OW SOL 380 9.150 19.511 14.021 1.00 0.00 O +ATOM 1142 HW1 SOL 380 9.400 19.311 13.071 1.00 0.00 H +ATOM 1143 HW2 SOL 380 9.870 20.071 14.441 1.00 0.00 H +ATOM 1144 OW SOL 381 9.801 29.781 17.191 1.00 0.00 O +ATOM 1145 HW1 SOL 381 8.811 29.841 17.291 1.00 0.00 H +ATOM 1146 HW2 SOL 381 10.031 28.981 16.631 1.00 0.00 H +ATOM 1147 OW SOL 382 7.050 29.121 3.680 1.00 0.00 O +ATOM 1148 HW1 SOL 382 6.910 29.191 4.670 1.00 0.00 H +ATOM 1149 HW2 SOL 382 7.890 28.611 3.500 1.00 0.00 H +ATOM 1150 OW SOL 383 4.100 26.751 12.511 1.00 0.00 O +ATOM 1151 HW1 SOL 383 4.960 26.871 13.011 1.00 0.00 H +ATOM 1152 HW2 SOL 383 3.680 25.881 12.781 1.00 0.00 H +ATOM 1153 OW SOL 384 12.741 22.481 12.621 1.00 0.00 O +ATOM 1154 HW1 SOL 384 12.951 23.221 13.261 1.00 0.00 H +ATOM 1155 HW2 SOL 384 11.851 22.651 12.191 1.00 0.00 H +ATOM 1156 OW SOL 385 3.670 29.621 5.010 1.00 0.00 O +ATOM 1157 HW1 SOL 385 3.600 30.451 4.450 1.00 0.00 H +ATOM 1158 HW2 SOL 385 3.710 28.821 4.410 1.00 0.00 H +ATOM 1159 OW SOL 386 5.660 23.991 8.650 1.00 0.00 O +ATOM 1160 HW1 SOL 386 5.780 24.651 7.910 1.00 0.00 H +ATOM 1161 HW2 SOL 386 6.120 24.331 9.480 1.00 0.00 H +ATOM 1162 OW SOL 387 15.821 25.011 4.720 1.00 0.00 O +ATOM 1163 HW1 SOL 387 15.511 25.621 5.450 1.00 0.00 H +ATOM 1164 HW2 SOL 387 16.321 25.531 4.030 1.00 0.00 H +ATOM 1165 OW SOL 388 4.020 26.131 15.981 1.00 0.00 O +ATOM 1166 HW1 SOL 388 4.700 26.681 15.511 1.00 0.00 H +ATOM 1167 HW2 SOL 388 4.420 25.251 16.251 1.00 0.00 H +ATOM 1168 OW SOL 389 15.871 26.411 16.701 1.00 0.00 O +ATOM 1169 HW1 SOL 389 14.951 26.791 16.651 1.00 0.00 H +ATOM 1170 HW2 SOL 389 16.471 26.881 16.051 1.00 0.00 H +ATOM 1171 OW SOL 390 10.131 19.671 17.701 1.00 0.00 O +ATOM 1172 HW1 SOL 390 10.191 20.521 17.181 1.00 0.00 H +ATOM 1173 HW2 SOL 390 10.451 18.911 17.131 1.00 0.00 H +ATOM 1174 OW SOL 391 5.040 19.121 17.401 1.00 0.00 O +ATOM 1175 HW1 SOL 391 4.620 18.551 16.701 1.00 0.00 H +ATOM 1176 HW2 SOL 391 4.380 19.811 17.721 1.00 0.00 H +ATOM 1177 OW SOL 392 5.730 27.321 10.291 1.00 0.00 O +ATOM 1178 HW1 SOL 392 6.170 28.211 10.201 1.00 0.00 H +ATOM 1179 HW2 SOL 392 5.100 27.321 11.061 1.00 0.00 H +ATOM 1180 OW SOL 393 13.601 27.241 10.451 1.00 0.00 O +ATOM 1181 HW1 SOL 393 12.851 27.241 9.791 1.00 0.00 H +ATOM 1182 HW2 SOL 393 13.971 26.321 10.541 1.00 0.00 H +ATOM 1183 OW SOL 394 12.091 23.871 2.750 1.00 0.00 O +ATOM 1184 HW1 SOL 394 12.221 23.031 3.290 1.00 0.00 H +ATOM 1185 HW2 SOL 394 11.801 24.611 3.350 1.00 0.00 H +ATOM 1186 OW SOL 395 0.370 0.491 12.821 1.00 0.00 O +ATOM 1187 HW1 SOL 395 0.900 0.001 13.501 1.00 0.00 H +ATOM 1188 HW2 SOL 395 0.590 1.471 12.871 1.00 0.00 H +ATOM 1189 OW SOL 396 7.320 24.961 10.641 1.00 0.00 O +ATOM 1190 HW1 SOL 396 7.910 24.701 9.881 1.00 0.00 H +ATOM 1191 HW2 SOL 396 7.040 25.921 10.531 1.00 0.00 H +ATOM 1192 OW SOL 397 17.281 27.971 18.541 1.00 0.00 O +ATOM 1193 HW1 SOL 397 16.821 27.901 17.651 1.00 0.00 H +ATOM 1194 HW2 SOL 397 16.661 28.411 19.201 1.00 0.00 H +ATOM 1195 OW SOL 398 3.070 19.251 6.180 1.00 0.00 O +ATOM 1196 HW1 SOL 398 2.960 20.191 6.510 1.00 0.00 H +ATOM 1197 HW2 SOL 398 3.020 18.621 6.950 1.00 0.00 H +ATOM 1198 OW SOL 399 16.221 22.291 3.740 1.00 0.00 O +ATOM 1199 HW1 SOL 399 16.241 21.531 4.380 1.00 0.00 H +ATOM 1200 HW2 SOL 399 15.741 23.061 4.140 1.00 0.00 H +ATOM 1201 OW SOL 400 10.231 26.281 9.661 1.00 0.00 O +ATOM 1202 HW1 SOL 400 10.381 26.491 10.621 1.00 0.00 H +ATOM 1203 HW2 SOL 400 9.931 25.331 9.571 1.00 0.00 H +ATOM 1204 OW SOL 401 3.500 27.601 18.041 1.00 0.00 O +ATOM 1205 HW1 SOL 401 4.260 28.041 18.521 1.00 0.00 H +ATOM 1206 HW2 SOL 401 3.850 27.131 17.221 1.00 0.00 H +ATOM 1207 OW SOL 402 15.401 21.361 1.250 1.00 0.00 O +ATOM 1208 HW1 SOL 402 14.791 20.611 1.480 1.00 0.00 H +ATOM 1209 HW2 SOL 402 15.621 21.881 2.080 1.00 0.00 H +ATOM 1210 OW SOL 403 13.031 27.001 0.420 1.00 0.00 O +ATOM 1211 HW1 SOL 403 13.371 26.071 0.570 1.00 0.00 H +ATOM 1212 HW2 SOL 403 13.211 27.271 -0.530 1.00 0.00 H +ATOM 1213 OW SOL 404 3.190 26.721 9.491 1.00 0.00 O +ATOM 1214 HW1 SOL 404 4.120 27.081 9.541 1.00 0.00 H +ATOM 1215 HW2 SOL 404 3.130 25.871 10.011 1.00 0.00 H +ATOM 1216 OW SOL 405 3.390 23.711 10.061 1.00 0.00 O +ATOM 1217 HW1 SOL 405 2.870 22.881 9.891 1.00 0.00 H +ATOM 1218 HW2 SOL 405 4.160 23.761 9.421 1.00 0.00 H +ATOM 1219 OW SOL 406 11.381 22.421 16.781 1.00 0.00 O +ATOM 1220 HW1 SOL 406 10.931 23.051 17.421 1.00 0.00 H +ATOM 1221 HW2 SOL 406 12.311 22.731 16.611 1.00 0.00 H +ATOM 1222 OW SOL 407 11.601 20.691 14.771 1.00 0.00 O +ATOM 1223 HW1 SOL 407 11.601 21.331 15.541 1.00 0.00 H +ATOM 1224 HW2 SOL 407 11.881 21.171 13.941 1.00 0.00 H +ATOM 1225 OW SOL 408 10.021 26.581 12.381 1.00 0.00 O +ATOM 1226 HW1 SOL 408 10.431 26.261 13.241 1.00 0.00 H +ATOM 1227 HW2 SOL 408 9.061 26.311 12.351 1.00 0.00 H +ATOM 1228 OW SOL 409 0.400 24.061 11.141 1.00 0.00 O +ATOM 1229 HW1 SOL 409 1.250 23.731 10.731 1.00 0.00 H +ATOM 1230 HW2 SOL 409 0.530 24.211 12.121 1.00 0.00 H +ATOM 1231 OW SOL 410 1.890 23.821 17.221 1.00 0.00 O +ATOM 1232 HW1 SOL 410 2.480 23.421 16.521 1.00 0.00 H +ATOM 1233 HW2 SOL 410 1.310 24.531 16.811 1.00 0.00 H +ATOM 1234 OW SOL 411 13.691 28.121 16.601 1.00 0.00 O +ATOM 1235 HW1 SOL 411 14.081 29.011 16.801 1.00 0.00 H +ATOM 1236 HW2 SOL 411 13.791 27.921 15.631 1.00 0.00 H +ATOM 1237 OW SOL 412 8.150 24.341 3.250 1.00 0.00 O +ATOM 1238 HW1 SOL 412 8.220 23.451 2.790 1.00 0.00 H +ATOM 1239 HW2 SOL 412 7.210 24.681 3.170 1.00 0.00 H +ATOM 1240 OW SOL 413 16.571 24.661 12.061 1.00 0.00 O +ATOM 1241 HW1 SOL 413 16.191 23.971 12.681 1.00 0.00 H +ATOM 1242 HW2 SOL 413 17.391 24.301 11.621 1.00 0.00 H +ATOM 1243 OW SOL 414 6.710 23.261 12.691 1.00 0.00 O +ATOM 1244 HW1 SOL 414 6.370 22.371 12.391 1.00 0.00 H +ATOM 1245 HW2 SOL 414 6.970 23.801 11.891 1.00 0.00 H +ATOM 1246 OW SOL 415 4.730 23.621 1.910 1.00 0.00 O +ATOM 1247 HW1 SOL 415 5.340 24.421 1.950 1.00 0.00 H +ATOM 1248 HW2 SOL 415 3.780 23.931 1.980 1.00 0.00 H +ATOM 1249 OW SOL 416 1.590 29.991 14.661 1.00 0.00 O +ATOM 1250 HW1 SOL 416 1.810 29.381 15.421 1.00 0.00 H +ATOM 1251 HW2 SOL 416 1.690 29.501 13.801 1.00 0.00 H +ATOM 1252 OW SOL 417 13.471 29.211 12.341 1.00 0.00 O +ATOM 1253 HW1 SOL 417 13.711 28.581 11.601 1.00 0.00 H +ATOM 1254 HW2 SOL 417 12.571 29.611 12.161 1.00 0.00 H +ATOM 1255 OW SOL 418 13.021 27.171 3.090 1.00 0.00 O +ATOM 1256 HW1 SOL 418 12.161 26.861 3.510 1.00 0.00 H +ATOM 1257 HW2 SOL 418 12.981 27.031 2.100 1.00 0.00 H +ATOM 1258 OW SOL 419 0.830 31.201 10.221 1.00 0.00 O +ATOM 1259 HW1 SOL 419 0.780 31.191 11.221 1.00 0.00 H +ATOM 1260 HW2 SOL 419 0.000 30.791 9.841 1.00 0.00 H +ATOM 1261 OW SOL 420 9.030 19.481 1.330 1.00 0.00 O +ATOM 1262 HW1 SOL 420 9.540 19.491 0.470 1.00 0.00 H +ATOM 1263 HW2 SOL 420 9.590 19.061 2.040 1.00 0.00 H +ATOM 1264 OW SOL 421 17.261 19.971 5.230 1.00 0.00 O +ATOM 1265 HW1 SOL 421 17.991 19.801 4.560 1.00 0.00 H +ATOM 1266 HW2 SOL 421 16.951 19.101 5.610 1.00 0.00 H +ATOM 1267 OW SOL 422 12.801 27.891 6.720 1.00 0.00 O +ATOM 1268 HW1 SOL 422 13.401 27.081 6.740 1.00 0.00 H +ATOM 1269 HW2 SOL 422 13.201 28.581 6.120 1.00 0.00 H +ATOM 1270 OW SOL 423 18.411 20.371 9.631 1.00 0.00 O +ATOM 1271 HW1 SOL 423 18.801 19.521 9.271 1.00 0.00 H +ATOM 1272 HW2 SOL 423 17.431 20.391 9.441 1.00 0.00 H +ATOM 1273 OW SOL 424 2.630 21.881 7.200 1.00 0.00 O +ATOM 1274 HW1 SOL 424 1.840 22.391 6.860 1.00 0.00 H +ATOM 1275 HW2 SOL 424 2.540 21.731 8.180 1.00 0.00 H +ATOM 1276 OW SOL 425 8.220 28.641 13.721 1.00 0.00 O +ATOM 1277 HW1 SOL 425 8.620 28.631 12.801 1.00 0.00 H +ATOM 1278 HW2 SOL 425 8.320 29.561 14.121 1.00 0.00 H +ATOM 1279 OW SOL 426 9.160 27.721 2.910 1.00 0.00 O +ATOM 1280 HW1 SOL 426 9.790 28.101 2.230 1.00 0.00 H +ATOM 1281 HW2 SOL 426 9.560 26.891 3.300 1.00 0.00 H +ATOM 1282 OW SOL 427 3.720 0.271 14.901 1.00 0.00 O +ATOM 1283 HW1 SOL 427 3.590 1.201 14.561 1.00 0.00 H +ATOM 1284 HW2 SOL 427 2.880 -0.249 14.771 1.00 0.00 H +ATOM 1285 OW SOL 428 16.141 0.311 12.891 1.00 0.00 O +ATOM 1286 HW1 SOL 428 16.741 0.341 13.691 1.00 0.00 H +ATOM 1287 HW2 SOL 428 15.391 0.951 13.021 1.00 0.00 H +ATOM 1288 OW SOL 429 10.391 29.601 6.960 1.00 0.00 O +ATOM 1289 HW1 SOL 429 9.691 29.131 7.500 1.00 0.00 H +ATOM 1290 HW2 SOL 429 10.981 28.921 6.530 1.00 0.00 H +ATOM 1291 OW SOL 430 10.141 20.981 9.711 1.00 0.00 O +ATOM 1292 HW1 SOL 430 10.061 20.621 8.781 1.00 0.00 H +ATOM 1293 HW2 SOL 430 10.121 20.221 10.361 1.00 0.00 H +ATOM 1294 OW SOL 431 17.091 22.471 13.811 1.00 0.00 O +ATOM 1295 HW1 SOL 431 17.821 23.161 13.851 1.00 0.00 H +ATOM 1296 HW2 SOL 431 17.371 21.721 13.221 1.00 0.00 H +ATOM 1297 OW SOL 432 6.720 20.651 14.891 1.00 0.00 O +ATOM 1298 HW1 SOL 432 7.620 20.491 14.491 1.00 0.00 H +ATOM 1299 HW2 SOL 432 6.800 20.701 15.881 1.00 0.00 H +ATOM 1300 OW SOL 433 14.401 27.181 13.981 1.00 0.00 O +ATOM 1301 HW1 SOL 433 13.831 27.701 13.351 1.00 0.00 H +ATOM 1302 HW2 SOL 433 15.361 27.301 13.741 1.00 0.00 H +ATOM 1303 OW SOL 434 6.130 27.041 14.311 1.00 0.00 O +ATOM 1304 HW1 SOL 434 6.690 27.851 14.141 1.00 0.00 H +ATOM 1305 HW2 SOL 434 6.720 26.241 14.341 1.00 0.00 H +ATOM 1306 OW SOL 435 7.160 24.271 17.081 1.00 0.00 O +ATOM 1307 HW1 SOL 435 7.350 24.921 17.821 1.00 0.00 H +ATOM 1308 HW2 SOL 435 7.760 23.471 17.171 1.00 0.00 H +ATOM 1309 OW SOL 436 14.501 30.821 16.331 1.00 0.00 O +ATOM 1310 HW1 SOL 436 14.411 30.721 17.321 1.00 0.00 H +ATOM 1311 HW2 SOL 436 15.461 30.751 16.071 1.00 0.00 H +ATOM 1312 OW SOL 437 16.741 27.451 12.541 1.00 0.00 O +ATOM 1313 HW1 SOL 437 16.471 26.561 12.171 1.00 0.00 H +ATOM 1314 HW2 SOL 437 16.751 28.131 11.811 1.00 0.00 H +ATOM 1315 OW SOL 438 12.251 21.871 4.490 1.00 0.00 O +ATOM 1316 HW1 SOL 438 12.901 21.131 4.380 1.00 0.00 H +ATOM 1317 HW2 SOL 438 12.451 22.371 5.330 1.00 0.00 H +ATOM 1318 OW SOL 439 5.940 26.071 6.520 1.00 0.00 O +ATOM 1319 HW1 SOL 439 6.440 26.921 6.330 1.00 0.00 H +ATOM 1320 HW2 SOL 439 5.060 26.091 6.040 1.00 0.00 H +ATOM 1321 OW SOL 440 17.771 22.041 16.421 1.00 0.00 O +ATOM 1322 HW1 SOL 440 17.601 22.351 15.481 1.00 0.00 H +ATOM 1323 HW2 SOL 440 16.931 21.671 16.801 1.00 0.00 H +ATOM 1324 OW SOL 441 17.301 27.961 15.171 1.00 0.00 O +ATOM 1325 HW1 SOL 441 17.681 28.871 15.321 1.00 0.00 H +ATOM 1326 HW2 SOL 441 17.221 27.791 14.181 1.00 0.00 H +ATOM 1327 OW SOL 442 8.590 28.181 8.610 1.00 0.00 O +ATOM 1328 HW1 SOL 442 9.130 27.491 9.090 1.00 0.00 H +ATOM 1329 HW2 SOL 442 8.270 28.871 9.270 1.00 0.00 H +ATOM 1330 OW SOL 443 10.831 28.461 0.870 1.00 0.00 O +ATOM 1331 HW1 SOL 443 10.601 28.991 0.050 1.00 0.00 H +ATOM 1332 HW2 SOL 443 11.641 27.901 0.680 1.00 0.00 H +ATOM 1333 OW SOL 444 0.790 31.021 6.530 1.00 0.00 O +ATOM 1334 HW1 SOL 444 0.780 30.551 7.410 1.00 0.00 H +ATOM 1335 HW2 SOL 444 1.610 30.741 6.020 1.00 0.00 H +ATOM 1336 OW SOL 445 18.241 20.541 12.271 1.00 0.00 O +ATOM 1337 HW1 SOL 445 18.201 19.641 12.711 1.00 0.00 H +ATOM 1338 HW2 SOL 445 18.271 20.431 11.281 1.00 0.00 H +ATOM 1339 OW SOL 446 4.280 22.861 5.200 1.00 0.00 O +ATOM 1340 HW1 SOL 446 4.580 22.141 4.580 1.00 0.00 H +ATOM 1341 HW2 SOL 446 3.890 22.461 6.030 1.00 0.00 H +ATOM 1342 OW SOL 447 3.170 24.091 12.801 1.00 0.00 O +ATOM 1343 HW1 SOL 447 3.550 23.501 13.521 1.00 0.00 H +ATOM 1344 HW2 SOL 447 3.570 23.831 11.921 1.00 0.00 H +ATOM 1345 OW SOL 448 14.241 20.761 11.121 1.00 0.00 O +ATOM 1346 HW1 SOL 448 14.761 20.111 11.671 1.00 0.00 H +ATOM 1347 HW2 SOL 448 13.751 21.391 11.731 1.00 0.00 H +ATOM 1348 OW SOL 449 10.011 18.961 11.541 1.00 0.00 O +ATOM 1349 HW1 SOL 449 9.381 18.241 11.231 1.00 0.00 H +ATOM 1350 HW2 SOL 449 10.941 18.601 11.541 1.00 0.00 H +ATOM 1351 OW SOL 450 7.700 0.691 3.010 1.00 0.00 O +ATOM 1352 HW1 SOL 450 7.240 -0.179 3.180 1.00 0.00 H +ATOM 1353 HW2 SOL 450 8.610 0.661 3.420 1.00 0.00 H +ATOM 1354 OW SOL 451 13.521 19.141 1.680 1.00 0.00 O +ATOM 1355 HW1 SOL 451 13.871 18.731 0.840 1.00 0.00 H +ATOM 1356 HW2 SOL 451 12.621 18.761 1.880 1.00 0.00 H +ATOM 1357 OW SOL 452 13.001 23.151 6.910 1.00 0.00 O +ATOM 1358 HW1 SOL 452 12.411 23.951 6.950 1.00 0.00 H +ATOM 1359 HW2 SOL 452 13.151 22.801 7.840 1.00 0.00 H +ATOM 1360 OW SOL 453 15.931 20.831 8.820 1.00 0.00 O +ATOM 1361 HW1 SOL 453 15.091 20.821 9.360 1.00 0.00 H +ATOM 1362 HW2 SOL 453 15.951 21.661 8.260 1.00 0.00 H +ATOM 1363 OW SOL 454 0.390 29.391 3.000 1.00 0.00 O +ATOM 1364 HW1 SOL 454 1.380 29.281 2.910 1.00 0.00 H +ATOM 1365 HW2 SOL 454 -0.010 28.531 3.320 1.00 0.00 H +ATOM 1366 OW SOL 455 17.431 24.801 27.181 1.00 0.00 O +ATOM 1367 HW1 SOL 455 17.761 25.741 27.181 1.00 0.00 H +ATOM 1368 HW2 SOL 455 17.941 24.261 27.841 1.00 0.00 H +ATOM 1369 OW SOL 456 11.351 25.651 25.791 1.00 0.00 O +ATOM 1370 HW1 SOL 456 11.921 26.431 25.541 1.00 0.00 H +ATOM 1371 HW2 SOL 456 10.751 25.911 26.551 1.00 0.00 H +ATOM 1372 OW SOL 457 17.551 24.691 20.931 1.00 0.00 O +ATOM 1373 HW1 SOL 457 17.431 24.561 19.941 1.00 0.00 H +ATOM 1374 HW2 SOL 457 17.251 23.881 21.421 1.00 0.00 H +ATOM 1375 OW SOL 458 7.680 30.061 28.851 1.00 0.00 O +ATOM 1376 HW1 SOL 458 6.900 30.231 29.451 1.00 0.00 H +ATOM 1377 HW2 SOL 458 8.020 30.931 28.491 1.00 0.00 H +ATOM 1378 OW SOL 459 6.850 28.741 25.271 1.00 0.00 O +ATOM 1379 HW1 SOL 459 7.540 28.581 25.971 1.00 0.00 H +ATOM 1380 HW2 SOL 459 6.120 29.311 25.651 1.00 0.00 H +ATOM 1381 OW SOL 460 2.400 29.531 27.481 1.00 0.00 O +ATOM 1382 HW1 SOL 460 2.540 28.691 28.001 1.00 0.00 H +ATOM 1383 HW2 SOL 460 1.850 30.171 28.031 1.00 0.00 H +ATOM 1384 OW SOL 461 6.060 28.261 19.851 1.00 0.00 O +ATOM 1385 HW1 SOL 461 6.130 29.101 19.311 1.00 0.00 H +ATOM 1386 HW2 SOL 461 6.520 28.391 20.731 1.00 0.00 H +ATOM 1387 OW SOL 462 1.220 25.051 24.251 1.00 0.00 O +ATOM 1388 HW1 SOL 462 0.770 24.171 24.421 1.00 0.00 H +ATOM 1389 HW2 SOL 462 1.210 25.591 25.091 1.00 0.00 H +ATOM 1390 OW SOL 463 16.891 27.841 24.741 1.00 0.00 O +ATOM 1391 HW1 SOL 463 17.841 27.551 24.821 1.00 0.00 H +ATOM 1392 HW2 SOL 463 16.811 28.491 23.991 1.00 0.00 H +ATOM 1393 OW SOL 464 16.411 29.701 22.941 1.00 0.00 O +ATOM 1394 HW1 SOL 464 17.271 29.721 22.421 1.00 0.00 H +ATOM 1395 HW2 SOL 464 16.551 30.171 23.821 1.00 0.00 H +ATOM 1396 OW SOL 465 6.130 1.041 25.881 1.00 0.00 O +ATOM 1397 HW1 SOL 465 5.640 0.171 25.971 1.00 0.00 H +ATOM 1398 HW2 SOL 465 5.900 1.471 25.011 1.00 0.00 H +ATOM 1399 OW SOL 466 8.090 18.661 23.641 1.00 0.00 O +ATOM 1400 HW1 SOL 466 8.490 19.571 23.551 1.00 0.00 H +ATOM 1401 HW2 SOL 466 7.090 18.741 23.701 1.00 0.00 H +ATOM 1402 OW SOL 467 15.251 28.611 20.521 1.00 0.00 O +ATOM 1403 HW1 SOL 467 14.621 27.851 20.651 1.00 0.00 H +ATOM 1404 HW2 SOL 467 15.731 28.791 21.381 1.00 0.00 H +ATOM 1405 OW SOL 468 5.980 25.911 21.321 1.00 0.00 O +ATOM 1406 HW1 SOL 468 6.220 26.601 20.641 1.00 0.00 H +ATOM 1407 HW2 SOL 468 5.200 26.241 21.861 1.00 0.00 H +ATOM 1408 OW SOL 469 12.811 22.071 28.061 1.00 0.00 O +ATOM 1409 HW1 SOL 469 11.951 21.571 27.931 1.00 0.00 H +ATOM 1410 HW2 SOL 469 13.431 21.531 28.621 1.00 0.00 H +ATOM 1411 OW SOL 470 10.411 25.631 22.911 1.00 0.00 O +ATOM 1412 HW1 SOL 470 10.671 25.591 23.871 1.00 0.00 H +ATOM 1413 HW2 SOL 470 9.561 25.121 22.771 1.00 0.00 H +ATOM 1414 OW SOL 471 8.650 22.101 20.571 1.00 0.00 O +ATOM 1415 HW1 SOL 471 9.240 22.731 20.081 1.00 0.00 H +ATOM 1416 HW2 SOL 471 8.840 21.161 20.281 1.00 0.00 H +ATOM 1417 OW SOL 472 13.621 30.061 24.071 1.00 0.00 O +ATOM 1418 HW1 SOL 472 14.451 29.771 23.591 1.00 0.00 H +ATOM 1419 HW2 SOL 472 13.131 30.731 23.511 1.00 0.00 H +ATOM 1420 OW SOL 473 5.500 20.581 27.471 1.00 0.00 O +ATOM 1421 HW1 SOL 473 5.450 20.531 28.471 1.00 0.00 H +ATOM 1422 HW2 SOL 473 5.520 21.541 27.181 1.00 0.00 H +ATOM 1423 OW SOL 474 17.951 29.281 27.351 1.00 0.00 O +ATOM 1424 HW1 SOL 474 17.331 29.131 26.591 1.00 0.00 H +ATOM 1425 HW2 SOL 474 17.431 29.391 28.201 1.00 0.00 H +ATOM 1426 OW SOL 475 3.210 28.051 21.041 1.00 0.00 O +ATOM 1427 HW1 SOL 475 4.030 28.441 20.621 1.00 0.00 H +ATOM 1428 HW2 SOL 475 2.940 27.231 20.551 1.00 0.00 H +ATOM 1429 OW SOL 476 14.581 25.971 25.901 1.00 0.00 O +ATOM 1430 HW1 SOL 476 14.531 25.321 26.651 1.00 0.00 H +ATOM 1431 HW2 SOL 476 15.381 26.561 26.031 1.00 0.00 H +ATOM 1432 OW SOL 477 14.001 19.691 22.881 1.00 0.00 O +ATOM 1433 HW1 SOL 477 13.761 19.321 21.981 1.00 0.00 H +ATOM 1434 HW2 SOL 477 14.991 19.851 22.921 1.00 0.00 H +ATOM 1435 OW SOL 478 3.820 25.621 23.421 1.00 0.00 O +ATOM 1436 HW1 SOL 478 4.270 24.721 23.391 1.00 0.00 H +ATOM 1437 HW2 SOL 478 2.880 25.511 23.751 1.00 0.00 H +ATOM 1438 OW SOL 479 6.140 19.841 19.791 1.00 0.00 O +ATOM 1439 HW1 SOL 479 7.120 19.621 19.861 1.00 0.00 H +ATOM 1440 HW2 SOL 479 5.830 19.671 18.861 1.00 0.00 H +ATOM 1441 OW SOL 480 9.220 23.651 27.611 1.00 0.00 O +ATOM 1442 HW1 SOL 480 8.970 23.561 26.651 1.00 0.00 H +ATOM 1443 HW2 SOL 480 9.700 22.831 27.921 1.00 0.00 H +ATOM 1444 OW SOL 481 5.390 19.261 23.741 1.00 0.00 O +ATOM 1445 HW1 SOL 481 4.580 19.271 24.321 1.00 0.00 H +ATOM 1446 HW2 SOL 481 5.420 20.091 23.191 1.00 0.00 H +ATOM 1447 OW SOL 482 2.970 18.971 20.331 1.00 0.00 O +ATOM 1448 HW1 SOL 482 3.460 19.811 20.121 1.00 0.00 H +ATOM 1449 HW2 SOL 482 3.590 18.321 20.781 1.00 0.00 H +ATOM 1450 OW SOL 483 9.351 20.981 23.421 1.00 0.00 O +ATOM 1451 HW1 SOL 483 8.871 21.391 22.641 1.00 0.00 H +ATOM 1452 HW2 SOL 483 10.341 20.961 23.231 1.00 0.00 H +ATOM 1453 OW SOL 484 4.590 30.141 26.031 1.00 0.00 O +ATOM 1454 HW1 SOL 484 3.880 29.871 26.681 1.00 0.00 H +ATOM 1455 HW2 SOL 484 4.330 29.861 25.101 1.00 0.00 H +ATOM 1456 OW SOL 485 10.321 24.111 18.781 1.00 0.00 O +ATOM 1457 HW1 SOL 485 9.911 24.931 18.391 1.00 0.00 H +ATOM 1458 HW2 SOL 485 10.961 24.371 19.511 1.00 0.00 H +ATOM 1459 OW SOL 486 8.660 23.161 25.041 1.00 0.00 O +ATOM 1460 HW1 SOL 486 8.340 23.881 24.421 1.00 0.00 H +ATOM 1461 HW2 SOL 486 8.900 22.351 24.511 1.00 0.00 H +ATOM 1462 OW SOL 487 10.171 19.011 26.151 1.00 0.00 O +ATOM 1463 HW1 SOL 487 9.451 19.061 25.461 1.00 0.00 H +ATOM 1464 HW2 SOL 487 9.931 18.321 26.841 1.00 0.00 H +ATOM 1465 OW SOL 488 14.291 30.351 27.291 1.00 0.00 O +ATOM 1466 HW1 SOL 488 13.741 29.511 27.221 1.00 0.00 H +ATOM 1467 HW2 SOL 488 14.551 30.641 26.371 1.00 0.00 H +ATOM 1468 OW SOL 489 14.661 24.521 28.541 1.00 0.00 O +ATOM 1469 HW1 SOL 489 14.361 23.571 28.611 1.00 0.00 H +ATOM 1470 HW2 SOL 489 15.391 24.681 29.201 1.00 0.00 H +ATOM 1471 OW SOL 490 18.571 26.951 22.391 1.00 0.00 O +ATOM 1472 HW1 SOL 490 18.991 26.311 23.031 1.00 0.00 H +ATOM 1473 HW2 SOL 490 18.191 26.441 21.611 1.00 0.00 H +ATOM 1474 OW SOL 491 13.901 24.371 19.401 1.00 0.00 O +ATOM 1475 HW1 SOL 491 13.361 24.161 20.211 1.00 0.00 H +ATOM 1476 HW2 SOL 491 14.811 23.961 19.491 1.00 0.00 H +ATOM 1477 OW SOL 492 5.270 21.181 21.901 1.00 0.00 O +ATOM 1478 HW1 SOL 492 5.540 20.591 21.151 1.00 0.00 H +ATOM 1479 HW2 SOL 492 5.270 22.131 21.591 1.00 0.00 H +ATOM 1480 OW SOL 493 16.381 29.611 29.411 1.00 0.00 O +ATOM 1481 HW1 SOL 493 16.431 30.421 30.001 1.00 0.00 H +ATOM 1482 HW2 SOL 493 15.521 29.631 28.901 1.00 0.00 H +ATOM 1483 OW SOL 494 7.050 29.121 22.301 1.00 0.00 O +ATOM 1484 HW1 SOL 494 6.910 29.191 23.291 1.00 0.00 H +ATOM 1485 HW2 SOL 494 7.890 28.611 22.121 1.00 0.00 H +ATOM 1486 OW SOL 495 4.100 26.751 31.131 1.00 0.00 O +ATOM 1487 HW1 SOL 495 4.960 26.871 31.631 1.00 0.00 H +ATOM 1488 HW2 SOL 495 3.680 25.881 31.401 1.00 0.00 H +ATOM 1489 OW SOL 496 3.670 29.621 23.631 1.00 0.00 O +ATOM 1490 HW1 SOL 496 3.600 30.451 23.071 1.00 0.00 H +ATOM 1491 HW2 SOL 496 3.710 28.821 23.031 1.00 0.00 H +ATOM 1492 OW SOL 497 5.660 23.991 27.271 1.00 0.00 O +ATOM 1493 HW1 SOL 497 5.780 24.651 26.531 1.00 0.00 H +ATOM 1494 HW2 SOL 497 6.120 24.331 28.101 1.00 0.00 H +ATOM 1495 OW SOL 498 15.821 25.011 23.341 1.00 0.00 O +ATOM 1496 HW1 SOL 498 15.511 25.621 24.071 1.00 0.00 H +ATOM 1497 HW2 SOL 498 16.321 25.531 22.651 1.00 0.00 H +ATOM 1498 OW SOL 499 5.730 27.321 28.911 1.00 0.00 O +ATOM 1499 HW1 SOL 499 6.170 28.211 28.821 1.00 0.00 H +ATOM 1500 HW2 SOL 499 5.100 27.321 29.681 1.00 0.00 H +ATOM 1501 OW SOL 500 13.601 27.241 29.071 1.00 0.00 O +ATOM 1502 HW1 SOL 500 12.851 27.241 28.411 1.00 0.00 H +ATOM 1503 HW2 SOL 500 13.971 26.321 29.161 1.00 0.00 H +ATOM 1504 OW SOL 501 12.091 23.871 21.371 1.00 0.00 O +ATOM 1505 HW1 SOL 501 12.221 23.031 21.911 1.00 0.00 H +ATOM 1506 HW2 SOL 501 11.801 24.611 21.971 1.00 0.00 H +ATOM 1507 OW SOL 502 0.370 0.491 0.211 1.00 0.00 O +ATOM 1508 HW1 SOL 502 0.900 0.001 0.891 1.00 0.00 H +ATOM 1509 HW2 SOL 502 0.590 1.471 0.261 1.00 0.00 H +ATOM 1510 OW SOL 503 7.320 24.961 29.261 1.00 0.00 O +ATOM 1511 HW1 SOL 503 7.910 24.701 28.501 1.00 0.00 H +ATOM 1512 HW2 SOL 503 7.040 25.921 29.151 1.00 0.00 H +ATOM 1513 OW SOL 504 3.070 19.251 24.801 1.00 0.00 O +ATOM 1514 HW1 SOL 504 2.960 20.191 25.131 1.00 0.00 H +ATOM 1515 HW2 SOL 504 3.020 18.621 25.571 1.00 0.00 H +ATOM 1516 OW SOL 505 16.221 22.291 22.361 1.00 0.00 O +ATOM 1517 HW1 SOL 505 16.241 21.531 23.001 1.00 0.00 H +ATOM 1518 HW2 SOL 505 15.741 23.061 22.761 1.00 0.00 H +ATOM 1519 OW SOL 506 10.231 26.281 28.281 1.00 0.00 O +ATOM 1520 HW1 SOL 506 10.381 26.491 29.241 1.00 0.00 H +ATOM 1521 HW2 SOL 506 9.931 25.331 28.191 1.00 0.00 H +ATOM 1522 OW SOL 507 15.401 21.361 19.871 1.00 0.00 O +ATOM 1523 HW1 SOL 507 14.791 20.611 20.101 1.00 0.00 H +ATOM 1524 HW2 SOL 507 15.621 21.881 20.701 1.00 0.00 H +ATOM 1525 OW SOL 508 13.031 27.001 19.041 1.00 0.00 O +ATOM 1526 HW1 SOL 508 13.371 26.071 19.191 1.00 0.00 H +ATOM 1527 HW2 SOL 508 13.211 27.271 18.091 1.00 0.00 H +ATOM 1528 OW SOL 509 3.190 26.721 28.111 1.00 0.00 O +ATOM 1529 HW1 SOL 509 4.120 27.081 28.161 1.00 0.00 H +ATOM 1530 HW2 SOL 509 3.130 25.871 28.631 1.00 0.00 H +ATOM 1531 OW SOL 510 3.390 23.711 28.681 1.00 0.00 O +ATOM 1532 HW1 SOL 510 2.870 22.881 28.511 1.00 0.00 H +ATOM 1533 HW2 SOL 510 4.160 23.761 28.041 1.00 0.00 H +ATOM 1534 OW SOL 511 10.021 26.581 31.001 1.00 0.00 O +ATOM 1535 HW1 SOL 511 10.431 26.261 31.861 1.00 0.00 H +ATOM 1536 HW2 SOL 511 9.061 26.311 30.971 1.00 0.00 H +ATOM 1537 OW SOL 512 0.400 24.061 29.761 1.00 0.00 O +ATOM 1538 HW1 SOL 512 1.250 23.731 29.351 1.00 0.00 H +ATOM 1539 HW2 SOL 512 0.530 24.211 30.741 1.00 0.00 H +ATOM 1540 OW SOL 513 8.150 24.341 21.871 1.00 0.00 O +ATOM 1541 HW1 SOL 513 8.220 23.451 21.411 1.00 0.00 H +ATOM 1542 HW2 SOL 513 7.210 24.681 21.791 1.00 0.00 H +ATOM 1543 OW SOL 514 16.571 24.661 30.681 1.00 0.00 O +ATOM 1544 HW1 SOL 514 16.191 23.971 31.301 1.00 0.00 H +ATOM 1545 HW2 SOL 514 17.391 24.301 30.241 1.00 0.00 H +ATOM 1546 OW SOL 515 6.710 23.261 0.081 1.00 0.00 O +ATOM 1547 HW1 SOL 515 6.370 22.371 -0.219 1.00 0.00 H +ATOM 1548 HW2 SOL 515 6.970 23.801 -0.719 1.00 0.00 H +ATOM 1549 OW SOL 516 4.730 23.621 20.531 1.00 0.00 O +ATOM 1550 HW1 SOL 516 5.340 24.421 20.571 1.00 0.00 H +ATOM 1551 HW2 SOL 516 3.780 23.931 20.601 1.00 0.00 H +ATOM 1552 OW SOL 517 13.471 29.211 30.961 1.00 0.00 O +ATOM 1553 HW1 SOL 517 13.711 28.581 30.221 1.00 0.00 H +ATOM 1554 HW2 SOL 517 12.571 29.611 30.781 1.00 0.00 H +ATOM 1555 OW SOL 518 13.021 27.171 21.711 1.00 0.00 O +ATOM 1556 HW1 SOL 518 12.161 26.861 22.131 1.00 0.00 H +ATOM 1557 HW2 SOL 518 12.981 27.031 20.721 1.00 0.00 H +ATOM 1558 OW SOL 519 0.830 31.201 28.841 1.00 0.00 O +ATOM 1559 HW1 SOL 519 0.780 31.191 29.841 1.00 0.00 H +ATOM 1560 HW2 SOL 519 0.000 30.791 28.461 1.00 0.00 H +ATOM 1561 OW SOL 520 9.030 19.481 19.951 1.00 0.00 O +ATOM 1562 HW1 SOL 520 9.540 19.491 19.091 1.00 0.00 H +ATOM 1563 HW2 SOL 520 9.590 19.061 20.661 1.00 0.00 H +ATOM 1564 OW SOL 521 17.261 19.971 23.851 1.00 0.00 O +ATOM 1565 HW1 SOL 521 17.991 19.801 23.181 1.00 0.00 H +ATOM 1566 HW2 SOL 521 16.951 19.101 24.231 1.00 0.00 H +ATOM 1567 OW SOL 522 12.801 27.891 25.341 1.00 0.00 O +ATOM 1568 HW1 SOL 522 13.401 27.081 25.361 1.00 0.00 H +ATOM 1569 HW2 SOL 522 13.201 28.581 24.741 1.00 0.00 H +ATOM 1570 OW SOL 523 18.411 20.371 28.251 1.00 0.00 O +ATOM 1571 HW1 SOL 523 18.801 19.521 27.891 1.00 0.00 H +ATOM 1572 HW2 SOL 523 17.431 20.391 28.061 1.00 0.00 H +ATOM 1573 OW SOL 524 2.630 21.881 25.821 1.00 0.00 O +ATOM 1574 HW1 SOL 524 1.840 22.391 25.481 1.00 0.00 H +ATOM 1575 HW2 SOL 524 2.540 21.731 26.801 1.00 0.00 H +ATOM 1576 OW SOL 525 8.220 28.641 1.111 1.00 0.00 O +ATOM 1577 HW1 SOL 525 8.620 28.631 0.191 1.00 0.00 H +ATOM 1578 HW2 SOL 525 8.320 29.561 1.511 1.00 0.00 H +ATOM 1579 OW SOL 526 9.160 27.721 21.531 1.00 0.00 O +ATOM 1580 HW1 SOL 526 9.790 28.101 20.851 1.00 0.00 H +ATOM 1581 HW2 SOL 526 9.560 26.891 21.921 1.00 0.00 H +ATOM 1582 OW SOL 527 16.141 0.311 0.281 1.00 0.00 O +ATOM 1583 HW1 SOL 527 16.741 0.341 1.081 1.00 0.00 H +ATOM 1584 HW2 SOL 527 15.391 0.951 0.411 1.00 0.00 H +ATOM 1585 OW SOL 528 10.391 29.601 25.581 1.00 0.00 O +ATOM 1586 HW1 SOL 528 9.691 29.131 26.121 1.00 0.00 H +ATOM 1587 HW2 SOL 528 10.981 28.921 25.151 1.00 0.00 H +ATOM 1588 OW SOL 529 10.141 20.981 28.331 1.00 0.00 O +ATOM 1589 HW1 SOL 529 10.061 20.621 27.401 1.00 0.00 H +ATOM 1590 HW2 SOL 529 10.121 20.221 28.981 1.00 0.00 H +ATOM 1591 OW SOL 530 17.091 22.471 1.201 1.00 0.00 O +ATOM 1592 HW1 SOL 530 17.821 23.161 1.241 1.00 0.00 H +ATOM 1593 HW2 SOL 530 17.371 21.721 0.611 1.00 0.00 H +ATOM 1594 OW SOL 531 0.750 22.071 18.951 1.00 0.00 O +ATOM 1595 HW1 SOL 531 -0.170 21.791 18.661 1.00 0.00 H +ATOM 1596 HW2 SOL 531 1.060 22.841 18.391 1.00 0.00 H +ATOM 1597 OW SOL 532 16.741 27.451 31.161 1.00 0.00 O +ATOM 1598 HW1 SOL 532 16.471 26.561 30.791 1.00 0.00 H +ATOM 1599 HW2 SOL 532 16.751 28.131 30.431 1.00 0.00 H +ATOM 1600 OW SOL 533 12.251 21.871 23.111 1.00 0.00 O +ATOM 1601 HW1 SOL 533 12.901 21.131 23.001 1.00 0.00 H +ATOM 1602 HW2 SOL 533 12.451 22.371 23.951 1.00 0.00 H +ATOM 1603 OW SOL 534 5.940 26.071 25.141 1.00 0.00 O +ATOM 1604 HW1 SOL 534 6.440 26.921 24.951 1.00 0.00 H +ATOM 1605 HW2 SOL 534 5.060 26.091 24.661 1.00 0.00 H +ATOM 1606 OW SOL 535 8.590 28.181 27.231 1.00 0.00 O +ATOM 1607 HW1 SOL 535 9.130 27.491 27.711 1.00 0.00 H +ATOM 1608 HW2 SOL 535 8.270 28.871 27.891 1.00 0.00 H +ATOM 1609 OW SOL 536 10.831 28.461 19.491 1.00 0.00 O +ATOM 1610 HW1 SOL 536 10.601 28.991 18.671 1.00 0.00 H +ATOM 1611 HW2 SOL 536 11.641 27.901 19.301 1.00 0.00 H +ATOM 1612 OW SOL 537 0.790 31.021 25.151 1.00 0.00 O +ATOM 1613 HW1 SOL 537 0.780 30.551 26.031 1.00 0.00 H +ATOM 1614 HW2 SOL 537 1.610 30.741 24.641 1.00 0.00 H +ATOM 1615 OW SOL 538 18.241 20.541 30.891 1.00 0.00 O +ATOM 1616 HW1 SOL 538 18.201 19.641 31.331 1.00 0.00 H +ATOM 1617 HW2 SOL 538 18.271 20.431 29.901 1.00 0.00 H +ATOM 1618 OW SOL 539 4.280 22.861 23.821 1.00 0.00 O +ATOM 1619 HW1 SOL 539 4.580 22.141 23.201 1.00 0.00 H +ATOM 1620 HW2 SOL 539 3.890 22.461 24.651 1.00 0.00 H +ATOM 1621 OW SOL 540 14.241 20.761 29.741 1.00 0.00 O +ATOM 1622 HW1 SOL 540 14.761 20.111 30.291 1.00 0.00 H +ATOM 1623 HW2 SOL 540 13.751 21.391 30.351 1.00 0.00 H +ATOM 1624 OW SOL 541 10.011 18.961 30.161 1.00 0.00 O +ATOM 1625 HW1 SOL 541 9.381 18.241 29.851 1.00 0.00 H +ATOM 1626 HW2 SOL 541 10.941 18.601 30.161 1.00 0.00 H +ATOM 1627 OW SOL 542 7.700 0.691 21.631 1.00 0.00 O +ATOM 1628 HW1 SOL 542 7.240 -0.179 21.801 1.00 0.00 H +ATOM 1629 HW2 SOL 542 8.610 0.661 22.041 1.00 0.00 H +ATOM 1630 OW SOL 543 13.521 19.141 20.301 1.00 0.00 O +ATOM 1631 HW1 SOL 543 13.871 18.731 19.461 1.00 0.00 H +ATOM 1632 HW2 SOL 543 12.621 18.761 20.501 1.00 0.00 H +ATOM 1633 OW SOL 544 13.001 23.151 25.531 1.00 0.00 O +ATOM 1634 HW1 SOL 544 12.411 23.951 25.571 1.00 0.00 H +ATOM 1635 HW2 SOL 544 13.151 22.801 26.461 1.00 0.00 H +ATOM 1636 OW SOL 545 15.931 20.831 27.441 1.00 0.00 O +ATOM 1637 HW1 SOL 545 15.091 20.821 27.981 1.00 0.00 H +ATOM 1638 HW2 SOL 545 15.951 21.661 26.881 1.00 0.00 H +ATOM 1639 OW SOL 546 0.390 29.391 21.621 1.00 0.00 O +ATOM 1640 HW1 SOL 546 1.380 29.281 21.531 1.00 0.00 H +ATOM 1641 HW2 SOL 546 -0.010 28.531 21.941 1.00 0.00 H +ATOM 1642 OW SOL 547 20.921 6.280 1.130 1.00 0.00 O +ATOM 1643 HW1 SOL 547 19.991 6.260 1.500 1.00 0.00 H +ATOM 1644 HW2 SOL 547 20.931 5.890 0.210 1.00 0.00 H +ATOM 1645 OW SOL 548 20.871 2.750 9.961 1.00 0.00 O +ATOM 1646 HW1 SOL 548 21.221 2.580 10.881 1.00 0.00 H +ATOM 1647 HW2 SOL 548 19.991 2.300 9.841 1.00 0.00 H +ATOM 1648 OW SOL 549 18.811 3.680 6.470 1.00 0.00 O +ATOM 1649 HW1 SOL 549 17.991 4.110 6.860 1.00 0.00 H +ATOM 1650 HW2 SOL 549 18.531 2.950 5.840 1.00 0.00 H +ATOM 1651 OW SOL 550 24.311 12.751 11.651 1.00 0.00 O +ATOM 1652 HW1 SOL 550 23.381 12.681 11.281 1.00 0.00 H +ATOM 1653 HW2 SOL 550 24.421 13.641 12.091 1.00 0.00 H +ATOM 1654 OW SOL 551 29.971 7.030 7.170 1.00 0.00 O +ATOM 1655 HW1 SOL 551 30.541 7.810 6.920 1.00 0.00 H +ATOM 1656 HW2 SOL 551 29.371 7.290 7.930 1.00 0.00 H +ATOM 1657 OW SOL 552 26.301 11.441 10.231 1.00 0.00 O +ATOM 1658 HW1 SOL 552 25.521 11.611 10.831 1.00 0.00 H +ATOM 1659 HW2 SOL 552 26.641 12.311 9.871 1.00 0.00 H +ATOM 1660 OW SOL 553 27.121 7.980 18.231 1.00 0.00 O +ATOM 1661 HW1 SOL 553 27.081 8.740 18.881 1.00 0.00 H +ATOM 1662 HW2 SOL 553 27.341 8.340 17.321 1.00 0.00 H +ATOM 1663 OW SOL 554 25.471 10.121 6.650 1.00 0.00 O +ATOM 1664 HW1 SOL 554 26.161 9.961 7.350 1.00 0.00 H +ATOM 1665 HW2 SOL 554 24.741 10.691 7.030 1.00 0.00 H +ATOM 1666 OW SOL 555 25.481 11.611 18.031 1.00 0.00 O +ATOM 1667 HW1 SOL 555 26.081 12.401 18.171 1.00 0.00 H +ATOM 1668 HW2 SOL 555 24.621 11.921 17.621 1.00 0.00 H +ATOM 1669 OW SOL 556 21.971 14.351 10.611 1.00 0.00 O +ATOM 1670 HW1 SOL 556 21.191 14.041 10.081 1.00 0.00 H +ATOM 1671 HW2 SOL 556 22.551 14.931 10.041 1.00 0.00 H +ATOM 1672 OW SOL 557 23.001 3.920 14.991 1.00 0.00 O +ATOM 1673 HW1 SOL 557 23.821 3.360 15.081 1.00 0.00 H +ATOM 1674 HW2 SOL 557 22.191 3.340 15.031 1.00 0.00 H +ATOM 1675 OW SOL 558 20.931 17.131 4.830 1.00 0.00 O +ATOM 1676 HW1 SOL 558 21.271 17.901 5.370 1.00 0.00 H +ATOM 1677 HW2 SOL 558 21.371 17.131 3.930 1.00 0.00 H +ATOM 1678 OW SOL 559 29.891 13.411 16.901 1.00 0.00 O +ATOM 1679 HW1 SOL 559 30.361 13.411 17.781 1.00 0.00 H +ATOM 1680 HW2 SOL 559 29.411 12.541 16.791 1.00 0.00 H +ATOM 1681 OW SOL 560 20.921 14.341 5.380 1.00 0.00 O +ATOM 1682 HW1 SOL 560 20.661 15.301 5.380 1.00 0.00 H +ATOM 1683 HW2 SOL 560 20.211 13.801 5.830 1.00 0.00 H +ATOM 1684 OW SOL 561 21.021 10.911 8.860 1.00 0.00 O +ATOM 1685 HW1 SOL 561 21.161 10.071 9.380 1.00 0.00 H +ATOM 1686 HW2 SOL 561 20.471 11.551 9.410 1.00 0.00 H +ATOM 1687 OW SOL 562 24.821 17.861 14.391 1.00 0.00 O +ATOM 1688 HW1 SOL 562 23.901 17.691 14.741 1.00 0.00 H +ATOM 1689 HW2 SOL 562 25.101 18.781 14.651 1.00 0.00 H +ATOM 1690 OW SOL 563 24.681 9.641 1.230 1.00 0.00 O +ATOM 1691 HW1 SOL 563 24.751 10.481 0.690 1.00 0.00 H +ATOM 1692 HW2 SOL 563 25.141 9.771 2.110 1.00 0.00 H +ATOM 1693 OW SOL 564 19.841 6.430 5.630 1.00 0.00 O +ATOM 1694 HW1 SOL 564 19.391 5.550 5.800 1.00 0.00 H +ATOM 1695 HW2 SOL 564 19.831 6.970 6.470 1.00 0.00 H +ATOM 1696 OW SOL 565 18.891 15.961 1.170 1.00 0.00 O +ATOM 1697 HW1 SOL 565 18.701 15.001 1.380 1.00 0.00 H +ATOM 1698 HW2 SOL 565 18.561 16.541 1.920 1.00 0.00 H +ATOM 1699 OW SOL 566 19.751 7.370 15.971 1.00 0.00 O +ATOM 1700 HW1 SOL 566 20.631 7.240 16.421 1.00 0.00 H +ATOM 1701 HW2 SOL 566 19.621 8.340 15.751 1.00 0.00 H +ATOM 1702 OW SOL 567 24.751 13.651 7.260 1.00 0.00 O +ATOM 1703 HW1 SOL 567 24.261 12.781 7.350 1.00 0.00 H +ATOM 1704 HW2 SOL 567 24.521 14.081 6.390 1.00 0.00 H +ATOM 1705 OW SOL 568 26.711 0.040 5.020 1.00 0.00 O +ATOM 1706 HW1 SOL 568 27.111 0.950 4.930 1.00 0.00 H +ATOM 1707 HW2 SOL 568 25.711 0.120 5.080 1.00 0.00 H +ATOM 1708 OW SOL 569 20.591 9.761 12.641 1.00 0.00 O +ATOM 1709 HW1 SOL 569 21.481 9.311 12.501 1.00 0.00 H +ATOM 1710 HW2 SOL 569 19.861 9.111 12.451 1.00 0.00 H +ATOM 1711 OW SOL 570 21.791 2.510 18.011 1.00 0.00 O +ATOM 1712 HW1 SOL 570 22.501 3.220 18.071 1.00 0.00 H +ATOM 1713 HW2 SOL 570 20.911 2.900 18.291 1.00 0.00 H +ATOM 1714 OW SOL 571 2.051 14.171 9.531 1.00 0.00 O +ATOM 1715 HW1 SOL 571 1.461 14.231 10.331 1.00 0.00 H +ATOM 1716 HW2 SOL 571 1.901 13.291 9.071 1.00 0.00 H +ATOM 1717 OW SOL 572 24.601 7.290 2.700 1.00 0.00 O +ATOM 1718 HW1 SOL 572 24.841 7.980 2.020 1.00 0.00 H +ATOM 1719 HW2 SOL 572 23.821 7.620 3.240 1.00 0.00 H +ATOM 1720 OW SOL 573 0.201 3.450 9.441 1.00 0.00 O +ATOM 1721 HW1 SOL 573 -0.659 2.950 9.311 1.00 0.00 H +ATOM 1722 HW2 SOL 573 0.821 2.910 10.001 1.00 0.00 H +ATOM 1723 OW SOL 574 26.691 6.050 14.651 1.00 0.00 O +ATOM 1724 HW1 SOL 574 26.221 6.020 15.541 1.00 0.00 H +ATOM 1725 HW2 SOL 574 26.181 5.500 13.991 1.00 0.00 H +ATOM 1726 OW SOL 575 28.351 8.900 15.721 1.00 0.00 O +ATOM 1727 HW1 SOL 575 28.811 8.060 15.431 1.00 0.00 H +ATOM 1728 HW2 SOL 575 27.791 9.240 14.971 1.00 0.00 H +ATOM 1729 OW SOL 576 28.531 4.100 12.421 1.00 0.00 O +ATOM 1730 HW1 SOL 576 27.761 4.440 12.961 1.00 0.00 H +ATOM 1731 HW2 SOL 576 28.191 3.590 11.631 1.00 0.00 H +ATOM 1732 OW SOL 577 29.031 7.010 4.290 1.00 0.00 O +ATOM 1733 HW1 SOL 577 29.291 6.970 5.250 1.00 0.00 H +ATOM 1734 HW2 SOL 577 28.181 6.500 4.150 1.00 0.00 H +ATOM 1735 OW SOL 578 19.381 8.110 7.890 1.00 0.00 O +ATOM 1736 HW1 SOL 578 20.371 7.990 7.980 1.00 0.00 H +ATOM 1737 HW2 SOL 578 19.141 9.060 8.100 1.00 0.00 H +ATOM 1738 OW SOL 579 19.921 18.211 15.711 1.00 0.00 O +ATOM 1739 HW1 SOL 579 19.821 18.061 16.701 1.00 0.00 H +ATOM 1740 HW2 SOL 579 19.061 18.571 15.351 1.00 0.00 H +ATOM 1741 OW SOL 580 27.271 3.480 1.950 1.00 0.00 O +ATOM 1742 HW1 SOL 580 27.861 4.110 1.460 1.00 0.00 H +ATOM 1743 HW2 SOL 580 27.461 2.540 1.660 1.00 0.00 H +ATOM 1744 OW SOL 581 24.121 1.960 8.850 1.00 0.00 O +ATOM 1745 HW1 SOL 581 24.071 1.910 9.850 1.00 0.00 H +ATOM 1746 HW2 SOL 581 24.141 2.920 8.560 1.00 0.00 H +ATOM 1747 OW SOL 582 28.701 14.561 4.770 1.00 0.00 O +ATOM 1748 HW1 SOL 582 28.241 15.281 4.250 1.00 0.00 H +ATOM 1749 HW2 SOL 582 28.661 14.761 5.750 1.00 0.00 H +ATOM 1750 OW SOL 583 22.131 18.011 8.530 1.00 0.00 O +ATOM 1751 HW1 SOL 583 22.631 17.151 8.590 1.00 0.00 H +ATOM 1752 HW2 SOL 583 22.781 18.781 8.500 1.00 0.00 H +ATOM 1753 OW SOL 584 30.891 15.501 15.061 1.00 0.00 O +ATOM 1754 HW1 SOL 584 30.951 14.731 15.701 1.00 0.00 H +ATOM 1755 HW2 SOL 584 30.371 15.241 14.261 1.00 0.00 H +ATOM 1756 OW SOL 585 21.831 9.431 2.420 1.00 0.00 O +ATOM 1757 HW1 SOL 585 22.651 9.821 2.000 1.00 0.00 H +ATOM 1758 HW2 SOL 585 21.561 8.611 1.930 1.00 0.00 H +ATOM 1759 OW SOL 586 23.231 12.661 17.271 1.00 0.00 O +ATOM 1760 HW1 SOL 586 22.731 12.671 16.411 1.00 0.00 H +ATOM 1761 HW2 SOL 586 22.601 12.481 18.031 1.00 0.00 H +ATOM 1762 OW SOL 587 29.731 17.761 2.370 1.00 0.00 O +ATOM 1763 HW1 SOL 587 29.131 17.141 2.870 1.00 0.00 H +ATOM 1764 HW2 SOL 587 30.041 17.321 1.520 1.00 0.00 H +ATOM 1765 OW SOL 588 20.641 2.850 14.981 1.00 0.00 O +ATOM 1766 HW1 SOL 588 19.841 3.450 14.851 1.00 0.00 H +ATOM 1767 HW2 SOL 588 20.541 2.360 15.841 1.00 0.00 H +ATOM 1768 OW SOL 589 23.261 17.431 3.230 1.00 0.00 O +ATOM 1769 HW1 SOL 589 23.591 17.821 4.090 1.00 0.00 H +ATOM 1770 HW2 SOL 589 24.021 17.361 2.580 1.00 0.00 H +ATOM 1771 OW SOL 590 21.111 17.851 12.411 1.00 0.00 O +ATOM 1772 HW1 SOL 590 21.681 17.201 12.911 1.00 0.00 H +ATOM 1773 HW2 SOL 590 20.951 17.521 11.481 1.00 0.00 H +ATOM 1774 OW SOL 591 28.021 16.981 9.040 1.00 0.00 O +ATOM 1775 HW1 SOL 591 28.821 16.411 9.250 1.00 0.00 H +ATOM 1776 HW2 SOL 591 27.531 16.581 8.270 1.00 0.00 H +ATOM 1777 OW SOL 592 22.441 7.000 4.800 1.00 0.00 O +ATOM 1778 HW1 SOL 592 22.891 6.100 4.770 1.00 0.00 H +ATOM 1779 HW2 SOL 592 21.501 6.890 5.130 1.00 0.00 H +ATOM 1780 OW SOL 593 24.761 1.220 1.170 1.00 0.00 O +ATOM 1781 HW1 SOL 593 25.741 1.000 1.240 1.00 0.00 H +ATOM 1782 HW2 SOL 593 24.451 1.050 0.240 1.00 0.00 H +ATOM 1783 OW SOL 594 26.431 2.640 17.491 1.00 0.00 O +ATOM 1784 HW1 SOL 594 27.101 2.030 17.921 1.00 0.00 H +ATOM 1785 HW2 SOL 594 25.701 2.830 18.141 1.00 0.00 H +ATOM 1786 OW SOL 595 27.501 15.141 11.951 1.00 0.00 O +ATOM 1787 HW1 SOL 595 27.271 14.891 11.011 1.00 0.00 H +ATOM 1788 HW2 SOL 595 28.111 14.451 12.341 1.00 0.00 H +ATOM 1789 OW SOL 596 26.651 14.021 9.240 1.00 0.00 O +ATOM 1790 HW1 SOL 596 27.551 14.161 8.820 1.00 0.00 H +ATOM 1791 HW2 SOL 596 25.941 14.041 8.530 1.00 0.00 H +ATOM 1792 OW SOL 597 27.841 5.030 8.990 1.00 0.00 O +ATOM 1793 HW1 SOL 597 27.591 4.940 8.030 1.00 0.00 H +ATOM 1794 HW2 SOL 597 28.321 4.210 9.300 1.00 0.00 H +ATOM 1795 OW SOL 598 24.011 0.640 5.120 1.00 0.00 O +ATOM 1796 HW1 SOL 598 23.201 0.650 5.700 1.00 0.00 H +ATOM 1797 HW2 SOL 598 24.041 1.470 4.570 1.00 0.00 H +ATOM 1798 OW SOL 599 1.731 11.881 0.410 1.00 0.00 O +ATOM 1799 HW1 SOL 599 2.051 11.121 0.980 1.00 0.00 H +ATOM 1800 HW2 SOL 599 0.811 12.151 0.710 1.00 0.00 H +ATOM 1801 OW SOL 600 21.591 0.350 1.710 1.00 0.00 O +ATOM 1802 HW1 SOL 600 22.081 1.190 1.500 1.00 0.00 H +ATOM 1803 HW2 SOL 600 22.211 -0.300 2.160 1.00 0.00 H +ATOM 1804 OW SOL 601 27.971 2.360 4.800 1.00 0.00 O +ATOM 1805 HW1 SOL 601 27.491 2.770 4.020 1.00 0.00 H +ATOM 1806 HW2 SOL 601 28.961 2.340 4.610 1.00 0.00 H +ATOM 1807 OW SOL 602 29.381 6.830 14.641 1.00 0.00 O +ATOM 1808 HW1 SOL 602 28.581 6.220 14.671 1.00 0.00 H +ATOM 1809 HW2 SOL 602 30.191 6.300 14.401 1.00 0.00 H +ATOM 1810 OW SOL 603 30.891 15.701 7.930 1.00 0.00 O +ATOM 1811 HW1 SOL 603 31.101 16.441 7.280 1.00 0.00 H +ATOM 1812 HW2 SOL 603 31.571 15.701 8.660 1.00 0.00 H +ATOM 1813 OW SOL 604 23.211 11.521 7.410 1.00 0.00 O +ATOM 1814 HW1 SOL 604 22.501 11.251 8.060 1.00 0.00 H +ATOM 1815 HW2 SOL 604 22.951 11.241 6.480 1.00 0.00 H +ATOM 1816 OW SOL 605 0.101 17.971 5.910 1.00 0.00 O +ATOM 1817 HW1 SOL 605 0.541 18.611 5.270 1.00 0.00 H +ATOM 1818 HW2 SOL 605 -0.399 18.491 6.610 1.00 0.00 H +ATOM 1819 OW SOL 606 28.941 5.490 0.160 1.00 0.00 O +ATOM 1820 HW1 SOL 606 28.531 6.310 -0.230 1.00 0.00 H +ATOM 1821 HW2 SOL 606 29.581 5.750 0.890 1.00 0.00 H +ATOM 1822 OW SOL 607 19.401 5.560 13.861 1.00 0.00 O +ATOM 1823 HW1 SOL 607 20.321 5.550 13.451 1.00 0.00 H +ATOM 1824 HW2 SOL 607 19.341 6.300 14.531 1.00 0.00 H +ATOM 1825 OW SOL 608 24.231 2.220 11.471 1.00 0.00 O +ATOM 1826 HW1 SOL 608 24.611 1.380 11.841 1.00 0.00 H +ATOM 1827 HW2 SOL 608 23.351 2.410 11.911 1.00 0.00 H +ATOM 1828 OW SOL 609 27.281 4.540 6.420 1.00 0.00 O +ATOM 1829 HW1 SOL 609 26.961 5.260 5.800 1.00 0.00 H +ATOM 1830 HW2 SOL 609 27.521 3.730 5.890 1.00 0.00 H +ATOM 1831 OW SOL 610 28.791 0.390 7.530 1.00 0.00 O +ATOM 1832 HW1 SOL 610 28.071 0.440 6.840 1.00 0.00 H +ATOM 1833 HW2 SOL 610 28.551 -0.300 8.220 1.00 0.00 H +ATOM 1834 OW SOL 611 23.501 13.851 1.740 1.00 0.00 O +ATOM 1835 HW1 SOL 611 22.631 13.701 2.210 1.00 0.00 H +ATOM 1836 HW2 SOL 611 23.331 14.111 0.790 1.00 0.00 H +ATOM 1837 OW SOL 612 23.891 2.560 3.280 1.00 0.00 O +ATOM 1838 HW1 SOL 612 24.161 1.970 2.530 1.00 0.00 H +ATOM 1839 HW2 SOL 612 23.891 3.510 2.970 1.00 0.00 H +ATOM 1840 OW SOL 613 29.261 13.471 13.401 1.00 0.00 O +ATOM 1841 HW1 SOL 613 28.461 13.241 13.951 1.00 0.00 H +ATOM 1842 HW2 SOL 613 30.091 13.211 13.891 1.00 0.00 H +ATOM 1843 OW SOL 614 29.731 11.951 11.001 1.00 0.00 O +ATOM 1844 HW1 SOL 614 29.331 12.391 11.811 1.00 0.00 H +ATOM 1845 HW2 SOL 614 29.321 12.321 10.171 1.00 0.00 H +ATOM 1846 OW SOL 615 27.771 0.890 14.021 1.00 0.00 O +ATOM 1847 HW1 SOL 615 28.021 0.690 13.071 1.00 0.00 H +ATOM 1848 HW2 SOL 615 28.491 1.450 14.441 1.00 0.00 H +ATOM 1849 OW SOL 616 28.421 11.161 17.191 1.00 0.00 O +ATOM 1850 HW1 SOL 616 27.431 11.221 17.291 1.00 0.00 H +ATOM 1851 HW2 SOL 616 28.651 10.361 16.631 1.00 0.00 H +ATOM 1852 OW SOL 617 25.671 10.501 3.680 1.00 0.00 O +ATOM 1853 HW1 SOL 617 25.531 10.571 4.670 1.00 0.00 H +ATOM 1854 HW2 SOL 617 26.511 9.991 3.500 1.00 0.00 H +ATOM 1855 OW SOL 618 22.721 8.130 12.511 1.00 0.00 O +ATOM 1856 HW1 SOL 618 23.581 8.250 13.011 1.00 0.00 H +ATOM 1857 HW2 SOL 618 22.301 7.260 12.781 1.00 0.00 H +ATOM 1858 OW SOL 619 0.131 3.860 12.621 1.00 0.00 O +ATOM 1859 HW1 SOL 619 0.341 4.600 13.261 1.00 0.00 H +ATOM 1860 HW2 SOL 619 -0.759 4.030 12.191 1.00 0.00 H +ATOM 1861 OW SOL 620 19.261 15.641 13.311 1.00 0.00 O +ATOM 1862 HW1 SOL 620 18.801 16.461 12.971 1.00 0.00 H +ATOM 1863 HW2 SOL 620 20.241 15.831 13.401 1.00 0.00 H +ATOM 1864 OW SOL 621 22.291 11.001 5.010 1.00 0.00 O +ATOM 1865 HW1 SOL 621 22.221 11.831 4.450 1.00 0.00 H +ATOM 1866 HW2 SOL 621 22.331 10.201 4.410 1.00 0.00 H +ATOM 1867 OW SOL 622 24.281 5.370 8.650 1.00 0.00 O +ATOM 1868 HW1 SOL 622 24.401 6.030 7.910 1.00 0.00 H +ATOM 1869 HW2 SOL 622 24.741 5.710 9.480 1.00 0.00 H +ATOM 1870 OW SOL 623 31.141 13.481 3.880 1.00 0.00 O +ATOM 1871 HW1 SOL 623 31.641 14.251 4.280 1.00 0.00 H +ATOM 1872 HW2 SOL 623 30.191 13.501 4.200 1.00 0.00 H +ATOM 1873 OW SOL 624 22.161 15.101 13.291 1.00 0.00 O +ATOM 1874 HW1 SOL 624 21.951 14.661 12.421 1.00 0.00 H +ATOM 1875 HW2 SOL 624 23.131 15.361 13.321 1.00 0.00 H +ATOM 1876 OW SOL 625 22.641 7.510 15.981 1.00 0.00 O +ATOM 1877 HW1 SOL 625 23.321 8.060 15.511 1.00 0.00 H +ATOM 1878 HW2 SOL 625 23.041 6.630 16.251 1.00 0.00 H +ATOM 1879 OW SOL 626 28.751 1.050 17.701 1.00 0.00 O +ATOM 1880 HW1 SOL 626 28.811 1.900 17.181 1.00 0.00 H +ATOM 1881 HW2 SOL 626 29.071 0.290 17.131 1.00 0.00 H +ATOM 1882 OW SOL 627 23.661 0.500 17.401 1.00 0.00 O +ATOM 1883 HW1 SOL 627 23.241 -0.070 16.701 1.00 0.00 H +ATOM 1884 HW2 SOL 627 23.001 1.190 17.721 1.00 0.00 H +ATOM 1885 OW SOL 628 24.351 8.700 10.291 1.00 0.00 O +ATOM 1886 HW1 SOL 628 24.791 9.590 10.201 1.00 0.00 H +ATOM 1887 HW2 SOL 628 23.721 8.700 11.061 1.00 0.00 H +ATOM 1888 OW SOL 629 0.991 8.620 10.451 1.00 0.00 O +ATOM 1889 HW1 SOL 629 0.241 8.620 9.791 1.00 0.00 H +ATOM 1890 HW2 SOL 629 1.361 7.700 10.541 1.00 0.00 H +ATOM 1891 OW SOL 630 30.711 5.250 2.750 1.00 0.00 O +ATOM 1892 HW1 SOL 630 30.841 4.410 3.290 1.00 0.00 H +ATOM 1893 HW2 SOL 630 30.421 5.990 3.350 1.00 0.00 H +ATOM 1894 OW SOL 631 21.691 2.130 12.311 1.00 0.00 O +ATOM 1895 HW1 SOL 631 21.461 2.500 13.211 1.00 0.00 H +ATOM 1896 HW2 SOL 631 21.391 1.180 12.251 1.00 0.00 H +ATOM 1897 OW SOL 632 18.991 13.101 12.821 1.00 0.00 O +ATOM 1898 HW1 SOL 632 19.521 12.611 13.501 1.00 0.00 H +ATOM 1899 HW2 SOL 632 19.211 14.081 12.871 1.00 0.00 H +ATOM 1900 OW SOL 633 25.941 6.340 10.641 1.00 0.00 O +ATOM 1901 HW1 SOL 633 26.531 6.080 9.881 1.00 0.00 H +ATOM 1902 HW2 SOL 633 25.661 7.300 10.531 1.00 0.00 H +ATOM 1903 OW SOL 634 21.691 0.630 6.180 1.00 0.00 O +ATOM 1904 HW1 SOL 634 21.581 1.570 6.510 1.00 0.00 H +ATOM 1905 HW2 SOL 634 21.641 0.000 6.950 1.00 0.00 H +ATOM 1906 OW SOL 635 28.851 7.660 9.661 1.00 0.00 O +ATOM 1907 HW1 SOL 635 29.001 7.870 10.621 1.00 0.00 H +ATOM 1908 HW2 SOL 635 28.551 6.710 9.571 1.00 0.00 H +ATOM 1909 OW SOL 636 28.421 15.731 17.001 1.00 0.00 O +ATOM 1910 HW1 SOL 636 28.221 16.171 16.121 1.00 0.00 H +ATOM 1911 HW2 SOL 636 28.811 14.821 16.841 1.00 0.00 H +ATOM 1912 OW SOL 637 22.121 8.980 18.041 1.00 0.00 O +ATOM 1913 HW1 SOL 637 22.881 9.420 18.521 1.00 0.00 H +ATOM 1914 HW2 SOL 637 22.471 8.510 17.221 1.00 0.00 H +ATOM 1915 OW SOL 638 29.301 13.331 8.490 1.00 0.00 O +ATOM 1916 HW1 SOL 638 29.371 12.491 7.940 1.00 0.00 H +ATOM 1917 HW2 SOL 638 29.921 14.021 8.130 1.00 0.00 H +ATOM 1918 OW SOL 639 21.811 8.100 9.491 1.00 0.00 O +ATOM 1919 HW1 SOL 639 22.741 8.460 9.541 1.00 0.00 H +ATOM 1920 HW2 SOL 639 21.751 7.250 10.011 1.00 0.00 H +ATOM 1921 OW SOL 640 22.011 5.090 10.061 1.00 0.00 O +ATOM 1922 HW1 SOL 640 21.491 4.260 9.891 1.00 0.00 H +ATOM 1923 HW2 SOL 640 22.781 5.140 9.421 1.00 0.00 H +ATOM 1924 OW SOL 641 30.001 3.800 16.781 1.00 0.00 O +ATOM 1925 HW1 SOL 641 29.551 4.430 17.421 1.00 0.00 H +ATOM 1926 HW2 SOL 641 30.931 4.110 16.611 1.00 0.00 H +ATOM 1927 OW SOL 642 30.221 2.070 14.771 1.00 0.00 O +ATOM 1928 HW1 SOL 642 30.221 2.710 15.541 1.00 0.00 H +ATOM 1929 HW2 SOL 642 30.501 2.550 13.941 1.00 0.00 H +ATOM 1930 OW SOL 643 18.701 13.261 2.000 1.00 0.00 O +ATOM 1931 HW1 SOL 643 17.771 13.471 1.690 1.00 0.00 H +ATOM 1932 HW2 SOL 643 18.801 12.271 2.130 1.00 0.00 H +ATOM 1933 OW SOL 644 19.501 18.011 9.270 1.00 0.00 O +ATOM 1934 HW1 SOL 644 19.081 17.151 9.000 1.00 0.00 H +ATOM 1935 HW2 SOL 644 20.441 18.041 8.930 1.00 0.00 H +ATOM 1936 OW SOL 645 23.661 15.681 9.100 1.00 0.00 O +ATOM 1937 HW1 SOL 645 24.321 16.421 9.190 1.00 0.00 H +ATOM 1938 HW2 SOL 645 24.101 14.891 8.680 1.00 0.00 H +ATOM 1939 OW SOL 646 28.641 7.960 12.381 1.00 0.00 O +ATOM 1940 HW1 SOL 646 29.051 7.640 13.241 1.00 0.00 H +ATOM 1941 HW2 SOL 646 27.681 7.690 12.351 1.00 0.00 H +ATOM 1942 OW SOL 647 19.021 5.440 11.141 1.00 0.00 O +ATOM 1943 HW1 SOL 647 19.871 5.110 10.731 1.00 0.00 H +ATOM 1944 HW2 SOL 647 19.151 5.590 12.121 1.00 0.00 H +ATOM 1945 OW SOL 648 20.511 5.200 17.221 1.00 0.00 O +ATOM 1946 HW1 SOL 648 21.101 4.800 16.521 1.00 0.00 H +ATOM 1947 HW2 SOL 648 19.931 5.910 16.811 1.00 0.00 H +ATOM 1948 OW SOL 649 26.771 5.720 3.250 1.00 0.00 O +ATOM 1949 HW1 SOL 649 26.841 4.830 2.790 1.00 0.00 H +ATOM 1950 HW2 SOL 649 25.831 6.060 3.170 1.00 0.00 H +ATOM 1951 OW SOL 650 21.141 15.641 17.441 1.00 0.00 O +ATOM 1952 HW1 SOL 650 20.841 16.211 18.201 1.00 0.00 H +ATOM 1953 HW2 SOL 650 21.071 14.671 17.701 1.00 0.00 H +ATOM 1954 OW SOL 651 25.331 4.640 12.691 1.00 0.00 O +ATOM 1955 HW1 SOL 651 24.991 3.750 12.391 1.00 0.00 H +ATOM 1956 HW2 SOL 651 25.591 5.180 11.891 1.00 0.00 H +ATOM 1957 OW SOL 652 27.921 16.781 14.651 1.00 0.00 O +ATOM 1958 HW1 SOL 652 27.681 16.601 13.701 1.00 0.00 H +ATOM 1959 HW2 SOL 652 28.221 17.721 14.751 1.00 0.00 H +ATOM 1960 OW SOL 653 23.351 5.000 1.910 1.00 0.00 O +ATOM 1961 HW1 SOL 653 23.961 5.800 1.950 1.00 0.00 H +ATOM 1962 HW2 SOL 653 22.401 5.310 1.980 1.00 0.00 H +ATOM 1963 OW SOL 654 20.211 11.371 14.661 1.00 0.00 O +ATOM 1964 HW1 SOL 654 20.431 10.761 15.421 1.00 0.00 H +ATOM 1965 HW2 SOL 654 20.311 10.881 13.801 1.00 0.00 H +ATOM 1966 OW SOL 655 0.861 10.591 12.341 1.00 0.00 O +ATOM 1967 HW1 SOL 655 1.101 9.961 11.601 1.00 0.00 H +ATOM 1968 HW2 SOL 655 -0.039 10.991 12.161 1.00 0.00 H +ATOM 1969 OW SOL 656 31.141 17.311 11.281 1.00 0.00 O +ATOM 1970 HW1 SOL 656 31.981 17.361 10.741 1.00 0.00 H +ATOM 1971 HW2 SOL 656 30.911 16.351 11.461 1.00 0.00 H +ATOM 1972 OW SOL 657 19.451 12.581 10.221 1.00 0.00 O +ATOM 1973 HW1 SOL 657 19.401 12.571 11.221 1.00 0.00 H +ATOM 1974 HW2 SOL 657 18.621 12.171 9.841 1.00 0.00 H +ATOM 1975 OW SOL 658 25.501 16.621 17.161 1.00 0.00 O +ATOM 1976 HW1 SOL 658 24.941 17.431 17.251 1.00 0.00 H +ATOM 1977 HW2 SOL 658 26.021 16.661 16.301 1.00 0.00 H +ATOM 1978 OW SOL 659 27.651 0.860 1.330 1.00 0.00 O +ATOM 1979 HW1 SOL 659 28.161 0.870 0.470 1.00 0.00 H +ATOM 1980 HW2 SOL 659 28.211 0.440 2.040 1.00 0.00 H +ATOM 1981 OW SOL 660 1.271 15.731 4.770 1.00 0.00 O +ATOM 1982 HW1 SOL 660 1.941 15.851 4.030 1.00 0.00 H +ATOM 1983 HW2 SOL 660 0.871 16.621 5.000 1.00 0.00 H +ATOM 1984 OW SOL 661 19.921 17.941 18.511 1.00 0.00 O +ATOM 1985 HW1 SOL 661 19.511 17.201 19.041 1.00 0.00 H +ATOM 1986 HW2 SOL 661 20.561 18.451 19.091 1.00 0.00 H +ATOM 1987 OW SOL 662 0.191 9.270 6.720 1.00 0.00 O +ATOM 1988 HW1 SOL 662 0.791 8.460 6.740 1.00 0.00 H +ATOM 1989 HW2 SOL 662 0.591 9.960 6.120 1.00 0.00 H +ATOM 1990 OW SOL 663 26.921 12.731 14.221 1.00 0.00 O +ATOM 1991 HW1 SOL 663 26.871 13.061 15.171 1.00 0.00 H +ATOM 1992 HW2 SOL 663 26.061 12.921 13.761 1.00 0.00 H +ATOM 1993 OW SOL 664 25.341 16.161 1.540 1.00 0.00 O +ATOM 1994 HW1 SOL 664 25.431 16.261 0.550 1.00 0.00 H +ATOM 1995 HW2 SOL 664 24.941 15.271 1.750 1.00 0.00 H +ATOM 1996 OW SOL 665 21.251 3.260 7.200 1.00 0.00 O +ATOM 1997 HW1 SOL 665 20.461 3.770 6.860 1.00 0.00 H +ATOM 1998 HW2 SOL 665 21.161 3.110 8.180 1.00 0.00 H +ATOM 1999 OW SOL 666 30.561 16.121 0.310 1.00 0.00 O +ATOM 2000 HW1 SOL 666 30.621 15.191 0.680 1.00 0.00 H +ATOM 2001 HW2 SOL 666 29.971 16.121 -0.490 1.00 0.00 H +ATOM 2002 OW SOL 667 26.841 10.021 13.721 1.00 0.00 O +ATOM 2003 HW1 SOL 667 27.241 10.011 12.801 1.00 0.00 H +ATOM 2004 HW2 SOL 667 26.941 10.941 14.121 1.00 0.00 H +ATOM 2005 OW SOL 668 27.781 9.100 2.910 1.00 0.00 O +ATOM 2006 HW1 SOL 668 28.411 9.480 2.230 1.00 0.00 H +ATOM 2007 HW2 SOL 668 28.181 8.270 3.300 1.00 0.00 H +ATOM 2008 OW SOL 669 22.341 12.881 14.901 1.00 0.00 O +ATOM 2009 HW1 SOL 669 22.211 13.811 14.561 1.00 0.00 H +ATOM 2010 HW2 SOL 669 21.501 12.361 14.771 1.00 0.00 H +ATOM 2011 OW SOL 670 29.011 10.981 6.960 1.00 0.00 O +ATOM 2012 HW1 SOL 670 28.311 10.511 7.500 1.00 0.00 H +ATOM 2013 HW2 SOL 670 29.601 10.301 6.530 1.00 0.00 H +ATOM 2014 OW SOL 671 28.761 2.360 9.711 1.00 0.00 O +ATOM 2015 HW1 SOL 671 28.681 2.000 8.781 1.00 0.00 H +ATOM 2016 HW2 SOL 671 28.741 1.600 10.361 1.00 0.00 H +ATOM 2017 OW SOL 672 24.521 14.871 4.910 1.00 0.00 O +ATOM 2018 HW1 SOL 672 24.941 14.291 4.210 1.00 0.00 H +ATOM 2019 HW2 SOL 672 24.081 15.661 4.470 1.00 0.00 H +ATOM 2020 OW SOL 673 21.171 13.481 2.900 1.00 0.00 O +ATOM 2021 HW1 SOL 673 20.211 13.491 2.630 1.00 0.00 H +ATOM 2022 HW2 SOL 673 21.291 14.011 3.740 1.00 0.00 H +ATOM 2023 OW SOL 674 19.671 10.131 17.261 1.00 0.00 O +ATOM 2024 HW1 SOL 674 18.901 9.801 17.801 1.00 0.00 H +ATOM 2025 HW2 SOL 674 20.521 9.831 17.681 1.00 0.00 H +ATOM 2026 OW SOL 675 25.341 2.030 14.891 1.00 0.00 O +ATOM 2027 HW1 SOL 675 26.241 1.870 14.491 1.00 0.00 H +ATOM 2028 HW2 SOL 675 25.421 2.080 15.881 1.00 0.00 H +ATOM 2029 OW SOL 676 19.341 1.660 3.180 1.00 0.00 O +ATOM 2030 HW1 SOL 676 19.171 2.490 2.640 1.00 0.00 H +ATOM 2031 HW2 SOL 676 20.241 1.290 2.960 1.00 0.00 H +ATOM 2032 OW SOL 677 30.451 13.351 1.190 1.00 0.00 O +ATOM 2033 HW1 SOL 677 29.461 13.241 1.210 1.00 0.00 H +ATOM 2034 HW2 SOL 677 30.791 13.501 2.120 1.00 0.00 H +ATOM 2035 OW SOL 678 24.751 8.420 14.311 1.00 0.00 O +ATOM 2036 HW1 SOL 678 25.311 9.230 14.141 1.00 0.00 H +ATOM 2037 HW2 SOL 678 25.341 7.620 14.341 1.00 0.00 H +ATOM 2038 OW SOL 679 25.781 5.650 17.081 1.00 0.00 O +ATOM 2039 HW1 SOL 679 25.971 6.300 17.821 1.00 0.00 H +ATOM 2040 HW2 SOL 679 26.381 4.850 17.171 1.00 0.00 H +ATOM 2041 OW SOL 680 22.521 17.411 15.601 1.00 0.00 O +ATOM 2042 HW1 SOL 680 21.611 17.821 15.581 1.00 0.00 H +ATOM 2043 HW2 SOL 680 22.451 16.471 15.921 1.00 0.00 H +ATOM 2044 OW SOL 681 30.871 3.250 4.490 1.00 0.00 O +ATOM 2045 HW1 SOL 681 31.521 2.510 4.380 1.00 0.00 H +ATOM 2046 HW2 SOL 681 31.071 3.750 5.330 1.00 0.00 H +ATOM 2047 OW SOL 682 24.561 7.450 6.520 1.00 0.00 O +ATOM 2048 HW1 SOL 682 25.061 8.300 6.330 1.00 0.00 H +ATOM 2049 HW2 SOL 682 23.681 7.470 6.040 1.00 0.00 H +ATOM 2050 OW SOL 683 27.211 13.741 0.160 1.00 0.00 O +ATOM 2051 HW1 SOL 683 26.751 13.891 1.040 1.00 0.00 H +ATOM 2052 HW2 SOL 683 27.651 14.591 -0.140 1.00 0.00 H +ATOM 2053 OW SOL 684 25.231 17.901 9.531 1.00 0.00 O +ATOM 2054 HW1 SOL 684 24.771 18.781 9.401 1.00 0.00 H +ATOM 2055 HW2 SOL 684 26.221 18.021 9.461 1.00 0.00 H +ATOM 2056 OW SOL 685 1.471 18.511 17.201 1.00 0.00 O +ATOM 2057 HW1 SOL 685 0.511 18.401 16.931 1.00 0.00 H +ATOM 2058 HW2 SOL 685 2.031 17.841 16.721 1.00 0.00 H +ATOM 2059 OW SOL 686 27.211 9.561 8.610 1.00 0.00 O +ATOM 2060 HW1 SOL 686 27.751 8.871 9.090 1.00 0.00 H +ATOM 2061 HW2 SOL 686 26.891 10.251 9.270 1.00 0.00 H +ATOM 2062 OW SOL 687 29.451 9.841 0.870 1.00 0.00 O +ATOM 2063 HW1 SOL 687 29.221 10.371 0.050 1.00 0.00 H +ATOM 2064 HW2 SOL 687 30.261 9.281 0.680 1.00 0.00 H +ATOM 2065 OW SOL 688 20.831 13.141 18.441 1.00 0.00 O +ATOM 2066 HW1 SOL 688 20.181 12.411 18.231 1.00 0.00 H +ATOM 2067 HW2 SOL 688 20.871 13.281 19.421 1.00 0.00 H +ATOM 2068 OW SOL 689 19.411 12.401 6.530 1.00 0.00 O +ATOM 2069 HW1 SOL 689 19.401 11.931 7.410 1.00 0.00 H +ATOM 2070 HW2 SOL 689 20.231 12.121 6.020 1.00 0.00 H +ATOM 2071 OW SOL 690 25.341 13.911 16.241 1.00 0.00 O +ATOM 2072 HW1 SOL 690 24.561 13.411 16.621 1.00 0.00 H +ATOM 2073 HW2 SOL 690 25.311 14.861 16.551 1.00 0.00 H +ATOM 2074 OW SOL 691 22.901 4.240 5.200 1.00 0.00 O +ATOM 2075 HW1 SOL 691 23.201 3.520 4.580 1.00 0.00 H +ATOM 2076 HW2 SOL 691 22.511 3.840 6.030 1.00 0.00 H +ATOM 2077 OW SOL 692 21.791 5.470 12.801 1.00 0.00 O +ATOM 2078 HW1 SOL 692 22.171 4.880 13.521 1.00 0.00 H +ATOM 2079 HW2 SOL 692 22.191 5.210 11.921 1.00 0.00 H +ATOM 2080 OW SOL 693 26.741 15.861 6.870 1.00 0.00 O +ATOM 2081 HW1 SOL 693 27.061 15.961 5.930 1.00 0.00 H +ATOM 2082 HW2 SOL 693 25.951 15.241 6.890 1.00 0.00 H +ATOM 2083 OW SOL 694 1.631 2.140 11.121 1.00 0.00 O +ATOM 2084 HW1 SOL 694 2.151 1.490 11.671 1.00 0.00 H +ATOM 2085 HW2 SOL 694 1.141 2.770 11.731 1.00 0.00 H +ATOM 2086 OW SOL 695 28.631 0.340 11.541 1.00 0.00 O +ATOM 2087 HW1 SOL 695 28.001 -0.380 11.231 1.00 0.00 H +ATOM 2088 HW2 SOL 695 29.561 -0.020 11.541 1.00 0.00 H +ATOM 2089 OW SOL 696 26.321 13.301 3.010 1.00 0.00 O +ATOM 2090 HW1 SOL 696 25.861 12.431 3.180 1.00 0.00 H +ATOM 2091 HW2 SOL 696 27.231 13.271 3.420 1.00 0.00 H +ATOM 2092 OW SOL 697 24.801 15.671 12.841 1.00 0.00 O +ATOM 2093 HW1 SOL 697 24.751 16.491 13.411 1.00 0.00 H +ATOM 2094 HW2 SOL 697 25.691 15.641 12.391 1.00 0.00 H +ATOM 2095 OW SOL 698 0.391 4.530 6.910 1.00 0.00 O +ATOM 2096 HW1 SOL 698 -0.199 5.330 6.950 1.00 0.00 H +ATOM 2097 HW2 SOL 698 0.541 4.180 7.840 1.00 0.00 H +ATOM 2098 OW SOL 699 19.011 10.771 3.000 1.00 0.00 O +ATOM 2099 HW1 SOL 699 20.001 10.661 2.910 1.00 0.00 H +ATOM 2100 HW2 SOL 699 18.611 9.911 3.320 1.00 0.00 H +ATOM 2101 OW SOL 700 27.371 16.461 3.370 1.00 0.00 O +ATOM 2102 HW1 SOL 700 26.601 16.111 2.830 1.00 0.00 H +ATOM 2103 HW2 SOL 700 27.051 17.171 3.990 1.00 0.00 H +ATOM 2104 OW SOL 701 20.921 6.280 19.751 1.00 0.00 O +ATOM 2105 HW1 SOL 701 19.991 6.260 20.121 1.00 0.00 H +ATOM 2106 HW2 SOL 701 20.931 5.890 18.831 1.00 0.00 H +ATOM 2107 OW SOL 702 20.871 2.750 28.581 1.00 0.00 O +ATOM 2108 HW1 SOL 702 21.221 2.580 29.501 1.00 0.00 H +ATOM 2109 HW2 SOL 702 19.991 2.300 28.461 1.00 0.00 H +ATOM 2110 OW SOL 703 18.811 3.680 25.091 1.00 0.00 O +ATOM 2111 HW1 SOL 703 17.991 4.110 25.481 1.00 0.00 H +ATOM 2112 HW2 SOL 703 18.531 2.950 24.461 1.00 0.00 H +ATOM 2113 OW SOL 704 24.311 12.751 30.271 1.00 0.00 O +ATOM 2114 HW1 SOL 704 23.381 12.681 29.901 1.00 0.00 H +ATOM 2115 HW2 SOL 704 24.421 13.641 30.711 1.00 0.00 H +ATOM 2116 OW SOL 705 29.971 7.030 25.791 1.00 0.00 O +ATOM 2117 HW1 SOL 705 30.541 7.810 25.541 1.00 0.00 H +ATOM 2118 HW2 SOL 705 29.371 7.290 26.551 1.00 0.00 H +ATOM 2119 OW SOL 706 26.301 11.441 28.851 1.00 0.00 O +ATOM 2120 HW1 SOL 706 25.521 11.611 29.451 1.00 0.00 H +ATOM 2121 HW2 SOL 706 26.641 12.311 28.491 1.00 0.00 H +ATOM 2122 OW SOL 707 25.471 10.121 25.271 1.00 0.00 O +ATOM 2123 HW1 SOL 707 26.161 9.961 25.971 1.00 0.00 H +ATOM 2124 HW2 SOL 707 24.741 10.691 25.651 1.00 0.00 H +ATOM 2125 OW SOL 708 21.971 14.351 29.231 1.00 0.00 O +ATOM 2126 HW1 SOL 708 21.191 14.041 28.701 1.00 0.00 H +ATOM 2127 HW2 SOL 708 22.551 14.931 28.661 1.00 0.00 H +ATOM 2128 OW SOL 709 1.991 15.051 0.781 1.00 0.00 O +ATOM 2129 HW1 SOL 709 2.231 15.991 1.041 1.00 0.00 H +ATOM 2130 HW2 SOL 709 1.831 14.511 1.601 1.00 0.00 H +ATOM 2131 OW SOL 710 20.931 17.131 23.451 1.00 0.00 O +ATOM 2132 HW1 SOL 710 21.271 17.901 23.991 1.00 0.00 H +ATOM 2133 HW2 SOL 710 21.371 17.131 22.551 1.00 0.00 H +ATOM 2134 OW SOL 711 20.921 14.341 24.001 1.00 0.00 O +ATOM 2135 HW1 SOL 711 20.661 15.301 24.001 1.00 0.00 H +ATOM 2136 HW2 SOL 711 20.211 13.801 24.451 1.00 0.00 H +ATOM 2137 OW SOL 712 21.021 10.911 27.481 1.00 0.00 O +ATOM 2138 HW1 SOL 712 21.161 10.071 28.001 1.00 0.00 H +ATOM 2139 HW2 SOL 712 20.471 11.551 28.031 1.00 0.00 H +ATOM 2140 OW SOL 713 24.681 9.641 19.851 1.00 0.00 O +ATOM 2141 HW1 SOL 713 24.751 10.481 19.311 1.00 0.00 H +ATOM 2142 HW2 SOL 713 25.141 9.771 20.731 1.00 0.00 H +ATOM 2143 OW SOL 714 19.841 6.430 24.251 1.00 0.00 O +ATOM 2144 HW1 SOL 714 19.391 5.550 24.421 1.00 0.00 H +ATOM 2145 HW2 SOL 714 19.831 6.970 25.091 1.00 0.00 H +ATOM 2146 OW SOL 715 18.891 15.961 19.791 1.00 0.00 O +ATOM 2147 HW1 SOL 715 18.701 15.001 20.001 1.00 0.00 H +ATOM 2148 HW2 SOL 715 18.561 16.541 20.541 1.00 0.00 H +ATOM 2149 OW SOL 716 24.751 13.651 25.881 1.00 0.00 O +ATOM 2150 HW1 SOL 716 24.261 12.781 25.971 1.00 0.00 H +ATOM 2151 HW2 SOL 716 24.521 14.081 25.011 1.00 0.00 H +ATOM 2152 OW SOL 717 26.711 0.040 23.641 1.00 0.00 O +ATOM 2153 HW1 SOL 717 27.111 0.950 23.551 1.00 0.00 H +ATOM 2154 HW2 SOL 717 25.711 0.120 23.701 1.00 0.00 H +ATOM 2155 OW SOL 718 20.591 9.761 0.031 1.00 0.00 O +ATOM 2156 HW1 SOL 718 21.481 9.311 -0.109 1.00 0.00 H +ATOM 2157 HW2 SOL 718 19.861 9.111 -0.159 1.00 0.00 H +ATOM 2158 OW SOL 719 2.051 14.171 28.151 1.00 0.00 O +ATOM 2159 HW1 SOL 719 1.461 14.231 28.951 1.00 0.00 H +ATOM 2160 HW2 SOL 719 1.901 13.291 27.691 1.00 0.00 H +ATOM 2161 OW SOL 720 24.601 7.290 21.321 1.00 0.00 O +ATOM 2162 HW1 SOL 720 24.841 7.980 20.641 1.00 0.00 H +ATOM 2163 HW2 SOL 720 23.821 7.620 21.861 1.00 0.00 H +ATOM 2164 OW SOL 721 0.201 3.450 28.061 1.00 0.00 O +ATOM 2165 HW1 SOL 721 -0.659 2.950 27.931 1.00 0.00 H +ATOM 2166 HW2 SOL 721 0.821 2.910 28.621 1.00 0.00 H +ATOM 2167 OW SOL 722 29.031 7.010 22.911 1.00 0.00 O +ATOM 2168 HW1 SOL 722 29.291 6.970 23.871 1.00 0.00 H +ATOM 2169 HW2 SOL 722 28.181 6.500 22.771 1.00 0.00 H +ATOM 2170 OW SOL 723 19.381 8.110 26.511 1.00 0.00 O +ATOM 2171 HW1 SOL 723 20.371 7.990 26.601 1.00 0.00 H +ATOM 2172 HW2 SOL 723 19.141 9.060 26.721 1.00 0.00 H +ATOM 2173 OW SOL 724 27.271 3.480 20.571 1.00 0.00 O +ATOM 2174 HW1 SOL 724 27.861 4.110 20.081 1.00 0.00 H +ATOM 2175 HW2 SOL 724 27.461 2.540 20.281 1.00 0.00 H +ATOM 2176 OW SOL 725 24.121 1.960 27.471 1.00 0.00 O +ATOM 2177 HW1 SOL 725 24.071 1.910 28.471 1.00 0.00 H +ATOM 2178 HW2 SOL 725 24.141 2.920 27.181 1.00 0.00 H +ATOM 2179 OW SOL 726 28.701 14.561 23.391 1.00 0.00 O +ATOM 2180 HW1 SOL 726 28.241 15.281 22.871 1.00 0.00 H +ATOM 2181 HW2 SOL 726 28.661 14.761 24.371 1.00 0.00 H +ATOM 2182 OW SOL 727 22.131 18.011 27.151 1.00 0.00 O +ATOM 2183 HW1 SOL 727 22.631 17.151 27.211 1.00 0.00 H +ATOM 2184 HW2 SOL 727 22.781 18.781 27.121 1.00 0.00 H +ATOM 2185 OW SOL 728 21.831 9.431 21.041 1.00 0.00 O +ATOM 2186 HW1 SOL 728 22.651 9.821 20.621 1.00 0.00 H +ATOM 2187 HW2 SOL 728 21.561 8.611 20.551 1.00 0.00 H +ATOM 2188 OW SOL 729 29.731 17.761 20.991 1.00 0.00 O +ATOM 2189 HW1 SOL 729 29.131 17.141 21.491 1.00 0.00 H +ATOM 2190 HW2 SOL 729 30.041 17.321 20.141 1.00 0.00 H +ATOM 2191 OW SOL 730 23.261 17.431 21.851 1.00 0.00 O +ATOM 2192 HW1 SOL 730 23.591 17.821 22.711 1.00 0.00 H +ATOM 2193 HW2 SOL 730 24.021 17.361 21.201 1.00 0.00 H +ATOM 2194 OW SOL 731 21.111 17.851 31.031 1.00 0.00 O +ATOM 2195 HW1 SOL 731 21.681 17.201 31.531 1.00 0.00 H +ATOM 2196 HW2 SOL 731 20.951 17.521 30.101 1.00 0.00 H +ATOM 2197 OW SOL 732 28.021 16.981 27.661 1.00 0.00 O +ATOM 2198 HW1 SOL 732 28.821 16.411 27.871 1.00 0.00 H +ATOM 2199 HW2 SOL 732 27.531 16.581 26.891 1.00 0.00 H +ATOM 2200 OW SOL 733 22.441 7.000 23.421 1.00 0.00 O +ATOM 2201 HW1 SOL 733 22.891 6.100 23.391 1.00 0.00 H +ATOM 2202 HW2 SOL 733 21.501 6.890 23.751 1.00 0.00 H +ATOM 2203 OW SOL 734 24.761 1.220 19.791 1.00 0.00 O +ATOM 2204 HW1 SOL 734 25.741 1.000 19.861 1.00 0.00 H +ATOM 2205 HW2 SOL 734 24.451 1.050 18.861 1.00 0.00 H +ATOM 2206 OW SOL 735 0.901 5.900 1.721 1.00 0.00 O +ATOM 2207 HW1 SOL 735 1.181 5.470 2.571 1.00 0.00 H +ATOM 2208 HW2 SOL 735 1.151 6.860 1.731 1.00 0.00 H +ATOM 2209 OW SOL 736 26.651 14.021 27.861 1.00 0.00 O +ATOM 2210 HW1 SOL 736 27.551 14.161 27.441 1.00 0.00 H +ATOM 2211 HW2 SOL 736 25.941 14.041 27.151 1.00 0.00 H +ATOM 2212 OW SOL 737 27.841 5.030 27.611 1.00 0.00 O +ATOM 2213 HW1 SOL 737 27.591 4.940 26.651 1.00 0.00 H +ATOM 2214 HW2 SOL 737 28.321 4.210 27.921 1.00 0.00 H +ATOM 2215 OW SOL 738 24.011 0.640 23.741 1.00 0.00 O +ATOM 2216 HW1 SOL 738 23.201 0.650 24.321 1.00 0.00 H +ATOM 2217 HW2 SOL 738 24.041 1.470 23.191 1.00 0.00 H +ATOM 2218 OW SOL 739 1.731 11.881 19.031 1.00 0.00 O +ATOM 2219 HW1 SOL 739 2.051 11.121 19.601 1.00 0.00 H +ATOM 2220 HW2 SOL 739 0.811 12.151 19.331 1.00 0.00 H +ATOM 2221 OW SOL 740 21.591 0.350 20.331 1.00 0.00 O +ATOM 2222 HW1 SOL 740 22.081 1.190 20.121 1.00 0.00 H +ATOM 2223 HW2 SOL 740 22.211 -0.300 20.781 1.00 0.00 H +ATOM 2224 OW SOL 741 27.971 2.360 23.421 1.00 0.00 O +ATOM 2225 HW1 SOL 741 27.491 2.770 22.641 1.00 0.00 H +ATOM 2226 HW2 SOL 741 28.961 2.340 23.231 1.00 0.00 H +ATOM 2227 OW SOL 742 30.891 15.701 26.551 1.00 0.00 O +ATOM 2228 HW1 SOL 742 31.101 16.441 25.901 1.00 0.00 H +ATOM 2229 HW2 SOL 742 31.571 15.701 27.281 1.00 0.00 H +ATOM 2230 OW SOL 743 23.211 11.521 26.031 1.00 0.00 O +ATOM 2231 HW1 SOL 743 22.501 11.251 26.681 1.00 0.00 H +ATOM 2232 HW2 SOL 743 22.951 11.241 25.101 1.00 0.00 H +ATOM 2233 OW SOL 744 0.101 17.971 24.531 1.00 0.00 O +ATOM 2234 HW1 SOL 744 0.541 18.611 23.891 1.00 0.00 H +ATOM 2235 HW2 SOL 744 -0.399 18.491 25.231 1.00 0.00 H +ATOM 2236 OW SOL 745 28.941 5.490 18.781 1.00 0.00 O +ATOM 2237 HW1 SOL 745 28.531 6.310 18.391 1.00 0.00 H +ATOM 2238 HW2 SOL 745 29.581 5.750 19.511 1.00 0.00 H +ATOM 2239 OW SOL 746 27.281 4.540 25.041 1.00 0.00 O +ATOM 2240 HW1 SOL 746 26.961 5.260 24.421 1.00 0.00 H +ATOM 2241 HW2 SOL 746 27.521 3.730 24.511 1.00 0.00 H +ATOM 2242 OW SOL 747 28.791 0.390 26.151 1.00 0.00 O +ATOM 2243 HW1 SOL 747 28.071 0.440 25.461 1.00 0.00 H +ATOM 2244 HW2 SOL 747 28.551 -0.300 26.841 1.00 0.00 H +ATOM 2245 OW SOL 748 23.501 13.851 20.361 1.00 0.00 O +ATOM 2246 HW1 SOL 748 22.631 13.701 20.831 1.00 0.00 H +ATOM 2247 HW2 SOL 748 23.331 14.111 19.411 1.00 0.00 H +ATOM 2248 OW SOL 749 1.291 5.750 19.401 1.00 0.00 O +ATOM 2249 HW1 SOL 749 0.751 5.540 20.211 1.00 0.00 H +ATOM 2250 HW2 SOL 749 2.201 5.340 19.491 1.00 0.00 H +ATOM 2251 OW SOL 750 23.891 2.560 21.901 1.00 0.00 O +ATOM 2252 HW1 SOL 750 24.161 1.970 21.151 1.00 0.00 H +ATOM 2253 HW2 SOL 750 23.891 3.510 21.591 1.00 0.00 H +ATOM 2254 OW SOL 751 29.731 11.951 29.621 1.00 0.00 O +ATOM 2255 HW1 SOL 751 29.331 12.391 30.431 1.00 0.00 H +ATOM 2256 HW2 SOL 751 29.321 12.321 28.791 1.00 0.00 H +ATOM 2257 OW SOL 752 25.671 10.501 22.301 1.00 0.00 O +ATOM 2258 HW1 SOL 752 25.531 10.571 23.291 1.00 0.00 H +ATOM 2259 HW2 SOL 752 26.511 9.991 22.121 1.00 0.00 H +ATOM 2260 OW SOL 753 22.721 8.130 31.131 1.00 0.00 O +ATOM 2261 HW1 SOL 753 23.581 8.250 31.631 1.00 0.00 H +ATOM 2262 HW2 SOL 753 22.301 7.260 31.401 1.00 0.00 H +ATOM 2263 OW SOL 754 0.131 3.860 0.011 1.00 0.00 O +ATOM 2264 HW1 SOL 754 0.341 4.600 0.651 1.00 0.00 H +ATOM 2265 HW2 SOL 754 -0.759 4.030 -0.419 1.00 0.00 H +ATOM 2266 OW SOL 755 22.291 11.001 23.631 1.00 0.00 O +ATOM 2267 HW1 SOL 755 22.221 11.831 23.071 1.00 0.00 H +ATOM 2268 HW2 SOL 755 22.331 10.201 23.031 1.00 0.00 H +ATOM 2269 OW SOL 756 24.281 5.370 27.271 1.00 0.00 O +ATOM 2270 HW1 SOL 756 24.401 6.030 26.531 1.00 0.00 H +ATOM 2271 HW2 SOL 756 24.741 5.710 28.101 1.00 0.00 H +ATOM 2272 OW SOL 757 31.141 13.481 22.501 1.00 0.00 O +ATOM 2273 HW1 SOL 757 31.641 14.251 22.901 1.00 0.00 H +ATOM 2274 HW2 SOL 757 30.191 13.501 22.821 1.00 0.00 H +ATOM 2275 OW SOL 758 0.111 14.451 30.041 1.00 0.00 O +ATOM 2276 HW1 SOL 758 0.581 14.581 30.911 1.00 0.00 H +ATOM 2277 HW2 SOL 758 -0.549 13.711 30.131 1.00 0.00 H +ATOM 2278 OW SOL 759 24.351 8.700 28.911 1.00 0.00 O +ATOM 2279 HW1 SOL 759 24.791 9.590 28.821 1.00 0.00 H +ATOM 2280 HW2 SOL 759 23.721 8.700 29.681 1.00 0.00 H +ATOM 2281 OW SOL 760 0.991 8.620 29.071 1.00 0.00 O +ATOM 2282 HW1 SOL 760 0.241 8.620 28.411 1.00 0.00 H +ATOM 2283 HW2 SOL 760 1.361 7.700 29.161 1.00 0.00 H +ATOM 2284 OW SOL 761 30.711 5.250 21.371 1.00 0.00 O +ATOM 2285 HW1 SOL 761 30.841 4.410 21.911 1.00 0.00 H +ATOM 2286 HW2 SOL 761 30.421 5.990 21.971 1.00 0.00 H +ATOM 2287 OW SOL 762 21.691 2.130 30.931 1.00 0.00 O +ATOM 2288 HW1 SOL 762 21.461 2.500 31.831 1.00 0.00 H +ATOM 2289 HW2 SOL 762 21.391 1.180 30.871 1.00 0.00 H +ATOM 2290 OW SOL 763 25.941 6.340 29.261 1.00 0.00 O +ATOM 2291 HW1 SOL 763 26.531 6.080 28.501 1.00 0.00 H +ATOM 2292 HW2 SOL 763 25.661 7.300 29.151 1.00 0.00 H +ATOM 2293 OW SOL 764 21.691 0.630 24.801 1.00 0.00 O +ATOM 2294 HW1 SOL 764 21.581 1.570 25.131 1.00 0.00 H +ATOM 2295 HW2 SOL 764 21.641 0.000 25.571 1.00 0.00 H +ATOM 2296 OW SOL 765 28.851 7.660 28.281 1.00 0.00 O +ATOM 2297 HW1 SOL 765 29.001 7.870 29.241 1.00 0.00 H +ATOM 2298 HW2 SOL 765 28.551 6.710 28.191 1.00 0.00 H +ATOM 2299 OW SOL 766 0.421 8.380 19.041 1.00 0.00 O +ATOM 2300 HW1 SOL 766 0.761 7.450 19.191 1.00 0.00 H +ATOM 2301 HW2 SOL 766 0.601 8.650 18.091 1.00 0.00 H +ATOM 2302 OW SOL 767 29.301 13.331 27.111 1.00 0.00 O +ATOM 2303 HW1 SOL 767 29.371 12.491 26.561 1.00 0.00 H +ATOM 2304 HW2 SOL 767 29.921 14.021 26.751 1.00 0.00 H +ATOM 2305 OW SOL 768 21.811 8.100 28.111 1.00 0.00 O +ATOM 2306 HW1 SOL 768 22.741 8.460 28.161 1.00 0.00 H +ATOM 2307 HW2 SOL 768 21.751 7.250 28.631 1.00 0.00 H +ATOM 2308 OW SOL 769 22.011 5.090 28.681 1.00 0.00 O +ATOM 2309 HW1 SOL 769 21.491 4.260 28.511 1.00 0.00 H +ATOM 2310 HW2 SOL 769 22.781 5.140 28.041 1.00 0.00 H +ATOM 2311 OW SOL 770 18.701 13.261 20.621 1.00 0.00 O +ATOM 2312 HW1 SOL 770 17.771 13.471 20.311 1.00 0.00 H +ATOM 2313 HW2 SOL 770 18.801 12.271 20.751 1.00 0.00 H +ATOM 2314 OW SOL 771 19.501 18.011 27.891 1.00 0.00 O +ATOM 2315 HW1 SOL 771 19.081 17.151 27.621 1.00 0.00 H +ATOM 2316 HW2 SOL 771 20.441 18.041 27.551 1.00 0.00 H +ATOM 2317 OW SOL 772 23.661 15.681 27.721 1.00 0.00 O +ATOM 2318 HW1 SOL 772 24.321 16.421 27.811 1.00 0.00 H +ATOM 2319 HW2 SOL 772 24.101 14.891 27.301 1.00 0.00 H +ATOM 2320 OW SOL 773 28.641 7.960 31.001 1.00 0.00 O +ATOM 2321 HW1 SOL 773 29.051 7.640 31.861 1.00 0.00 H +ATOM 2322 HW2 SOL 773 27.681 7.690 30.971 1.00 0.00 H +ATOM 2323 OW SOL 774 19.021 5.440 29.761 1.00 0.00 O +ATOM 2324 HW1 SOL 774 19.871 5.110 29.351 1.00 0.00 H +ATOM 2325 HW2 SOL 774 19.151 5.590 30.741 1.00 0.00 H +ATOM 2326 OW SOL 775 26.771 5.720 21.871 1.00 0.00 O +ATOM 2327 HW1 SOL 775 26.841 4.830 21.411 1.00 0.00 H +ATOM 2328 HW2 SOL 775 25.831 6.060 21.791 1.00 0.00 H +ATOM 2329 OW SOL 776 25.331 4.640 0.081 1.00 0.00 O +ATOM 2330 HW1 SOL 776 24.991 3.750 -0.219 1.00 0.00 H +ATOM 2331 HW2 SOL 776 25.591 5.180 -0.719 1.00 0.00 H +ATOM 2332 OW SOL 777 23.351 5.000 20.531 1.00 0.00 O +ATOM 2333 HW1 SOL 777 23.961 5.800 20.571 1.00 0.00 H +ATOM 2334 HW2 SOL 777 22.401 5.310 20.601 1.00 0.00 H +ATOM 2335 OW SOL 778 19.451 12.581 28.841 1.00 0.00 O +ATOM 2336 HW1 SOL 778 19.401 12.571 29.841 1.00 0.00 H +ATOM 2337 HW2 SOL 778 18.621 12.171 28.461 1.00 0.00 H +ATOM 2338 OW SOL 779 1.271 15.731 23.391 1.00 0.00 O +ATOM 2339 HW1 SOL 779 1.941 15.851 22.651 1.00 0.00 H +ATOM 2340 HW2 SOL 779 0.871 16.621 23.621 1.00 0.00 H +ATOM 2341 OW SOL 780 0.191 9.270 25.341 1.00 0.00 O +ATOM 2342 HW1 SOL 780 0.791 8.460 25.361 1.00 0.00 H +ATOM 2343 HW2 SOL 780 0.591 9.960 24.741 1.00 0.00 H +ATOM 2344 OW SOL 781 25.341 16.161 20.161 1.00 0.00 O +ATOM 2345 HW1 SOL 781 25.431 16.261 19.171 1.00 0.00 H +ATOM 2346 HW2 SOL 781 24.941 15.271 20.371 1.00 0.00 H +ATOM 2347 OW SOL 782 21.251 3.260 25.821 1.00 0.00 O +ATOM 2348 HW1 SOL 782 20.461 3.770 25.481 1.00 0.00 H +ATOM 2349 HW2 SOL 782 21.161 3.110 26.801 1.00 0.00 H +ATOM 2350 OW SOL 783 30.561 16.121 18.931 1.00 0.00 O +ATOM 2351 HW1 SOL 783 30.621 15.191 19.301 1.00 0.00 H +ATOM 2352 HW2 SOL 783 29.971 16.121 18.131 1.00 0.00 H +ATOM 2353 OW SOL 784 26.841 10.021 1.111 1.00 0.00 O +ATOM 2354 HW1 SOL 784 27.241 10.011 0.191 1.00 0.00 H +ATOM 2355 HW2 SOL 784 26.941 10.941 1.511 1.00 0.00 H +ATOM 2356 OW SOL 785 27.781 9.100 21.531 1.00 0.00 O +ATOM 2357 HW1 SOL 785 28.411 9.480 20.851 1.00 0.00 H +ATOM 2358 HW2 SOL 785 28.181 8.270 21.921 1.00 0.00 H +ATOM 2359 OW SOL 786 29.011 10.981 25.581 1.00 0.00 O +ATOM 2360 HW1 SOL 786 28.311 10.511 26.121 1.00 0.00 H +ATOM 2361 HW2 SOL 786 29.601 10.301 25.151 1.00 0.00 H +ATOM 2362 OW SOL 787 28.761 2.360 28.331 1.00 0.00 O +ATOM 2363 HW1 SOL 787 28.681 2.000 27.401 1.00 0.00 H +ATOM 2364 HW2 SOL 787 28.741 1.600 28.981 1.00 0.00 H +ATOM 2365 OW SOL 788 24.521 14.871 23.531 1.00 0.00 O +ATOM 2366 HW1 SOL 788 24.941 14.291 22.831 1.00 0.00 H +ATOM 2367 HW2 SOL 788 24.081 15.661 23.091 1.00 0.00 H +ATOM 2368 OW SOL 789 21.171 13.481 21.521 1.00 0.00 O +ATOM 2369 HW1 SOL 789 20.211 13.491 21.251 1.00 0.00 H +ATOM 2370 HW2 SOL 789 21.291 14.011 22.361 1.00 0.00 H +ATOM 2371 OW SOL 790 19.371 3.450 18.951 1.00 0.00 O +ATOM 2372 HW1 SOL 790 18.451 3.170 18.661 1.00 0.00 H +ATOM 2373 HW2 SOL 790 19.681 4.220 18.391 1.00 0.00 H +ATOM 2374 OW SOL 791 19.341 1.660 21.801 1.00 0.00 O +ATOM 2375 HW1 SOL 791 19.171 2.490 21.261 1.00 0.00 H +ATOM 2376 HW2 SOL 791 20.241 1.290 21.581 1.00 0.00 H +ATOM 2377 OW SOL 792 30.451 13.351 19.811 1.00 0.00 O +ATOM 2378 HW1 SOL 792 29.461 13.241 19.831 1.00 0.00 H +ATOM 2379 HW2 SOL 792 30.791 13.501 20.741 1.00 0.00 H +ATOM 2380 OW SOL 793 30.871 3.250 23.111 1.00 0.00 O +ATOM 2381 HW1 SOL 793 31.521 2.510 23.001 1.00 0.00 H +ATOM 2382 HW2 SOL 793 31.071 3.750 23.951 1.00 0.00 H +ATOM 2383 OW SOL 794 24.561 7.450 25.141 1.00 0.00 O +ATOM 2384 HW1 SOL 794 25.061 8.300 24.951 1.00 0.00 H +ATOM 2385 HW2 SOL 794 23.681 7.470 24.661 1.00 0.00 H +ATOM 2386 OW SOL 795 27.211 13.741 18.781 1.00 0.00 O +ATOM 2387 HW1 SOL 795 26.751 13.891 19.661 1.00 0.00 H +ATOM 2388 HW2 SOL 795 27.651 14.591 18.481 1.00 0.00 H +ATOM 2389 OW SOL 796 25.231 17.901 28.151 1.00 0.00 O +ATOM 2390 HW1 SOL 796 24.771 18.781 28.021 1.00 0.00 H +ATOM 2391 HW2 SOL 796 26.221 18.021 28.081 1.00 0.00 H +ATOM 2392 OW SOL 797 27.211 9.561 27.231 1.00 0.00 O +ATOM 2393 HW1 SOL 797 27.751 8.871 27.711 1.00 0.00 H +ATOM 2394 HW2 SOL 797 26.891 10.251 27.891 1.00 0.00 H +ATOM 2395 OW SOL 798 29.451 9.841 19.491 1.00 0.00 O +ATOM 2396 HW1 SOL 798 29.221 10.371 18.671 1.00 0.00 H +ATOM 2397 HW2 SOL 798 30.261 9.281 19.301 1.00 0.00 H +ATOM 2398 OW SOL 799 19.411 12.401 25.151 1.00 0.00 O +ATOM 2399 HW1 SOL 799 19.401 11.931 26.031 1.00 0.00 H +ATOM 2400 HW2 SOL 799 20.231 12.121 24.641 1.00 0.00 H +ATOM 2401 OW SOL 800 22.901 4.240 23.821 1.00 0.00 O +ATOM 2402 HW1 SOL 800 23.201 3.520 23.201 1.00 0.00 H +ATOM 2403 HW2 SOL 800 22.511 3.840 24.651 1.00 0.00 H +ATOM 2404 OW SOL 801 26.741 15.861 25.491 1.00 0.00 O +ATOM 2405 HW1 SOL 801 27.061 15.961 24.551 1.00 0.00 H +ATOM 2406 HW2 SOL 801 25.951 15.241 25.511 1.00 0.00 H +ATOM 2407 OW SOL 802 1.631 2.140 29.741 1.00 0.00 O +ATOM 2408 HW1 SOL 802 2.151 1.490 30.291 1.00 0.00 H +ATOM 2409 HW2 SOL 802 1.141 2.770 30.351 1.00 0.00 H +ATOM 2410 OW SOL 803 28.631 0.340 30.161 1.00 0.00 O +ATOM 2411 HW1 SOL 803 28.001 -0.380 29.851 1.00 0.00 H +ATOM 2412 HW2 SOL 803 29.561 -0.020 30.161 1.00 0.00 H +ATOM 2413 OW SOL 804 26.321 13.301 21.631 1.00 0.00 O +ATOM 2414 HW1 SOL 804 25.861 12.431 21.801 1.00 0.00 H +ATOM 2415 HW2 SOL 804 27.231 13.271 22.041 1.00 0.00 H +ATOM 2416 OW SOL 805 0.911 0.520 20.301 1.00 0.00 O +ATOM 2417 HW1 SOL 805 1.261 0.110 19.461 1.00 0.00 H +ATOM 2418 HW2 SOL 805 0.011 0.140 20.501 1.00 0.00 H +ATOM 2419 OW SOL 806 0.391 4.530 25.531 1.00 0.00 O +ATOM 2420 HW1 SOL 806 -0.199 5.330 25.571 1.00 0.00 H +ATOM 2421 HW2 SOL 806 0.541 4.180 26.461 1.00 0.00 H +ATOM 2422 OW SOL 807 19.011 10.771 21.621 1.00 0.00 O +ATOM 2423 HW1 SOL 807 20.001 10.661 21.531 1.00 0.00 H +ATOM 2424 HW2 SOL 807 18.611 9.911 21.941 1.00 0.00 H +ATOM 2425 OW SOL 808 27.371 16.461 21.991 1.00 0.00 O +ATOM 2426 HW1 SOL 808 26.601 16.111 21.451 1.00 0.00 H +ATOM 2427 HW2 SOL 808 27.051 17.171 22.611 1.00 0.00 H +ATOM 2428 OW SOL 809 20.921 24.901 1.130 1.00 0.00 O +ATOM 2429 HW1 SOL 809 19.991 24.881 1.500 1.00 0.00 H +ATOM 2430 HW2 SOL 809 20.931 24.511 0.210 1.00 0.00 H +ATOM 2431 OW SOL 810 20.871 21.371 9.961 1.00 0.00 O +ATOM 2432 HW1 SOL 810 21.221 21.201 10.881 1.00 0.00 H +ATOM 2433 HW2 SOL 810 19.991 20.921 9.841 1.00 0.00 H +ATOM 2434 OW SOL 811 18.811 22.301 6.470 1.00 0.00 O +ATOM 2435 HW1 SOL 811 17.991 22.731 6.860 1.00 0.00 H +ATOM 2436 HW2 SOL 811 18.531 21.571 5.840 1.00 0.00 H +ATOM 2437 OW SOL 812 29.971 25.651 7.170 1.00 0.00 O +ATOM 2438 HW1 SOL 812 30.541 26.431 6.920 1.00 0.00 H +ATOM 2439 HW2 SOL 812 29.371 25.911 7.930 1.00 0.00 H +ATOM 2440 OW SOL 813 26.301 30.061 10.231 1.00 0.00 O +ATOM 2441 HW1 SOL 813 25.521 30.231 10.831 1.00 0.00 H +ATOM 2442 HW2 SOL 813 26.641 30.931 9.871 1.00 0.00 H +ATOM 2443 OW SOL 814 27.121 26.601 18.231 1.00 0.00 O +ATOM 2444 HW1 SOL 814 27.081 27.361 18.881 1.00 0.00 H +ATOM 2445 HW2 SOL 814 27.341 26.961 17.321 1.00 0.00 H +ATOM 2446 OW SOL 815 25.471 28.741 6.650 1.00 0.00 O +ATOM 2447 HW1 SOL 815 26.161 28.581 7.350 1.00 0.00 H +ATOM 2448 HW2 SOL 815 24.741 29.311 7.030 1.00 0.00 H +ATOM 2449 OW SOL 816 23.001 22.541 14.991 1.00 0.00 O +ATOM 2450 HW1 SOL 816 23.821 21.981 15.081 1.00 0.00 H +ATOM 2451 HW2 SOL 816 22.191 21.961 15.031 1.00 0.00 H +ATOM 2452 OW SOL 817 21.021 29.531 8.860 1.00 0.00 O +ATOM 2453 HW1 SOL 817 21.161 28.691 9.380 1.00 0.00 H +ATOM 2454 HW2 SOL 817 20.471 30.171 9.410 1.00 0.00 H +ATOM 2455 OW SOL 818 24.681 28.261 1.230 1.00 0.00 O +ATOM 2456 HW1 SOL 818 24.751 29.101 0.690 1.00 0.00 H +ATOM 2457 HW2 SOL 818 25.141 28.391 2.110 1.00 0.00 H +ATOM 2458 OW SOL 819 19.841 25.051 5.630 1.00 0.00 O +ATOM 2459 HW1 SOL 819 19.391 24.171 5.800 1.00 0.00 H +ATOM 2460 HW2 SOL 819 19.831 25.591 6.470 1.00 0.00 H +ATOM 2461 OW SOL 820 19.751 25.991 15.971 1.00 0.00 O +ATOM 2462 HW1 SOL 820 20.631 25.861 16.421 1.00 0.00 H +ATOM 2463 HW2 SOL 820 19.621 26.961 15.751 1.00 0.00 H +ATOM 2464 OW SOL 821 24.751 1.041 7.260 1.00 0.00 O +ATOM 2465 HW1 SOL 821 24.261 0.171 7.350 1.00 0.00 H +ATOM 2466 HW2 SOL 821 24.521 1.471 6.390 1.00 0.00 H +ATOM 2467 OW SOL 822 26.711 18.661 5.020 1.00 0.00 O +ATOM 2468 HW1 SOL 822 27.111 19.571 4.930 1.00 0.00 H +ATOM 2469 HW2 SOL 822 25.711 18.741 5.080 1.00 0.00 H +ATOM 2470 OW SOL 823 20.591 28.381 12.641 1.00 0.00 O +ATOM 2471 HW1 SOL 823 21.481 27.931 12.501 1.00 0.00 H +ATOM 2472 HW2 SOL 823 19.861 27.731 12.451 1.00 0.00 H +ATOM 2473 OW SOL 824 21.791 21.131 18.011 1.00 0.00 O +ATOM 2474 HW1 SOL 824 22.501 21.841 18.071 1.00 0.00 H +ATOM 2475 HW2 SOL 824 20.911 21.521 18.291 1.00 0.00 H +ATOM 2476 OW SOL 825 24.601 25.911 2.700 1.00 0.00 O +ATOM 2477 HW1 SOL 825 24.841 26.601 2.020 1.00 0.00 H +ATOM 2478 HW2 SOL 825 23.821 26.241 3.240 1.00 0.00 H +ATOM 2479 OW SOL 826 0.201 22.071 9.441 1.00 0.00 O +ATOM 2480 HW1 SOL 826 -0.659 21.571 9.311 1.00 0.00 H +ATOM 2481 HW2 SOL 826 0.821 21.531 10.001 1.00 0.00 H +ATOM 2482 OW SOL 827 26.691 24.671 14.651 1.00 0.00 O +ATOM 2483 HW1 SOL 827 26.221 24.641 15.541 1.00 0.00 H +ATOM 2484 HW2 SOL 827 26.181 24.121 13.991 1.00 0.00 H +ATOM 2485 OW SOL 828 28.351 27.521 15.721 1.00 0.00 O +ATOM 2486 HW1 SOL 828 28.811 26.681 15.431 1.00 0.00 H +ATOM 2487 HW2 SOL 828 27.791 27.861 14.971 1.00 0.00 H +ATOM 2488 OW SOL 829 28.531 22.721 12.421 1.00 0.00 O +ATOM 2489 HW1 SOL 829 27.761 23.061 12.961 1.00 0.00 H +ATOM 2490 HW2 SOL 829 28.191 22.211 11.631 1.00 0.00 H +ATOM 2491 OW SOL 830 29.031 25.631 4.290 1.00 0.00 O +ATOM 2492 HW1 SOL 830 29.291 25.591 5.250 1.00 0.00 H +ATOM 2493 HW2 SOL 830 28.181 25.121 4.150 1.00 0.00 H +ATOM 2494 OW SOL 831 19.381 26.731 7.890 1.00 0.00 O +ATOM 2495 HW1 SOL 831 20.371 26.611 7.980 1.00 0.00 H +ATOM 2496 HW2 SOL 831 19.141 27.681 8.100 1.00 0.00 H +ATOM 2497 OW SOL 832 27.271 22.101 1.950 1.00 0.00 O +ATOM 2498 HW1 SOL 832 27.861 22.731 1.460 1.00 0.00 H +ATOM 2499 HW2 SOL 832 27.461 21.161 1.660 1.00 0.00 H +ATOM 2500 OW SOL 833 24.121 20.581 8.850 1.00 0.00 O +ATOM 2501 HW1 SOL 833 24.071 20.531 9.850 1.00 0.00 H +ATOM 2502 HW2 SOL 833 24.141 21.541 8.560 1.00 0.00 H +ATOM 2503 OW SOL 834 21.831 28.051 2.420 1.00 0.00 O +ATOM 2504 HW1 SOL 834 22.651 28.441 2.000 1.00 0.00 H +ATOM 2505 HW2 SOL 834 21.561 27.231 1.930 1.00 0.00 H +ATOM 2506 OW SOL 835 20.641 21.471 14.981 1.00 0.00 O +ATOM 2507 HW1 SOL 835 19.841 22.071 14.851 1.00 0.00 H +ATOM 2508 HW2 SOL 835 20.541 20.981 15.841 1.00 0.00 H +ATOM 2509 OW SOL 836 22.441 25.621 4.800 1.00 0.00 O +ATOM 2510 HW1 SOL 836 22.891 24.721 4.770 1.00 0.00 H +ATOM 2511 HW2 SOL 836 21.501 25.511 5.130 1.00 0.00 H +ATOM 2512 OW SOL 837 24.761 19.841 1.170 1.00 0.00 O +ATOM 2513 HW1 SOL 837 25.741 19.621 1.240 1.00 0.00 H +ATOM 2514 HW2 SOL 837 24.451 19.671 0.240 1.00 0.00 H +ATOM 2515 OW SOL 838 26.431 21.261 17.491 1.00 0.00 O +ATOM 2516 HW1 SOL 838 27.101 20.651 17.921 1.00 0.00 H +ATOM 2517 HW2 SOL 838 25.701 21.451 18.141 1.00 0.00 H +ATOM 2518 OW SOL 839 27.841 23.651 8.990 1.00 0.00 O +ATOM 2519 HW1 SOL 839 27.591 23.561 8.030 1.00 0.00 H +ATOM 2520 HW2 SOL 839 28.321 22.831 9.300 1.00 0.00 H +ATOM 2521 OW SOL 840 24.011 19.261 5.120 1.00 0.00 O +ATOM 2522 HW1 SOL 840 23.201 19.271 5.700 1.00 0.00 H +ATOM 2523 HW2 SOL 840 24.041 20.091 4.570 1.00 0.00 H +ATOM 2524 OW SOL 841 21.591 18.971 1.710 1.00 0.00 O +ATOM 2525 HW1 SOL 841 22.081 19.811 1.500 1.00 0.00 H +ATOM 2526 HW2 SOL 841 22.211 18.321 2.160 1.00 0.00 H +ATOM 2527 OW SOL 842 27.971 20.981 4.800 1.00 0.00 O +ATOM 2528 HW1 SOL 842 27.491 21.391 4.020 1.00 0.00 H +ATOM 2529 HW2 SOL 842 28.961 20.961 4.610 1.00 0.00 H +ATOM 2530 OW SOL 843 29.381 25.451 14.641 1.00 0.00 O +ATOM 2531 HW1 SOL 843 28.581 24.841 14.671 1.00 0.00 H +ATOM 2532 HW2 SOL 843 30.191 24.921 14.401 1.00 0.00 H +ATOM 2533 OW SOL 844 23.211 30.141 7.410 1.00 0.00 O +ATOM 2534 HW1 SOL 844 22.501 29.871 8.060 1.00 0.00 H +ATOM 2535 HW2 SOL 844 22.951 29.861 6.480 1.00 0.00 H +ATOM 2536 OW SOL 845 28.941 24.111 0.160 1.00 0.00 O +ATOM 2537 HW1 SOL 845 28.531 24.931 -0.230 1.00 0.00 H +ATOM 2538 HW2 SOL 845 29.581 24.371 0.890 1.00 0.00 H +ATOM 2539 OW SOL 846 19.401 24.181 13.861 1.00 0.00 O +ATOM 2540 HW1 SOL 846 20.321 24.171 13.451 1.00 0.00 H +ATOM 2541 HW2 SOL 846 19.341 24.921 14.531 1.00 0.00 H +ATOM 2542 OW SOL 847 24.231 20.841 11.471 1.00 0.00 O +ATOM 2543 HW1 SOL 847 24.611 20.001 11.841 1.00 0.00 H +ATOM 2544 HW2 SOL 847 23.351 21.031 11.911 1.00 0.00 H +ATOM 2545 OW SOL 848 27.281 23.161 6.420 1.00 0.00 O +ATOM 2546 HW1 SOL 848 26.961 23.881 5.800 1.00 0.00 H +ATOM 2547 HW2 SOL 848 27.521 22.351 5.890 1.00 0.00 H +ATOM 2548 OW SOL 849 28.791 19.011 7.530 1.00 0.00 O +ATOM 2549 HW1 SOL 849 28.071 19.061 6.840 1.00 0.00 H +ATOM 2550 HW2 SOL 849 28.551 18.321 8.220 1.00 0.00 H +ATOM 2551 OW SOL 850 23.891 21.181 3.280 1.00 0.00 O +ATOM 2552 HW1 SOL 850 24.161 20.591 2.530 1.00 0.00 H +ATOM 2553 HW2 SOL 850 23.891 22.131 2.970 1.00 0.00 H +ATOM 2554 OW SOL 851 27.771 19.511 14.021 1.00 0.00 O +ATOM 2555 HW1 SOL 851 28.021 19.311 13.071 1.00 0.00 H +ATOM 2556 HW2 SOL 851 28.491 20.071 14.441 1.00 0.00 H +ATOM 2557 OW SOL 852 28.421 29.781 17.191 1.00 0.00 O +ATOM 2558 HW1 SOL 852 27.431 29.841 17.291 1.00 0.00 H +ATOM 2559 HW2 SOL 852 28.651 28.981 16.631 1.00 0.00 H +ATOM 2560 OW SOL 853 25.671 29.121 3.680 1.00 0.00 O +ATOM 2561 HW1 SOL 853 25.531 29.191 4.670 1.00 0.00 H +ATOM 2562 HW2 SOL 853 26.511 28.611 3.500 1.00 0.00 H +ATOM 2563 OW SOL 854 22.721 26.751 12.511 1.00 0.00 O +ATOM 2564 HW1 SOL 854 23.581 26.871 13.011 1.00 0.00 H +ATOM 2565 HW2 SOL 854 22.301 25.881 12.781 1.00 0.00 H +ATOM 2566 OW SOL 855 0.131 22.481 12.621 1.00 0.00 O +ATOM 2567 HW1 SOL 855 0.341 23.221 13.261 1.00 0.00 H +ATOM 2568 HW2 SOL 855 -0.759 22.651 12.191 1.00 0.00 H +ATOM 2569 OW SOL 856 22.291 29.621 5.010 1.00 0.00 O +ATOM 2570 HW1 SOL 856 22.221 30.451 4.450 1.00 0.00 H +ATOM 2571 HW2 SOL 856 22.331 28.821 4.410 1.00 0.00 H +ATOM 2572 OW SOL 857 24.281 23.991 8.650 1.00 0.00 O +ATOM 2573 HW1 SOL 857 24.401 24.651 7.910 1.00 0.00 H +ATOM 2574 HW2 SOL 857 24.741 24.331 9.480 1.00 0.00 H +ATOM 2575 OW SOL 858 22.641 26.131 15.981 1.00 0.00 O +ATOM 2576 HW1 SOL 858 23.321 26.681 15.511 1.00 0.00 H +ATOM 2577 HW2 SOL 858 23.041 25.251 16.251 1.00 0.00 H +ATOM 2578 OW SOL 859 28.751 19.671 17.701 1.00 0.00 O +ATOM 2579 HW1 SOL 859 28.811 20.521 17.181 1.00 0.00 H +ATOM 2580 HW2 SOL 859 29.071 18.911 17.131 1.00 0.00 H +ATOM 2581 OW SOL 860 23.661 19.121 17.401 1.00 0.00 O +ATOM 2582 HW1 SOL 860 23.241 18.551 16.701 1.00 0.00 H +ATOM 2583 HW2 SOL 860 23.001 19.811 17.721 1.00 0.00 H +ATOM 2584 OW SOL 861 24.351 27.321 10.291 1.00 0.00 O +ATOM 2585 HW1 SOL 861 24.791 28.211 10.201 1.00 0.00 H +ATOM 2586 HW2 SOL 861 23.721 27.321 11.061 1.00 0.00 H +ATOM 2587 OW SOL 862 0.991 27.241 10.451 1.00 0.00 O +ATOM 2588 HW1 SOL 862 0.241 27.241 9.791 1.00 0.00 H +ATOM 2589 HW2 SOL 862 1.361 26.321 10.541 1.00 0.00 H +ATOM 2590 OW SOL 863 30.711 23.871 2.750 1.00 0.00 O +ATOM 2591 HW1 SOL 863 30.841 23.031 3.290 1.00 0.00 H +ATOM 2592 HW2 SOL 863 30.421 24.611 3.350 1.00 0.00 H +ATOM 2593 OW SOL 864 21.691 20.751 12.311 1.00 0.00 O +ATOM 2594 HW1 SOL 864 21.461 21.121 13.211 1.00 0.00 H +ATOM 2595 HW2 SOL 864 21.391 19.801 12.251 1.00 0.00 H +ATOM 2596 OW SOL 865 18.991 0.491 12.821 1.00 0.00 O +ATOM 2597 HW1 SOL 865 19.521 0.001 13.501 1.00 0.00 H +ATOM 2598 HW2 SOL 865 19.211 1.471 12.871 1.00 0.00 H +ATOM 2599 OW SOL 866 25.941 24.961 10.641 1.00 0.00 O +ATOM 2600 HW1 SOL 866 26.531 24.701 9.881 1.00 0.00 H +ATOM 2601 HW2 SOL 866 25.661 25.921 10.531 1.00 0.00 H +ATOM 2602 OW SOL 867 21.691 19.251 6.180 1.00 0.00 O +ATOM 2603 HW1 SOL 867 21.581 20.191 6.510 1.00 0.00 H +ATOM 2604 HW2 SOL 867 21.641 18.621 6.950 1.00 0.00 H +ATOM 2605 OW SOL 868 28.851 26.281 9.661 1.00 0.00 O +ATOM 2606 HW1 SOL 868 29.001 26.491 10.621 1.00 0.00 H +ATOM 2607 HW2 SOL 868 28.551 25.331 9.571 1.00 0.00 H +ATOM 2608 OW SOL 869 22.121 27.601 18.041 1.00 0.00 O +ATOM 2609 HW1 SOL 869 22.881 28.041 18.521 1.00 0.00 H +ATOM 2610 HW2 SOL 869 22.471 27.131 17.221 1.00 0.00 H +ATOM 2611 OW SOL 870 21.811 26.721 9.491 1.00 0.00 O +ATOM 2612 HW1 SOL 870 22.741 27.081 9.541 1.00 0.00 H +ATOM 2613 HW2 SOL 870 21.751 25.871 10.011 1.00 0.00 H +ATOM 2614 OW SOL 871 22.011 23.711 10.061 1.00 0.00 O +ATOM 2615 HW1 SOL 871 21.491 22.881 9.891 1.00 0.00 H +ATOM 2616 HW2 SOL 871 22.781 23.761 9.421 1.00 0.00 H +ATOM 2617 OW SOL 872 23.731 22.771 18.081 1.00 0.00 O +ATOM 2618 HW1 SOL 872 23.551 23.221 18.961 1.00 0.00 H +ATOM 2619 HW2 SOL 872 24.151 23.421 17.451 1.00 0.00 H +ATOM 2620 OW SOL 873 30.001 22.421 16.781 1.00 0.00 O +ATOM 2621 HW1 SOL 873 29.551 23.051 17.421 1.00 0.00 H +ATOM 2622 HW2 SOL 873 30.931 22.731 16.611 1.00 0.00 H +ATOM 2623 OW SOL 874 30.221 20.691 14.771 1.00 0.00 O +ATOM 2624 HW1 SOL 874 30.221 21.331 15.541 1.00 0.00 H +ATOM 2625 HW2 SOL 874 30.501 21.171 13.941 1.00 0.00 H +ATOM 2626 OW SOL 875 28.641 26.581 12.381 1.00 0.00 O +ATOM 2627 HW1 SOL 875 29.051 26.261 13.241 1.00 0.00 H +ATOM 2628 HW2 SOL 875 27.681 26.311 12.351 1.00 0.00 H +ATOM 2629 OW SOL 876 19.021 24.061 11.141 1.00 0.00 O +ATOM 2630 HW1 SOL 876 19.871 23.731 10.731 1.00 0.00 H +ATOM 2631 HW2 SOL 876 19.151 24.211 12.121 1.00 0.00 H +ATOM 2632 OW SOL 877 20.511 23.821 17.221 1.00 0.00 O +ATOM 2633 HW1 SOL 877 21.101 23.421 16.521 1.00 0.00 H +ATOM 2634 HW2 SOL 877 19.931 24.531 16.811 1.00 0.00 H +ATOM 2635 OW SOL 878 26.771 24.341 3.250 1.00 0.00 O +ATOM 2636 HW1 SOL 878 26.841 23.451 2.790 1.00 0.00 H +ATOM 2637 HW2 SOL 878 25.831 24.681 3.170 1.00 0.00 H +ATOM 2638 OW SOL 879 25.331 23.261 12.691 1.00 0.00 O +ATOM 2639 HW1 SOL 879 24.991 22.371 12.391 1.00 0.00 H +ATOM 2640 HW2 SOL 879 25.591 23.801 11.891 1.00 0.00 H +ATOM 2641 OW SOL 880 23.351 23.621 1.910 1.00 0.00 O +ATOM 2642 HW1 SOL 880 23.961 24.421 1.950 1.00 0.00 H +ATOM 2643 HW2 SOL 880 22.401 23.931 1.980 1.00 0.00 H +ATOM 2644 OW SOL 881 20.211 29.991 14.661 1.00 0.00 O +ATOM 2645 HW1 SOL 881 20.431 29.381 15.421 1.00 0.00 H +ATOM 2646 HW2 SOL 881 20.311 29.501 13.801 1.00 0.00 H +ATOM 2647 OW SOL 882 0.861 29.211 12.341 1.00 0.00 O +ATOM 2648 HW1 SOL 882 1.101 28.581 11.601 1.00 0.00 H +ATOM 2649 HW2 SOL 882 -0.039 29.611 12.161 1.00 0.00 H +ATOM 2650 OW SOL 883 19.451 31.201 10.221 1.00 0.00 O +ATOM 2651 HW1 SOL 883 19.401 31.191 11.221 1.00 0.00 H +ATOM 2652 HW2 SOL 883 18.621 30.791 9.841 1.00 0.00 H +ATOM 2653 OW SOL 884 27.651 19.481 1.330 1.00 0.00 O +ATOM 2654 HW1 SOL 884 28.161 19.491 0.470 1.00 0.00 H +ATOM 2655 HW2 SOL 884 28.211 19.061 2.040 1.00 0.00 H +ATOM 2656 OW SOL 885 0.191 27.891 6.720 1.00 0.00 O +ATOM 2657 HW1 SOL 885 0.791 27.081 6.740 1.00 0.00 H +ATOM 2658 HW2 SOL 885 0.591 28.581 6.120 1.00 0.00 H +ATOM 2659 OW SOL 886 21.251 21.881 7.200 1.00 0.00 O +ATOM 2660 HW1 SOL 886 20.461 22.391 6.860 1.00 0.00 H +ATOM 2661 HW2 SOL 886 21.161 21.731 8.180 1.00 0.00 H +ATOM 2662 OW SOL 887 26.841 28.641 13.721 1.00 0.00 O +ATOM 2663 HW1 SOL 887 27.241 28.631 12.801 1.00 0.00 H +ATOM 2664 HW2 SOL 887 26.941 29.561 14.121 1.00 0.00 H +ATOM 2665 OW SOL 888 27.781 27.721 2.910 1.00 0.00 O +ATOM 2666 HW1 SOL 888 28.411 28.101 2.230 1.00 0.00 H +ATOM 2667 HW2 SOL 888 28.181 26.891 3.300 1.00 0.00 H +ATOM 2668 OW SOL 889 22.341 0.271 14.901 1.00 0.00 O +ATOM 2669 HW1 SOL 889 22.211 1.201 14.561 1.00 0.00 H +ATOM 2670 HW2 SOL 889 21.501 -0.249 14.771 1.00 0.00 H +ATOM 2671 OW SOL 890 29.011 29.601 6.960 1.00 0.00 O +ATOM 2672 HW1 SOL 890 28.311 29.131 7.500 1.00 0.00 H +ATOM 2673 HW2 SOL 890 29.601 28.921 6.530 1.00 0.00 H +ATOM 2674 OW SOL 891 28.761 20.981 9.711 1.00 0.00 O +ATOM 2675 HW1 SOL 891 28.681 20.621 8.781 1.00 0.00 H +ATOM 2676 HW2 SOL 891 28.741 20.221 10.361 1.00 0.00 H +ATOM 2677 OW SOL 892 19.671 28.751 17.261 1.00 0.00 O +ATOM 2678 HW1 SOL 892 18.901 28.421 17.801 1.00 0.00 H +ATOM 2679 HW2 SOL 892 20.521 28.451 17.681 1.00 0.00 H +ATOM 2680 OW SOL 893 25.341 20.651 14.891 1.00 0.00 O +ATOM 2681 HW1 SOL 893 26.241 20.491 14.491 1.00 0.00 H +ATOM 2682 HW2 SOL 893 25.421 20.701 15.881 1.00 0.00 H +ATOM 2683 OW SOL 894 19.341 20.281 3.180 1.00 0.00 O +ATOM 2684 HW1 SOL 894 19.171 21.111 2.640 1.00 0.00 H +ATOM 2685 HW2 SOL 894 20.241 19.911 2.960 1.00 0.00 H +ATOM 2686 OW SOL 895 24.751 27.041 14.311 1.00 0.00 O +ATOM 2687 HW1 SOL 895 25.311 27.851 14.141 1.00 0.00 H +ATOM 2688 HW2 SOL 895 25.341 26.241 14.341 1.00 0.00 H +ATOM 2689 OW SOL 896 25.781 24.271 17.081 1.00 0.00 O +ATOM 2690 HW1 SOL 896 25.971 24.921 17.821 1.00 0.00 H +ATOM 2691 HW2 SOL 896 26.381 23.471 17.171 1.00 0.00 H +ATOM 2692 OW SOL 897 30.871 21.871 4.490 1.00 0.00 O +ATOM 2693 HW1 SOL 897 31.521 21.131 4.380 1.00 0.00 H +ATOM 2694 HW2 SOL 897 31.071 22.371 5.330 1.00 0.00 H +ATOM 2695 OW SOL 898 24.561 26.071 6.520 1.00 0.00 O +ATOM 2696 HW1 SOL 898 25.061 26.921 6.330 1.00 0.00 H +ATOM 2697 HW2 SOL 898 23.681 26.091 6.040 1.00 0.00 H +ATOM 2698 OW SOL 899 27.211 28.181 8.610 1.00 0.00 O +ATOM 2699 HW1 SOL 899 27.751 27.491 9.090 1.00 0.00 H +ATOM 2700 HW2 SOL 899 26.891 28.871 9.270 1.00 0.00 H +ATOM 2701 OW SOL 900 29.451 28.461 0.870 1.00 0.00 O +ATOM 2702 HW1 SOL 900 29.221 28.991 0.050 1.00 0.00 H +ATOM 2703 HW2 SOL 900 30.261 27.901 0.680 1.00 0.00 H +ATOM 2704 OW SOL 901 19.411 31.021 6.530 1.00 0.00 O +ATOM 2705 HW1 SOL 901 19.401 30.551 7.410 1.00 0.00 H +ATOM 2706 HW2 SOL 901 20.231 30.741 6.020 1.00 0.00 H +ATOM 2707 OW SOL 902 22.901 22.861 5.200 1.00 0.00 O +ATOM 2708 HW1 SOL 902 23.201 22.141 4.580 1.00 0.00 H +ATOM 2709 HW2 SOL 902 22.511 22.461 6.030 1.00 0.00 H +ATOM 2710 OW SOL 903 21.791 24.091 12.801 1.00 0.00 O +ATOM 2711 HW1 SOL 903 22.171 23.501 13.521 1.00 0.00 H +ATOM 2712 HW2 SOL 903 22.191 23.831 11.921 1.00 0.00 H +ATOM 2713 OW SOL 904 1.631 20.761 11.121 1.00 0.00 O +ATOM 2714 HW1 SOL 904 2.151 20.111 11.671 1.00 0.00 H +ATOM 2715 HW2 SOL 904 1.141 21.391 11.731 1.00 0.00 H +ATOM 2716 OW SOL 905 28.631 18.961 11.541 1.00 0.00 O +ATOM 2717 HW1 SOL 905 28.001 18.241 11.231 1.00 0.00 H +ATOM 2718 HW2 SOL 905 29.561 18.601 11.541 1.00 0.00 H +ATOM 2719 OW SOL 906 26.321 0.691 3.010 1.00 0.00 O +ATOM 2720 HW1 SOL 906 25.861 -0.179 3.180 1.00 0.00 H +ATOM 2721 HW2 SOL 906 27.231 0.661 3.420 1.00 0.00 H +ATOM 2722 OW SOL 907 0.911 19.141 1.680 1.00 0.00 O +ATOM 2723 HW1 SOL 907 1.261 18.731 0.840 1.00 0.00 H +ATOM 2724 HW2 SOL 907 0.011 18.761 1.880 1.00 0.00 H +ATOM 2725 OW SOL 908 0.391 23.151 6.910 1.00 0.00 O +ATOM 2726 HW1 SOL 908 -0.199 23.951 6.950 1.00 0.00 H +ATOM 2727 HW2 SOL 908 0.541 22.801 7.840 1.00 0.00 H +ATOM 2728 OW SOL 909 19.011 29.391 3.000 1.00 0.00 O +ATOM 2729 HW1 SOL 909 20.001 29.281 2.910 1.00 0.00 H +ATOM 2730 HW2 SOL 909 18.611 28.531 3.320 1.00 0.00 H +ATOM 2731 OW SOL 910 20.921 24.901 19.751 1.00 0.00 O +ATOM 2732 HW1 SOL 910 19.991 24.881 20.121 1.00 0.00 H +ATOM 2733 HW2 SOL 910 20.931 24.511 18.831 1.00 0.00 H +ATOM 2734 OW SOL 911 20.871 21.371 28.581 1.00 0.00 O +ATOM 2735 HW1 SOL 911 21.221 21.201 29.501 1.00 0.00 H +ATOM 2736 HW2 SOL 911 19.991 20.921 28.461 1.00 0.00 H +ATOM 2737 OW SOL 912 18.811 22.301 25.091 1.00 0.00 O +ATOM 2738 HW1 SOL 912 17.991 22.731 25.481 1.00 0.00 H +ATOM 2739 HW2 SOL 912 18.531 21.571 24.461 1.00 0.00 H +ATOM 2740 OW SOL 913 29.971 25.651 25.791 1.00 0.00 O +ATOM 2741 HW1 SOL 913 30.541 26.431 25.541 1.00 0.00 H +ATOM 2742 HW2 SOL 913 29.371 25.911 26.551 1.00 0.00 H +ATOM 2743 OW SOL 914 26.301 30.061 28.851 1.00 0.00 O +ATOM 2744 HW1 SOL 914 25.521 30.231 29.451 1.00 0.00 H +ATOM 2745 HW2 SOL 914 26.641 30.931 28.491 1.00 0.00 H +ATOM 2746 OW SOL 915 25.471 28.741 25.271 1.00 0.00 O +ATOM 2747 HW1 SOL 915 26.161 28.581 25.971 1.00 0.00 H +ATOM 2748 HW2 SOL 915 24.741 29.311 25.651 1.00 0.00 H +ATOM 2749 OW SOL 916 21.021 29.531 27.481 1.00 0.00 O +ATOM 2750 HW1 SOL 916 21.161 28.691 28.001 1.00 0.00 H +ATOM 2751 HW2 SOL 916 20.471 30.171 28.031 1.00 0.00 H +ATOM 2752 OW SOL 917 24.681 28.261 19.851 1.00 0.00 O +ATOM 2753 HW1 SOL 917 24.751 29.101 19.311 1.00 0.00 H +ATOM 2754 HW2 SOL 917 25.141 28.391 20.731 1.00 0.00 H +ATOM 2755 OW SOL 918 19.841 25.051 24.251 1.00 0.00 O +ATOM 2756 HW1 SOL 918 19.391 24.171 24.421 1.00 0.00 H +ATOM 2757 HW2 SOL 918 19.831 25.591 25.091 1.00 0.00 H +ATOM 2758 OW SOL 919 24.751 1.041 25.881 1.00 0.00 O +ATOM 2759 HW1 SOL 919 24.261 0.171 25.971 1.00 0.00 H +ATOM 2760 HW2 SOL 919 24.521 1.471 25.011 1.00 0.00 H +ATOM 2761 OW SOL 920 26.711 18.661 23.641 1.00 0.00 O +ATOM 2762 HW1 SOL 920 27.111 19.571 23.551 1.00 0.00 H +ATOM 2763 HW2 SOL 920 25.711 18.741 23.701 1.00 0.00 H +ATOM 2764 OW SOL 921 20.591 28.381 0.031 1.00 0.00 O +ATOM 2765 HW1 SOL 921 21.481 27.931 -0.109 1.00 0.00 H +ATOM 2766 HW2 SOL 921 19.861 27.731 -0.159 1.00 0.00 H +ATOM 2767 OW SOL 922 24.601 25.911 21.321 1.00 0.00 O +ATOM 2768 HW1 SOL 922 24.841 26.601 20.641 1.00 0.00 H +ATOM 2769 HW2 SOL 922 23.821 26.241 21.861 1.00 0.00 H +ATOM 2770 OW SOL 923 0.201 22.071 28.061 1.00 0.00 O +ATOM 2771 HW1 SOL 923 -0.659 21.571 27.931 1.00 0.00 H +ATOM 2772 HW2 SOL 923 0.821 21.531 28.621 1.00 0.00 H +ATOM 2773 OW SOL 924 29.031 25.631 22.911 1.00 0.00 O +ATOM 2774 HW1 SOL 924 29.291 25.591 23.871 1.00 0.00 H +ATOM 2775 HW2 SOL 924 28.181 25.121 22.771 1.00 0.00 H +ATOM 2776 OW SOL 925 19.381 26.731 26.511 1.00 0.00 O +ATOM 2777 HW1 SOL 925 20.371 26.611 26.601 1.00 0.00 H +ATOM 2778 HW2 SOL 925 19.141 27.681 26.721 1.00 0.00 H +ATOM 2779 OW SOL 926 27.271 22.101 20.571 1.00 0.00 O +ATOM 2780 HW1 SOL 926 27.861 22.731 20.081 1.00 0.00 H +ATOM 2781 HW2 SOL 926 27.461 21.161 20.281 1.00 0.00 H +ATOM 2782 OW SOL 927 24.121 20.581 27.471 1.00 0.00 O +ATOM 2783 HW1 SOL 927 24.071 20.531 28.471 1.00 0.00 H +ATOM 2784 HW2 SOL 927 24.141 21.541 27.181 1.00 0.00 H +ATOM 2785 OW SOL 928 21.831 28.051 21.041 1.00 0.00 O +ATOM 2786 HW1 SOL 928 22.651 28.441 20.621 1.00 0.00 H +ATOM 2787 HW2 SOL 928 21.561 27.231 20.551 1.00 0.00 H +ATOM 2788 OW SOL 929 22.441 25.621 23.421 1.00 0.00 O +ATOM 2789 HW1 SOL 929 22.891 24.721 23.391 1.00 0.00 H +ATOM 2790 HW2 SOL 929 21.501 25.511 23.751 1.00 0.00 H +ATOM 2791 OW SOL 930 24.761 19.841 19.791 1.00 0.00 O +ATOM 2792 HW1 SOL 930 25.741 19.621 19.861 1.00 0.00 H +ATOM 2793 HW2 SOL 930 24.451 19.671 18.861 1.00 0.00 H +ATOM 2794 OW SOL 931 0.901 24.521 1.721 1.00 0.00 O +ATOM 2795 HW1 SOL 931 1.181 24.091 2.571 1.00 0.00 H +ATOM 2796 HW2 SOL 931 1.151 25.481 1.731 1.00 0.00 H +ATOM 2797 OW SOL 932 27.841 23.651 27.611 1.00 0.00 O +ATOM 2798 HW1 SOL 932 27.591 23.561 26.651 1.00 0.00 H +ATOM 2799 HW2 SOL 932 28.321 22.831 27.921 1.00 0.00 H +ATOM 2800 OW SOL 933 24.011 19.261 23.741 1.00 0.00 O +ATOM 2801 HW1 SOL 933 23.201 19.271 24.321 1.00 0.00 H +ATOM 2802 HW2 SOL 933 24.041 20.091 23.191 1.00 0.00 H +ATOM 2803 OW SOL 934 21.591 18.971 20.331 1.00 0.00 O +ATOM 2804 HW1 SOL 934 22.081 19.811 20.121 1.00 0.00 H +ATOM 2805 HW2 SOL 934 22.211 18.321 20.781 1.00 0.00 H +ATOM 2806 OW SOL 935 27.971 20.981 23.421 1.00 0.00 O +ATOM 2807 HW1 SOL 935 27.491 21.391 22.641 1.00 0.00 H +ATOM 2808 HW2 SOL 935 28.961 20.961 23.231 1.00 0.00 H +ATOM 2809 OW SOL 936 23.211 30.141 26.031 1.00 0.00 O +ATOM 2810 HW1 SOL 936 22.501 29.871 26.681 1.00 0.00 H +ATOM 2811 HW2 SOL 936 22.951 29.861 25.101 1.00 0.00 H +ATOM 2812 OW SOL 937 28.941 24.111 18.781 1.00 0.00 O +ATOM 2813 HW1 SOL 937 28.531 24.931 18.391 1.00 0.00 H +ATOM 2814 HW2 SOL 937 29.581 24.371 19.511 1.00 0.00 H +ATOM 2815 OW SOL 938 27.281 23.161 25.041 1.00 0.00 O +ATOM 2816 HW1 SOL 938 26.961 23.881 24.421 1.00 0.00 H +ATOM 2817 HW2 SOL 938 27.521 22.351 24.511 1.00 0.00 H +ATOM 2818 OW SOL 939 28.791 19.011 26.151 1.00 0.00 O +ATOM 2819 HW1 SOL 939 28.071 19.061 25.461 1.00 0.00 H +ATOM 2820 HW2 SOL 939 28.551 18.321 26.841 1.00 0.00 H +ATOM 2821 OW SOL 940 1.291 24.371 19.401 1.00 0.00 O +ATOM 2822 HW1 SOL 940 0.751 24.161 20.211 1.00 0.00 H +ATOM 2823 HW2 SOL 940 2.201 23.961 19.491 1.00 0.00 H +ATOM 2824 OW SOL 941 23.891 21.181 21.901 1.00 0.00 O +ATOM 2825 HW1 SOL 941 24.161 20.591 21.151 1.00 0.00 H +ATOM 2826 HW2 SOL 941 23.891 22.131 21.591 1.00 0.00 H +ATOM 2827 OW SOL 942 25.671 29.121 22.301 1.00 0.00 O +ATOM 2828 HW1 SOL 942 25.531 29.191 23.291 1.00 0.00 H +ATOM 2829 HW2 SOL 942 26.511 28.611 22.121 1.00 0.00 H +ATOM 2830 OW SOL 943 22.721 26.751 31.131 1.00 0.00 O +ATOM 2831 HW1 SOL 943 23.581 26.871 31.631 1.00 0.00 H +ATOM 2832 HW2 SOL 943 22.301 25.881 31.401 1.00 0.00 H +ATOM 2833 OW SOL 944 0.131 22.481 0.011 1.00 0.00 O +ATOM 2834 HW1 SOL 944 0.341 23.221 0.651 1.00 0.00 H +ATOM 2835 HW2 SOL 944 -0.759 22.651 -0.419 1.00 0.00 H +ATOM 2836 OW SOL 945 22.291 29.621 23.631 1.00 0.00 O +ATOM 2837 HW1 SOL 945 22.221 30.451 23.071 1.00 0.00 H +ATOM 2838 HW2 SOL 945 22.331 28.821 23.031 1.00 0.00 H +ATOM 2839 OW SOL 946 24.281 23.991 27.271 1.00 0.00 O +ATOM 2840 HW1 SOL 946 24.401 24.651 26.531 1.00 0.00 H +ATOM 2841 HW2 SOL 946 24.741 24.331 28.101 1.00 0.00 H +ATOM 2842 OW SOL 947 24.351 27.321 28.911 1.00 0.00 O +ATOM 2843 HW1 SOL 947 24.791 28.211 28.821 1.00 0.00 H +ATOM 2844 HW2 SOL 947 23.721 27.321 29.681 1.00 0.00 H +ATOM 2845 OW SOL 948 0.991 27.241 29.071 1.00 0.00 O +ATOM 2846 HW1 SOL 948 0.241 27.241 28.411 1.00 0.00 H +ATOM 2847 HW2 SOL 948 1.361 26.321 29.161 1.00 0.00 H +ATOM 2848 OW SOL 949 30.711 23.871 21.371 1.00 0.00 O +ATOM 2849 HW1 SOL 949 30.841 23.031 21.911 1.00 0.00 H +ATOM 2850 HW2 SOL 949 30.421 24.611 21.971 1.00 0.00 H +ATOM 2851 OW SOL 950 21.691 20.751 30.931 1.00 0.00 O +ATOM 2852 HW1 SOL 950 21.461 21.121 31.831 1.00 0.00 H +ATOM 2853 HW2 SOL 950 21.391 19.801 30.871 1.00 0.00 H +ATOM 2854 OW SOL 951 18.991 0.491 0.211 1.00 0.00 O +ATOM 2855 HW1 SOL 951 19.521 0.001 0.891 1.00 0.00 H +ATOM 2856 HW2 SOL 951 19.211 1.471 0.261 1.00 0.00 H +ATOM 2857 OW SOL 952 25.941 24.961 29.261 1.00 0.00 O +ATOM 2858 HW1 SOL 952 26.531 24.701 28.501 1.00 0.00 H +ATOM 2859 HW2 SOL 952 25.661 25.921 29.151 1.00 0.00 H +ATOM 2860 OW SOL 953 21.691 19.251 24.801 1.00 0.00 O +ATOM 2861 HW1 SOL 953 21.581 20.191 25.131 1.00 0.00 H +ATOM 2862 HW2 SOL 953 21.641 18.621 25.571 1.00 0.00 H +ATOM 2863 OW SOL 954 28.851 26.281 28.281 1.00 0.00 O +ATOM 2864 HW1 SOL 954 29.001 26.491 29.241 1.00 0.00 H +ATOM 2865 HW2 SOL 954 28.551 25.331 28.191 1.00 0.00 H +ATOM 2866 OW SOL 955 0.421 27.001 19.041 1.00 0.00 O +ATOM 2867 HW1 SOL 955 0.761 26.071 19.191 1.00 0.00 H +ATOM 2868 HW2 SOL 955 0.601 27.271 18.091 1.00 0.00 H +ATOM 2869 OW SOL 956 21.811 26.721 28.111 1.00 0.00 O +ATOM 2870 HW1 SOL 956 22.741 27.081 28.161 1.00 0.00 H +ATOM 2871 HW2 SOL 956 21.751 25.871 28.631 1.00 0.00 H +ATOM 2872 OW SOL 957 22.011 23.711 28.681 1.00 0.00 O +ATOM 2873 HW1 SOL 957 21.491 22.881 28.511 1.00 0.00 H +ATOM 2874 HW2 SOL 957 22.781 23.761 28.041 1.00 0.00 H +ATOM 2875 OW SOL 958 28.641 26.581 31.001 1.00 0.00 O +ATOM 2876 HW1 SOL 958 29.051 26.261 31.861 1.00 0.00 H +ATOM 2877 HW2 SOL 958 27.681 26.311 30.971 1.00 0.00 H +ATOM 2878 OW SOL 959 19.021 24.061 29.761 1.00 0.00 O +ATOM 2879 HW1 SOL 959 19.871 23.731 29.351 1.00 0.00 H +ATOM 2880 HW2 SOL 959 19.151 24.211 30.741 1.00 0.00 H +ATOM 2881 OW SOL 960 26.771 24.341 21.871 1.00 0.00 O +ATOM 2882 HW1 SOL 960 26.841 23.451 21.411 1.00 0.00 H +ATOM 2883 HW2 SOL 960 25.831 24.681 21.791 1.00 0.00 H +ATOM 2884 OW SOL 961 25.331 23.261 0.081 1.00 0.00 O +ATOM 2885 HW1 SOL 961 24.991 22.371 -0.219 1.00 0.00 H +ATOM 2886 HW2 SOL 961 25.591 23.801 -0.719 1.00 0.00 H +ATOM 2887 OW SOL 962 23.351 23.621 20.531 1.00 0.00 O +ATOM 2888 HW1 SOL 962 23.961 24.421 20.571 1.00 0.00 H +ATOM 2889 HW2 SOL 962 22.401 23.931 20.601 1.00 0.00 H +ATOM 2890 OW SOL 963 0.861 29.211 30.961 1.00 0.00 O +ATOM 2891 HW1 SOL 963 1.101 28.581 30.221 1.00 0.00 H +ATOM 2892 HW2 SOL 963 -0.039 29.611 30.781 1.00 0.00 H +ATOM 2893 OW SOL 964 19.451 31.201 28.841 1.00 0.00 O +ATOM 2894 HW1 SOL 964 19.401 31.191 29.841 1.00 0.00 H +ATOM 2895 HW2 SOL 964 18.621 30.791 28.461 1.00 0.00 H +ATOM 2896 OW SOL 965 0.191 27.891 25.341 1.00 0.00 O +ATOM 2897 HW1 SOL 965 0.791 27.081 25.361 1.00 0.00 H +ATOM 2898 HW2 SOL 965 0.591 28.581 24.741 1.00 0.00 H +ATOM 2899 OW SOL 966 21.251 21.881 25.821 1.00 0.00 O +ATOM 2900 HW1 SOL 966 20.461 22.391 25.481 1.00 0.00 H +ATOM 2901 HW2 SOL 966 21.161 21.731 26.801 1.00 0.00 H +ATOM 2902 OW SOL 967 26.841 28.641 1.111 1.00 0.00 O +ATOM 2903 HW1 SOL 967 27.241 28.631 0.191 1.00 0.00 H +ATOM 2904 HW2 SOL 967 26.941 29.561 1.511 1.00 0.00 H +ATOM 2905 OW SOL 968 27.781 27.721 21.531 1.00 0.00 O +ATOM 2906 HW1 SOL 968 28.411 28.101 20.851 1.00 0.00 H +ATOM 2907 HW2 SOL 968 28.181 26.891 21.921 1.00 0.00 H +ATOM 2908 OW SOL 969 29.011 29.601 25.581 1.00 0.00 O +ATOM 2909 HW1 SOL 969 28.311 29.131 26.121 1.00 0.00 H +ATOM 2910 HW2 SOL 969 29.601 28.921 25.151 1.00 0.00 H +ATOM 2911 OW SOL 970 28.761 20.981 28.331 1.00 0.00 O +ATOM 2912 HW1 SOL 970 28.681 20.621 27.401 1.00 0.00 H +ATOM 2913 HW2 SOL 970 28.741 20.221 28.981 1.00 0.00 H +ATOM 2914 OW SOL 971 19.371 22.071 18.951 1.00 0.00 O +ATOM 2915 HW1 SOL 971 18.451 21.791 18.661 1.00 0.00 H +ATOM 2916 HW2 SOL 971 19.681 22.841 18.391 1.00 0.00 H +ATOM 2917 OW SOL 972 19.341 20.281 21.801 1.00 0.00 O +ATOM 2918 HW1 SOL 972 19.171 21.111 21.261 1.00 0.00 H +ATOM 2919 HW2 SOL 972 20.241 19.911 21.581 1.00 0.00 H +ATOM 2920 OW SOL 973 30.871 21.871 23.111 1.00 0.00 O +ATOM 2921 HW1 SOL 973 31.521 21.131 23.001 1.00 0.00 H +ATOM 2922 HW2 SOL 973 31.071 22.371 23.951 1.00 0.00 H +ATOM 2923 OW SOL 974 24.561 26.071 25.141 1.00 0.00 O +ATOM 2924 HW1 SOL 974 25.061 26.921 24.951 1.00 0.00 H +ATOM 2925 HW2 SOL 974 23.681 26.091 24.661 1.00 0.00 H +ATOM 2926 OW SOL 975 27.211 28.181 27.231 1.00 0.00 O +ATOM 2927 HW1 SOL 975 27.751 27.491 27.711 1.00 0.00 H +ATOM 2928 HW2 SOL 975 26.891 28.871 27.891 1.00 0.00 H +ATOM 2929 OW SOL 976 29.451 28.461 19.491 1.00 0.00 O +ATOM 2930 HW1 SOL 976 29.221 28.991 18.671 1.00 0.00 H +ATOM 2931 HW2 SOL 976 30.261 27.901 19.301 1.00 0.00 H +ATOM 2932 OW SOL 977 19.411 31.021 25.151 1.00 0.00 O +ATOM 2933 HW1 SOL 977 19.401 30.551 26.031 1.00 0.00 H +ATOM 2934 HW2 SOL 977 20.231 30.741 24.641 1.00 0.00 H +ATOM 2935 OW SOL 978 22.901 22.861 23.821 1.00 0.00 O +ATOM 2936 HW1 SOL 978 23.201 22.141 23.201 1.00 0.00 H +ATOM 2937 HW2 SOL 978 22.511 22.461 24.651 1.00 0.00 H +ATOM 2938 OW SOL 979 1.631 20.761 29.741 1.00 0.00 O +ATOM 2939 HW1 SOL 979 2.151 20.111 30.291 1.00 0.00 H +ATOM 2940 HW2 SOL 979 1.141 21.391 30.351 1.00 0.00 H +ATOM 2941 OW SOL 980 28.631 18.961 30.161 1.00 0.00 O +ATOM 2942 HW1 SOL 980 28.001 18.241 29.851 1.00 0.00 H +ATOM 2943 HW2 SOL 980 29.561 18.601 30.161 1.00 0.00 H +ATOM 2944 OW SOL 981 26.321 0.691 21.631 1.00 0.00 O +ATOM 2945 HW1 SOL 981 25.861 -0.179 21.801 1.00 0.00 H +ATOM 2946 HW2 SOL 981 27.231 0.661 22.041 1.00 0.00 H +ATOM 2947 OW SOL 982 0.911 19.141 20.301 1.00 0.00 O +ATOM 2948 HW1 SOL 982 1.261 18.731 19.461 1.00 0.00 H +ATOM 2949 HW2 SOL 982 0.011 18.761 20.501 1.00 0.00 H +ATOM 2950 OW SOL 983 0.391 23.151 25.531 1.00 0.00 O +ATOM 2951 HW1 SOL 983 -0.199 23.951 25.571 1.00 0.00 H +ATOM 2952 HW2 SOL 983 0.541 22.801 26.461 1.00 0.00 H +ATOM 2953 OW SOL 984 19.011 29.391 21.621 1.00 0.00 O +ATOM 2954 HW1 SOL 984 20.001 29.281 21.531 1.00 0.00 H +ATOM 2955 HW2 SOL 984 18.611 28.531 21.941 1.00 0.00 H +TER +ENDMDL diff --git a/examples/latte_interface/scf_energy_forces_kernel/latte.in b/examples/latte_interface/scf_energy_forces_kernel/latte.in new file mode 100644 index 00000000..6e387e42 --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/latte.in @@ -0,0 +1,56 @@ + +#General controls +CONTROL{ + XCONTROL= 1 + BASISTYPE= NONORTHO + DEBUGON= 0 + FERMIM= 6 + CGORLIB= 1 CGTOL= 1.0e-6 + NORECS= 1 + PARAMPATH= '../../../parameters/latte/TBparam/' + ENTROPYKIND= 1 + PPOTON= 1 VDWON= 0 + SPINON= 0 SPINTOL= 1.0e-4 + ELECTRO= 1 ELECMETH= 0 ELEC_ETOL= 0.001 ELEC_QTOL= 1.0e-4 + COULACC= 1.0e-6 COULCUT= -500.0 COULR1= 500.0 + MAXSCF= 1 + BREAKTOL= 1.0E-12 MINSP2ITER= 22 SP2CONV= REL + FULLQCONV= 0 QITER= 0 + QMIX= 0.25 SPINMIX= 0.25 MDMIX= 0.25 + ORDERNMOL= 0 + SPARSEON= 0 THRESHOLDON= 1 NUMTHRESH= 1.0e-6 FILLINSTOP= 100 BLKSZ= 4 + MSPARSE= 3000 + LCNON= 0 LCNITER= 4 CHTOL= 0.01 + SKIN= 1.0 + RELAX= 0 RELAXTYPE= SD MAXITER= 100 RLXFTOL= 0.00001 + MDON= 1 + PBCON= 1 + RESTART= 0 + CHARGE= 0 + XBO= 0 + XBODISON= 0 + XBODISORDER= 5 + NGPU= 2 + KON= 0 + COMPFORCE= 1 + DOSFIT= 0 INTS2FIT= 1 BETA= 1000.0 NFITSTEP= 5000 QFIT= 0 MCSIGMA= 0.2 + PPFITON= 0 + ALLFITON= 0 + PPSTEP= 500 BISTEP= 500 PP2FIT= 2 BINT2FIT= 6 + PPBETA= 1000.0 PPSIGMA= 0.01 PPNMOL= 10 PPNGEOM= 200 + PARREP= 0 + ER= 1.0 + VERBOSE= 3 + DOKERNEL= F + KBT= 0.086 +} + +#Controls for QMD +MDCONTROL{ + MAXITER= -1 +} + +MIXER{ + Verbose= 10 +} + diff --git a/examples/latte_interface/scf_energy_forces_kernel/main.py b/examples/latte_interface/scf_energy_forces_kernel/main.py new file mode 100644 index 00000000..fcf63602 --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/main.py @@ -0,0 +1,56 @@ +""" +main.py +==================================== +Main sedacs prototype driver to perform a +graph-based addaptive construction of the density +matrix together with a full self-consistent charge +optimization, followed by single-point calculation +of the energy and forces. + +""" + +import sys + +import numpy as np +from sedacs.driver.graph_adaptive_kernel_scf import get_adaptive_KernelSCFDM +from sedacs.driver.graph_adaptive_sp_energy_forces import get_adaptive_sp_energy_forces +from sedacs.driver.init import get_args, init +from sedacs.file_io import read_latte_tbparams +from sedacs.charges import get_charges +import sedacs.globals as gl + + +# Pass arguments from command line +args = get_args() + +# Initialize sedacs + +np.set_printoptions(threshold=sys.maxsize) + +# Initialize sdc parameters +sdc, eng, comm, rank, numranks, sy, hindex, graphNL, nl, nlTrX, nlTrY, nlTrZ = init( + args +) + +sdc.verb = True + +# Load the LATTE tight-binding parameters +latte_tbparams = read_latte_tbparams( + "../../../parameters/latte/TBparam/electrons.dat" +) +# Get the Hubbard U values for each atom in the system +Hubbard_U = [latte_tbparams[symbol]["HubbardU"] for symbol in sy.symbols] +Hubbard_U = np.array(Hubbard_U)[sy.types] +sy.hubbard_u = Hubbard_U + +# Perform a graph-adaptive calculation of the density matrix through SCF cycles +mu = 0.0 +graphDH, sy.charges, mu, parts, partsCoreHalo, subSysOnRank = get_adaptive_KernelSCFDM( + sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu +) +# Perform a single-point graph-adaptive calculation of the energy and forces +graphDH, sy.charges, energy, forces, mu, parts, partsCoreHalo, subSysOnRank = get_adaptive_sp_energy_forces( + sdc, eng, comm, rank, numranks, sy, parts, partsCoreHalo, hindex, graphDH, mu +) +print("total energy:", energy) +print("forces:", forces[0]) diff --git a/examples/latte_interface/scf_energy_forces_kernel/vars b/examples/latte_interface/scf_energy_forces_kernel/vars new file mode 100644 index 00000000..19f6f3f4 --- /dev/null +++ b/examples/latte_interface/scf_energy_forces_kernel/vars @@ -0,0 +1,20 @@ +#!/bin/bash +THIS_PATH=`pwd` +export PYTHONPATH="" +MOD_PATH1=$THIS_PATH/../../../src/ +MOD_PATH2=$THIS_PATH/../../../src/sedacs/driver +PROXYA_FORTRAN_PATH=$THIS_PATH/../../../proxies/fortran/build/ +PROXYA_PYTHON_FILES=$THIS_PATH/../../../proxies/python/ +PROXYA_PYTHON_FOLDER=$THIS_PATH/../../../ +PROGRESS_PATH=$HOME/qmd-progress/install/lib64/ +BML_PATH=$HOME/bml/install/lib64/ +export PROXYA_FORTRAN_PATH=$PROXYA_FORTRAN_PATH +export PROXYA_PYTHON_PATH=$PROXYA_PYTHON_PATH +export PYTHONPATH=$PYTHONPATH:$MOD_PATH1:$MOD_PATH2:$PROGRESS_PATH:$BML_PATH:$PROXYA_PYTHON_FOLDER:$PROXYA_PYTHON_FILES:$PROXYA_FORTRAN_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PROGRESS_PATH:$BML_PATH +export PYTHONWARNINGS="ignore:Unverified HTTPS request" + +GPU_PATH=$THIS_PATH/../../../src/sedacs/gpu +echo $GPU_PATH +export PYTHONPATH=$PYTHONPATH:$GPU_PATH + diff --git a/parameters/latte/TBparam/electrons.dat b/parameters/latte/TBparam/electrons.dat index 9946312c..7741f83c 100644 --- a/parameters/latte/TBparam/electrons.dat +++ b/parameters/latte/TBparam/electrons.dat @@ -1,7 +1,8 @@ -Noelem= 5 +Noelem= 6 Element basis Numel Es Ep Ed Ef Mass HubbardU Wss Wpp Wdd Wff -N sp 5.000000 -18.556500 -7.062500 0.000000 0.000000 14.006700 17.372900 0.000000 -0.693400 0.000000 0.000000 -O sp 6.000000 -23.937700 -9.003500 0.000000 0.000000 15.999400 11.876141 0.000000 -0.7576500 0.000000 0.000000 -H s 1.000000 -6.483500 0.000000 0.000000 0.000000 1.007900 12.054683 -2.23400 0.000000 0.000000 0.000000 -C sp 4.000000 -13.719900 -5.254100 0.000000 0.000000 12.010000 14.240811 0.000000 -0.6181000 0.000000 0.000000 -W sd 6.0 -4.05 0.0 -2.12 0.0 183.84 7.048 0.0 0.0 0.0 0.0 +S sp 6.000000 -17.120000 -7.090000 0.000000 0.000000 32.065000 8.28 0.000000 -0.427800 0.000000 0.000000 +H s 1.000000 -6.237968 0.000000 0.000000 0.000000 1.007900 13.684855 -2.23400 0.000000 0.000000 0.000000 +O sp 6.000000 -23.833752 -9.645001 0.000000 0.000000 15.999400 14.443874 0.000000 -0.757650 0.000000 0.000000 +N sp 5.000000 -18.543798 -7.862407 0.000000 0.000000 14.006700 17.053958 0.000000 -0.6934 0.000000 0.000000 +P sp 5.000000 -19.58176951 -5.66776336 0.000000 0.000000 30.973761 9.40651495 0.000000 -0.9000 0.000000 0.000000 +C sp 4.000000 -13.736556 -4.748938 0.000000 0.000000 12.010000 10.522540 0.000000 -0.618100 0.000000 0.000000 diff --git a/proxies/c/README.md b/proxies/c/README.md new file mode 100644 index 00000000..d0f81a09 --- /dev/null +++ b/proxies/c/README.md @@ -0,0 +1 @@ +Placeholder for C version of proxy_a code diff --git a/proxies/c/build.sh b/proxies/c/build.sh new file mode 100644 index 00000000..540edab0 --- /dev/null +++ b/proxies/c/build.sh @@ -0,0 +1,2 @@ +gcc-mp-12 -c proxy_a_lib.c -I/opt/local/include +gcc-mp-12 proxy_a.c -o proxy_a proxy_a_lib.o -L/opt/local/lib -lopenblas diff --git a/proxies/c/proxy_a.c b/proxies/c/proxy_a.c new file mode 100644 index 00000000..b5f5d81a --- /dev/null +++ b/proxies/c/proxy_a.c @@ -0,0 +1,48 @@ +#include "proxy_a.h" + +int main(int argc, char *argv[]) +{ + double + *coords = NULL, + *H = NULL, + *D = NULL; + + int + *types, + nats, + nocc, + i, + j; + + nats = 2; + + coords = (double *)malloc(3*nats*sizeof(double)); + get_random_coordinates(nats,coords); + + for (i=0; i < nats; i++) { + printf("%30.18g\n",coords[3*i]); + } + types = (int *)malloc(nats*sizeof(int)); + for (i = 0; i < nats; i++) types[i] = 1; + + H = (double *)malloc(nats*nats*sizeof(double)); + get_hamiltonian(nats,coords, types, H, true); + printf("Hamiltonian matrix\n"); + for (i = 0; i < nats; i++) { + size_t ofst = nats * i; + for (j = 0; j < nats; j++) { + printf("%g\n",H[ofst + j]); + } + } + + D = (double *)malloc(nats*nats*sizeof(double)); + nocc = (int)((double)nats/2.0); + get_densityMatrix(nats,H, nocc, D, true); + printf("Density matrix:\n"); + for (i = 0; i < nats; i++) { + size_t ofst = nats * i; + for (j = 0; j < nats; j++) { + printf("%g\n",D[ofst + j]); + } + } +} diff --git a/proxies/c/proxy_a.h b/proxies/c/proxy_a.h new file mode 100644 index 00000000..a0368baf --- /dev/null +++ b/proxies/c/proxy_a.h @@ -0,0 +1,14 @@ +#ifndef PROXY_A_H +#define PROXY_A_H + +#include +#include +#include +#include +#include + +int get_random_coordinates(int nats, double *coords); +int get_hamiltonian(int nats, double *coords, int *atomTypes, double *H, bool verb); +int get_densityMatrix(int nats, double *H, int Nocc, double *D, bool verb); + +#endif diff --git a/proxies/c/proxy_a_lib.c b/proxies/c/proxy_a_lib.c new file mode 100644 index 00000000..e5a4ed6d --- /dev/null +++ b/proxies/c/proxy_a_lib.c @@ -0,0 +1,253 @@ +/* + proxy_a_lib.c + + A prototype engine that: + - Reads the total number of atoms + - Constructs a set of random coordinates + - Constructs a simple Hamiltonian + - Computes the Density matrix from the Hamiltonian + + Translated from C to Fortran by Michael E. Wall, LANL + +*/ + +#include "proxy_a.h" +#include "lapack.h" + +/* + Simple random number generator + This is important in order to compare across codes + written in different languages. + + To initialize: + \verbatim + myRand = rand(123) + \endverbatim + where the argument of rand is the seed. + + To get a random number between "low" and "high": + \verbatim + rnd = myRand.get_rand(low,high) + \endverbatim +*/ + +double proxy_rand(double low, double high, int seed,bool init) +{ + static int + stat, + a = 321, + b = 231, + c = 13; + + double + w, + rnd; + + int + place; + + if (init) { + stat = seed * 1000; + rnd = 0.0;; + } + else { + w = high - low; + place = a * stat; + place = (int)(place/b); + rnd = ((double)(place % c))/((double)c); + place = rnd * 1000000; + stat = place; + rnd = low + w*rnd; + } + + return(rnd); +} + +/* + Generating random coordinates + @brief Creates a system of size "nats = Number of atoms" with coordindates having + a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. + + @param nats The total number of atoms + @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] +*/ + +int get_random_coordinates(int nats, double *coords) +{ + int + *seedin, + ssize, + length, + atomsCounter, + i, + j, + k; + + double + rnd, + latticeParam; + + length = (int)(pow((double)nats,1./3.)) + 1; + latticeParam = 2.0; + atomsCounter = 0; + rnd = proxy_rand(0.,0.,111,true); // set the random number seed + for (i = 0; i < length; i++) { + for (j = 0; j < length; j++) { + for (k = 0; k < length; k++) { + atomsCounter = atomsCounter + 1; + size_t ofst = (atomsCounter - 1) * 3; + if (atomsCounter > nats) break; + rnd = proxy_rand(-1.,1.,0,false); + coords[ofst + 0] = i * latticeParam + rnd; + printf("%lg\n",coords[ofst + 0]); + rnd = proxy_rand(-1.,1.,0,false); + coords[ofst + 1] = j * latticeParam + rnd; + rnd = proxy_rand(-1.,1.,0,false); + coords[ofst + 2] = k * latticeParam + rnd; + } + } + } + return(0); +} + +/* + Computes a Hamiltonian based on a single "s-like" orbitals per atom. + @author Anders Niklasson + @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances + \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. + + @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] + @param types Index type for each atom in the system. Type for first atom = type[0] (not used yet) + @return H 2D numpy array of Hamiltonian elements + @param verb Verbosity. If True is passed, information is printed. +*/ + +int get_hamiltonian(int nats, double *coords, int *atomTypes, double *H, bool verb) +{ + int + *N, + Nocc, + m, + n, + hdim, + i, + j, + k, + cnt; + + double + *xx, + a, + c, + x, + b, + d, + y, + tmp, + dvec[3], + dist2, + eps, + decay_min; + + hdim = nats; + Nocc = (int)((double)hdim/4.0); + eps = 1.0e-9; + decay_min = 0.1; + m = 78; + a = 3.817632; c = 0.816371; x = 1.029769; n = 13; + b = 1.927947; d = 3.386142; y = 2.135545; + if (H == NULL) { + perror("get_hamiltonian requires allocated H\n"); + exit(1); + } + if (verb) printf("Constructing a simple Hamiltonian for the full system\n"); + cnt = 0; + for (i = 0; i < hdim; i++) { + size_t iofst = i * 3; + x = fmod((a * x + c), (double)m); + y = fmod((b * y + d), (double)n); + for (j = i; j < hdim; j++) { + size_t jofst = j * 3; + dist2 = 0.0; + for (k = 0; k < 3; k++) { + dvec[k] = coords[iofst + k] - coords[jofst + k]; + dist2 += dvec[k]*dvec[k]; + } + tmp = (x/(double)m) * exp(-(y/(double)n + decay_min)*dist2); + H[i*nats + j] = tmp; + H[j*nats + i] = tmp; + } + } + return(0); +} +/* + Computes the Density matrix from a given Hamiltonian. + @author Anders Niklasson + @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ + \f[ \rho = \sum^{nocc} v_k v_k^T \f] + where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ + + @param H Hamiltonian mtrix + @param Nocc Number of occupied orbitals + @param verb Verbosity. If True is passed, information is printed. + + @return D Density matrix + +*/ + +int get_densityMatrix(int nats, double *H, int Nocc, double *D, bool verb) +{ + double + *Q, + *E, + mu, + *work; + + int + info, + lwork, + i, + j, + k, + hdim, + homoIndex, + lumoIndex; + + char + jobz = 'V', + uplo = 'U'; + + if (verb) printf("Computing the Density matrix"); + + hdim = nats; + lwork = 3*hdim - 1; + + Q = (double *)malloc(hdim*hdim*sizeof(double)); + work = (double *)malloc(lwork*sizeof(double)); + E = (double *)malloc(hdim*sizeof(double)); + memcpy(Q,H,hdim*hdim*sizeof(double)); + LAPACK_dsyev(&jobz,&uplo,&hdim,Q,&hdim,E,work,&lwork,&info); + if (verb) { + printf("Eigenvalues:\n"); + for (i = 0; i < hdim; i++) { + printf("%g\n",E[i]); + } + homoIndex = Nocc; + lumoIndex = Nocc + 1; + mu = 0.5*(E[homoIndex] + E[lumoIndex]); + memset(D,0,hdim*hdim*sizeof(double)); + for (i = 0; i < hdim; i++) { + size_t iofst = i * hdim; + for (j = 0; j < hdim; j++) { + size_t jofst = j * hdim; + for (k = 0; k < hdim; k++) { + if (E[k] < mu) { + D[iofst + j] = D[iofst + j] + Q[iofst + k]*Q[jofst + k]; + } + } + } + } + if (verb) printf("Chemical potential = %g\n",mu); + return(0); + } +} diff --git a/proxies/fortran/CMakeLists.txt b/proxies/fortran/CMakeLists.txt new file mode 100644 index 00000000..0c81ac04 --- /dev/null +++ b/proxies/fortran/CMakeLists.txt @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 3.10.0) +project(appendix C CXX Fortran) + +set(dir ${CMAKE_CURRENT_SOURCE_DIR}/build/) +set(CMAKE_BUILD_DIRECTORY ${dir}) +set(CMAKE_CURRENT_BINARY_DIR ${dir}) + +include(FindPkgConfig) + +find_package(BML CONFIG QUIET) +pkg_check_modules(BML REQUIRED bml) +list(APPEND LINK_LIBRARIES BML::bml) +list(APPEND LINK_LIBRARIES ${BML_LDFLAGS}) +message(STATUS "Found bml: ${BML_LDFLAGS}") + +find_package(PROGRESS CONFIG QUIET) +pkg_check_modules(PROGRESS REQUIRED progress) +message(STATUS "Found progress: ${PROGRESS_LDFLAGS}") +list(APPEND LINK_LIBRARIES ${PROGRESS_LDFLAGS}) + +find_library(FOUND_METIS metis) + if(NOT FOUND_METIS) + message(FATAL_ERROR "Could not find metis library") + endif() + message(STATUS "Found metis: ${FOUND_METIS}") + add_definitions(-DDO_GRAPHLIB) + list(APPEND LINK_LIBRARIES ${FOUND_METIS}) + + get_filename_component(METIS_LIB ${FOUND_METIS} DIRECTORY) + list(APPEND LINK_LIBRARIES "-L/${METIS_LIB} -lmetis") + +if(PROGRESS_MPI) + message(STATUS "Will build with MPI") + add_definitions(-DDO_MPI) +endif() + +if(PROGRESS) + message(STATUS "Will build with MPI") + add_definitions(-DUSEPROGRESS) +endif() + +if(SANITY_CHECK) + message(STATUS "Will build with SANITY CHECK") + add_definitions(-DSANITY_CHECK) +endif() + +message(STATUS "Extra FC Flags ${EXTRA_FCFLAGS}") + +if(DEFINED EXTRA_FCFLAGS) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}") +endif() + + +if(LIB) + list(APPEND SHAREDLIB "-fPIC -shared") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS} ${SHAREDLIB}") +endif() + +message(STATUS "Project sources = " ${PROJECT_SOURCE_DIR} ) +include_directories(${CMAKE_BINARY_DIR}/) +include_directories(${BML_INCLUDEDIR}) +include_directories(${PROGRESS_INCLUDEDIR}) + +list( + APPEND common_sources +"proxy_a_lib.F90" +"proxy_a_mod.F90" + ) + + +function(progress_appendix myappendix main_and_srcs) +list(GET main_and_srcs 0 main) +include_directories(${PROGRESS_INCLUDEDIR}) +add_executable(${myappendix} ${main} ${common_sources} ${extras}) +target_sources(${myappendix} PRIVATE ${ARGN}) +target_link_libraries(${myappendix} PUBLIC + ${LINK_LIBRARIES}) + set_target_properties(${myappendix} + PROPERTIES + LINK_FLAGS "") + #add_subdirectory(hamiltonian) +endfunction(progress_appendix) + +function(progress_appendix_library myappendix main_and_srcs) +list(GET main_and_srcs 0 main) +include_directories(${PROGRESS_INCLUDEDIR}) +add_library(${myappendix} SHARED ${main} ${common_sources} ${extras}) +target_sources(${myappendix} PRIVATE ${ARGN}) +target_link_libraries(${myappendix} PUBLIC + ${LINK_LIBRARIES}) + set_target_properties(${myappendix} + PROPERTIES + LINK_FLAGS "") +endfunction(progress_appendix_library) + +if(LIB) + progress_appendix_library( proxya_fortran proxy_a_lib.F90 proxy_a_mod.F90 ) + #progress_appendix( gpmd_a gpmd_secuential.F90 gpmdcov_lib_mod.F90) +else() + progress_appendix( proxya proxy_a.F90 ) +endif() + +SET(DESTINATION ${PROJECT_BINARY_DIR}) +install(FILES ${CMAKE_BINARY_DIR}/progress.pc + DESTINATION ${PROJECT_BINARY_DIR}) + +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) diff --git a/proxies/fortran/compile.sh b/proxies/fortran/compile.sh new file mode 100644 index 00000000..65bce240 --- /dev/null +++ b/proxies/fortran/compile.sh @@ -0,0 +1 @@ +gfortran proxy_a_mod.F90 proxy_a.F90 -o proxy_a -llapack -lblas diff --git a/proxies/fortran/compile_with_cmake.sh b/proxies/fortran/compile_with_cmake.sh new file mode 100644 index 00000000..97624cd6 --- /dev/null +++ b/proxies/fortran/compile_with_cmake.sh @@ -0,0 +1,24 @@ +# Remove the build directory and create a new one +rm -rf build +mkdir build +# Move into the build directory +cd build +METIS_LIB="$HOME/metis-5.1.0/build/Linux-x86_64/libmetis" +METIS_INC="$HOME/metis-5.1.0/build/Linux-x86_64/include" +PROGRESS_LIB="$HOME/qmd-progress/install/" +PROGRESS_INC="$HOME/qmd-progress/install/include" +BML_LIB="$HOME/bml/install/" +BML_INC="$HOME/bml/install/include" + + +cmake -DPROGRESS="yes" -DCMAKE_Fortran_COMPILER="gfortran" -DPROGRESS_MPI="no" \ + -DEXTRA_FCFLAGS="-Wall -Wunused -fopenmp -lm -fPIC -g -O0 -fcheck=all --check=bounds -lmetis -lm -fPIC" \ + -DLIB="yes" -DLATTE_PREC="DOUBLE" \ + -DCMAKE_PREFIX_PATH="$PROGRESS_LIB;$PROGRESS_INC;$BML_LIB;$BML_INC;$METIS_LIB;$METIS_INC" ../ +make + +cp libproxya_fortran.so proxya_fortran.so + + + + diff --git a/proxies/fortran/proxy_a.F90 b/proxies/fortran/proxy_a.F90 new file mode 100644 index 00000000..41286a94 --- /dev/null +++ b/proxies/fortran/proxy_a.F90 @@ -0,0 +1,31 @@ +program proxy_a + use proxy_a_mod + implicit none + real(dp),allocatable :: coords(:,:) + integer,allocatable :: types(:) + real(dp), allocatable :: H(:,:),D(:,:) + integer :: nats,nocc,i,j + + nats = 2 + + call get_random_coordinates(nats,coords) + do i = 1,nats + write(*,*)coords(1,i) + enddo + allocate(types(nats)); types = 1 + allocate(H(nats,nats)) + call get_hamiltonian(coords,types,H,.true.) + write(*,*)"Hamiltonian matrix" + do i=1,nats + do j=1,nats + write(*,*)H(i,j) + enddo + enddo + + allocate(D(nats,nats)) + nocc = int(real(nats,dp)/2.0_dp) + call get_densityMatrix(H,nocc,D,.true.) + write(*,*)"Density matrix=",D + +end program proxy_a + diff --git a/proxies/fortran/proxy_a_lib.F90 b/proxies/fortran/proxy_a_lib.F90 new file mode 100644 index 00000000..9723abbf --- /dev/null +++ b/proxies/fortran/proxy_a_lib.F90 @@ -0,0 +1,113 @@ +!> Library interface +!! \brief This file is used to interface to python via iso_c_binding +!! library. + +!> Get Hamiltonian +!! \brief General fortran proxy function to get the Hamiltonian +!! \param nats Number of atoms +!! \param norbs Number of atoms +!! \param coords_in Positions for all the atoms +!! \param atomTypes Atom types indices for every atom in the system +!! \param H_out Hamiltonian matrix +!! \param S_out Overlap matrix +!! \param verb_in Verbosity level +!! +function proxya_get_hamiltonian(nats,norbs,coords_in,atomTypes_in,H_out,S_out,verb_in) & + & result(err) bind(c, name='proxya_get_hamiltonian') + use iso_c_binding, only: c_char, c_double, c_int, c_bool + use proxy_a_mod + implicit none + integer(c_int), intent(in), value :: nats + integer(c_int), intent(in), value :: norbs + real(c_double), intent(in) :: coords_in(3*nats) + integer(c_int), intent(in) :: atomTypes_in(nats) + logical(c_bool), intent(in), value :: verb_in + logical(c_bool) :: err + real(c_double), intent(inout) :: H_out(norbs,norbs) + real(c_double), intent(inout) :: S_out(norbs,norbs) + + real(dp), allocatable :: coords(:,:) + integer, allocatable :: atomTypes(:) + integer :: i + real(dp), allocatable :: H(:,:) + real(dp), allocatable :: S(:,:) + logical :: verb + + err = .true. + + allocate(coords(3,nats)) !indices will need to be flipped + allocate(atomTypes(nats)) + allocate(H(norbs,norbs)) + allocate(S(norbs,norbs)) + + !Note that arrays appear in another order. We need to rearange + !the data. This is because of the column mayor (in python) vs. + !row mayor in fortran. + do i = 1, nats + coords(1,i) = coords_in((i-1)*3 + 1) + coords(2,i) = coords_in((i-1)*3 + 2) + coords(3,i) = coords_in((i-1)*3 + 3) + enddo + + atomTypes = atomTypes_in + + !A workaround to avoid fortran to c (one bit) boolean issues + if(verb_in .eqv. (1 == 1))then + verb = .true. + else + verb = .false. + endif + + call get_hamiltonian(coords,atomTypes,H,S,verb) + + H_out = H + S_out = S + + err = .false. + +end function proxya_get_hamiltonian + + +!> Get density matrix +!! \brief General fortran proxy function to get the density matrix +!! \param norbs Number of atoms +!! \param nocc Number of occupied orbitals +!! \param ham_in Hamiltonian matrix input +!! \param D_out Density matrix output +!! \param verb_in Verbosity level +!! +function proxya_get_density_matrix(norbs,nocc,ham_in,D_out,verb_in) & + & result(err) bind(c, name='proxya_get_density_matrix') + use iso_c_binding, only: c_char, c_double, c_int, c_bool + use proxy_a_mod + implicit none + integer(c_int), intent(in), value :: norbs + integer(c_int), intent(in), value :: nocc + real(c_double), intent(in) :: ham_in(norbs*norbs) + logical(c_bool), intent(in), value :: verb_in + logical(c_bool) :: err + real(c_double), intent(inout) :: D_out(norbs*norbs) + + real(dp), allocatable :: coords(:,:) + integer, allocatable :: atomTypes(:) + integer :: i + real(dp), allocatable :: D(:,:) + real(dp), allocatable :: ham(:,:) + logical :: verb + + err = .true. + + allocate(D(norbs,norbs)) + allocate(ham(norbs,norbs)) + !From flatt to matrix + do i = 1,norbs + ham(i,:) = ham_in(((i-1)*norbs + 1):i*norbs) + enddo + + call get_densityMatrix(ham,Nocc,D,verb) + !From matrix to faltt + do i = 1,norbs + D_out(((i-1)*norbs + 1):i*norbs) = D(i,:) + enddo + +end function proxya_get_density_matrix diff --git a/proxies/fortran/proxy_a_mod.F90 b/proxies/fortran/proxy_a_mod.F90 new file mode 100644 index 00000000..bf9ed999 --- /dev/null +++ b/proxies/fortran/proxy_a_mod.F90 @@ -0,0 +1,232 @@ +!!> proxy code a +!! A prototype engine that: +!! - Reads the total number of atoms +!! - Constructs a set of random coordinates +!! - Constructs a simple Hamiltonian +!! - Computes the Density matrix from the Hamiltonian +!! +module proxy_a_mod + + implicit none + + integer, parameter :: dp = kind(1.0D0) !Precision + public :: get_random_coordinates, get_densityMatrix + +!!> Simple random number generator +!! This is important in order to compare across codes +!! written in different languages. +!! +!! To initialize: +!! \verbatim +!! myRand = rand(123) +!! \endverbatim +!! where the argument of rand is the seed. +!! +!! To get a random number between "low" and "high": +!! \verbatim +!! rnd = myRand.get_rand(low,high) +!! \endverbatim +!! +type, public :: rand + integer :: a = 321 + integer :: b = 231 + integer :: c = 13 + integer :: seed + integer :: stat + contains + procedure :: init => rand_init + procedure :: get_rand => rand_get_rand +end type rand +contains + + subroutine rand_init(self,seed) + implicit none + class(rand), intent(inout) :: self + integer, intent(in) :: seed + self%seed = seed + self%stat = seed*1000 + end subroutine rand_init + + function rand_get_rand(self,low,high) result(rnd) + implicit none + class(rand), intent(inout) :: self + real(dp) :: w + real(dp) :: rnd + real(dp), intent(in) :: low, high + integer :: place + w = high - low + place = self%a*self%stat + place = int(place/self%b) + rnd = real(mod(place,self%c))/real(self%c) + place = rnd*1000000 + self%stat = place + rnd = low + w*rnd + end function rand_get_rand + + + !!> Generating random coordinates + !! @brief Creates a system of size "nats = Number of atoms" with coordindates having + !! a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. + !! + !! @param nats The total number of atoms + !! @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] + !! + subroutine get_random_coordinates(nats,coords) + implicit none + integer :: nats,ssize,length,atomsCounter + integer :: i,j,k + integer, allocatable :: seedin(:) + real(dp), allocatable :: coords(:,:) + real(dp) :: rnd,latticeParam + type(rand) :: myrand + !Get random coordinates + length = int(real(nats)**(1.0/3.0)) + 1 + allocate(coords(3,nats)) + latticeParam = 2.0 + atomsCounter = 0 + call myrand%init(111) + do i = 1,length + do j = 1,length + do k = 1,length + atomsCounter = atomsCounter + 1 + if(atomsCounter > nats) exit + rnd = myrand%get_rand(-1.0_dp,1.0_dp) + coords(1,atomsCounter) = (i-1)*latticeParam + rnd + write(*,*)coords(1,atomsCounter) + rnd = myrand%get_rand(-1.0_dp,1.0_dp) + coords(2,atomsCounter) = (j-1)*latticeParam + rnd + rnd = myrand%get_rand(-1.0_dp,1.0_dp) + coords(3,atomsCounter) = (k-1)*latticeParam + rnd + enddo + enddo + enddo + return + end subroutine get_random_coordinates + + !! Computes a Hamiltonian based on a single "s-like" orbitals per atom. + ! @author Anders Niklasson + ! @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances + ! \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. + ! + ! @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] + ! @param types Index type for each atom in the system. Type for first atom = type[0] (not used yet) + ! @return H 2D numpy array of Hamiltonian elements + ! @param verb Verbosity. If True is passed, information is printed. + ! + subroutine get_hamiltonian(coords,atomTypes,H,S,verb) + implicit none + integer :: n,Nocc,m,hdim + logical, intent(in) :: verb + real(dp), allocatable :: xx(:) + real(dp), allocatable, intent(in) :: coords(:,:) + integer, allocatable, intent(in) :: atomTypes(:) + real(dp), allocatable, intent(out) :: H(:,:) + real(dp), allocatable, intent(out) :: S(:,:) + real(dp) :: a,c,x,b,d,y,tmp,dist,eps,decay_min + integer :: i,j,k,cnt + + hdim = size(coords,dim=2); Nocc = int(real(hdim)/4.0); eps = 1e-9; decay_min = 0.1; m = 78; + a = 3.817632; c = 0.816371; x = 1.029769; n = 13; + b = 1.927947; d = 3.386142; y = 2.135545; + if(.not. allocated(H)) allocate(H(hdim,hdim)) + if(verb) write(*,*)"Constructing a simple Hamiltonian for the full system" + cnt = 0 + do i = 1,hdim + x = mod((a*x+c),real(m)) + y = mod((b*y+d),real(n)) + do j = i,hdim + dist = norm2(coords(:,i)-coords(:,j)) + tmp = (x/real(m))*exp(-(y/real(n) + decay_min)*dist**2) + H(i,j) = tmp + H(j,i) = tmp + enddo + enddo + return + end subroutine get_hamiltonian + + !!> Computes the Density matrix from a given Hamiltonian. + !! @author Anders Niklasson + !! @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ + !! \f[ \rho = \sum^{nocc} v_k v_k^T \f] + !! where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ + !! + !! @param H Hamiltonian mtrix + !! @param Nocc Number of occupied orbitals + !! @param verb Verbosity. If True is passed, information is printed. + !! + !! @return D Density matrix + !! + subroutine get_densityMatrix(H,Nocc,D,verb) +#ifdef USEPROGRESS + use bml + use prg_densitymatrix_mod +#endif + + implicit none + integer :: Nocc + logical, intent(in) :: verb + real(dp), allocatable, intent(in) :: H(:,:) + real(dp), allocatable, intent(out) :: D(:,:) + real(dp), allocatable :: Q(:,:), E(:),tmpmat(:,:),f(:,:) + real(dp) :: mu + integer :: info, lwork,i,j,k,norbs,homoIndex,lumoIndex + real(dp), allocatable :: work(:) + real(dp) :: bndfil + character(LEN=1), parameter :: jobz = 'V', uplo = 'U' + +#ifdef USEPROGRESS + type(bml_matrix_t) :: D_bml,H_bml +#endif + if(verb) write(*,*)"Computing the Density matrix" + + norbs = size(H,dim=1) + +#ifdef USEPROGRESS + bndfil = real(nocc)/real(norbs) + call bml_zero_matrix(bml_matrix_dense,bml_element_real,& + &dp,norbs,norbs,D_bml) + call bml_zero_matrix(bml_matrix_dense,bml_element_real,& + &dp,norbs,norbs,H_bml) + call bml_import_from_dense(bml_matrix_dense,H,H_bml,0.0_dp,norbs) + call prg_build_density_t0(H_bml,D_bml,0.0_dp,bndfil,E) + call bml_export_to_dense(D_bml,D) + call bml_deallocate(D_bml) + call bml_deallocate(H_bml) +#else + lwork = 3*norbs - 1 + allocate(Q(norbs,norbs)) + allocate(work(lwork)) + allocate(E(norbs)) + Q = H + call dsyev(jobz,uplo,norbs,Q,norbs,E,work,lwork,info) + if(verb)write(*,*)"Eigenvalues",E + homoIndex = Nocc + lumoIndex = Nocc + 1 + mu = 0.5*(E(homoIndex) + E(lumoIndex)) + allocate(D(norbs,norbs)) + allocate(f(norbs,norbs)) + allocate(tmpmat(norbs,norbs)) + D = 0.0_dp + f = 0.0_dp + + do i = 1,norbs + if (E(i) < mu) then + f(i,i) = 1.0_dp + endif + enddo + + CALL DGEMM('N', 'N', norbs, norbs, norbs, 1.0_dp, & + tmpmat, norbs, Q, norbs, 0.0_dp, f, norbs) !Q*f + CALL DGEMM('N', 'T', norbs, norbs, norbs, 1.0_dp, & + tmpmat, norbs, Q, norbs, 0.0_dp, D, norbs) !(Q*f)*Qt + +#endif + + return + + end subroutine get_densityMatrix + + +end module proxy_a_mod + + diff --git a/proxies/matlab/AtomicDensityMatrix.m b/proxies/matlab/AtomicDensityMatrix.m new file mode 100644 index 00000000..3b54d659 --- /dev/null +++ b/proxies/matlab/AtomicDensityMatrix.m @@ -0,0 +1,36 @@ +function [D_atomic] = AtomicDensityMatrix(Nr_atoms,H_INDEX_START,H_INDEX_END,HDIM,Znuc); + +D_atomic = zeros(1,HDIM); + +INDEX = 0; +for I = 1:Nr_atoms + N_orb = H_INDEX_END(I)-H_INDEX_START(I) + 1; + if N_orb == 1 + INDEX = INDEX + 1; + D_atomic(INDEX) = Znuc(I); + else + if Znuc(I) <= 2 + INDEX = INDEX + 1; + D_atomic(INDEX) = Znuc(I); + + INDEX = INDEX + 1; + D_atomic(INDEX) = 0; + INDEX = INDEX + 1; + D_atomic(INDEX) = 0; + INDEX = INDEX + 1; + D_atomic(INDEX) = 0; + + else + INDEX = INDEX + 1; + D_atomic(INDEX) = 2; + + INDEX = INDEX + 1; + OCC = (Znuc(I)-2)/3; + D_atomic(INDEX) = OCC; + INDEX = INDEX + 1; + D_atomic(INDEX) = OCC; + INDEX = INDEX + 1; + D_atomic(INDEX) = OCC; + end + end +end diff --git a/proxies/matlab/BondIntegral.m b/proxies/matlab/BondIntegral.m new file mode 100644 index 00000000..af89ff07 --- /dev/null +++ b/proxies/matlab/BondIntegral.m @@ -0,0 +1,18 @@ +function h = BondIntegral(dR,f) + +%%% dR: distance between atoms +%%% f: paramters/coefficeints for the bond integral + + if (dR <= f(7)) + RMOD = dR - f(6); + POLYNOM = RMOD*(f(2) + RMOD*(f(3) + RMOD*(f(4) + f(5)*RMOD))); + X = exp(POLYNOM); + elseif (dR > f(7)) & (dR < f(8)) + RMINUSR1 = dR - f(7); + X = f(9) + RMINUSR1*(f(10) + RMINUSR1*(f(11) + RMINUSR1*(f(12) + RMINUSR1*(f(13) + RMINUSR1*f(14))))); + else + X = 0; + end + h = f(1)*X; + + diff --git a/proxies/matlab/COORD.m b/proxies/matlab/COORD.m new file mode 100644 index 00000000..996dec8b --- /dev/null +++ b/proxies/matlab/COORD.m @@ -0,0 +1,51 @@ +C 4.420001 4.520000 4.580000 +H 3.952899 3.984296 3.748600 +H 5.071440 5.306013 4.187320 +H 5.011723 3.820633 5.177613 +H 3.643938 4.969059 5.206467 +C 8.306417 8.922489 11.058251 +H 7.865654 8.396639 10.200538 +H 8.992247 9.727094 10.639195 +H 8.904344 8.233497 11.656443 +H 7.543664 9.375350 11.675742 +C 6.610673 10.624374 6.001819 +H 6.160123 10.106479 5.151284 +H 7.268551 11.425549 5.588731 +H 7.221693 9.947533 6.581240 +H 5.823319 11.071655 6.587968 +C 9.366899 6.173791 5.081823 +H 8.933342 5.638478 4.223453 +H 10.058373 6.941235 4.689739 +H 9.968428 5.474563 5.664468 +H 8.613620 6.610354 5.691975 +C 9.478122 12.338314 9.397453 +H 9.018586 11.787411 8.593005 +H 10.173401 13.102222 9.043487 +H 10.104399 11.631090 9.991622 +H 8.723496 12.779712 10.032465 +C 12.611055 8.972684 9.821024 +H 12.157151 8.430239 8.991073 +H 13.272277 9.726794 9.406545 +H 13.215367 8.258123 10.422758 +H 11.851780 9.389042 10.460303 +C 5.504395 5.739892 10.170246 +H 4.984621 5.201157 9.328596 +H 6.132797 6.531114 9.786514 +H 6.033806 5.041772 10.791585 +H 4.701655 6.239441 10.792016 +C 10.749151 9.799286 5.751812 +H 10.273222 9.228897 4.965396 +H 11.415380 10.553758 5.355932 +H 11.355674 9.087793 6.356916 +H 9.991911 10.216903 6.404219 +C 6.563228 7.033042 6.958737 +H 6.129016 6.519083 6.097352 +H 7.207507 7.808931 6.574565 +H 7.165189 6.313190 7.581883 +H 5.799429 7.501422 7.567627 +C 12.912482 12.239536 7.755493 +H 12.460887 11.708290 6.915681 +H 13.592325 13.037021 7.373497 +H 13.532606 11.558002 8.323343 +H 12.185690 12.735960 8.374372 +~ diff --git a/proxies/matlab/CoulombMatrix.m b/proxies/matlab/CoulombMatrix.m new file mode 100644 index 00000000..c0bf4ccc --- /dev/null +++ b/proxies/matlab/CoulombMatrix.m @@ -0,0 +1,16 @@ +function [CC] = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nr_atoms,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + + dq_J = zeros(1,Nr_atoms); + CC = zeros(Nr_atoms); + Coulomb_Pot_k = 0; + for J = 1:Nr_atoms + dq_J(J) = 1; + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_dq_J = Coulomb_Pot_Real+Coulomb_Pot_k; + CC(:,J) = Coulomb_Pot_dq_J; + dq_J(J) = 0; + end +% CC = 0.5*(CC+CC'); diff --git a/proxies/matlab/DM_Fermi.m b/proxies/matlab/DM_Fermi.m new file mode 100644 index 00000000..4e7aebf1 --- /dev/null +++ b/proxies/matlab/DM_Fermi.m @@ -0,0 +1,37 @@ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function [P0,mu0] = DM_Fermi(H0,T,mu_0,Ne,m,eps,MaxIt) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + N = max(size(H0)); + I = eye(N); + mu0 = mu_0; + OccErr = 1; + Cnt = 0; + while OccErr > eps + %kB = 6.33366256e-6; % Ry/K; + %kB = 3.166811429e-6; % Ha/K; + kB = 8.61739e-5; % eV/K; + beta = 1/(kB*T); % Temp in Kelvin + cnst = 2^(-2-m)*beta; + P0 = 0.5*I - cnst*(H0-mu0*I); + for i = 1:m + P02 = P0*P0; + ID0 = inv(2*(P02-P0) + I); + P_0 = ID0*P02; + P0 = P_0; + end + TrdPdmu = trace(beta*P0*(I-P0)); + if abs(TrdPdmu) > 1e-8 + mu0 = mu0 + (Ne - trace(P0))/TrdPdmu; + OccErr = abs(trace(P0)-Ne); + else + OccErr = 0; + end + Cnt = Cnt + 1; + if (Cnt >= MaxIt) + OccErr; + OccErr = 0; + Cnt = MaxIt; + end + end + % Adjust occupation + P0 = P0 + ((Ne - trace(P0))/TrdPdmu)*beta*P0*(I-P0); diff --git a/proxies/matlab/DM_PRT_Fermi.m b/proxies/matlab/DM_PRT_Fermi.m new file mode 100644 index 00000000..dea0e2c0 --- /dev/null +++ b/proxies/matlab/DM_PRT_Fermi.m @@ -0,0 +1,43 @@ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function [P0,P1,mu0,mu1] = DM_PRT_Fermi(H0,H1,T,mu_0,mu1,Ne,m,eps,MaxIt) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + N = max(size(H0)); + I = eye(N); mu_1_start = mu1; + mu0 = mu_0; mu1 = mu1; % Intial guess + OccErr = 1; + Cnt = 0; + while OccErr > eps + %kB = 6.33366256e-6; % Ry/K; + %kB = 3.166811429e-6; % Ha/K; + kB = 8.61739e-5; % eV/K; + beta = 1/(kB*T); % Temp in Kelvin + cnst = 2^(-2-m)*beta; + P0 = 0.5*I - cnst*(H0-mu0*I); + P1 = -cnst*(H1-mu1*I); + for i = 1:m + % hh = sort(real(eig(P0))); + P02 = P0*P0; + DX1 = P0*P1+P1*P0; + ID0 = inv(2*(P02-P0) + I); + P_0 = ID0*P02; + P_1 = ID0*(DX1+2*(P1-DX1)*P_0); + P0 = P_0; P1 = P_1; + end + TrdPdmu = trace(beta*P0*(I-P0)); + if abs(TrdPdmu) > 1e-9 + mu0 = mu0 + (Ne - trace(P0))/TrdPdmu; + mu1 = mu1 + (0 - trace(P1))/TrdPdmu; + OccErr = abs(trace(P0+P1)-Ne); + else + OccErr = 0; + end + Cnt = Cnt + 1; + if (Cnt >= MaxIt) + OccErr; + OccErr = 0; + Cnt = MaxIt; + end + end + % Adjust occupation + P0 = P0 + ((Ne - trace(P0))/TrdPdmu)*beta*P0*(I-P0); + P1 = P1 - trace(P1)*I/N; diff --git a/proxies/matlab/DensityMatrix.m b/proxies/matlab/DensityMatrix.m new file mode 100644 index 00000000..50c3b0d3 --- /dev/null +++ b/proxies/matlab/DensityMatrix.m @@ -0,0 +1,13 @@ +function [D,mu] = DensityMatrix(H,nocc) + +N = max(size(H)); +[Q,E] = eig(H); +e = sort(diag(E)); +mu = 0.5*(e(nocc)+e(nocc+1)); +D = zeros(N); +for i = 1:N + if e(i) < mu + D = D + Q(:,i)*Q(:,i)'; + end +end + diff --git a/proxies/matlab/DensityMatrixPRT.m b/proxies/matlab/DensityMatrixPRT.m new file mode 100644 index 00000000..c3cde2cd --- /dev/null +++ b/proxies/matlab/DensityMatrixPRT.m @@ -0,0 +1,34 @@ +function [D,D1] = DensityMatrixPRT(H0,H1,nocc) + +N = max(size(H0)); +[Q,E] = eig(H0); +e = diag(E); +mu = 0.5*(e(nocc)+e(nocc+1)); +D = zeros(N); +for i = 1:N + if e(i) < mu + D = D + Q(:,i)*Q(:,i)'; + end +end + +Q1 = 0*Q; +for i = 1:N + if e(i) < mu + for j = 1:N + H1Tmp = (Q(:,j)'*H1*Q(:,i)/(e(i) -e(j))); + if j ~= i + Q1(:,i) = Q1(:,i) + H1Tmp*Q(:,j); + end + end + end +end +D1 = Q1*Q' + Q*Q1'; % Calculated using Rayleigh Schrodinger Pertrubations theory + +% OccErr1 = trace(D1)-0 +% IdErr1 = norm(D1*D+D*D1-D1) +% ComErr1 = norm(D1*H0-H0*D1 + D*H1-H1*D) +% pause + + + + diff --git a/proxies/matlab/Energy.m b/proxies/matlab/Energy.m new file mode 100644 index 00000000..7389f4f0 --- /dev/null +++ b/proxies/matlab/Energy.m @@ -0,0 +1,34 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total energy calculation % +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [Etot,Eband0,Ecoul,Edipole,S_ent] = Energy(H0,U,Efield,D0,C,D,q,Rx,Ry,Rz,f,Te); + +%% E = 2*trace(H0*(D-D0)) + 0.5*sum_ij{i!=j} (qi*Cij*qj) + 0.5*sum_i qi^2*Ui - Efield*mu - 2*Te*S_ent +%% dipole = mu(:) = sum_i qi*R(i,:); qi = 2*(D_ii-D0_ii) + + +kB = 8.61739e-5; % eV/K; +N = max(size(q)); +D0 = diag(D0); +Eband0 = 2*trace(H0*(D-D0)); % Single-particle/band energy + +Ecoul = 0.5*q'*C*q; % Coulomb energy +for i = 1:N + Ecoul = Ecoul + 0.5*q(i)*U(i)*q(i); +end + +Edipole = 0; +for i = 1:N + Edipole = Edipole - q(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); % External-field-Dipole interaction energy +end + +S_ent = 0; eps = 1e-9 +for i = 1:N + if (f(i) < 1-eps) & (f(i) > eps) + S_ent = - kB*(f(i)*log(f(i)) + (1-f(i))*log(1-f(i))); + end +end + +Etot = Eband0 + Ecoul + Edipole - 2*Te*S_ent; % Total energy + + diff --git a/proxies/matlab/Energy_save_00.m b/proxies/matlab/Energy_save_00.m new file mode 100644 index 00000000..7389f4f0 --- /dev/null +++ b/proxies/matlab/Energy_save_00.m @@ -0,0 +1,34 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total energy calculation % +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [Etot,Eband0,Ecoul,Edipole,S_ent] = Energy(H0,U,Efield,D0,C,D,q,Rx,Ry,Rz,f,Te); + +%% E = 2*trace(H0*(D-D0)) + 0.5*sum_ij{i!=j} (qi*Cij*qj) + 0.5*sum_i qi^2*Ui - Efield*mu - 2*Te*S_ent +%% dipole = mu(:) = sum_i qi*R(i,:); qi = 2*(D_ii-D0_ii) + + +kB = 8.61739e-5; % eV/K; +N = max(size(q)); +D0 = diag(D0); +Eband0 = 2*trace(H0*(D-D0)); % Single-particle/band energy + +Ecoul = 0.5*q'*C*q; % Coulomb energy +for i = 1:N + Ecoul = Ecoul + 0.5*q(i)*U(i)*q(i); +end + +Edipole = 0; +for i = 1:N + Edipole = Edipole - q(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); % External-field-Dipole interaction energy +end + +S_ent = 0; eps = 1e-9 +for i = 1:N + if (f(i) < 1-eps) & (f(i) > eps) + S_ent = - kB*(f(i)*log(f(i)) + (1-f(i))*log(1-f(i))); + end +end + +Etot = Eband0 + Ecoul + Edipole - 2*Te*S_ent; % Total energy + + diff --git a/proxies/matlab/Ewald_Real_Space.m b/proxies/matlab/Ewald_Real_Space.m new file mode 100644 index 00000000..7eccbfa0 --- /dev/null +++ b/proxies/matlab/Ewald_Real_Space.m @@ -0,0 +1,97 @@ +function [COULOMBV,FCOUL] = Ewald_Real_Space(I,RX,RY,RZ,LBox,DELTAQ,U,Element_Type,Nr_atoms,COULACC,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType) + +ccnt = 0; +COULVOL = LBox(1)*LBox(2)*LBox(3); +SQRTX = sqrt(-log(COULACC)); +CALPHA = sqrt(pi)*((TIMERATIO*Nr_atoms/(COULVOL^2))^(1/6)); +COULCUT = SQRTX/CALPHA; +CALPHA2 = CALPHA*CALPHA; +if (COULCUT > 50) + COULCUT = 50; + CALPHA = SQRTX/COULCUT; +end +COULCUT2 = COULCUT*COULCUT; +CALPHA2 = CALPHA*CALPHA; + +RELPERM = 1; +KECONST = 14.3996437701414*RELPERM; +TFACT = 16.0/(5.0*KECONST); + +SQRTPI = sqrt(pi); + +FCOUL = zeros(3,1); +COULOMBV = 0; + +TI = TFACT*U(I); +TI2 = TI*TI; +TI3 = TI2*TI; +TI4 = TI2*TI2; +TI6 = TI4*TI2; + +SSA = TI; +SSB = TI3/48; +SSC = 3*TI2/16; +SSD = 11*TI/16; +SSE = 1; + +Ra = [RX(I),RY(I),RZ(I)]; + +for nnI = 1:nrnnlist(I) + Rb(1) = nnRx(I,nnI); + Rb(2) = nnRy(I,nnI); + Rb(3) = nnRz(I,nnI); + J = nnType(I,nnI); + + Rab = Rb-Ra; % OBS b - a !!! + dR = norm(Rab); + MAGR = dR; + MAGR2 = dR*dR; + + if (dR <= COULCUT) & (dR > 1e-12) + + TJ = TFACT*U(J); + DC = Rab/dR; + + %! Using Numerical Recipes ERFC + Z = abs(CALPHA*MAGR); + NUMREP_ERFC = erfc(Z); + + CA = NUMREP_ERFC/MAGR; + COULOMBV = COULOMBV + DELTAQ(J)*CA; + ccnt = ccnt + 1; + TEST(ccnt) = DELTAQ(J)*CA; + CA = CA + 2*CALPHA*exp( -CALPHA2*MAGR2 )/SQRTPI; + FORCE = -KECONST*DELTAQ(I)*DELTAQ(J)*CA/MAGR; + EXPTI = exp(-TI*MAGR ); + + if Element_Type(I) == Element_Type(J) + COULOMBV = COULOMBV - DELTAQ(J)*EXPTI*(SSB*MAGR2 + SSC*MAGR + SSD + SSE/MAGR); + ccnt = ccnt + 1; + TEST(ccnt) = - DELTAQ(J)*EXPTI*(SSB*MAGR2 + SSC*MAGR + SSD + SSE/MAGR); + FORCE = FORCE + (KECONST*DELTAQ(I)*DELTAQ(J)*EXPTI)*((SSE/MAGR2 - 2*SSB*MAGR - SSC) + SSA*(SSB*MAGR2 + SSC*MAGR + SSD + SSE/MAGR)); + else + TJ2 = TJ*TJ; + TJ3 = TJ2*TJ; + TJ4 = TJ2*TJ2; + TJ6 = TJ4*TJ2; + EXPTJ = exp( -TJ*MAGR ); + TI2MTJ2 = TI2 - TJ2; + TJ2MTI2 = -TI2MTJ2; + SA = TI; + SB = TJ4*TI/(2 * TI2MTJ2 * TI2MTJ2); + SC = (TJ6 - 3*TJ4*TI2)/(TI2MTJ2 * TI2MTJ2 * TI2MTJ2); + SD = TJ; + SE = TI4*TJ/(2 * TJ2MTI2 * TJ2MTI2); + SF = (TI6 - 3*TI4*TJ2)/(TJ2MTI2 * TJ2MTI2 * TJ2MTI2); + + COULOMBV = COULOMBV - (DELTAQ(J)*(EXPTI*(SB - (SC/MAGR)) + EXPTJ*(SE - (SF/MAGR)))); + FORCE = FORCE + KECONST*DELTAQ(I)*DELTAQ(J)*((EXPTI*(SA*(SB - (SC/MAGR)) - (SC/MAGR2))) + (EXPTJ*(SD*(SE - (SF/MAGR)) - (SF/MAGR2)))); + end + + FCOUL(1) = FCOUL(1) + DC(1)*FORCE; + FCOUL(2) = FCOUL(2) + DC(2)*FORCE; + FCOUL(3) = FCOUL(3) + DC(3)*FORCE; + end +end +COULOMBV = KECONST * COULOMBV; + diff --git a/proxies/matlab/Ewald_k_Space.m b/proxies/matlab/Ewald_k_Space.m new file mode 100644 index 00000000..e8a8d1b2 --- /dev/null +++ b/proxies/matlab/Ewald_k_Space.m @@ -0,0 +1,108 @@ +function [COULOMBV,FCOUL] = Ewald_k_Space(RX,RY,RZ,LBox,DELTAQ,Nr_atoms,COULACC,TIMERATIO) + +COULVOL = LBox(1)*LBox(2)*LBox(3); + +SQRTX = sqrt(-log(COULACC)); +CALPHA = sqrt(pi)*((TIMERATIO*Nr_atoms/(COULVOL^2))^(1/6)); +COULCUT = SQRTX/CALPHA; +CALPHA2 = CALPHA*CALPHA; +if (COULCUT > 50) + COULCUT = 50; + CALPHA = SQRTX/COULCUT; +end +COULCUT2 = COULCUT*COULCUT; +KCUTOFF = 2*CALPHA*SQRTX; +KCUTOFF2 = KCUTOFF*KCUTOFF; +CALPHA2 = CALPHA*CALPHA; +FOURCALPHA2 = 4*CALPHA2; +RECIPVECS = zeros(3,3); +RECIPVECS(1,1) = 2*pi/LBox(1); +RECIPVECS(2,2) = 2*pi/LBox(2); +RECIPVECS(3,3) = 2*pi/LBox(3); +LMAX = floor(KCUTOFF / sqrt(RECIPVECS(1,1)*RECIPVECS(1,1))); +MMAX = floor(KCUTOFF / sqrt(RECIPVECS(2,2)*RECIPVECS(2,2))); +NMAX = floor(KCUTOFF / sqrt(RECIPVECS(3,3)*RECIPVECS(3,3))); + +RELPERM = 1; +KECONST = 14.3996437701414*RELPERM; + +SQRTPI = sqrt(pi); + +FCOUL = zeros(3,Nr_atoms); +COULOMBV = zeros(1,Nr_atoms); +SINLIST = zeros(Nr_atoms); +COSLIST = zeros(Nr_atoms); +%CR = R'; + +for L = 0:LMAX + + if L == 0 + MMIN = 0; + else + MMIN = -MMAX; + end + + L11 = L*RECIPVECS(1,1); + L12 = L*RECIPVECS(1,2); + L13 = L*RECIPVECS(1,3); + + for M = MMIN:MMAX + + NMIN = -NMAX; + + if (L == 0) & (M == 0) + NMIN = 1; + end + + M21 = L11 + M*RECIPVECS(2,1); + M22 = L12 + M*RECIPVECS(2,2); + M23 = L13 + M*RECIPVECS(2,3); + + for N = NMIN:NMAX + K(1) = M21 + N*RECIPVECS(3,1); + K(2) = M22 + N*RECIPVECS(3,2); + K(3) = M23 + N*RECIPVECS(3,3); + K2 = K(1)*K(1) + K(2)*K(2) + K(3)*K(3); + if K2 <= KCUTOFF2 + PREFACTOR = 8*pi*exp(-K2/(4*CALPHA2))/(COULVOL*K2); + PREVIR = (2/K2) + (2/(4*CALPHA2)); + + COSSUM = 0; + SINSUM = 0; + + %! Doing the sin and cos sums + + for I = 1:Nr_atoms + %DOT = K(1)*CR(1,I) + K(2)*CR(2,I) + K(3)*CR(3,I); + DOT = K(1)*RX(I) + K(2)*RY(I) + K(3)*RZ(I); + %! We re-use these in the next loop... + SINLIST(I) = sin(DOT); + COSLIST(I) = cos(DOT); + COSSUM = COSSUM + DELTAQ(I)*COSLIST(I); + SINSUM = SINSUM + DELTAQ(I)*SINLIST(I); + end + COSSUM2 = COSSUM*COSSUM; + SINSUM2 = SINSUM*SINSUM; + + %! Add up energy and force contributions + + KEPREF = KECONST*PREFACTOR; + for I = 1:Nr_atoms + COULOMBV(I) = COULOMBV(I) + KEPREF*(COSLIST(I)*COSSUM + SINLIST(I)*SINSUM); + FORCE = KEPREF * DELTAQ(I)*(SINLIST(I)*COSSUM - COSLIST(I)*SINSUM); + FCOUL(1,I) = FCOUL(1,I) + FORCE*K(1); + FCOUL(2,I) = FCOUL(2,I) + FORCE*K(2); + FCOUL(3,I) = FCOUL(3,I) + FORCE*K(3); + end + + KEPREF = KEPREF * (COSSUM2 + SINSUM2); + + end + end + end +end + +%! Point self energy +CORRFACT = 2*KECONST*CALPHA/SQRTPI; +COULOMBV = COULOMBV - CORRFACT*DELTAQ; + diff --git a/proxies/matlab/Forces.m b/proxies/matlab/Forces.m new file mode 100644 index 00000000..d595c873 --- /dev/null +++ b/proxies/matlab/Forces.m @@ -0,0 +1,109 @@ +function [Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,U,q,Rx,Ry,Rz,Nats,H_INDEX_START,H_INDEX_END) + +HDIM = max(size(H0)); +Fcoul = zeros(3,Nats); +for i = 1:Nats + Fcoul(1,i) = -q(i)*q(:)'*dCx(:,i); + Fcoul(2,i) = -q(i)*q(:)'*dCy(:,i); + Fcoul(3,i) = -q(i)*q(:)'*dCz(:,i); +end + +Fband0 = zeros(3,Nats); +for i = 1:Nats % Slater-Koster Force SKForce from Tr[D*dH0/dR] + I_A = H_INDEX_START(i); + I_B = H_INDEX_END(i); + Xtmp = dHx(I_A:I_B,:)*D(:,I_A:I_B); + Ytmp = dHy(I_A:I_B,:)*D(:,I_A:I_B); + Ztmp = dHz(I_A:I_B,:)*D(:,I_A:I_B); + Fband0(1,i) = -2*2*trace(Xtmp); + Fband0(2,i) = -2*2*trace(Ytmp); + Fband0(3,i) = -2*2*trace(Ztmp); +end + +FSdipole = zeros(3,Nats); +for k = 1:Nats % Slater-Koster Force SKForce from Tr[D*dH0/dR] + k_a = H_INDEX_START(k); + k_b = H_INDEX_END(k); + d_Sx = zeros(HDIM); + d_Sx(:,k_a:k_b) = dSx(:,k_a:k_b); d_Sx(k_a:k_b,:) = dSx(:,k_a:k_b)'; + d_Sy = zeros(HDIM); + d_Sy(:,k_a:k_b) = dSy(:,k_a:k_b); d_Sy(k_a:k_b,:) = dSy(:,k_a:k_b)'; + d_Sz = zeros(HDIM); + d_Sz(:,k_a:k_b) = dSz(:,k_a:k_b); d_Sz(k_a:k_b,:) = dSz(:,k_a:k_b)'; + + dqi_dRkX = zeros(Nats,1); dqi_dRkY = zeros(Nats,1); dqi_dRkZ = zeros(Nats,1); + for i = 1:Nats + if i == k + dqi_dRkX(i) = -2*trace(D(k_a:k_b,:)*dSx(:,k_a:k_b)); + dqi_dRkY(i) = -2*trace(D(k_a:k_b,:)*dSy(:,k_a:k_b)); + dqi_dRkZ(i) = -2*trace(D(k_a:k_b,:)*dSz(:,k_a:k_b)); + else + i_a = H_INDEX_START(i); i_b = H_INDEX_END(i); + dqi_dRkX(i) = -2*trace(dSx(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + dqi_dRkY(i) = -2*trace(dSy(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + dqi_dRkZ(i) = -2*trace(dSz(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + end + FSdipole(1,k) = FSdipole(1,k) - dqi_dRkX(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + FSdipole(2,k) = FSdipole(2,k) - dqi_dRkY(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + FSdipole(3,k) = FSdipole(3,k) - dqi_dRkZ(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + end + if k == 1 + dqK = dqi_dRkX; + dQi_dRkx = dqK(:) + end +end + +Fdipole = zeros(3,Nats); +for i = 1:Nats + Fdipole(1,i) = q(i)*Efield(1); % Forces from External field-dipole interaction + Fdipole(2,i) = q(i)*Efield(2); % Forces from External field-dipole interaction + Fdipole(3,i) = q(i)*Efield(3); % Forces from External field-dipole interaction +end + +Z = S^(-1/2); +SIHD = 2*2*Z*Z'*H*D; % Pulay Force FPUL from 2Tr[ZZ'HD*dS/dR] +FPulay = zeros(3,Nats); +for i = 1:Nats + I_A = H_INDEX_START(i); + I_B = H_INDEX_END(i); + Xtmp = dSx(I_A:I_B,:)*SIHD(:,I_A:I_B); + Ytmp = dSy(I_A:I_B,:)*SIHD(:,I_A:I_B); + Ztmp = dSz(I_A:I_B,:)*SIHD(:,I_A:I_B); + FPulay(1,i) = trace(Xtmp); + FPulay(2,i) = trace(Ytmp); + FPulay(3,i) = trace(Ztmp); +end + +CoulPot = C*q; % Factor of 2 or 1/2 or +/- +FScoul = zeros(3,Nats); % Coulomb force FSCOUL from nonorthogonality +dDSX = zeros(HDIM,1); +dDSY = zeros(HDIM,1); +dDSZ = zeros(HDIM,1); +for Ia = 1:Nats % Derivatives Ra + Ia_A = H_INDEX_START(Ia); + Ia_B = H_INDEX_END(Ia); + for iq = 1:HDIM + dDSX(iq) = D(iq,Ia_A:Ia_B)*dSx(Ia_A:Ia_B,iq); + dDSY(iq) = D(iq,Ia_A:Ia_B)*dSy(Ia_A:Ia_B,iq); + dDSZ(iq) = D(iq,Ia_A:Ia_B)*dSz(Ia_A:Ia_B,iq); + end + for iq = Ia_A:Ia_B + dDSX(iq) = dDSX(iq) + D(iq,:)*dSx(iq,:)'; + dDSY(iq) = dDSY(iq) + D(iq,:)*dSy(iq,:)'; + dDSZ(iq) = dDSZ(iq) + D(iq,:)*dSz(iq,:)'; + end + for j = 1:Nats % Get the Mulliken charges for all atoms + j_a = H_INDEX_START(j); + j_b = H_INDEX_END(j); + dQLxdR = sum(dDSX(j_a:j_b)); % Derivative with respect to Ia of charge on atom j + dQLydR = sum(dDSY(j_a:j_b)); + dQLzdR = sum(dDSZ(j_a:j_b)); + FScoul(1,Ia) = FScoul(1,Ia) - dQLxdR*(U(j)*q(j) + CoulPot(j)); + FScoul(2,Ia) = FScoul(2,Ia) - dQLydR*(U(j)*q(j) + CoulPot(j)); + FScoul(3,Ia) = FScoul(3,Ia) - dQLzdR*(U(j)*q(j) + CoulPot(j)); + end + +end +FScoul = 2*FScoul; + +Ftot = Fband0 + Fcoul + Fdipole + FPulay + FScoul + FSdipole; % Collected total force diff --git a/proxies/matlab/Forces_save_00.m b/proxies/matlab/Forces_save_00.m new file mode 100644 index 00000000..812f56dd --- /dev/null +++ b/proxies/matlab/Forces_save_00.m @@ -0,0 +1,108 @@ +function [Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,U,q,Rx,Ry,Rz,Nats,H_INDEX_START,H_INDEX_END) + +HDIM = max(size(H0)); +Fcoul = zeros(3,Nats); +for i = 1:Nats + Fcoul(1,i) = -q(i)*q(:)'*dCx(:,i); + Fcoul(2,i) = -q(i)*q(:)'*dCy(:,i); + Fcoul(3,i) = -q(i)*q(:)'*dCz(:,i); +end + +Fband0 = zeros(3,Nats); +for i = 1:Nats % Slater-Koster Force SKForce from Tr[D*dH0/dR] + I_A = H_INDEX_START(i); + I_B = H_INDEX_END(i); + Xtmp = dHx(I_A:I_B,:)*D(:,I_A:I_B); + Ytmp = dHy(I_A:I_B,:)*D(:,I_A:I_B); + Ztmp = dHz(I_A:I_B,:)*D(:,I_A:I_B); + Fband0(1,i) = -2*2*trace(Xtmp); + Fband0(2,i) = -2*2*trace(Ytmp); + Fband0(3,i) = -2*2*trace(Ztmp); +end + +FSdipole = zeros(3,Nats); +for k = 1:Nats % Slater-Koster Force SKForce from Tr[D*dH0/dR] + k_a = H_INDEX_START(k); + k_b = H_INDEX_END(k); + d_Sx = zeros(HDIM); + d_Sx(:,k_a:k_b) = dSx(:,k_a:k_b); d_Sx(k_a:k_b,:) = dSx(:,k_a:k_b)'; + d_Sy = zeros(HDIM); + d_Sy(:,k_a:k_b) = dSy(:,k_a:k_b); d_Sy(k_a:k_b,:) = dSy(:,k_a:k_b)'; + d_Sz = zeros(HDIM); + d_Sz(:,k_a:k_b) = dSz(:,k_a:k_b); d_Sz(k_a:k_b,:) = dSz(:,k_a:k_b)'; + + dqi_dRkX = zeros(Nats,1); dqi_dRkY = zeros(Nats,1); dqi_dRkZ = zeros(Nats,1); + for i = 1:Nats + if i == k + dqi_dRkX(i) = 2*trace(D(k_a:k_b,:)*dSx(:,k_a:k_b)); + dqi_dRkY(i) = 2*trace(D(k_a:k_b,:)*dSy(:,k_a:k_b)); + dqi_dRkZ(i) = 2*trace(D(k_a:k_b,:)*dSz(:,k_a:k_b)); + else + i_a = H_INDEX_START(i); i_b = H_INDEX_END(i); + dqi_dRkX(i) = 2*trace(dSx(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + dqi_dRkY(i) = 2*trace(dSy(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + dqi_dRkZ(i) = 2*trace(dSz(i_a:i_b,k_a:k_b)*D(k_a:k_b,i_a:i_b)); + end + FSdipole(1,k) = FSdipole(1,k) - dqi_dRkX(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + FSdipole(2,k) = FSdipole(2,k) - dqi_dRkY(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + FSdipole(3,k) = FSdipole(3,k) - dqi_dRkZ(i)*(Rx(i)*Efield(1)+Ry(i)*Efield(2)+Rz(i)*Efield(3)); + end + if k == 1 + check = dqi_dRkX(1:10)' + end +end + +Fdipole = zeros(3,Nats); +for i = 1:Nats + Fdipole(1,i) = q(i)*Efield(1); % Forces from External field-dipole interaction + Fdipole(2,i) = q(i)*Efield(2); % Forces from External field-dipole interaction + Fdipole(3,i) = q(i)*Efield(3); % Forces from External field-dipole interaction +end + +Z = S^(-1/2); +SIHD = 2*2*Z*Z'*H*D; % Pulay Force FPUL from 2Tr[ZZ'HD*dS/dR] +FPulay = zeros(3,Nats); +for i = 1:Nats + I_A = H_INDEX_START(i); + I_B = H_INDEX_END(i); + Xtmp = dSx(I_A:I_B,:)*SIHD(:,I_A:I_B); + Ytmp = dSy(I_A:I_B,:)*SIHD(:,I_A:I_B); + Ztmp = dSz(I_A:I_B,:)*SIHD(:,I_A:I_B); + FPulay(1,i) = trace(Xtmp); + FPulay(2,i) = trace(Ytmp); + FPulay(3,i) = trace(Ztmp); +end + +CoulPot = C*q; % Factor of 2 or 1/2 or +/- +FScoul = zeros(3,Nats); % Coulomb force FSCOUL from nonorthogonality +dDSX = zeros(HDIM,1); +dDSY = zeros(HDIM,1); +dDSZ = zeros(HDIM,1); +for Ia = 1:Nats % Derivatives Ra + Ia_A = H_INDEX_START(Ia); + Ia_B = H_INDEX_END(Ia); + for iq = 1:HDIM + dDSX(iq) = D(iq,Ia_A:Ia_B)*dSx(Ia_A:Ia_B,iq); + dDSY(iq) = D(iq,Ia_A:Ia_B)*dSy(Ia_A:Ia_B,iq); + dDSZ(iq) = D(iq,Ia_A:Ia_B)*dSz(Ia_A:Ia_B,iq); + end + for iq = Ia_A:Ia_B + dDSX(iq) = dDSX(iq) + D(iq,:)*dSx(iq,:)'; + dDSY(iq) = dDSY(iq) + D(iq,:)*dSy(iq,:)'; + dDSZ(iq) = dDSZ(iq) + D(iq,:)*dSz(iq,:)'; + end + for j = 1:Nats % Get the Mulliken charges for all atoms + j_a = H_INDEX_START(j); + j_b = H_INDEX_END(j); + dQLxdR = sum(dDSX(j_a:j_b)); % Derivative with respect to Ia of charge on atom j + dQLydR = sum(dDSY(j_a:j_b)); + dQLzdR = sum(dDSZ(j_a:j_b)); + FScoul(1,Ia) = FScoul(1,Ia) - dQLxdR*(U(j)*q(j) + CoulPot(j)); + FScoul(2,Ia) = FScoul(2,Ia) - dQLydR*(U(j)*q(j) + CoulPot(j)); + FScoul(3,Ia) = FScoul(3,Ia) - dQLzdR*(U(j)*q(j) + CoulPot(j)); + end + +end +FScoul = 2*FScoul; + +Ftot = Fband0 + Fcoul + Fdipole + FPulay + FScoul + FSdipole; % Collected total force diff --git a/proxies/matlab/Get_q.m b/proxies/matlab/Get_q.m new file mode 100644 index 00000000..852e3dba --- /dev/null +++ b/proxies/matlab/Get_q.m @@ -0,0 +1,9 @@ +function [q] = Get_q(D,S,H_Index_Start,H_Index_End,Znuc,Nats) + +Z = S^(-1/2); +DS = 2*diag(D*S); +q = zeros(Nats,1); +for i = 1:Nats + q(i) = sum(DS(H_Index_Start(i):H_Index_End(i))) - Znuc(i); +end + diff --git a/proxies/matlab/GetdC.m b/proxies/matlab/GetdC.m new file mode 100644 index 00000000..c068cc1d --- /dev/null +++ b/proxies/matlab/GetdC.m @@ -0,0 +1,86 @@ +function [dCx,dCy,dCz] = GetdC(Nr_atoms,dh,Coulomb_acc,Rcut,TIMERATIO,HDIM,Hubbard_U,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox) + + dq_J = zeros(1,Nr_atoms); Nats = Nr_atoms; + dCx = zeros(Nr_atoms); dCy = zeros(Nr_atoms); dCz = zeros(Nr_atoms); + Coulomb_Pot_k = 0; + RX0 = RX; RY0 = RY; RZ0 = RZ; + + for J = 1:Nr_atoms + + dq_J = 0*dq_J; + dq_J(J) = 1; + + RX(J) = RX0(J) + dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_p = Coulomb_Pot_Real + Coulomb_Pot_k; + RX = RX0; + + RX(J) = RX0(J) - dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_m = Coulomb_Pot_Real + Coulomb_Pot_k; + RX = RX0; + + dCx(:,J) = (Coulomb_Pot_p - Coulomb_Pot_m)/(2*dh); + +%%%% +%RX0 = RX; +%RX(J) = RX0(J) + dh; +%Cp = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nr_atoms,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +%RX = RX0; +% +%RX(J) = RX0(J) - dh; +%Cm = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nr_atoms,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +%RX = RX0; +%dC_x = (Cp-Cm)/(2*dh); +%%%% + + RY = RY0; RY(J) = RY0(J) + dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_p = Coulomb_Pot_Real + Coulomb_Pot_k; + RY = RY0; + + RY(J) = RY0(J) - dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_m = Coulomb_Pot_Real + Coulomb_Pot_k; + RY = RY0; + + dCy(:,J) = (Coulomb_Pot_p - Coulomb_Pot_m)/(2*dh); + + RZ(J) = RZ0(J) + dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_p = Coulomb_Pot_Real + Coulomb_Pot_k; + RZ = RZ0; + + RZ(J) = RZ0(J) - dh; + [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + for I = 1:Nr_atoms + [Coulomb_Pot_Real(I),Coulomb_Force_Real(:,I)] = Ewald_Real_Space(I,RX,RY,RZ,LBox,dq_J,Hubbard_U,Element_Type,Nr_atoms,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType); + end + [Coulomb_Pot_k,Coulomb_Force_k] = Ewald_k_Space(RX,RY,RZ,LBox,dq_J,Nr_atoms,Coulomb_acc,TIMERATIO); + Coulomb_Pot_m = Coulomb_Pot_Real + Coulomb_Pot_k; + RZ = RZ0; + + dCz(:,J) = (Coulomb_Pot_p - Coulomb_Pot_m)/(2*dh); + + dq_J(J) = 0; + end diff --git a/proxies/matlab/GetdH.m b/proxies/matlab/GetdH.m new file mode 100644 index 00000000..c86abcd6 --- /dev/null +++ b/proxies/matlab/GetdH.m @@ -0,0 +1,38 @@ +function [dH0x,dH0y,dH0z] = GetdH(Nr_atoms,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox,nrnnlist,nnRx,nnRy,nnRz,nnType) + +dH0x = zeros(HDIM,HDIM); dH0y = zeros(HDIM,HDIM); dH0z = zeros(HDIM,HDIM); +for I = 1:Nr_atoms + Type_pair(1) = Element_Type(I); + Rax_p = [RX(I)+dx,RY(I),RZ(I)]; Rax_m = [RX(I)-dx,RY(I),RZ(I)]; + Ray_p = [RX(I),RY(I)+dx,RZ(I)]; Ray_m = [RX(I),RY(I)-dx,RZ(I)]; + Raz_p = [RX(I),RY(I),RZ(I)+dx]; Raz_m = [RX(I),RY(I),RZ(I)-dx]; + IDim = H_INDEX_END(I)-H_INDEX_START(I)+1; + for J = 1:nrnnlist(I) + IJ = nnType(I,J); + if IJ ~= I + Type_pair(2) = Element_Type(IJ); + Rb = [nnRx(I,J),nnRy(I,J),nnRz(I,J)]; + JDim = H_INDEX_END(IJ)-H_INDEX_START(IJ)+1; + + [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,Es,Ep,U] = LoadBondIntegralParameters_H(Type_pair); % Used in BondIntegral(dR,fxx_xx) + diagonal(1:2) = [Es,Ep]; + dh0x_p = Slater_Koster_Pair(Rax_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + dh0x_m = Slater_Koster_Pair(Rax_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + dh0y_p = Slater_Koster_Pair(Ray_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + dh0y_m = Slater_Koster_Pair(Ray_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + dh0z_p = Slater_Koster_Pair(Raz_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + dh0z_m = Slater_Koster_Pair(Raz_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + + for II = 1:IDim + II_H = H_INDEX_START(I) + II - 1; + for JJ = 1:JDim + JJ_H = H_INDEX_START(IJ) + JJ - 1; + dH0x(II_H,JJ_H) = dH0x(II_H,JJ_H) + (dh0x_p(II,JJ)-dh0x_m(II,JJ))/(2*dx); + dH0y(II_H,JJ_H) = dH0y(II_H,JJ_H) + (dh0y_p(II,JJ)-dh0y_m(II,JJ))/(2*dx); + dH0z(II_H,JJ_H) = dH0z(II_H,JJ_H) + (dh0z_p(II,JJ)-dh0z_m(II,JJ))/(2*dx); + end + end + + end + end +end diff --git a/proxies/matlab/GetdS.m b/proxies/matlab/GetdS.m new file mode 100644 index 00000000..7564e558 --- /dev/null +++ b/proxies/matlab/GetdS.m @@ -0,0 +1,37 @@ +function [dSx,dSy,dSz] = GetdS(Nr_atoms,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox,nrnnlist,nnRx,nnRy,nnRz,nnType) + +dSx = zeros(HDIM,HDIM); dSy = zeros(HDIM,HDIM); dSz = zeros(HDIM,HDIM); +for I = 1:Nr_atoms + Type_pair(1) = Element_Type(I); + Rax_p = [RX(I)+dx,RY(I),RZ(I)]; Rax_m = [RX(I)-dx,RY(I),RZ(I)]; + Ray_p = [RX(I),RY(I)+dx,RZ(I)]; Ray_m = [RX(I),RY(I)-dx,RZ(I)]; + Raz_p = [RX(I),RY(I),RZ(I)+dx]; Raz_m = [RX(I),RY(I),RZ(I)-dx]; + IDim = H_INDEX_END(I)-H_INDEX_START(I)+1; + for J = 1:nrnnlist(I) + IJ = nnType(I,J) ; + if IJ ~= I + Type_pair(2) = Element_Type(IJ); + Rb = [nnRx(I,J),nnRy(I,J),nnRz(I,J)]; + JDim = H_INDEX_END(IJ)-H_INDEX_START(IJ)+1; + diagonal(1:2) = [1,1]; + [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi] = LoadBondIntegralParameters_S(Type_pair); + ds0x_p = Slater_Koster_Pair(Rax_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + ds0x_m = Slater_Koster_Pair(Rax_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + ds0y_p = Slater_Koster_Pair(Ray_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + ds0y_m = Slater_Koster_Pair(Ray_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + ds0z_p = Slater_Koster_Pair(Raz_p,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + ds0z_m = Slater_Koster_Pair(Raz_m,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + for II = 1:IDim + II_S = H_INDEX_START(I) + II - 1; + for JJ = 1:JDim + JJ_S = H_INDEX_START(IJ) + JJ - 1; + dSx(II_S,JJ_S) = dSx(II_S,JJ_S) + (ds0x_p(II,JJ)-ds0x_m(II,JJ))/(2*dx); + dSy(II_S,JJ_S) = dSy(II_S,JJ_S) + (ds0y_p(II,JJ)-ds0y_m(II,JJ))/(2*dx); + dSz(II_S,JJ_S) = dSz(II_S,JJ_S) + (ds0z_p(II,JJ)-ds0z_m(II,JJ))/(2*dx); + end + end + + end + end +end + diff --git a/proxies/matlab/H0_and_S.m b/proxies/matlab/H0_and_S.m new file mode 100644 index 00000000..0eb19a4d --- /dev/null +++ b/proxies/matlab/H0_and_S.m @@ -0,0 +1,95 @@ +function [H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nr_atoms,nrnnlist,nnRx,nnRy,nnRz,nnType) + +%TYPE = A.textdata(:); +%RX = A.data(:,1); RY = A.data(:,2); RZ = A.data(:,3); +CNT = 1; +for i = 1:Nr_atoms + if char(TYPE(i)) == 'H' + H_INDEX_START(i) = CNT; + NrOrb(i) = 1; % a single s orbital + CNT = CNT+1; + H_INDEX_END(i) = CNT-1; + Znuc(i) = 1; % For hydrogen + Mnuc(i) = 1.0079; + else + H_INDEX_START(i) = CNT; + NrOrb(i) = 4; % one 1 + three p orbitals + CNT = CNT+4; + H_INDEX_END(i) = CNT-1; + if char(TYPE(i)) == 'O' + Znuc(i) = 6; % For oxygen + Mnuc(i) = 15.9994; + end + if char(TYPE(i)) == 'C' + Znuc(i) = 4; % For oxygen + Mnuc(i) = 12.01; + end + if char(TYPE(i)) == 'N' + Znuc(i) = 5; % For oxygen + Mnuc(i) = 14.0067; + end + end + Element_Type(i) = char(TYPE(i)); +end +HDIM = CNT-1; + +H0 = zeros(HDIM,HDIM); % Charge independent H0! +for I = 1:Nr_atoms + + Type_pair(1) = Element_Type(I); + Ra = [RX(I),RY(I),RZ(I)]; + IDim = H_INDEX_END(I)-H_INDEX_START(I)+1; + for J = 1:nrnnlist(I) + Type_pair(2) = Element_Type(nnType(I,J)); + Rb = [nnRx(I,J),nnRy(I,J),nnRz(I,J)]; + JDim = H_INDEX_END(nnType(I,J))-H_INDEX_START(nnType(I,J))+1; +% Hamiltonian block for a-b atom pair + [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,Es,Ep,U] = LoadBondIntegralParameters_H(Type_pair); % Used in BondIntegral(dR,fxx_xx); + if I == nnType(I,J) + Hubbard_U(I) = U; + end + diagonal(1:2) = [Es,Ep]; + h0 = Slater_Koster_Pair(Ra,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + for II = 1:IDim + II_H = H_INDEX_START(I) + II - 1; + for JJ = 1:JDim + JJ_H = H_INDEX_START(nnType(I,J)) + JJ - 1; + H0(II_H,JJ_H) = h0(II,JJ) ; + H0(JJ_H,II_H) = h0(II,JJ); + end + end + end + +end +H0 = 0.5*(H0+H0'); + +S = zeros(HDIM,HDIM); +for I = 1:Nr_atoms + Type_pair(1) = Element_Type(I); + Ra = [RX(I),RY(I),RZ(I)]; + IDim = H_INDEX_END(I)-H_INDEX_START(I)+1; + + for J = 1:nrnnlist(I) + Type_pair(2) = Element_Type(nnType(I,J)); + Rb = [nnRx(I,J),nnRy(I,J),nnRz(I,J)]; + JDim = H_INDEX_END(nnType(I,J))-H_INDEX_START(nnType(I,J))+1; +% Overlap block for a-b atom pair + [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi] = LoadBondIntegralParameters_S(Type_pair); + diagonal(1:2) = [1,1]; + s0 = Slater_Koster_Pair(Ra,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal); + for II = 1:IDim + II_S = H_INDEX_START(I) + II - 1; + for JJ = 1:JDim + JJ_S = H_INDEX_START(nnType(I,J)) + JJ - 1; + S(II_S,JJ_S) = s0(II,JJ); + S(JJ_S,II_S) = s0(II,JJ); + end + end + end +end +S = 0.5*(S+S'); + +D0 = AtomicDensityMatrix(Nr_atoms,H_INDEX_START,H_INDEX_END,HDIM,Znuc); +D0 = D0/2; + + diff --git a/proxies/matlab/LoadBondIntegralParameters_H.m b/proxies/matlab/LoadBondIntegralParameters_H.m new file mode 100644 index 00000000..809ac2bc --- /dev/null +++ b/proxies/matlab/LoadBondIntegralParameters_H.m @@ -0,0 +1,261 @@ +function [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,Es,Ep,U] = LoadBondIntegralParameters_H(TYPE_PAIR) + +TYPE_a = TYPE_PAIR(1); +TYPE_b = TYPE_PAIR(2); + +if TYPE_a == 'H' + if TYPE_b == 'H' +% fss_sigma(1:8) = [-9.340000 -1.145903 -0.391777 0.000000 0.000000 0.750000 3.500000 4.000000]; + fss_sigma(1:8) = [-9.400000D0,-1.145903D0,-0.391777D0,0.000D0,0.000D0,0.750D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fps_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; +% Es = -6.35; % E_s +% Ep = 0; +% U = 12.85; % U for H + Es = -6.4835; % E_s + Ep = 0.0; + U = 12.054683; % U for H + elseif TYPE_b == 'C' +% fss_sigma(1:8) = [-9.072577 -1.393093 -0.430611 0.000000 0.000000 1.100000 3.500000 4.000000]; +% fsp_sigma(1:8) = [8.176008 -0.985177 -0.427403 0.000000 0.000000 1.100000 3.500000 4.000000]; +% fps_sigma(1:8) = [8.176008 -0.985177 -0.427403 0.000000 0.000000 1.100000 3.500000 4.000000]; + + fss_sigma(1:8) = [-9.235812D0,-1.372683D0,-0.408433D0,0.0000D0,0.0000D0,1.1000D0,3.5000D0,4.0000D0]; + fsp_sigma(1:8) = [8.104851D0,-0.936099D0,-0.626219D0,0.0000D0,0.0000D0,1.1000D0,3.5000D0,4.0000D0]; + fps_sigma(1:8) = [8.104851D0,-0.936099D0,-0.626219D0,0.0000D0,0.0000D0,1.1000D0,3.5000D0,4.0000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'O' +% fss_sigma(1:8) = [-12.230931 -1.808632 -0.421164 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.466088 -1.321262 -0.386336 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.466088 -1.321262 -0.386336 0.000000 0.000000 1.000000 3.500000 4.000000]; + + fss_sigma(1:8) = [-12.189103D0,-1.800097D0,-0.325933D0,0.0000D0,0.0000D0,1.0000D0,3.5000D0,4.0000D0]; + fsp_sigma(1:8) = [9.518733D0,-1.333235D0,-0.393710D0,0.0000D0,0.0000D0,1.0000D0,3.5000D0,4.0000D0]; + fps_sigma(1:8) = [9.518733D0,-1.333235D0,-0.393710D0,0.0000D0,0.0000D0,1.0000D0,3.5000D0,4.0000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'N' +% fss_sigma(1:8) = [-12.095890 -1.519057 -0.277247 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.851338 -1.231616 -0.370836 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.851338 -1.231616 -0.370836 0.000000 0.000000 1.000000 3.500000 4.000000]; + + fss_sigma(1:8) = [-12.631030D0,-1.585597D0,-0.250969D0,0.000D0,0.0000D0,1.000D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [9.837852D0,-1.234850D0,-0.324283D0,0.000D0,0.0000D0,1.000D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [9.837852D0,-1.234850D0,-0.324283D0,0.000D0,0.0000D0,1.000D0,3.500D0,4.000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + end +elseif TYPE_a == 'C' + if TYPE_b == 'H' +% fss_sigma(1:8) = [-9.072577 -1.393093 -0.430611 0.000000 0.000000 1.100000 3.500000 4.000000]; +% fsp_sigma(1:8) = [8.176008 -0.985177 -0.427403 0.000000 0.000000 1.100000 3.500000 4.000000]; +% fps_sigma(1:8) = [8.176008 -0.985177 -0.427403 0.000000 0.000000 1.100000 3.500000 4.000000]; + + fss_sigma(1:8) = [-9.235812D0,-1.372683D0,-0.408433D0,0.000D0,0.000D0,1.100D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [8.104851D0,-0.936099D0,-0.626219D0,0.000D0,0.000D0,1.100D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [8.104851D0,-0.936099D0,-0.626219D0,0.000D0,0.000D0,1.100D0,3.500D0,4.000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'C' +% fss_sigma(1:8) = [-9.404207 -1.363297 -0.507128 0.000000 0.000000 1.400000 3.500000 4.000000]; +% fsp_sigma(1:8) = [8.662429 -1.047410 -0.661999 0.000000 0.000000 1.400000 3.500000 4.000000]; +% fps_sigma(1:8) = [8.662429 -1.047410 -0.661999 0.000000 0.000000 1.400000 3.500000 4.000000]; +% fpp_sigma(1:8) = [6.811512 -0.552299 -0.776890 0.000000 0.000000 1.400000 3.500000 4.000000]; +% fpp_pi(1:8) = [-3.550127 -1.925572 -0.132715 0.000000 0.000000 1.400000 3.500000 4.000000]; + + fss_sigma(1:8) = [-9.197237D0,-1.607050D0,-0.535057D0,0.000D0,0.000D0,1.400D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [8.562436D0,-0.980182D0,-0.646929D0,0.000D0,0.000D0,1.400D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [8.562436D0,-0.980182D0,-0.646929D0,0.000D0,0.000D0,1.400D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [6.614756D0,-0.528591D0,-0.951460D0,0.000D0,0.000D0,1.400D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-3.678302D0,-1.881668D0,-0.255951D0,0.000D0,0.000D0,1.400D0,3.500D0,4.000D0]; + +% Es = -13.75; % E_s +% Ep = -5.28; % E_p +% U = 10.000; % U for C + + Es = -13.7199; % E_s + Ep = -5.2541; % E_p + U = 14.240811; % U for C + + elseif TYPE_b == 'O' +% fss_sigma(1:8) = [-14.369472 -2.077439 -0.875471 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.576296 -1.156217 -0.494803 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fps_sigma(1:8) = [14.037374 -1.192632 -0.654572 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_sigma(1:8) = [9.331152 -0.718120 -0.822100 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_pi(1:8) = [-5.334367 -2.263939 -0.204910 0.000000 0.000000 1.200000 3.500000 4.000000]; + + fss_sigma(1:8) = [-13.986685D0,-1.931973D0,-0.432011D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [10.718738D0,-1.389459D0,-0.182128D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [14.194791D0,-1.371650D0,-0.248285D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [8.622023D0,-0.557144D0,-0.938551D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-5.327397D0,-2.190160D0,-0.089303D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'N' +% fss_sigma(1:8) = [-7.010061 -1.730597 -0.575559 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fsp_sigma(1:8) = [7.543283 -1.293768 -0.624363 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.090970 -1.494255 -0.616711 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_sigma(1:8) = [6.892240 -0.931920 -0.769164 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_pi(1:8) = [-2.903346 -2.149349 -0.253006 0.000000 0.000000 1.500000 3.500000 4.000000]; + + fss_sigma(1:8) = [-7.409712D0,-1.940942D0,-0.219762D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [7.501761D0,-1.211169D0,-0.373905D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [8.697591D0,-1.267240D0,-0.178484D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [6.954600D0,-1.188456D0,-0.808043D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-2.921605D0,-2.203548D0,-0.409424D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + + Es = 0; Ep = 0; U = 0; + end +elseif TYPE_a == 'O' + if TYPE_b == 'H' +% fss_sigma(1:8) = [-12.230931 -1.808632 -0.421164 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.466088 -1.321262 -0.386336 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.466088 -1.321262 -0.386336 0.000000 0.000000 1.000000 3.500000 4.000000]; + + fss_sigma(1:8) = [-12.189103D0,-1.800097D0,-0.325933D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [9.518733D0,-1.333235D0,-0.393710D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [9.518733D0,-1.333235D0,-0.393710D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'C' +% fss_sigma(1:8) = [-14.369472 -2.077439 -0.875471 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fsp_sigma(1:8) = [14.037374 -1.192632 -0.654572 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.576296 -1.156217 -0.494803 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_sigma(1:8) = [9.331152 -0.718120 -0.822100 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_pi(1:8) = [-5.334367 -2.263939 -0.204910 0.000000 0.000000 1.200000 3.500000 4.000000]; + + fss_sigma(1:8) = [-13.986685D0,-1.931973D0,-0.432011D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [14.194791D0,-1.371650D0,-0.248285D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [10.718738D0,-1.389459D0,-0.182128D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [8.622023D0,-0.557144D0,-0.938551D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-5.327397D0,-2.190160D0,-0.089303D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'O' +% fss_sigma(1:8) = [-12.737687 -1.851608 -0.666621 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fsp_sigma(1:8) = [13.683050 -1.684554 -0.468349 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fps_sigma(1:8) = [13.683050 -1.684554 -0.468349 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_sigma(1:8) = [9.460772 -1.211748 -0.581016 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_pi(1:8) = [-4.494595 -2.709223 -0.284124 0.000000 0.000000 1.200000 3.500000 4.000000]; + + fss_sigma(1:8) = [-14.387756D0,-2.244278D0,-1.645605D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fsp_sigma(1:8) = [13.699127D0,-1.602358D0,-0.114474D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fps_sigma(1:8) = [13.699127D0,-1.602358D0,-0.114474D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fpp_sigma(1:8) = [9.235469D0,-1.131474D0,-0.924535D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fpp_pi(1:8) = [ -4.526526D0,-2.487174D0,-0.201464D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + +% Es = -23.96; % E_s +% Ep = -9.02; % E_p +% U = 12.15; % U for O + + Es = -23.9377; % E_s + Ep = -9.0035; % E_p + U = 11.8761410; % U for O + + elseif TYPE_b == 'N' +% fss_sigma(1:8) = [-11.430028 -2.257346 -1.152844 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fsp_sigma(1:8) = [12.143744 -0.822913 -0.676127 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fps_sigma(1:8) = [11.597479 -1.382001 -0.765170 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_sigma(1:8) = [9.465191 -1.082032 -0.769214 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_pi(1:8) = [-4.676789 -2.171480 -0.288002 0.000000 0.000000 1.200000 3.500000 4.000000]; + + fss_sigma(1:8) = [-9.360078D0,-1.293118D0,-0.379415D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [10.723048D0,-0.454312D0,-0.916563D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [10.309052D0,-0.981652D0,-0.828497D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [9.259131D0,-0.734112D0,-1.023762D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-4.532623D0,-1.999631D0,-0.286275D0,0.000D0,0.000D0,1.200D0,3.500D0,4.000D0]; + + Es = 0; Ep = 0; U = 0; + end +elseif TYPE_a == 'N' + if TYPE_b == 'H' +% fss_sigma(1:8) = [-12.095890 -1.519057 -0.277247 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.851338 -1.231616 -0.370836 0.000000 0.000000 1.000000 3.500000 4.000000]; +% fps_sigma(1:8) = [9.851338 -1.231616 -0.370836 0.000000 0.000000 1.000000 3.500000 4.000000]; + + fss_sigma(1:8) = [-12.631030D0,-1.585597D0,-0.250969D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [9.837852D0,-1.234850D0,-0.324283D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [9.837852D0,-1.234850D0,-0.324283D0,0.000D0,0.000D0,1.000D0,3.500D0,4.000D0]; + + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'C' +% fss_sigma(1:8) = [-7.010061 -1.730597 -0.575559 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fsp_sigma(1:8) = [9.090970 -1.494255 -0.616711 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fps_sigma(1:8) = [7.543283 -1.293768 -0.624363 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_sigma(1:8) = [6.892240 -0.931920 -0.769164 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_pi(1:8) = [-2.903346 -2.149349 -0.253006 0.000000 0.000000 1.500000 3.500000 4.000000]; + + fss_sigma(1:8) = [-7.409712D0,-1.940942D0,-0.219762D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fsp_sigma(1:8) = [8.697591D0,-1.267240D0,-0.178484D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fps_sigma(1:8) = [7.501761D0,-1.211169D0,-0.373905D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fpp_sigma(1:8) = [6.954600D0,-1.188456D0,-0.808043D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + fpp_pi(1:8) = [-2.921605D0,-2.203548D0,-0.409424D0,0.000D0,0.000D0,1.500D0,3.500D0,4.000D0]; + + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'O' +% fss_sigma(1:8) = [-11.430028 -2.257346 -1.152844 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fsp_sigma(1:8) = [11.597479 -1.382001 -0.765170 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fps_sigma(1:8) = [12.143744 -0.822913 -0.676127 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_sigma(1:8) = [9.465191 -1.082032 -0.769214 0.000000 0.000000 1.200000 3.500000 4.000000]; +% fpp_pi(1:8) = [-4.676789 -2.171480 -0.288002 0.000000 0.000000 1.200000 3.500000 4.000000]; + + fss_sigma(1:8) = [-9.360078D0,-1.293118D0,-0.379415D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fsp_sigma(1:8) = [10.309052D0,-0.981652D0,-0.828497D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fps_sigma(1:8) = [10.723048D0,-0.454312D0,-0.916563D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fpp_sigma(1:8) = [9.259131D0,-0.734112D0,-1.023762D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + fpp_pi(1:8) = [-4.532623D0,-1.999631D0,-0.286275D0,0.00D0,0.00D0,1.20D0,3.50D0,4.00D0]; + + Es = 0; Ep = 0; U = 0; + elseif TYPE_b == 'N' +% fss_sigma(1:8) = [-7.710330 -2.365312 -0.525527 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fsp_sigma(1:8) = [8.222314 -1.612118 -0.690081 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fps_sigma(1:8) = [8.222314 -1.612118 -0.690081 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_sigma(1:8) = [7.178570 -1.176467 -0.571049 0.000000 0.000000 1.500000 3.500000 4.000000]; +% fpp_pi(1:8) = [-2.829344 -2.408049 -0.387709 0.000000 0.000000 1.500000 3.500000 4.000000]; + + fss_sigma(1:8) = [-7.165811D0,-2.348869D0,-0.541905D0,0.00D0,0.00D0,1.50D0,3.50D0,4.00D0]; + fsp_sigma(1:8) = [8.212268D0,-1.499123D0,-0.526440D0,0.00D0,0.00D0,1.50D0,3.50D0,4.00D0]; + fps_sigma(1:8) = [8.212268D0,-1.499123D0,-0.526440D0,0.00D0,0.00D0,1.50D0,3.50D0,4.00D0]; + fpp_sigma(1:8) = [7.102331D0,-1.252366D0,-0.552533D0,0.00D0,0.00D0,1.50D0,3.50D0,4.00D0]; + fpp_pi(1:8) = [-2.828938D0,-2.376886D0,-0.560898D0,0.00D0,0.00D0,1.50D0,3.50D0,4.00D0]; + +% Es = -18.58; % E_s +% Ep = -7.09; % E_p +% U = 15.93; % U for N + + Es = -18.5565; + Ep = -7.0625; + U = 17.3729; + + end +else + Es = 0; Ep = 0; U = 0; + fss_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fss_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fsp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fps_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; +end + +% Maybe better to pre-calculate? +fss_sigma = ScaleTail(fss_sigma); +fsp_sigma = ScaleTail(fsp_sigma); +fps_sigma = ScaleTail(fps_sigma); +fpp_sigma = ScaleTail(fpp_sigma); +fpp_pi = ScaleTail(fpp_pi); diff --git a/proxies/matlab/LoadBondIntegralParameters_S.m b/proxies/matlab/LoadBondIntegralParameters_S.m new file mode 100644 index 00000000..34e57efb --- /dev/null +++ b/proxies/matlab/LoadBondIntegralParameters_S.m @@ -0,0 +1,123 @@ +function [fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi] = LoadBondIntegralParameters_S(Type_pair) + +Type_a = Type_pair(1); +Type_b = Type_pair(2); + +if Type_a == 'H' + if Type_b == 'H' + fss_sigma(1:8) = [0.575007 -1.391261 -0.778831 0.080209 -0.017759 0.750000 3.500000 4.000000]; + fsp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fps_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'C' + fss_sigma(1:8) = [0.416003 -1.459596 -0.654874 0.009140 -0.012658 1.100000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.495695 -0.901626 -1.007214 0.189808 -0.057087 1.100000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.495695 -0.901626 -1.007214 0.189808 -0.057087 1.100000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'O' + fss_sigma(1:8) = [0.404725 -1.702546 -0.707938 0.074904 -0.039922 1.000000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.447660 -0.952979 -1.163537 0.400616 -0.156965 1.000000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.447660 -0.952979 -1.163537 0.400616 -0.156965 1.000000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'N' + fss_sigma(1:8) = [0.446693 -1.500463 -0.657448 0.065741 -0.037004 1.000000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.501530 -0.785734 -1.123232 0.394878 -0.148501 1.000000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.501530 -0.785734 -1.123232 0.394878 -0.148501 1.000000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + end +elseif Type_a == 'C' + if Type_b == 'H' + fss_sigma(1:8) = [0.416003 -1.459596 -0.654874 0.009140 -0.012658 1.100000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.495695 -0.901626 -1.007214 0.189808 -0.057087 1.100000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.495695 -0.901626 -1.007214 0.189808 -0.057087 1.100000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'C' + fss_sigma(1:8) = [0.346977 -1.519820 -0.570812 -0.013518 -0.015829 1.400000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.400467 -0.984048 -0.853949 0.157178 -0.073381 1.400000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.400467 -0.984048 -0.853949 0.157178 -0.073381 1.400000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.382417 0.102889 -2.786680 2.646356 -1.134320 1.400000 3.500000 4.000000]; + fpp_pi(1:8) = [0.214357 -1.948923 -0.578323 -0.034356 -0.007257 1.400000 3.500000 4.000000]; + elseif Type_b == 'O' + fss_sigma(1:8) = [0.375339 -1.547372 -0.642492 0.020614 -0.026699 1.200000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.373027 -0.776043 -1.019920 0.257539 -0.102838 1.200000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.458068 -1.035067 -0.937868 0.190562 -0.077841 1.200000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.322293 0.795473 -3.476601 2.589965 -0.897800 1.200000 3.500000 4.000000]; + fpp_pi(1:8) = [0.244570 -1.922717 -0.573671 -0.057280 -0.004108 1.200000 3.500000 4.000000]; + elseif Type_b == 'N' + fss_sigma(1:8) = [0.263438 -1.754525 -0.584215 -0.007801 -0.021729 1.500000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.326609 -1.197485 -0.807786 0.134891 -0.084373 1.500000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.337943 -1.335442 -0.769693 0.119373 -0.079493 1.500000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.350240 -0.467439 -1.849316 1.854403 -0.988471 1.500000 3.500000 4.000000]; + fpp_pi(1:8) = [0.158424 -2.114409 -0.582346 -0.051076 -0.006183 1.500000 3.500000 4.000000]; + end +elseif Type_a == 'O' + if Type_b == 'H' + fss_sigma(1:8) = [0.404725 -1.702546 -0.707938 0.074904 -0.039922 1.000000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.447660 -0.952979 -1.163537 0.400616 -0.156965 1.000000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.447660 -0.952979 -1.163537 0.400616 -0.156965 1.000000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'C' + fss_sigma(1:8) = [0.375339 -1.547372 -0.642492 0.020614 -0.026699 1.200000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.458068 -1.035067 -0.937868 0.190562 -0.077841 1.200000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.373027 -0.776043 -1.019920 0.257539 -0.102838 1.200000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.322293 0.795473 -3.476601 2.589965 -0.897800 1.200000 3.500000 4.000000]; + fpp_pi(1:8) = [0.244570 -1.922717 -0.573671 -0.057280 -0.004108 1.200000 3.500000 4.000000]; + elseif Type_b == 'O' + fss_sigma(1:8) = [0.296445 -1.911896 -0.663451 0.038054 -0.046608 1.200000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.362143 -1.285274 -0.939591 0.204641 -0.106438 1.200000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.362143 -1.285274 -0.939591 0.204641 -0.106438 1.200000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.312044 0.121814 -2.519352 1.681266 -0.644566 1.200000 3.500000 4.000000]; + fpp_pi(1:8) = [0.193010 -2.168462 -0.580629 -0.105104 0.004891 1.200000 3.500000 4.000000]; + elseif Type_b == 'N' + fss_sigma(1:8) = [0.340064 -1.703613 -0.622348 0.036738 -0.040158 1.200000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.420014 -1.107918 -0.905594 0.188424 -0.088365 1.200000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.370946 -1.040947 -0.931097 0.252441 -0.115450 1.200000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.314073 0.499050 -2.914288 2.067657 -0.738439 1.200000 3.500000 4.000000]; + fpp_pi(1:8) = [0.223937 -1.991867 -0.537630 -0.081270 -0.004130 1.200000 3.500000 4.000000]; + end +elseif Type_a == 'N' + if Type_b == 'H' + fss_sigma(1:8) = [0.446693 -1.500463 -0.657448 0.065741 -0.037004 1.000000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.501530 -0.785734 -1.123232 0.394878 -0.148501 1.000000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.501530 -0.785734 -1.123232 0.394878 -0.148501 1.000000 3.500000 4.000000]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; + elseif Type_b == 'C' + fss_sigma(1:8) = [0.263438 -1.754525 -0.584215 -0.007801 -0.021729 1.500000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.337943 -1.335442 -0.769693 0.119373 -0.079493 1.500000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.326609 -1.197485 -0.807786 0.134891 -0.084373 1.500000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.350240 -0.467439 -1.849316 1.854403 -0.988471 1.500000 3.500000 4.000000]; + fpp_pi(1:8) = [0.158424 -2.114409 -0.582346 -0.051076 -0.006183 1.500000 3.500000 4.000000]; + elseif Type_b == 'O' + fss_sigma(1:8) = [0.340064 -1.703613 -0.622348 0.036738 -0.040158 1.200000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.370946 -1.040947 -0.931097 0.252441 -0.115450 1.200000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.420014 -1.107918 -0.905594 0.188424 -0.088365 1.200000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.314073 0.499050 -2.914288 2.067657 -0.738439 1.200000 3.500000 4.000000]; + fpp_pi(1:8) = [0.223937 -1.991867 -0.537630 -0.081270 -0.004130 1.200000 3.500000 4.000000]; + elseif Type_b == 'N' + fss_sigma(1:8) = [0.231654 -1.879002 -0.572765 -0.004579 -0.031106 1.500000 3.500000 4.000000]; + fsp_sigma(1:8) = [-0.305271 -1.385158 -0.751032 0.114531 -0.090839 1.500000 3.500000 4.000000]; + fps_sigma(1:8) = [-0.305271 -1.385158 -0.751032 0.114531 -0.090839 1.500000 3.500000 4.000000]; + fpp_sigma(1:8) = [-0.324668 -0.547805 -1.638658 1.495168 -0.827868 1.500000 3.500000 4.000000]; + fpp_pi(1:8) = [0.142909 -2.162036 -0.571942 -0.071640 -0.004682 1.500000 3.500000 4.000000]; + end +else + fss_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fsp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fps_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_sigma(1:8) = [0,0,0,0,0,0,0,0]; + fpp_pi(1:8) = [0,0,0,0,0,0,0,0]; +end + +% Maybe better to pre-calculate? +fss_sigma = ScaleTail(fss_sigma); +fsp_sigma = ScaleTail(fsp_sigma); +fps_sigma = ScaleTail(fps_sigma); +fpp_sigma = ScaleTail(fpp_sigma); +fpp_pi = ScaleTail(fpp_pi); diff --git a/proxies/matlab/Main.m b/proxies/matlab/Main.m new file mode 100644 index 00000000..59a05a5c --- /dev/null +++ b/proxies/matlab/Main.m @@ -0,0 +1,145 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF-TB - PROXY APPLICATION % +% A.M.N. Niklasson, T1, LANL % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total Energy: % +% E = 2Tr[H0(D-D0)] + (1/2)sum_{ij} q_i C_{ij} q_j - Efield*dipole % +% dipole = sum_i R_{i} q_i % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear; + +% Initial data, load atoms and coordinates, etc +%Nats = 50; % Number of atoms +%Nocc = 40; % Nr of electrons / 2 +Nats = 5; % Number of atoms +Nocc = 4; % Nr of electrons / 2 +Efield = 0*0.1*[0.90,0.0,-.00]'; %%% DOES NOT GIVE CRRECT FORCES FOR Efield > 0 +Te = 100 % Some electronic temperature +A = importdata('COORD.dat'); +TYPE = A.textdata(:); +RX = A.data(:,1); RY = A.data(:,2); RZ = A.data(:,3); +%LBox(1) = 14; LBox(2) = 14; LBox(3) = 14 % PBC +LBox(1) = 5; LBox(2) = 5; LBox(3) = 5 % PBC + +% Get Hamiltonian, Overlap, atomic DM = D0 (vector only), etc +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,4.0,Nats); +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats,nrnnlist,nnRx,nnRy,nnRz,nnType); +HDIM = max(size(H0)); +Z = S^(-1/2); +Z0 = Z; S0 = S; +Rcut = 10.42; Coulomb_acc = 10e-7; TIMERATIO = 10; + +% Get Coulomb Matrix. In principle we do not need an explicit representation of the Coulomb matrix C! +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + +% SCF ground state optimization for H and D and q and occupation factors f, D*S*D = D, Tr[DS] = Nocc, f in [0,1] +[H,Hcoul,Hdipole,D,Dorth,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); + +[Etot,Eband0,Ecoul,Edipole,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +Eneries = [Etot,Eband0,Ecoul,Edipole,S_ent] +ZI = S^(1/2); +DO = ZI*D*ZI'; + +dx = 0.0001; +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,4.0,Nats); +[dSx,dSy,dSz] = GetdS(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox,nrnnlist,nnRx,nnRy,nnRz,nnType); +[dHx,dHy,dHz] = GetdH(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox,nrnnlist,nnRx,nnRy,nnRz,nnType); +[dCx,dCy,dCz] = GetdC(Nats,dx,Coulomb_acc,Rcut,TIMERATIO,HDIM,Hubbard_U,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); + +[Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,Hubbard_U,q,RX,RY,RZ,Nats,H_INDEX_START,H_INDEX_END); + +Force_1 = Ftot(1,:) +Force_2 = Ftot(2,:) +Force_2 = Ftot(3,:) +pause + +RX0 = RX; +%%%%%%%% FINITE DIFF FORCE + +DD = D; +q0 = Get_q(DD,S,H_INDEX_START,H_INDEX_END,Znuc,Nats); +CC = C; RX0 = RX; RY0 = RY; RZ0 = RZ; HH0 = H0; HH = H; + +RX = RX0; RX(1) = RX0(1) + 0.0001; + +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,4.0,Nats); +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats,nrnnlist,nnRx,nnRy,nnRz,nnType); Z = S^(-1/2); +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +[H,Hcoul,Hdipole,D,Dorth,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +%[Etot_p,Eband0_p,Ecoul_p,Edipole_p,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,DD,q0,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +[Etot_p,Eband0_p,Ecoul_p,Edipole_p,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +q_p = q; H_p = H; D_p = D; +q0_p = Get_q(DD,S,H_INDEX_START,H_INDEX_END,Znuc,Nats); + +RX = RX0; RX(1) = RX0(1) - 0.0001; +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,4.0,Nats); +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats,nrnnlist,nnRx,nnRy,nnRz,nnType); Z = S^(-1/2); +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +[H,Hcoul,Hdipole,D,Dorth,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +%[Etot_m,Eband0_m,Ecoul_m,Edipole_m,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,DD,q0,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +[Etot_m,Eband0_m,Ecoul_m,Edipole_m,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +q_m = q; H_m = H; D_m = D; +q0_m = Get_q(DD,S,H_INDEX_START,H_INDEX_END,Znuc,Nats); +RX = RX0; + +% Fixed charges d_ETOT = -0.241562399168060; +% Flexible charges d_ETOT = 0.164765711758719 +% Diff = -0.406328110926779 +d_ETOT = (Etot_p - Etot_m)/.0002 +F_analytic = Ftot(1,1) % = -0.214411998896872 with flexible D +ForceSum = Fcoul + Fband0 + Fdipole; % Correct for fixed D = DD and q = q0 +Force_without_FS = ForceSum(1,1) % = d_ETOT Correct for fixed D = DD and q = q0 +DipoleForce = Fdipole(1,1) +COmpare_Dipole_f = (Edipole_p - Edipole_m)/.0002 % = Fdipole(1,1) Correct for fixed D and q +f_Pul = FPulay(1,1) +fs_coul = FScoul(1,1) +fs_dip = FSdipole(1,1) +d_q = (q0_p - q0_m)/.0002; +fsForce = 0; +for i = 1:Nats + fsForce = fsForce + d_q(i)*(RX(i)*Efield(1) + RY(i)*Efield(2) + RZ(i)*Efield(3)); +end +fsForce % = FSdipole(1,1) Always correct + +%[Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,Hubbard_U,q,RX,RY,RZ,Nats,H_INDEX_START,H_INDEX_END); + +d_EBand0 = (Eband0_p-Eband0_m)/.0002 + +d_EBand = (2*trace(H_p*(D_p-diag(D0))) - 2*trace(H_m*(D_m-diag(D0))))/.0002 + +d_EDipole = (Edipole_p - Edipole_m)/.0002 +d_Ecoul = (Ecoul_p-Ecoul_m)/.0002 + +band0 = Fband0(1,1) +F_total = Ftot(1,1) +F_diople = Fdipole(1,1) + FSdipole(1,1) +FS_dipole = FSdipole(1,1) +F_coul = Fcoul(1,1) + FScoul(1,1) +FS_coul = FScoul(1,1) +F_pul = FPulay(1,1) +HEJ = 1 +pause + +RX = RX0; RX(1) = RX0(1) + 0.0001; +Edipole_p = 0; +for i = 1:Nats + Edipole_p = Edipole_p - q0(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +RX = RX0; RX(1) = RX0(1) - 0.0001; +Edipole_m = 0; +for i = 1:Nats + Edipole_m = Edipole_m - q0(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +d_FDipole = (Edipole_p - Edipole_m)/.0002 + +dq_dr = (q_p - q_m)/.0002; +d_Edipole_m = 0; +for i = 1:Nats + d_Edipole_m = d_Edipole_m - dq_dr(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +d_EDipole = d_Edipole_m + +F11 = Fband0(1,1) + Fcoul(1,1) + FPulay(1,1) + FScoul(1,1) diff --git a/proxies/matlab/Main_save_00.m b/proxies/matlab/Main_save_00.m new file mode 100644 index 00000000..49895e91 --- /dev/null +++ b/proxies/matlab/Main_save_00.m @@ -0,0 +1,85 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF-TB - PROXY APPLICATION % +% A.M.N. Niklasson, T1, LANL % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total Energy: % +% E = 2Tr[H0(D-D0)] + (1/2)sum_{ij} q_i C_{ij} q_j - Efield*dipole % +% dipole = sum_i R_{i} q_i % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear; + +% Initial data, load atoms and coordinates, etc +Nats = 50; % Number of atoms +Nocc = 40; % Nr of electrons / 2 +Efield = 1*[-0.40,0.3,-0.31]'; +Te = 100 % Some electronic temperature +A = importdata('COORD.dat'); +TYPE = A.textdata(:); +RX = A.data(:,1); RY = A.data(:,2); RZ = A.data(:,3); +LBox(1) = 14; LBox(2) = 14; LBox(3) = 14 % PBC + +% Get Hamiltonian, Overlap, atomic DM = D0 (vector only), etc +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +Z = S^(-1/2); +Z0 = Z; S0 = S; +HDIM = max(size(H0)); +Rcut = 10.42; Coulomb_acc = 10e-7; TIMERATIO = 10; + +% Get Coulomb Matrix. In principle we do not need an explicit representation of the Coulomb matrix C! +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + +% SCF ground state optimization for H and D and q and occupation factors f, D*S*D = D, Tr[DS] = Nocc, f in [0,1] +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot,Eband0,Ecoul,Edipole,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent + +%%%%%%%% Num Test Forces + +%%%%%%%%%%%%%%%%%%%%%%%% + +dx = 0.0001; +[dSx,dSy,dSz] = GetdS(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); +[dHx,dHy,dHz] = GetdH(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); +[dCx,dCy,dCz] = GetdC(Nats,dx,Coulomb_acc,Rcut,TIMERATIO,HDIM,Hubbard_U,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); + +[Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,Hubbard_U,q,RX,RY,RZ,Nats,H_INDEX_START,H_INDEX_END); + +% Zero Field +% Ftot(1,3) = -2.640524966084072 +% q(1:3)' = 0.299074107847914 -0.075231905026516 -0.074189178585703 + +Force_11 = Ftot(1,1) + +RX0 = RX; +%%%%%%%% FINITE DIFF FORCE +RX = RX0; RX(1) = RX0(1) + 0.0001; +% Get Hamiltonian, Overlap, atomic DM = D0 (vector only), etc +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +Z = S^(-1/2); + +% Get Coulomb Matrix. In principle we do not need an explicit representation of the Coulomb matrix C! +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + +% SCF ground state optimization for H and D and q and occupation factors f, D*S*D = D, Tr[DS] = Nocc, f in [0,1] +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot_p,Eband0,Ecoul,Edipole_p,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +Edipole_p + +RX = RX0; RX(1) = RX0(1) - 0.0001; +% Get Hamiltonian, Overlap, atomic DM = D0 (vector only), etc +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +Z = S^(-1/2); + +% Get Coulomb Matrix. In principle we do not need an explicit representation of the Coulomb matrix C! +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + +% SCF ground state optimization for H and D and q and occupation factors f, D*S*D = D, Tr[DS] = Nocc, f in [0,1] +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot_m,Eband0,Ecoul,Edipole_m,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +Edipole_m + +dETOT = (Etot_p - Etot_m)/.0002 +%dFDipole = (Edipole_p - Edipole_m)/.0002 + diff --git a/proxies/matlab/Main_save_01.m b/proxies/matlab/Main_save_01.m new file mode 100644 index 00000000..2b31add7 --- /dev/null +++ b/proxies/matlab/Main_save_01.m @@ -0,0 +1,110 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF-TB - PROXY APPLICATION % +% A.M.N. Niklasson, T1, LANL % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total Energy: % +% E = 2Tr[H0(D-D0)] + (1/2)sum_{ij} q_i C_{ij} q_j - Efield*dipole % +% dipole = sum_i R_{i} q_i % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear; + +% Initial data, load atoms and coordinates, etc +Nats = 50; % Number of atoms +Nocc = 40; % Nr of electrons / 2 +Efield = 0.0*[0.90,0.0,-.00]'; +Te = 100 % Some electronic temperature +A = importdata('COORD.dat'); +TYPE = A.textdata(:); +RX = A.data(:,1); RY = A.data(:,2); RZ = A.data(:,3); +LBox(1) = 14; LBox(2) = 14; LBox(3) = 14 % PBC + +% Get Hamiltonian, Overlap, atomic DM = D0 (vector only), etc +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +HDIM = max(size(H0)); +Z = S^(-1/2); +Z0 = Z; S0 = S; +Rcut = 10.42; Coulomb_acc = 10e-7; TIMERATIO = 10; + +% Get Coulomb Matrix. In principle we do not need an explicit representation of the Coulomb matrix C! +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); + +% SCF ground state optimization for H and D and q and occupation factors f, D*S*D = D, Tr[DS] = Nocc, f in [0,1] +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot,Eband0,Ecoul,Edipole,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent + +dx = 0.0001; +[dSx,dSy,dSz] = GetdS(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); +[dHx,dHy,dHz] = GetdH(Nats,dx,HDIM,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); +[dCx,dCy,dCz] = GetdC(Nats,dx,Coulomb_acc,Rcut,TIMERATIO,HDIM,Hubbard_U,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Element_Type,LBox); + +[Ftot,Fcoul,Fband0,Fdipole,FPulay,FScoul,FSdipole] = Forces(H,H0,S,C,D,D0,dHx,dHy,dHz,dSx,dSy,dSz,dCx,dCy,dCz,Efield,Hubbard_U,q,RX,RY,RZ,Nats,H_INDEX_START,H_INDEX_END); + +Force_11 = Ftot(1,1) + +RX0 = RX; +%%%%%%%% FINITE DIFF FORCE + +DD = D; +q0 = Get_q(DD,S,H_INDEX_START,H_INDEX_END,Znuc,Nats); +CC = C; RX0 = RX; RY0 = RY; RZ0 = RZ; HH0 = H0; HH = H; + +RX = RX0; RX(1) = RX0(1) + 0.0001; +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot_p,Eband0_p,Ecoul_p,Edipole_p,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +q_p = q; H_p = H; D_p = D; + +RX = RX0; RX(1) = RX0(1) - 0.0001; +[nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(RX,RY,RZ,LBox,Rcut,Nats); + +[H0,S,D0,H_INDEX_START,H_INDEX_END,Element_Type,Mnuc,Znuc,Hubbard_U] = H0_and_S(TYPE,RX,RY,RZ,LBox,Nats); +C = CoulombMatrix(RX,RY,RZ,LBox,Hubbard_U,Element_Type,Nats,HDIM,Coulomb_acc,TIMERATIO,nnRx,nnRy,nnRz,nrnnlist,nnType,H_INDEX_START,H_INDEX_END); +[H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,RX,RY,RZ,H_INDEX_START,H_INDEX_END,Nocc,Hubbard_U,Znuc,Nats,Te); +[Etot_m,Eband0_m,Ecoul_m,Edipole_m,S_ent] = Energy(H0,Hubbard_U,Efield,D0,C,D,q,RX,RY,RZ,f,Te); % Energy calculation - 2*Te*S_ent +q_m = q; H_m = H; D_m = D; + +d_ETOT = (Etot_p - Etot_m)/.0002 +Ftot(1,1) + +pause +d_EBand0 = (Eband0_p-Eband0_m)/.0002 + +d_EBand = (2*trace(H_p*(D_p-diag(D0))) - 2*trace(H_m*(D_m-diag(D0))))/.0002 + +d_EDipole = (Edipole_p - Edipole_m)/.0002 +d_Ecoul = (Ecoul_p-Ecoul_m)/.0002 + +band0 = Fband0(1,1) +F_total = Ftot(1,1) +F_diople = Fdipole(1,1) + FSdipole(1,1) +FS_dipole = FSdipole(1,1) +F_coul = Fcoul(1,1) + FScoul(1,1) +FS_coul = FScoul(1,1) +F_pul = FPulay(1,1) +HEJ = 1 +pause + +RX = RX0; RX(1) = RX0(1) + 0.0001; +Edipole_p = 0; +for i = 1:Nats + Edipole_p = Edipole_p - q0(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +RX = RX0; RX(1) = RX0(1) - 0.0001; +Edipole_m = 0; +for i = 1:Nats + Edipole_m = Edipole_m - q0(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +d_FDipole = (Edipole_p - Edipole_m)/.0002 + +dq_dr = (q_p - q_m)/.0002; +d_Edipole_m = 0; +for i = 1:Nats + d_Edipole_m = d_Edipole_m - dq_dr(i)*(RX(i)*Efield(1)+RY(i)*Efield(2)+RZ(i)*Efield(3)); % External-field-Dipole interaction energy +end +d_EDipole = d_Edipole_m + +F11 = Fband0(1,1) + Fcoul(1,1) + FPulay(1,1) + FScoul(1,1) diff --git a/proxies/matlab/PBC_Coulomb.m b/proxies/matlab/PBC_Coulomb.m new file mode 100644 index 00000000..be9bcbc0 --- /dev/null +++ b/proxies/matlab/PBC_Coulomb.m @@ -0,0 +1,11 @@ +function [C] = PBC_Coulomb(R,L,N,U) + +C = zeros(N); +for i = 1:N + C(i,i) = U(i); + for j = i+1:N + Dist2 = min([(R(i)-R(j))^2,(R(i)-R(j)+L)^2,(R(i)-R(j)-L)^2]); + %C(i,j) = (U(i)+U(j))*exp(-4*sqrt(Dist2)); C(j,i) = C(i,j); + C(i,j) = (U(i)+U(j))*exp(-1*sqrt(Dist2)); C(j,i) = C(i,j); + end +end diff --git a/proxies/matlab/PBC_CoulombPot.m b/proxies/matlab/PBC_CoulombPot.m new file mode 100644 index 00000000..95f09977 --- /dev/null +++ b/proxies/matlab/PBC_CoulombPot.m @@ -0,0 +1,29 @@ +function [Vcoul,dVcoul] = PBC_CoulombPot(q,C,U) + + N = max(size(q)); + Vcoul = zeros(N,1); + dVcoul = zeros(N,N); + for i = 1:N + for j = 1:N + if i~=j + Vcoul(i) = Vcoul(i) + q(j)/norm(R(i)-R(j)); + else + Vcoul(i) = Vcoul(i) + q(i)*U(i); + end + end + end + + for k = 1:N + for i = 1:N + for j = 1:N + if j~=i + if i==k + dVcoul(i,k) = dVcoul(i,k) - q(j)*(R(i)-R(j))/(norm(R(i)-R(j))^3); + end + if j==k + dVcoul(i,k) = dVcoul(i,k) + q(j)*(R(i)-R(j))/(norm(R(i)-R(j))^3); + end + end + end + end + end diff --git a/proxies/matlab/PBC_Energy.m b/proxies/matlab/PBC_Energy.m new file mode 100644 index 00000000..8557eeb8 --- /dev/null +++ b/proxies/matlab/PBC_Energy.m @@ -0,0 +1,30 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total energy calculation % +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [Etot,Eband0,Ecoul,Edipole,S_ent] = PBC_Energy(H0,Efield,D0,C,D,q,R,Te); + +%% E = 2*trace(H0*(D-D0)) + 0.5*sum_ij{i!=j} (qi*Cij*qj) + 0.5*sum_i qi^2*Ui - Efield*mu +%% dipole = mu(:) = sum_i qi*R(i,:); qi = 2*(D_ii-D0_ii) + +kB = 8.61739e-5; % eV/K; +N = max(size(q)); +Eband0 = 2*trace(H0*(D-D0)); % Single-particle/band energy + +Ecoul = 0.5*q'*C*q; % Coulomb energy + +Edipole = 0; +for i = 1:N + Edipole = Edipole - q(i)*R(i)*Efield; % External-field-Dipole interaction energy +end + +f = eig(D); +S_ent = 0; eps = 1e-9 +for i = 1:N + if (f(i) < 1-eps) & (f(i) > eps) + S_ent = - kB*(f(i)*log(f(i)) + (1-f(i))*log(1-f(i))); + end +end + +Etot = Eband0 + Ecoul + Edipole - 2*Te*S_ent; % Total energy + + diff --git a/proxies/matlab/PBC_Forces.m b/proxies/matlab/PBC_Forces.m new file mode 100644 index 00000000..8aeb7c19 --- /dev/null +++ b/proxies/matlab/PBC_Forces.m @@ -0,0 +1,36 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Calcualte total forces and some matrix derivatives % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [Ftot,dHdR,dCdR] = PBC_Forces(H0,Efield,D0,C,D,q,R,L,U,Rnd); + +N = max(size(q)); + +dHdR = 0*H0; +R0 = R; dR = 0.0001; +dEband0_dR = zeros(N,1); +dEcoul_dR = zeros(N,1); + +for i = 1:N + Rp = R0; + Rp(i,1) = Rp(i,1) + dR; % Finite difference forward displacement + Hp = PBC_Hamiltonian(Rp,L,N,Rnd); + Cp = PBC_Coulomb(Rp,L,N,U); + Rm = R0; + Rm(i,1) = Rm(i,1) - dR; % Finite difference backward displacement + Hm = PBC_Hamiltonian(Rm,L,N,Rnd); + Cm = PBC_Coulomb(Rm,L,N,U); + dHdR(:,i) = (Hp(:,i) - Hm(:,i))/(2*dR); %% H0 derivative collected columnwise. In reality dHdR = dHdR + dHdR' + dCdR(:,i) = (Cp(:,i) - Cm(:,i))/(2*dR); %% C derivative collected columnwise. In reality dCdR = dCdR + dCdR' +end %% Otherwise use q(:)'*dCdR(:,i), which is calculated in regular Ewald + +for i = 1:N % force contributions from band energy 2Tr[H(D-D0)] and Coulomb/Hartree energy (1/2) sum_{ij} q_i C_{ij}q_j + dEband0_dR(i) = 2*2*(D(i,:)-D0(i,:))*dHdR(:,i); + dEcoul_dR(i) = q(i)*q(:)'*dCdR(:,i); +end + +Fdipole = zeros(N,1); +for i = 1:N + Fdipole(i) = -q(i)*Efield; % Forces from External field-dipole interaction +end + +Ftot = - dEband0_dR - dEcoul_dR - Fdipole; % Collected total force diff --git a/proxies/matlab/PBC_Hamiltonian.m b/proxies/matlab/PBC_Hamiltonian.m new file mode 100644 index 00000000..4d85b51b --- /dev/null +++ b/proxies/matlab/PBC_Hamiltonian.m @@ -0,0 +1,12 @@ +function [H0] = PBC_Hamiltonian(R,L,N,Rnd) + +av = sum(Rnd)/N; +H0 = zeros(N); +for i = 1:N + H0(i,i) = 1*(Rnd(i)-av); + for j = i+1:N + Dist2 = min([(R(i)-R(j))^2,(R(i)-R(j)+L)^2,(R(i)-R(j)-L)^2]); + %H0(i,j) = (Rnd(i)+Rnd(j))*exp(-3*Dist2); H0(j,i) = H0(i,j); + H0(i,j) = (Rnd(i)+Rnd(j))*exp(-1*Dist2); H0(j,i) = H0(i,j); + end +end diff --git a/proxies/matlab/PBC_SCF.m b/proxies/matlab/PBC_SCF.m new file mode 100644 index 00000000..e33d93d7 --- /dev/null +++ b/proxies/matlab/PBC_SCF.m @@ -0,0 +1,21 @@ +function [H,Hcoul,Hdipole,D,q] = PBC_SCF(H0,Efield,D0,C,q,R,nocc,Te) + +N = max(size(H0)); +q_new = q; q_old = 0*q; +it = 0; res = 1; +Vdipole = zeros(N,1); +h = sort(eig(H0)); +mu0 = 0.5*(h(nocc)+h(nocc+1)); mu1 = 0; +while res > 1e-10 + it = it + 1; + Hdipole = diag(-R*Efield); + Hcoul = diag(C*q_new); + H = H0 + Hcoul + Hdipole; +% DA = DensityMatrix(H,nocc); % 2*trace(D) = Ne = 2*nocc + [D,mu0] = DM_Fermi(H,Te,mu0,nocc,16,1e-9,50); + q_old = q_new; + q = 2*diag(D-D0); + q_new = 0.2*q + (1-0.2)*q_old; + res = norm(q-q_old); +end + diff --git a/proxies/matlab/PBC_SCF_PRT.m b/proxies/matlab/PBC_SCF_PRT.m new file mode 100644 index 00000000..fe97eba4 --- /dev/null +++ b/proxies/matlab/PBC_SCF_PRT.m @@ -0,0 +1,43 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF linear response calculation with respect to perturbation H1 % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [H,H_1,Hcoul,Hdipole,D,D1,q] = PBC_SCF_PRT(H0,H1,C,Efield,D0,U,q,R,mu0,nocc,Te) + +mu1 = 0; +N = max(size(H0)); +q_new = q; q_old = 0*q; % Initial guess +q1 = 0*q; q1_new = q1; q1_old = q1; % Initial guess +Vdipole = zeros(N,1); + +it = 0; +while norm(q-q_old)+norm(q1-q1_old) > 1e-9 % Continue until convergence + it = it + 1; + + V1coul = C*q1_new; % Linear response in Coulomb/Hartree potential + + Vcoul = C*q_new; % Coulomb/Hartree potential + Hcoul = diag(Vcoul); % Hamiltonian from the linear response in Coulomb/Hartree potential + Hdipole = diag(-R*Efield); % Hamiltonian from external field dipole interaction + + H_1 = H1 + diag(V1coul); % Total net linear response Hamiltonian + H = H0 + Hcoul + Hdipole; % Total 0th-order Hamiltonian +% [D,D1] = DensityMatrixPRT(H,H_1,nocc); % 2*trace(D) = Ne = 2*nocc, D = density matrix, D1 = response density matrix + [D,D1,mu0,mu1] = DM_PRT_Fermi(H,H_1,Te,mu0,mu1,nocc,16,1e-9,20); +% Occ_Err = trace(D)-nocc +% OccErr1 = trace(D1)-0 +% IdErr = norm(D*D-D) +% IdErr1 = norm(D1*D+D*D1-D1) +% ComErr = norm(D*H-H*D) +% ComErr1 = norm(D1*H-H*D1 + D*H_1-H_1*D) + + q1_old = q1_new; + q1 = 2*diag(D1); + q1_new = 0.1*q1 + (1-0.1)*q1_old; % Simple linear mixing + + q_old = q_new; + q = 2*diag(D-D0); + q_new = 0.1*q + (1-0.1)*q_old; % Simple linear mixing + Res = norm(q-q_old) +norm(q1-q1_old) ; + %pause +end + diff --git a/proxies/matlab/PBC_SCF_PRT_0.m b/proxies/matlab/PBC_SCF_PRT_0.m new file mode 100644 index 00000000..fc92aa7c --- /dev/null +++ b/proxies/matlab/PBC_SCF_PRT_0.m @@ -0,0 +1,42 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF linear response calculation with respect to perturbation H1 % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [H,H_1,Hcoul,Hdipole,D,D1,q] = PBC_SCF_PRT_0(H0,H1,C,Efield,D0,U,q,R,nocc) + +N = max(size(H0)); +q_new = q; q_old = 0*q; % Initial guess +q1 = 0*q; q1_new = q1; q1_old = q1; % Initial guess +Vdipole = zeros(N,1); + +it = 0; +while norm(q-q_old)+norm(q1-q1_old) > 1e-9 % Continue until convergence + it = it + 1; + + V1coul = C*q1_new; % Linear response in Coulomb/Hartree potential + + Vcoul = C*q_new; % Coulomb/Hartree potential + Hcoul = diag(Vcoul); % Hamiltonian from the linear response in Coulomb/Hartree potential + Hdipole = diag(-R*Efield); % Hamiltonian from external field dipole interaction + + H_1 = H1 + diag(V1coul); % Total net linear response Hamiltonian + H = H0 + Hcoul + Hdipole; % Total 0th-order Hamiltonian + [D,D1] = DensityMatrixPRT(H,H_1,nocc); % 2*trace(D) = Ne = 2*nocc, D = density matrix, D1 = response density matrix +% OccErr = trace(D)-nocc +% OccErr1 = trace(D1)-0 +% IdErr = norm(D*D-D) +% IdErr1 = norm(D1*D+D*D1-D1) +% ComErr = norm(D*H-H*D) +% ComErr1 = norm(D1*H-H*D1 + D*H_1-H_1*D) +% pause + + + + q1_old = q1_new; + q1 = 2*diag(D1); + q1_new = 0.1*q1 + (1-0.1)*q1_old; % Simple linear mixing + + q_old = q_new; + q = 2*diag(D-D0); + q_new = 0.1*q + (1-0.1)*q_old; % Simple linear mixing +end + diff --git a/proxies/matlab/PBC_SCF_PRT_X.m b/proxies/matlab/PBC_SCF_PRT_X.m new file mode 100644 index 00000000..f05bd922 --- /dev/null +++ b/proxies/matlab/PBC_SCF_PRT_X.m @@ -0,0 +1,48 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SCF linear response calculation with respect to atomic displacements % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [H,H_1,Hcoul,Hdipole,dVcoul,D,D1,q] = PBC_SCF_PRT_X(H0,dHdR,C,dCdR,Efield,D0,U,q,R,mu0,nocc,k,Te) + +N = max(size(H0)); +q_new = q; q_old = 0*q; +q1 = 0*q; q1_new = q1; q1_old = q1; +Vdipole = zeros(N,1); +mu1 = 0; + +H1 = zeros(N); +H1(:,k) = dHdR(:,k); +H1 = H1 + H1'; + +it = 0; +while norm(q-q_old)+norm(q1-q1_old) > 1e-9 + it = it + 1; + + V1coul = C*q1_new; % Linear response in Hartree/Coulomb potential from charge response due to dsiplacement + + dVcoul = dCdR(:,k)*q_new(k); % Linear response in Hartree/Coulomb potential from displacement only + dVcoul(k) = dVcoul(k) + q_new'*dCdR(:,k); % Combined total linear response in Hartree/Coulomb energy from displacement + + Vcoul = C*q_new; % Coulomb/Hartree potential + Hcoul = diag(Vcoul); % Coulomb/Hartree Hamiltonian + Hdipole = diag(-R*Efield); % Hamiltonian from external field-dipole interaction + dR = 0*R; dR(k) = 1; + + H_1 = H1 + diag(V1coul) + diag(dVcoul) + diag(-dR*Efield); % Linear response Hamiltonian + H = H0 + Hcoul + Hdipole; % Total ground-state Kohn-Sham Hamiltonian +% [D,D1] = DensityMatrixPRT(H,H_1,nocc); % 2*trace(D) = Ne = 2*nocc, D = density matrix, D1 = response density matrix +% Occ1 = trace(D1) + [D,D1,mu0,mu1] = DM_PRT_Fermi(H,H_1,Te,mu0,mu1,nocc,16,1e-9,20); +% Occ2 = trace(D1) +% IdFel = norm(D*D-D) +% norm(q-q_old)+norm(q1-q1_old) +% pause + + q1_old = q1_new; + q1 = 2*diag(D1); % Linear response in atom-projected charges + q1_new = 0.1*q1 + (1-0.1)*q1_old; % Simple linear mixing + + q_old = q_new; + q = 2*diag(D-D0); % Atomic charges + q_new = 0.1*q + (1-0.1)*q_old; % Simple linear mixing +end + diff --git a/proxies/matlab/PBC_main.m b/proxies/matlab/PBC_main.m new file mode 100644 index 00000000..3c85308e --- /dev/null +++ b/proxies/matlab/PBC_main.m @@ -0,0 +1,101 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Dual Susceptibility approach to calculate Born-Effective charges % +% 1-dimensional DFTB example with periodic boundary conditions % +% A.M.N. Niklasson, T1, LANL % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Todo: Implement in DFTB/LATTE, which includes % +% 0) Extenson from 1D to 3D with x,y, and z % +% 1) Extension to fractional occupation Te > 0, Done! % +% 2) Extension to general non-orthonormal basis sets % +% 3) If possible, do Periodic Boundary Conditions correctly, % +% without results depending on the edges in Hdipole, Correct!% +% 4) Implement response calculation with AI hardware/GPU % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Total Energy: % +% E = 2Tr[H0(D-D0)] + (1/2)sum_{ij} q_i C_{ij} q_j - Efield*dipole % +% dipole = sum_i R_{i} q_i, half filled, 1 basis-function/atom % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear; +N = 20; % N > 2 % Number of atoms and basis functions +Te = 50000 % Some electronic temperature +Efield = 0.0000; % External field +/- dEfield give the BEQ from force derivative +atoms = [1:N]; % Atomic positions +R0 = atoms; +atoms = [N-1:N,1:N-2]; % Atomic positions shifted cyclically => same BEQ but shifted +SEED = atoms; Rnd = (sin(2.4+3*SEED(:).^3-sin(pi*SEED(:)/N))); % "Randomized" seed for models +Rnd2 = (10 + 1*(sin(12+3.3*SEED(:).^5-sin(pi*SEED(:))))); % "Randomized" seed for models +R = atoms'; L = N; %R = R + 3.3; +U = Rnd2; +D0 = eye(N)/2; nocc = N/2; % Atomic denity matrix +H0 = PBC_Hamiltonian(R,L,N,Rnd); C = PBC_Coulomb(R,L,N,U); % Hamiltonian H0 and Coulomb matrix C, toy models + +n = N; M = 1; % M is the number of unit cells +Rtmp = R; Rndtmp = Rnd; Rndtmp2 = Rnd2; +for i = 1:M + R((i-1)*n+1:i*n) = (i-1)*L + Rtmp(1:n); + Rnd((i-1)*n+1:i*n) = Rndtmp(1:n); + Rnd2((i-1)*n+1:i*n) = Rndtmp2(1:n); +end +N = n*M; L = N; nocc = N/2; D0 = eye(N)/2; +U = Rnd2; +H0 = PBC_Hamiltonian(R,L,N,Rnd); C = PBC_Coulomb(R,L,N,U); % Hamiltonian H0 and Coulomb matrix C, toy models + +[D,mu0] = DensityMatrix(H0,nocc); q = 2*(diag(D-D0)); % Density matrix and first initial charge guess +[D,mu0] = DM_Fermi(H0,Te,mu0,nocc,16,1e-9,100); +[H,Hcoul,Hdipole,D,q] = PBC_SCF(H0,Efield,D0,C,q,R,nocc,Te); % Self-consistent optimization + +[Etot,Eband0,Ecoul,Edipole,S_ent] = PBC_Energy(H0,Efield,D0,C,D,q,R,Te); % Energy calculation - 2*Te*S_ent +[Ftot,dHdR,dCdR] = PBC_Forces(H0,Efield,D0,C,D,q,R,L,U,Rnd); % Forces and H0 and C derviative matrices (column wise) + +A = diag(R0); % Position operator +a_dipole = 2*trace(A*(D-D0)) % Dipole +alt_a_dipole = R'*q +pause + +%%% Calculate response in dipole with respect to atomic displacement, i.e. where d_dipole/dR_k = d^2_E//(dRk dEfield) +%%%% Use direct perturbation with respect to displacement, calculated sepconsistently as in DF-PRT +for k = 1:N + [H,H_1,Hcoul,Hdipole,dVcoul,D,D1,q] = PBC_SCF_PRT_X(H0,dHdR,C,dCdR,Efield,D0,U,q,R,mu0,nocc,k,Te); % N number of SCF_PRT, one for each k!!! +% ![H,H_1,Hcoul,Hdipole,dVcoul,D,D1,q] = PBC_SCF_PRT_X(H0,dHdR,C,dCdR,Efield,D0,U,q,R0,mu0,nocc,k,Te); % N number of SCF_PRT, one for each k!!! +q1 = diag(D1); +[k,q(1:10)']; +[k,q1(1:10)']; + + dA = 0*A; dA(k,k) = 1; + dadR(k) = 2*trace(A*D1) + 2*trace(dA*(D-D0)); % d_dipole/dR_k = d^2_E//(dRk dEfield) = 2*R'*q1 + 2*q(k); + Same = [dadR(k) ,2*R0*q1 + q(k)]; +end +a_dipole = R'*q +a_dipole_R0 = R0*q + +%% Use dual SCF susceptibility approach to DF-PRT with respect to dipole observable A +%% Susceptibility for dipole observable -> XA +A0 = A; +Q = eye(N)-D; +%[H,H_1,Hcoul,Hdipole,D,XA,q] = PBC_SCF_PRT(H0,A,C,Efield,D0,U,q,R,mu0,nocc,Te); % Only one SCF_PRT using the dual susceptibility approach!!! +[H,H_1,Hcoul,Hdipole,D,XA,q] = PBC_SCF_PRT(H0,A,C,Efield,D0,U,q,R0,mu0,nocc,Te); % Only one SCF_PRT using the dual susceptibility approach!!! +%[H,H_1,Hcoul,Hdipole,D,XA,q] = PBC_SCF_PRT_0(H0,A,C,Efield,D0,U,q,R,nocc); % At Te = 0 + +for k = 1:N %% Calculate dipole response using XA susceptibility + dA = 0*A; dA(k,k) = 1; + dVcoul = zeros(N,1); dR = zeros(N,1); dR(k) = 1; + dH = zeros(N); + dH(:,k) = dHdR(:,k); + dH = dH + dH'; + + dVcoul = dCdR(:,k)*q(k); dVcoul(k) = dVcoul(k) + q'*dCdR(:,k); + dH = dH + diag(dVcoul) + diag(-dR*Efield); + + da_dR(k) = 2*trace(XA*dH) + 2*trace(dA*(D-D0)); % d_dipole/dR_k = d^2_E//(dRk dEfield) from susceptibility calculation +end + +a_dipole = 2*trace(A*(D-D0)) % Still the same! + +% Check equivalence between the direct DF-PRT approach and the dual susceptibility formulation +Reldiff = norm(dadR-da_dR)/norm(dadR) +%q' +mm = 2 +dadR +da_dR +%da_dR(n*(mm-1)+1:mm*n) +%da_dR(n*mm+1:(mm+1)*n) diff --git a/proxies/matlab/SCF.m b/proxies/matlab/SCF.m new file mode 100644 index 00000000..2cb606ea --- /dev/null +++ b/proxies/matlab/SCF.m @@ -0,0 +1,50 @@ +function [H,Hcoul,Hdipole,D,Dorth,q,f] = SCF(H0,S,Efield,C,Rx,Ry,Rz,H_Index_Start,H_Index_End,nocc,U,Znuc,Nats,Te) + +N = max(size(H0)); +it = 0; Res = 1; +Z = S^(-1/2); +h = sort(eig(Z'*H0*Z)); +mu0 = 0.5*(h(nocc)+h(nocc+1)); +[D,mu0] = DM_Fermi(Z'*H0*Z,Te,mu0,nocc,16,1e-9,50); +D = Z*D*Z'; +DS = 2*diag(D*S); +q = zeros(Nats,1); +for i = 1:Nats + q(i) = sum(DS(H_Index_Start(i):H_Index_End(i))) - Znuc(i); +end + +while Res > 1e-10 + it = it + 1; + Dipole = diag(-Rx*Efield(1)-Ry*Efield(2)-Rz*Efield(3)); + Hdipole = zeros(N); + CoulPot = C*q; + + Hcoul = zeros(N); + for i = 1:Nats + for j = H_Index_Start(i):H_Index_End(i) + Hdipole(j,j) = Dipole(i); + Hcoul(j,j) = U(i)*q(i) + CoulPot(i); + end + end + + Hcoul = 0.5*Hcoul*S + 0.5*S*Hcoul; + Hdipole = 0.5*Hdipole*S + 0.5*S*Hdipole; + H = H0 + Hcoul + Hdipole; + + [Dorth,mu0] = DM_Fermi(Z'*H*Z,Te,mu0,nocc,16,1e-9,50); + + D = Z*Dorth*Z'; + q_old = q; + + DS = 2*diag(D*S); + for i = 1:Nats + q(i) = sum(DS(H_Index_Start(i):H_Index_End(i))) - Znuc(i); + end + + Res = norm(q-q_old); + + q = q_old + 0.2*(q-q_old); + +end +f = eig(0.5*(Dorth+Dorth')); + diff --git a/proxies/matlab/SCF_save_00.m b/proxies/matlab/SCF_save_00.m new file mode 100644 index 00000000..7dc14a23 --- /dev/null +++ b/proxies/matlab/SCF_save_00.m @@ -0,0 +1,50 @@ +function [H,Hcoul,Hdipole,D,q,f] = SCF(H0,S,Efield,C,Rx,Ry,Rz,H_Index_Start,H_Index_End,nocc,U,Znuc,Nats,Te) + +N = max(size(H0)); +it = 0; Res = 1; +Z = S^(-1/2); +h = sort(eig(Z'*H0*Z)); +mu0 = 0.5*(h(nocc)+h(nocc+1)); +[D,mu0] = DM_Fermi(Z'*H0*Z,Te,mu0,nocc,16,1e-9,50); +D = Z*D*Z'; +DS = 2*diag(D*S); +q = zeros(Nats,1); +for i = 1:Nats + q(i) = sum(DS(H_Index_Start(i):H_Index_End(i))) - Znuc(i); +end + +while Res > 1e-10 + it = it + 1; + Dipole = diag(-Rx*Efield(1)-Ry*Efield(2)-Rz*Efield(3)); + Hdipole = zeros(N); + CoulPot = C*q; + + Hcoul = zeros(N); + for i = 1:Nats + for j = H_Index_Start(i):H_Index_End(i) + Hdipole(j,j) = Dipole(i); + Hcoul(j,j) = U(i)*q(i) + CoulPot(i); + end + end + + Hcoul = 0.5*Hcoul*S + 0.5*S*Hcoul; + Hdipole = 0.5*Hdipole*S + 0.5*S*Hdipole; + H = H0 + Hcoul + Hdipole; + + [Dorth,mu0] = DM_Fermi(Z'*H*Z,Te,mu0,nocc,16,1e-9,50); + + D = Z*Dorth*Z'; + q_old = q; + + DS = 2*diag(D*S); + for i = 1:Nats + q(i) = sum(DS(H_Index_Start(i):H_Index_End(i))) - Znuc(i); + end + + Res = norm(q-q_old); + + q = q_old + 0.2*(q-q_old); + +end +f = eig(0.5*(Dorth+Dorth')); + diff --git a/proxies/matlab/ScaleTail.m b/proxies/matlab/ScaleTail.m new file mode 100644 index 00000000..51d1ff17 --- /dev/null +++ b/proxies/matlab/ScaleTail.m @@ -0,0 +1,26 @@ +function A = ScaleTail(A) +if abs(A(1)) < 1e-12 + A(9:14) = 0; +else + R1 = A(7); + RCUT = A(8); + R1SQ = R1*R1; + RMOD = R1 - A(6); + POLYNOM = RMOD*(A(2) + RMOD*(A(3) + RMOD*(A(4) + A(5)*RMOD))); + SCL_R1 = exp(POLYNOM); + DELTA = RCUT - R1; +%! Now we're using a 6th order polynomial: fitted to value, first, +%! and second derivatives at R1 and R_cut + A(9) = SCL_R1; + RMOD = R1 - A(6); + DPOLY = A(2) + 2*A(3)*RMOD + 3*A(4)*RMOD*RMOD + 4*A(5)*RMOD*RMOD*RMOD; + A(10) = DPOLY*SCL_R1; + DDPOLY = 2*A(3) + 6*A(4)*RMOD + 12*A(5)*RMOD*RMOD; + A(11) = (DPOLY*DPOLY + DDPOLY)*SCL_R1/2; + DELTA2 = DELTA*DELTA; + DELTA3 = DELTA2*DELTA; + DELTA4 = DELTA3*DELTA; + A(12) = (-1/DELTA3)*(3*A(11)*DELTA2 + 6*A(10)*DELTA + 10*A(9)); + A(13) = (1/DELTA4)*(3*A(11)*DELTA2 + 8*A(10)*DELTA + 15*A(9)); + A(14) = (-1/(10*DELTA3))*(6*A(13)*DELTA2 + 3*A(12)*DELTA + A(11)); +end diff --git a/proxies/matlab/Slater_Koster_Block.m b/proxies/matlab/Slater_Koster_Block.m new file mode 100644 index 00000000..29542302 --- /dev/null +++ b/proxies/matlab/Slater_Koster_Block.m @@ -0,0 +1,104 @@ +function x0 = Slater_Koster_Block(IDim,JDim,Ra,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal) + +%%% Standard Slater-Koster sp-parameterization for an atomic block between a pair of atoms +%%% IDim, JDim: dimensions of the output block, e.g. 1 x 4 for H-O or 4 x 4 for O-O, or 4 x 1 for O-H +%%% Ra, Rb: are the vectors of the positions of the two atoms +%%% LBox: Periodic boundary conditions, i.e. length of box in x, y, z (cubic box only) +%%% Type_pair(1 or 2): Character of the type of each atom in the pair, e.g. 'H' for hydrogen of 'O' for oxygen +%%% fss_sigma, ... , fpp_pi: paramters for the bond integrals +%%% diagonal(1 or 2): atomic energies Es and Ep or diagonal elements of the overlap i.e. diagonal = 1 + + +atom_type_a = Type_pair(1); atom_type_b = Type_pair(2); +x0 = zeros(IDim,JDim); +RXb = Rb(1); RYb = Rb(2); RZb = Rb(3); + +for nr_shift_X = -1:1 % Periodic BC shifts in X, Y and Z. Costs a lot extra! +for nr_shift_Y = -1:1 +for nr_shift_Z = -1:1 + + Rb(1) = RXb + nr_shift_X*LBox(1); % Shifts for PBC + Rb(2) = RYb + nr_shift_Y*LBox(2); + Rb(3) = RZb + nr_shift_Z*LBox(3); + Rab = Rb-Ra; % OBS b - a !!! + dR = norm(Rab); + + if dR < 1e-12 % same position and thus the same type atom_type_a = atom_type_b, Ra = Rb + if atom_type_a == 'H' % s atom 1 x 1 + x0(1,1) = x0(1,1) + diagonal(1); % diagonal(1) = Es for atoms, = 1 for overlap + else % sp atom 4 x 4 Diagonal Only + x0(1,1) = x0(1,1) + diagonal(1); % diagonal(1) = Es for atoms, = 1 for overlap + x0(2,2) = x0(2,2) + diagonal(2); % diagonal(2) = Ep for atoms, = 1 for overlap + x0(3,3) = x0(3,3) + diagonal(2); + x0(4,4) = x0(4,4) + diagonal(2); + end + else + L = Rab(1)/dR; % Direction cosines + M = Rab(2)/dR; + N = Rab(3)/dR; + + if atom_type_a == 'H' + if atom_type_b == 'H' % s-s overlap 1 x 1 block + HSSS = BondIntegral(dR,fss_sigma); % Calculate the s-s bond integral + x0(1,1) = x0(1,1) + HSSS; + else % s-sp overlap 1 x 4 block + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + x0(1,1) = x0(1,1) + HSSS; + x0(1,2) = x0(1,2) + L*HSPS; + x0(1,3) = x0(1,3) + M*HSPS; + x0(1,4) = x0(1,4) + N*HSPS; + end + else + if atom_type_b == 'H' % sp-s overlap 4 x 1 block + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + x0(1,1) = x0(1,1) + HSSS; + x0(2,1) = x0(2,1) - L*HSPS; + x0(3,1) = x0(3,1) - M*HSPS; + x0(4,1) = x0(4,1) - N*HSPS; + else % sp-sp overlap + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + HPSS = BondIntegral(dR,fps_sigma); + HPPS = BondIntegral(dR,fpp_sigma); + HPPP = BondIntegral(dR,fpp_pi); + + PPSMPP = HPPS - HPPP; + PXPX = HPPP + L*L*PPSMPP; + PXPY = L*M*PPSMPP; + PXPZ = L*N*PPSMPP; + PYPX = M*L*PPSMPP; + PYPY = HPPP + M*M*PPSMPP; + PYPZ = M*N*PPSMPP; + PZPX = N*L*PPSMPP; + PZPY = N*M*PPSMPP; + PZPZ = HPPP + N*N*PPSMPP; + + x0(1,1) = x0(1,1) + HSSS; + x0(1,2) = x0(1,2) + L*HSPS; % or 0 + x0(1,3) = x0(1,3) + M*HSPS; % or 0 + x0(1,4) = x0(1,4) + N*HSPS; % or 0 + + x0(2,1) = x0(2,1) - L*HPSS; % or 0 + + x0(2,2) = x0(2,2) + PXPX; + x0(2,3) = x0(2,3) + PXPY; + x0(2,4) = x0(2,4) + PXPZ; + + x0(3,1) = x0(3,1) - M*HPSS; % or 0 + + x0(3,2) = x0(3,2) + PYPX; + x0(3,3) = x0(3,3) + PYPY; + x0(3,4) = x0(3,4) + PYPZ; + x0(4,1) = x0(4,1) - N*HPSS; % or 0 + x0(4,2) = x0(4,2) + PZPX; + x0(4,3) = x0(4,3) + PZPY; + x0(4,4) = x0(4,4) + PZPZ; + end + end + end +end +end +end + diff --git a/proxies/matlab/Slater_Koster_Pair.m b/proxies/matlab/Slater_Koster_Pair.m new file mode 100644 index 00000000..c0f69c3d --- /dev/null +++ b/proxies/matlab/Slater_Koster_Pair.m @@ -0,0 +1,94 @@ +function x0 = Slater_Koster_Block(Ra,Rb,LBox,Type_pair,fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,diagonal) + +%%% Standard Slater-Koster sp-parameterization for an atomic block between a pair of atoms +%%% IDim, JDim: dimensions of the output block, e.g. 1 x 4 for H-O or 4 x 4 for O-O, or 4 x 1 for O-H +%%% Ra, Rb: are the vectors of the positions of the two atoms +%%% LBox: Periodic boundary conditions, i.e. length of box in x, y, z (cubic box only) +%%% Type_pair(1 or 2): Character of the type of each atom in the pair, e.g. 'H' for hydrogen of 'O' for oxygen +%%% fss_sigma, ... , fpp_pi: paramters for the bond integrals +%%% diagonal(1 or 2): atomic energies Es and Ep or diagonal elements of the overlap i.e. diagonal = 1 + + +atom_type_a = Type_pair(1); atom_type_b = Type_pair(2); +x0 = zeros(4); +RXb = Rb(1); RYb = Rb(2); RZb = Rb(3); + + Rab = Rb-Ra; % OBS b - a !!! + dR = norm(Rab); + + if dR < 1e-10 % same position and thus the same type atom_type_a = atom_type_b, Ra = Rb + if atom_type_a == 'H' % s atom 1 x 1 + x0(1,1) = x0(1,1) + diagonal(1); % diagonal(1) = Es for atoms, = 1 for overlap + else % sp atom 4 x 4 Diagonal Only + x0(1,1) = x0(1,1) + diagonal(1); % diagonal(1) = Es for atoms, = 1 for overlap + x0(2,2) = x0(2,2) + diagonal(2); % diagonal(2) = Ep for atoms, = 1 for overlap + x0(3,3) = x0(3,3) + diagonal(2); + x0(4,4) = x0(4,4) + diagonal(2); + end + else + L = Rab(1)/dR; % Direction cosines + M = Rab(2)/dR; + N = Rab(3)/dR; + + if atom_type_a == 'H' + if atom_type_b == 'H' % s-s overlap 1 x 1 block + HSSS = BondIntegral(dR,fss_sigma); % Calculate the s-s bond integral + x0(1,1) = x0(1,1) + HSSS; + else % s-sp overlap 1 x 4 block + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + x0(1,1) = x0(1,1) + HSSS; + x0(1,2) = x0(1,2) + L*HSPS; + x0(1,3) = x0(1,3) + M*HSPS; + x0(1,4) = x0(1,4) + N*HSPS; + end + else + if atom_type_b == 'H' % sp-s overlap 4 x 1 block + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + x0(1,1) = x0(1,1) + HSSS; + x0(2,1) = x0(2,1) - L*HSPS; + x0(3,1) = x0(3,1) - M*HSPS; + x0(4,1) = x0(4,1) - N*HSPS; + else % sp-sp overlap + HSSS = BondIntegral(dR,fss_sigma); + HSPS = BondIntegral(dR,fsp_sigma); + HPSS = BondIntegral(dR,fps_sigma); + HPPS = BondIntegral(dR,fpp_sigma); + HPPP = BondIntegral(dR,fpp_pi); + + PPSMPP = HPPS - HPPP; + PXPX = HPPP + L*L*PPSMPP; + PXPY = L*M*PPSMPP; + PXPZ = L*N*PPSMPP; + PYPX = M*L*PPSMPP; + PYPY = HPPP + M*M*PPSMPP; + PYPZ = M*N*PPSMPP; + PZPX = N*L*PPSMPP; + PZPY = N*M*PPSMPP; + PZPZ = HPPP + N*N*PPSMPP; + + x0(1,1) = x0(1,1) + HSSS; + x0(1,2) = x0(1,2) + L*HSPS; % or 0 + x0(1,3) = x0(1,3) + M*HSPS; % or 0 + x0(1,4) = x0(1,4) + N*HSPS; % or 0 + + x0(2,1) = x0(2,1) - L*HPSS; % or 0 + + x0(2,2) = x0(2,2) + PXPX; + x0(2,3) = x0(2,3) + PXPY; + x0(2,4) = x0(2,4) + PXPZ; + + x0(3,1) = x0(3,1) - M*HPSS; % or 0 + + x0(3,2) = x0(3,2) + PYPX; + x0(3,3) = x0(3,3) + PYPY; + x0(3,4) = x0(3,4) + PYPZ; + x0(4,1) = x0(4,1) - N*HPSS; % or 0 + x0(4,2) = x0(4,2) + PZPX; + x0(4,3) = x0(4,3) + PZPY; + x0(4,4) = x0(4,4) + PZPZ; + end + end + end + diff --git a/proxies/matlab/Thresh.m b/proxies/matlab/Thresh.m new file mode 100644 index 00000000..fd05b2d5 --- /dev/null +++ b/proxies/matlab/Thresh.m @@ -0,0 +1,10 @@ +function [X] = Thresh(X,eps); + +N = max(size(X)); +for i = 1:N +for j = 1:N + if abs(X(i,j)) < eps + X(i,j) = 0; + end +end +end diff --git a/proxies/matlab/nearestneighborlist.m b/proxies/matlab/nearestneighborlist.m new file mode 100644 index 00000000..97d40ce4 --- /dev/null +++ b/proxies/matlab/nearestneighborlist.m @@ -0,0 +1,67 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Simple N^2 brute force nearest neighborlist % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function [nrnnlist,nndist,nnRx,nnRy,nnRz,nnType,nnStruct,nrnnStruct] = nearestneighborlist(Rx,Ry,Rz,LBox,Rcut,N) + +% Rx, Ry, Rz are the coordinates of atoms +% LBox dimensions of peridic BC +% N number of atoms +% nrnnlist(I): number of atoms within distance of Rcut from atom I including atoms in the skin +% nndist(I,J): distance between atom I(in box) and J (including atoms in the skin) +% nnRx(I,J): x-coordinte of neighbor J to I within RCut (including atoms in the skin) +% nnRy(I,J): y-coordinte of neighbor J to I within RCut (including atoms in the skin) +% nnRz(I,J): z-coordinte of neighbor J to I within RCut (including atoms in the skin) +% nnType(I,J): The neighbor J of I corresponds to some translated atom number in the box that we need to keep track of +% nnStruct(I,J): The neigbors J to I within Rcut that are all within the box (not in the skin). +% nrnnStruct(I): Number of neigbors to I within Rcut that are all within the box (not in the skin). + +Lx = LBox(1); Ly = LBox(2); Lz = LBox(3); % Dimensions of periodic BC +nx = floor(Lx/Rcut); ny = floor(Ly/Rcut); nz = floor(Lz/Rcut); % Division into # cell boxes: nx, ny, nz + +nndist = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); % Allocation of memory, not optimized! +nnRx = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); % Make sure the fastes allocation for Forstran is used, e.g. (N,1) instead of (1,N) or the opposite! +nnRy = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); +nnRz = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); +type = zeros(10*N); +nnType = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); +nnStruct = zeros(N,floor(10+4*N/((nx+2)*(ny+2)*(nz+2)))); +nrnnStruct = zeros(N,1); +nrnnlist = zeros(N,1); + +% Simple N^2 brute force nearest neighborlist + for i = 1:N + cnt = 0; + tmp = zeros(N,1); + for m = 1:N + for j = -1:1 + for k = -1:1 + for l = -1:1 + Tx = Rx(m)+j*Lx; % Search all neigbors within a single translation (multiple translations could be necessary for small systems! + Ty = Ry(m)+k*Ly; + Tz = Rz(m)+l*Lz; + dist = norm([Rx(i),Ry(i),Rz(i)]-[Tx,Ty,Tz]); +% if (dist < Rcut) & (dist > 1e-12) % Neighbors within Rcut inlcuidng translated atoms in the "skin" + if (dist < Rcut) % Neighbors within Rcut inlcuidng translated atoms in the "skin" + cnt = cnt + 1; + nndist(i,cnt) = dist; + nnRx(i,cnt) = Tx; + nnRy(i,cnt) = Ty; + nnRz(i,cnt) = Tz; + nnType(i,cnt) = m; % Neigbor is number of original ordering number m in the box that might have been stranslated to the skin + tmp(m) = m; + end + end + end + end + end + nrnnlist(i) = cnt; + cnt2 = 0; + for ss = 1:N + if tmp(ss) > 0 % Includes only neighbors in the box within Rcut (without the skin) + cnt2 = cnt2 + 1; + nnStruct(i,cnt2) = ss; + end + end + nrnnStruct(i) = cnt2; + end + diff --git a/proxies/python/aosa_hamiltonian.py b/proxies/python/aosa_hamiltonian.py new file mode 100644 index 00000000..b8a82897 --- /dev/null +++ b/proxies/python/aosa_hamiltonian.py @@ -0,0 +1,130 @@ +"""AOSA and LATTE - prototype hamiltonian elements +Atomic orbital spherical approximation + - Reads the total number of atoms + - Constructs a set of random coordinates + - Constructs a simple Hamiltonian + - Computes the hamiltonian derivatives +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +import sedacs.driver +#import sedacs.interface_modules +from sedacs.dev.io import src_path + +try: + import ctypes + + # import gpulibInterface as gpu + + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL(str((src_path() / "gpu/nvda/libnvda.so").absolute())) + if arch == "amd": + lib = ctypes.CDLL(str((src_path() / "gpu/amd/libamd.so").absolute())) + +except: + gpuLib = False + + +__all__ = [ + "AOSA_Parameters", + "AOSA_Parameter", + "get_integral", + "get_integral_v1", +] + +class AOSA_Parameter: + def __init__(self,symbol,orb,filePath): + self.symbol = symbol + self.orbType = orb + parFile = open(filePath,"r") + count = 0 + symbFound = False + orbFound = False + for line in parFile: + info = line.split() + if(len(info) >= 1): + print(info) + if(info[0] == "Element="): + if(info[1] == symbol): + norbs = int(info[3]) + symbFound = True + print(info[1],symbol,symbFound) + if(symbFound and info[3] == orb): + print(info[5]) + orbFound = True + self.onsite = float(info[5]) + self.u = float(info[7]) + self.nl = int(info[9]) + self.kappas = np.zeros((self.nl)) + self.ds = np.zeros((self.nl,3)) + self.gammas = np.zeros((self.nl,4)) + if(symbFound and orbFound and info[0] == "LobeIndex="): + self.kappas[count] = float(info[3]) + self.ds[count,0] = float(info[5]) + self.ds[count,1] = float(info[6]) + self.ds[count,2] = float(info[7]) + + self.gammas[count,0] = float(info[9]) + self.gammas[count,1] = float(info[10]) + self.gammas[count,2] = float(info[11]) + self.gammas[count,3] = float(info[12]) + + count = count + 1 + + if(count == self.nl): + break + + + +def get_integral(coordsI,symbolI,orbI,coordsJ,symbolJ,orbJ): + + parI = AOSA_Parameters(symbolI,orbI) + parJ = AOSA_Parameters(symbolJ,orbJ) + + RIJ = coordsJ - coordsI + #Expo + inte = 0.0 + for li in range(parI.nl): + for lj in range(parJ.nl): + sn = np.sign(parI.kappas[li])*np.sign(parJ.kappas[lj]) + kappaIJ = sn*(abs(parI.kappas[li]) + abs(parJ.kappas[lj]))/2 + gammaIJ = (parI.gammas[li,0] + parI.gammas[li,0])/2 + dIJ = RIJ + parJ.ds[lj,:] - parI.ds[li,:] + #dIJ = np.dot(RIJ,parJ.ds[lj,:]) + parJ.ds[lj,:] - parI.ds[li,:] + inte = inte + kappaIJ*np.exp(gammaIJ*np.linalg.norm(dIJ)) + + sval = inte + hval = inte*(parI.onsite + parJ.onsite)/2 + + return hval, sval + + + +def get_integral_v1(coordsI,coordsJ,parI,parJ): + + RIJ = coordsJ - coordsI + #Expo + inte = 0.0 + for li in range(parI.nl): + for lj in range(parJ.nl): + sn = np.sign(parI.kappas[li])*np.sign(parJ.kappas[lj]) + kappaIJ = sn*(abs(parI.kappas[li]) + abs(parJ.kappas[lj]))/2 + gammaIJ = (parI.gammas[li,0] + parJ.gammas[lj,0])/2 + dIJ = RIJ + parJ.ds[lj,:] - parI.ds[li,:] + inte = inte + kappaIJ*np.exp(gammaIJ*np.linalg.norm(dIJ)) + + sval = inte + hval = inte*(parI.onsite + parJ.onsite)/2 + + return hval, sval + + diff --git a/proxies/python/chemical_potential.py b/proxies/python/chemical_potential.py new file mode 100644 index 00000000..4aed1810 --- /dev/null +++ b/proxies/python/chemical_potential.py @@ -0,0 +1,211 @@ +"""Chemical potential. This module will handle functions +related to the computation of chemical potential or Fermi +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +import sedacs.driver +from sedacs.dev.io import src_path +from hamiltonian_elements import * +from sedacs.file_io import read_coords_file, write_xyz_coordinates +from dnnprt import * +from proxy_global import * +from hamiltonian_random import get_random_hamiltonian +from hamiltonian_random import get_random_coordinates +from hamiltonian_random import RandomNumberGenerator + + +__all__ = [ + "get_mu", + "fermi_dirac", +] + + +## Fermi-Dirac function +# @brief Get the Fermi-Dirac distribution probabilities given a set +# of energy values +# @param mu Chemical potential +# @param energy Energy value/s +# @param etemp Electronic temperature [K] +# @param kB Boltzman constant (default is in eV/K) +# +def fermi_dirac(mu, energy, temp, kB=8.61739e-5): + ''' + Get Fermi probability distributions (values are between 0 and 1) + ''' + fermi = 1/(1 + np.exp((energy - mu)/(kB*temp))) + + return fermi + + +## Comput the chemical potential +# @brief Get the chemical potential from a set of eigenvalues and their weights +# coputed from a partial trace over a "subsytem". It first uses a Newton-Raphson (NR) +# scheme. It then applies a bisection method if NR does not converge +# @param mu0 Initial guess of mu. If set to None, it will use (HOMO+LUMO)/2. +# @param evals Eigenvalues of the system +# @param etemp Electronicn temperature +# @param nocc Number of occupied orbitals (This is typically coputed from the total +# number of electrons) +# @param dvals Weights computed from a partial trace. If set to None, weights are set to 1.0. +# @param kB Boltzman constant (default is in eV/K) +# @param verb Verbosity switch +# +def get_mu(mu0, evals, etemp, nocc, dvals=None, kB=8.61739e-5, verb=False): + + if(verb): + print('\nCalculating mu ...,') + + a = 1.0 + nmax = 30 + tol = 1.0E-10 + + HOMO = evals[int(nocc)] + LUMO = evals[int(nocc) + 1] + mu = 0.5*(LUMO + HOMO) + norbs = len(evals) + notConverged = False + if(dvals is None): + dvals = np.ones((norbs)) + for i in range(nmax+1): + fermi = fermi_dirac(mu, evals, temp) + occ = np.sum([fermi[i]*dvals[i] for i in range(norbs)]) + occErr = abs(occ - nocc) + dFermiDmu = (1/(kB*temp))*fermi*(1.0-fermi)*dvals + occ_prime = np.sum([dFermiDmu[i]*dvals[i] for i in range(norbs)]) + mu = mu + a*(nocc - occ)/occ_prime + if abs(occErr) < tol: + break + elif(abs(mu) > 1.0E10): + print('WARNING: Newton-Raphson did not converge (will try bisection) Occupation error = ', occErr) + notConverged = True + break + if verb: + print('N-R iteration (i,mu,occ,occErr)', i, mu, occ, occErr) + if(i == nmax): + print('WARNING: Newton-Raphson did not converge (will try bisection) Occupation error = ', occErr) + notConverged = True + + if(notConverged): + muMin = np.min(evals) + muMax = np.max(evals) + mu = muMin + step = abs(muMax-muMin) + Ft1 = 0.0 + Ft2 = 0.0 + prod = 0.0 + + #Sum of the occupations + fermi = fermi_dirac(mu, evals, temp) + ft1 = np.sum([fermi[i]*dvals[i] for i in range(norbs)]) + ft1 = ft1 - nocc + + for i in range(1000001): + if(i == 1000000): + print("Bisection method in gpmdcov_musearch_bisec not converging ...") + exit(0) + if(mu > muMax + 1.0 or mu < muMin - 1.0): + print("Bisection method is diverging") + print("muMin=",muMin,"muMax=",muMax) + print(evals) + exit(0) + + if(abs(ft1) < tol): #tolerance control + occErr = ft2 + break + mu = mu + step + + ft2 = 0.0 + + #New sum of the occupations + fermi = fermi_dirac(mu, evals, temp) + ft2 = np.sum([fermi[i]*dvals[i] for i in range(norbs)]) + + ft2 = ft2 - nocc + + #Product to see the change in sign. + prod = ft2*ft1 + if(prod < 0): + mu = mu - step + step = step / 2.0 #If the root is inside we shorten the step. + else: + ft1 = ft2 #If not, Ef moves forward. + if verb: + print('Bisection iteration (i,mu,occ,occErr);', i, mu, occ, ft2) + + print('Final mu, error:', mu, occErr) + + return mu + +## Estimates mu from a matrix using the Girshgorin centers +# @brief It will use the diagonal elements as an approximation +# for eigenvalues. +# @param ham Hamiltonian matrix +# @param etemp Electroninc temperature +# @param nocc Number of occupied states +# @param kB Boltzman constante (default is in units of eV/K) +# @param verb Vorbosity switch +# +def estimate_mu(ham,etemp,nocc,kB=8.61739e-5,verb=False): + diag = np.sort(np.diagonal(ham)) + if(verb): + print("Estimating the chemical potential from diagonal elements ... \n") + mu0 = 0.5*(np.max(diag) + np.min(diag)) + print("diag",diag) + print("Mu0",mu0) + mu = get_mu(mu0,diag,etemp,nocc,kB=kB,dvals=None,verb=True) + + return mu + + +if __name__ == "__main__": + + n = len(sys.argv) + + if n == 1: + print("Give the total number of elements. Example:\n") + print("proxy_a 100\n") + sys.exit(0) + else: + norbs = int(sys.argv[1]) + + verb = True + + #Build random coordinates + coords = get_random_coordinates(norbs) + + #Build random Hamiltonian (Anders' version) + ham = get_random_hamiltonian(coords) + + print("\n Hamiltonan:") + print(ham) + + nocc = 0.5*norbs + etemp = 10000 + + #Scale the diagonal elements + scalingFactor = 1.0 + for i in range(norbs): + ham[i,i] = scalingFactor*ham[i,i] + + #Estimate mu from the diagonal elements of H + muEst = estimate_mu(ham,etemp,nocc,kB=8.61739e-5) + print("\n Estimated mu:",muEst) + + #Get eigenvalues and eigenvectors + evals, evects = sp.eigh(ham) + + #Compute exact mu + mu0 = 0.0 + muReal = get_mu(mu0,evals,etemp,nocc,dvals=None,verb=True) + print("\n Exact mu:",muEst) + + print("\n Realative error of mu estimation",abs((muReal - muEst)/muReal)) + + + + + diff --git a/proxies/python/coordinates.py b/proxies/python/coordinates.py new file mode 100644 index 00000000..05a4f04b --- /dev/null +++ b/proxies/python/coordinates.py @@ -0,0 +1,58 @@ +"""coordinates +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys +import numpy as np +from random_numbers import RandomNumberGenerator + +__all__ = [ + "get_random_coordinates", +] + + +## Generating random coordinates +# @brief Creates a system of size "nats = Number of atoms" with coordindates having +# a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. +# This funtion is only used for testing purposes. +# @param nats The total number of atoms +# @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] +# +def get_random_coordinates(nats): + """Get random coordinates""" + length = int(nats ** (1 / 3)) + 1 + coords = np.zeros((nats, 3)) + latticeParam = 2.0 + atomsCounter = -1 + myrand = RandomNumberGenerator(111) + for i in range(length): + for j in range(length): + for k in range(length): + atomsCounter = atomsCounter + 1 + if atomsCounter >= nats: + break + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 0] = i * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 1] = j * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 2] = k * latticeParam + rnd + return coords + + +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the total number of atoms. Example:\n") + print("python coordinates.py 100\n") + sys.exit(0) + else: + nats = int(sys.argv[1]) + + verb = True + + coords = get_random_coordinates(nats) + + print("Coordinates:",coords) diff --git a/proxies/python/density_matrix.py b/proxies/python/density_matrix.py new file mode 100644 index 00000000..13b1bcfd --- /dev/null +++ b/proxies/python/density_matrix.py @@ -0,0 +1,309 @@ +"""density_matrix +Computes the Density matrix from a given Hamiltonian +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +from hamiltonian_elements import * +from dnnprt import * +from proxy_global import * +from coordinates import get_random_coordinates +from hamiltonian_random import get_random_hamiltonian +from hamiltonian import get_hamiltonian_proxy +from chemical_potential import fermi_dirac, get_mu +from nonortho import get_xmat +import gpuLibInterface as gpu +from init_proxy import init_proxy_accelerators +from proxy_global import bring_ham_list, bring_dm_list, bring_cublas_handle_list, bring_stream_list + +try: + import ctypes + + + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL("/home/finkeljo/sedacs-gpmdsp2/src/sedacs/gpu/nvda/libnvda.so") + if arch == "amd": + lib = ctypes.CDLL(str((src_path() / "gpu/amd/libamd.so").absolute())) + +except: + gpuLib = False + +import ctypes + + + +__all__ = [ + "get_density_matrix_proxy", + "get_density_matrix_gpu", +] + + +## Computes the Density matrix from a given Hamiltonian. +# @author Anders Niklasson +# @brief This will create a Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# +# @param ham Hamiltonian matrix +# @param nocc Number of occupied orbitals +# @param core_size Number of atoms in the cores. +# @param method Type of algorithm used to compute DM +# @param accel Type of accelerator/special device used to compute DM. Default is No and +# will only use numpy. +# @param mu Chemical potential. If set to none, the calculation will use nocc +# @param etemp Electronic temperature +# @param overlap Overlap matrix +# @param verb Verbosity. If True is passed, information is printed. +# +# @return rho Density matrix +# +def get_density_matrix_proxy(ham, nocc, norbsInCore=None, method="Diag", accel="No", mu=None, etemp=0.0, overlap=None, full_data=False, verb=False, lib=None): + """Calcualtion of the full density matrix from H""" + if verb: + print("Computing the Density matrix") + + norbs = len(ham[:, 0]) + ham_orth = np.zeros((norbs, norbs)) + if overlap is not None: + # Get the inverse overlap factor + zmat = get_xmat(overlap, method="Diag", accel="No", verb=False) + + # Orthogonalize Hamiltonian + ham_orth = np.matmul(np.matmul(np.transpose(zmat), ham), zmat) + else: + ham_orth[:, :] = ham[:, :] + + if method == "Diag" and accel == "No": + evals, evects = sp.eigh(ham_orth) + print("evals",evals) + homoIndex = nocc - 1 + lumoIndex = nocc + + #If mu is not set we set mu HOMO+LUMO/2 + if (mu is None): + mu = 0.5 * (evals[homoIndex] + evals[lumoIndex]) + else: + pass + + if verb: + print("Chemical potential = ", mu) + + rho = np.zeros((norbs, norbs)) + if verb: + print("Eigenvalues of H:", evals) + + #If the electronic temperature is 0 + if(etemp < 1.0E-10): + for i in range(norbs): + if evals[i] < mu: + rho = rho + np.outer(evects[:, i], evects[:, i]) + else: + #mu = get_mu(mu, evals, etemp, nocc, dvals=None, kB=8.61739e-5, verb=False) + fvals = np.zeros((norbs)) + fvals = fermi_dirac(mu, evals, etemp, kB=8.61739e-5) + for i in range(norbs): + if evals[i] < mu: + rho = rho + fvals[i]*np.outer(evects[:, i], evects[:, i]) + + elif method == "SP2" and accel == "No": + #rho = dnnprt(ham_orth, norbs, nocc, H1=None, refi=False) + #rho = movingmu_sp2(ham,mu=mu,thresh=0.0,miniter=5,maxiter=50,sp2conv=1.0E-6,idemtol=1.0E-6,verb=True) + #rho = golden_sp2(ham,mu=mu,thresh=0.0,miniter=5,maxiter=50,sp2conv=1.0E-6,idemtol=1.0E-6,verb=True) + rho = sp2_basic(ham,nocc,thresh=0.0,minsp2iter=5,maxsp2iter=30,sp2conv=1.0E-5,idemtol=1.0E-5,verb=True) + + elif method == "SP2" and accel == "TC": + + accel_lib = bring_accel_lib() + + #print("--------set stream in python--------------") + #stream=gpu.set_stream(accel_lib); + #print(id(stream),stream) + + + + #print("\n") + #print("--------init cublas handle in python--------------") + #cublas_handle = gpu.cublasInit(accel_lib) + #print(id(cublas_handle),cublas_handle) + + cublas_handle_list=bring_cublas_handle_list() + streams_list = bring_stream_list() + dev_list = bring_dev_list() + d_ham = dev_list[0] + d_dm = dev_list[1] + + test_handle = cublas_handle_list[0] + test_stream = streams_list[0] + + # determine size + size_of_double = 8 #bytes + matSize = norbs * norbs * size_of_double + + size_of_float = 4 #bytes + matSize_f = norbs * norbs * size_of_float + + pinned_ham = dev_list[10] + pinned_dm = dev_list[11] + #gpu.memcpyHtoH(pinned_ham, ham, matSize, accel_lib) + #gpu.memcpyHtoD(d_ham, pinned_ham, matSize, accel_lib) + gpu.memcpyHtoD(d_ham, ham, matSize, accel_lib) + #e,v = np.linalg.eigh(ham) + #print(e) + rho=np.empty((norbs,norbs)) + print("device is = ", gpu.get_device(accel_lib)) + #ham = d_ham_list[0] + #dm = d_dm_list[0] + + + gpu.dmDNNSP2(dev_list,norbs,nocc,test_handle,test_stream,accel_lib) + + #gpu.dmGoldenSP2(d_ham_list[0],d_dm_list[0],norbs,mu,cublas_handle,accel_lib) + gpu.memcpyDtoH(rho, d_dm, matSize, accel_lib) + #gpu.memcpyDtoH(pinned_dm, d_dm_list[0], matSize, accel_lib) + #gpu.memcpyDtoH(pinned_dm, d_dm, matSize, accel_lib) + #gpu.memcpyHpinnedtoH(rho, pinned_dm, matSize, accel_lib) + #e1,v1 = np.linalg.eigh(rho) + + #gpu.dmMovingMuSP2(d_ham_list[0],d_dm_list[0],norbs,mu,cublas_handle,accel_lib) + #gpu.memcpyDtoH(rho, d_dm_list[0], matSize, accel_lib) + #e2,v2 = np.linalg.eigh(rho) + #for i in range(0,norbs): + # print(e1[i],e2[i]) + #exit() + #rho = sp2_basic(ham,nocc,thresh=0.0,minsp2iter=5,maxsp2iter=30,sp2conv=1.0E-5,idemtol=1.0E-5,verb=True) + + elif method == "SP2" and accel == "PBML": + print("No method yet") + else: + print("The combination of method and accelerator is unknown") + exit(0) + + if(overlap is not None): + rho = np.matmul(np.matmul(zmat,rho),np.transpose(zmat)) + + print(norbs) + dvals = np.zeros((norbs)) + if(method == "Diag"): + if (overlap is not None): + overTimesEvects = np.dot(overlap,evects) + else: + overTimesEvects = evects + for i in range(norbs): + #dvals = np.append(dvals, np.inner(evects[:norbsInCore,i],overTimesEvects[:norbsInCore,i])) + dvals[i] = np.inner(evects[:norbsInCore,i],overTimesEvects[:norbsInCore,i]) + else: + if(norbsInCore is not None): + dvals[:] = norbsInCore/norbs + else: + dvals[:] = 1.0 + + evals = np.zeros(norbs) + evals = np.diag(ham_orth) #We estimate the eigenvaluse from the Girshgorin centers + + + #print("Ham\n",ham_orth) + #print("Mu",mu) + #print("DM\n") + diagonal = np.diag(rho) + #print("tr",np.trace(rho)) + #print("NOCC",nocc,norbs) + #for i in range(norbs): + # print(diagonal[i]) + + evals, evects = sp.eigh(rho) + if(full_data): + return rho, evals, dvals + else: + return rho + + + +## Computes the Density matrix from a given Hamiltonian. +# @author Josh Finkelstein +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# using GPU/AI accelerator library +# +# @param H Hamiltonian matrix +# @param Nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return D Density matrix +# +def get_density_matrix_gpu(H, N, Nocc, lib, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix using GPU/AI accel library") + + # init DM + D = np.zeros((N, N)) + kbt = 0.1 + + # get DM from cusolver diag + #dm = gpu.dmDNNSP2(H,D,N,Nocc,lib) + # dm = gpu.dmCheby(H,D,N,Nocc,kbt,lib) + print("Density matrix=", D) + # dm = gpu.dmDiag(H,D,N,Nocc,kbt,lib) + # print("Density matrix=",dm) + #dm = gpu.dmMLSP2(H, D, N, Nocc, lib) + return D + + +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the name of the algorithm and the total number of atoms. Example:\n") + print("density_matrix get_density_matrix_proxy 100\n") + sys.exit(0) + else: + algo = str(sys.argv[1]) + nats = int(sys.argv[2]) + + verb = True + coords = get_random_coordinates(nats) + atomTypes = np.zeros((nats),dtype=int) + symbols = []*nats + symbols[:] = "H" + + filename = "aosa_parameters.dat" + bas_per_atom = [1] + tbparams = read_tbparams(filename, symbols, bas_per_atom) + + nvtx.push_range("get hamiltonian proxy",color="blue", domain="get proxy h") + ham, over = get_hamiltonian_proxy(coords, atomTypes, symbols, get_overlap=True) + nvtx.pop_range(domain="get proxy h") + if (gpuLib == True): + ## + size_of_double = 8 # bytes + matSize = nats * nats * size_of_double + # cublas_handle = gpu.cublasInit(lib) + + #if (eng.accel == "TC"): + init_proxy_accelerators(1,4096) + + ## async copy of ham from host to device + gpu.memcpyHtoD(dev_list[0], ham, matSize, lib) + + + + + + if(algo == "get_density_matrix_proxy"): + occ = int(float(nats) / 2.0) + rho1 = get_density_matrix_proxy(ham, occ, method="SP2") + print(lib) + rho2 = get_density_matrix_proxy(ham, occ, method="SP2", accel="TC",d_ham=d_ham,d_dm=d_dm,lib=lib) + print("Density matrix=", rho1) + print("Density matrix=", rho2) + diff --git a/proxies/python/dnnprt.py b/proxies/python/dnnprt.py new file mode 100644 index 00000000..ae8d554a --- /dev/null +++ b/proxies/python/dnnprt.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python +import numpy as np +import os, sys, argparse, time + + +def gershgorin(M): + # find eigenvalue estimates of the matrix M from the Gershgorin circle theorem + min_e = 0 + max_e = 0 + + for i in range(0, np.shape(M)[0]): + e = M[i, i] # Gershgorin eigenvalue circle center + r = 0 + + for j in range(0, np.shape(M)[0]): # compute sum of abs. val of components in row i + r += np.abs(M[i, j]) + + r -= np.abs(e) # Gershgorin eigenvalue circle radius + + # update min and max eigenvalues as you loop over rows + if e - r < min_e: + min_e = e - r + elif e + r > max_e: + max_e = e + r + + return (min_e, max_e) + + +def dual_half(S): + # Calculation of X^2 as defined in equation (15). Note that precision in numpy is closed under alegbraic operations when of the same data type and inherits the precision of the highest precision operand when not of the same data type. + S0 = np.half(S) + S1 = np.single(np.half(S - S0)) + S0S0 = np.single(np.matmul(S0, S0)) + S0S1 = np.matmul(S0, S1) + X = S0S0 + (S0S1 + np.transpose(S0S1)) + return X + +##SP2 method. +# @param h_bml Input Hamiltonian matrix +# @param rho_bml Output density matrix +# @param threshold Threshold for sparse matrix algebra +# @param bndfil Bond +# @param minsp2iter Minimum sp2 iterations +# @param maxsp2iter Maximum SP2 iterations +# @param sp2conv Convergence type +# @param idemtol Idempotency tolerance +# @param verbose A verbosity level +def sp2_basic(ham,occ,thresh=0.0,minsp2iter=5,maxsp2iter=30,sp2conv=1.0E-5,idemtol=1.0E-5,verb=False): + + hdim = len(ham[:,0]) + + # Normalize + emin, emax = gershgorin(ham) + rho = np.zeros((hdim,hdim)) + rho[:,:] = ham[:,:] + ident = np.diag(np.ones(hdim)) + rho[:,:] = (emax * ident[:,:] - ham[:,:]) / (emax - emin) + + # X2 <- X + for i in range(maxsp2iter): + + trx = np.trace(rho) + + #X2 <- X * X + X2 = np.dot(rho, rho) + + trx2 = np.trace(X2) + + #Trace reduction + if(verb): print("sp2iter", iter, occ, trx, abs(occ-trx)) + + if(trx - occ <= 0.0): + + #X <- 2 * X - X2 + rho = 2*rho - X2 + + trx = 2.0 * trx - trx2 + + else: + + #X <- X2 + rho[:,:] = X2[:,:] + + trx = trx2 + + + if(abs(occ-trx) < idemtol and i > minsp2iter): + break + + if(iter == maxsp2iter): + print("sp2 purification is not converging: stop!") + raise 1 + + + #rho = 2.0 * rho + + print("Rho inside",rho) + return rho + + + +#### DEEP-NN FORMULATION OF THE RECURSIVE SP2 FERMI-OPERATOR EXPANSION SCHEME +def dnnprt(H0, N, Nocc, H1=None, refi=False): + """ + Compute density matrix and first order response to perturbation, H1, in the + Hamiltonian, H0. Implementation mimics mixed precision solver. + + Inputs: + ------ + + H0: Hamiltonian matrix + H1: Perturbation to H0 + N: Matrix size + Nocc: Occupation number + dm_only: Compute density matrix only (True/False) + refi: Compute fp64 refinement (True/False) + + """ + np.set_printoptions(precision=15) + + dm_only = True + if H1 is not None: + dm_only = False + + #### INITIALIZE + eps = 1e-16 # Small value, but such that +/- eps is finite in single precision + Csp2 = 4.5 # Convergence criterion as derived by Emanuel + sgn = 0 # Initial value of sgn + I = np.eye(N) # Identity matrix + maxlayer = 100 # Maximum number of layers + v_sgn = np.zeros(maxlayer) # Keeps track of binary in-place learning choices + idemp_err = np.zeros(maxlayer) # Local error estimate + if dm_only == False: + idemp_err_1 = np.zeros(maxlayer) # Local error estimate + + #### CHOSE POST-PROCESSING ACTIVATION FUNCTION REFINEMENT OR NOT + Refinement = True # Or False + + #### LOAD HAMILTONIAN AS INPUT LAYER + X0 = H0 # Initial input layer + if not dm_only: + X1 = H1 + + #### 'EXACT' SOLUTION FOR COMPARISION ONLY + # e, v = np.linalg.eig(H0 + H1) # Diagonlize H as a brute force comparision + # e = np.sort(e) # Sort eigenvalues in increasing order + # E0 = np.sum(e[0:Nocc]) # Sum over the lowest Nocc states using absurd indexing + + #### INITIAL IN-PLACE LEARNING FOR FIRST LAYER + (hN, h1) = gershgorin(X0) # Alternatively, obtain eigenvalue estimates using Gersgorin circle theorem + W0 = -1 / (hN - h1) # Weight (scalar) + B0 = (hN / (hN - h1)) * I # Bias (diagonal matrix) + + #### INITIAL LINEAR TRANSFORM + S0 = W0 * X0 + B0 + S0 = np.single(S0) # Store in single precision + TrS0 = np.trace(S0) # Keep track of occupation + + if dm_only == False: + S1 = W0 * X1 + S1 = np.single(S1) # Store in single precision + TrS1 = np.trace(S1) # Keep track of occupation + + start = time.time() + #### COMPUTATIONAL DEEP LAYERS + for layer in range(maxlayer): + """ SP2 """ + #### ACTIVATION FUNCTION FROM TWO DUAL HALF-PRECISION MATRIX-MATRIX MULTIPLICATIONS + X0_h = np.single( + np.half(S0) + ) # First half-precision repsentation of X, single used to allow single accumulation + X0_l = np.single( + np.half(S0 - X0_h) + ) # Second half-precision repsentation of X, single used to allow single accumulation + X0_hh = np.single(np.matmul(X0_h, X0_h)) # Half-precision multiplication with single accumulation + X0_hl = np.single(np.matmul(X0_h, X0_l)) # Half-precision multiplication with single accumulation + X0_lh = np.transpose(X0_hl) # Use the matrix symmetry of X0 and X1 from the symmetry of S + X0 = np.single(X0_hh + X0_hl + X0_lh) # Additions in single precision + TrX0 = np.trace(X0) # Approximate occupation + print("TrX0",TrX0) + """""" """""" + + """ response """ + if dm_only == False: + #### ACTIVATION FUNCTION FROM TWO DUAL HALF-PRECISION MATRIX-MATRIX MULTIPLICATIONS + X1_h = np.single( + np.half(S1) + ) # First half-precision repsentation of X, single used to allow single accumulation + X1_l = np.single( + np.half(S1 - X1_h) + ) # Second half-precision repsentation of X, single used to allow single accumulation + X0X1_hh = np.single(np.matmul(X0_h, X1_h)) # Half-precision multiplication with single accumulation + X0X1_hl = np.single(np.matmul(X1_h, X0_l)) # Half-precision multiplication with single accumulation + X0X1_lh = np.single(np.matmul(X1_h, X0_l)) # Use the matrix symmetry of X0 and X1 from the symmetry of S + X0X1 = np.single(X0X1_hh + X0X1_hl + X0X1_lh) # Additions in single precision + X1X0 = np.transpose(X0X1) + X1 = np.single(X0X1 + X1X0) + TrX1 = np.trace(X1) # Approximate occupation + """""" """""" + + #### ERROR ESTIMATE OF IDEMPOTENCY + idemp_err[layer] = TrS0 - TrX0 # Error estimate for in-place learning and convergence control + + if dm_only == False: + idemp_err_1[layer] = TrS1 - TrX1 # Error estimate for in-place learning and convergence control + print( + layer, "Idemp error estimate:" + str(idemp_err_1[layer]) + ) # Can reach 0 exactely in low precision arithmetics + + #### LEARNING THROUGH A BINARY ON-THE-FLY IN-PLACE ERROR MINIMIZATION, WHERE sgn = (+/-)*1 + sgn = np.sign(np.abs(2 * TrS0 - TrX0 - Nocc) - np.abs(TrX0 - Nocc) - sgn * eps) + v_sgn[layer] = sgn # Vector with the sgn to keep track + W = sgn # Weight function + B = (1 - sgn) * S0 # Bias function + + #### LINEAR TRANSFORM + S0 = W * X0 + B # Affine linear transform, apply weight and bias + if dm_only == False: + S1 = W * X1 + (1 - W) * S1 # Affine linear transform, apply weight and bias + + #### KEEP TRACK OF THE NEW OCCUPATION + TrS0 = W * TrX0 + (1 - sgn) * TrS0 # Update trace + if dm_only == False: + TrS1 = W * TrX1 + (1 - sgn) * TrS1 # Update trace + + #### CONVERGENCE TEST + if idemp_err[layer] <= 0: + break + if ( + layer > 1 + and v_sgn[layer - 1] != v_sgn[layer - 2] + and idemp_err[layer] >= Csp2 * idemp_err[layer - 2] * idemp_err[layer - 2] + ): + break + + #### POST-PROCESSING REFINEMENT STEP + if refi == True: + #### WITH ACTIVATION FUNCTION REFINEMENT, f(X) = 2*X^2 - X^4, IN DOUBLE PRECISION + X = np.double(S) + X = 2 * X - np.matmul(X, X) + TrS = np.trace(X) + X = np.double(np.matmul(X, X)) + TrX = np.trace(X) + idemp_err[layer + 1] = TrS - TrX + print(layer + 1, "Refined error estimate = " + str(idemp_err[layer + 1])) + num_deep_layers = layer + 1 # +1 to account for the last refinement layer + D = X # Output layer estimate of density matrix + else: + #### WITHOUT ACTIVATION FUNCTION REFINEMENT, f(X) = X # Or, alternativley use half-precision multiplications + num_deep_layers = layer + D0 = np.double(S0) # Output layer estimate of density matrix D + if dm_only == False: + D1 = np.double(S1) # Output layer estimate of density matrix D + + end = time.time() + flops = 2 * N * N * N * num_deep_layers / (end - start) + print(str(end - start) + " sec") + print("FLOPS = " + str(flops / 1e12) + " teraflops") + + #### DOUBLE PRECISION ERROR ESTIMATES OF THE CONVERGED DENSITY MATRIX D + occ_err = np.abs(np.trace(D0) - Nocc) # Occupation Error + D02 = np.matmul(D0, D0) # Matrix square (for error analysis only!) + idem_err = np.abs(np.trace(D02) - np.trace(D0)) # Error estimate, Tr(X2-X) + idem_err_2_norm = np.linalg.norm(D02 - D0) # Idempotency Error in 2-norm + comm_err = np.linalg.norm(np.matmul(D0, H0) - np.matmul(H0, D0)) # Commutation error + energy = np.trace(-np.matmul(D0, H0)) # Band-energy + # energy_err = np.abs(energy - E0) # Band-energy error + + if not dm_only: + energy_1 = np.trace(np.matmul(D0, H1)) + energy_2 = 0.5 * np.trace(np.matmul(D1, H1)) + else: + energy_1 = None + energy_2 = None + + if dm_only: + return D0 + else: + return D0, D1 diff --git a/proxies/python/energy_and_forces.py b/proxies/python/energy_and_forces.py new file mode 100644 index 00000000..c9bd205e --- /dev/null +++ b/proxies/python/energy_and_forces.py @@ -0,0 +1,664 @@ +"""proxy code a +A prototype engine code that: + - Computes TB + coulombic forces + - Coputes band and coulombic energies +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +import sedacs.driver +from sedacs.dev.io import src_path +from proxies.python.hamiltonian_elements import * +from sedacs.file_io import read_coords_file, write_xyz_coordinates +from proxies.python.dnnprt import * +from proxies.python.proxy_global import * + +__all__ = [ + "get_random_coordinates", + "get_hamiltonian_proxy", + "get_density_matrix_proxy", + "get_density_matrix_gpu", + "get_charges_proxy", + "get_tb_forces_proxy", + "get_ppot_energy_expo_proxy", + "init_proxy_proxy", + "get_ppot_forces_expo_proxy", + "build_coul_ham_proxy", +] + + +## Simple random number generator +# This is important in order to compare across codes +# written in different languages. +# +# To initialize: +# \verbatim +# myRand = rand(123) +# \endverbatim +# where the argument of rand is the seed. +# +# To get a random number between "low" and "high": +# \verbatim +# rnd = myRand.get_rand(low,high) +# \endverbatim +# +class RandomNumberGenerator: + """To generate random numbers.""" + + def __init__(self, seed): + self.a = 321 + self.b = 231 + self.c = 13 + self.seed = seed + self.status = seed * 1000 + + def generate(self, low, high): + """Get a random real number in between low and high.""" + w = high - low + place = self.a * self.status + place = int(place / self.b) + rand = (place % self.c) / self.c + place = int(rand * 1000000) + self.status = place + rand = low + w * rand + + return rand + + +## Generating random coordinates +# @brief Creates a system of size "nats = Number of atoms" with coordindates having +# a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. +# This funtion is only used for testing purposes. +# @param nats The total number of atoms +# @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] +# +def get_random_coordinates(nats): + """Get random coordinates""" + length = int(nats ** (1 / 3)) + 1 + coords = np.zeros((nats, 3)) + latticeParam = 2.0 + atomsCounter = -1 + myrand = RandomNumberGenerator(111) + for i in range(length): + for j in range(length): + for k in range(length): + atomsCounter = atomsCounter + 1 + if atomsCounter >= nats: + break + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 0] = i * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 1] = j * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 2] = k * latticeParam + rnd + return coords + +## Initialize proxy code +# @brief We will read all the parameters needed for the +# guest or proxy code to run. Every guest code will need to +# set up an initialization function and save parameters that +# need to be read from file only once. Bond integral parameter, +# pair potential, etc. will be stored in memory by the guest code. +# +def init_proxy_proxy(symbols,bas_per_atom): + #Some codes will have their own input file + #read_proxy_input_file() + #Read pair potentials + read_ppots("ppots.dat",symbols) + print_ppots() + #Read tb parameters + filename = "aosa_parameters.dat" + read_tbparams(filename, symbols, bas_per_atom) + + +## Computes a Hamiltonian based on exponential decay of orbital couplings. +# @author Anders Niklasson +# @brief Computes a hamiltonian based on exponential decays. +# @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] +# @param atomTypes Index type for each atom in the system. Type for first atom = type[0] (not used yet) +# @param symbols Symbols for every atom type +# @param verb Verbosity. If True is passed, information is printed +# @para get_overlap If overlap needs to be returned +# @return ham 2D array of Hamiltonian elements +# +def get_hamiltonian_proxy(coords, atomTypes, symbols, verb=False, get_overlap=False): + """Constructs a simple tight-binding Hamiltonian""" + + # Internal periodic table for the code + symbols_internal = np.array(["Bl", "H", "C", "N", "O", "P"], dtype=str) + numel_internal = np.zeros(len(symbols_internal), dtype=int) + numel_internal[:] = 0, 1, 4, 5, 6, 5 + bas_per_atom = np.zeros(len(symbols_internal), dtype=int) + bas_per_atom[:] = 0, 1, 4, 4, 4, 4 + spOrbTypes = ["s", "px", "py", "pz"] + sOrbTypes = ["s"] + + nats = len(coords[:, 0]) + + # Map symbols to indices in symbols_internal + symbol_to_index = {symbol: idx for idx, symbol in enumerate(symbols_internal)} + + # Translate `symbols` to `symbols_internal` indices + mapped_indices = np.array([symbol_to_index[symbol] for symbol in symbols]) + + # Convert atomTypes to `symbols_internal` indices + atom_internal_indices = mapped_indices[atomTypes] + + + # Sum the corresponding values in bas_per_atom and numel_internal + norbs = np.sum(bas_per_atom[atom_internal_indices]) + numel = np.sum(numel_internal[atom_internal_indices]) + + ham = np.zeros((norbs, norbs)) + if get_overlap: + over = np.zeros((norbs, norbs)) + if verb: + print("Constructing a simple Hamiltonian for the full system") + + colsh = 0 + rowsh = 0 + tbparams = bring_tbparams() + for i in range(0, nats): + for ii in range(bas_per_atom[atom_internal_indices[i]]): + colsh = rowsh + parI = tbparams[atomTypes[i]][ii] + for j in range(i, nats): + if i == j: + llimit = ii + else: + llimit = 0 + for jj in range(llimit,bas_per_atom[atom_internal_indices[j]]): + parJ = tbparams[atomTypes[j]][jj] + hval, sval = get_integral_v1(coords[i],coords[j],parI,parJ) + if(get_overlap): + over[rowsh,colsh] = sval + over[colsh,rowsh] = sval + + ham[rowsh, colsh] = hval + ham[colsh, rowsh] = hval + colsh = colsh + 1 + rowsh = rowsh + 1 + + if get_overlap: + return ham, over + else: + return ham + + +sedacs.driver.get_hamiltonian = get_hamiltonian_proxy + + +## Estimates mu from a matrix using the Girshgorin centers +# @brief It will use the diegonal elements as an approximation +# for eigenvalues. +def estimate_mu(ham,elec_temp,kb): + + diag = ham.np.diagonal(ham) + + +## Add coulombic potentials to the Hamiltonian +# @param ham0 No-SCF Hamiltonian +# @param vcouls Coulombic potentials for every atomic site +# @pparam orbital_based If set to True, coulombic potentials for every orbitals will be +# expected. +# @param hindex will give the orbital index for each atom +# The orbital indices for orbital i goes from `hindex[i]` to `hindex[i+1]-1` +# @param overlap Overlap matrix for nonorthogonal formulations. +# @param verb Verbosity switch. +# +def build_coul_ham_proxy(ham0, vcouls, types, charges, orbital_based, hindex, overlap=None, verb=False): + norbs = len(ham0[:, 0]) + vcouls_orbs = np.zeros((norbs), dtype=float) # Expanded coulombic potentials + nats = len(hindex[:]) - 1 + + tbparams = bring_tbparams() + + if orbital_based: + error_at("build_coul_ham", "Orbital-based coulombic potential not implemented") + else: + for i in range(nats): + for ii in range(hindex[i], hindex[i + 1]): + k = ii - hindex[i] + vcouls_orbs[ii] = vcouls[i] + tbparams[types[i]][k].u * charges[i] + if overlap is None: + ham = ham0 + np.diag(vcouls_orbs) + else: + vmat = np.diag(vcouls_orbs) + ham = ham0 + 0.5 * (np.dot(overlap, vmat) + np.dot(vmat, overlap)) + return ham + + +sedacs.driver.build_coul_ham = build_coul_ham_proxy + + +## Computes the Density matrix from a given Hamiltonian. +# @author Anders Niklasson +# @brief This will create a Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# +# @param ham Hamiltonian matrix +# @param nocc Number of occupied orbitals +# @param method Type of algorithm used to compute DM +# @param accel Type of accelerator/special device used to compute DM. Default is No and +# will only use numpy. +# @param mu Chemical potential. If set to none, the calculation will use nocc +# @param elect_temp Electronic temperature +# @param overlap Overlap matrix +# @param verb Verbosity. If True is passed, information is printed. +# +# @return rho Density matrix +# +def get_density_matrix_proxy(ham, nocc, method="Diag", accel="No", mu=None, elect_temp=0.0, overlap=None, verb=False): + """Calcualtion of the full density matrix from H""" + if verb: + print("Computing the Density matrix") + + norbs = len(ham[:, 0]) + ham_orth = np.zeros((norbs, norbs)) + if overlap is not None: + # Get the inverse overlap factor + zmat = get_xmat(overlap, method="Diag", accel="No", verbose=False) + + # Orthogonalize Hamiltonian + ham_orth = np.matmul(np.matmul(np.transpose(zmat), ham), zmat) + else: + ham_orth[:, :] = ham[:, :] + + if method == "Diag" and accel == "No": + evals, evects = sp.eigh(ham_orth) + homoIndex = nocc - 1 + lumoIndex = nocc + mu = 0.5 * (evals[homoIndex] + evals[lumoIndex]) + rho = np.zeros((norbs, norbs)) + if verb: + print("Eigenvalues of H:", evals) + for i in range(norbs): + if evals[i] < mu: + rho = rho + np.outer(evects[:, i], evects[:, i]) + if verb: + print("Chemical potential = ", mu) + elif method == "SP2" and accel == "No": + rho = dnnprt(ham_orth, norbs, nocc, H1=None, refi=False) + print("No method yet") + elif method == "SP2" and accel == "PBML": + print("No method yet") + else: + print("The combination of method and accelerator is unknown") + exit(0) + + if(overlap is not None): + rho = np.matmul(np.matmul(zmat,rho),np.transpose(zmat)) + + return rho + + +sedacs.driver.get_density_matrix = get_density_matrix_proxy + + +## Computes the finite temperature density matrix (DRAFT) +# @todo Write this routine. +def get_density_matrix_T(H, Nocc, Tel, mu0, coreSize, core_ham_dim, S=None, verb=False): + kB = 8.61739e-5 # eV/K, kB = 6.33366256e-6 Ry/K, kB = 3.166811429e-6 Ha/K, #kB = 3.166811429e-6 #Ha/K + if verb: + print("Computing the renormalized Density matrix") + + if S is not None: + E_val, Q = scipy.linalg.eigh(H) ### need S? not ones with S $$$ + else: + E_val, Q = np.linalg.eigh(H) + N = len(H[:, 0]) + + # print('Q\n', Q[:,0]) + + homoIndex = Nocc - 1 + lumoIndex = Nocc + print("HOMO, LUMO:", E_val[homoIndex], E_val[lumoIndex]) + mu_test = 0.5 * (E_val[homoIndex] + E_val[lumoIndex]) # don't need it + print( + N, + Nocc, + ) + print("!!!! mu test:\n", mu_test) + + # use mu0 as a guess + + OccErr = 1.0 + beta = 1.0 / (kB * Tel) + f = np.array([]) + for i in range(N): + f_i = 1 / (np.exp(beta * (E_val[i] - mu0)) + 1) # save fi to f + f = np.append(f, f_i) + # Occ = Occ + f_i*E_occ[i,k] + + D = sum(np.outer(Q[:, i], Q[:, i] * f[i]) for i in range(Nocc)) * 2 + # np.savetxt('co2_32_dm.txt',D) + + # rho = Q@f_vector@Q.T + # or + # rho_ij = SUM_k Q_ik * f_kk * Q_jk + + print("core_ham_dim", core_ham_dim) + dVals = np.array([]) + for i in range(N): + dVals = np.append(dVals, np.inner(Q[:core_ham_dim, i], Q[:core_ham_dim, i])) + + return D, E_val, dVals + + +## Computes the Density matrix from a given Hamiltonian. +# @author Josh Finkelstein +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# using GPU/AI accelerator library +# +# @param H Hamiltonian matrix +# @param Nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return D Density matrix +# +def get_density_matrix_gpu(H, N, Nocc, lib, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix using GPU/AI accel library") + + # init DM + D = np.zeros((N, N)) + kbt = 0.1 + + # get DM from cusolver diag + # dm = gpu.dmDNNSP2(H,D,N,Nocc,lib) + # dm = gpu.dmCheby(H,D,N,Nocc,kbt,lib) + print("Density matrix=", D) + # dm = gpu.dmDiag(H,D,N,Nocc,kbt,lib) + # print("Density matrix=",dm) + dm = gpu.dmMLSP2(H, D, N, Nocc, lib) + return D + +## Inverse overlap factorization +# @brief Constructs inverse overlap factors given the overlap matrix +# @param over Overlap matrix +# @param method If a particular needs to be used +# @param accel If an accelerater (hardwar/library/programing model) is used. +# @verb Verbosity switch +## +def get_xmat(over,method="Diag",accel="No",verb=False): + + if(verbose): + print("In get_xmat ...") + + hdim = len(over[0,:]) + if(method == "Diag" and accel == "No"): + e,v = sp.eigh(over) + s = 1./np.sqrt(e) + zmat = np.zeros((hdim,hdim)) + for i in range(hdim): + zmat[i, :] = s[i] * v[:, i] + zmat = np.matmul(v, zmat) + elif method == "Cholesky": + pass + else: + print("ERROR: Method not implemented") + exit(0) + + if verbose: + print("\nZmat Matrix") + print(zmat) + + return zmat + +## Get charges (Mulliken) +# @brief gets the Mulliken charges based on rho +# @param density_matrix Density matrix +def get_charges_proxy(density_matrix,ncores,hindex,overlap=None,verb=False): + if(verb): + status_at("get_charges","Getting charges from density matrix") + + charges = np.zeros((ncores)) + + if overlap is None: + fullDiag = np.diag(density_matrix) + for i in range(ncores): + for ii in range(hindex[i], hindex[i + 1]): + charges[i] = charges[i] + (1.0 - 2.0 * fullDiag[ii]) + else: # S x D + aux = np.dot(overlap, density_matrix) + fullDiag = np.diag(aux) + for i in range(ncores): + for ii in range(hindex[i], hindex[i + 1]): + charges[i] = charges[i] + (1.0 - 2.0 * fullDiag[ii]) + + if verb: + msg = "Total Charge for part= " + str(sum(charges)) + status_at("get_charges", msg) + + return charges + + +## Get TB forces +# \brief Get TB and Coulombic forces from the Hamiltonian, Density matrix +# and charges. +# \param ham Hamiltonian Matrix +# \param rho Density Matrix +# \param field External field +# \param coords Coordinates +# \param atomTypes Atomic types +# \param Symbols Atomic symbols for every type. +## +def get_tb_forces_proxy(ham, rho, charges, field, coords, atomTypes, symbols): + nats = len(coords[:, 0]) + forces = np.zeros((nats, 3)) + forces_coul = np.zeros((nats, 3)) + forces_field = np.zeros((nats, 3)) + forces_band = np.zeros((nats, 3)) + dl = 0.0001 + coordsp = np.zeros((nats, 3)) + coordsm = np.zeros((nats, 3)) + ham = get_hamiltonian_proxy(coords, atomTypes, symbols, verb=False) + vaux = np.ones((nats)) + vaux[:] = 0.5 + rho0 = np.diag(vaux) + + for i in range(len(ham[:, 0])): + # Band Forces from tr(rho dH/dr) + for k in range(3): + coordsp[:, :] = coords[:, :] + coordsp[i, k] = coords[i, k] + dl + hamp = get_hamiltonian_proxy(coordsp, atomTypes, symbols, verb=False) + # Hmu = get_pert(field,coordsp,nats) + # Hp[:,:] = Hp[:,:] + Hmu[:,:] + + coordsm[:, :] = coords[:, :] + coordsm[i, k] = coords[i, k] - dl + hamm = get_hamiltonian_proxy(coordsm, atomTypes, symbols, verb=False) + # Hmu = get_pert(field,coordsm,nats) + # Hm[:,:] = Hm[:,:] + Hmu[:,:] + + dHdx = (hamp - hamm) / (2 * dl) + aux = 2 * np.matmul(rho - rho0, dHdx) + forces_band[i, k] = np.trace(aux) + print("dHdx", dHdx) + + return forces_band + + +def get_ppot_forces_expo_proxy(coords, types): + nats = len(coords[:, 0]) + forces = np.zeros((nats, 3)) + direction = np.zeros(3) + ppots_in = bring_ppots() + ppots = np.zeros((4)) + for i in range(nats): + for j in range(nats): + if i != j: + ii = types[i] + jj = types[j] + ppots[:] = ppots_in[ii, jj, :] + direction = coords[i, :] - coords[j, :] + d = np.linalg.norm(direction) + direction = direction / d + arg = ppots[0] + ppots[1] * d + ppots[2] * d**2 + ppots[3] * d**3 + argPrime = ppots[1] + 2 * ppots[2] * d + 3 * ppots[3] * d**2 + forces[i, :] = -direction * argPrime * (np.exp(arg)) + print(forces[i, :]) + + return forces + + +def get_ppot_energy_expo_proxy(coords, types): + nats = len(coords[:, 0]) + forces = np.zeros((nats, 3)) + direction = np.zeros(3) + energy = 0.0 + ppots_in = bring_ppots() + ppot = np.zeros((4)) + for i in range(nats): + for j in range(nats): + if i != j: + ii = types[i] + jj = types[j] + ppot[:] = ppots_in[ii, jj, :] + direction = coords[i, :] - coords[j, :] + d = np.linalg.norm(direction) + arg = ppot[0] + ppot[1] * d + ppot[2] * d**2 + ppot[3] * d**3 + energy = energy + np.exp(arg) + + return energy + + +## Get band energy +# @brief Get the band energy from the density matrix and the non-SCF Hamiltonian +# @param ham0 Non-scf Hamiltonian matrix +# @param rho0 Atomized density matrix +# @param rho Density matrix +# @return energy Band energy +def get_band_energy(ham0,rho0,rho): + + energy = 2*np.trace(np.dot(ham0,(rho-rho0))) # Single-particle/band energy + return energy + +## Get the electronic free energy +# @brief This computed from the entropy of the Fermi distribution +# @param fvals A vector containing the Fermi function for every eigenenergy +# @param kB Boltzan constant (default is in eV/K) +# @param elect_temp Electronic temperature +# +def get_electron_entropy_energy(fvals,kB=8.61739e-5,elec_temp=0): + if(elec_temp > 1.0E-10): + entropy = 0.0 + tol = 1.0E-9 + entropy = -kB*np.sum( fvals[:]*np.log10(fvals[:]) + (1.0 - fvals[:])*np.log10(1.0 - fvals[:]) ) + else: + entropy = 0.0 + energy = -2.0*elec_temp*entropy + return energy + + +## Get pair potential forces +# \brief We will use a simple LJ +# \param coords +# +def get_ppot_forces_LJ(coords): + # Following Levine + # VLJ = epsilon*( (a/d)^12 - 2*(b/d)^6 ) + # FLJ = espilon*( -12*( (a**12)/(d**13) ) - 12*( (b**6)/(d**7) ) ) + epsilon = 0.1 + a = 1.0 + b = 1.0 + nats = len(coords[:, 0]) + forces = np.zeros((nats, 3)) + direction = np.zeros(3) + for i in range(nats): + for j in range(nats): + if i != j: + direction = coords[i, :] - coords[j, :] + d = np.linalg.norm(direction) + direction = direction / d + forces[i, :] = -direction * epsilon * (-12 * ((a**12) / (d**13)) + 12 * ((b**6) / (d**7))) + + return forces + + +def get_ppot_energy(coords): + epsilon = 0.1 + a = 1.0 + b = 1.0 + nats = len(coords[:, 0]) + direction = np.zeros(3) + energy = 0 + for i in range(nats): + for j in range(nats): + if i != j: + direction = coords[i, :] - coords[j, :] + d = np.linalg.norm(direction) + energy = energy + epsilon * ((a / d) ** 12 - 2 * (b / d) ** 6) + + energy = energy / 2.0 + + return energy + + +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the total number of atoms. Example:\n") + print("proxy_a 100\n") + sys.exit(0) + else: + nats = int(sys.argv[1]) + + verb = True + # coords = get_random_coordinates(nats) + # atomTypes = np.zeros((nats),dtype=int) + # symbols = []*nats + # symbols[:] = "H" + latticeVectors, symbols, atomTypes, coords = read_coords_file("methane.xyz", lib="None", verb=True) + read_ppots("ppots.dat", symbols) + print_ppots() + + bas_per_atom = [4, 1] + filename = "aosa_parameters.dat" + tbparams = read_tbparams(filename, symbols, bas_per_atom) + print("tbparam", tbparams[0].symbol) + exit(0) + + ham, over = get_hamiltonian_proxy(coords, atomTypes, symbols, get_overlap=True) + + with np.printoptions(precision=3, suppress=True): + print(ham) + print(over) + exit(0) + gpuLibIn = False ## need to pass from input file or command line + occ = int(float(nats) / 2.0) # Get the total occupied orbitals + + if gpuLibIn == False: + print("Using CPU for DM construction. Consider installing accelerator library...") + rho = get_density_matrix_proxy(ham, occ) + npart = len(coords[:, 0]) + hindex = np.arange(npart + 1, dtype=int) + field = np.zeros(3) + charges = get_charges_proxy(rho, npart, hindex, overlap=None, verb=False) + eforces = get_tb_forces(ham, rho, charges, field, coords, atomTypes, symbols) + nforces = get_ppot_forces(coords) + + # eenergy = get_tb_energy() + nenergy = get_ppot_energy(coords) + + coords[0, 0] = coords[0, 0] + 0.001 + nenergyp = get_ppot_energy(coords) + + print((nenergyp - nenergy) / 0.001, nforces[0, 0]) + exit(0) + + print(nforces) + exit(0) + print("Hamiltonian matrix=", ham) + print("Density matrix=", rho) + print("Forces=", forces) diff --git a/proxies/python/first_level.py b/proxies/python/first_level.py new file mode 100644 index 00000000..7d6759bd --- /dev/null +++ b/proxies/python/first_level.py @@ -0,0 +1,441 @@ +"""proxy code a +A prototype engine that: + - Reads the total number of atoms + - Constructs a set of random coordinates + - Constructs a simple Hamiltonian + - Computes the Density matrix from the Hamiltonian + - Computes atomic Mulliken charges + - Computes TB + coulombic forces +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +import sedacs.driver +import sedacs.interface_modules +from sedacs.dev.io import src_path + +try: + import ctypes + + # import gpulibInterface as gpu + + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL(str((src_path() / "gpu/nvda/libnvda.so").absolute())) + if arch == "amd": + lib = ctypes.CDLL(str((src_path() / "gpu/amd/libamd.so").absolute())) + +except: + gpuLib = False + + +__all__ = [ + "RandomNumberGenerator", + "get_random_coordinates", + "get_hamiltonian_proxy", + "get_density_matrix_proxy", + "get_density_matrix_gpu", + "get_charges_proxy", + "get_forces_proxy", +] + + +## Simple random number generator +# This is important in order to compare across codes +# written in different languages. +# +# To initialize: +# \verbatim +# myRand = rand(123) +# \endverbatim +# where the argument of rand is the seed. +# +# To get a random number between "low" and "high": +# \verbatim +# rnd = myRand.get_rand(low,high) +# \endverbatim +# +class RandomNumberGenerator: + """To generate random numbers.""" + + def __init__(self, seed): + self.a = 321 + self.b = 231 + self.c = 13 + self.seed = seed + self.status = seed * 1000 + + def generate(self, low, high): + """Get a random real number in between low and high.""" + w = high - low + place = self.a * self.status + place = int(place / self.b) + rand = (place % self.c) / self.c + place = int(rand * 1000000) + self.status = place + rand = low + w * rand + + return rand + + +## Generating random coordinates +# @brief Creates a system of size "nats = Number of atoms" with coordindates having +# a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. +# +# @param nats The total number of atoms +# @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] +# +def get_random_coordinates(nats): + """Get random coordinates""" + length = int(nats ** (1 / 3)) + 1 + coords = np.zeros((nats, 3)) + latticeParam = 2.0 + atomsCounter = -1 + myrand = RandomNumberGenerator(111) + for i in range(length): + for j in range(length): + for k in range(length): + atomsCounter = atomsCounter + 1 + if atomsCounter >= nats: + break + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 0] = i * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 1] = j * latticeParam + rnd + rnd = myrand.generate(-1.0, 1.0) + coords[atomsCounter, 2] = k * latticeParam + rnd + return coords + + +## Computes a Hamiltonian based on exponential decay of orbital couplings. +# @author Anders Niklasson +# @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances +# \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. +# +# @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] +# @param atomTypes Index type for each atom in the system. Type for first atom = type[0] (not used yet) +# @param symbols Symbols for every atom type. +# @param verb Verbosity. If True is passed, information is printed +# @return ham 2D numpy array of Hamiltonian elements +# +def get_hamiltonian_proxy(coords, atomTypes, symbols, verb=False, get_overlap=False): + """Construct simple toy s-Hamiltonian""" + + + #Internal periodic table for the code + symbols_internal = np.array([ "Bl" , + "H" , "He" , + "Li" , "Be" , "B" , "C" , "N" , "O" , "F" , \ + ], dtype=str) + numel_internal = np.zeros(len(symbols_internal),dtype=int) + numel_internal[:] = 0, \ + 1 , 2 , \ + 1 , 2 , 3 , 4 , 5 , 6 , 7 , + + bas_per_atom = np.zeros(len(symbols_internal),dtype=int) + bas_per_atom[:] = 0, \ + 1 , 1 ,\ + 4 , 4, 4, 4 , 4, 4, 4, + + + nats = len(coords[:,0]) + numel = 0 + + # Map symbols to indices in symbols_internal + symbol_to_index = {symbol: idx for idx, symbol in enumerate(symbols_internal)} + + # Translate `symbols` to `symbols_internal` indices + mapped_indices = np.array([symbol_to_index[symbol] for symbol in symbols]) + + # Convert atomTypes to `symbols_internal` indices + atom_internal_indices = mapped_indices[atomTypes] + + # Sum the corresponding values in bas_per_atom and numel_internal + norbs = np.sum(bas_per_atom[atom_internal_indices]) + numel = np.sum(numel_internal[atom_internal_indices]) + + + nocc = int(numel/2.0) + eps = 1e-9 + decay_min = 0.1 + m = 78 + a = 3.817632 + c = 0.816371 + x = 1.029769 + n = 13 + b = 1.927947 + d = 3.386142 + y = 2.135545 + ham = np.zeros((norbs, norbs)) + if(get_overlap): + over = np.zeros((norbs, norbs)) + if verb: + print("Constructing a simple Hamiltonian for the full system") + colsh = 0 + rowsh = 0 + for i in range(0, nats): + for ii in range(bas_per_atom[atom_internal_indices[i]]): + x = (a * x + c) % m # Hamiltonian parameters + y = (b * y + d) % n + colsh = 0 + for j in range(i, nats): + for jj in range(bas_per_atom[atom_internal_indices[j]]): + dist = np.linalg.norm(coords[i, :] - coords[j, :]) + tmp = np.exp(-(y / n + decay_min) * (dist**2)) + if(get_overlap): + over[rowsh,colsh] = tmp + over[colsh,rowsh] = tmp + + tmp = (x/m)*tmp + ham[rowsh, colsh] = tmp + ham[colsh, rowsh] = tmp + colsh = colsh + 1 + rowsh = rowsh + 1 + if(get_overlap): + return ham, over + else: + return ham + +sedacs.driver.get_hamiltonian = get_hamiltonian_proxy + +## Computes the Density matrix from a given Hamiltonian. +# @author Anders Niklasson +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# +# @param ham Hamiltonian matrix +# @param nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return rho Density matrix +# +def get_density_matrix_proxy(ham, nocc, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix") + E, Q = sp.eigh(ham) + norbs = len(ham[:, 0]) + homoIndex = nocc - 1 + lumoIndex = nocc + mu = 0.5 * (E[homoIndex] + E[lumoIndex]) + rho = np.zeros((norbs, norbs)) + if verb: + print("Eigenvalues of H:", E) + for i in range(norbs): + if E[i] < mu: + rho = rho + np.outer(Q[:, i], Q[:, i]) + if verb: + print("Chemical potential = ", mu) + return rho + + +sedacs.driver.get_density_matrix = get_density_matrix_proxy + + +## Computes the finite temperature density matrix +# \param +def get_density_matrix_T(H, Nocc, Tel, mu0, coreSize, core_ham_dim, S=None, verb=False): + + kB = 8.61739e-5 # eV/K, kB = 6.33366256e-6 Ry/K, kB = 3.166811429e-6 Ha/K, #kB = 3.166811429e-6 #Ha/K + if(verb): print("Computing the renormalized Density matrix") + + if S is not None: + E_val,Q = scipy.linalg.eigh(H) ### need S? not ones with S $$$ + else: + E_val,Q = np.linalg.eigh(H) + N = len(H[:,0]) + + #print('Q\n', Q[:,0]) + + homoIndex = Nocc - 1 + lumoIndex = Nocc + print('HOMO, LUMO:', E_val[homoIndex], E_val[lumoIndex]) + mu_test = 0.5*(E_val[homoIndex] + E_val[lumoIndex]) #don't need it + print(N, Nocc,) + print('!!!! mu test:\n', mu_test) + + # use mu0 as a guess + + OccErr = 1.0 + beta = 1./(kB*Tel) + f = np.array([]) + for i in range(N): + f_i = 1/(np.exp(beta*(E_val[i] - mu0)) + 1) # save fi to f + f = np.append(f,f_i) + #Occ = Occ + f_i*E_occ[i,k] + + + D = sum(np.outer(Q[:, i],Q[:, i]*f[i]) for i in range(Nocc))*2 + #np.savetxt('co2_32_dm.txt',D) + + + # rho = Q@f_vector@Q.T + # or + # rho_ij = SUM_k Q_ik * f_kk * Q_jk + + + print('core_ham_dim', core_ham_dim) + dVals = np.array([]) + for i in range(N): + dVals = np.append(dVals, np.inner(Q[:core_ham_dim,i],Q[:core_ham_dim, i])) + + return D, E_val, dVals + + +## Computes the Density matrix from a given Hamiltonian. +# @author Josh Finkelstein +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# using GPU/AI accelerator library +# +# @param H Hamiltonian matrix +# @param Nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return D Density matrix +# +def get_density_matrix_gpu(H, N, Nocc, lib, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix using GPU/AI accel library") + + # init DM + D = np.zeros((N, N)) + kbt = 0.1 + + # get DM from cusolver diag + # dm = gpu.dmDNNSP2(H,D,N,Nocc,lib) + # dm = gpu.dmCheby(H,D,N,Nocc,kbt,lib) + print("Density matrix=", D) + # dm = gpu.dmDiag(H,D,N,Nocc,kbt,lib) + # print("Density matrix=",dm) + dm = gpu.dmMLSP2(H, D, N, Nocc, lib) + return D + +def get_charges_proxy(density_matrix,ncores,hindex,overlap=None,verb=False): + if(verb): + status_at("get_charges","Getting charges from density matrix") + + fullDiag = np.diag(density_matrix) + charges = np.zeros((ncores)) + + if(overlap is None): + for i in range(ncores): + for ii in range(hindex[i],hindex[i+1]): + charges[i] = charges[i] + (1.0 - fullDiag[ii]) + else: + pass + + if(verb): + msg = "Total Charge for part= " + str(sum(charges)) + status_at("get_charges",msg) + + return charges + + +## Get TB forces +# \brief Get TB and Coulombic forces from the Hamiltonian, Density matrix +# and charges. +# \param ham Hamiltonian Matrix +# \param rho Density Matrix +# \param field External field +# \param coords Coordinates +# \param atomTypes Atomic types +# \param Symbols Atomic symbols for every type. +## +def get_tb_forces(ham, rho, charges, field, coords, atomTypes,symbols): + + nats = len(coords[:,0]) + forces = np.zeros((nats,3)) + forces_coul = np.zeros((nats,3)) + forces_field = np.zeros((nats,3)) + forces_band = np.zeros((nats,3)) + dl = 0.0001 + coordsp = np.zeros((nats,3)) + coordsm = np.zeros((nats,3)) + ham = get_hamiltonian_proxy(coords,atomTypes,symbols,verb=False) + vaux = np.ones((nats)) + vaux[:] = 0.5 + rho0 = np.diag(vaux) + + for i in range(len(ham[:,0])): + + #Band Forces from tr(rho dH/dr) + for k in range(3): + coordsp[:,:] = coords[:,:] + coordsp[i,k] = coords[i,k] + dl + hamp = get_hamiltonian_proxy(coordsp,atomTypes,symbols,verb=False) + #Hmu = get_pert(field,coordsp,nats) + #Hp[:,:] = Hp[:,:] + Hmu[:,:] + + coordsm[:,:] = coords[:,:] + coordsm[i,k] = coords[i,k] - dl + hamm = get_hamiltonian_proxy(coordsm,atomTypes,symbols,verb=False) + #Hmu = get_pert(field,coordsm,nats) + #Hm[:,:] = Hm[:,:] + Hmu[:,:] + + dHdx = (hamp - hamm)/(2*dl) + aux = 2*np.matmul(rho-rho0,dHdx) + forces_band[i,k] = np.trace(aux) + print("dHdx",dHdx) + + #Coulombic Forces + for j in range(len(ham[:,0])): + if(i != j): + distance = np.linalg.norm(coords[i,:] - coords[j,:]) + direction = (coords[i,:] - coords[j,:])/distance + #F_coul[i,:] = F_coul[i,:] - (14.3996437701414*1.0*direction*q[i]*q[j])/(distance**2) + forces_coul[i,:] = forces_coul[i,:] - (1.0*direction*charges[i]*charges[j])/(distance**2) + + #Field forces + #forces_field[i,:] = forces_field[i,:] + field*charges[i] + + forces[:,:] = - ( forces_band[:,:] + forces_coul[:,:] + forces_field[:,:]) + return forces + + +## Main program for proxy a +# \brief It will read the number of atoms, contruct +# a set of random coordinates and give back a Density matrix. +# +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the total number of atoms. Example:\n") + print("proxy_a 100\n") + sys.exit(0) + else: + nats = int(sys.argv[1]) + + verb = True + coords = get_random_coordinates(nats) + atomTypes = np.zeros((nats),dtype=int) + symbols = []*nats + symbols[:] = "H" + + ham = get_hamiltonian_proxy(coords,atomTypes,symbols) + + gpuLibIn = False ## need to pass from input file or command line + occ = int(float(nats) / 2.0) # Get the total occupied orbitals + + if gpuLibIn == False: + print("Using CPU for DM construction. Consider installing accelerator library...") + rho = get_density_matrix_proxy(ham, occ) + npart = len(coords[:,0]) + hindex = np.arange(npart+1,dtype=int) + field = np.zeros(3) + charges = get_charges_proxy(rho,npart,hindex,overlap=None,verb=False) + forces = get_tb_forces(ham, rho, charges, field, coords, atomTypes,symbols) + print("Hamiltonian matrix=",ham) + print("Density matrix=",rho) + print("Forces=",forces) + diff --git a/proxies/python/first_level_gpu.py b/proxies/python/first_level_gpu.py new file mode 100644 index 00000000..297d6b41 --- /dev/null +++ b/proxies/python/first_level_gpu.py @@ -0,0 +1,303 @@ +"""proxy code a +A prototype engine that: + - Reads the total number of atoms + - Constructs a set of random coordinates + - Constructs a simple Hamiltonian + - Computes the Density matrix from the Hamiltonian +""" + +import ctypes +import sys + +import numpy as np +import scipy.linalg as sp +from juliacall import Main as jl + +import sedacs.driver +import sedacs.gpu as gpu +import sedacs.interface_modules +from sedacs.dev.io import src_path +from sedacs.gpu.library import Library + +gpuLib = True +arch = "nvda" + +if arch == "nvda": + print("loading nvidia...") + lib = Library(src_path() / "gpu/nvda/libnvda.so").as_dll() +if arch == "amd": + lib = Library(src_path() / "gpu/amd/libamd.so").as_dll() + + +## Simple random number generator +# This is important in order to compare across codes +# written in different languages. +# +# To initialize: +# \verbatim +# myRand = rand(123) +# \endverbatim +# where the argument of rand is the seed. +# +# To get a random number between "low" and "high": +# \verbatim +# rnd = myRand.get_rand(low,high) +# \endverbatim +# +class rand: + """To generate random numbers.""" + + def __init__(self, seed): + self.a = 321 + self.b = 231 + self.c = 13 + self.seed = seed + self.status = seed * 1000 + + def get_rand(self, low, high): + """Get a random real number in between low and high.""" + w = high - low + place = self.a * self.status + place = int(place / self.b) + rand = (place % self.c) / self.c + place = int(rand * 1000000) + self.status = place + rand = low + w * rand + + return rand + + +## Generating random coordinates +# @brief Creates a system of size "nats = Number of atoms" with coordindates having +# a random (-1,1) displacement from a simple cubic lattice with parameter 2.0 Ang. +# +# @param nats The total number of atoms +# @return coordinates Position for every atom. z-coordinate of atom 1 = coords[0,2] +# +def get_random_coordinates(nats): + """Get random coordinates""" + length = int(nats ** (1 / 3)) + 1 + coords = np.zeros((nats, 3)) + latticeParam = 2.0 + atomsCounter = -1 + myrand = rand(111) + for i in range(length): + for j in range(length): + for k in range(length): + atomsCounter = atomsCounter + 1 + if atomsCounter >= nats: + break + rnd = myrand.get_rand(-1.0, 1.0) + coords[atomsCounter, 0] = i * latticeParam + rnd + rnd = myrand.get_rand(-1.0, 1.0) + coords[atomsCounter, 1] = j * latticeParam + rnd + rnd = myrand.get_rand(-1.0, 1.0) + coords[atomsCounter, 2] = k * latticeParam + rnd + return coords + + +## Computes a Hamiltonian based on a single "s-like" orbitals per atom. +# @author Anders Niklasson +# @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances +# \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. +# +# @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] +# @param types Index type for each atom in the system. Type for first atom = type[0] (not used yet) +# @return H 2D numpy array of Hamiltonian elements +# @param verb Verbosity. If True is passed, information is printed +# +def proxyA_get_hamiltonian(coords, atomTypes=np.zeros((1), dtype=int), verb=False): + """Construct simple toy s-Hamiltonian""" + N = len(coords[:, 1]) + Nocc = int(N / 4) + eps = 1e-9 + decay_min = 0.1 + m = 78 + a = 3.817632 + c = 0.816371 + x = 1.029769 + n = 13 + b = 1.927947 + d = 3.386142 + y = 2.135545 + H = np.zeros((N, N)) + if verb: + print("Constructing a simple Hamiltonian for the full system") + cnt = 0 + for i in range(0, N): + x = (a * x + c) % m # Hamiltonian parameters + y = (b * y + d) % n + for j in range(i, N): + dist = np.linalg.norm(coords[i, :] - coords[j, :]) + tmp = (x / m) * np.exp(-(y / n + decay_min) * (dist**2)) + H[i, j] = tmp + H[j, i] = tmp + return H + + +## Computes the Density matrix from a given Hamiltonian. +# @author Anders Niklasson +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# +# @param H Hamiltonian matrix +# @param Nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return D Density matrix +# +def get_densityMatrix(H, Nocc, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix") + E, Q = sp.eigh(H) + N = len(H[:, 0]) + homoIndex = Nocc - 1 + lumoIndex = Nocc + mu = 0.5 * (E[homoIndex] + E[lumoIndex]) + D = np.zeros((N, N)) + if verb: + print("Eigenvalues of H:", E) + for i in range(N): + if E[i] < mu: + D = D + np.outer(Q[:, i], Q[:, i]) + if verb: + print("Chemical potential = ", mu) + return D + + +## Computes the Density matrix from a given Hamiltonian. +# @author Josh Finkelstein +# @brief This will create a "zero-temperature" Density matrix \f$ \rho \f$ +# \f[ \rho = \sum^{nocc} v_k v_k^T \f] +# where \f$ v_k \f$ are the eigenvectors of the matrix \f$ H \f$ +# using GPU/AI accelerator library +# +# @param H Hamiltonian matrix +# @param Nocc Number of occupied orbitals +# @param verb Verbosity. If True is passed, information is printed. +# +# @return D Density matrix +# +def get_densityMatrix_response_accel(H, P, D, R, N, Nocc, handle, lib, verb=False): + """Calcualte the full density matrix and its response to pertubation P in H""" + if verb: + print("Computing the Density matrix using GPU/AI accel library") + + # get DM from PRT + time = gpu.dmDNNPRT(H, P, D, R, N, Nocc, handle, lib) + return time + + +def get_densityMatrix_accel(H, D, N, Nocc, handle, lib, verb=False): + """Calcualted the full density matrix from H""" + if verb: + print("Computing the Density matrix using GPU/AI accel library") + + # init DM + # D = np.zeros((N,N)) + kbt = 0.001 + + # get DM from cusolver diag + # time = gpu.dmDNNSP2(H, D, N, Nocc, handle, lib) + # dm = gpu.dmCheby(H,D,N,Nocc,kbt,lib) + # print("Density matrix=",D) + # time = gpu.dmDiag(H,D,N,Nocc,kbt,lib) + # print("Density matrix=",dm) + time = gpu.dmMLSP2(H, D, N, Nocc, lib) + return time + + +## Main program for proxy a +# \brief It will read the number of atoms, contruct +# a set of random coordinates and give back a Density matrix. +# +if __name__ == "__main__": + nats = 512 + + coords = get_random_coordinates(nats) + + # H = proxyA_get_hamiltonian(coords) + jl.seval("using Pkg") + jl.seval('Pkg.activate("./GeneralizedSP2/examples")') + jl.seval(""" + using Distributions + using GershgorinDiscs + using GeneralizedSP2 + using LinearAlgebra + using ToyHamiltonians + using DelimitedFiles + set_isapprox_rtol(1e-13) + β = 1.25 # Physical + μ = 150 # Physical + sys_size = 512 + dist = LogUniform(100, 200) + Λ = rand(EigvalsSampler(dist), sys_size) + V = rand(EigvecsSampler(dist), sys_size, sys_size) + H = Hamiltonian(Eigen(Λ, V)) + savemodel("H.npy", H) + 𝚲 = eigvals(H) # Must be all reals + emin, emax = floor(minimum(𝚲)), ceil(maximum(𝚲)) + open("minmax.txt", "w") do f + write(f, string(emin) * "\n") + write(f, string(emax) * "\n") + end + H_scaled = rescale_one_zero(emin, emax)(H) + savemodel("H_scaled.npy", H_scaled) + """) + H = np.ascontiguousarray(np.load("H.npy"), dtype=np.float64) + + # Allocate dm + D = np.zeros((nats, nats)) + + P = np.zeros((nats, nats)) + R = np.zeros((nats, nats)) + + gpuLibIn = True ## need to pass from input file or command line + occ = int(float(nats) / 2.0) # Get the total occupied orbitals + + for i in range(10): + if gpuLibIn == False: + print("Using CPU for DM construction. Consider installing accelerator library...") + Dcpu = get_densityMatrix(H, occ) + break + + elif gpuLibIn == True: + if gpuLib == False: + print("No accelerator library found. Consider installing or change input.") + + ## allocate some gpu mem + size_of_double = 8 # bytes + matSize = nats * nats * size_of_double + cublas_handle = gpu.cublasInit(lib) + + d_ham = gpu.dev_alloc(matSize, lib) + d_prt = gpu.dev_alloc(matSize, lib) + d_dm = gpu.dev_alloc(matSize, lib) + d_rsp = gpu.dev_alloc(matSize, lib) + + ## copy ham from host to device + gpu.memcpyHtoD(d_ham, H, matSize, lib) + + ## copy ham from host to device + gpu.memcpyHtoD(d_prt, P, matSize, lib) + + print("iteration ", i) + timer = get_densityMatrix_accel(d_ham, d_dm, nats, occ, cublas_handle, lib) + # timer = get_densityMatrix_response_accel(d_ham, d_prt, d_dm, d_rsp, nats, occ, cublas_handle, lib) + print(f"python time = {timer:0.10f} seconds") + print("=========================") + + ## copy dm from device to host + size_of_double = 8 # bytes + matSize = nats * nats * size_of_double + gpu.memcpyDtoH(D, d_dm, matSize, lib) + + # print(D) + with open("cuda.npy", "wb") as f: + np.save(f, D) + gpu.dev_free(d_dm, lib) + gpu.dev_free(d_ham, lib) + gpu.dev_free(d_prt, lib) + gpu.dev_free(d_rsp, lib) diff --git a/proxies/python/hamiltonian.py b/proxies/python/hamiltonian.py new file mode 100644 index 00000000..2fac56ba --- /dev/null +++ b/proxies/python/hamiltonian.py @@ -0,0 +1,182 @@ +"""hamiltonian +A prototype engine code that: + - Constructs different Hamiltonians +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys + +import numpy as np +import sedacs.driver +from sedacs.dev.io import src_path +import scipy.linalg as sp +from hamiltonian_elements import * +from dnnprt import * +from proxies.python.proxy_global import * +#from proxy_global import * + +try: + import ctypes + + # import gpulibInterface as gpu + + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL(str((src_path() / "gpu/nvda/libnvda.so").absolute())) + if arch == "amd": + lib = ctypes.CDLL(str((src_path() / "gpu/amd/libamd.so").absolute())) + +except: + gpuLib = False + + +__all__ = [ + "get_hamiltonian_proxy", + "get_random_hamiltonian", + "build_coul_ham_proxy" +] + + +## Computes a Hamiltonian based on exponential decay of orbital couplings. +# @author Anders Niklasson +# @brief Computes a hamiltonian based on exponential decays. +# @param coords Position for every atoms. z-coordinate of atom 1 = coords[0,2] +# @param atomTypes Index type for each atom in the system. Type for first atom = type[0] (not used yet) +# @param symbols Symbols for every atom type +# @param verb Verbosity. If True is passed, information is printed +# @para get_overlap If overlap needs to be returned +# @return ham 2D array of Hamiltonian elements +# +def get_hamiltonian_proxy(coords, atomTypes, symbols, verb=False, get_overlap=False): + """Constructs a simple tight-binding Hamiltonian""" + + # Internal periodic table for the code + symbols_internal = np.array(["Bl", "H", "C", "N", "O", "P"], dtype=str) + numel_internal = np.zeros(len(symbols_internal), dtype=int) + numel_internal[:] = 0, 1, 4, 5, 6, 5 + bas_per_atom = np.zeros(len(symbols_internal), dtype=int) + bas_per_atom[:] = 0, 1, 4, 4, 4, 4 + spOrbTypes = ["s", "px", "py", "pz"] + sOrbTypes = ["s"] + + nats = len(coords[:, 0]) + + # Map symbols to indices in symbols_internal + symbol_to_index = {symbol: idx for idx, symbol in enumerate(symbols_internal)} + + # Translate `symbols` to `symbols_internal` indices + mapped_indices = np.array([symbol_to_index[symbol] for symbol in symbols]) + + # Convert atomTypes to `symbols_internal` indices + atom_internal_indices = mapped_indices[atomTypes] + + + # Sum the corresponding values in bas_per_atom and numel_internal + norbs = np.sum(bas_per_atom[atom_internal_indices]) + numel = np.sum(numel_internal[atom_internal_indices]) + + ham = np.zeros((norbs, norbs)) + if get_overlap: + over = np.zeros((norbs, norbs)) + if verb: + print("Constructing a simple Hamiltonian for the full system") + + colsh = 0 + rowsh = 0 + tbparams = bring_tbparams() + for i in range(0, nats): + for ii in range(bas_per_atom[atom_internal_indices[i]]): + colsh = rowsh + parI = tbparams[atomTypes[i]][ii] + for j in range(i, nats): + if i == j: + llimit = ii + else: + llimit = 0 + for jj in range(llimit,bas_per_atom[atom_internal_indices[j]]): + parJ = tbparams[atomTypes[j]][jj] + hval, sval = get_integral_v1(coords[i],coords[j],parI,parJ) + if(get_overlap): + over[rowsh,colsh] = sval + over[colsh,rowsh] = sval + + ham[rowsh, colsh] = hval + ham[colsh, rowsh] = hval + colsh = colsh + 1 + rowsh = rowsh + 1 + + if get_overlap: + return ham, over + else: + return ham + + +sedacs.driver.get_hamiltonian = get_hamiltonian_proxy + +## Add coulombic potentials to the Hamiltonian +# @param ham0 No-SCF Hamiltonian +# @param vcouls Coulombic potentials for every atomic site +# @pparam orbital_based If set to True, coulombic potentials for every orbitals will be +# expected. +# @param hindex will give the orbital index for each atom +# The orbital indices for orbital i goes from `hindex[i]` to `hindex[i+1]-1` +# @param overlap Overlap matrix for nonorthogonal formulations. +# @param verb Verbosity switch. +# +def build_coul_ham_proxy(ham0, vcouls, types, charges, orbital_based, hindex, overlap=None, verb=False): + norbs = len(ham0[:, 0]) + vcouls_orbs = np.zeros((norbs), dtype=float) # Expanded coulombic potentials + nats = len(hindex[:]) - 1 + + tbparams = bring_tbparams() + + if orbital_based: + error_at("build_coul_ham", "Orbital-based coulombic potential not implemented") + else: + for i in range(nats): + for ii in range(hindex[i], hindex[i + 1]): + k = ii - hindex[i] + vcouls_orbs[ii] = vcouls[i] + tbparams[types[i]][k].u * charges[i] + if overlap is None: + ham = ham0 + np.diag(vcouls_orbs) + else: + vmat = np.diag(vcouls_orbs) + ham = ham0 + 0.5 * (np.dot(overlap, vmat) + np.dot(vmat, overlap)) + return ham + + +## Computes a Hamiltonian based on a single "s-like" orbitals per atom. +# @author Anders Niklasson +# @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances +# \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. +# +# @param ndim Size of the Hamiltonian matrix +# @param verb Verbosity. If True is passed, information is printed +# @return H 2D numpy array of Hamiltonian elements +# +def get_random_hamiltonian(coords,verb=False): + """Construct simple toy s-Hamiltonian """ + norbs = len(coords[:,0]) + eps = 1e-9; decay_min = 0.1; m = 78; + a = 3.817632; c = 0.816371; x = 1.029769; n = 13; + b = 1.927947; d = 3.386142; y = 2.135545; + ham = np.zeros((norbs,norbs)) + if(verb): print("Constructing a simple Hamiltonian for the full system") + cnt = 0 + for i in range(0,norbs): + x = (a*x+c)%m #Hamiltonian parameters + y = (b*y+d)%n + for j in range(i,norbs): + dist = np.linalg.norm(coords[i,:]-coords[j,:]) + tmp = (x/m)*np.exp(-(y/n + decay_min)*(dist**2)) + ham[i,j] = tmp + ham[j,i] = tmp + ham[i,i] = x*y + return ham + diff --git a/proxies/python/hamiltonian_elements.py b/proxies/python/hamiltonian_elements.py new file mode 100644 index 00000000..c1cf3e07 --- /dev/null +++ b/proxies/python/hamiltonian_elements.py @@ -0,0 +1,309 @@ +"""AOSA and LATTE - prototype hamiltonian elements +Atomic orbital spherical approximation + - Reads the total number of atoms + - Constructs a set of random coordinates + - Constructs a simple Hamiltonian + - Computes the hamiltonian derivatives +""" + +import os +import sys + +import numpy as np +import scipy.linalg as sp +#import sedacs.driver +#import sedacs.interface_modules +#from sedacs.dev.io import src_path + +try: + import ctypes + + # import gpulibInterface as gpu + + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL(str((src_path() / "gpu/nvda/libnvda.so").absolute())) + if arch == "amd": + lib = ctypes.CDLL(str((src_path() / "gpu/amd/libamd.so").absolute())) + +except: + gpuLib = False + + +__all__ = [ + "AOSA_Parameter", + "get_integral", + "get_integral_v1", +] + +class AOSA_Parameter: + def __init__(self,symbol,orb,filePath): + self.symbol = symbol + self.orbType = orb + parFile = open(filePath,"r") + count = 0 + symbFound = False + orbFound = False + for line in parFile: + info = line.split() + if(len(info) >= 1): + print(info) + if(info[0] == "Element="): + if(info[1] == symbol): + norbs = int(info[3]) + symbFound = True + print(info[1],symbol,symbFound) + if(symbFound and info[3] == orb): + print(info[5]) + orbFound = True + self.onsite = float(info[5]) + self.u = float(info[7]) + self.nl = int(info[9]) + self.kappas = np.zeros((self.nl)) + self.ds = np.zeros((self.nl,3)) + self.gammas = np.zeros((self.nl,4)) + if(symbFound and orbFound and info[0] == "LobeIndex="): + self.kappas[count] = float(info[3]) + self.ds[count,0] = float(info[5]) + self.ds[count,1] = float(info[6]) + self.ds[count,2] = float(info[7]) + + self.gammas[count,0] = float(info[9]) + self.gammas[count,1] = float(info[10]) + self.gammas[count,2] = float(info[11]) + self.gammas[count,3] = float(info[12]) + + count = count + 1 + + if(count == self.nl): + break + + + +def get_integral(coordsI,symbolI,orbI,coordsJ,symbolJ,orbJ): + + parI = AOSA_Parameters(symbolI,orbI) + parJ = AOSA_Parameters(symbolJ,orbJ) + + RIJ = coordsJ - coordsI + #Expo + inte = 0.0 + for li in range(parI.nl): + for lj in range(parJ.nl): + sn = np.sign(parI.kappas[li])*np.sign(parJ.kappas[lj]) + kappaIJ = sn*(abs(parI.kappas[li]) + abs(parJ.kappas[lj]))/2 + gammaIJ = (parI.gammas[li,0] + parI.gammas[li,0])/2 + dIJ = RIJ + parJ.ds[lj,:] - parI.ds[li,:] + #dIJ = np.dot(RIJ,parJ.ds[lj,:]) + parJ.ds[lj,:] - parI.ds[li,:] + inte = inte + kappaIJ*np.exp(gammaIJ*np.linalg.norm(dIJ)) + + sval = inte + hval = inte*(parI.onsite + parJ.onsite)/2 + + return hval, sval + + + +def get_integral_v1(coordsI,coordsJ,parI,parJ): + + RIJ = coordsJ - coordsI + #Expo + inte = 0.0 + for li in range(parI.nl): + for lj in range(parJ.nl): + sn = np.sign(parI.kappas[li])*np.sign(parJ.kappas[lj]) + kappaIJ = sn*(abs(parI.kappas[li]) + abs(parJ.kappas[lj]))/2 + gammaIJ = (parI.gammas[li,0] + parJ.gammas[lj,0])/2 + dIJ = RIJ + parJ.ds[lj,:] - parI.ds[li,:] + inte = inte + kappaIJ*np.exp(gammaIJ*np.linalg.norm(dIJ)) + + sval = inte + hval = inte*(parI.onsite + parJ.onsite)/2 + + return hval, sval + + +def LoadBondIntegralParameters_H(TYPE_PAIR): + + TYPE_a = TYPE_PAIR[0] + TYPE_b = TYPE_PAIR[1] + + fss_sigma = np.zeros((8)) + fsp_sigma = np.zeros((8)) + fps_sigma = np.zeros((8)) + fpp_sigma = np.zeros((8)) + fpp_pi = np.zeros((8)) + + if TYPE_a == 'H': + if TYPE_b == 'H': + fss_sigma[0:8] = [-9.400000,-1.145903,-0.391777,0.000,0.000,0.750,3.500,4.000] + fsp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fps_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = -6.4835 + Ep = 0.0 + U = 12.054683 + elif TYPE_b == 'C': + fss_sigma[0:8] = [-9.235812,-1.372683,-0.408433,0.0000,0.0000,1.1000,3.5000,4.000 ] + fsp_sigma[0:8] = [8.104851 ,-0.936099 ,-0.626219 ,0.000 ,0.000 ,1.100 ,3.500 ,4.000 ] + fps_sigma[0:8] = [8.104851 ,-0.936099 ,-0.626219 ,0.000 ,0.000 ,1.100 ,3.500 ,4.000 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'O': + fss_sigma[0:8] = [-12.189103 ,-1.800097 ,-0.325933 ,0.000 ,0.000 ,1.000 ,3.500 ,4.000 ] + fsp_sigma[0:8] = [9.518733 ,-1.333235 ,-0.39371 ,0.000 ,0.000 ,1.000 ,3.500 ,4.000 ] + fps_sigma[0:8] = [9.518733 ,-1.333235 ,-0.39371 ,0.000 ,0.000 ,1.000 ,3.500 ,4.000 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'N': + fss_sigma[0:8] = [-12.63103 ,-1.585597 ,-0.250969 ,0.00 ,0.000 ,1.00 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [9.837852 ,-1.23485 ,-0.324283 ,0.00 ,0.000 ,1.00 ,3.50 ,4.00 ] + fps_sigma[0:8] = [9.837852 ,-1.23485 ,-0.324283 ,0.00 ,0.000 ,1.00 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_a == 'C': + if TYPE_b == 'H': + fss_sigma[0:8] = [-9.235812 ,-1.372683 ,-0.408433 ,0.00 ,0.00 ,1.10 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [8.104851 ,-0.936099 ,-0.626219 ,0.00 ,0.00 ,1.10 ,3.50 ,4.00 ] + fps_sigma[0:8] = [8.104851 ,-0.936099 ,-0.626219 ,0.00 ,0.00 ,1.10 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'C': + fss_sigma[0:8] = [-9.197237 ,-1.60705 ,-0.535057 ,0.00 ,0.00 ,1.40 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [8.562436 ,-0.980182 ,-0.646929 ,0.00 ,0.00 ,1.40 ,3.50 ,4.00 ] + fps_sigma[0:8] = [8.562436 ,-0.980182 ,-0.646929 ,0.00 ,0.00 ,1.40 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [6.614756 ,-0.528591 ,-0.95146 ,0.00 ,0.00 ,1.40 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-3.678302 ,-1.881668 ,-0.255951 ,0.00 ,0.00 ,1.40 ,3.50 ,4.00 ] + Es = -13.7199 + Ep = -5.2541 + U = 14.240811 + elif TYPE_b == 'O': + fss_sigma[0:8] = [-13.986685 ,-1.931973 ,-0.432011 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [10.718738 ,-1.389459 ,-0.182128 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fps_sigma[0:8] = [14.194791 ,-1.37165 ,-0.248285 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [8.622023 ,-0.557144 ,-0.938551 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-5.327397 ,-2.19016 ,-0.089303 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + Es = 0; Ep = 0; U = 0; + elif TYPE_b == 'N': + fss_sigma[0:8] = [-7.409712 ,-1.940942 ,-0.219762 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [7.501761 ,-1.211169 ,-0.373905 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fps_sigma[0:8] = [8.697591 ,-1.26724 ,-0.178484 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [6.95460 ,-1.188456 ,-0.808043 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-2.921605 ,-2.203548 ,-0.409424 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + Es = 0; Ep = 0; U = 0 + elif TYPE_a == 'O': + if TYPE_b == 'H': + fss_sigma[0:8] = [-12.189103 ,-1.800097 ,-0.325933 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [9.518733 ,-1.333235 ,-0.39371 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fps_sigma[0:8] = [9.518733 ,-1.333235 ,-0.39371 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'C': + fss_sigma[0:8] = [-13.986685 ,-1.931973 ,-0.432011 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [14.194791 ,-1.37165 ,-0.248285 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fps_sigma[0:8] = [10.718738 ,-1.389459 ,-0.182128 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [8.622023 ,-0.557144 ,-0.938551 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-5.327397 ,-2.19016 ,-0.089303 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'O': + fss_sigma[0:8] = [-14.387756 ,-2.244278 ,-1.645605 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fsp_sigma[0:8] = [13.699127 ,-1.602358 ,-0.114474 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fps_sigma[0:8] = [13.699127 ,-1.602358 ,-0.114474 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fpp_sigma[0:8] = [9.235469 ,-1.131474 ,-0.924535 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fpp_pi[0:8] = [ -4.526526 ,-2.487174 ,-0.201464 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + Es = -23.9377 + Ep = -9.0035 + U = 11.8761410 + elif TYPE_b == 'N': + fss_sigma[0:8] = [-9.360078 ,-1.293118 ,-0.379415 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [10.723048 ,-0.454312 ,-0.916563 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fps_sigma[0:8] = [10.309052 ,-0.981652 ,-0.828497 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [9.259131 ,-0.734112 ,-1.023762 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-4.532623 ,-1.999631 ,-0.286275 ,0.00 ,0.00 ,1.20 ,3.50 ,4.00 ] + Es = 0; Ep = 0; U = 0 + elif TYPE_a == 'N': + if TYPE_b == 'H': + fss_sigma[0:8] = [-12.63103 ,-1.585597 ,-0.250969 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [9.837852 ,-1.23485 ,-0.324283 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fps_sigma[0:8] = [9.837852 ,-1.23485 ,-0.324283 ,0.00 ,0.00 ,1.00 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'C': + fss_sigma[0:8] = [-7.409712 ,-1.940942 ,-0.219762 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fsp_sigma[0:8] = [8.697591 ,-1.26724 ,-0.178484 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fps_sigma[0:8] = [7.501761 ,-1.211169 ,-0.373905 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fpp_sigma[0:8] = [6.95460 ,-1.188456 ,-0.808043 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + fpp_pi[0:8] = [-2.921605 ,-2.203548 ,-0.409424 ,0.00 ,0.00 ,1.50 ,3.50 ,4.00 ] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'O': + fss_sigma[0:8] = [-9.360078 ,-1.293118 ,-0.379415 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fsp_sigma[0:8] = [10.309052 ,-0.981652 ,-0.828497 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fps_sigma[0:8] = [10.723048 ,-0.454312 ,-0.916563 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fpp_sigma[0:8] = [9.259131 ,-0.734112 ,-1.023762 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + fpp_pi[0:8] = [-4.532623 ,-1.999631 ,-0.286275 ,0.0 ,0.0 ,1.2 ,3.5 ,4.0 ] + Es = 0; Ep = 0; U = 0 + elif TYPE_b == 'N': + fss_sigma[0:8] = [-7.165811 ,-2.348869 ,-0.541905 ,0.0 ,0.0 ,1.5 ,3.5 ,4.0 ] + fsp_sigma[0:8] = [8.212268 ,-1.499123 ,-0.52644 ,0.0 ,0.0 ,1.5 ,3.5 ,4.0 ] + fps_sigma[0:8] = [8.212268 ,-1.499123 ,-0.52644 ,0.0 ,0.0 ,1.5 ,3.5 ,4.0 ] + fpp_sigma[0:8] = [7.102331 ,-1.252366 ,-0.552533 ,0.0 ,0.0 ,1.5 ,3.5 ,4.0 ] + fpp_pi[0:8] = [-2.828938 ,-2.376886 ,-0.560898 ,0.0 ,0.0 ,1.5 ,3.5 ,4.0 ] + Es = -18.5565 + Ep = -7.0625 + U = 17.3729 + else: + Es = 0; Ep = 0; U = 0 + fss_sigma[0:8] = [0,0,0,0,0,0,0,0] + fss_sigma[0:8] = [0,0,0,0,0,0,0,0] + fsp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fps_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_sigma[0:8] = [0,0,0,0,0,0,0,0] + fpp_pi[0:8] = [0,0,0,0,0,0,0,0] + + #Maybe better to pre-calculate? + fss_sigma = ScaleTail(fss_sigma) + fsp_sigma = ScaleTail(fsp_sigma) + fps_sigma = ScaleTail(fps_sigma) + fpp_sigma = ScaleTail(fpp_sigma) + fpp_pi = ScaleTail(fpp_pi) + + return fss_sigma,fsp_sigma,fps_sigma,fpp_sigma,fpp_pi,Es,Ep,U + + +def ScaleTail(A): + if abs(A[0]) < 1e-12: + A[8:13] = 0; + else: + R1 = A[6] + RCUT = A[7] + R1SQ = R1*R1 + RMOD = R1 - A[5] + POLYNOM = RMOD*(A[1] + RMOD*(A[2] + RMOD*(A[3] + A[4]*RMOD))) + SCL_R1 = exp(POLYNOM) + DELTA = RCUT - R1 + # Now we're using a 6th order polynomial: fitted to value, first, + # and second derivatives at R1 and R_cut + A[8] = SCL_R1 + RMOD = R1 - A[5] + DPOLY = A[1] + 2*A[2]*RMOD + 3*A[3]*RMOD*RMOD + 4*A[4]*RMOD*RMOD*RMOD + A[9] = DPOLY*SCL_R1 + DDPOLY = 2*A[2] + 6*A[3]*RMOD + 12*A[4]*RMOD*RMOD + A[10] = (DPOLY*DPOLY + DDPOLY)*SCL_R1/2 + DELTA2 = DELTA*DELTA + DELTA3 = DELTA2*DELTA + DELTA4 = DELTA3*DELTA + A[11] = (-1/DELTA3)*(3*A[10]*DELTA2 + 6*A[9]*DELTA + 10*A[8]) + A[12] = (1/DELTA4)*(3*A[10]*DELTA2 + 8*A[9]*DELTA + 15*A[8]) + A[13] = (-1/(10*DELTA3))*(6*A[12]*DELTA2 + 3*A[11]*DELTA + A[10]) + diff --git a/proxies/python/hamiltonian_random.py b/proxies/python/hamiltonian_random.py new file mode 100644 index 00000000..5acc2ac8 --- /dev/null +++ b/proxies/python/hamiltonian_random.py @@ -0,0 +1,57 @@ +"""random number generator +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import numpy as np +import sys +from random_numbers import RandomNumberGenerator +from coordinates import get_random_coordinates + + +## Computes a Hamiltonian based on a single "s-like" orbitals per atom. +# @author Anders Niklasson +# @brief Computes a hamiltonian \f$ H_{ij} = (x/m)\exp(-(y/n + decay_{min}) |R_{ij}|^2))\f$, based on distances +# \f$ R_{ij} \f$. \f$ x,m,y,n,decay_{min} \f$ are fixed parameters. +# +# @param ndim Size of the Hamiltonian matrix +# @param verb Verbosity. If True is passed, information is printed +# @return H 2D numpy array of Hamiltonian elements +# +def get_random_hamiltonian(coords,verb=False): + """Construct simple toy s-Hamiltonian """ + norbs = len(coords[:,0]) + eps = 1e-9; decay_min = 0.1; m = 78; + a = 3.817632; c = 0.816371; x = 1.029769; n = 13; + b = 1.927947; d = 3.386142; y = 2.135545; + ham = np.zeros((norbs,norbs)) + if(verb): print("Constructing a simple Hamiltonian for the full system") + cnt = 0 + for i in range(0,norbs): + x = (a*x+c)%m #Hamiltonian parameters + y = (b*y+d)%n + for j in range(i,norbs): + dist = np.linalg.norm(coords[i,:]-coords[j,:]) + tmp = (x/m)*np.exp(-(y/n + decay_min)*(dist**2)) + ham[i,j] = tmp + ham[j,i] = tmp + ham[i,i] = x*y + return ham + + +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the total number of atoms/orbitals. Example:\n") + print("python hamiltonian_random.py 100\n") + sys.exit(0) + else: + nats = int(sys.argv[1]) + + verb = True + + coords = get_random_coordinates(nats) + ham = get_random_hamiltonian(coords,verb=verb) + + print("Hamiltonian:",ham) + diff --git a/proxies/python/init_proxy.py b/proxies/python/init_proxy.py new file mode 100644 index 00000000..eba6bd3d --- /dev/null +++ b/proxies/python/init_proxy.py @@ -0,0 +1,107 @@ +"""Init proxy +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys +from sedacs.dev.io import src_path +import scipy.linalg as sp +import numpy as np +from proxies.python.proxy_global import read_ppots, bring_ppots, print_ppots, read_tbparams, bring_tbparams +from proxies.python.proxy_global import bring_ham_list, bring_dm_list, touch_ham_list, touch_dm_list, bring_accel_lib, touch_accel_lib +from proxies.python.proxy_global import bring_cublas_handle_list, bring_stream_list, touch_cublas_handle_list, touch_stream_list +from proxies.python.proxy_global import bring_dev_list, touch_dev_list +import ctypes + +__all__ = [ + "init_proxy_proxy","init_proxy_accelerators" +] + + +## Initialize proxy code +# @brief We will read all the parameters needed for the +# guest or proxy code to run. Every guest code will need to +# set up an initialization function and save parameters that +# need to be read from file only once. Bond integral parameter, +# pair potential, etc. will be stored in memory by the guest code. +# +def init_proxy_proxy(symbols,bas_per_atom): + ... + + # We should really have this be defined in the engine or something, it's hard to follow where + # these things are intended to be happening. + + + #Some codes will have their own input file + #read_proxy_input_file() + #Read pair potentials + read_ppots("ppots.dat",symbols) # Not sure what this is but it probably isn't intended to be hardcoded. + #print_ppots() + #Read tb parameters + filename = "aosa_parameters.dat" + read_tbparams(filename, symbols, bas_per_atom) + +def init_proxy_accelerators(nparts,norbs,rank,full_accel_path): + + try: + import ctypes + gpuLib = True + arch = "nvda" + pwd = os.getcwd() + + if arch == "nvda": + print("loading nvidia...") + lib = ctypes.CDLL("/home/finkeljo/vescratch/sedacs-gpmdsp2/src/sedacs/gpu/nvda/libnvda.so") + if arch == "amd": + lib = ctypes.CDLL("/home/finkeljo/vescratch/sedacs-gpmdsp2/src/sedacs/gpu/amd/libamd.so") + + import gpuLibInterface as gpu + + except: + gpuLib = False + + #set devices based on rank + num_devices=2 #num devices per node + gpu.set_device(rank%num_devices,lib) + + touch_accel_lib(full_accel_path) + accel_lib=bring_accel_lib() + + size_of_double = 8 #bytes + size_of_float = 4 #bytes + size_of_half = 2 #bytes + matSize = norbs * norbs * size_of_double + matSize_f = norbs * norbs * size_of_float + matSize_h = norbs * norbs * size_of_half + + # initialize global list storing ham and dm device vars + touch_cublas_handle_list() + touch_stream_list() + touch_dev_list() + + cublas_handle_list=bring_cublas_handle_list() + stream_list=bring_stream_list() + dev_list=bring_dev_list() + + print("CALLING GPU DEVALLOC!!---------------------") + for i in range(0,1): + print("Allocating device mem, handles and streams ...") + cublas_handle_list.append(gpu.cublasInit(accel_lib)) + stream_list.append(gpu.set_stream(accel_lib)) + + + # if sp2 + for i in range(0,3): + print("Allocating device mem, handles and streams ...") + dev_list.append(gpu.dev_alloc(matSize, lib)) + for i in range(3,8): + print("Allocating device mem, handles and streams ...") + dev_list.append(gpu.dev_alloc(matSize_f, lib)) + for i in range(8,10): + print("Allocating device mem, handles and streams ...") + dev_list.append(gpu.dev_alloc(matSize_h, lib)) + for i in range(10,12): + print("Allocating pinned mem ...") + dev_list.append(gpu.host_alloc_pinned(matSize, lib)) + diff --git a/proxies/python/nonortho.py b/proxies/python/nonortho.py new file mode 100644 index 00000000..98aee9bf --- /dev/null +++ b/proxies/python/nonortho.py @@ -0,0 +1,35 @@ +import numpy as np +import scipy.linalg as sp + +## Inverse overlap factorization +# @brief Constructs inverse overlap factors given the overlap matrix +# @param over Overlap matrix +# @param method If a particular needs to be used +# @param accel If an accelerater (hardwar/library/programing model) is used. +# @verb Verbosity switch +## +def get_xmat(over,method="Diag",accel="No",verb=False): + + if(verb): + print("In get_xmat ...") + + hdim = len(over[0,:]) + if(method == "Diag" and accel == "No"): + e,v = sp.eigh(over) + s = 1./np.sqrt(e) + zmat = np.zeros((hdim,hdim)) + for i in range(hdim): + zmat[i, :] = s[i] * v[:, i] + zmat = np.matmul(v, zmat) + elif method == "Cholesky": + pass + else: + print("ERROR: Method not implemented") + exit(0) + + if verb: + print("\nZmat Matrix") + print(zmat) + + return zmat + diff --git a/proxies/python/proxy_global.py b/proxies/python/proxy_global.py new file mode 100644 index 00000000..0201e56f --- /dev/null +++ b/proxies/python/proxy_global.py @@ -0,0 +1,106 @@ +#Set some global variables such +#as the parameters that are needed +#throughout the code + +import numpy as np +from proxies.python.hamiltonian_elements import AOSA_Parameter +import ctypes + +ppots = None +tbparams = None +d_ham_list = None +d_dm_list = None + +def read_ppots(filename,symbols): + myfile = open(filename,"r") + global ppots + ppots = np.zeros((len(symbols),len(symbols),4)) + + for lines in myfile: + info = lines.split() + if(len(info) > 1): + pairI = info[0] + pairJ = info[1] + for i in range(len(symbols)): + for j in range(len(symbols)): + if(symbols[i] == pairI and symbols[j] == pairJ): + for k in range(2,len(info)): + ppots[i,j,k-2] = float(info[k]) + ppots[j,i,:] = ppots[i,j,:] + + + +def print_ppots(): + print(ppots) + +def bring_ppots(): + return ppots + +def bring_cublas_handle_list(): + return cublas_handle_list + +def bring_stream_list(): + return stream_list + +def bring_ham_list(): + return d_ham_list + +def bring_dm_list(): + return d_dm_list + +def bring_dev_list(): + return dev_list + +def touch_cublas_handle_list(): + global cublas_handle_list + cublas_handle_list=[] + +def touch_stream_list(): + global stream_list + stream_list=[] + +def touch_ham_list(): + global d_ham_list + d_ham_list=[] + +def touch_dm_list(): + global d_dm_list + d_dm_list=[] + +def touch_dev_list(): + global dev_list + dev_list=[] + +def touch_accel_lib(full_path): + global accel_lib + #lib = ctypes.CDLL("/home/finkeljo/sedacs-gpmdsp2/src/sedacs/gpu/nvda/libnvda.so") + accel_lib = ctypes.CDLL(str(full_path)+"/libnvda.so") + +def bring_accel_lib(): + return accel_lib + +def read_tbparams(filename,symbols,bas_per_atom): + + ntypes = len(symbols) + + global tbparams + + tbparams = [None]*ntypes + sOrbTypes = ["s"] + spOrbTypes = ["s","px","py","pz"] + + for i in range(ntypes): + sublist = [None]*bas_per_atom[i] + for j in range(bas_per_atom[i]): + if(bas_per_atom[i] == 1): + orbTypes = sOrbTypes + elif(bas_per_atom[i] == 4): + orbTypes = spOrbTypes + param = AOSA_Parameter(symbols[i],orbTypes[j],filename) + sublist[j] = param + tbparams[i] = sublist + + +def bring_tbparams(): + return tbparams + diff --git a/proxies/python/random_numbers.py b/proxies/python/random_numbers.py new file mode 100644 index 00000000..487b3b35 --- /dev/null +++ b/proxies/python/random_numbers.py @@ -0,0 +1,69 @@ +"""random number generator +This code is only used to guide implemetations and understand which are the +basic elements needed to interface with the sedacs driver. +""" + +import os +import sys + +__all__ = [ + "RandomNumberGenerator", +] + + +## Simple random number generator +# This is important in order to compare across codes +# written in different languages. +# +# To initialize: +# \verbatim +# myRand = rand(123) +# \endverbatim +# where the argument of rand is the seed. +# +# To get a random number between "low" and "high": +# \verbatim +# rnd = myRand.get_rand(low,high) +# \endverbatim +# +class RandomNumberGenerator: + """To generate random numbers.""" + + def __init__(self, seed): + self.a = 321 + self.b = 231 + self.c = 13 + self.seed = seed + self.status = seed * 1000 + + def generate(self, low, high): + """Get a random real number in between low and high.""" + w = high - low + place = self.a * self.status + place = int(place / self.b) + rand = (place % self.c) / self.c + place = int(rand * 1000000) + self.status = place + rand = low + w * rand + + return rand + + +if __name__ == "__main__": + n = len(sys.argv) + if n == 1: + print("Give the total number of vector elements. Example:\n") + print("python random.py 100\n") + sys.exit(0) + else: + nel = int(sys.argv[1]) + + verb = True + + rnd = RandomNumberGenerator(1234) + + for i in range(nel): + print(i,rnd.generate(0,1)) + + + diff --git a/proxies/vars b/proxies/vars new file mode 100644 index 00000000..51759b63 --- /dev/null +++ b/proxies/vars @@ -0,0 +1,11 @@ +#!/bin/bash +THIS_PATH=`pwd` +MOD_PATH=$THIS_PATH/../mods +LATTE_PATH=$THIS_PATH/../latte +PROXYA_PATH=$THIS_PATH/python_proxy +export PYTHONPATH=$PYTHONPATH:$MOD_PATH:$LATTE_PATH:$PROXYA_PATH +export PYTHONWARNINGS="ignore:Unverified HTTPS request" + +GPU_PATH=$THIS_PATH/../src/sedacs/gpu +export PYTHONPATH=$PYTHONPATH:$GPU_PATH + diff --git a/src/sedacs/charges.py b/src/sedacs/charges.py index edca84f0..47f4d898 100644 --- a/src/sedacs/charges.py +++ b/src/sedacs/charges.py @@ -100,7 +100,7 @@ def collect_charges(chargesOnRank, charges, part, nats, verb=False): Returns ------- - 1D numpy array + chargesOnRank : 1D numpy array Returns the same vector chargesOnRank with the added charges of the part """ diff --git a/src/sedacs/chemical_potential.py b/src/sedacs/chemical_potential.py index c64a4c47..05ed7239 100644 --- a/src/sedacs/chemical_potential.py +++ b/src/sedacs/chemical_potential.py @@ -55,8 +55,10 @@ def get_mu(mu0, evals, etemp, nocc, dvals=None, kB=8.61739e-5, verb=False): nmax = 30 tol = 1.0E-10 - #HOMO = evals[int(nocc)] - #LUMO = evals[int(nocc) + 1] + #HOMO = evals[int(nocc) - 1] + #LUMO = evals[int(nocc)] + #with open("energygap.dat", "a") as f: + # f.write(f"{HOMO} {LUMO}\n") #mu = 0.5*(LUMO + HOMO) #mu = 0.5 * (np.min(evals) + np.max(evals)) #mu = np.min(evals) @@ -67,13 +69,13 @@ def get_mu(mu0, evals, etemp, nocc, dvals=None, kB=8.61739e-5, verb=False): dvals = np.ones((norbs)) for i in range(nmax+1): fermi = fermi_dirac(mu, evals, etemp) - occ = np.sum([fermi[i]*dvals[i] for i in range(norbs)]) + occ = np.sum([fermi[j]*dvals[j] for j in range(norbs)]) occErr = abs(occ - nocc) if abs(occErr) < tol: break dFermiDmu = (1/(kB*etemp))*fermi*(1.0-fermi)*dvals occ_prime = np.sum(dFermiDmu[:norbs]*dvals[:norbs]) - mu = mu + a*(nocc - occ)/occ_prime + mu = mu + a*(nocc - occ)/(occ_prime + 1.0E-3) if(abs(mu) > 1.0E10): print('WARNING: Newton-Raphson did not converge (will try bisection) Occupation error = ', occErr) notConverged = True @@ -85,7 +87,7 @@ def get_mu(mu0, evals, etemp, nocc, dvals=None, kB=8.61739e-5, verb=False): notConverged = True if(notConverged): - etemp = 10000 + #etemp = 10000 muMin = np.min(evals) muMax = np.max(evals) mu = muMin diff --git a/src/sedacs/coulombic.py b/src/sedacs/coulombic.py index 3cef3017..49179bbd 100644 --- a/src/sedacs/coulombic.py +++ b/src/sedacs/coulombic.py @@ -103,6 +103,7 @@ def get_PME_coulvs( atomtypes, lattice_vecs, calculate_forces=0, + device="cuda", ): """ Get periodic Coulombic potentials using the Particle Mesh Ewald method @@ -133,7 +134,7 @@ def get_PME_coulvs( """ np_dtype = np.float64 dtype = torch.float64 - device = "cuda" + # NOTE: cutoff <= 0.5 * min(box lengths) # so if box lengths are [10.0, 10.0, 10.0], cutoff shuold be at most 5.0. # because of the minumum image convention. diff --git a/src/sedacs/driver/graph_adaptive_kernel_scf.py b/src/sedacs/driver/graph_adaptive_kernel_scf.py new file mode 100644 index 00000000..4cd3da42 --- /dev/null +++ b/src/sedacs/driver/graph_adaptive_kernel_scf.py @@ -0,0 +1,395 @@ +""" +graph_adaptive_kernel_scf.py +==================================== +Graph adaptive self-consistent charge solver with kernel + +""" + +import time +import numpy as np +from copy import deepcopy + +from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph, multiply_graphs +from sedacs.graph_partition import get_coreHaloIndices, graph_partition +from sedacs.sdc_hamiltonian import get_hamiltonian +from sedacs.sdc_density_matrix import get_density_matrix +from sedacs.sdc_evals_dvals import get_evals_dvals +from sedacs.file_io import write_pdb_coordinates, write_xyz_coordinates +from sedacs.mpi import ( + collect_and_sum_matrices, + collect_and_sum_vectors_float, + collect_and_concatenate_vectors, +) +from sedacs.system import System, extract_subsystem, get_hindex +from sedacs.coulombic import get_PME_coulvs, build_coul_ham +from sedacs.charges import get_charges, collect_charges +from sedacs.evals_dvals import collect_evals, collect_dvals +from sedacs.message import status_at, error_at, warning_at +from sedacs.mixer import diis_mix, linear_mix +from sedacs.chemical_potential import get_mu +from sedacs.file_io import read_latte_tbparams +from sedacs.driver.graph_kernel_byparts import get_kernel_byParts, apply_kernel_byParts, rankN_update_byParts + +try: + from mpi4py import MPI + + is_mpi_available = True +except ModuleNotFoundError as e: + is_mpi_available = False + error_at( + "get_adaptiveSCFDM_scf", + "mpi4py not found, parallelization will not be available", + ) + raise e + +__all__ = ["get_singlePoint_charges", "get_adaptiveSCFDM"] + + +def get_singlePoint_charges( + sdc, eng, rank, numranks, comm, parts, partsCoreHalo, sy, hindex, gscf, mu=0.0 +): + """ + Get the single point charges for the full system from graph-partitioned subsystems. + This function is called from the graph adaptive SCF loop. + For each SCF iteration, it follows the following steps: + 1. For each subsystem: + a. Extract the subsystem from the full system. + b. Compute the Hamiltonian matrix for the subsystem. + c. Compute the evals and dvals from the Hamiltonian matrix for the subsystem. + 2. Collect the full evals and dvals across all subsystems. + 3. Compute the global chemical potential for the full system using the collected full evals and dvals. + 4. For each subsystem: + a. Compute the density matrix for the subsystem. + b. Compute the charges for the subsystem. + 5. Collect the full graph and charges across all subsystems. + + Parameters + ---------- + sdc : sedacs driver object + Refer to driver/init.py for detailed information. + eng : engine object + Refer to engine.py for detailed information. + rank: int + Rank of the current process in the MPI communicator. + numranks: int + Total number of processes in the MPI communicator. + comm: MPI communicator + MPI communicator for parallelization. + parts: list of lists of int + List of partitions of the full system. + partsCoreHalo: list of lists of int + List of core and halo indices for each partition. + sy: System object + Refer to system.py for detailed information. + hindex: list of int + Orbital index for each atom in the system. The orbital indices for orbital i goes from `hindex[i]` to `hindex[i+1]-1`. + gscf: int + Graph adaptive SCF iteration number. + mu: float + Chemical potential for the full system. Default is 0.0. + + Returns + ------- + fullGraphRho: 2D numpy array, dtype: float + The full graph collected from all subsystems. + fullCharges: 1D numpy array, dtype: float + The mulliken charges for the full system. + subSysOnRank: list of System objects + List of subsystem objects for each partition on the current rank. + mu: float + The chemical potential for the full system. + """ + partsPerRank = int(sdc.nparts / numranks) + partIndex1 = rank * partsPerRank + partIndex2 = (rank + 1) * partsPerRank + graphOnRank = None + chargesOnRank = None + evalsOnRank = None + dvalsOnRank = None + subSysOnRank = [] + sy.subSy_list = [None] * partsPerRank + + for partIndex in range(partIndex1, partIndex2): + numberOfCoreAtoms = len(parts[partIndex]) + subSy = System(len(partsCoreHalo[partIndex])) + sy.subSy_list[partIndex - partIndex1] = subSy + subSy.symbols = sy.symbols + tic = time.perf_counter() + subSy.coords, subSy.types = extract_subsystem( + sy.coords, sy.types, sy.symbols, partsCoreHalo[partIndex] + ) + subSy.ncores = len(parts[partIndex]) + toc = time.perf_counter() + print("Time for extract_subsystem", toc - tic, "(s)") + partFileName = "subSy" + str(rank) + "_" + str(partIndex) + ".pdb" + write_pdb_coordinates(partFileName, subSy.coords, subSy.types, subSy.symbols) + write_xyz_coordinates( + "subSy" + str(rank) + "_" + str(partIndex) + ".xyz", + subSy.coords, + subSy.types, + subSy.symbols, + ) + tic = time.perf_counter() + + # Get some electronic structure elements for the sybsystem + # This could eventually be computed in the engine if no basis set is + # provided in the SEDACS input file. + subSy.norbs, subSy.orbs, subSy.hindex, subSy.numel, subSy.znuc = get_hindex( + sdc.orbs, subSy.symbols, subSy.types, verb=True + ) + + norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + tmpArray = np.zeros(numberOfCoreAtoms) + tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + norbsInCore = int(np.sum(tmpArray)) + print("Number of orbitals in the core =", norbsInCore) + nocc = int(float(subSy.numel) / 2.0) # Get the total occupied orbitals + + subSy.ham, subSy.over, subSy.zmat = get_hamiltonian( + eng, + partIndex, + sdc.nparts, + norbs, + sy.latticeVectors, + subSy.coords, + subSy.types, + subSy.symbols, + verb=False, + get_overlap=True, + newsystem=True, + ) + + toc = time.perf_counter() + print("Time for get_hamiltonian", toc - tic, "(s)") + + tic = time.perf_counter() + subSy.evects, evalsInPart, dvalsInPart = get_evals_dvals( + eng, + partIndex, + sdc.nparts, + sy.latticeVectors, + subSy.coords, + subSy.types, + subSy.symbols, + subSy.ham, + sy.coulvs[partsCoreHalo[partIndex]], + nocc=nocc, + norbsInCore=norbsInCore, + mu=mu, + etemp=sdc.etemp, + verb=False, + newsystem=False, + ) + subSy.evals = evalsInPart + toc = time.perf_counter() + print("Time for get_evals_dvals", toc - tic, "(s)") + + evalsOnRank = collect_evals(evalsOnRank, evalsInPart, verb=True) + dvalsOnRank = collect_dvals(dvalsOnRank, dvalsInPart, verb=True) + + if is_mpi_available and numranks > 1: + fullEvals = collect_and_concatenate_vectors(evalsOnRank, comm) + fullDvals = collect_and_concatenate_vectors(dvalsOnRank, comm) + comm.Barrier() + else: + fullEvals = evalsOnRank + fullDvals = dvalsOnRank + # Calculate the global chemical potential from the evals and dvals collected from all subsystems + mu = get_mu( + mu, + fullEvals, + sdc.etemp, + int(sy.numel / 2), + dvals=fullDvals, + kB=8.61739e-5, + verb=True, + ) + + for partIndex in range(partIndex1, partIndex2): + numberOfCoreAtoms = len(parts[partIndex]) + subSy = sy.subSy_list[partIndex - partIndex1] + + norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + tmpArray = np.zeros(numberOfCoreAtoms) + tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + + norbsInCore = np.sum(tmpArray) + nocc = int(float(subSy.numel) / 2.0) # Get the total occupied orbitals + subSy.latticeVectors = sy.latticeVectors + + tic = time.perf_counter() + + rho, chargesInPart = get_density_matrix( + eng, + partIndex, + sdc.nparts, + norbs, + sy.latticeVectors, + subSy.coords, + subSy.types, + subSy.symbols, + subSy.ham, + sy.coulvs[partsCoreHalo[partIndex]], + nocc=nocc, + norbsInCore=norbsInCore, + mu=mu, + etemp=sdc.etemp, + overlap=subSy.over, + full_data=False, + verb=False, + newsystem=True, + keepmem=True, + ) + + chargesInPart = chargesInPart[: len(parts[partIndex])] +# subSy.charges = chargesInPart + + # Save the subsystems list for returning them + subSysOnRank.append(subSy) + + print("TotalCharge in part", partIndex, sum(chargesInPart)) + # print("Charges in part", chargesInPart) + + toc = time.perf_counter() + print("Time to get_densityMatrix and get_charges", toc - tic, "(s)") + # Building a graph from DMs + graphOnRank = collect_graph_from_rho( + graphOnRank, + rho, + sdc.gthresh, + sy.nats, + sdc.maxDeg, + partsCoreHalo[partIndex], + len(parts[partIndex]), + hindex, + ) + + chargesOnRank = collect_charges( + chargesOnRank, chargesInPart, parts[partIndex], sy.nats, verb=True + ) + + if is_mpi_available and numranks > 1: + fullGraphRho = collect_and_sum_matrices(graphOnRank, rank, numranks, comm) + fullCharges = collect_and_sum_vectors_float(chargesOnRank, rank, numranks, comm) + comm.Barrier() + else: + fullGraphRho = graphOnRank + fullCharges = chargesOnRank + + # print_graph(fullGraphRho) + return fullGraphRho, fullCharges, subSysOnRank, mu + + +def get_adaptive_KernelSCFDM(sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu): + fullGraph = graphNL + + # Initial guess for the excess ocupation vector. This is the negative of + # the charge! + charges = sy.charges + chargesOld = None + chargesIn = None + chargesOld = None + chargesOut = None + scfError = 1.0 + charge_iter = [charges] + # Partition the graph + parts = graph_partition( + sdc, eng, fullGraph, sdc.partitionType, sdc.nparts, sy.coords, True + ) + kernel = 0 + for gscf in range(sdc.numAdaptIter): + msg = "Graph-adaptive iteration" + str(gscf) + status_at("get_adaptiveSCFDM", msg) + njumps = 1 + partsCoreHalo = [] + numCores = [] + # print("\nCore and halos indices for every part:") + for i in range(sdc.nparts): + coreHalo, nc, nh = get_coreHaloIndices(parts[i], fullGraph, njumps) + partsCoreHalo.append(coreHalo) + numCores.append(nc) + print("core,halo size:", i, "=", nc, nh) + # print("coreHalo for part", i, "=", coreHalo) + if gscf == 0 and sum(charges == 0) != 0: + sy.coulvs = np.zeros(len(charges)) + else: + sy.coulvs, ewald_e = get_PME_coulvs( + charges, sy.hubbard_u, sy.coords, sy.types, sy.latticeVectors + ) + + chargesOld = charges + fullGraphRho, charges, subSysOnRank, mu = get_singlePoint_charges( + sdc, eng, rank, numranks, comm, parts, partsCoreHalo, sy, hindex, gscf, mu + ) + charge_iter.append(charges) + # print("Collected charges", charges) + if scfError > 0.01: + scfError, charges, chargesOld, chargesIn, chargesOut = diis_mix( + charges, chargesOld, chargesIn, chargesOut, gscf, verb=True + ) + # scfError,charges,chargesOld = linear_mix(0.25,charges,chargesOld,gscf) + # if gscf == 0: + # scfError = sy.numel + else: + #scfError = np.linalg.norm(chargesNew - charges) / np.sqrt(sy.nats) + scfError = np.linalg.norm(charges - chargesOld) / np.sqrt(sy.nats) + # scfError = np.linalg.norm(charge_iter[-1] - charge_iter[-2]) / np.sqrt(sy.nats) + if kernel == 0: + get_kernel_byParts(sdc, rank, numranks, parts, partsCoreHalo, sy, mu) + syk = deepcopy(sy) + syk.subSy_list = deepcopy(sy.subSy_list) + for i, subSy in enumerate(syk.subSy_list): + subSy.ker = deepcopy(sy.subSy_list[i].ker) + # KRes = apply_kernel_byParts( + # charges, chargesOld, sdc, rank, numranks, comm, parts, sy + # ) + # breakpoint() + kernel = 1 + else: + for i, subSy in enumerate(sy.subSy_list): + subSy.ker = deepcopy(syk.subSy_list[i].ker) + KRes = rankN_update_byParts( + charges, chargesOld, 6, sdc, rank, numranks, comm, parts, partsCoreHalo, sy, mu=mu + ) + # charges = charges - KRes + charges = chargesOld - KRes + # breakpoint() + # charges = charges - np.dot(sy.subSy_list[0].ker, g_charges - charges) + # print_graph(fullGraphRho) + + # fullGraph = add_graphs(fullGraphRho, graphNL) + fullGraph = multiply_graphs(fullGraphRho, fullGraph) + for i in range(sy.nats): + print("Charges:", i, sy.symbols[sy.types[i]], charges[i]) + print("SCF ERR =", scfError) + print("TotalCharge", sum(charges)) + + if scfError < sdc.scfTol: + status_at( + "get_adaptiveSCFDM", "SCF converged with SCF error = " + str(scfError) + ) + break + + if gscf == sdc.numAdaptIter - 1: + warning_at("get_adaptiveSCFDM", "SCF did not converged ... ") + + AtToPrint = 0 + + subSy = System(fullGraphRho[AtToPrint, 0]) + subSy.symbols = sy.symbols + subSy.coords, subSy.types = extract_subsystem( + sy.coords, + sy.types, + sy.symbols, + fullGraph[AtToPrint, 1 : fullGraph[AtToPrint, 0] + 1], + ) + + if rank == 0: + write_pdb_coordinates( + "subSyG_fin.pdb", subSy.coords, subSy.types, subSy.symbols + ) + write_xyz_coordinates( + "subSyG_fin.xyz", subSy.coords, subSy.types, subSy.symbols + ) + + return fullGraph, charges, mu, parts, partsCoreHalo, subSysOnRank diff --git a/src/sedacs/driver/graph_adaptive_scf.py b/src/sedacs/driver/graph_adaptive_scf.py index 8cf9e145..108721a7 100644 --- a/src/sedacs/driver/graph_adaptive_scf.py +++ b/src/sedacs/driver/graph_adaptive_scf.py @@ -8,8 +8,9 @@ import time import numpy as np from pathlib import Path +import pickle -from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph +from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph, multiply_graphs from sedacs.graph_partition import get_coreHaloIndices, graph_partition from sedacs.sdc_hamiltonian import get_hamiltonian from sedacs.sdc_density_matrix import get_density_matrix @@ -142,7 +143,7 @@ def get_singlePoint_charges( print("Number of orbitals in the core =", norbsInCore) nocc = int(float(subSy.numel) / 2.0) # Get the total occupied orbitals - ham, over = get_hamiltonian( + ham, over, zmat = get_hamiltonian( eng, partIndex, sdc.nparts, @@ -160,7 +161,7 @@ def get_singlePoint_charges( print("Time for get_hamiltonian", toc - tic, "(s)") tic = time.perf_counter() - evalsInPart, dvalsInPart = get_evals_dvals( + evects, evalsInPart, dvalsInPart = get_evals_dvals( eng, partIndex, sdc.nparts, @@ -303,25 +304,15 @@ def get_adaptiveSCFDM(sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu): chargesIn = None chargesOld = None chargesOut = None - # Get the path of the current file - curr_file_path = Path(__file__) - # Get the directory of the current file - curr_dir = curr_file_path.parent - # Get the path of latte parameters - latte_param_path = curr_dir / Path( - "../../../parameters/latte/TBparam/electrons.dat" + # Partition the graph + parts = graph_partition( + sdc, eng, fullGraph, sdc.partitionType, sdc.nparts, sy.coords, True ) - latte_tbparams = read_latte_tbparams(latte_param_path) - hubbard_u = [latte_tbparams[symbol]["HubbardU"] for symbol in sy.symbols] - hubbard_u = np.array(hubbard_u)[sy.types] for gscf in range(sdc.numAdaptIter): msg = "Graph-adaptive iteration" + str(gscf) status_at("get_adaptiveSCFDM", msg) - # Partition the graph - parts = graph_partition( - sdc, eng, fullGraph, sdc.partitionType, sdc.nparts, sy.coords, True - ) - njumps = 2 + + njumps = 1 partsCoreHalo = [] numCores = [] # print("\nCore and halos indices for every part:") @@ -335,7 +326,7 @@ def get_adaptiveSCFDM(sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu): sy.coulvs = np.zeros(len(charges)) else: sy.coulvs, ewald_e = get_PME_coulvs( - charges, hubbard_u, sy.coords, sy.types, sy.latticeVectors + charges, sy.hubbard_u, sy.coords, sy.types, sy.latticeVectors ) fullGraphRho, charges, subSysOnRank, mu = get_singlePoint_charges( @@ -344,15 +335,24 @@ def get_adaptiveSCFDM(sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu): # print("Collected charges", charges) scfError, charges, chargesOld, chargesIn, chargesOut = diis_mix( - charges, chargesOld, chargesIn, chargesOut, gscf, verb=True + charges, chargesOld, chargesIn, chargesOut, gscf, verb=False ) # scfError,charges,chargesOld = linear_mix(0.25,charges,chargesOld,gscf) # if gscf == 0: # scfError = sy.numel # print_graph(fullGraphRho) - - fullGraph = add_graphs(fullGraphRho, graphNL) + # fullGraph = add_graphs(fullGraphRho, graphNL) + #fullGraph = multiply_graphs(fullGraphRho, graphNL) + fullGraph = multiply_graphs(fullGraphRho, fullGraph) + # with open('graphNL.pkl', 'wb') as f: + # pickle.dump(graphNL, f) + # with open('fullGraphRho.pkl', 'wb') as f: + # pickle.dump(fullGraphRho, f) + # with open('fullGraph.pkl', 'wb') as f: + # pickle.dump(fullGraph, f) + # if gscf == 1: + # breakpoint() for i in range(sy.nats): print("Charges:", i, sy.symbols[sy.types[i]], charges[i]) print("SCF ERR =", scfError) @@ -386,4 +386,4 @@ def get_adaptiveSCFDM(sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu): "subSyG_fin.xyz", subSy.coords, subSy.types, subSy.symbols ) - return fullGraph, charges, mu, parts, subSysOnRank + return fullGraph, charges, mu, parts, partsCoreHalo, subSysOnRank diff --git a/src/sedacs/driver/graph_adaptive_sp_energy_forces.py b/src/sedacs/driver/graph_adaptive_sp_energy_forces.py index ffcb3b3a..ff7e2040 100644 --- a/src/sedacs/driver/graph_adaptive_sp_energy_forces.py +++ b/src/sedacs/driver/graph_adaptive_sp_energy_forces.py @@ -8,7 +8,7 @@ import time from pathlib import Path -from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph +from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph, multiply_graphs from sedacs.graph_partition import get_coreHaloIndices, graph_partition from sedacs.sdc_hamiltonian import get_hamiltonian from sedacs.sdc_density_matrix import get_density_matrix @@ -110,10 +110,12 @@ def get_singlePoint_energy_forces( energyOnRank = None forcesOnRank = None subSysOnRank = [] + sy.subSy_list = [None] * partsPerRank for partIndex in range(partIndex1, partIndex2): numberOfCoreAtoms = len(parts[partIndex]) subSy = System(len(partsCoreHalo[partIndex])) + sy.subSy_list[partIndex - partIndex1] = subSy subSy.symbols = sy.symbols tic = time.perf_counter() subSy.coords, subSy.types = extract_subsystem( @@ -145,7 +147,7 @@ def get_singlePoint_energy_forces( print("Number of orbitals in the core =", norbsInCore) nocc = int(float(subSy.numel) / 2.0) # Get the total occupied orbitals - ham, over = get_hamiltonian( + subSy.ham, subSy.over, subSy.zmat = get_hamiltonian( eng, partIndex, sdc.nparts, @@ -163,7 +165,7 @@ def get_singlePoint_energy_forces( print("Time for get_hamiltonian", toc - tic, "(s)") tic = time.perf_counter() - evalsInPart, dvalsInPart = get_evals_dvals( + subSy.evects, evalsInPart, dvalsInPart = get_evals_dvals( eng, partIndex, sdc.nparts, @@ -171,7 +173,7 @@ def get_singlePoint_energy_forces( subSy.coords, subSy.types, subSy.symbols, - ham, + subSy.ham, sy.coulvs[partsCoreHalo[partIndex]], nocc=nocc, norbsInCore=norbsInCore, @@ -180,6 +182,7 @@ def get_singlePoint_energy_forces( verb=False, newsystem=False, ) + subSy.evals = evalsInPart toc = time.perf_counter() print("Time for get_evals_dvals", toc - tic, "(s)") @@ -206,24 +209,8 @@ def get_singlePoint_energy_forces( for partIndex in range(partIndex1, partIndex2): numberOfCoreAtoms = len(parts[partIndex]) - subSy = System(len(partsCoreHalo[partIndex])) - subSy.symbols = sy.symbols - tic = time.perf_counter() - subSy.coords, subSy.types = extract_subsystem( - sy.coords, sy.types, sy.symbols, partsCoreHalo[partIndex] - ) - subSy.ncores = len(parts[partIndex]) - toc = time.perf_counter() - print("Time for extract_subsystem", toc - tic, "(s)") + subSy = sy.subSy_list[partIndex - partIndex1] - tic = time.perf_counter() - - # Get some electronic structure elements for the sybsystem - # This could eventually be computed in the engine if no basis set is - # provided in the SEDACS input file. - subSy.norbs, subSy.orbs, subSy.hindex, subSy.numel, subSy.znuc = get_hindex( - sdc.orbs, subSy.symbols, subSy.types, verb=True - ) norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian tmpArray = np.zeros(numberOfCoreAtoms) tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] @@ -242,13 +229,13 @@ def get_singlePoint_energy_forces( subSy.coords, subSy.types, subSy.symbols, - ham, + subSy.ham, sy.coulvs[partsCoreHalo[partIndex]], nocc=nocc, norbsInCore=norbsInCore, mu=mu, etemp=sdc.etemp, - overlap=over, + overlap=subSy.over, full_data=False, verb=False, newsystem=True, @@ -264,7 +251,7 @@ def get_singlePoint_energy_forces( subSy.coords, subSy.types, subSy.symbols, - ham, + subSy.ham, sy.coulvs[partsCoreHalo[partIndex]], nocc=nocc, norbsInCore=norbsInCore, @@ -334,41 +321,29 @@ def get_singlePoint_energy_forces( def get_adaptive_sp_energy_forces( - sdc, eng, comm, rank, numranks, sy, hindex, graphNL, mu, shadow_md=True + sdc, eng, comm, rank, numranks, sy, parts, partsCoreHalo, hindex, graphNL, mu, shadow_md=True ): fullGraph = graphNL charges = sy.charges - # Get the path of the current file - curr_file_path = Path(__file__) - # Get the directory of the current file - curr_dir = curr_file_path.parent - # Get the path of latte parameters - latte_param_path = curr_dir / Path( - "../../../parameters/latte/TBparam/electrons.dat" - ) - latte_tbparams = read_latte_tbparams(latte_param_path) - hubbard_u = [latte_tbparams[symbol]["HubbardU"] for symbol in sy.symbols] - hubbard_u = np.array(hubbard_u)[sy.types] # Partition the graph - parts = graph_partition( - sdc, eng, fullGraph, sdc.partitionType, sdc.nparts, sy.coords, True - ) - njumps = 2 - partsCoreHalo = [] - numCores = [] - - # print("\nCore and halos indices for every part:") - for i in range(sdc.nparts): - coreHalo, nc, nh = get_coreHaloIndices(parts[i], fullGraph, njumps) - partsCoreHalo.append(coreHalo) - numCores.append(nc) - print("core,halo size:", i, "=", nc, nh) +# parts = graph_partition( +# sdc, eng, fullGraph, sdc.partitionType, sdc.nparts, sy.coords, True +# ) + # njumps = 1 + # partsCoreHalo = [] + # numCores = [] + # # print("\nCore and halos indices for every part:") + # for i in range(sdc.nparts): + # coreHalo, nc, nh = get_coreHaloIndices(parts[i], fullGraph, njumps) + # partsCoreHalo.append(coreHalo) + # numCores.append(nc) + # print("core,halo size:", i, "=", nc, nh) # print("coreHalo for part", i, "=", coreHalo) sy.coulvs, ecoul, fcoul = get_PME_coulvs( charges, - hubbard_u, + sy.hubbard_u, sy.coords, sy.types, sy.latticeVectors, @@ -382,10 +357,12 @@ def get_adaptive_sp_energy_forces( ) if shadow_md: fcoul = ((2 * charges - sy.charges) / sy.charges)[:, None] * fcoul + energy = energy - ecoul forces = forces + fcoul - fullGraph = add_graphs(fullGraphRho, graphNL) + # fullGraph = add_graphs(fullGraphRho, graphNL) + fullGraph = multiply_graphs(fullGraphRho, fullGraph) AtToPrint = 0 @@ -405,4 +382,4 @@ def get_adaptive_sp_energy_forces( "subSyG_fin.xyz", subSy.coords, subSy.types, subSy.symbols ) - return fullGraph, charges, energy, forces, mu, parts, subSysOnRank + return fullGraph, charges, energy, forces, mu, parts, partsCoreHalo, subSysOnRank diff --git a/src/sedacs/driver/graph_kernel_byparts.py b/src/sedacs/driver/graph_kernel_byparts.py new file mode 100644 index 00000000..37942f41 --- /dev/null +++ b/src/sedacs/driver/graph_kernel_byparts.py @@ -0,0 +1,592 @@ +""" +graph_kernel_byparts.py +==================================== +Utility functions for computing the kernel preconditioner + +""" + +import time +import numpy as np +from scipy.linalg import inv +from pathlib import Path + +from sedacs.graph import add_graphs, collect_graph_from_rho, print_graph +from sedacs.graph_partition import get_coreHaloIndices, graph_partition +from sedacs.sdc_hamiltonian import get_hamiltonian +from sedacs.sdc_density_matrix import get_density_matrix +from sedacs.sdc_evals_dvals import get_evals_dvals +from sedacs.file_io import write_pdb_coordinates, write_xyz_coordinates +from sedacs.mpi import ( + collect_and_sum_matrices, + collect_and_sum_vectors_float, + collect_and_concatenate_vectors, + collect_and_sum_matrices_float, + collect_and_sum_vectors_int, +) +from sedacs.system import System, extract_subsystem, get_hindex +from sedacs.coulombic import get_PME_coulvs, build_coul_ham +from sedacs.charges import get_charges, collect_charges +from sedacs.evals_dvals import collect_evals, collect_dvals +from sedacs.message import status_at, error_at, warning_at +from sedacs.mixer import diis_mix, linear_mix +from sedacs.chemical_potential import get_mu +from sedacs.file_io import read_latte_tbparams + +try: + from mpi4py import MPI + + is_mpi_available = True +except ModuleNotFoundError as e: + is_mpi_available = False + error_at( + "get_adaptiveSCFDM_scf", + "mpi4py not found, parallelization will not be available", + ) + raise e + +__all__ = ["get_kernel_byParts", "Canon_Response_dPdMu", "apply_kernel_byParts"] + + +def get_kernel_byParts( + sdc, rank, numranks, parts, partsCoreHalo, sy, mu=0.0 +): + """ + Compute the kernel preconditioner for each subsystem in parallel with MPI support. + + Parameters + ---------- + sdc : sedacs driver object + Refer to driver/init.py for detailed information. + rank: int + Rank of the current process in the MPI communicator. + numranks: int + Total number of processes in the MPI communicator. + parts: list of lists of int + List of partitions of the full system. + partsCoreHalo: list of lists of int + List of core and halo indices for each partition. + sy: System object + Refer to system.py for detailed information. + mu: float + Chemical potential for the full system. Default is 0.0. + + Returns + ------- + None + """ + # Get the partition indices for the current MPI rank + partsPerRank = int(sdc.nparts / numranks) + partIndex1 = rank * partsPerRank + partIndex2 = (rank + 1) * partsPerRank + # Initialize charge pertubation vector + chargePertVect = np.zeros(sy.nats) + # Loop over all partitions in the current MPI rank + for partIndex in range(partIndex1, partIndex2): + # Get the number of atoms in the core region for the current part + numberOfCoreAtoms = len(parts[partIndex]) + # Get the subsystem for the current part + subSy = sy.subSy_list[partIndex - partIndex1] + # Get the number of orbitals in the subsystem + norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + # Get the number of orbitals in the core region + tmpArray = np.zeros(numberOfCoreAtoms) + tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + norbsInCore = int(np.sum(tmpArray)) + print("Number of orbitals in the core =", norbsInCore) + # Initialize Kernel preconditioner + subSy.ker = np.zeros((numberOfCoreAtoms, numberOfCoreAtoms)) + # Initialize Jacobian matrix + Jacobian = np.zeros((numberOfCoreAtoms, numberOfCoreAtoms)) + # Iterate through all atoms in the core region + for i in range(numberOfCoreAtoms): + # Set the charge perturbation vector to zeros each time before starting each iteration + chargePertVect[:] = 0.0 + # Get the index of the atom in the full system and set the corresponding charge to 1.0 + atom_index = parts[partIndex][i] + chargePertVect[atom_index] = 1.0 + # Compute the Coulomb potential from charge perturbation vector + # Note that the Hubbard U correction is included in the computed Coulomb potential + coulvs, ewald_e = get_PME_coulvs( + chargePertVect, sy.hubbard_u, sy.coords, sy.types, sy.latticeVectors + ) + # Get the Coulomb potential and charges for the Core+Halo part + coulvsInPart = coulvs[partsCoreHalo[partIndex]] + # Build the Hamiltonian from Coulomb potential and charges from charge perturbation + H_dq_v = np.zeros((norbs, norbs)) + + for j in range(subSy.nats): + start = subSy.hindex[j] + end = subSy.hindex[j + 1] + H_dq_v[start:end, start:end] = np.diag(coulvsInPart[j] * np.ones(end - start)) + + H_dq_v = 0.5 * (np.matmul(subSy.over, H_dq_v) + np.matmul(H_dq_v, subSy.over)) + + # Precompute ZQ and (ZQ)^t for the forward and backward transform + ZQ = np.matmul(subSy.zmat, subSy.evects) + ZQ_T = ZQ.T + + # H1 = Q'Z'*H_dq_v*ZQ Forward transform + X = np.matmul(ZQ_T, H_dq_v) + H1 = np.matmul(X, ZQ) + + # Compute canonical quantum perturbation + dPdMu, P1 = Canon_Response_dPdMu(H1, sdc.etemp, subSy.evals, mu, 12) + + # Initialize dPdMuAO matrix with diagonal elements from dPdMu + dPdMuAO = np.zeros((norbs, norbs)) + dPdMuAO[np.diag_indices_from(dPdMuAO)] = dPdMu + + # Transform P1 back to the nonortho-canonical basis set. + X = np.matmul(ZQ, P1) + P1 = np.matmul(X, ZQ_T) + # Multiply P1 with the overlap matrix + p1S = np.matmul(P1, subSy.over) + # Transform dPdMu back to the nonortho-canonical basis set + X = np.matmul(ZQ, dPdMuAO) + dPdMuAO = np.matmul(X, ZQ_T) + # Multiply dPdMuAO with the overlap matrix + dPdMuAOS = np.matmul(dPdMuAO, subSy.over) + # Get the diagonal elements of dPdMuAO and p1S only from the core region + dPdMuAO_dia = np.diag(dPdMuAOS) + p1_dia = np.diag(p1S) + trP1 = np.sum(p1_dia[0:norbsInCore]) + trdPdMuAO = np.sum(dPdMuAO_dia[0:norbsInCore]) + # Compute the chemical potential + mu1 = -trP1 / trdPdMuAO if abs(trdPdMuAO) > 1e-12 else 0.0 + # Adjust P1 with the repsonse to get the density matrix + ptrho = 2 * (P1 + mu1 * dPdMuAO) + ptrho = np.matmul(ptrho, subSy.over) + # Get charges from the density matrix + fullDiag = np.diag(ptrho) + pt_charges = np.zeros(subSy.nats) + + for j in range(subSy.nats): + pt_charges[j] = 0.0 + for jj in range(subSy.hindex[j], subSy.hindex[j + 1]): + pt_charges[j] = pt_charges[j] + fullDiag[jj] + + # Compute the Jacobian matrix + for j in range(numberOfCoreAtoms): + val = pt_charges[j] + if i == j: + val -= 1.0 + Jacobian[j, i] = val + + # Matrix inversion using SciPy + # ipiv = lu_factor(Jacobian) + # subSy.ker[:,:] = lu_solve(ipiv, np.eye(numberOfCoreAtoms)) + subSy.ker[:,:] = inv(Jacobian) + # Rescale summation of each column of the sub kernel to -1 for maintaining charge neutrality + subSy.ker = subSy.ker / subSy.ker.sum(axis=0)[None, :] * -1 + + +def Canon_Response_dPdMu(H1, etemp, evals, mu, m): + """ + Compute the canonical quantum perturbation and its derivative with respect to the chemical potential. + + Parameters + ---------- + H1 : 2D numpy array, dtype: float + The Hamiltonian matrix in the ortho-eigen basis. + etemp : float + The electronic temperature in Kelvin. + evals : 1D numpy array, dtype: float + The eigenvalues of the Hamiltonian matrix, H0. + mu : float + Chemical potential for the full system. + m : int + The number of recursion steps. + + Returns + ------- + dPdMu : 1D numpy array, dtype: float + The derivative of the density matrix with respect to the chemical potential. + P1 : 2D numpy array, dtype: float + The canonical quantum perturbation. + """ + kB = 8.61739e-5 # (eV/K) + h_0 = evals # Diagonal Hamiltonian H0 respresented in the eigenbasis Q + beta = 1.0 / (kB * etemp) + cnst = beta / (1.0 * 2**(m+2)) # Scaling constant + p_0 = 0.5 - cnst * (h_0 - mu) + P1 = -cnst * H1 + # Loop over m recursion steps + for i in range(m): + # Compute denominators for broadcasting + denom_j = 2.0 * p_0 * (p_0 - 1.0) + 1.0 # shape (HDIM,) + denom_k = 2.0 * p_0 * (p_0 - 1.0) + 1.0 # shape (HDIM,) + + # Broadcast p_0 vectors to 2D + p0_j = p_0[:, np.newaxis] # shape (HDIM, 1) + p0_k = p_0[np.newaxis, :] # shape (1, HDIM) + + denom_j_2D = denom_j[:, np.newaxis] # shape (HDIM, 1) + denom_k_2D = denom_k[np.newaxis, :] # shape (1, HDIM) + + # Compute updated P1 + factor = 1.0 / denom_j_2D # shape (HDIM, 1) + correction = 2.0 * (P1 - (p0_j + p0_k) * P1) * (1.0 / denom_k_2D) * (p0_k ** 2) + P1 = factor * ((p0_j + p0_k) * P1 + correction) + + # Update p_0 + p_0 = (1.0 / (2.0 * (p_0 * p_0 - p_0) + 1.0)) * (p_0 * p_0) + + dPdMu = beta * p_0 * (1.0 - p_0) + + return dPdMu, P1 + + +def apply_kernel_byParts(q_n, n, sdc, rank, numranks, comm, parts, sy): + """ + Apply the kernel preconditioner to the residuals between q[n] and n for each subsystem. + + Parameters + ---------- + q_n : 1D numpy array, dtype: float + The charge vector q[n] for the full system. + n : 1D numpy array, dtype: float + The charge vector n for the full system. + sdc : sedacs driver object + Refer to driver/init.py for detailed information. + rank: int + Rank of the current process in the MPI communicator. + numranks: int + Total number of processes in the MPI communicator. + comm: MPI communicator + The MPI communicator object. + parts: list of lists of int + List of partitions of the full system. + sy: System object + Refer to system.py for detailed information. + + Returns + ------- + KK0Res : 1D numpy array, dtype: float + The kernel preconditioner applied to the residuals between q[n] and n for each subsystem. + """ + # Get the partition indices for the current MPI rank + partsPerRank = int(sdc.nparts / numranks) + partIndex1 = rank * partsPerRank + partIndex2 = (rank + 1) * partsPerRank + # Initialize KK0ResOnRank as None + KK0ResOnRank = None + # Loop over all partitions in the current MPI rank + for partIndex in range(partIndex1, partIndex2): + # Get the number of atoms in the core region for the current part + numberOfCoreAtoms = len(parts[partIndex]) + # Get the subsystem for the current part + subSy = sy.subSy_list[partIndex - partIndex1] + # Retrieve q[n] and n charge vectors for current part + n_InPart = n[parts[partIndex]] + q_n_InPart = q_n[parts[partIndex]] + # Initialize KK0ResInPart as a zero vector + KK0ResInPart = np.zeros(numberOfCoreAtoms) + # Compute the kernel preconditioner applied to the residuals and store it in KK0ResInPart + KK0ResInPart[0:numberOfCoreAtoms] = np.dot(subSy.ker, (q_n_InPart - n_InPart)) + # Expand KK0ResInPart into KK0ResOnRank + KK0ResOnRank = collect_charges( + KK0ResOnRank, KK0ResInPart, parts[partIndex], sy.nats, verb=True + ) + # If MPI is available and there are multiple ranks, collect and sum the KK0ResOnRank vector + if is_mpi_available and numranks > 1: + KK0Res = collect_and_sum_vectors_float(KK0ResOnRank, rank, numranks, comm) + comm.Barrier() + else: + KK0Res = KK0ResOnRank + + return KK0Res + + + +def rankN_update_byParts( + q_n, n, maxRanks, sdc, rank, numranks, comm, parts, partsCoreHalo, sy, mu=0.0 +): + """ + Perform the rank-N update for the kernel preconditioner and apply it to the residuals. + + Parameters + ---------- + q_n : 1D numpy array, dtype: float + The charge vector q[n] for the full system. + n : 1D numpy array, dtype: float + The charge vector n for the full system. + maxRanks : int + The maximum number of rank updates. + sdc : sedacs driver object + Refer to driver/init.py for detailed information. + rank: int + Rank of the current process in the MPI communicator. + numranks: int + Total number of processes in the MPI communicator. + comm: MPI communicator + The MPI communicator object. + parts: list of lists of int + List of partitions of the full system. + partsCoreHalo: list of lists of int + List of core and halo indices for each partition. + sy: System object + Refer to system.py for detailed information. + mu: float + Chemical potential for the full system. Default is 0.0. + + Returns + ------- + KK0Res : 1D numpy array, dtype: float + The kernel preconditioner applied to the preconditioned residuals between q[n] and n for each subsystem. + """ + # Get the partition indices for the current MPI rank + partsPerRank = int(sdc.nparts / numranks) + partIndex1 = rank * partsPerRank + partIndex2 = (rank + 1) * partsPerRank + # Initialize the preconditioned residual vector K0ResOnRank as None + K0ResOnRank = np.zeros(sy.nats) + # Get the maximum number of atoms in the core region among all parts in the present MPI rank + maxCoresAmongParts = np.zeros(numranks, dtype=int) + for partIndex in range(partIndex1, partIndex2): + numberOfCoreAtoms = len(parts[partIndex]) + maxCoresAmongParts[rank] = max(maxCoresAmongParts[rank], numberOfCoreAtoms) + # Initialize K0ResPart to store the preconditioned residuals for each part + K0ResPart = np.zeros((maxCoresAmongParts[rank], partsPerRank)) + # Loop over all partitions in the current MPI rank + for partIndex in range(partIndex1, partIndex2): + # Get the number of atoms in the core region for the current part + numberOfCoreAtoms = len(parts[partIndex]) + # Get the subsystem for the current part + subSy = sy.subSy_list[partIndex - partIndex1] + # Get the number of atoms in the core+halo region for the current part + norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + # Get the number of orbitals in the core region + tmpArray = np.zeros(numberOfCoreAtoms) + tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + norbsInCore = int(np.sum(tmpArray)) + print("Number of orbitals in the core =", norbsInCore) + # Retrieve q[n] and n charge vectors for current part + q_nInPart = q_n[parts[partIndex]] + nInPart = n[parts[partIndex]] + # Calculate K0Res which is the product of the Preconditioner K with the residue q(n) - n + K0ResPart[0:numberOfCoreAtoms, partIndex - partIndex1] = np.matmul(subSy.ker, (q_nInPart - nInPart)) + # Expand K0resPart into K0Res + K0ResOnRank[parts[partIndex]] = K0ResPart[0:numberOfCoreAtoms, partIndex - partIndex1] + # If MPI is available and there are multiple ranks, collect and sum the K0ResOnRank vector + if is_mpi_available and numranks > 1: + K0Res = collect_and_sum_vectors_float(K0ResOnRank, rank, numranks, comm) + maxCoresAmongPartsAndRanks = collect_and_sum_vectors_int(maxCoresAmongParts, rank, numranks, comm) + comm.Barrier() + else: + K0Res = K0ResOnRank + maxCoresAmongPartsAndRanks = maxCoresAmongParts + + # Get the maximum number of atoms in the core region among all parts in all ranks + maxCoresAmongPartsAndRanks = int(max(maxCoresAmongPartsAndRanks)) + # Initialize directional derivatives (dr) from the preconditioned residuals + dr = np.zeros(sy.nats) + dr[:] = K0Res[:] + # Initial arrays for the rank updates + vi = np.zeros((sy.nats, maxRanks)) + dr_save = np.zeros((sy.nats, maxRanks)) + v_core_i = np.zeros((maxCoresAmongPartsAndRanks, partsPerRank, maxRanks)) + c_i = np.zeros(maxRanks) + ff = np.zeros((maxCoresAmongPartsAndRanks, partsPerRank, maxRanks)) + irank = -1 + # Here we enter the loop for the rank updates (do not confuse with MPI rank) + # for irank in range(maxRanks): + error = 1.0 + mRank = maxRanks + while irank < mRank - 1 and error > 1e-6: + irank = irank + 1 + # Construct Krylov subspace vector from previous directional derivative + vi[:, irank] = dr / np.linalg.norm(dr) + # Gram-Schmidt orthogonalization + if irank > 0: + for kk in range(irank): + vi[:, irank] = vi[:, irank] - np.dot(vi[:, irank], vi[:, kk]) * vi[:, kk] + # Normalize the vector + vi[:, irank] = vi[:, irank] / np.linalg.norm(vi[:, irank]) + + # Get the charge perturbation vector + chargePertVect = vi[:, irank] + # Get the Coulomb potential from charge perturbation vector + # Note that the Hubbard U correction is included in the computed Coulomb potential + coulvs, ewald_e = get_PME_coulvs( + chargePertVect, sy.hubbard_u, sy.coords, sy.types, sy.latticeVectors + ) + # Initialize the core part of the charge response (q1, dqdmu) by the derivative of subsystem + # density matrix with respect to perturbation parameter (lambda) and chemical potential (mu). + q1 = np.zeros((maxCoresAmongPartsAndRanks, partsPerRank)) + dqdmu = np.zeros((maxCoresAmongPartsAndRanks, partsPerRank)) + # Initialize the variables to sum up the partial traces + trP1 = np.zeros(1); trdPdMu = np.zeros(1) + for partIndex in range(partIndex1, partIndex2): + numberofCoreHaloAtoms = len(partsCoreHalo[partIndex]) + numberOfCoreAtoms = len(parts[partIndex]) + subSy = sy.subSy_list[partIndex - partIndex1] + assert numberofCoreHaloAtoms == subSy.nats, "Number of atoms in the core+halo region should be equal to the number of atoms in the subsystem" + norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + # tmpArray = np.zeros(numberOfCoreAtoms) + # tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + # norbsInCore = int(np.sum(tmpArray)) + # print("Number of orbitals in the core =", norbsInCore) + + # Get the Coulomb potential and charges for the Core+Halo part + coulvsInPart = coulvs[partsCoreHalo[partIndex]] + # Extract the perturbation over the core part only + v_core_i[0:numberOfCoreAtoms, partIndex - partIndex1, irank] = vi[parts[partIndex], irank] + + # Build the Hamiltonian from Coulomb potential and charges from charge perturbation + H_dq_v = np.zeros((norbs, norbs)) + + for j in range(subSy.nats): + start = subSy.hindex[j] + end = subSy.hindex[j + 1] + H_dq_v[start:end, start:end] = np.diag(coulvsInPart[j] * np.ones(end - start)) + + H_dq_v = 0.5 * (np.matmul(subSy.over, H_dq_v) + np.matmul(H_dq_v, subSy.over)) + + # H1 = Q'Z'*H_dq_v*ZQ Forward transform + # Compute transformations ZQ and (ZQ)^t transformation that takes from the canonical nonorthogonal + # to the orthogonal eigenbasis. + ZQ = np.matmul(subSy.zmat, subSy.evects) + ZQ_T = ZQ.T + # Take H1 to the ortho-eigen basis set. + X = np.matmul(ZQ_T, H_dq_v) + H1 = np.matmul(X, ZQ) + # Construct the "bare" response P1 and the derivative with respect to the + # chemical potential (dPdMu). Everything in the ortho-eigen basis set + dPdMu, P1 = Canon_Response_dPdMu(H1, sdc.etemp, subSy.evals, mu, 12) + # Transform P1 back to the nonortho-canonical basis set. + X = np.matmul(ZQ, P1) + P1 = np.matmul(X, ZQ_T) + # Convert dPdMu to matrix + dPdMuAO = np.zeros((norbs, norbs)) + dPdMuAO[np.diag_indices_from(dPdMuAO)] = dPdMu + # Transform dPdMu back to the nonortho-canonical basis set + X = np.matmul(ZQ, dPdMuAO) + dPdMuAO = np.matmul(X, ZQ_T) + # Here we compute the charges response (q1) from P1 and we store it on + # a vector q1 that stores all the previous q1s from past iranks iterations + # We also compute the partial trace contribution (trP1) from this mpi + # execution and the current part (partIndex). + P1 = 2 * P1 + ptrho = np.matmul(P1, subSy.over) + fullDiag = np.diag(ptrho) + pt_charges = np.zeros(numberofCoreHaloAtoms) + + for j in range(numberofCoreHaloAtoms): + pt_charges[j] = 0.0 + for jj in range(subSy.hindex[j], subSy.hindex[j + 1]): + pt_charges[j] = pt_charges[j] + fullDiag[jj] + # Collect the charge response from the core region + q1[:numberOfCoreAtoms, partIndex - partIndex1] = pt_charges[:numberOfCoreAtoms] + # Add up the partial trace contribution from the core region + trP1 = trP1 + np.sum(pt_charges[:numberOfCoreAtoms]) + + # Here we compute the charges response (dqdmu) from dPdMu and we store + # them on a matrix dqdmu that stores all the previous dqdmus from past + # irank iterations. + # We also compute the partial trace contribution (trdPdMu) from this node + # and the current part (partIndex). + dPdMuAO = 2 * dPdMuAO + ptrho = np.matmul(dPdMuAO, subSy.over) + fullDiag = np.diag(ptrho) + pt_charges = np.zeros(numberofCoreHaloAtoms) + + for j in range(numberofCoreHaloAtoms): + pt_charges[j] = 0.0 + for jj in range(subSy.hindex[j], subSy.hindex[j + 1]): + pt_charges[j] = pt_charges[j] + fullDiag[jj] + # Collect the charge response from the core region + dqdmu[:numberOfCoreAtoms, partIndex - partIndex1] = pt_charges[:numberOfCoreAtoms] + # Add up the partial trace contribution from the core region + trdPdMu = trdPdMu + np.sum(pt_charges[:numberOfCoreAtoms]) + # If MPI is available and there are multiple ranks, collect and sum the partial traces + if is_mpi_available and numranks > 1: + trP1 = collect_and_sum_vectors_float(trP1, rank, numranks, comm) + trdPdMu = collect_and_sum_vectors_float(trdPdMu, rank, numranks, comm) + comm.Barrier() + # Compute the response to the chemical potential (mu1) and adjust q1 + mu1_Global = - trP1 / trdPdMu if abs(trdPdMu) > 1e-12 else 0.0 + q1 = q1 + mu1_Global * dqdmu + # Initialize f to store directional derivatives of the residual function + f = np.zeros(maxCoresAmongPartsAndRanks) + # Initialize dr to store the preconditioned directional derivatives + dr[:] = 0.0 + c_i_temp = np.zeros(1) + # Loop over all partitions in the current MPI rank + for partIndex in range(partIndex1, partIndex2): + # Get the number of atoms in the core region for the current part + numberOfCoreAtoms = len(parts[partIndex]) + # Get the subsystem object for the current part + subSy = sy.subSy_list[partIndex - partIndex1] + # Get the number of orbitals in the subsystem + # norbs = subSy.norbs # We have as many orbitals as columns in the Hamiltonian + # tmpArray = np.zeros(numberOfCoreAtoms) + # tmpArray[:] = subSy.orbs[subSy.types[0:numberOfCoreAtoms]] + # # # Get the number of orbitals in the core region + # norbsInCore = int(np.sum(tmpArray)) + # print("Number of orbitals in the core =", norbsInCore) + assert numberOfCoreAtoms == subSy.ker.shape[0], "Number of atoms in the core should be equal to the number of atoms in the kernel" + # Compute the directional derivative of the residual function and store it in f + f[0:numberOfCoreAtoms] = q1[0:numberOfCoreAtoms, partIndex - partIndex1] - v_core_i[0:numberOfCoreAtoms, partIndex - partIndex1, irank] + # Compute the preconditioned directional derivative of the residual function + ff[0:numberOfCoreAtoms, partIndex - partIndex1, irank] = np.matmul(subSy.ker, f[0:numberOfCoreAtoms]) + # Preconiditioned Krylov subspace approximation + # c_i[irank] = c_i[irank] + np.dot(ff[0:numberOfCoreAtoms, partIndex - partIndex1, irank], K0ResPart[0:numberOfCoreAtoms, partIndex - partIndex1]) + c_i_temp = c_i_temp + np.dot(ff[0:numberOfCoreAtoms, partIndex - partIndex1, irank], K0ResPart[0:numberOfCoreAtoms, partIndex - partIndex1]) + # Save the preconditioned directional derivative of the residual function for getting the resolution of identity + dr[parts[partIndex]] = ff[0:numberOfCoreAtoms, partIndex - partIndex1, irank] + # If MPI is available and there are multiple ranks, collect and sum the preconditioned directional derivative + if is_mpi_available and numranks > 1: + dr = collect_and_sum_vectors_float(dr, rank, numranks, comm) + comm.Barrier() + # Save dr for the current rank update + dr_save[:, irank] = dr + + maxRanks = irank + 1 + # If MPI is available and there are multiple ranks, collect and sum the preconditioned Krylov subspace approximation + if is_mpi_available and numranks > 1: + # c_i = collect_and_sum_vectors_float(c_i, rank, numranks, comm) + c_i_temp = collect_and_sum_vectors_float(c_i_temp, rank, numranks, comm) + comm.Barrier() + c_i[irank] = c_i_temp + # Compute elements of the overlap matrix + auxVect = np.zeros(maxRanks * maxRanks) + for i in range(maxRanks): + for j in range(maxRanks): + for k in range(partsPerRank): + auxVect[i * maxRanks + j] = auxVect[i * maxRanks + j] + np.dot(ff[:, k, i], ff[:, k, j]) + # auxVect[:] = np.einsum('api,apj->ij', ff, ff).reshape(-1) # This is the vectorized version for the code above + # If MPI is available and there are multiple ranks, collect and sum the elements of the overlap matrix + if is_mpi_available and numranks > 1: + auxVect = collect_and_sum_vectors_float(auxVect, rank, numranks, comm) + comm.Barrier() + # Reshape the auxVect to get the overlap matrix + oij = np.zeros((maxRanks, maxRanks)) + mMat = np.zeros((maxRanks, maxRanks)) + # for i in range(maxRanks): + # for j in range(maxRanks): + # oij[i, j] = auxVect[i * maxRanks + j] + oij[:, :] = auxVect.reshape((maxRanks, maxRanks)) # This is the vectorized version for the code above + # Compute the inverse of the overlap matrix + mMat[:,:] = inv(oij) + # Compute the resolution of identity + KK0Res = np.zeros(sy.nats) + IdK0Res = np.zeros(sy.nats) + for i in range(maxRanks): + for j in range(maxRanks): + KK0Res = KK0Res + vi[:, i] * mMat[i, j] * c_i[j] + IdK0Res = IdK0Res + dr_save[:, i] * mMat[i, j] * c_i[j] + # The following is the vectorized version for the code above + # KK0Res[:] = np.einsum('ni,ij,j->n', vi, mMat, c_i) + # IdK0Res[:] = np.einsum('ni,ij,j->n', dr_save, mMat, c_i) + + error = np.linalg.norm(K0Res - IdK0Res) / np.linalg.norm(K0Res) + if rank == 0: + print("Error Rank-Update", error, irank, "\n") + # print("Error Rank-Update", error, maxRanks, "\n") + + + return KK0Res + + + + diff --git a/src/sedacs/driver/init.py b/src/sedacs/driver/init.py index fe9b8528..0bd4aba8 100644 --- a/src/sedacs/driver/init.py +++ b/src/sedacs/driver/init.py @@ -117,6 +117,7 @@ def init(args): sy.latticeVectors, sy.symbols, sy.types, sy.coords = read_coords_file(sdc.coordsFileName, lib="None", verb=True) sy.nats = len(sy.coords[:, 0]) sy.vels = np.zeros((sy.nats, 3)) + sy.hubbard_u = np.zeros(sy.nats) sy.charges = np.zeros(sy.nats) # Get hindex (the orbital index for each atom in the system) @@ -208,8 +209,9 @@ def init(args): fullGraph = np.zeros((sy.nats, sdc.maxDeg + 1), dtype=int) fullGraph[:, :] = graphNL[:, :] - #Initialize proxy/guest code -# init_proxy(sy.symbols,sy.orbs) + if "Proxy" in eng.name: + #Initialize proxy/guest code + init_proxy(sy.symbols,sy.orbs) eng.up = True return sdc, eng, comm, rank, numranks, sy, hindex, fullGraph, nl, nlTrX, nlTrY, nlTrZ diff --git a/src/sedacs/graph.py b/src/sedacs/graph.py index 1416c1e6..b0973e51 100644 --- a/src/sedacs/graph.py +++ b/src/sedacs/graph.py @@ -81,7 +81,7 @@ def print_graph(graph): nodesList = [] for k in range(1, graph[i, 0] + 1): if graph[i, k] != -1: - nodesList.append(graph[i, k]) + nodesList.append(int(graph[i, k])) print(i, "(", graph[i, 0], ")", "-", nodesList) @@ -302,7 +302,8 @@ def collect_graph_from_rho(graph, rho, thresh, nnodes, maxDeg, indicesCoreHalos, for j in range(nch): jj = indicesCoreHalos[j] for oj in range(hindex[jj], hindex[jj + 1]): - weights[jj] = weights[jj] + abs(rho[ki, kj]) + if abs(rho[ki, kj]) >= thresh: # Elementwise truncation test Anders + weights[jj] = weights[jj] + abs(rho[ki, kj]) kj = kj + 1 ki = ki + 1 @@ -409,29 +410,38 @@ def add_mult_graphs(graphs): # @param graphA Initial adjacency # @param graphB Initial adjacency # @return graphC Multiplication result -def multiply_graphs(): +def multiply_graphs(graphA, graphB): if len(graphA[:, 0]) != len(graphB[:, 0]): print("!!!ERROR: Graphs have different number of nodes") else: nnodes = len(graphA[:, 0]) maxDeg = len(graphA[0, :]) + vectC = np.zeros((nnodes), dtype=bool) + graphC = np.zeros((nnodes, maxDeg), dtype=int) for i in range(nnodes): - myVect[:] = False - for j in range(1, graphA[i, 0]): + vectC[:] = False + for j in range(1, graphB[i, 0] + 1): + myK = graphB[i, j] + vectC[myK] = True + for j in range(1, graphA[i, 0] + 1): myK = graphA[i, j] # All neighbors of i by A - for k in range(1, graphB[myK, 0]): + vectC[myK] = True + for k in range(1, graphB[myK, 0] + 1): myJ = graphB[myK, k] # All neighbors of myK by B if i != myJ: + # print(i, myJ) vectC[myJ] = True k = 0 - for j in range(1, nnodes): + for j in range(nnodes): if vectC[j]: k = k + 1 graphC[i, k] = j graphC[i, 0] = k + return graphC + # Get a small graph (>-<) # @brief This will construct a small graph for testing purposes. @@ -616,4 +626,13 @@ def convert_to_adjacency_matrix(graph, graphType='sedacs'): return adj +def convert_to_graph(adj, maxDeg): + nNodes = adj.shape[0] + graph = np.zeros((nNodes, maxDeg), dtype = int) + for i in range(nNodes): + connections = adj[i,:].nonzero()[0] + graph[i,1:1+len(connections)] = connections[0:len(connections)] + graph[i,0] = len(connections) + + return graph diff --git a/src/sedacs/interface_modules.py b/src/sedacs/interface_modules.py index f8c4d138..2dd051dc 100644 --- a/src/sedacs/interface_modules.py +++ b/src/sedacs/interface_modules.py @@ -37,13 +37,13 @@ try: from proxies.python.hamiltonian import get_hamiltonian_proxy from proxies.python.density_matrix import get_density_matrix_proxy - from proxies.python.evals_dvals import get_evals_dvals_proxy + #from proxies.python.evals_dvals import get_evals_dvals_proxy from proxies.python.init_proxy import init_proxy_proxy from proxies.python.hamiltonian import build_coul_ham_proxy except Exception as e: pythlib = None - #raise e + raise e __all__ = [ @@ -174,6 +174,8 @@ def get_hamiltonian_module( The non-SCF Hamiltonian matrix. overlap: 2D numpy array, dtype: float, optional The overlap matrix, if requested. + zmat: 2D numpy array, dtype: float, optional + The congruence transform comes with overlap matrix, if requested. """ if eng.name == "ProxyAPython": if get_overlap: @@ -184,6 +186,7 @@ def get_hamiltonian_module( hamiltonian = get_hamiltonian_proxy( coords, types, symbols, get_overlap=get_overlap, verb=verb ) + zmat = None elif eng.name == "ProxyAFortran": nats = len(coords[:, 0]) @@ -257,6 +260,8 @@ def get_hamiltonian_module( forcesFlat_out = np.zeros(3 * nats) # Vectorized forces hamFlat_out = np.zeros(norbs * norbs) # Vectorized hamiltonian overFlat_out = np.zeros(norbs * norbs) # Vectorized overlap + zmatFlat_out = np.zeros(norbs * norbs) # Vectorized congruence transform + evectsFlat_out = np.zeros(norbs * norbs) # Vectorized eigenvectors dmFlat_out = np.zeros(norbs * norbs) # Vectorized density matrix evalsFlat_out = np.zeros(norbs) # We call this one Flat just for consistency dvalsFlat_out = np.zeros(norbs) # Same here @@ -296,6 +301,8 @@ def get_hamiltonian_module( # Getting pointers to the output arrays ham_ptr = hamFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) over_ptr = overFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + zmat_ptr = zmatFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + evects_ptr = evectsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) dm_ptr = dmFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) charges_ptr = chargesFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) evals_ptr = evalsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) @@ -321,6 +328,8 @@ def get_hamiltonian_module( atomicNumbers_ptr, ham_ptr, over_ptr, + zmat_ptr, + evects_ptr, dm_ptr, charges_ptr, evals_ptr, @@ -335,16 +344,18 @@ def get_hamiltonian_module( # Initializing 2D numpy arrays for the hamiltonian and overlap matrices hamiltonian = np.zeros((norbs, norbs)) overlap = np.zeros((norbs, norbs)) + zmat = np.zeros((norbs, norbs)) # Filling the hamiltonian and overlap matrices with the flattened output arrays from the Fortran function for i in range(norbs): hamiltonian[:, i] = hamFlat_out[norbs * i : norbs + norbs * i] overlap[:, i] = overFlat_out[norbs * i : norbs + norbs * i] + zmat[:, i] = zmatFlat_out[norbs * i : norbs + norbs * i] else: error_at("get_hamiltonian_module", "No specific engine type defined") if get_overlap: - return hamiltonian, overlap + return hamiltonian, overlap, zmat else: return hamiltonian @@ -407,6 +418,8 @@ def get_evals_dvals_modules( Returns ------- + evects: 2D numpy array, dtype: float + The eigenvectors of the input hamiltonian matrix. evals: 1D numpy array, dtype: float The eigenvalues of the input hamiltonian matrix, if requested. dvals: 1D numpy array, dtype: float @@ -459,6 +472,8 @@ def get_evals_dvals_modules( forcesFlat_out = np.zeros(3 * nats) # Vectorized forces hamFlat_out = np.zeros(norbs * norbs) # Vectorized hamiltonian overFlat_out = np.zeros(norbs * norbs) # Vectorized overlap + zmatFlat_out = np.zeros(norbs * norbs) # Vectorized congruence transform + evectsFlat_out = np.zeros(norbs * norbs) # Vectorized eigenvectors dmFlat_out = np.zeros(norbs * norbs) # Vectorized density matrix evalsFlat_out = np.zeros(norbs) # We call this one Flat just for consistency dvalsFlat_out = np.zeros(norbs) # Same here @@ -496,6 +511,8 @@ def get_evals_dvals_modules( # Getting pointers to the output arrays ham_ptr = hamFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) over_ptr = overFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + zmat_ptr = zmatFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + evects_ptr = evectsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) dm_ptr = dmFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) charges_ptr = chargesFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) evals_ptr = evalsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) @@ -522,6 +539,8 @@ def get_evals_dvals_modules( atomicNumbers_ptr, ham_ptr, over_ptr, + zmat_ptr, + evects_ptr, dm_ptr, charges_ptr, evals_ptr, @@ -539,8 +558,14 @@ def get_evals_dvals_modules( # Filling the eigenvalues and dvals arrays with the output arrays from the Fortran function evals[:] = evalsFlat_out[:] dvals[:] = dvalsFlat_out[:] + # Initializing 2D numpy arrays for the eigenvectors + evects = np.zeros((norbs, norbs)) + # Filling the hamiltonian and overlap matrices with the flattened output arrays from the Fortran function + for i in range(norbs): + evects[:, i] = evectsFlat_out[norbs * i : norbs + norbs * i] + - return evals, dvals + return evects, evals, dvals def get_density_matrix_modules( @@ -705,6 +730,8 @@ def get_density_matrix_modules( forcesFlat_out = np.zeros(3 * nats) # Vectorized forces hamFlat_out = np.zeros(norbs * norbs) # Vectorized hamiltonian overFlat_out = np.zeros(norbs * norbs) # Vectorized overlap + zmatFlat_out = np.zeros(norbs * norbs) # Vectorized congruence transform + evectsFlat_out = np.zeros(norbs * norbs) # Vectorized eigenvectors dmFlat_out = np.zeros(norbs * norbs) # Vectorized density matrix evalsFlat_out = np.zeros(norbs) # We call this one Flat just for consistency dvalsFlat_out = np.zeros(norbs) # Same here @@ -742,6 +769,8 @@ def get_density_matrix_modules( # Getting pointers to the output arrays ham_ptr = hamFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) over_ptr = overFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + zmat_ptr = zmatFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + evects_ptr = evectsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) dm_ptr = dmFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) charges_ptr = chargesFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) evals_ptr = evalsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) @@ -768,6 +797,8 @@ def get_density_matrix_modules( atomicNumbers_ptr, ham_ptr, over_ptr, + zmat_ptr, + evects_ptr, dm_ptr, charges_ptr, evals_ptr, @@ -931,6 +962,8 @@ def get_energy_forces_modules( forcesFlat_out = np.zeros(3 * nats) # Vectorized forces hamFlat_out = np.zeros(norbs * norbs) # Vectorized hamiltonian overFlat_out = np.zeros(norbs * norbs) # Vectorized overlap + zmatFlat_out = np.zeros(norbs * norbs) # Vectorized congruence transform + evectsFlat_out = np.zeros(norbs * norbs) # Vectorized eigenvectors dmFlat_out = np.zeros(norbs * norbs) # Vectorized density matrix evalsFlat_out = np.zeros(norbs) # We call this one Flat just for consistency dvalsFlat_out = np.zeros(norbs) # Same here @@ -968,6 +1001,8 @@ def get_energy_forces_modules( # Getting pointers to the output arrays ham_ptr = hamFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) over_ptr = overFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + zmat_ptr = zmatFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) + evects_ptr = evectsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) dm_ptr = dmFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) charges_ptr = chargesFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) evals_ptr = evalsFlat_out.ctypes.data_as(ctypes.POINTER(ctypes.c_double)) @@ -994,6 +1029,8 @@ def get_energy_forces_modules( atomicNumbers_ptr, ham_ptr, over_ptr, + zmat_ptr, + evects_ptr, dm_ptr, charges_ptr, evals_ptr, diff --git a/src/sedacs/mixer.py b/src/sedacs/mixer.py index d019f075..d6e1a524 100644 --- a/src/sedacs/mixer.py +++ b/src/sedacs/mixer.py @@ -172,7 +172,7 @@ def diis_mix(charges: ArrayLike, chargesAux = (1.0 - mixCoeff)*chargesNewIn + mixCoeff*chargesNewOut - scfError = np.linalg.norm(charges -chargesOld) + scfError = np.linalg.norm(charges - chargesOld) / np.sqrt(len(charges)) if(verb): print("SCF error =", scfError) @@ -219,7 +219,7 @@ def linear_mix(mixCoeff: float, charges = mixCoeff*charges + (1-mixCoeff)*chargesOld # Compute the SCF error. - scfError = np.linalg.norm(charges -chargesOld) + scfError = np.linalg.norm(charges -chargesOld) / np.sqrt(len(charges)) # Update the old charges. chargesOld = charges diff --git a/src/sedacs/mpi.py b/src/sedacs/mpi.py index 40138c19..78df0e45 100644 --- a/src/sedacs/mpi.py +++ b/src/sedacs/mpi.py @@ -240,6 +240,43 @@ def collect_and_sum_vectors_float(vectOnRank: ArrayLike, return fullVect +def collect_and_sum_vectors_int(vectOnRank: ArrayLike, + rank: int, + numranks: int, + comm: MPI.Comm) -> ArrayLike: + """ + Collect and sum vectors from all ranks. + + Parameters + ---------- + vectOnRank : ArrayLike + The vector to be collected and summed. + rank : int + The current rank number. + numranks : int + The number of execution ranks. + comm : MPI.Comm + The MPI communicator. + + Returns + ------- + fullVect : ArrayLike + The full vector. + """ + + if not mpiLib: + + raise ImportError("ERROR: Consider installing mpi4py") + + nDim = len(vectOnRank) + + fullVect = np.zeros(nDim, dtype=int) + + comm.Allreduce(vectOnRank,fullVect,op=MPI.SUM) + + return fullVect + + def collect_and_concatenate_vectors(vectOnRank, comm) -> ArrayLike: """ Collect and concatenate vectors from all ranks. diff --git a/src/sedacs/sdc_evals_dvals.py b/src/sedacs/sdc_evals_dvals.py index 4e7f5613..879cccce 100644 --- a/src/sedacs/sdc_evals_dvals.py +++ b/src/sedacs/sdc_evals_dvals.py @@ -78,7 +78,7 @@ def get_evals_dvals( # Tight interface using modules or an external code compiled as a library elif eng.interface == "Module": # We will call proxyA directly as it will be loaded as a module. - evals, dvals = get_evals_dvals_modules( + evects, evals, dvals = get_evals_dvals_modules( eng, partIndex, nparts, @@ -99,4 +99,4 @@ def get_evals_dvals( "ERROR!!!: Interface type not recognized. Use any of the following: Module,File,Socket,MDI" ) - return evals, dvals + return evects, evals, dvals diff --git a/src/sedacs/sdc_hamiltonian.py b/src/sedacs/sdc_hamiltonian.py index a707a7de..25217739 100644 --- a/src/sedacs/sdc_hamiltonian.py +++ b/src/sedacs/sdc_hamiltonian.py @@ -70,7 +70,7 @@ def get_hamiltonian( elif eng.interface == "Module": # We will call proxyA directly as it will be loaded as a module. if get_overlap: - ham, overlap = get_hamiltonian_module( + ham, overlap, zmat = get_hamiltonian_module( eng, partIndex, nparts, @@ -84,7 +84,7 @@ def get_hamiltonian( newsystem=newsystem, keepmem=keepmem, ) - return ham, overlap + return ham, overlap, zmat else: return get_hamiltonian_module( eng, diff --git a/src/sedacs/system.py b/src/sedacs/system.py index 822f4c76..cfa16049 100644 --- a/src/sedacs/system.py +++ b/src/sedacs/system.py @@ -121,6 +121,8 @@ def __init__(self, nats=1): self.types = np.zeros(self.nats, dtype=int) ## Coordinates for each atom, e.g., z-coordinate of the frist atom is coords[0,2] self.coords = np.zeros((self.nats, 3), dtype=float) + ## Hubbard U for each atom + self.hubbard_u = np.zeros((self.nats), dtype=float) ## Charged (orbital base population) for each atom self.charges = np.zeros((self.nats), dtype=float) ## Coordinates for each atom, e.g., z-coordinate of the frist atom is coords[0,2] @@ -144,6 +146,20 @@ def __init__(self, nats=1): self.resNames = None ## Residue/molecule id self.resIds = None + ## List of subsystems + self.subSy_list = None + ## Kernel preconditioner + self.ker = None + ## Hamiltonian matrix + self.ham = None + ## Overlap matrix + self.over = None + ## Congruence transformation + self.zmat = None + ## Eigenvectors matrix + self.evects = None + ## Eigenvalues + self.evals = None def extract_types_and_symbols(self,symbols_list_for_all_atoms): """