Add scripts for c scan with k_range
This commit is contained in:
		
							parent
							
								
									362d856e74
								
							
						
					
					
						commit
						9276bc8008
					
				| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
#! /bin/zsh
 | 
			
		||||
 | 
			
		||||
# For given N (L), this
 | 
			
		||||
# computes the required DSF (up to required sumrule)
 | 
			
		||||
# over a range of values of c_int.
 | 
			
		||||
 | 
			
		||||
if [[ $# -ne 5 ]]; then
 | 
			
		||||
    echo "Arguments needed: whichDSF, kBT, target_sumrule, N, nkmax (max momentum in units of kF/4)."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $1 != 'd' && $1 != 'g' && $1 != 'o' ]]; then
 | 
			
		||||
    echo "Only the d, g and o scanning options are implemented."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $2 -lt 0 ]]; then
 | 
			
		||||
    echo "Temperature kBT must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $3 -lt 0 || $3 -gt 1 ]]; then
 | 
			
		||||
    echo "Requirement: 0 < target_sumrule < 1."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $4 -lt 0 ]]; then
 | 
			
		||||
    echo "N must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $5 -lt 0 ]]; then
 | 
			
		||||
    echo "nkmax must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
whichDSF=$1
 | 
			
		||||
kBT=$2
 | 
			
		||||
target_sumrule=$3
 | 
			
		||||
N=$4
 | 
			
		||||
nkmax=$5
 | 
			
		||||
 | 
			
		||||
correlator='rho-rho'
 | 
			
		||||
if [[ $whichDSF == 'o' ]]; then
 | 
			
		||||
    correlator='psidag-psi'
 | 
			
		||||
elif [[ $whichDSF == 'g' ]]; then
 | 
			
		||||
    correlator='psi-psidag'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
iKmax=$(($nkmax * $N/8))
 | 
			
		||||
 | 
			
		||||
Max_Secs=3600
 | 
			
		||||
refine=0
 | 
			
		||||
 | 
			
		||||
#clist=(1024 512 256 128 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625)
 | 
			
		||||
 | 
			
		||||
# List of interactions: fractional powers of 2
 | 
			
		||||
clist_raw=()
 | 
			
		||||
for nc in {-128..128}
 | 
			
		||||
do
 | 
			
		||||
    clist_raw=($clist_raw $(( 4 * 2**($nc/16.) )))
 | 
			
		||||
done
 | 
			
		||||
# Now cast the integer values to true integers
 | 
			
		||||
zmodload zsh/mathfunc
 | 
			
		||||
clist=()
 | 
			
		||||
for c in $clist_raw
 | 
			
		||||
do
 | 
			
		||||
    if [[ $((floor($c))) == $((ceil($c))) ]]; then
 | 
			
		||||
	clist=($clist $((int($c))))
 | 
			
		||||
    else
 | 
			
		||||
	clist=($clist $c)
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
basedir="$(pwd)"
 | 
			
		||||
 | 
			
		||||
for c in $clist
 | 
			
		||||
do
 | 
			
		||||
    echo '** Starting run for c =' $c', N = '$N
 | 
			
		||||
    dir='Lieb-Liniger/'$correlator'/T_'$kBT'/c_scan/k_range/k_0_to_'${(l:2::0:)nkmax}'kFo4/sr_'$target_sumrule'/store/data/N_'$N'/c_'$c
 | 
			
		||||
    mkdir -p $dir
 | 
			
		||||
    cd $dir
 | 
			
		||||
    LiebLin_DSF $whichDSF $c $N $N 0 $iKmax $kBT $Max_Secs $target_sumrule $refine
 | 
			
		||||
    cd $basedir
 | 
			
		||||
    echo ' Successfully computed DSFs for c =' $c', N = '$N'.\n'
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,92 @@
 | 
			
		|||
#! /bin/zsh
 | 
			
		||||
 | 
			
		||||
# For given N (L) this
 | 
			
		||||
# computes the smoothened dsfs for a `build_LiebLin_c_scan_k_range` run.
 | 
			
		||||
 | 
			
		||||
