2bf8478639
- 新增日月食中心带、偏食带、阴影足迹、等时线、食分线及升落边界计算,支持极区与混合食拓扑 - 新增日食单时刻阴影求解器、站心状态查询、批量采样和 ΔT 覆盖接口 - 重构恒星与行星月掩路径,补充有限盘面接触、站心修正、掩带宽度、极区投影及升落边界 - 扩展 SVG 与 GeoJSON 输出,支持详细面板、全球/极区/地球投影、边界闭合、时间标记和拓扑签名 - 扩展日月食候选搜索、局地搜索、沙罗序列预计算与范围外推,补充系列锚点和成员一致性校验 - 补齐古历纪年、儒略历独有闰日、多公历候选、历法改革跨日及精确日期运算接口 - 优化 ΔT、章动、恒星时、月球地平线、事件根搜索和本地星历缓存,降低重复计算开销并提升边界稳定
96 lines
3.3 KiB
Go
96 lines
3.3 KiB
Go
package basic
|
|
|
|
import "testing"
|
|
|
|
// 性能基线:逐项隔离 §1.4 P2 热点,改动前后跑同一份基准做对照。
|
|
|
|
func solarEclipseBenchSeed(year, month, day int) float64 {
|
|
return JDECalc(year, month, float64(day))
|
|
}
|
|
|
|
func solarEclipseBenchCenterLine(b *testing.B, seed float64) (SolarEclipsePathResult, float64, SolarEclipseRadiusModel) {
|
|
b.Helper()
|
|
model := SolarEclipseModelNASABulletinSplitK
|
|
result := solarEclipse(seed, model)
|
|
newMoonJDE := CalcMoonSHByJDE(seed, 0)
|
|
solver := newSolarEclipseSolver(newMoonJDE, model)
|
|
samplingOptions := SolarEclipsePathOptions{StepDays: 2.0 / 1440.0}
|
|
samplingOptions.TargetSpacingKM = 0
|
|
centerLine, _ := solver.centralPathPoints(
|
|
result.CentralBeginOnEarth, result.CentralEndOnEarth, result.GreatestEclipse, samplingOptions,
|
|
)
|
|
centerLine = solver.attachCentralAxisContactPoints(
|
|
centerLine, result.CentralBeginOnEarth, result.CentralEndOnEarth,
|
|
)
|
|
return SolarEclipsePathResult{CenterLine: centerLine}, newMoonJDE, model
|
|
}
|
|
|
|
func BenchmarkSolarEclipseCentralPath20240408(b *testing.B) {
|
|
seed := solarEclipseBenchSeed(2024, 4, 8)
|
|
options := SolarEclipsePathOptions{StepDays: 2.0 / 1440.0, TargetSpacingKM: 150}
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
SolarEclipseCentralPathNASABulletinSplitK(seed, options)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipseMaxCentralDuration20240408(b *testing.B) {
|
|
path, newMoonJDE, model := solarEclipseBenchCenterLine(b, solarEclipseBenchSeed(2024, 4, 8))
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
solver := newSolarEclipseSolver(newMoonJDE, model)
|
|
solver.centralPathMaxCentralDuration(path.CenterLine)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipseLimitPairs20240408(b *testing.B) {
|
|
path, newMoonJDE, model := solarEclipseBenchCenterLine(b, solarEclipseBenchSeed(2024, 4, 8))
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
solver := newSolarEclipseSolver(newMoonJDE, model)
|
|
solver.centralPathLimitPairs(path.CenterLine)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipseGlobal20240408(b *testing.B) {
|
|
seed := solarEclipseBenchSeed(2024, 4, 8)
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
SolarEclipseNASABulletinSplitK(seed)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipseMagnitudeEvaluation(b *testing.B) {
|
|
seed := solarEclipseBenchSeed(1136, 6, 1)
|
|
solver := newSolarEclipseSolver(CalcMoonSHByJDE(seed, 0), SolarEclipseModelNASABulletinSplitK)
|
|
solver = solver.withLocalEphemeris()
|
|
jd := solver.newMoonJDE
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
solver.magnitudeEvaluationAt(jd)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipsePartialFootprints11360601(b *testing.B) {
|
|
seed := solarEclipseBenchSeed(1136, 6, 1)
|
|
options := SolarEclipsePartialFootprintOptions{
|
|
StepDays: 2.0 / 1440.0, BoundaryPoints: 96, RiseSetStepDays: 2.0 / 1440.0,
|
|
}
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
SolarEclipsePartialFootprintsNASABulletinSplitK(seed, options)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSolarEclipseRiseSetArcResidual(b *testing.B) {
|
|
seed := solarEclipseBenchSeed(2024, 4, 8)
|
|
solver := newSolarEclipseSolver(CalcMoonSHByJDE(seed, 0), SolarEclipseModelNASABulletinSplitK)
|
|
solver = solver.withLocalEphemeris()
|
|
result := solarEclipse(seed, SolarEclipseModelNASABulletinSplitK)
|
|
evaluation := solver.magnitudeEvaluationAt(result.GreatestEclipse)
|
|
b.ResetTimer()
|
|
for index := 0; index < b.N; index++ {
|
|
solarEclipseRiseSetArcResidualAt(evaluation, 10, 40, false)
|
|
}
|
|
}
|