RAU_MasterStudy/thesis/old/freezing.py
2025-06-04 20:04:29 +03:00

70 lines
1.9 KiB
Python

from openmm.app import *
from openmm import *
from openmm import unit
from openmm.unit import (
picosecond,
second,
nanometer,
kelvin,
millisecond,
angstrom,
atmosphere,
femtosecond,
)
from sys import stdout
import time
# Specifiy the forcefield
forcefield = ForceField("amber14/tip4pew.xml")
modeller = Modeller(Topology(), [])
modeller.addExtraParticles(forcefield)
modeller.addSolvent(
forcefield, model="tip4pew", boxSize=Vec3(3.0, 3.0, 3.0) * nanometer
)
# Combine the molecular topology and the forcefield
system = forcefield.createSystem(
modeller.topology, nonbondedMethod=PME, constraints=HBonds
)
system.addForce(MonteCarloBarostat(10 * atmosphere, 300 * kelvin, 25))
time_step = 2 * femtosecond
total_time = 2 * unit.nanosecond
steps = int(total_time / time_step)
# The parameters set are temperature, friction coefficient, and timestep.
integrator = LangevinMiddleIntegrator(250 * kelvin, 1 / picosecond, time_step)
# integrator.setTemperature(250*kelvin)
platform = Platform.getPlatform("CUDA")
simulation = Simulation(modeller.topology, system, integrator, platform)
simulation.context.setPositions(modeller.positions)
# Perform local energy minimization
# print("Current energy Minimizing energy...")
# simulation.minimizeEnergy(maxIterations=100)
# print("Energy minimized!")
# Write the trajectory to a file called "output.pdb"
simulation.reporters.append(PDBReporter("output.pdb", steps // 100))
# Report infomation to the screen as the simulation runs
simulation.reporters.append(
StateDataReporter(
stdout,
steps // 100,
step=True,
potentialEnergy=True,
temperature=True,
density=True,
progress=True,
totalSteps=steps,
)
)
start_time = time.time()
print(f"Starting simulation, {steps} steps")
simulation.step(steps)
print(f"Simulation finished in {time.time() - start_time} seconds")