ABACUS/src/UTILS/Data_File_Name.cc

304 lines
12 KiB
C++

/**********************************************************
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