def verlet_leapfrog_integration(self): # start verlet_leapfrog_integration loop for cycle in range(1, self.n_steps + 1, 1): sites_cart = None if ([self.stop_at_diff, self.states_collector].count(None) != 2): sites_cart = self.xray_structure.sites_cart() if (self.stop_at_diff is not None): dist = flex.mean( flex.sqrt((self.sites_cart_start - sites_cart).dot())) if (dist >= self.stop_at_diff): return accelerations = self.accelerations() print_flag = 0 switch = math.modf(float(cycle) / self.n_print)[0] if ((switch == 0 or cycle == 1 or cycle == self.n_steps) and self.verbose >= 1): print_flag = 1 if (self.states_collector is not None): switch2 = math.modf(float(cycle) / self.n_collect)[0] if (switch2 == 0 or cycle == 1 or cycle == self.n_steps): self.states_collector.add(sites_cart=sites_cart) if (print_flag == 1): text = "integration step number = %5d" % cycle self.center_of_mass_info() kt = dynamics.kinetic_energy_and_temperature( self.vxyz, self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy self.print_dynamics_stat(text) if (self.stop_cm_motion): self.center_of_mass_info() self.stop_global_motion() # calculate velocities at t+dt/2 dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.atomic_weights, accelerations, self.tstep) # calculate the temperature and kinetic energy from new velocities kt = dynamics.kinetic_energy_and_temperature( self.vxyz, self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy self.velocity_rescaling() if (print_flag == 1 and 0): self.center_of_mass_info() self.print_dynamics_stat(text) # do the verlet_leapfrog_integration to get coordinates at t+dt self.xray_structure.set_sites_cart( sites_cart=self.xray_structure.sites_cart() + self.vxyz * self.tstep) self.xray_structure.apply_symmetry_sites() # prevent explosions by doing very quick model geometry regularization if (self.interleaved_minimization and cycle == self.n_steps): self.run_interleaved_minimization() kt = dynamics.kinetic_energy_and_temperature( self.vxyz, self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy if (print_flag == 1 and 0): self.center_of_mass_info() self.print_dynamics_stat(text) self.accelerations()
def verlet_leapfrog_integration(self): # start verlet_leapfrog_integration loop for cycle in range(1,self.n_steps+1,1): sites_cart = None if([self.stop_at_diff,self.states_collector].count(None) != 2): sites_cart = self.xray_structure.sites_cart() if(self.stop_at_diff is not None): dist = flex.mean(flex.sqrt((self.sites_cart_start - sites_cart).dot())) if(dist >= self.stop_at_diff): return accelerations = self.accelerations() print_flag = 0 switch = math.modf(float(cycle)/self.n_print)[0] if((switch==0 or cycle==1 or cycle==self.n_steps) and self.verbose >= 1): print_flag = 1 if(self.states_collector is not None): switch2 = math.modf(float(cycle)/self.n_collect)[0] if(switch2==0 or cycle==1 or cycle==self.n_steps): self.states_collector.add(sites_cart = sites_cart) if(print_flag == 1): text = "integration step number = %5d"%cycle self.center_of_mass_info() kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy self.print_dynamics_stat(text) if(self.stop_cm_motion): self.center_of_mass_info() self.stop_global_motion() # calculate velocities at t+dt/2 dynamics.vxyz_at_t_plus_dt_over_2( self.vxyz, self.atomic_weights, accelerations, self.tstep) # calculate the temperature and kinetic energy from new velocities kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy self.velocity_rescaling() if(print_flag == 1 and 0): self.center_of_mass_info() self.print_dynamics_stat(text) # do the verlet_leapfrog_integration to get coordinates at t+dt self.xray_structure.set_sites_cart( sites_cart=self.xray_structure.sites_cart() + self.vxyz * self.tstep) self.xray_structure.apply_symmetry_sites() # prevent explosions by doing very quick model geometry regularization if(self.interleaved_minimization and cycle==self.n_steps): self.run_interleaved_minimization() kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights) self.current_temperature = kt.temperature self.ekin = kt.kinetic_energy if(print_flag == 1 and 0): self.center_of_mass_info() self.print_dynamics_stat(text) self.accelerations()
def verlet_leapfrog_integration(self): # start verlet_leapfrog_integration loop for self.cycle in range(1, self.n_steps + 1, 1): if (self.stop_at_diff is not None): diff = flex.mean( self.structure_start.distances(other=self.structure)) if (diff >= self.stop_at_diff): return accelerations = self.accelerations() if (self.stop_cm_motion): self.center_of_mass_info() self.stop_global_motion() # calculate velocities at t+dt/2 dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.weights, accelerations, self.tstep) # calculate the temperature and kinetic energy from new velocities self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel) self.non_solvent_weights = self.weights.select( ~self.er_data.solvent_sel) self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel) self.solvent_weights = self.weights.select( self.er_data.solvent_sel) # self.kt = dynamics.kinetic_energy_and_temperature( self.vxyz, self.weights) self.non_solvent_kt = dynamics.kinetic_energy_and_temperature( self.non_solvent_vxyz, self.non_solvent_weights) self.solvent_kt = dynamics.kinetic_energy_and_temperature( self.solvent_vxyz, self.solvent_weights) #Store sys, solvent, nonsolvet temperatures if self.er_data is not None: self.store_temperatures() self.velocity_rescaling() if self.verbose >= 1.0: print('Scale factor : ', self.v_factor, file=self.log) self.vxyz_length_sq = flex.sqrt(self.vxyz.dot()) print('vxyz_length_sq pst scale', file=self.log) self.vxyz_length_sq.min_max_mean().show(out=self.log) # do the verlet_leapfrog_integration to get coordinates at t+dt self.structure.set_sites_cart( sites_cart=self.structure.sites_cart() + self.vxyz * self.tstep) self.structure.apply_symmetry_sites() if (self.interleaved_minimization_flag): self.interleaved_minimization() self.kt = dynamics.kinetic_energy_and_temperature( self.vxyz, self.weights) if (self.er_data is None): self.accelerations() else: self.er_data.velocities = self.vxyz
def verlet_leapfrog_integration(self): # start verlet_leapfrog_integration loop for self.cycle in range(1, self.n_steps + 1, 1): if self.stop_at_diff is not None: diff = flex.mean(self.structure_start.distances(other=self.structure)) if diff >= self.stop_at_diff: return accelerations = self.accelerations() if self.stop_cm_motion: self.center_of_mass_info() self.stop_global_motion() # calculate velocities at t+dt/2 dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.weights, accelerations, self.tstep) # calculate the temperature and kinetic energy from new velocities self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel) self.non_solvent_weights = self.weights.select(~self.er_data.solvent_sel) self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel) self.solvent_weights = self.weights.select(self.er_data.solvent_sel) # self.kt = dynamics.kinetic_energy_and_temperature(self.vxyz, self.weights) self.non_solvent_kt = dynamics.kinetic_energy_and_temperature( self.non_solvent_vxyz, self.non_solvent_weights ) self.solvent_kt = dynamics.kinetic_energy_and_temperature(self.solvent_vxyz, self.solvent_weights) # Store sys, solvent, nonsolvet temperatures if self.er_data is not None: self.store_temperatures() self.velocity_rescaling() if self.verbose >= 1.0: print >>self.log, "Scale factor : ", self.v_factor self.vxyz_length_sq = flex.sqrt(self.vxyz.dot()) print >>self.log, "vxyz_length_sq pst scale" self.vxyz_length_sq.min_max_mean().show(out=self.log) # do the verlet_leapfrog_integration to get coordinates at t+dt self.structure.set_sites_cart(sites_cart=self.structure.sites_cart() + self.vxyz * self.tstep) self.structure.apply_symmetry_sites() if self.interleaved_minimization_flag: self.interleaved_minimization() self.kt = dynamics.kinetic_energy_and_temperature(self.vxyz, self.weights) if self.er_data is None: self.accelerations() else: self.er_data.velocities = self.vxyz