if [[ $# -ne 6 ]]; then
 | 
			
		||||
    echo "Arguments needed: whichDSF, kBT, target_sumrule, N, nkmax (max momentum in units of kF/4), width."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $1 != 'd' && $1 != 'g' && $1 != 'o' ]]; then
 | 
			
		||||
    echo "Only the d, g and o scanning options are implemented."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $2 -lt 0 ]]; then
 | 
			
		||||
    echo "Temperature kBT must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $3 -lt 0 || $3 -gt 1 ]]; then
 | 
			
		||||
    echo "Requirement: 0 < target_sumrule < 1."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $4 -lt 0 ]]; then
 | 
			
		||||
    echo "N must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $5 -lt 0 ]]; then
 | 
			
		||||
    echo "nkmax must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $6 -lt 0 ]]; then
 | 
			
		||||
    echo "width must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
whichDSF=$1
 | 
			
		||||
kBT=$2
 | 
			
		||||
target_sumrule=$3
 | 
			
		||||
N=$4
 | 
			
		||||
nkmax=$5
 | 
			
		||||
width=$6
 | 
			
		||||
 | 
			
		||||
correlator='rho-rho'
 | 
			
		||||
if [[ $whichDSF == 'o' ]]; then
 | 
			
		||||
    correlator='psidag-psi'
 | 
			
		||||
elif [[ $whichDSF == 'g' ]]; then
 | 
			
		||||
    correlator='psi-psidag'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
iKmax=$(($nkmax * $N/8))
 | 
			
		||||
 | 
			
		||||
ommin=0
 | 
			
		||||
ommax=$(($nkmax*($nkmax - 8))) # use lower branch of 1ph continuum
 | 
			
		||||
Nom=1000
 | 
			
		||||
 | 
			
		||||
#clist=(1024 512 256 128 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625)
 | 
			
		||||
 | 
			
		||||
# List of interactions: fractional powers of 2
 | 
			
		||||
clist_raw=()
 | 
			
		||||
for nc in {-128..128}
 | 
			
		||||
do
 | 
			
		||||
    clist_raw=($clist_raw $(( 4 * 2**($nc/16.) )))
 | 
			
		||||
done
 | 
			
		||||
# Now cast the integer values to true integers
 | 
			
		||||
zmodload zsh/mathfunc
 | 
			
		||||
clist=()
 | 
			
		||||
for c in $clist_raw
 | 
			
		||||
do
 | 
			
		||||
    if [[ $((floor($c))) == $((ceil($c))) ]]; then
 | 
			
		||||
	clist=($clist $((int($c))))
 | 
			
		||||
    else
 | 
			
		||||
	clist=($clist $c)
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
basedir="$(pwd)"
 | 
			
		||||
 | 
			
		||||
for c in $clist
 | 
			
		||||
do
 | 
			
		||||
    echo '** Starting computation of DSFs for c =' $c', N = '$N
 | 
			
		||||
    dir='Lieb-Liniger/'$correlator'/T_'$kBT'/c_scan/k_range/k_0_to_'${(l:2::0:)nkmax}'kFo4/sr_'$target_sumrule'/store/data/N_'$N'/c_'$c
 | 
			
		||||
    cd $dir
 | 
			
		||||
    Smoothen_LiebLin_DSF_Scaled $whichDSF $c $N $N 0 $iKmax $kBT 0 $ommin $ommax $Nom $width
 | 
			
		||||
    cd $basedir
 | 
			
		||||
    echo ' Successfully computed DSFs for c =' $c', N = '$N'.\n'
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
#! /bin/zsh
 | 
			
		||||
 | 
			
		||||
# For given N (L) this
 | 
			
		||||
# produces an interactive (tunable c_int) plot for S(k, \omega)
 | 
			
		||||
# from data produced from `build_LiebLin_c_scan_k_range[_dsfs]` scripts.
 | 
			
		||||
 | 
			
		||||
