195 рядки
7.2 KiB
C++
195 рядки
7.2 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_" << 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
|