MARQOV issueshttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues2020-06-03T16:16:19Zhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/37syntax question2020-06-03T16:16:19ZManuel Schrauthsyntax questionWie rufe ich eine Funktion durch zwei Klassen hindurch auf?
Die Marqov-Klasse kennt den Hamiltonian als `ham`. Im Hamiltonian wiederum habe ich einen `Embedder` initialisiert
`PottsEmbedder<StateVector,RND,q> e(RND);`
Jetzt will ich i...Wie rufe ich eine Funktion durch zwei Klassen hindurch auf?
Die Marqov-Klasse kennt den Hamiltonian als `ham`. Im Hamiltonian wiederum habe ich einen `Embedder` initialisiert
`PottsEmbedder<StateVector,RND,q> e(RND);`
Jetzt will ich im Wolff-Algorithmus, die Methoden von `e` aufrufen. Allerdings funktioniert das hier nicht
`ham.e.wolff_flip(...)`
Er sagt mir
> invalid use of member function ... (did you forget the ‘()’ ?)
Benutze ich die falsche Synatx?Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/41seperate out Initialization2020-06-02T21:27:24ZManuel Schrauthseperate out InitializationI guess we are at the point, where every Hamiltonian needs their own initialization routine ...I guess we are at the point, where every Hamiltonian needs their own initialization routine ...https://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/42AT model does not equilibrate as fast as it is supposed to2020-06-02T20:38:31ZManuel SchrauthAT model does not equilibrate as fast as it is supposed tofor K=0 it is simply 3 decoupled Ising models. However, the results do not coincide ...for K=0 it is simply 3 decoupled Ising models. However, the results do not coincide ...https://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/38separate out metropolis2020-05-27T15:36:43ZFlorian Gothseparate out metropolisseparate out he Metropolis to circumvent the partial specialization of functions of C++separate out he Metropolis to circumvent the partial specialization of functions of C++Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/30make MARQOV constructible with lattice as references or if nit make them part...2020-05-08T13:42:16ZFlorian Gothmake MARQOV constructible with lattice as references or if nit make them part of the internal stateAs I now have a working Duck example on how to have variadic constructors and differing methods on how to abstract away the referenceness or memberness of a variable let's implement this in marqov.[ducks2.cpp](/uploads/ba0de318631eb46456...As I now have a working Duck example on how to have variadic constructors and differing methods on how to abstract away the referenceness or memberness of a variable let's implement this in marqov.[ducks2.cpp](/uploads/ba0de318631eb4645625373b828b1878/ducks2.cpp)Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/32generalize and integrate filtered Metropolis properly2020-04-30T07:44:51ZManuel Schrauthgeneralize and integrate filtered Metropolis properlyImplementing the Ashkin-Teller model required to generalize the Metropolis algorithm and introduce a couple of new objects, such as reduced state vectors and state vector filters.
Those work are currently hard-coded for the special case...Implementing the Ashkin-Teller model required to generalize the Metropolis algorithm and introduce a couple of new objects, such as reduced state vectors and state vector filters.
Those work are currently hard-coded for the special case `AshkinTeller.h`, hence they need to be generalized and, more importantly, integrated into the overall workflow.https://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/23branch naming convention2020-04-30T07:44:03ZManuel Schrauthbranch naming conventionHast du da irgendein System wie du Branches benennst? Hab meinen jetzt einfach mal 31 genannt :grin:Hast du da irgendein System wie du Branches benennst? Hab meinen jetzt einfach mal 31 genannt :grin:Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/26Hamiltonian vs. Lattice parameters2020-04-30T07:43:50ZManuel SchrauthHamiltonian vs. Lattice parametersWährend ich gerade dabei bin eine Disorder-Klasse zu schreiben, die dann z.B. sowas kann:
> Toldin, F. P., Pelissetto, A., & Vicari, E. <br> Strong-disorder paramagnetic-ferromagnetic fixed point in the square-lattice ±J Ising model. <b...Während ich gerade dabei bin eine Disorder-Klasse zu schreiben, die dann z.B. sowas kann:
> Toldin, F. P., Pelissetto, A., & Vicari, E. <br> Strong-disorder paramagnetic-ferromagnetic fixed point in the square-lattice ±J Ising model. <br> Journal of Statistical Physics, 135(5-6), 1039-1061 (2009)
bin ich auf das Problem gestoßen, dass es Parameter gibt, die eigentlich keine Parameter des Hamiltonians, sondern des Gitter sind. Im einfachsten Fall ist es eben die Wahrscheinlichkeit, dass ein zufälliger Bond eine Wechselwirkungsstärke von -J anstatt von J hat.
Ich habe jetzt noch nicht in deinen aufgeräumten Branch reingesehen, aber wir brauchen sozusagen einen Mechanismus, der dem Hamiltonian und dem Gitter ihre jeweils benötigten Parameter zuführt.
Der Einfachheit halber sollten wir zu dem Thema mal skypen würde ich sagen.Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/35Hamiltonian base class2020-04-30T07:42:16ZManuel SchrauthHamiltonian base classSeit heute morgen denke ich mir, dass es sinnvoll sein könnte, wenn wir eine Hamiltonian Basis-Klasse haben. Da arbeite ich gerade im Branch 33 dran, ist aber noch nicht committed. Die Idee ist sowas:
```
template <int SymD, class SpinTy...Seit heute morgen denke ich mir, dass es sinnvoll sein könnte, wenn wir eine Hamiltonian Basis-Klasse haben. Da arbeite ich gerade im Branch 33 dran, ist aber noch nicht committed. Die Idee ist sowas:
```
template <int SymD, class SpinType, int ReducedSymD=1, class ReducedSpinType=int>
class Hamiltonian
{
public:
typedef std::array<SpinType, SymD> StateVector;
typedef std::array<ReducedSpinType, ReducedSymD> ReducedStateVector;
template <class A>
void wolff_flip(StateVector& sv, const A a);
template <class A>
double wolff_coupling(StateVector& sv1, StateVector& sv2, const A a);
template <class A>
double metro_coupling(StateVector& sv1, StateVector& sv2, const A a);
template <class A>
ReducedStateVector& metro_reduce_ref(StateVector& sv, const A a);
template <class A>
ReducedStateVector metro_reduce_cpy(StateVector sv, const A a);
};
```
Hier sind also die notwendigen Methoden und Datentypen deklariert und wenn sie in einem bestimmten abgeleiteten Hamiltonian dann gebraucht werden, müssen sie nach wie vor dort implementiert werden.
```
template <typename SpinType = int>
class Ising : public Hamiltonian<1,SpinType>
{
public:
double J;
typedef typename Hamiltonian<1,SpinType>::StateVector StateVector;
typedef typename Hamiltonian<1,SpinType>::ReducedStateVector ReducedStateVector;
(...)
template <class A = bool>
inline void wolff_flip(StateVector& sv, const A a=0)
{
sv[0] *= -1;
}
```
Wenn ich für ein gewisses Model also keinen ReducedStateVector brauche, dann ist der trotzdem automatisch vorhanden und die Funktionen, die das Ding benutzen, kompilieren.https://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/34reference to subarray2020-04-28T18:52:29ZManuel Schrauthreference to subarrayIch komme da gerade nicht weiter, vielleicht kannst du mir helfen. Ich habe ja diese zwei Funktionen, die aus einem StateVector einen ReducedStateVector machen. Im einfachsten Fall ist
```
typedef std::array<int,3> StateVector;
type...Ich komme da gerade nicht weiter, vielleicht kannst du mir helfen. Ich habe ja diese zwei Funktionen, die aus einem StateVector einen ReducedStateVector machen. Im einfachsten Fall ist
```
typedef std::array<int,3> StateVector;
typedef std::array<int,1> ReducedStateVector;
```
d.h. ich will eine Komponente extrahieren und sie in ein Array der Länge 1 verpacken. Das geht logischerweise so:
```
ReducedStateVector metro_reduce_cpy(StateVector sv, int comp)
{
ReducedStateVector retval;
retval[0] = sv[comp];
return retval;
}
```
Nur wie mache ich das jetzt wenn die Komponente nur als Referenz durchgeleitet werden soll?
```
ReducedStateVector& metro_reduce_ref(StateVector& sv, int comp)
{
// ???
}
```Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/31dangerous bug in Metropolis2020-04-27T15:19:47ZManuel Schrauthdangerous bug in MetropolisWhen summing over the neighbours, `averagevector` must not in general be a StateVector. Why? In models where StateVector uses an `int` data type, this line can still produce `doubles`
``averagevector = averagevector + callbonds<Grid>(gr...When summing over the neighbours, `averagevector` must not in general be a StateVector. Why? In models where StateVector uses an `int` data type, this line can still produce `doubles`
``averagevector = averagevector + callbonds<Grid>(grid, a, rsite, i, nbr);``
This should be fixed as soon as possible.2020-04-28https://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/3Implement Wolff2020-04-24T10:45:27ZManuel SchrauthImplement Wolffhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/8Best practice method definitions outside class body2020-04-24T10:45:17ZManuel SchrauthBest practice method definitions outside class bodyIch habe die Update-Algorithmen aus der marqov.h raus in ein eigenes Header file "update.h" zur besseren Übersichtlichkeit beim Arbeiten.
Ich weiß allerdings nicht genau, wie da "normalerweise" die Struktur sein muss, d.h. welcher Heade...Ich habe die Update-Algorithmen aus der marqov.h raus in ein eigenes Header file "update.h" zur besseren Übersichtlichkeit beim Arbeiten.
Ich weiß allerdings nicht genau, wie da "normalerweise" die Struktur sein muss, d.h. welcher Header wird von der main.cpp eingelesen, d.h. wie ist die richtige Hierarchie? Und müsste die update.h vielleicht besser "marqov.cpp" heißen?
Schau am besten mal drüber, ob das so passt deiner Meinung nach.Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/29Implement Ashkin-Teller model2020-04-24T10:15:27ZManuel SchrauthImplement Ashkin-Teller modelHier wird das Konzept von mehreren Farben/Familien benötigt, was aktuell nur bruchstückhaft implementiert ist. Daher wahrscheinlich sinnvoll das mal zu versuchen...
Falls es nicht klappt, treten treten so frühzeitig konzeptionelle Probl...Hier wird das Konzept von mehreren Farben/Familien benötigt, was aktuell nur bruchstückhaft implementiert ist. Daher wahrscheinlich sinnvoll das mal zu versuchen...
Falls es nicht klappt, treten treten so frühzeitig konzeptionelle Probleme zu TageManuel SchrauthManuel Schrauthhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/22tidy-up-1+Neighbours2020-04-23T13:12:29ZFlorian Gothtidy-up-1+NeighboursFlorian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/28Benutzung von callbonds2020-04-22T12:43:50ZManuel SchrauthBenutzung von callbondsWie genau funktioniert der Mechanismus, der entscheidet, welche callbonds_helper-Variante aufgerufen wird?
Bei meinem RegularRandomBond-Gitter wird z.B. aktuell noch die falsche aufgerufen, nämlich die default-Variante.Wie genau funktioniert der Mechanismus, der entscheidet, welche callbonds_helper-Variante aufgerufen wird?
Bei meinem RegularRandomBond-Gitter wird z.B. aktuell noch die falsche aufgerufen, nämlich die default-Variante.Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/25move functionality for regular lattice class2020-04-21T16:37:29ZManuel Schrauthmove functionality for regular lattice classIch würde die RegularLattice Klasse gerne in einer anderen Klasse benutzen, aber dafür bräuchte ich move-Funktionen. Einen leeren Constructor habe ich schnell hinzugefügt, aber mit move-Operatoren kenne ich mich nicht wirklich aus. Deswe...Ich würde die RegularLattice Klasse gerne in einer anderen Klasse benutzen, aber dafür bräuchte ich move-Funktionen. Einen leeren Constructor habe ich schnell hinzugefügt, aber mit move-Operatoren kenne ich mich nicht wirklich aus. Deswegen hab ich das mal unelegant folgendermaßen gelöst:
```
class RegularRandomBond: public DisorderType<bond_type>
{
private:
int len, dim;
RegularLattice lattice;
public:
RegularRandomBond(int dim, int len) : dim(dim), len(len)
{
RegularLattice templattice(len, dim);
lattice = std::move(templattice);
}
}
```
Ist da was einzuwenden, solange die Klasse das noch nicht selbst kann?Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/24where is the problem?2020-04-17T17:26:08ZManuel Schrauthwhere is the problem?Ich bin seit fast einer halben Stunde dabei eine vererbte Klasse mit Template-Parametern zum Laufen zu bekommen, aber ich finde den Fehler nicht ...
Das Problem ist das `nbrs` unten nicht erkannt wird (was not declared in this scope), o...Ich bin seit fast einer halben Stunde dabei eine vererbte Klasse mit Template-Parametern zum Laufen zu bekommen, aber ich finde den Fehler nicht ...
Das Problem ist das `nbrs` unten nicht erkannt wird (was not declared in this scope), obwohl es in der Basisklasse definiert wird.
```
template <typename bond_type = int>
class DisorderType
{
public:
std::vector<std::vector<int>> nbrs;
DisorderType(){}
};
template <class PointCloud, typename bond_type>
class SomeRandomConnections : public DisorderType<bond_type>
{
private:
RND rng;
public:
SomeRandomConnections(const PointCloud& cloud) : rng(0,1)
{
// do something with nbrs here
nbrs.resize(10*10);
}
};
```
Aufgerufen wird das ganze als
```
Regular2D cloud(10);
SomeRandomConnections<Regular2D,double> disorder(cloud);
```Florian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/14parallelization2020-04-14T15:40:38ZManuel SchrauthparallelizationDa ich bei dem Antiferrogmagneten im externen Magnetfeld wohl hautpsächlich auf den Metropolis angewiesen bin, wäre es gut, wenn wir zeitnah eine triviale Parallelisierung einbauen würden, so dass ich z.B. die wthp111 nutzen kann.
Wills...Da ich bei dem Antiferrogmagneten im externen Magnetfeld wohl hautpsächlich auf den Metropolis angewiesen bin, wäre es gut, wenn wir zeitnah eine triviale Parallelisierung einbauen würden, so dass ich z.B. die wthp111 nutzen kann.
Willst du mal reinschauen oder soll ich schnell was bauen? Oder wir skypen nochmalFlorian GothFlorian Gothhttps://git.physik.uni-wuerzburg.de/marqov/marqov/-/issues/10file output very slow2020-04-10T14:01:21ZManuel Schrauthfile output very slowDu hast ja selbst schon angemerkt, dass der Output im Moment sehr langsam ist. Wenn du Zeit hast, kannst du ja mal reinsehen, ob man es auf die Schnelle wenigstens etwas schneller bekommt. Richtig dringend ist es jetzt nicht, ich merke e...Du hast ja selbst schon angemerkt, dass der Output im Moment sehr langsam ist. Wenn du Zeit hast, kannst du ja mal reinsehen, ob man es auf die Schnelle wenigstens etwas schneller bekommt. Richtig dringend ist es jetzt nicht, ich merke es nur gerade bei den Tests, dass gefühlt mehr als 95% der Zeit dafür draufgeht :wink:Florian GothFlorian Goth