Browse Source

Improve README, move version history to separate file

master
J.-S. Caux 6 years ago
parent
commit
f654f45171
4 changed files with 259 additions and 228 deletions
  1. 220
    0
      ABACUS_version_history.md
  2. 1
    1
      Makefile
  3. 37
    226
      README.md
  4. 1
    1
      docs/.gitignore

+ 220
- 0
ABACUS_version_history.md View File

@@ -0,0 +1,220 @@
1
+
2
+
3
+Previous versions
4
+=================
5
+Development of ABACUS was started by [J.-S. Caux](https://jscaux.org) around 2004 and has known an embarrassingly large number of versions.
6
+
7
+Here under are some notes on major versions and overhauls of the codebase.
8
+
9
+#### ABACUS++G_8
10
+_[started 2015 02 20] [published 2015 04 04]_
11
+
12
+Building up on ++G_7.
13
+
14
+Objectives:
15
+
16
+- facilitate use of OpenMP, by removing the recursive aspect of descending. DONE.
17
+
18
+- improve memory use. DONE.
19
+  Replace in-memory `Scan_Thread_Set` by on-disk `Scan_Thread_Data`.
20
+  Uses `Scan_Thread` structure.
21
+
22
+Features:
23
+- OpenMP is implemented.
24
+- Scanning on spin chains is now implemented.
25
+- `Scan_Info`'s `Nfull` now contains the sub-Hilbert space dimension (for spin chains; `type == double`)
26
+- Added the .stat file in `General_Scan`, containing info about expected data value and actually obtained one
27
+- Timing is more strictly enforced, using OpenMP `wtime()`.
28
+
29
+Notes:
30
+- a first implementation using OpenMP is archived as ABACUS++G_8_v1.tar.gz package.
31
+
32
+#### ABACUS++G_7
33
+_[published 2015 01 17]_
34
+
35
+Building up on ++G_6.
36
+- Now using 15 types of descendents, enabling fixed iK scanning with increasing ph nrs.
37
+- `Scan_Thread_List` replaced by `Scan_Thread_Set` (to optimize performance and threads storage)
38
+
39
+Works well for LiebLin, including at finite T.
40
+
41
+TODO:
42
+- implement scanning for spin chains (scanning over bases still missing for generic `AveragingState`)
43
+
44
+
45
+#### ABACUS++G_6
46
+_[started 2015 01]_
47
+
48
+Simple scanning: `iK` stepped up, `iK` stepped down (from ++G_5).
49
+Fixed momentum scanning is thus implemented.
50
+
51
+###### Version 6.0: _[published 2015 01 16]_
52
+- uses 8 types of descendents
53
+- Works well for LiebLin, including finite T.
54
+
55
+###### Version 6.1: proto version of ++G_7
56
+- uses greater nr of descendents, 15, enforcing strict ph nr increase
57
+
58
+
59
+#### ABACUS++G_5
60
+_[started 2014 12 11] [abandoned 2015 01, except for version 5.0 (great for GS of LiebLin)]_
61
+
62
+Fundamental rewriting of scanning protocol.
63
+
64
+Version 5.0 works very well for ground state correlations of Lieb-Liniger.
65
+Heis: still bugged.
66
+
67
+
68
+#### ABACUS++G_4
69
+_[started 2014 12 08] [abandoned 2014 12 11]_
70
+
71
+Nontrivial bug: descending with inner and outer skeletons does not always
72
+preserve number of p-h excitations. Fatal for large c in LiebLin.
73
+
74
+- Descending with type 2: instead of summing over all new p and h positions,
75
+  just put p and h as close to each other as possible.
76
+  To implement this, added a new type of desc (4), where this distance is increased.
77
+
78
+TODO:
79
+- For XXX: inclusion of infinite rapidities as genuine particle type
80
+
81
+
82
+#### ABACUS++G_3
83
+_[started 2014 11 10] [closed 2014 12 08]_
84
+
85
+- Change of naming convention: LiebLin instead of Bose or 1DBG.
86
+- For LiebLin: changed rapidity naming convention: now `lambdaoc`, to make rescaling lambda/c explicit
87
+- Improved small c algorithm for LiebLin
88
+- Fixed momentum scanning implemented using inner and outer skeleton logic
89
+
90
+#### ABACUS++G_2
91
+_[closed 2014 11 10] [2013 09 20]_
92
+- Scanning is now automatically over remaining pair of excitations; facilitates fixed iK scans
93
+- Threads are now over states with NScan-2 particles, intermediate states then include all Nscan states fulfilling the momentum constraints
94
+- Scanning for spin chains implemented (general states; also parallel). Needs further testing. Seems to work for ground state.
95
+
96
+
97
+#### ABACUS++G_1.1
98
+_[2013 09 06]_
99
+
100
+Changed parallel version for Bose:
101
+- supercycle time is now an argument to functions
102
+- split the `Prepare`, `Run` and `Wrapup` into separate executables
103
+- added the `filenamesuffix` argument to parallel functions
104
+
105
+
106
+
107
+#### ABACUS++G_1
108
+
109
+New labelling and descending implemented for arbitrary states with strings, e.g. spin chains.
110
+
111
+Descendents for an arbitrary state are now generated according to the following logic.
112
+
113
+TO DO:
114
+Include string deviation value in Bethe_State objects and in RAW files. Form factors are always computed.
115
+
116
+
117
+[2013 08 25]
118
+Changed sum rules for LiebLin density-density: now using f-sumrule from iKmin to iKmax.
119
+
120
+
121
+#### Earlier notes for ABACUS++T
122
+
123
+Notable changes from ABACUS++:
124
+
125
+- The state labelling is now done with a single `string` label, detailing the base, nr of particle-hole excitations (as compared to a reference scan state) and `Ix2` changes. The number of particle-hole excitations is therefore not limited anymore, and (for LiebLin) there is no upper momentum limit. See the `src/State_Label.cc` file for the implementation details.
126
+
127
+- The state scanning procedure (i.e. the descendents logic) is now implemented solely at the level of the quantum numbers, following a recursive logic in which excitations are created at the right, then left Fermi boundary and allowed to propagate deeper outside/inside as the tree is climbed.
128
+
129
+- Since the labelling and descending are now completely general, dynamical correlations not only on ground states but also on arbitrary excited states can be computed efficiently. This thus allows to deal with finite temperature correlations.
130
+
131
+
132
+Important conventions:
133
+
134
+- Versions are numbered with two integers, [VERSION].[SUBVERSION]
135
+- Changes in subversion number indicate internal revisions which do not change any of the external conventions, data file structures, etc. Data produced with version V.S can be polished with version V.S' with S' != S.
136
+- Changes in version number indicate a larger scale revision affecting the conventions. Data produced with earlier versions are then deprecated.
137
+
138
+
139
+
140
+#### ABACUS++T_9
141
+_[in development][abandoned]_
142
+
143
+Scanning over ensembles.
144
+
145
+
146
+#### ABACUS++T_8.0
147
+
148
+Changed labels slightly, to avoid identifying empty string with integer 0.
149
+All labels with at least one excitation are now strictly nonempty.
150
+
151
+
152
+#### ABACUS++T_7.0
153
+_[published 1 Dec 2011]_
154
+
155
+Optimization of runtime memory use and of output files sizes.
156
+
157
+Labels: introduction of compressed labels (used in raw and thr files).
158
+Removed conv boolean from raw file (all states in this file have converged).
159
+Threads: removed omega and iK (changed `General_Scan` accordingly), use compressed labels.
160
+
161
+Scanning function: it's now possible to give a default file name when invoking
162
+`General_Scan` (and thus `Scan_Bose`, etc). This is done to avoid stupidly long file
163
+names when calculating correlators over `AveragingState`s which are far from
164
+the ground state.
165
+
166
+
167
+#### ABACUS++T_6.0
168
+_[published 21 Nov 2011]_
169
+
170
+The scanning is now also done over the hole positions.
171
+Upon the creation of a particle-hole, only hole positions at the edges of
172
+blocks of contiguous `Ix2` in `OriginState` are used.
173
+The holes are then scanned moving towards the center of the blocks.
174
+
175
+There are now thus 3 types of scanning:
176
+0: over holes
177
+1: over particles
178
+2: adding a p-h pair
179
+
180
+
181
+#### ABACUS++T_5.0
182
+_[published 4 Nov 2011]_
183
+
184
+Introduced two types of threads, separating scanning over fixed particle-hole numbers
185
+and adding a p-h.
186
+
187
+
188
+#### ABACUS++T_4.0 [published 1 Nov 2011]
189
+
190
+Modification to the labeling logic:
191
+states are now always labeled using the AveragingState's quantum numbers,
192
+even if their bases are different. The form of the `State_Label` is thus changed.
193
+
194
+
195
+#### ABACUS++T_3.0
196
+_[published 1 Nov 2011]_
197
+
198
+New, simpler logic for descendents: the hole positions are scanned immediately
199
+upon creation of a new particle-hole pair; the hole positions are then kept fixed
200
+in subsequent descending.
201
+
202
+Problems:
203
+- when scanning for a function such as the one-body function for Lieb-Liniger,
204
+the extra particle in the AveragingState is not scanned to. Version 4 will
205
+address this problem.
206
+
207
+
208
+#### ABACUS++T_2.0
209
+_[in progress][abandoned]_
210
+
211
+Attempt at implementing fixed-momentum-based scanning.
212
+
213
+#### ABACUS++T_1.0
214
+_[published 23 June 2011]_
215
+
216
+First version of new setup and logic for ABACUS. Implementation of all basic new ideas for state labelling and descending.
217
+
218
+
219
+### Earlier versions
220
+Earlier version of ABACUS are not documented here. The whole history is available in J.-S. Caux's private backfiles.

+ 1
- 1
Makefile View File

@@ -488,4 +488,4 @@ clean :
488 488
 
489 489
 .PHONY: docs
490 490
 docs :
491
-	doxygen ABACUS_Doxyfile && make -C docs/latex
491
+	doxygen ABACUS_Doxyfile && make -C docs/latex && cp docs/latex/refman.pdf docs/$(VERSION)_manual.pdf

+ 37
- 226
README.md View File

@@ -1,7 +1,6 @@
1 1
 # ABACUS
2 2
 
3
-Copyright (c) J.-S. Caux.
4
-
3
+Copyright (c) [J.-S. Caux](https://jscaux.org).
5 4
 
6 5
 
7 6
 ABACUS is a general set of algorithms for dealing with Bethe Ansatz-solvable systems including:
@@ -13,26 +12,54 @@ ABACUS is a general set of algorithms for dealing with Bethe Ansatz-solvable sys
13 12
   * Anisotropic gapped antiferromagnet (XXZ_gpd, Delta > 1)
14 13
 * Interacting fermions (Jordan-Wigner'd XXZ)
15 14
 
16
-The principal purposes of ABACUS are:
17
-* to construct Bethe eigenstates
18
-* to compute (dynamical) correlation functions of basic observables
15
+The principal purposes of ABACUS are to:
16
+
17
+* provide structs and classes to construct Bethe eigenstates
18
+* provide structs and classes to solve TBA equations
19
+* provide functions to compute matrix elements and other ABA-obtained quantities (overlaps, ...)
20
+* provide Hilbert space scanning functions, enabling the computation of dynamical correlation functions of basic observables
21
+* provide a set of executables to perform such computations, either serially from the command-line or in parallel on a cluster.
19 22
 
23
+The ABACUS codebase is written in C++.
24
+The serial executables are OpenMP-aware. Parallel versions use MPICH.
20 25
 
21 26
 ## Installation
22 27
 From the base directory, simply run
23
-```
28
+
29
+``` shell
24 30
 $ make
25 31
 ```
26
-This will produce all executables, together with a library `ABACUS_[vn]` where vn is of the form [digit][character].
32
+
33
+This will produce all serial executables, together with a library `ABACUS_[vn].a` where vn is of the form [digit][character]. The digit marks a release number, with the optional letter marking a subversion.
34
+
35
+##### Serial executables
36
+All executables are in the `bin/` folder. Invoking them with no arguments will print out usage instructions.
37
+
38
+##### Parallel executables
39
+To compile, invoke
40
+``` shell
41
+$ make parallel
42
+```
43
+Three executables must be run sequentially: `[prefix]_par_Prepare`, `[prefix]_par_Run` and `[prefix_par_Wrapup`, in which `prefix` is `Heis_DSF`, `LienLin_DSF` or `LiebLin_DSF_General_State`.
27 44
 
28 45
 ## Documentation
29
-Documentation for the ABACUS codebase is generated using Doxygen. To generate the documentation, invoke `make docs` (you will need to have Doxygen installed on your system). The configuration file is `ABACUS_Doxygen`.  The HTML version is anchored at `docs/html/index.html`. The PDF version is located at `docs/latex/refman.pdf`. 
46
+Documentation for the ABACUS codebase is automatically generated using Doxygen. To generate the documentation, invoke `make docs` (you will need to have Doxygen installed on your system). The configuration file is `ABACUS_Doxygen`.  The HTML version is anchored at `docs/html/index.html`. The PDF version is located at `docs/ABACUS_[vn]_manual.pdf`.
47
+
48
+An outdated description of ABACUS can be found in J.-S. Caux, J. Math. Phys. 50, 095214 (2009), [doi:10.1063/1.3216474](https://doi.org/10.1063/1.3216474).
49
+
50
+## Note on versions and branches
51
+Versions are labeled `ABACUS_[vn][subvn]`, where `vn` is a version number and `subvn` is a letter subversion label. Branch `master` sits on the latest version/subversion available.
52
+
53
+In the repo, development takes place in branches labeled `dev_from[vn][subvn]` where vn marks the version from which development takes place. Sub-branches for specific features are labeled `dev_from[vn]_[feature]`, where feature is a short descriptor. Completed and accepted features are merged into the dev branch, before this is ultimately merged into master and released as a new [sub]version.
54
+
30 55
 
31 56
 ## Warnings
32 57
 * The ODSLF part (for one-dimensional spinless fermions) is not functional: it is based on the old Young Tableaux ids, and must be upgraded to `State_Label`s.
33 58
 * The Richardson part is not implemented; what exists is old and long deprecated.
34 59
 
35 60
 ## Acknowledgements
61
+_(in historical order)_
62
+
36 63
 __Antoine Klauser__ provided functions for computing neighbour-operator-product matrix elements in XXX: `ln_Szz_ME`, `ln_Szm_p_Smz_ME` and `ln_Smm_ME`.
37 64
 
38 65
 __Miłosz Panfil__ contributed to code to help in the calculation of finite-temperature correlations of Lieb-Liniger.
@@ -42,221 +69,5 @@ __Jacopo De Nardis__ contributed code for the `ln_g2_ME` function for Lieb-Linig
42 69
 __Teun Zwart__ has given much useful advice concerning C++ code organization.
43 70
 
44 71
 
45
-Previous versions
46
-=================
47
-Development of ABACUS started around 2004 and has known an embarrassingly large number of versions.
48
-
49
-Here under are some notes on major versions and overhauls of the codebase.
50
-
51
-#### ABACUS++G_8
52
-_[started 2015 02 20] [published 2015 04 04]_
53
-
54
-Building up on ++G_7.
55
-
56
-Objectives:
57
-
58
-- facilitate use of OpenMP, by removing the recursive aspect of descending. DONE.
59
-
60
-- improve memory use. DONE.
61
-  Replace in-memory `Scan_Thread_Set` by on-disk `Scan_Thread_Data`.
62
-  Uses `Scan_Thread` structure.
63
-
64
-Features:
65
-- OpenMP is implemented.
66
-- Scanning on spin chains is now implemented.
67
-- `Scan_Info`'s `Nfull` now contains the sub-Hilbert space dimension (for spin chains; `type == double`)
68
-- Added the .stat file in `General_Scan`, containing info about expected data value and actually obtained one
69
-- Timing is more strictly enforced, using OpenMP `wtime()`.
70
-
71
-Notes:
72
-- a first implementation using OpenMP is archived as ABACUS++G_8_v1.tar.gz package.
73
-
74
-#### ABACUS++G_7
75
-_[published 2015 01 17]_
76
-
77
-Building up on ++G_6.
78
-- Now using 15 types of descendents, enabling fixed iK scanning with increasing ph nrs.
79
-- `Scan_Thread_List` replaced by `Scan_Thread_Set` (to optimize performance and threads storage)
80
-
81
-Works well for LiebLin, including at finite T.
82
-
83
-TODO:
84
-- implement scanning for spin chains (scanning over bases still missing for generic `AveragingState`)
85
-
86
-
87
-#### ABACUS++G_6
88
-_[started 2015 01]_
89
-
90
-Simple scanning: `iK` stepped up, `iK` stepped down (from ++G_5).
91
-Fixed momentum scanning is thus implemented.
92
-
93
-###### Version 6.0: _[published 2015 01 16]_
94
-- uses 8 types of descendents
95
-- Works well for LiebLin, including finite T.
96
-
97
-###### Version 6.1: proto version of ++G_7
98
-- uses greater nr of descendents, 15, enforcing strict ph nr increase
99
-
100
-
101
-#### ABACUS++G_5
102
-_[started 2014 12 11] [abandoned 2015 01, except for version 5.0 (great for GS of LiebLin)]_
103
-
104
-Fundamental rewriting of scanning protocol.
105
-
106
-Version 5.0 works very well for ground state correlations of Lieb-Liniger.
107
-Heis: still bugged.
108
-
109
-
110
-#### ABACUS++G_4
111
-_[started 2014 12 08] [abandoned 2014 12 11]_
112
-
113
-Nontrivial bug: descending with inner and outer skeletons does not always
114
-preserve number of p-h excitations. Fatal for large c in LiebLin.
115
-
116
-- Descending with type 2: instead of summing over all new p and h positions,
117
-  just put p and h as close to each other as possible.
118
-  To implement this, added a new type of desc (4), where this distance is increased.
119
-
120
-TODO:
121
-- For XXX: inclusion of infinite rapidities as genuine particle type
122
-
123
-
124
-#### ABACUS++G_3
125
-_[started 2014 11 10] [closed 2014 12 08]_
126
-
127
-- Change of naming convention: LiebLin instead of Bose or 1DBG.
128
-- For LiebLin: changed rapidity naming convention: now `lambdaoc`, to make rescaling lambda/c explicit
129
-- Improved small c algorithm for LiebLin
130
-- Fixed momentum scanning implemented using inner and outer skeleton logic
131
-
132
-#### ABACUS++G_2
133
-_[closed 2014 11 10] [2013 09 20]_
134
-- Scanning is now automatically over remaining pair of excitations; facilitates fixed iK scans
135
-- Threads are now over states with NScan-2 particles, intermediate states then include all Nscan states fulfilling the momentum constraints
136
-- Scanning for spin chains implemented (general states; also parallel). Needs further testing. Seems to work for ground state.
137
-
138
-
139
-#### ABACUS++G_1.1
140
-_[2013 09 06]_
141
-
142
-Changed parallel version for Bose:
143
-- supercycle time is now an argument to functions
144
-- split the `Prepare`, `Run` and `Wrapup` into separate executables
145
-- added the `filenamesuffix` argument to parallel functions
146
-
147
-
148
-
149
-#### ABACUS++G_1
150
-
151
-New labelling and descending implemented for arbitrary states with strings, e.g. spin chains.
152
-
153
-Descendents for an arbitrary state are now generated according to the following logic.
154
-
155
-TO DO:
156
-Include string deviation value in Bethe_State objects and in RAW files. Form factors are always computed.
157
-
158
-
159
-[2013 08 25]
160
-Changed sum rules for LiebLin density-density: now using f-sumrule from iKmin to iKmax.
161
-
162
-
163
-#### Earlier notes for ABACUS++T
164
-
165
-Notable changes from ABACUS++:
166
-
167
-- The state labelling is now done with a single `string` label, detailing the base, nr of particle-hole excitations (as compared to a reference scan state) and `Ix2` changes. The number of particle-hole excitations is therefore not limited anymore, and (for LiebLin) there is no upper momentum limit. See the `src/State_Label.cc` file for the implementation details.
168
-
169
-- The state scanning procedure (i.e. the descendents logic) is now implemented solely at the level of the quantum numbers, following a recursive logic in which excitations are created at the right, then left Fermi boundary and allowed to propagate deeper outside/inside as the tree is climbed.
170
-
171
-- Since the labelling and descending are now completely general, dynamical correlations not only on ground states but also on arbitrary excited states can be computed efficiently. This thus allows to deal with finite temperature correlations.
172
-
173
-
174
-Important conventions:
175
-
176
-- Versions are numbered with two integers, [VERSION].[SUBVERSION]
177
-- Changes in subversion number indicate internal revisions which do not change any of the external conventions, data file structures, etc. Data produced with version V.S can be polished with version V.S' with S' != S.
178
-- Changes in version number indicate a larger scale revision affecting the conventions. Data produced with earlier versions are then deprecated.
179
-
180
-
181
-
182
-#### ABACUS++T_9
183
-_[in development][abandoned]_
184
-
185
-Scanning over ensembles.
186
-
187
-
188
-#### ABACUS++T_8.0
189
-
190
-Changed labels slightly, to avoid identifying empty string with integer 0.
191
-All labels with at least one excitation are now strictly nonempty.
192
-
193
-
194
-#### ABACUS++T_7.0
195
-_[published 1 Dec 2011]_
196
-
197
-Optimization of runtime memory use and of output files sizes.
198
-
199
-Labels: introduction of compressed labels (used in raw and thr files).
200
-Removed conv boolean from raw file (all states in this file have converged).
201
-Threads: removed omega and iK (changed `General_Scan` accordingly), use compressed labels.
202
-
203
-Scanning function: it's now possible to give a default file name when invoking
204
-`General_Scan` (and thus `Scan_Bose`, etc). This is done to avoid stupidly long file
205
-names when calculating correlators over `AveragingState`s which are far from
206
-the ground state.
207
-
208
-
209
-#### ABACUS++T_6.0
210
-_[published 21 Nov 2011]_
211
-
212
-The scanning is now also done over the hole positions.
213
-Upon the creation of a particle-hole, only hole positions at the edges of
214
-blocks of contiguous `Ix2` in `OriginState` are used.
215
-The holes are then scanned moving towards the center of the blocks.
216
-
217
-There are now thus 3 types of scanning:
218
-0: over holes
219
-1: over particles
220
-2: adding a p-h pair
221
-
222
-
223
-#### ABACUS++T_5.0
224
-_[published 4 Nov 2011]_
225
-
226
-Introduced two types of threads, separating scanning over fixed particle-hole numbers
227
-and adding a p-h.
228
-
229
-
230
-#### ABACUS++T_4.0 [published 1 Nov 2011]
231
-
232
-Modification to the labeling logic:
233
-states are now always labeled using the AveragingState's quantum numbers,
234
-even if their bases are different. The form of the `State_Label` is thus changed.
235
-
236
-
237
-#### ABACUS++T_3.0
238
-_[published 1 Nov 2011]_
239
-
240
-New, simpler logic for descendents: the hole positions are scanned immediately
241
-upon creation of a new particle-hole pair; the hole positions are then kept fixed
242
-in subsequent descending.
243
-
244
-Problems:
245
-- when scanning for a function such as the one-body function for Lieb-Liniger,
246
-the extra particle in the AveragingState is not scanned to. Version 4 will
247
-address this problem.
248
-
249
-
250
-#### ABACUS++T_2.0
251
-_[in progress][abandoned]_
252
-
253
-Attempt at implementing fixed-momentum-based scanning.
254
-
255
-#### ABACUS++T_1.0
256
-_[published 23 June 2011]_
257
-
258
-First version of new setup and logic for ABACUS. Implementation of all basic new ideas for state labelling and descending.
259
-
260
-
261
-### Earlier versions
262
-Earlier version of ABACUS are not documented here. The whole history is available in J.-S. Caux's private backfiles.
72
+## Version history
73
+Development of ABACUS was started by [J.-S. Caux](https://jscaux.org) around 2004 and has known an embarrassingly large number of versions. Some notes on the more recent versions can be found in file [ABACUS_version_history.md](ABACUS_version_history.md) in this directory.

+ 1
- 1
docs/.gitignore View File

@@ -1,2 +1,2 @@
1 1
 *
2
-!.gitignore
2
+!.gitignore

Loading…
Cancel
Save