def test_harmonic_oscillators(): nc_filename = tempfile.mkdtemp() + "/out.nc" T_min = 1.0 * unit.kelvin T_i = [T_min, T_min * 10., T_min * 100.] n_replicas = len(T_i) ho = testsystems.HarmonicOscillator() system = ho.system positions = ho.positions states = [ ThermodynamicState(system=system, temperature=T_i[i]) for i in range(n_replicas) ] coordinates = [positions] * n_replicas mpicomm = dummympi.DummyMPIComm() parameters = {"number_of_iterations":1000} replica_exchange = ReplicaExchange.create(states, coordinates, nc_filename, mpicomm=mpicomm, parameters=parameters) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) u0 = np.array([[ho.reduced_potential_expectation(s0, s1) for s1 in states] for s0 in states]) l0 = np.log(u0) # Compare on log scale because uncertainties are proportional to values l1 = np.log(u.mean(0)) eq(l0, l1, decimal=1)
def test_parallel_tempering(): nc_filename = tempfile.mkdtemp() + "/out.nc" T_min = 1.0 * unit.kelvin T_max = 10.0 * unit.kelvin n_temps = 3 ho = testsystems.HarmonicOscillator() system = ho.system positions = ho.positions coordinates = [positions] * n_temps mpicomm = dummympi.DummyMPIComm() parameters = {"number_of_iterations":1000} replica_exchange = ParallelTempering.create(system, coordinates, nc_filename, T_min=T_min, T_max=T_max, n_temps=n_temps, mpicomm=mpicomm, parameters=parameters) eq(replica_exchange.n_replicas, n_temps) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) states = replica_exchange.thermodynamic_states u0 = np.array([[ho.reduced_potential_expectation(s0, s1) for s1 in states] for s0 in states]) l0 = np.log(u0) # Compare on log scale because uncertainties are proportional to values l1 = np.log(u.mean(0)) eq(l0, l1, decimal=1)
def test_power_oscillators(mpicomm): nc_filename = tempfile.mkdtemp() + "/out.nc" temperature = 1 * unit.kelvin K0 = 100.0 # Units are automatically added by the testsystem K = [K0, K0 * 10., K0 * 1.] powers = [2., 2., 4.] n_replicas = len(K) oscillators = [testsystems.PowerOscillator(b=powers[i]) for i in range(n_replicas)] systems = [ho.system for ho in oscillators] positions = [ho.positions for ho in oscillators] state = ThermodynamicState(system=systems[0], temperature=temperature) parameters = {"number_of_iterations":2000} replica_exchange = hamiltonian_exchange.HamiltonianExchange.create(state, systems, positions, nc_filename, mpicomm=mpicomm, parameters=parameters) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) beta = (state.temperature * kB) ** -1. u0 = np.array([[testsystems.PowerOscillator.reduced_potential(beta, ho2.K, ho2.b, ho.K, ho.b) for ho in oscillators] for ho2 in oscillators]) l = np.log(u.mean(0)) l0 = np.log(u0) eq(l0, l, decimal=1)
def test_power_oscillators(): nc_filename = tempfile.mkdtemp() + "/out.nc" temperature = 1 * unit.kelvin powers = [2., 2., 4.] n_replicas = len(powers) oscillators = [testsystems.PowerOscillator(b=powers[i]) for i in range(n_replicas)] systems = [ho.system for ho in oscillators] positions = [ho.positions for ho in oscillators] state = ThermodynamicState(system=systems[0], temperature=temperature) mpicomm = dummympi.DummyMPIComm() parameters = {"number_of_iterations":2000} replica_exchange = hamiltonian_exchange.HamiltonianExchange.create(state, systems, positions, nc_filename, mpicomm=mpicomm, parameters=parameters) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) beta = (state.temperature * kB) ** -1. u0 = np.array([[testsystems.PowerOscillator.reduced_potential(beta, ho2.K, ho2.b, ho.K, ho.b) for ho in oscillators] for ho2 in oscillators]) l = np.log(u.mean(0)) l0 = np.log(u0) eq(l0, l, decimal=1)
def test_parallel_tempering(): nc_filename = tempfile.mkdtemp() + "/out.nc" T_min = 1.0 * unit.kelvin T_max = 10.0 * unit.kelvin n_temps = 3 ho = testsystems.HarmonicOscillator() system = ho.system positions = ho.positions coordinates = [positions] * n_temps mpicomm = dummympi.DummyMPIComm() parameters = {"number_of_iterations": 1000} replica_exchange = ParallelTempering.create(system, coordinates, nc_filename, T_min=T_min, T_max=T_max, n_temps=n_temps, mpicomm=mpicomm, parameters=parameters) eq(replica_exchange.n_replicas, n_temps) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) states = replica_exchange.thermodynamic_states u0 = np.array([[ho.reduced_potential_expectation(s0, s1) for s1 in states] for s0 in states]) l0 = np.log( u0 ) # Compare on log scale because uncertainties are proportional to values l1 = np.log(u.mean(0)) eq(l0, l1, decimal=1)
def test_harmonic_oscillators(): nc_filename = tempfile.mkdtemp() + "/out.nc" T_min = 1.0 * unit.kelvin T_i = [T_min, T_min * 10., T_min * 100.] n_replicas = len(T_i) ho = testsystems.HarmonicOscillator() system = ho.system positions = ho.positions states = [ ThermodynamicState(system=system, temperature=T_i[i]) for i in range(n_replicas) ] coordinates = [positions] * n_replicas mpicomm = dummympi.DummyMPIComm() parameters = {"number_of_iterations": 1000} replica_exchange = ReplicaExchange.create(states, coordinates, nc_filename, mpicomm=mpicomm, parameters=parameters) replica_exchange.run() u_permuted = replica_exchange.database.ncfile.variables["energies"][:] s = replica_exchange.database.ncfile.variables["states"][:] u = permute_energies(u_permuted, s) u0 = np.array([[ho.reduced_potential_expectation(s0, s1) for s1 in states] for s0 in states]) l0 = np.log( u0 ) # Compare on log scale because uncertainties are proportional to values l1 = np.log(u.mean(0)) eq(l0, l1, decimal=1)