oILAB
Loading...
Searching...
No Matches
MonteCarloImplementation.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 8/6/24.
3//
4#ifndef OILAB_MONTECARLOIMPLEMENTATION_H
5#define OILAB_MONTECARLOIMPLEMENTATION_H
6
7#include "../Lattices/OrderedTuplet.h"
8#include "../Lattices/GbMesoStateEnsemble.h"
9#include "LandauWangTP.h"
10#include "CanonicalTP.h"
11
12namespace oILAB {
13template <typename StateType, typename SystemType, typename EnsembleType,
14 typename EvolveType>
16 const EnsembleType &ensemble, const EvolveType &evolve)
17 : EvolutionAlgorithm<StateType, SystemType, EvolveType>(evolve),
18 ensemble(ensemble),
19 currentState(ensemble.sampleNewState(ensemble.initializeState(), true)) {}
20template <typename StateType, typename SystemType, typename EnsembleType,
21 typename EvolveType>
23 const EnsembleType &ensemble, const EvolveType &evolve,
24 const StateType &state)
25 : EvolutionAlgorithm<StateType, SystemType, EvolveType>(evolve),
26 ensemble(ensemble),
27 // currentState(ensemble.sampleNewState(state, false))
28 currentState(state) {}
29
30template <typename StateType, typename SystemType, typename EnsembleType,
31 typename EvolveType>
33 const int &maxIterations) {
34 int acceptCount = 0;
35
36 for (int i = 0; i < maxIterations; ++i) {
37 auto proposedState = ensemble.sampleNewState(currentState, false);
38 bool transition = this->acceptMove(
39 std::make_pair(proposedState,
40 ensemble.constructMesoState(proposedState)),
41 std::make_pair(currentState,
42 ensemble.constructMesoState(currentState)));
43 if (transition) {
44 currentState = proposedState;
45 acceptCount++;
46 }
47 }
48 }
49
50 } // namespace oILAB
51#endif
MonteCarlo(const EnsembleType &ensemble, const EvolveType &evolve)
void evolve(const int &maxIterations)