func TestPlotX2VsT(t *testing.T) { flag.Parse() if !(*testPlot || *longPlot) { return } var plotEnvs []interface{} var errs []error wd, _ := os.Getwd() cachePath := wd + "/__data_cache_tempLow" if *loadCache { var err error plotEnvs, errs, err = tempAll.LoadEnvCache(cachePath) if err != nil { t.Fatal(err) } } else { envs, err := lowDefaultEnvSet(*longPlot) if err != nil { t.Fatal(err) } // solve the full system eps := 1e-9 plotEnvs, errs = tempAll.MultiSolve(envs, eps, eps, D1MuBetaSolve) // cache results for future use err = tempAll.SaveEnvCache(cachePath, plotEnvs, errs) if err != nil { t.Fatal(err) } } Xs := getXs(plotEnvs) // T vs F0 plots vars := plots.GraphVars{"F0", "", []string{"Tz", "Thp", "X", "Be_field"}, []string{"t_z", "t_h^{\\prime}", "x", "eB"}, nil, tempAll.GetTemp} fileLabel := "plot_data.T_F0" grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabel, plots.XLABEL_KEY: "$F_0$", plots.YLABEL_KEY: "$T$"} err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making T(F0) plot: %v", err) } // X2 vs T plots fileLabel = "plot_data.x2_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.XLABEL_KEY] = "$T$" graphParams[plots.YLABEL_KEY] = "$x_2$" vars.X = "" vars.XFunc = tempAll.GetTemp vars.YFunc = tempCrit.GetX2 err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making X2(T) plot: %v", err) } // Mu_h vs T plots fileLabel = "plot_data.mu_h_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$\\mu_h$" vars.Y = "Mu_h" vars.YFunc = nil err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making Mu_h(T) plot: %v", err) } // if looking for magnetization plot, make that plot and don't get Cv if *magnetization_calc { fileLabel = "plot_data.M_eB" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.XLABEL_KEY] = "$eB$" graphParams[plots.YLABEL_KEY] = "$M$" vars.X = "Be_field" vars.XFunc = nil vars.Y = "" vars.YFunc = tempCrit.GetMagnetization vars.Params = []string{"Tz", "Thp", "X", "F0"} vars.ParamLabels = []string{"t_z", "t_h^{\\prime}", "x", "F_0"} err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making M plot: %v", err) } return } // calculate specific heat contributions SHenvs := make([]interface{}, len(plotEnvs)) F := func(i int, cerr chan<- error) { pe := plotEnvs[i] if pe == nil { cerr <- errors.New("pe is nil") return } if errs[i] != nil { cerr <- errs[i] return } env, ok := pe.(tempAll.Environment) if !ok { cerr <- errors.New("pe is not Environment") } X2, err := tempCrit.X2(&env) if err != nil { cerr <- err return } SHenvs[i] = SpecificHeatEnv{env, X2, 0.0, 0.0} if X2 == 0.0 { cerr <- nil return } sh_1, err := HolonSpecificHeat(&env) if err != nil { cerr <- err return } fmt.Printf("sh_1 = %f\n", sh_1) sh_2, err := PairSpecificHeat(&env) if err != nil { cerr <- err return } fmt.Printf("sh_2 = %f\n", sh_2) SHenvs[i] = SpecificHeatEnv{env, X2, sh_1, sh_2} cerr <- nil } SHerrs := parallel.Run(F, len(plotEnvs)) for _, err := range SHerrs { if err != nil { fmt.Println(err) } } SHenvs = fixXs(SHenvs, Xs) // specific heat plots fileLabel = "plot_data.SH-1_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$C_V^{1}$" vars.XFunc = GetSHTemp vars.Y = "SH_1" vars.YFunc = nil err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } fileLabel = "plot_data.SH-2_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$C_V^{2}$" vars.Y = "SH_2" err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } SH12 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_1 + env.SH_2 } fileLabel = "plot_data.SH-12_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$C_V^{12}$" vars.Y = "" vars.YFunc = SH12 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } // C_V / T = C_V * Beta Gamma := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return SH12(d) * env.Beta } fileLabel = "plot_data.gamma-12_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$\\gamma^{12}$" vars.YFunc = Gamma err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } Gamma1 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_1 * env.Beta } fileLabel = "plot_data.gamma-1_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$\\gamma^{1}$" vars.YFunc = Gamma1 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } Gamma2 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_2 * env.Beta } fileLabel = "plot_data.gamma-2_mu_b" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$\\gamma^{2}$" vars.YFunc = Gamma2 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } }
func TestPlotX2VsMu_b(t *testing.T) { flag.Parse() if !(*testPlot || *longPlot) { return } var plotEnvs []interface{} var errs []error wd, _ := os.Getwd() cachePath := wd + "/__data_cache_tempFluc" if *loadCache { var err error plotEnvs, errs, err = tempAll.LoadEnvCache(cachePath) if err != nil { t.Fatal(err) } } else { envs, err := flucDefaultEnvSet(*longPlot) if err != nil { t.Fatal(err) } // solve the full system eps := 1e-9 plotEnvs, errs = tempAll.MultiSolve(envs, eps, eps, FlucTempSolve) // cache results for future use err = tempAll.SaveEnvCache(cachePath, plotEnvs, errs) if err != nil { t.Fatal(err) } } Xs := getXs(plotEnvs) // T vs Mu_b plots vars := plots.GraphVars{"Mu_b", "", []string{"Tz", "Thp", "X", "Be_field"}, []string{"t_z", "t_h^{\\prime}", "x", "eB"}, nil, tempAll.GetTemp} fileLabel := "plot_data.T_mu_b" grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabel, plots.XLABEL_KEY: "$\\mu_b$", plots.YLABEL_KEY: "$T$"} if !*skipPlots { err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making T(Mu_b) plot: %v", err) } } // X2 vs T plots fileLabel = "plot_data.x2_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.XLABEL_KEY] = "$T$" graphParams[plots.YLABEL_KEY] = "$x_2$" vars.X = "" vars.XFunc = tempAll.GetTemp vars.YFunc = tempCrit.GetX2 if !*skipPlots { err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making X2(T) plot: %v", err) } } // Mu_h vs T plots fileLabel = "plot_data.mu_h_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$\\mu_h$" vars.Y = "Mu_h" vars.YFunc = nil if !*skipPlots { err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making Mu_h plot: %v", err) } } // omega(q) parameters (a, b) vs T get_fit := func(data interface{}, i int) float64 { env := data.(tempAll.Environment) if env.FixedPairCoeffs { if i == 0 || i == 1 { return env.A } else { return env.B } } fit, err := tempCrit.OmegaFit(&env, tempCrit.OmegaPlus) if err != nil { fmt.Printf("%v\n", err) } return fit[i] } get_a := func(data interface{}) float64 { return get_fit(data, 0) } get_b := func(data interface{}) float64 { return get_fit(data, 2) } fileLabel = "plot_data.a_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$a$" vars.Y = "" vars.YFunc = get_a if !*skipPlots { err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making a plot: %v", err) } } fileLabel = "plot_data.b_T" graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.YLABEL_KEY] = "$b$" vars.Y = "" vars.YFunc = get_b if !*skipPlots { err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making b plot: %v", err) } } // if looking for magnetization plot, make that plot and don't get Cv if *magnetization_calc && !*skipPlots { fileLabel = "plot_data.M_eB" //fileLabel := "plot_data.M_eB" //graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabel, plots.XLABEL_KEY: "$eB$", plots.YLABEL_KEY: "$M$"} graphParams[plots.FILE_KEY] = wd + "/" + fileLabel graphParams[plots.XLABEL_KEY] = "$eB$" graphParams[plots.YLABEL_KEY] = "$M$" //vars := plots.GraphVars{"Be_field", "", []string{"Tz", "Thp", "X", "Mu_b"}, []string{"t_z", "t_h^{\\prime}", "x", "\\mu_b"}, nil, tempCrit.GetMagnetization} vars.X = "Be_field" vars.XFunc = nil vars.Y = "" vars.YFunc = tempCrit.GetMagnetization vars.Params = []string{"Tz", "Thp", "X", "Mu_b"} vars.ParamLabels = []string{"t_z", "t_h^{\\prime}", "x", "\\mu_b"} //grapherPath := wd + "/../plots/grapher.py" err := plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { t.Fatalf("error making M plot: %v", err) } return } // calculate specific heat contributions SH_envs := makeSHEnvs(plotEnvs, errs, Xs) // specific heat plots fileLabelSH1 := "plot_data.SH-1_mu_b" fileLabelSH2 := "plot_data.SH-2_mu_b" fileLabelSH12 := "plot_data.SH-12_mu_b" fileLabelGamma12 := "plot_data.gamma-12_mu_b" fileLabelGamma1 := "plot_data.gamma-1_mu_b" fileLabelGamma2 := "plot_data.gamma-2_mu_b" err := makeSHPlots(SH_envs, errs, fileLabelSH1, fileLabelSH2, fileLabelSH12, fileLabelGamma1, fileLabelGamma2, fileLabelGamma12) if err != nil { t.Fatalf("error making specific heat plot: %v", err) } }