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}