Skip to content

Commit 4aecfa7

Browse files
committed
monte carlo for Helmholtz; need to test
1 parent 89156f3 commit 4aecfa7

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

statmechcrack/monte_carlo.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ def fun(seed, output):
171171
for p in processes:
172172
p.join()
173173
process_results = [output.get() for p in processes]
174-
print(process_results)
175174
return np.mean(process_results)
176175
return serial_fun(burned_in_config, **kwargs)
177176

@@ -310,7 +309,15 @@ def beta_A_isometric_monte_carlo_serial(self, v, init_config,
310309
numpy.ndarray: The relative nondimensional Helmholtz free energy.
311310
312311
"""
313-
pass
312+
exp_neg_beta_A = 0
313+
config = init_config
314+
for counter in range(1, 1 + num_samples):
315+
exp_neg_beta_A_next = np.exp(
316+
self.beta_U(1, config) - self.beta_U(v, config)
317+
)
318+
exp_neg_beta_A += (exp_neg_beta_A_next - exp_neg_beta_A)/counter
319+
config = self.mh_next_config(config, **kwargs)
320+
return np.log(1/exp_neg_beta_A)
314321

315322
def beta_A_isometric_monte_carlo(self, v, **kwargs):
316323
r"""The relative nondimensional Helmholtz free energy
@@ -323,7 +330,7 @@ def beta_A_isometric_monte_carlo(self, v, **kwargs):
323330
\beta\Delta A(v) =
324331
-\ln\left\langle e^{-\beta\Delta U}\right\rangle_{v=1},
325332
326-
where :math:`\Delta U\equiv U(v,s)-U(1,s)`.
333+
where :math:`\Delta U \equiv U(v,s) - U(1,s)`.
327334
328335
Args:
329336
v (array_like): The nondimensional end separation.
@@ -337,7 +344,7 @@ def beta_A_isometric_monte_carlo(self, v, **kwargs):
337344
v = self.np_array(v)
338345
beta_A = np.zeros(v.shape)
339346
for i, v_i in enumerate(v):
340-
self.beta_e = lambda config: self.beta_U(v_i, config)
347+
self.beta_e = lambda config: self.beta_U(1, config)
341348

342349
def serial_fun(init_config, **kwargs):
343350
return self.beta_A_isometric_monte_carlo_serial(
@@ -380,7 +387,7 @@ def beta_G_isotensional_monte_carlo(self, p, **kwargs):
380387
\beta\Delta G(v) =
381388
-\ln\left\langle e^{-\beta\Delta\Pi}\right\rangle_{p=0},
382389
383-
where :math:`\Delta\Pi\equiv\Pi(p,s)-\Pi(0,s)`.
390+
where :math:`\Delta\Pi \equiv \Pi(p,s) - \Pi(0,s)`.
384391
385392
Args:
386393
p (array_like): The nondimensional end force.
@@ -392,16 +399,16 @@ def beta_G_isotensional_monte_carlo(self, p, **kwargs):
392399
393400
"""
394401
p = self.np_array(p)
395-
beta_G_isotensional = np.zeros(p.shape)
402+
beta_G = np.zeros(p.shape)
396403
for i, p_i in enumerate(p):
397404
self.beta_e = lambda vs: self.beta_Pi(p_i, vs[0], vs[1:])
398405
v_guess, s_guess = self.minimize_beta_Pi(p_i)[1:]
399-
beta_G_isotensional[i] = self.parallel_calculation(
406+
beta_G[i] = self.parallel_calculation(
400407
self.beta_G_isotensional_monte_carlo_serial,
401408
np.concatenate((v_guess, s_guess[:, 0])),
402409
**kwargs
403410
)
404-
return beta_G_isotensional
411+
return beta_G
405412

406413
def k_isometric_monte_carlo_serial(self, v, init_config,
407414
num_samples=1000000, **kwargs):
@@ -446,7 +453,7 @@ def k_isometric_monte_carlo(self, v, **kwargs):
446453
447454
"""
448455
v = self.np_array(v)
449-
k_isometric = np.zeros(v.shape)
456+
k = np.zeros(v.shape)
450457
for i, v_i in enumerate(v):
451458
self.beta_e = lambda config: self.beta_U(v_i, config)
452459

@@ -455,12 +462,12 @@ def serial_fun(init_config, **kwargs):
455462
v_i, init_config, **kwargs
456463
)
457464

458-
k_isometric[i] = self.parallel_calculation(
465+
k[i] = self.parallel_calculation(
459466
serial_fun,
460467
self.minimize_beta_U(v_i)[2][:, 0],
461468
**kwargs
462469
)
463-
return k_isometric
470+
return k
464471

465472
def k_isotensional_monte_carlo_serial(self, init_config,
466473
num_samples=1000000, **kwargs):
@@ -504,13 +511,13 @@ def k_isotensional_monte_carlo(self, p, **kwargs):
504511
505512
"""
506513
p = self.np_array(p)
507-
k_isotensional = np.zeros(p.shape)
514+
k = np.zeros(p.shape)
508515
for i, p_i in enumerate(p):
509516
self.beta_e = lambda vs: self.beta_Pi(p_i, vs[0], vs[1:])
510517
v_guess, s_guess = self.minimize_beta_Pi(p_i)[1:]
511-
k_isotensional[i] = self.parallel_calculation(
518+
k[i] = self.parallel_calculation(
512519
self.k_isotensional_monte_carlo_serial,
513520
np.concatenate((v_guess, s_guess[:, 0])),
514521
**kwargs
515522
)
516-
return k_isotensional
523+
return k

0 commit comments

Comments
 (0)