From ad757e10a7997958311224de9262992537b8bcca Mon Sep 17 00:00:00 2001 From: Florian Goth Date: Mon, 21 Jun 2021 18:17:00 +0200 Subject: [PATCH 1/3] Add a trivial showcase --- src/libshowcase.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/libshowcase.cpp diff --git a/src/libshowcase.cpp b/src/libshowcase.cpp new file mode 100644 index 0000000..e425ecd --- /dev/null +++ b/src/libshowcase.cpp @@ -0,0 +1,94 @@ +#include +#include +#include + +//include the MARQOV library +#include "libmarqov/libmarqov.h" + +//include the RegularLattice +#include "lattice/regular_hypercubic.h" + +#include "hamiltonian/Heisenberg.h" +#include "hamiltonian/Ising.h" +#include "hamiltonian/Phi4.h" + +using namespace std; +using namespace MARQOV; + +extern "C" { + +int pyising(int len, double beta, double J) +{ + RegularHypercubic mylatt(len, 2); //2D len x len lattice + + //MARQOV::Config stores a set of Monte Carlo related parameters + MARQOV::Config mp("./"); + mp.setnmetro(5); + mp.setncluster(8/2); + mp.setwarmupsteps(500); + mp.setgameloopsteps(3000); + + // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta + auto hp = make_tuple(beta, J); + //Let's create some parameters, a temperature scan for the scheduler to work on. + //prepare the arguments + auto args = make_tuple(std::ref(mylatt), mp, hp); + + //execute core + auto mysim = makeCore >(args); + mysim.init(); + mysim.wrmploop(); + mysim.gameloop(); + return 0; +} + +int pyHeisenberg(int len, double beta, double J) +{ + RegularHypercubic mylatt(len, 2); //2D len x len lattice + + //MARQOV::Config stores a set of Monte Carlo related parameters + MARQOV::Config mp("./"); + mp.setnmetro(5); + mp.setncluster(8/2); + mp.setwarmupsteps(500); + mp.setgameloopsteps(3000); + + // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta + auto hp = make_tuple(beta, J); + //Let's create some parameters, a temperature scan for the scheduler to work on. + //prepare the arguments + auto args = make_tuple(std::ref(mylatt), mp, hp); + + //execute core + auto mysim = makeCore >(args); + mysim.init(); + mysim.wrmploop(); + mysim.gameloop(); + return 0; +} + +int pyPhi4(int len, double beta, double lambda, double mass) +{ + RegularHypercubic mylatt(len, 2); //2D len x len lattice + + //MARQOV::Config stores a set of Monte Carlo related parameters + MARQOV::Config mp("./"); + mp.setnmetro(5); + mp.setncluster(8/2); + mp.setwarmupsteps(500); + mp.setgameloopsteps(3000); + + // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta + auto hp = make_tuple(beta, beta, lambda, mass); + //Let's create some parameters, a temperature scan for the scheduler to work on. + //prepare the arguments + auto args = make_tuple(std::ref(mylatt), mp, hp); + + //execute core + auto mysim = makeCore >(args); + mysim.init(); + mysim.wrmploop(); + mysim.gameloop(); + return 0; +} +} -- GitLab From 70e1ed138c97f3dcdc5b87d0491110c32c9b4a8d Mon Sep 17 00:00:00 2001 From: Florian Goth Date: Tue, 22 Jun 2021 03:51:36 +0200 Subject: [PATCH 2/3] Add a working swig example --- src/libshowcase.cpp | 85 ++++++++++++++++++++++----------------------- src/libshowcase.h | 3 ++ src/libshowcase.i | 8 +++++ 3 files changed, 53 insertions(+), 43 deletions(-) create mode 100644 src/libshowcase.h create mode 100644 src/libshowcase.i diff --git a/src/libshowcase.cpp b/src/libshowcase.cpp index e425ecd..b724742 100644 --- a/src/libshowcase.cpp +++ b/src/libshowcase.cpp @@ -15,7 +15,7 @@ using namespace std; using namespace MARQOV; -extern "C" { +//extern "C" { int pyising(int len, double beta, double J) { @@ -44,51 +44,50 @@ int pyising(int len, double beta, double J) int pyHeisenberg(int len, double beta, double J) { - RegularHypercubic mylatt(len, 2); //2D len x len lattice - - //MARQOV::Config stores a set of Monte Carlo related parameters - MARQOV::Config mp("./"); - mp.setnmetro(5); - mp.setncluster(8/2); - mp.setwarmupsteps(500); - mp.setgameloopsteps(3000); - - // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta - auto hp = make_tuple(beta, J); - //Let's create some parameters, a temperature scan for the scheduler to work on. - //prepare the arguments - auto args = make_tuple(std::ref(mylatt), mp, hp); + RegularHypercubic mylatt(len, 2); //2D len x len lattice +//MARQOV::Config stores a set of Monte Carlo related parameters + MARQOV::Config mp("./"); + mp.setnmetro(5); + mp.setncluster(8/2); + mp.setwarmupsteps(500); + mp.setgameloopsteps(3000); - //execute core - auto mysim = makeCore >(args); - mysim.init(); - mysim.wrmploop(); - mysim.gameloop(); + // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta + auto hp = make_tuple(beta, J); + //Let's create some parameters, a temperature scan for the scheduler to work on. + //prepare the arguments + auto args = make_tuple(std::ref(mylatt), mp, hp); + + //execute core + auto mysim = makeCore >(args); + mysim.init(); + mysim.wrmploop(); + mysim.gameloop(); return 0; } - + int pyPhi4(int len, double beta, double lambda, double mass) { - RegularHypercubic mylatt(len, 2); //2D len x len lattice - - //MARQOV::Config stores a set of Monte Carlo related parameters - MARQOV::Config mp("./"); - mp.setnmetro(5); - mp.setncluster(8/2); - mp.setwarmupsteps(500); - mp.setgameloopsteps(3000); - - // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta - auto hp = make_tuple(beta, beta, lambda, mass); - //Let's create some parameters, a temperature scan for the scheduler to work on. - //prepare the arguments - auto args = make_tuple(std::ref(mylatt), mp, hp); - - //execute core - auto mysim = makeCore >(args); - mysim.init(); - mysim.wrmploop(); - mysim.gameloop(); - return 0; -} + RegularHypercubic mylatt(len, 2); //2D len x len lattice + + //MARQOV::Config stores a set of Monte Carlo related parameters + MARQOV::Config mp("./"); + mp.setnmetro(5); + mp.setncluster(8/2); + mp.setwarmupsteps(500); + mp.setgameloopsteps(3000); + + // A section for setting our Hamiltonian parameters, J, and the inverse temperature beta + auto hp = make_tuple(beta, beta, lambda, mass); + //Let's create some parameters, a temperature scan for the scheduler to work on. + //prepare the arguments + auto args = make_tuple(std::ref(mylatt), mp, hp); + + //execute core + auto mysim = makeCore >(args); + mysim.init(); + mysim.wrmploop(); + mysim.gameloop(); + return 0; } +//} diff --git a/src/libshowcase.h b/src/libshowcase.h new file mode 100644 index 0000000..6d1a6c6 --- /dev/null +++ b/src/libshowcase.h @@ -0,0 +1,3 @@ +int pyising(int len, double beta, double J); +int pyHeisenberg(int len, double beta, double J); +int pyPhi4(int len, double beta, double lambda, double mass); diff --git a/src/libshowcase.i b/src/libshowcase.i new file mode 100644 index 0000000..052d153 --- /dev/null +++ b/src/libshowcase.i @@ -0,0 +1,8 @@ +%module showcase +%{ +/* Includes the header in the wrapper code */ +#include "libshowcase.h" +%} + +/* Parse the header file to generate wrappers */ +%include "libshowcase.h" \ No newline at end of file -- GitLab From 3d3a4aa5786c422851e5a6d2cba97d6328cadaae Mon Sep 17 00:00:00 2001 From: Florian Goth Date: Tue, 22 Jun 2021 13:57:24 +0200 Subject: [PATCH 3/3] make the path of the HDF5 file configurable. And figure out how SWIG does strings --- src/libshowcase.cpp | 16 +++++++--------- src/libshowcase.h | 7 ++++--- src/libshowcase.i | 3 +++ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/libshowcase.cpp b/src/libshowcase.cpp index b724742..aa8c3dc 100644 --- a/src/libshowcase.cpp +++ b/src/libshowcase.cpp @@ -15,14 +15,12 @@ using namespace std; using namespace MARQOV; -//extern "C" { - -int pyising(int len, double beta, double J) +int pyising(std::string path, int len, double beta, double J) { RegularHypercubic mylatt(len, 2); //2D len x len lattice //MARQOV::Config stores a set of Monte Carlo related parameters - MARQOV::Config mp("./"); + MARQOV::Config mp(path); mp.setnmetro(5); mp.setncluster(8/2); mp.setwarmupsteps(500); @@ -42,11 +40,11 @@ int pyising(int len, double beta, double J) return 0; } -int pyHeisenberg(int len, double beta, double J) +int pyHeisenberg(std::string path, int len, double beta, double J) { RegularHypercubic mylatt(len, 2); //2D len x len lattice //MARQOV::Config stores a set of Monte Carlo related parameters - MARQOV::Config mp("./"); + MARQOV::Config mp(path); mp.setnmetro(5); mp.setncluster(8/2); mp.setwarmupsteps(500); @@ -59,19 +57,19 @@ int pyHeisenberg(int len, double beta, double J) auto args = make_tuple(std::ref(mylatt), mp, hp); //execute core - auto mysim = makeCore >(args); + auto mysim = makeCore >(args); mysim.init(); mysim.wrmploop(); mysim.gameloop(); return 0; } -int pyPhi4(int len, double beta, double lambda, double mass) +int pyPhi4(std::string path, int len, double beta, double lambda, double mass) { RegularHypercubic mylatt(len, 2); //2D len x len lattice //MARQOV::Config stores a set of Monte Carlo related parameters - MARQOV::Config mp("./"); + MARQOV::Config mp(path); mp.setnmetro(5); mp.setncluster(8/2); mp.setwarmupsteps(500); diff --git a/src/libshowcase.h b/src/libshowcase.h index 6d1a6c6..2c01acb 100644 --- a/src/libshowcase.h +++ b/src/libshowcase.h @@ -1,3 +1,4 @@ -int pyising(int len, double beta, double J); -int pyHeisenberg(int len, double beta, double J); -int pyPhi4(int len, double beta, double lambda, double mass); +#include +int pyising(std::string path, int len, double beta, double J); +int pyHeisenberg(std::string path, int len, double beta, double J); +int pyPhi4(std::string, int len, double beta, double lambda, double mass); diff --git a/src/libshowcase.i b/src/libshowcase.i index 052d153..6273ef9 100644 --- a/src/libshowcase.i +++ b/src/libshowcase.i @@ -1,5 +1,8 @@ %module showcase +/*SWIG has a library for doing the string mappings.*/ +%include "std_string.i" %{ + /* Includes the header in the wrapper code */ #include "libshowcase.h" %} -- GitLab