if [[ $# -ne 6 ]]; then
 | 
			
		||||
    echo "Arguments needed: whichDSF, kBT, target_sumrule, N, nkmax (max momentum in units of kF/4), width."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $1 != 'd' && $1 != 'g' && $1 != 'o' ]]; then
 | 
			
		||||
    echo "Only the d, g and o scanning options are implemented."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $2 -lt 0 ]]; then
 | 
			
		||||
    echo "Temperature kBT must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $3 -lt 0 || $3 -gt 1 ]]; then
 | 
			
		||||
    echo "Requirement: 0 < target_sumrule < 1."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $4 -lt 0 ]]; then
 | 
			
		||||
    echo "N must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $5 -lt 0 ]]; then
 | 
			
		||||
    echo "nkmax must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ $6 -lt 0 ]]; then
 | 
			
		||||
    echo "width must be > 0."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
whichDSF=$1
 | 
			
		||||
kBT=$2
 | 
			
		||||
target_sumrule=$3
 | 
			
		||||
N=$4
 | 
			
		||||
nkmax=$5
 | 
			
		||||
width=$6
 | 
			
		||||
 | 
			
		||||
correlator='rho-rho'
 | 
			
		||||
if [[ $whichDSF == 'o' ]]; then
 | 
			
		||||
    correlator='psidag-psi'
 | 
			
		||||
elif [[ $whichDSF == 'g' ]]; then
 | 
			
		||||
    correlator='psi-psidag'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
iKmax=$(($nkmax * $N/8))
 | 
			
		||||
 | 
			
		||||
Max_Secs=3600
 | 
			
		||||
refine=0
 | 
			
		||||
 | 
			
		||||
#clist=(1024 512 256 128 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625)
 | 
			
		||||
 | 
			
		||||
# List of interactions: fractional powers of 2
 | 
			
		||||
clist_raw=()
 | 
			
		||||
for nc in {-128..128}
 | 
			
		||||
do
 | 
			
		||||
    clist_raw=($clist_raw $(( 4 * 2**($nc/16.) )))
 | 
			
		||||
done
 | 
			
		||||
# Now cast the integer values to true integers
 | 
			
		||||
zmodload zsh/mathfunc
 | 
			
		||||
clist=()
 | 
			
		||||
for c in $clist_raw
 | 
			
		||||
do
 | 
			
		||||
    if [[ $((floor($c))) == $((ceil($c))) ]]; then
 | 
			
		||||
	clist=($clist $((int($c))))
 | 
			
		||||
    else
 | 
			
		||||
	clist=($clist $c)
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
basedir="$(pwd)"
 | 
			
		||||
 | 
			
		||||
echo '** Starting run for N = '$N
 | 
			
		||||
dir='Lieb-Liniger/'$correlator'/T_'$kBT'/c_scan/k_range/k_0_to_'${(l:2::0:)nkmax}'kFo4/sr_'$target_sumrule'/store/plots'
 | 
			
		||||
mkdir -p $dir
 | 
			
		||||
cd $dir
 | 
			
		||||
plot_c_scan_k_range_dsfs.py $N $width
 | 
			
		||||
cd $basedir
 | 
			
		||||
echo ' Successfully computed DSFs for N = '$N'.\n'
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,6 @@ fig, ax = plt.subplots()
 | 
			
		|||
ax.set_xlim(omega[0], omega[-1])
 | 
			
		||||
# To determine the y axis limits, we look at the lowest value of c (sharpest peak)
 | 
			
		||||
dsfsmax = max(dsfs[str(clist[0])])
 | 
			
		||||
print('dsfsmax = ', dsfsmax)
 | 
			
		||||
 | 
			
		||||
ymax = 1.01 * dsfsmax
 | 
			
		||||
ymax=4
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
#! /usr/bin/env python
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Plot DSF.
 | 
			
		||||
 | 
			
		||||
Usage: python plot_dsf_k_range.py [omega file] [dsf file]
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import glob
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
import matplotlib.animation as animation
 | 
			
		||||
import numpy as np
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
N = str(sys.argv[1])
 | 
			
		||||
width = str(sys.argv[2])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Get the list of interactions which have been computed
 | 
			
		||||
dirlist = os.listdir('../data/N_%s' % N)
 | 
			
		||||
clist = sorted([float(c.lstrip('c_')) for c in dirlist])
 | 
			
		||||
 | 
			
		||||
# Get the K file
 | 
			
		||||
