001package cli;
002
003import kernels.EnergyDensityKernel;
004import models.*;
005
006
007
008/**
009 * (For Fig 5) Computes the lowest eigenvalue of the smeared "nonstandard" energy density
010 * defined with the function \(F_P(\theta) = \big((1-\nu) + \nu \cosh\theta \big) F_\mathrm{min}(\theta+i\pi)\). 
011 * This is done for the free and for the sinh-Gordon model (\(B=1)\), with \(\nu\) being varied 
012 * between given limits.
013 * 
014 * Takes four command line arguments: the number \(N\) of discretization steps,
015 * the rapidity cutoff \(R\), the maximum value of \(|\nu|\) and the number of steps
016 * to divide this interval in \(\nu\) in.
017 */
018public class NonstandardDensityAnalyzer extends CLIAnalyzer
019{   
020
021    public static void main(String[] args) {
022        int N = Integer.parseInt(args[0]);
023        double R = Double.parseDouble(args[1]);
024        double nuMax = Double.parseDouble(args[2]);
025        int nuN = Integer.parseInt(args[3]);
026        
027        String header = "Free / sinh-Gordon model with nonstandard density, N="+N+", R="+R + ", |nu| < " + nuMax + " in  " + nuN + " steps";
028
029        System.out.println(header);
030
031        double[][] res = new double[nuN][3];
032
033        IntegrableModel model1 = new FreeModel();
034        IntegrableModel model2 = new SinhGordonModel(1.0);
035
036        for (int i = 0; i < nuN; i++) {
037            double nu = -nuMax + 2 * nuMax / (nuN - 1) * i;
038            EnergyDensityKernel k1 = new EnergyDensityKernel(model1, 1.0, nu, 0, 0.1);
039            if (Math.abs(nu) >= 0.5) {
040                k1.disableEVCheck();
041            }
042            EnergyDensityKernel k2 = new EnergyDensityKernel(model2, 1.0,  nu, 0, 0.1);
043            if (Math.abs(nu) >= 0.5 / model2.FminIpi(10.0)) {
044                k2.disableEVCheck();
045            }
046
047            res[i][0] = nu;
048            res[i][1] = k1.findLowestEigenvalue(N, R);
049            res[i][2] = k2.findLowestEigenvalue(N, R);
050        }
051
052        writeDatafile("NonstandardDensity", header, res);
053
054    }
055}