123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /**********************************************************
-
- This software is part of J.-S. Caux's ABACUS library.
-
- Copyright (c) J.-S. Caux.
-
- -----------------------------------------------------------
-
- File: src/SCAN/Data_File_Name.cc
-
- Purpose: defines functions returning stringstreams for
- standardised file names.
-
- ***********************************************************/
-
- #include "ABACUS.h"
-
- using namespace std;
- using namespace ABACUS;
-
- namespace ABACUS {
-
- // For each model, two functions are given: the first uses physical parameters as arguments,
- // and can be called with functions `knowing' which model is dealt with.
- // The second is overloaded using the Bethe_State objects, and can be called in functions
- // which are universal to all models.
-
-
- // Lieb-Liniger:
-
- void Data_File_Name (stringstream& name, char whichDSF, DP c_int, DP L, int N, int iKmin, int iKmax,
- DP kBT, DP L2, string defaultScanStatename)
- {
- name << "LiebLin_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'd') name << "Rho_Rho";
- else if (whichDSF == 'g') name << "Psi_Psidag";
- else if (whichDSF == 'o') name << "Psidag_Psi";
- else if (whichDSF == 'q') name << "GeomQuench";
- else if (whichDSF == '1') name << "Type_I_Exp_Data";
- else if (whichDSF == 'B') name << "BECg2";
- else if (whichDSF == 'C') name << "BECoverlap";
- else ABACUSerror("Option not implemented in Data_File_Name");
-
- name << "_c_" << c_int << "_L_" << L << "_N_" << N;
- if (defaultScanStatename == "") name << "_" << N << "_0_"; // simulates label of ground state
- else name << "_" << defaultScanStatename;
- if (iKmin == iKmax) name << "_iK_" << iKmin;
- else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_L2_" << L2;
-
- return;
- }
-
- void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
- LiebLin_Bethe_State& State, LiebLin_Bethe_State& RefScanState, string defaultScanStatename)
- {
- name << "LiebLin_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'd') name << "Rho_Rho";
- else if (whichDSF == 'g') name << "Psi_Psidag";
- else if (whichDSF == 'o') name << "Psidag_Psi";
- else if (whichDSF == 'q') name << "GeomQuench";
- else if (whichDSF == '1') name << "Type_I_Exp_Data";
- else if (whichDSF == 'B') name << "BECg2";
- else if (whichDSF == 'C') name << "BECoverlap";
- else ABACUSerror("Option not implemented in Data_File_Name");
-
- name << "_c_" << State.c_int << "_L_" << State.L << "_N_" << State.N;
- if (defaultScanStatename == "") name << "_" << State.label;
- else name << "_" << defaultScanStatename;
- if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_L2_" << RefScanState.L;
-
- return;
- }
-
-
- // Heisenberg:
-
- void Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
- DP kBT, int N2, string defaultScanStatename)
- {
- name << "HEIS_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'm') name << "Smp";
- else if (whichDSF == 'z') name << "Szz";
- else if (whichDSF == 'p') name << "Spm";
- else if (whichDSF == 'a') name << "SzSz";
- else if (whichDSF == 'b') name << "SzSm";
- else if (whichDSF == 'c') name << "SmSm";
- else if (whichDSF == 'q') name << "GeomQuench";
- else {
- cout << "Option tried (1): " << whichDSF << endl;
- ABACUSerror("Option not implemented in Data_File_Name");
- }
-
- name << "_D_" << Delta << "_N_" << N << "_M_";
- for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
- name << M;
- if (defaultScanStatename == "") name << "_" << M << "_0_"; // simulates label of ground state
- else name << "_" << defaultScanStatename;
-
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_N2_" << N2;
-
- return;
- }
-
- void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
- Heis_Bethe_State& State, Heis_Bethe_State& RefScanState, string defaultScanStatename)
- {
- name << "HEIS_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'm') name << "Smp";
- else if (whichDSF == 'z') name << "Szz";
- else if (whichDSF == 'p') name << "Spm";
- else if (whichDSF == 'a') name << "SzSz";
- else if (whichDSF == 'b') name << "SzSm";
- else if (whichDSF == 'c') name << "SmSm";
- else if (whichDSF == 'q') name << "GeomQuench";
- else {
- cout << "Option tried (2): " << whichDSF << endl;
- ABACUSerror("Option not implemented in Data_File_Name");
- }
-
- name << "_D_" << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
- for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
- name << State.base.Mdown;
- if (defaultScanStatename == "") name << "_" << State.label;
- else name << "_" << defaultScanStatename;
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
-
- return;
- }
-
-
- // One-D spinless fermions: IN DEVELOPMENT
- /*
- void ODSLF_Data_File_Name (stringstream& name, char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax,
- DP kBT, int N2, string defaultScanStatename)
- {
- name << "ODSLF_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'm') name << "cdag_c";
- else if (whichDSF == 'z') name << "zz";
- else if (whichDSF == 'p') name << "c_cdag";
- else if (whichDSF == 'q') name << "GeomQuench";
- else ABACUSerror("Option not implemented in Data_File_Name");
-
- name << "_D_" << Delta << "_N_" << N << "_M_";
- for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name << "0";
- name << M;
-
- if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_N2_" << N2;
-
- return;
- }
-
- void Data_File_Name (stringstream& name, char whichDSF, int iKmin, int iKmax, DP kBT,
- ODSLF_Bethe_State& State, ODSLF_Bethe_State& RefScanState, string defaultScanStatename)
- {
- name << "ODSLF_";
- if (whichDSF == 'Z') name << "Z";
- else if (whichDSF == 'm') name << "cdag_c";
- else if (whichDSF == 'z') name << "zz";
- else if (whichDSF == 'p') name << "c_cdag";
- //else if (whichDSF == 'a') name << "SzSz";
- //else if (whichDSF == 'b') name << "SzSm";
- //else if (whichDSF == 'q') name << "GeomQuench";
- else ABACUSerror("Option not implemented in Data_File_Name");
-
- name << "_D_" << State.chain.Delta << "_N_" << State.chain.Nsites << "_M_";
- for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(State.base.Mdown))); ++i) name << "0";
- name << State.base.Mdown;
- if (fixed_iK) {
- name << "_iK_";
- for (int i = 0; i < int(log10(DP(State.chain.Nsites/2))) - int(log10(DP(iKneeded))); ++i) name << "0";
- name << iKneeded;
- }
- if (iKmin == iKmax) name << "_iK_" << iKmin; else name << "_iKmin_" << iKmin << "_iKmax_" << iKmax;
- if (kBT > 0.0) name << "_kBT_" << kBT;
- if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites;
-
- return;
- }
- */
-
- } // namespace ABACUS
|