// Calculate U_{1}/N = 1/N \sum_k \epsilon_h(k) f_h(\xi_h(k)) func HolonEnergy(env *tempAll.Environment) (float64, error) { inner := func(k vec.Vector) float64 { return env.Epsilon_h(k) * env.Fermi(env.Xi_h(k)) } dim := 2 avg := bzone.Avg(env.PointsPerSide, dim, inner) return avg, nil }
// Return the absolute error and gradient for the doping w.r.t. the given // parameters. func AbsErrorMu_h(env *tempAll.Environment, variables []string) solve.Diffable { F := func(v vec.Vector) (float64, error) { env.Set(v, variables) L := env.PointsPerSide lhs := 2.0 / (env.T0 + env.Tz) rhs := bzone.Avg(L, 2, tempAll.WrapFunc(env, innerMu_h)) return lhs - rhs, nil } h := 1e-5 epsabs := 1e-4 return solve.SimpleDiffable(F, len(variables), h, epsabs) }
func AbsErrorMu_h(env *tempAll.Environment, variables []string) solve.Diffable { F := func(v vec.Vector) (float64, error) { env.Set(v, variables) if -env.Mu_b > -2.0*env.Mu_h { // when |Mu_b| is this large, no longer have pairs return env.X - tempPair.X1(env), nil } L := env.PointsPerSide lhs := 0.5 / (env.T0 + env.Tz) rhs := bzone.Avg(L, 2, tempAll.WrapFunc(env, innerMu_h)) return lhs - rhs, nil } h := 1e-5 epsabs := 1e-4 return solve.SimpleDiffable(F, len(variables), h, epsabs) }
// Concentration of unpaired holons func X1(env *tempAll.Environment) float64 { L := env.PointsPerSide return bzone.Avg(L, 2, tempAll.WrapFunc(env, innerX1)) }