// Solve each given Environment and plot it. func solveAndPlot(envs []*tempAll.Environment, epsabs, epsrel float64, vars plots.GraphVars, xyLabels []string, fileLabelF0, fileLabelMu, fileLabelD1, xmax string) error { // solve var plotEnvs []interface{} var errs []error if *plotFS || *preciseFS { plotEnvs, errs = tempAll.MultiSolve(envs, epsabs, epsrel, SolveNoninteracting) } else { plotEnvs, errs = tempAll.MultiSolve(envs, epsabs, epsrel, ZeroTempSolve) } wd, _ := os.Getwd() grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabelF0, plots.XLABEL_KEY: xyLabels[0], plots.YLABEL_KEY: xyLabels[1], plots.YMIN_KEY: "0.0", "xmax": xmax} if !*plotFS && !*preciseFS { // plot F0 err := plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, *printerPlots) if err != nil { return fmt.Errorf("error making plots: %v", err) } } // plot Mu_h graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu graphParams[plots.YLABEL_KEY] = xyLabels[2] graphParams[plots.YMIN_KEY] = "" vars.Y = "Mu_h" err := plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, *printerPlots) if err != nil { return fmt.Errorf("error making plots: %v", err) } // plot D1 graphParams[plots.FILE_KEY] = wd + "/" + fileLabelD1 graphParams[plots.YLABEL_KEY] = xyLabels[3] vars.Y = "D1" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, *printerPlots) if err != nil { return fmt.Errorf("error making plots: %v", err) } graphParams["xmax"] = "" if *plotFS || *preciseFS { // plot Fermi surface for _, env := range envs { X := strconv.FormatFloat(env.X, 'f', 6, 64) Tz := strconv.FormatFloat(env.Tz, 'f', 6, 64) Thp := strconv.FormatFloat(env.Thp, 'f', 6, 64) outPrefix := wd + "/" + "plot_data.FermiSurface_x_" + X + "_tz_" + Tz + "_thp_" + Thp err = tempAll.FermiSurface(env, outPrefix, grapherPath, *preciseFS) if err != nil { return fmt.Errorf("error making plots: %v", err) } } } return nil }
func solveAndPlot(envs []*tempAll.Environment, epsabs, epsrel float64, fileLabelTp, fileLabelMu, fileLabelD1, xmax string) error { // solve plotEnvs, errs := tempAll.MultiSolve(envs, epsabs, epsrel, PairTempSolve) // T_p vs x plot vars := plots.GraphVars{"X", "", []string{"Tz", "Thp"}, []string{"t_z/t_0", "t_h^{\\prime}/t_0"}, nil, tempAll.GetTemp} wd, _ := os.Getwd() grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabelTp, plots.XLABEL_KEY: "$x_{eff}$", plots.YLABEL_KEY: "$T_p/t_0$", plots.YMIN_KEY: "0.0", "xmax": xmax} err := plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, false) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelTp + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // Mu_h vs x plot graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu graphParams[plots.YLABEL_KEY] = "$\\mu_h/t_0$" graphParams[plots.YMIN_KEY] = "" vars.Y = "Mu_h" vars.YFunc = nil err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, false) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // D1 vs x plot graphParams[plots.FILE_KEY] = wd + "/" + fileLabelD1 graphParams[plots.YLABEL_KEY] = "$D_1$" vars.Y = "D1" vars.YFunc = nil err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, false) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelD1 + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } return nil }
func solveAndPlot(envs []*tempAll.Environment, epsabs, epsrel float64, fileLabelMu_b, fileLabelMu_h, fileLabelD1, fileLabel_a, fileLabel_b, fileLabel_x2, fileLabel_x1 string) error { // solve plotEnvs, errs := tempAll.MultiSolve(envs, epsabs, epsrel, FlucTempSolve) // Mu_b vs T plot vars := plots.GraphVars{"", "Mu_b", []string{"Tz", "Thp", "X"}, []string{"t_z/t_0", "t_h^{\\prime}/t_0", "x_{eff}"}, tempAll.GetTemp, nil} wd, _ := os.Getwd() grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabelMu_b, plots.XLABEL_KEY: "$T$", plots.YLABEL_KEY: "$\\mu_{pair}/t_0$", plots.YMIN_KEY: ""} err := plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, false) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu_b + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // Mu_h vs T plots graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu_h graphParams[plots.YLABEL_KEY] = "$\\mu_h/t_0$" vars.Y = "Mu_h" err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelMu_h + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // D_1 vs T plots graphParams[plots.FILE_KEY] = wd + "/" + fileLabelD1 graphParams[plots.YLABEL_KEY] = "$D_1$" vars.Y = "D1" err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelD1 + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // x_2 vs T plots graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_x2 graphParams[plots.YLABEL_KEY] = "$x_2$" graphParams[plots.YMIN_KEY] = "0.0" vars.Y = "" vars.YFunc = tempCrit.GetX2 err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_x2 + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // x_1 vs T plots graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_x1 graphParams[plots.YLABEL_KEY] = "$x_1$" x1fn := func(data interface{}) float64 { env := data.(tempAll.Environment) return env.X - tempCrit.GetX2(data) } vars.Y = "" vars.YFunc = x1fn err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_x1 + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return 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) } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_a graphParams[plots.YLABEL_KEY] = "$a/t_0$" graphParams[plots.YMIN_KEY] = "" vars.Y = "" vars.YFunc = get_a err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_a + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_b graphParams[plots.YLABEL_KEY] = "$b/t_0$" vars.Y = "" vars.YFunc = get_b err = plots.MultiPlot(plotEnvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabel_b + "_BW_" err = plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } return nil }
func makeSHPlots(SHenvs []interface{}, errs []error, fileLabelSH1, fileLabelSH2, fileLabelSH12, fileLabelGamma1, fileLabelGamma2, fileLabelGamma12 string) error { wd, _ := os.Getwd() vars := plots.GraphVars{"", "", []string{"Tz", "Thp", "X", "Be_field"}, []string{"t_z", "t_h^{\\prime}", "x_{eff}", "eB"}, GetSHTemp, nil} grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.XLABEL_KEY: "$T$"} // specific heat from unpaired holons graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH1 graphParams[plots.YLABEL_KEY] = "$C_V^{1}$" vars.Y = "SH_1" err := plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH1 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // specific heat from pairs graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH2 graphParams[plots.YLABEL_KEY] = "$C_V^{2}$" vars.Y = "SH_2" err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH2 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // specific heat from holons+pairs SH12 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_1 + env.SH_2 } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH12 graphParams[plots.YLABEL_KEY] = "$C_V^{12}$" vars.Y = "" vars.YFunc = SH12 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelSH12 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // plot gamma = C_V / T = C_V * Beta // gamma from holons+pairs Gamma := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return SH12(d) * env.Beta } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma12 graphParams[plots.YLABEL_KEY] = "$\\gamma^{12}$" vars.YFunc = Gamma err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma12 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // gamma from unpaired holons Gamma1 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_1 * env.Beta } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma1 graphParams[plots.YLABEL_KEY] = "$\\gamma^{1}$" vars.YFunc = Gamma1 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma1 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } // gamma from pairs Gamma2 := func(d interface{}) float64 { env := d.(SpecificHeatEnv) return env.SH_2 * env.Beta } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma2 graphParams[plots.YLABEL_KEY] = "$\\gamma^{2}$" vars.YFunc = Gamma2 err = plots.MultiPlot(SHenvs, errs, vars, graphParams, grapherPath) if err != nil { return err } graphParams[plots.FILE_KEY] = wd + "/" + fileLabelGamma2 + "_BW_" err = plots.MultiPlotStyle(SHenvs, errs, vars, graphParams, grapherPath, true) if err != nil { return err } return nil }
// Production-ready plots: // D1, Mu_h, and Tc vs T. // Extra set of plots to zoom in on x=0. // x1 & x2, a & b. // x = {0.03, 0.06, 0.09} in each set. // Vary tz and thp independently in each set (fix one at 0.1 and the other is in {0.05, 0.1, 0.15}). func TestProductionPlots(t *testing.T) { // setup flag.Parse() if !*production { return } defaultEnv, err := flucDefaultEnv() if err != nil { t.Fatal(err) } eps := 1e-6 /* N_Mu_b := 60 N_Tz_Thp := 3 Nx := 3 // vary thp; running a & b defaultEnv.FixedPairCoeffs = false envs := defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b, 1, N_Tz_Thp, Nx}, []float64{0.0, 0.1, 0.05, 0.03}, []float64{-0.5, 0.1, 0.15, 0.09}) fileLabelMu_b := "plot_data_THP.Mu_b_T" fileLabelMu_h := "plot_data_THP.Mu_h_T" fileLabelD1 := "plot_data_THP.D1_T" fileLabel_a := "plot_data_THP.a_T" fileLabel_b := "plot_data_THP.b_T" fileLabel_x2 := "plot_data_THP.x2_T" fileLabel_x1 := "plot_data_THP.x1_T" err = solveAndPlot(envs, eps, eps, fileLabelMu_b, fileLabelMu_h, fileLabelD1, fileLabel_a, fileLabel_b, fileLabel_x2, fileLabel_x1) if err != nil { t.Fatal(err) } // vary thp; fixed a & b defaultEnv.FixedPairCoeffs = true envs = defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b, 1, N_Tz_Thp, Nx}, []float64{0.0, 0.1, 0.05, 0.03}, []float64{-0.5, 0.1, 0.15, 0.09}) fileLabelMu_b = "plot_data_THP_FIXED_AB.Mu_b_T" fileLabelMu_h = "plot_data_THP_FIXED_AB.Mu_h_T" fileLabelD1 = "plot_data_THP_FIXED_AB.D1_T" fileLabel_a = "plot_data_THP_FIXED_AB.a_T" fileLabel_b = "plot_data_THP_FIXED_AB.b_T" fileLabel_x2 = "plot_data_THP_FIXED_AB.x2_T" fileLabel_x1 = "plot_data_THP_FIXED_AB.x1_T" err = solveAndPlot(envs, eps, eps, fileLabelMu_b, fileLabelMu_h, fileLabelD1, fileLabel_a, fileLabel_b, fileLabel_x2, fileLabel_x1) if err != nil { t.Fatal(err) } // vary tz; running a & b defaultEnv.FixedPairCoeffs = false envs = defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b, N_Tz_Thp, 1, Nx}, []float64{0.0, 0.05, 0.1, 0.03}, []float64{-0.5, 0.15, 0.1, 0.09}) fileLabelMu_b = "plot_data_TZ.Mu_b_T" fileLabelMu_h = "plot_data_TZ.Mu_h_T" fileLabelD1 = "plot_data_TZ.D1_T" fileLabel_a = "plot_data_TZ.a_T" fileLabel_b = "plot_data_TZ.b_T" fileLabel_x2 = "plot_data_TZ.x2_T" fileLabel_x1 = "plot_data_TZ.x1_T" err = solveAndPlot(envs, eps, eps, fileLabelMu_b, fileLabelMu_h, fileLabelD1, fileLabel_a, fileLabel_b, fileLabel_x2, fileLabel_x1) if err != nil { t.Fatal(err) } // vary tz; fixed a & b defaultEnv.FixedPairCoeffs = true envs = defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b, N_Tz_Thp, 1, Nx}, []float64{0.0, 0.05, 0.1, 0.03}, []float64{-0.5, 0.15, 0.1, 0.09}) fileLabelMu_b = "plot_data_TZ_FIXED_AB.Mu_b_T" fileLabelMu_h = "plot_data_TZ_FIXED_AB.Mu_h_T" fileLabelD1 = "plot_data_TZ_FIXED_AB.D1_T" fileLabel_a = "plot_data_TZ_FIXED_AB.a_T" fileLabel_b = "plot_data_TZ_FIXED_AB.b_T" fileLabel_x2 = "plot_data_TZ_FIXED_AB.x2_T" fileLabel_x1 = "plot_data_TZ_FIXED_AB.x1_T" err = solveAndPlot(envs, eps, eps, fileLabelMu_b, fileLabelMu_h, fileLabelD1, fileLabel_a, fileLabel_b, fileLabel_x2, fileLabel_x1) if err != nil { t.Fatal(err) } // SH with running a & b; tz = thp = 0.1 N_Mu_b_SH := 30 defaultEnv.FixedPairCoeffs = false envs = defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b_SH, 1, 1, Nx}, []float64{-0.03, 0.1, 0.1, 0.03}, []float64{-0.5, 0.1, 0.1, 0.09}) plotEnvs, errs := tempAll.MultiSolve(envs, eps, eps, FlucTempSolve) Xs := getXs(plotEnvs) SH_envs := makeSHEnvs(plotEnvs, errs, Xs) fileLabelSH1 := "plot_data_SH.SH1_T" fileLabelSH2 := "plot_data_SH.SH2_T" fileLabelSH12 := "plot_data_SH.SH12_T" fileLabelGamma12 := "plot_data_SH.gamma12_T" fileLabelGamma1 := "plot_data_SH.gamma1_T" fileLabelGamma2 := "plot_data_SH.gamma2_T" err = makeSHPlots(SH_envs, errs, fileLabelSH1, fileLabelSH2, fileLabelSH12, fileLabelGamma1, fileLabelGamma2, fileLabelGamma12) if err != nil { t.Fatal(err) } // SH with a & b fixed at their Tc values defaultEnv.FixedPairCoeffs = true envs = defaultEnv.MultiSplit([]string{"Mu_b", "Tz", "Thp", "X"}, []int{N_Mu_b_SH, 1, 1, Nx}, []float64{-0.03, 0.1, 0.1, 0.03}, []float64{-0.5, 0.1, 0.1, 0.09}) plotEnvs, errs = tempAll.MultiSolve(envs, eps, eps, FlucTempSolve) Xs = getXs(plotEnvs) SH_envs = makeSHEnvs(plotEnvs, errs, Xs) fileLabelSH1 = "plot_data_SH_FIXED_AB.SH1_T" fileLabelSH2 = "plot_data_SH_FIXED_AB.SH2_T" fileLabelSH12 = "plot_data_SH_FIXED_AB.SH12_T" fileLabelGamma12 = "plot_data_SH_FIXED_AB.gamma12_T" fileLabelGamma1 = "plot_data_SH_FIXED_AB.gamma1_T" fileLabelGamma2 = "plot_data_SH_FIXED_AB.gamma2_T" err = makeSHPlots(SH_envs, errs, fileLabelSH1, fileLabelSH2, fileLabelSH12, fileLabelGamma1, fileLabelGamma2, fileLabelGamma12) if err != nil { t.Fatal(err) } */ // magnetization eps = 1e-9 defaultEnv.FixedPairCoeffs = true defaultEnv.IterateD1Mu_hMu_b = true defaultEnv.X = 0.05 //TcFactors := []float64{1.0, 1.05, 1.1, 1.15} //TcFactors := []float64{1.15, 1.2, 1.25, 1.3} // works for x = 0.1 TcFactors := []float64{1.2, 1.25, 1.3, 1.35} // works for x = 0.05 //TcFactors := []float64{1.15, 1.2, 1.25, 1.3} //TcFactors := []float64{1.2, 1.4, 1.6} //TcFactors := []float64{1.0, 1.2, 1.4, 1.6} BeFields := []float64{} for i := 0; i < 11; i++ { BeFields = append(BeFields, 0.005*float64(i)) } magEnvs, err := EnvSplitTcB(defaultEnv, TcFactors, BeFields, eps, eps) if err != nil { t.Fatal(err) } plotEnvs, errs := tempAll.MultiSolve(magEnvs, eps, eps, SolveMu_b) fileLabelB := "plot_data.M_eB" vars := plots.GraphVars{"Be_field", "", []string{"Temp"}, []string{"T/t_0"}, nil, tempCrit.GetMagnetization} wd, _ := os.Getwd() grapherPath := wd + "/../plots/grapher.py" graphParams := map[string]string{plots.FILE_KEY: wd + "/" + fileLabelB, plots.XLABEL_KEY: "$eB$", plots.YLABEL_KEY: "$M/e$", "xmax": "0.05"} errMPlot := plots.MultiPlotStyle(plotEnvs, errs, vars, graphParams, grapherPath, true) if errMPlot != nil { t.Fatalf("error making M plot: %v", errMPlot) } }