/********************************************************** 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_" << setprecision(16) << 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_" << setprecision(16) << kBT; if (whichDSF == 'q') name << "_L2_" << L2; return; } string Data_Filename (char whichDSF, DP c_int, DP L, int N, int iKmin, int iKmax, DP kBT, DP L2, string defaultScanStatename) { string 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_" + DP_to_string(c_int) + "_L_" + DP_to_string(L) + "_N_" + to_string(N); if (defaultScanStatename == "") name += "_" + to_string(N) + "_0_"; // simulates label of ground state else name += "_" + defaultScanStatename; if (iKmin == iKmax) name += "_iK_" + to_string(iKmin); else name += "_iKmin_" + to_string(iKmin) + "_iKmax_" + to_string(iKmax); if (kBT > 0.0) name += "_kBT_" + DP_to_string(kBT); if (whichDSF == 'q') name += "_L2_" + DP_to_string(L2); return(name); } 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_" << setprecision(16) << 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_" << setprecision(16) << kBT; if (whichDSF == 'q') name << "_L2_" << RefScanState.L; return; } string Data_Filename (char whichDSF, int iKmin, int iKmax, DP kBT, LiebLin_Bethe_State& State, LiebLin_Bethe_State& RefScanState, string defaultScanStatename) { string 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_" + DP_to_string(State.c_int) + "_L_" + DP_to_string(State.L) + "_N_" + to_string(State.N); if (defaultScanStatename == "") name += "_" + State.label; else name += "_" + defaultScanStatename; if (iKmin == iKmax) name += "_iK_" + to_string(iKmin); else name += "_iKmin_" + to_string(iKmin) + "_iKmax_" + to_string(iKmax); if (kBT > 0.0) name += "_kBT_" + DP_to_string(kBT); if (whichDSF == 'q') name += "_L2_" + DP_to_string(RefScanState.L); return(name); } // 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_" << setprecision(16) << 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_" << setprecision(16) << kBT; if (whichDSF == 'q') name << "_N2_" << N2; return; } string Data_Filename (char whichDSF, DP Delta, int N, int M, int iKmin, int iKmax, DP kBT, int N2, string defaultScanStatename) { string 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_" + to_string(Delta) + "_N_" + to_string(N) + "_M_"; for (int i = 0; i < int(log10(DP(N/2))) - int(log10(DP(M))); ++i) name += "0"; name += to_string(M); if (defaultScanStatename == "") name += "_" + to_string(M) + "_0_"; // simulates label of ground state else name += "_" + defaultScanStatename; if (kBT > 0.0) name += "_kBT_" + to_string(kBT); if (whichDSF == 'q') name += "_N2_" + to_string(N2); return(name); } 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_" << setprecision(16) << 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_" << setprecision(16) << kBT; if (whichDSF == 'q') name << "_N2_" << RefScanState.chain.Nsites; return; } string Data_Filename (char whichDSF, int iKmin, int iKmax, DP kBT, Heis_Bethe_State& State, Heis_Bethe_State& RefScanState, string defaultScanStatename) { string 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_" + to_string(State.chain.Delta) + "_N_" + to_string(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 += to_string(State.base.Mdown); if (defaultScanStatename == "") name += "_" + State.label; else name += "_" + defaultScanStatename; if (kBT > 0.0) name += "_kBT_" + to_string(kBT); if (whichDSF == 'q') name += "_N2_" + to_string(RefScanState.chain.Nsites); return(name); } // 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