kfile = glob.glob('../data/N_%s/c_%s*/K_*' % (N, str(clist[0]).rstrip('.0')[:12]))[0]
 | 
			
		||||
k = np.loadtxt(kfile)
 | 
			
		||||
 | 
			
		||||
# Get the Omega file
 | 
			
		||||
omegafile = glob.glob('../data/N_%s/c_%s*/Omega*' % (N, str(clist[0]).rstrip('.0')[:12]))[0]
 | 
			
		||||
omega = np.loadtxt(omegafile)
 | 
			
		||||
 | 
			
		||||
# Load all the available dsfs from the data store
 | 
			
		||||
dsfs = {}
 | 
			
		||||
for c in clist:
 | 
			
		||||
    # Do some black magic here: for matching the interaction,
 | 
			
		||||
    # first try for exact match, stripping '.0' to treat integer values, e.g. 4.0 into 4
 | 
			
		||||
    # and then (if it doesn't work) use only the first 12 characters, plus wildcard, to cover rounding errors
 | 
			
		||||
    try:
 | 
			
		||||
        dsffile = glob.glob('../data/N_%s/c_%s/*_w_%s.dsfs' % (N, str(c).rstrip('.0'), width))[0]
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        dsffile = glob.glob('../data/N_%s/c_%s*/*_w_%s.dsfs' % (N, str(c).rstrip('.0')[:12], width))[0]
 | 
			
		||||
    dsfs[str(c)] = np.loadtxt(dsffile)
 | 
			
		||||
 | 
			
		||||
# Read some useful parameters from (last) file name:
 | 
			
		||||
elements = dsffile.rpartition('/')[2].split('_')
 | 
			
		||||
L = elements[5]
 | 
			
		||||
#N = elements[7]
 | 
			
		||||
iKmax = elements[14]
 | 
			
		||||
width = elements[22].rpartition('.')[0]
 | 
			
		||||
# which leads to
 | 
			
		||||
rho = int(N)/int(L)
 | 
			
		||||
#kokF = int(iK)*0.5/int(L)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fig, ax = plt.subplots()
 | 
			
		||||
 | 
			
		||||
# To determine the y axis limits, we look at the lowest value of c (sharpest peak)
 | 
			
		||||
dsfsmax = 0.5
 | 
			
		||||
 | 
			
		||||
ymax = omega[-1]
 | 
			
		||||
xtext = 0.05 * k[-1]
 | 
			
		||||
ytext = 0.9 * ymax
 | 
			
		||||
 | 
			
		||||
ax.text(xtext, ytext, f'c = {clist[0]:10.6f}', color='white', fontsize='large')
 | 
			
		||||
pcm = ax.pcolormesh(k, omega, dsfs[str(clist[0])], vmax=dsfsmax)
 | 
			
		||||
fig.colorbar(pcm, ax=ax)
 | 
			
		||||
def animate(i):
 | 
			
		||||
    ax.clear()
 | 
			
		||||
    ax.set_title(f'c scan, rho={rho} (N={N}), w={width}', fontsize='x-large')
 | 
			
		||||
    ax.text(xtext, ytext, f'c = {clist[i]:10.6f}', color='white', fontsize='x-large')
 | 
			
		||||
    ax.pcolormesh(k, omega, dsfs[str(clist[i])], vmax=dsfsmax)
 | 
			
		||||
 | 
			
		||||
ani = animation.FuncAnimation(fig, animate, frames=len(clist), interval=100, repeat=False)
 | 
			
		||||
 | 
			
		||||
outfilename = (dsffile.partition('_c_')[0].rpartition('/')[2] + '_c_scan_' +
 | 
			
		||||
               dsffile.partition('_c_')[2].partition('_')[2].partition('.dsfs')[0])
 | 
			
		||||
 | 
			
		||||
ani.save(outfilename + '.mp4')
 | 
			
		||||
 | 
			
		||||
with open(outfilename + '.html', 'w') as file:
 | 
			
		||||
    file.write(ani.to_html5_video())
 | 
			
		||||
 | 
			
		||||
#plt.show()
 | 
			
		||||
		Loading…
	
		Reference in New Issue