Skip to content

Commit 0fdd8de

Browse files
author
mlund
committed
Add degeneracy
1 parent 6f6e2e9 commit 0fdd8de

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

scripts/cppm.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ RUST_LOG="Debug" cargo run --release -- \
99
-2 cppm-p18.xyz \
1010
--rmin 40.0 --rmax 150 --dr 1.0 \
1111
--top topology.yaml \
12-
--resolution 0.5 \
12+
--resolution 0.8 \
1313
--cutoff 1000 \
1414
--molarity 0.005 \
1515
#--savetable table.dat.gz \

src/icoscan.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,10 @@ pub fn do_icoscan(
171171
let calc_partition_func = |r: f64, omega: f64| {
172172
table.get_icospheres(r, omega).unwrap().flat_iter().fold(
173173
Sample::default(),
174-
|sum, (_, _, data_b)| {
174+
|sum, (vertex_i, vertex_j, data_b)| {
175+
let degeneracy = vertex_i.norm() * vertex_j.norm();
175176
let energy = data_b.get().unwrap();
176-
sum + Sample::new(*energy, *temperature)
177+
sum + Sample::new(*energy, *temperature, degeneracy)
177178
},
178179
)
179180
};

src/sample.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,33 @@ pub struct Sample {
2323
n: u64,
2424
/// Thermal energy, RT in kJ/mol
2525
thermal_energy: f64,
26-
/// Boltzmann weighted energy, U * exp(-U/kT)
26+
/// Boltzmann weighted energy, U * g x exp(-U/kT)
2727
mean_energy: f64,
28-
/// Boltzmann weighted squared energy, U^2 * exp(-U/kT)
28+
/// Boltzmann weighted squared energy, U^2 * g x exp(-U/kT)
2929
mean_squared_energy: f64,
30-
/// Boltzmann factored energy, exp(-U/kT)
30+
/// Boltzmann factored energy, g x exp(-U/kT)
3131
exp_energy: f64,
32-
/// Boltzmann factored energy minus one, exp(-U/kT) - 1
32+
/// Boltzmann factored energy minus one, g x exp(-U/kT) - 1
3333
exp_energy_m1: f64,
34+
/// Degeneracy of the state, g
35+
degeneracy: f64,
3436
}
3537

3638
impl Sample {
3739
/// New from energy in kJ/mol and temperature in K
38-
pub fn new(energy: f64, temperature: f64) -> Self {
40+
pub fn new(energy: f64, temperature: f64, degeneracy: f64) -> Self {
3941
const KJ_PER_J: f64 = 1e-3;
4042
let thermal_energy = MOLAR_GAS_CONSTANT * temperature * KJ_PER_J; // kJ/mol
41-
let exp_energy = (-energy / thermal_energy).exp();
42-
let exp_energy_m1 = (-energy / thermal_energy).exp_m1();
43+
let exp_energy = degeneracy * (-energy / thermal_energy).exp();
44+
let exp_energy_m1 = degeneracy * (-energy / thermal_energy).exp_m1();
4345
Self {
4446
n: 1,
4547
thermal_energy,
4648
mean_energy: energy * exp_energy,
4749
mean_squared_energy: energy.powi(2) * exp_energy,
4850
exp_energy,
4951
exp_energy_m1,
52+
degeneracy,
5053
}
5154
}
5255
/// Thermal energy (kJ/mol)
@@ -67,11 +70,11 @@ impl Sample {
6770
}
6871
/// Free energy (kJ / mol)
6972
pub fn free_energy(&self) -> f64 {
70-
(self.exp_energy / self.n as f64).ln().neg() * self.thermal_energy
73+
(self.exp_energy / self.degeneracy as f64).ln().neg() * self.thermal_energy
7174
}
7275
/// Mean <exp(-U/kT)-1>
7376
pub fn mean_exp_energy_m1(&self) -> f64 {
74-
self.exp_energy_m1 / self.n as f64
77+
self.exp_energy_m1 / self.degeneracy as f64
7578
}
7679
/// Number of samples
7780
pub fn n(&self) -> u64 {
@@ -83,12 +86,13 @@ impl std::fmt::Display for Sample {
8386
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
8487
write!(
8588
f,
86-
"n: {}, ⟨U⟩: {:.3} kJ/mol, C/𝑘𝐵: {:.3}, -𝑘𝑇⟨exp(-𝛽U)⟩: {:.3} kJ/mol, ⟨exp(-𝛽U)-1⟩: {:.3}",
89+
"n: {}, ⟨U⟩: {:.3} kJ/mol, C/𝑘𝐵: {:.3}, -𝑘𝑇⟨exp(-𝛽U)⟩: {:.3} kJ/mol, ⟨exp(-𝛽U)-1⟩: {:.3}, g = {:.3}",
8790
self.n,
8891
self.mean_energy(),
8992
self.heat_capacity(),
9093
self.free_energy(),
91-
self.mean_exp_energy_m1()
94+
self.mean_exp_energy_m1(),
95+
self.degeneracy,
9296
)
9397
}
9498
}
@@ -110,6 +114,7 @@ impl Add for Sample {
110114
mean_squared_energy: self.mean_squared_energy + other.mean_squared_energy,
111115
exp_energy: self.exp_energy + other.exp_energy,
112116
exp_energy_m1: self.exp_energy_m1 + other.exp_energy_m1,
117+
degeneracy: self.degeneracy + other.degeneracy,
113118
}
114119
}
115120
}
@@ -122,5 +127,6 @@ impl AddAssign for Sample {
122127
self.exp_energy += other.exp_energy;
123128
self.exp_energy_m1 += other.exp_energy_m1;
124129
self.thermal_energy = f64::max(self.thermal_energy, other.thermal_energy);
130+
self.degeneracy += other.degeneracy;
125131
}
126132
}

0 commit comments

Comments
 (0)