scale displacement
This commit is contained in:
80
src/main.rs
80
src/main.rs
@@ -13,6 +13,9 @@ const LJ_SIG : f64 = 1.0;
|
|||||||
const TAILCORR : bool = true;
|
const TAILCORR : bool = true;
|
||||||
const SHIFT: bool = false;
|
const SHIFT: bool = false;
|
||||||
|
|
||||||
|
const TRIES_INTENDED : f64 = 3.0;
|
||||||
|
const DISP_SCALE_FACTOR : f64 = 0.1;
|
||||||
|
|
||||||
// easy printing to stderr
|
// easy printing to stderr
|
||||||
macro_rules! println_stderr(
|
macro_rules! println_stderr(
|
||||||
($($arg:tt)*) => { {
|
($($arg:tt)*) => { {
|
||||||
@@ -32,7 +35,7 @@ fn main() {
|
|||||||
let temperature = 0.9;
|
let temperature = 0.9;
|
||||||
|
|
||||||
let cutoff = 3.0;
|
let cutoff = 3.0;
|
||||||
let displacement = 0.1;
|
let mut displacement = 0.1;
|
||||||
|
|
||||||
|
|
||||||
println_stderr!("");
|
println_stderr!("");
|
||||||
@@ -48,6 +51,7 @@ fn main() {
|
|||||||
let length = volume.cbrt();
|
let length = volume.cbrt();
|
||||||
let (l_x, l_y, l_z) = (length, length, length);
|
let (l_x, l_y, l_z) = (length, length, length);
|
||||||
let cutoff_squared = cutoff * cutoff;
|
let cutoff_squared = cutoff * cutoff;
|
||||||
|
let max_displacement = length / 2.0;
|
||||||
|
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
let particle_range = Range::new(0, num_particles-1);
|
let particle_range = Range::new(0, num_particles-1);
|
||||||
@@ -133,9 +137,18 @@ fn main() {
|
|||||||
energy_sum += energy;
|
energy_sum += energy;
|
||||||
virial_sum += virial;
|
virial_sum += virial;
|
||||||
|
|
||||||
|
// print some output during minimization
|
||||||
|
if step < minim_steps && step_counter % 5000 == 0 && step != 0 {
|
||||||
|
let tries_per_step : f64 = step_counter as f64 /accept_counter as f64;
|
||||||
|
let acceptance_rate = 1.0/tries_per_step * 100.0;
|
||||||
|
println_stderr!("Minim {}\tEnergy: {:.3}\tVirial: {:.3}\tAcceptance:{:.1}%\tDisplacement: {:.3}", step_counter, energy, virial, acceptance_rate, displacement);
|
||||||
|
|
||||||
if step_counter % 5000 == 0 {
|
let mut scale_factor = (TRIES_INTENDED/tries_per_step * DISP_SCALE_FACTOR).abs();
|
||||||
println!("{} {}\tEnergy: {:.3}\tVirial: {:.3}\tAcceptance:{:.1}\tDisplacement: {:.3}", if step < minim_steps {"Minim"} else {"Step"} ,step_counter, energy, virial, 666, displacement);
|
if tries_per_step < TRIES_INTENDED - 0.2 && displacement < max_displacement {
|
||||||
|
displacement += displacement * scale_factor;
|
||||||
|
} else if tries_per_step > TRIES_INTENDED + 0.2 && displacement > 0.0 {
|
||||||
|
displacement -= displacement * scale_factor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset sums for sampling
|
// reset sums for sampling
|
||||||
@@ -151,6 +164,11 @@ fn main() {
|
|||||||
virial_sum = 0.0;
|
virial_sum = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if step > minim_steps && step_counter % 5000 == 0 {
|
||||||
|
println_stderr!("Step {}\tEnergy: {:.3}\tVirial: {:.3}\t", step_counter, energy, virial);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -167,38 +185,35 @@ fn main() {
|
|||||||
println!("################################################################");
|
println!("################################################################");
|
||||||
println!("");
|
println!("");
|
||||||
println!(
|
println!(
|
||||||
"Minimization: {}
|
"Minimization: {}
|
||||||
Steps: {}
|
Steps: {}
|
||||||
|
|
||||||
# Lennard Jones Params
|
# Lennard Jones Params
|
||||||
epsilon: {}
|
epsilon: {}
|
||||||
sigma: {}
|
sigma: {}
|
||||||
cutoff: {}
|
cutoff: {}
|
||||||
|
|
||||||
# System
|
# System
|
||||||
Particles: {}
|
Particles: {}
|
||||||
Density: {}
|
Density: {}
|
||||||
Temperature: {}
|
Temperature: {}
|
||||||
Volume: {}
|
Volume: {}
|
||||||
Box dimension: {:.3}/{:.3}/{:.3}
|
Box dimension: {:.3}/{:.3}/{:.3}
|
||||||
Max Displacement: {}
|
Max Displacement: {}
|
||||||
|
|
||||||
# Correction
|
# Correction
|
||||||
Energy correction: {}
|
Energy correction: {}
|
||||||
Shift: {}
|
Shift: {}
|
||||||
P-Correction: {}
|
P-Correction: {}
|
||||||
|
|
||||||
# Averages
|
|
||||||
Tries: {}
|
|
||||||
Accepted: {}
|
|
||||||
Acceptance: {:.2}%
|
|
||||||
Energy: {}
|
|
||||||
Energy per particle: {}
|
|
||||||
Virial: {}
|
|
||||||
Pressure: {}
|
|
||||||
|
|
||||||
",
|
|
||||||
|
|
||||||
|
# Averages
|
||||||
|
Tries: {}
|
||||||
|
Accepted: {}
|
||||||
|
Acceptance: {:.2}%
|
||||||
|
Energy: {}
|
||||||
|
Energy per particle: {}
|
||||||
|
Virial: {}
|
||||||
|
Pressure: {}",
|
||||||
minim_steps, sample_steps,
|
minim_steps, sample_steps,
|
||||||
LJ_EPS, LJ_SIG, cutoff,
|
LJ_EPS, LJ_SIG, cutoff,
|
||||||
num_particles, density, temperature, volume, l_x, l_y, l_z, displacement,
|
num_particles, density, temperature, volume, l_x, l_y, l_z, displacement,
|
||||||
@@ -207,6 +222,3 @@ fn main() {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user