You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Data_File_Name.cc 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. /**********************************************************
  2. This software is part of J.-S. Caux's ABACUS library.
  3. Copyright (c) J.-S. Caux.
  4. -----------------------------------------------------------
  5. File: src/SCAN/Data_File_Name.cc
  6. Purpose: defines functions returning stringstreams for
  7. standardised file names.
  8. ***********************************************************/
  9. #include "ABACUS.h"
  10. using namespace std;
  11. using namespace ABACUS;
  12. namespace ABACUS {
  13. // For each model, two functions are given: the first uses physical parameters as arguments,
  14. // and can be called with functions `knowing' which model is dealt with.
  15. // The second is overloaded using the Bethe_State objects, and can be called in functions
  16. // which are universal to all models.
  17. // Lieb-Liniger:
  18. void Data_File_Name (stringstream& name, char whichDSF, DP c_int, DP L, int N, int iKmin, int iKmax,
  19. DP kBT, DP L2, string defaultScanStatename)
  20. {
  21. name << "LiebLin_";
  22. if (whichDSF == 'Z') name << "Z";
  23. else if (whichDSF == 'd') name << "rho-rho";
  24. else if (whichDSF == 'g') name << "psi-psidag";
  25. else if (whichDSF == 'o') name << "psidag-psi";
  26. else if (whichDSF == 'q') name << "GeomQuench";
  27. else if (whichDSF == '1') name << "Type_I_Exp_Data";
  28. else if (whichDSF == 'B') name << "BECg2";
  29. else if (whichDSF == 'C') name << "BECoverlap";
  30. else ABACUSerror("Option not implemented in Data_File_Name");
  31. name << "_c_" << setprecision(16) << c_int << "_L_" << L << "_N_" << N;
  32. if (defaultScanStatename == "") name << "_" << N << "_0_"; // simulates label of ground state
  33. else name << "_" << defaultScanStatename;
  34. if (iKmin == iKmax) name << "_iK_" << iKmin;
  35. else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  36. if (kBT > 0.0) name << "_kBT_" << setprecision(16) << kBT;
  37. if (whichDSF == 'q') name << "_L2_" << L2;
  38. return;
  39. }
  40. string Data_Filename (char whichDSF, DP c_int, DP L, int N, int iKmin, int iKmax,
  41. DP kBT, DP L2, string defaultScanStatename)
  42. {
  43. string name = "LiebLin_";
  44. if (whichDSF == 'Z') name += "Z";
  45. else if (whichDSF == 'd') name += "rho-rho";
  46. else if (whichDSF == 'g') name += "psi-psidag";
  47. else if (whichDSF == 'o') name += "psidag-psi";
  48. else if (whichDSF == 'q') name += "GeomQuench";
  49. else if (whichDSF == '1') name += "Type_I_Exp_Data";
  50. else if (whichDSF == 'B') name += "BECg2";
  51. else if (whichDSF == 'C') name += "BECoverlap";
  52. else ABACUSerror("Option not implemented in Data_File_Name");
  53. name += "_c_" + DP_to_string(c_int) + "_L_" + DP_to_string(L) + "_N_" + to_string(N);
  54. if (defaultScanStatename == "") name += "_" + to_string(N) + "_0_"; // simulates label of ground state
  55. else name += "_" + defaultScanStatename;
  56. if (iKmin == iKmax) name += "_iK_" + to_string(iKmin);
  57. else name += "_iKmin_" + to_string(iKmin) + "_iKmax_" + to_string(iKmax);
  58. if (kBT > 0.0) name += "_kBT_" + DP_to_string(kBT);
  59. if (whichDSF == 'q') name += "_L2_" + DP_to_string(L2);
  60. return(name);
  61. }
  62. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  63. LiebLin_Bethe_State& State, LiebLin_Bethe_State& RefScanState, string defaultScanStatename)
  64. {
  65. name << "LiebLin_";
  66. if (whichDSF == 'Z') name << "Z";
  67. else if (whichDSF == 'd') name << "rho-rho";
  68. else if (whichDSF == 'g') name << "psi-psidag";
  69. else if (whichDSF == 'o') name << "psidag-psi";
  70. else if (whichDSF == 'q') name << "GeomQuench";
  71. else if (whichDSF == '1') name << "Type_I_Exp_Data";
  72. else if (whichDSF == 'B') name << "BECg2";
  73. else if (whichDSF == 'C') name << "BECoverlap";
  74. else ABACUSerror("Option not implemented in Data_File_Name");
  75. name << "_c_" << setprecision(16) << State.c_int << "_L_" << State.L << "_N_" << State.N;
  76. if (defaultScanStatename == "") name << "_" << State.label;
  77. else name << "_" << defaultScanStatename;
  78. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  79. if (kBT > 0.0) name << "_kBT_" << setprecision(16) << kBT;
  80. if (whichDSF == 'q') name << "_L2_" << RefScanState.L;
  81. return;
  82. }
  83. string Data_Filename (char whichDSF, int iKmin, int iKmax, DP kBT,
  84. LiebLin_Bethe_State& State, LiebLin_Bethe_State& RefScanState,
  85. string defaultScanStatename)
  86. {
  87. string name = "LiebLin_";
  88. if (whichDSF == 'Z') name += "Z";
  89. else if (whichDSF == 'd') name += "rho-rho";
  90. else if (whichDSF == 'g') name += "psi-psidag";
  91. else if (whichDSF == 'o') name += "psidag-psi";
  92. else if (whichDSF == 'q') name += "GeomQuench";
  93. else if (whichDSF == '1') name += "Type_I_Exp_Data";
  94. else if (whichDSF == 'B') name += "BECg2";
  95. else if (whichDSF == 'C') name += "BECoverlap";
  96. else ABACUSerror("Option not implemented in Data_File_Name");
  97. name += "_c_" + DP_to_string(State.c_int) + "_L_" + DP_to_string(State.L) + "_N_" + to_string(State.N);
  98. if (defaultScanStatename == "") name += "_" + State.label;
  99. else name += "_" + defaultScanStatename;
  100. if (iKmin == iKmax) name += "_iK_" + to_string(iKmin);
  101. else name += "_iKmin_" + to_string(iKmin) + "_iKmax_" + to_string(iKmax);
  102. if (kBT > 0.0) name += "_kBT_" + DP_to_string(kBT);
  103. if (whichDSF == 'q') name += "_L2_" + DP_to_string(RefScanState.L);
  104. return(name);
  105. }
  106. // Heisenberg:
  107. void Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
  108. DP kBT, int N2, string defaultScanStatename)
  109. {
  110. name << "HEIS_";
  111. if (whichDSF == 'Z') name << "Z";
  112. else if (whichDSF == 'm') name << "Smp";
  113. else if (whichDSF == 'z') name << "Szz";
  114. else if (whichDSF == 'p') name << "Spm";
  115. else if (whichDSF == 'a') name << "SzSz";
  116. else if (whichDSF == 'b') name << "SzSm";
  117. else if (whichDSF == 'c') name << "SmSm";
  118. else if (whichDSF == 'q') name << "GeomQuench";
  119. else {
  120. cout << "Option tried (1): " << whichDSF << endl;
  121. ABACUSerror("Option not implemented in Data_File_Name");
  122. }
  123. name << "_D_" << setprecision(16) << Delta << "_N_" << N << "_M_";
  124. for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
  125. name << M;
  126. if (defaultScanStatename == "") name << "_" << M << "_0_"; // simulates label of ground state
  127. else name << "_" << defaultScanStatename;
  128. if (kBT > 0.0) name << "_kBT_" << setprecision(16) << kBT;
  129. if (whichDSF == 'q') name << "_N2_" << N2;
  130. return;
  131. }
  132. string Data_Filename (char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
  133. DP kBT, int N2, string defaultScanStatename)
  134. {
  135. string name = "HEIS_";
  136. if (whichDSF == 'Z') name += "Z";
  137. else if (whichDSF == 'm') name += "Smp";
  138. else if (whichDSF == 'z') name += "Szz";
  139. else if (whichDSF == 'p') name += "Spm";
  140. else if (whichDSF == 'a') name += "SzSz";
  141. else if (whichDSF == 'b') name += "SzSm";
  142. else if (whichDSF == 'c') name += "SmSm";
  143. else if (whichDSF == 'q') name += "GeomQuench";
  144. else {
  145. cout << "Option tried (1): " << whichDSF << endl;
  146. ABACUSerror("Option not implemented in Data_File_Name");
  147. }
  148. name += "_D_" + to_string(Delta) + "_N_" + to_string(N) + "_M_";
  149. for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name += "0";
  150. name += to_string(M);
  151. if (defaultScanStatename == "") name += "_" + to_string(M) + "_0_"; // simulates label of ground state
  152. else name += "_" + defaultScanStatename;
  153. if (kBT > 0.0) name += "_kBT_" + to_string(kBT);
  154. if (whichDSF == 'q') name += "_N2_" + to_string(N2);
  155. return(name);
  156. }
  157. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  158. Heis_Bethe_State& State, Heis_Bethe_State& RefScanState, string defaultScanStatename)
  159. {
  160. name << "HEIS_";
  161. if (whichDSF == 'Z') name << "Z";
  162. else if (whichDSF == 'm') name << "Smp";
  163. else if (whichDSF == 'z') name << "Szz";
  164. else if (whichDSF == 'p') name << "Spm";
  165. else if (whichDSF == 'a') name << "SzSz";
  166. else if (whichDSF == 'b') name << "SzSm";
  167. else if (whichDSF == 'c') name << "SmSm";
  168. else if (whichDSF == 'q') name << "GeomQuench";
  169. else {
  170. cout << "Option tried (2): " << whichDSF << endl;
  171. ABACUSerror("Option not implemented in Data_File_Name");
  172. }
  173. name << "_D_" << setprecision(16) << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
  174. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
  175. name << State.base.Mdown;
  176. if (defaultScanStatename == "") name << "_" << State.label;
  177. else name << "_" << defaultScanStatename;
  178. if (kBT > 0.0) name << "_kBT_" << setprecision(16) << kBT;
  179. if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
  180. return;
  181. }
  182. string Data_Filename (char whichDSF, int iKmin, int iKmax, DP kBT,
  183. Heis_Bethe_State& State, Heis_Bethe_State& RefScanState, string defaultScanStatename)
  184. {
  185. string name = "HEIS_";
  186. if (whichDSF == 'Z') name += "Z";
  187. else if (whichDSF == 'm') name += "Smp";
  188. else if (whichDSF == 'z') name += "Szz";
  189. else if (whichDSF == 'p') name += "Spm";
  190. else if (whichDSF == 'a') name += "SzSz";
  191. else if (whichDSF == 'b') name += "SzSm";
  192. else if (whichDSF == 'c') name += "SmSm";
  193. else if (whichDSF == 'q') name += "GeomQuench";
  194. else {
  195. cout << "Option tried (2): " << whichDSF << endl;
  196. ABACUSerror("Option not implemented in Data_File_Name");
  197. }
  198. name += "_D_" + to_string(State.chain.Delta) + "_N_" + to_string(State.chain.Nsites) + "_M_";
  199. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name += "0";
  200. name += to_string(State.base.Mdown);
  201. if (defaultScanStatename == "") name += "_" + State.label;
  202. else name += "_" + defaultScanStatename;
  203. if (kBT > 0.0) name += "_kBT_" + to_string(kBT);
  204. if (whichDSF == 'q') name += "_N2_" + to_string(RefScanState.chain.Nsites);
  205. return(name);
  206. }
  207. // One-D spinless fermions: IN DEVELOPMENT
  208. /*
  209. void ODSLF_Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
  210. DP kBT, int N2, string defaultScanStatename)
  211. {
  212. name << "ODSLF_";
  213. if (whichDSF == 'Z') name << "Z";
  214. else if (whichDSF == 'm') name << "cdag_c";
  215. else if (whichDSF == 'z') name << "zz";
  216. else if (whichDSF == 'p') name << "c_cdag";
  217. else if (whichDSF == 'q') name << "GeomQuench";
  218. else ABACUSerror("Option not implemented in Data_File_Name");
  219. name << "_D_" << Delta << "_N_" << N << "_M_";
  220. for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
  221. name << M;
  222. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  223. if (kBT > 0.0) name << "_kBT_" << kBT;
  224. if (whichDSF == 'q') name << "_N2_" << N2;
  225. return;
  226. }
  227. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  228. ODSLF_Bethe_State& State, ODSLF_Bethe_State& RefScanState, string defaultScanStatename)
  229. {
  230. name << "ODSLF_";
  231. if (whichDSF == 'Z') name << "Z";
  232. else if (whichDSF == 'm') name << "cdag_c";
  233. else if (whichDSF == 'z') name << "zz";
  234. else if (whichDSF == 'p') name << "c_cdag";
  235. //else if (whichDSF == 'a') name << "SzSz";
  236. //else if (whichDSF == 'b') name << "SzSm";
  237. //else if (whichDSF == 'q') name << "GeomQuench";
  238. else ABACUSerror("Option not implemented in Data_File_Name");
  239. name << "_D_" << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
  240. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
  241. name << State.base.Mdown;
  242. if (fixed_iK) {
  243. name << "_iK_";
  244. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(iKneeded))); ++i) name << "0";
  245. name << iKneeded;
  246. }
  247. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  248. if (kBT > 0.0) name << "_kBT_" << kBT;
  249. if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
  250. return;
  251. }
  252. */
  253. } // namespace ABACUS