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 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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_" << 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_" << kBT;
  37. if (whichDSF == 'q') name << "_L2_" << L2;
  38. return;
  39. }
  40. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  41. LiebLin_Bethe_State& State, LiebLin_Bethe_State& RefScanState, string defaultScanStatename)
  42. {
  43. 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_" << State.c_int << "_L_" << State.L << "_N_" << State.N;
  54. if (defaultScanStatename == "") name << "_" << State.label;
  55. else name << "_" << defaultScanStatename;
  56. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  57. if (kBT > 0.0) name << "_kBT_" << kBT;
  58. if (whichDSF == 'q') name << "_L2_" << RefScanState.L;
  59. return;
  60. }
  61. // Heisenberg:
  62. void Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
  63. DP kBT, int N2, string defaultScanStatename)
  64. {
  65. name << "HEIS_";
  66. if (whichDSF == 'Z') name << "Z";
  67. else if (whichDSF == 'm') name << "Smp";
  68. else if (whichDSF == 'z') name << "Szz";
  69. else if (whichDSF == 'p') name << "Spm";
  70. else if (whichDSF == 'a') name << "SzSz";
  71. else if (whichDSF == 'b') name << "SzSm";
  72. else if (whichDSF == 'c') name << "SmSm";
  73. else if (whichDSF == 'q') name << "GeomQuench";
  74. else {
  75. cout << "Option tried (1): " << whichDSF << endl;
  76. ABACUSerror("Option not implemented in Data_File_Name");
  77. }
  78. name << "_D_" << Delta << "_N_" << N << "_M_";
  79. for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
  80. name << M;
  81. if (defaultScanStatename == "") name << "_" << M << "_0_"; // simulates label of ground state
  82. else name << "_" << defaultScanStatename;
  83. if (kBT > 0.0) name << "_kBT_" << kBT;
  84. if (whichDSF == 'q') name << "_N2_" << N2;
  85. return;
  86. }
  87. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  88. Heis_Bethe_State& State, Heis_Bethe_State& RefScanState, string defaultScanStatename)
  89. {
  90. name << "HEIS_";
  91. if (whichDSF == 'Z') name << "Z";
  92. else if (whichDSF == 'm') name << "Smp";
  93. else if (whichDSF == 'z') name << "Szz";
  94. else if (whichDSF == 'p') name << "Spm";
  95. else if (whichDSF == 'a') name << "SzSz";
  96. else if (whichDSF == 'b') name << "SzSm";
  97. else if (whichDSF == 'c') name << "SmSm";
  98. else if (whichDSF == 'q') name << "GeomQuench";
  99. else {
  100. cout << "Option tried (2): " << whichDSF << endl;
  101. ABACUSerror("Option not implemented in Data_File_Name");
  102. }
  103. name << "_D_" << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
  104. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
  105. name << State.base.Mdown;
  106. if (defaultScanStatename == "") name << "_" << State.label;
  107. else name << "_" << defaultScanStatename;
  108. if (kBT > 0.0) name << "_kBT_" << kBT;
  109. if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
  110. return;
  111. }
  112. // One-D spinless fermions: IN DEVELOPMENT
  113. /*
  114. void ODSLF_Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
  115. DP kBT, int N2, string defaultScanStatename)
  116. {
  117. name << "ODSLF_";
  118. if (whichDSF == 'Z') name << "Z";
  119. else if (whichDSF == 'm') name << "cdag_c";
  120. else if (whichDSF == 'z') name << "zz";
  121. else if (whichDSF == 'p') name << "c_cdag";
  122. else if (whichDSF == 'q') name << "GeomQuench";
  123. else ABACUSerror("Option not implemented in Data_File_Name");
  124. name << "_D_" << Delta << "_N_" << N << "_M_";
  125. for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
  126. name << M;
  127. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  128. if (kBT > 0.0) name << "_kBT_" << kBT;
  129. if (whichDSF == 'q') name << "_N2_" << N2;
  130. return;
  131. }
  132. void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
  133. ODSLF_Bethe_State& State, ODSLF_Bethe_State& RefScanState, string defaultScanStatename)
  134. {
  135. name << "ODSLF_";
  136. if (whichDSF == 'Z') name << "Z";
  137. else if (whichDSF == 'm') name << "cdag_c";
  138. else if (whichDSF == 'z') name << "zz";
  139. else if (whichDSF == 'p') name << "c_cdag";
  140. //else if (whichDSF == 'a') name << "SzSz";
  141. //else if (whichDSF == 'b') name << "SzSm";
  142. //else if (whichDSF == 'q') name << "GeomQuench";
  143. else ABACUSerror("Option not implemented in Data_File_Name");
  144. name << "_D_" << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
  145. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
  146. name << State.base.Mdown;
  147. if (fixed_iK) {
  148. name << "_iK_";
  149. for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(iKneeded))); ++i) name << "0";
  150. name << iKneeded;
  151. }
  152. if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
  153. if (kBT > 0.0) name << "_kBT_" << kBT;
  154. if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
  155. return;
  156. }
  157. */
  158. } // namespace ABACUS