package grib import ( "fmt" "hash/fnv" "time" ) // Generate steps from 0 to 96 with step 1 hour (97 steps total) // GFS provides hourly data for 0-120 hours, we use first 96 hours var steps = func() []int { result := make([]int, 0, 97) for i := 0; i <= 96; i++ { result = append(result, i) } return result }() func nearestRun(t time.Time) time.Time { h := t.UTC().Hour() - t.UTC().Hour()%6 return time.Date(t.Year(), t.Month(), t.Day(), h, 0, 0, 0, time.UTC) } func fileName(run time.Time, step int) string { return fmt.Sprintf("gfs.t%02dz.pgrb2.0p50.f%03d", run.Hour(), step) } func encodeKey(a ...any) uint64 { h := fnv.New64a() for _, v := range a { fmt.Fprint(h, v) } return h.Sum64() }