123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #! /bin/zsh
-
- # For given N (L), this
- # computes the required DSF (up to required sumrule)
- # over a range of values of c_int.
-
- # The data can then be used to produce animated graphs (with c_int evolving),
- # see the `c_scan_N_fixed_dsfs[_plot]` scripts.
-
- if [[ $# -ne 7 ]]; then
- echo "Arguments needed: whichDSF, kBT, target_sumrule, N, nkmax (max momentum in units of kF/4), Max_Secs (per c), refine."
- 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 "Max_Secs must be > 0."
- exit 1
- fi
-
- if [[ $7 != 0 && $7 != 1 ]]; then
- echo "refine must be 0 (false) or 1 (true)."
- exit 1
- fi
-
- timestart=$(date +%s)
-
- whichDSF=$1
- kBT=$2
- target_sumrule=$3
- N=$4
- nkmax=$5
- Max_Secs=$6
- refine=$7
-
- correlator='rho-rho'
- if [[ $whichDSF == 'o' ]]; then
- correlator='psidag-psi'
- elif [[ $whichDSF == 'g' ]]; then
- correlator='psi-psidag'
- fi
-
- mkdir -p logs
- logfile='logs/c_scan_N_fixed_'$whichDSF'_kBT_'$kBT'_sr_'$target_sumrule'_N_'$N'_nkmax_'$nkmax'_'$(date '+%Y-%m-%d-%Hh%M')'.log'
- touch $logfile
-
- iKmax=$(($nkmax * $N/8))
-
-
- # List of interactions: fractional powers of 2
- clist_raw=()
- for nc in {-160..160}
- 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)"
-
- # Safety barrier:
- # if directory exists, don't do anything and request directory deletion before proceeding
- dircheck='Lieb-Liniger/'$correlator'/T_'$kBT'/c_scan_N_fixed/k_0_to_'${(l:2::0:)nkmax}'kFo4/sr_'$target_sumrule'/store/data/N_'$N
- if [[ -d $dircheck ]]; then
- echo 'A c scan with these parameters already exists. Aborting.'
- echo 'If you really want to run this command, please first delete directory:\n'$dircheck
- exit 1
- fi
-
-
- for c in $clist
- do
- echo '** Starting run for c =' $c', N = '$N | tee -a $logfile
- dir='Lieb-Liniger/'$correlator'/T_'$kBT'/c_scan_N_fixed/k_0_to_'${(l:2::0:)nkmax}'kFo4/sr_'$target_sumrule'/store/data/N_'$N'/c_'$c
- mkdir -p $dir
- cd $dir
- clock1=$(date +%s)
- LiebLin_DSF $whichDSF $c $N $N 0 $iKmax $kBT $Max_Secs $target_sumrule $refine
- clock2=$(date +%s)
- dt=$(($clock2 - $clock1))
- dt_hrs=$(($dt/3600))
- dt_min=$((($dt - 3600*$dt_hrs)/60))
- dt_sec=$(($dt - 3600*$dt_hrs - 60*$dt_min))
- cd $basedir
- echo '++ Successfully computed DSFs for c =' $c', N = '$N'.' | tee -a $logfile
- echo 'Time required: '$dt_hrs'h '$dt_min'm '$dt_sec's.\n' | tee -a $logfile
- done
-
- echo '\n++ Successfully completed c_scan_N_fixed_data for N = '$N' on '$(date '+%Y-%m-%d-%Hh%M')'.\n' | tee -a $logfile
-
- timestop=$(date +%s)
-
- duration=$(($timestop - $timestart))
- hours=$(($duration/3600))
- minutes=$((($duration - 3600*$hours)/60))
- seconds=$(($duration - 3600*$hours - 60*$minutes)) # don't bother printing
- echo 'Total time required: '$hours'h '$minutes'm.\n' | tee -a $logfile
|