সূর্য সিদ্ধান্ত পঞ্জিকা সকল প্রবন্ধ

সূর্যোদয়, সূর্যাস্ত ও অরুণোদয়: পঞ্জিকায় কোন সংজ্ঞা ব্যবহার হবে?

Upper-limb apparent sunrise, Sun-center geometric sunrise, atmospheric refraction, twilight এবং sunrise-এর ৯৬ মিনিট আগে অরুণোদয়—পঞ্জিকা calculation-এ সঠিক policy ও C# implementation।

Panjika engine-এ sunrise শুধু একটি display value নয়; এটি day boundary এবং বহু ধর্মীয় rule-এর evaluation instant। তাই weather website-এর sunrise, astronomical almanac-এর sunrise এবং traditional Hindu calendar-এর sunrise দেখতে কাছাকাছি হলেও interchangeable নয়। Project-এর সব page, export ও cache-কে একই declared definition ব্যবহার করতে হবে।

কয়েক মিনিটের পার্থক্য এত গুরুত্বপূর্ণ কেন?

কোনো তিথি যদি sunrise-এর দুই মিনিট আগে বা পরে শেষ হয়, sunrise definition বদলালে ফলের ভাষা বদলে যেতে পারে:

CalculationSunrise-এর ভূমিকাDefinition বদলালে
Daily tithiSunrise-এ চলমান তিথিদিনের তিথি বদলাতে পারে
Bengali dateSaṅkrānti ও sunrise relationমাসের প্রথম civil date বদলাতে পারে
EkādaśīSunrise/aruṇodaya viddhiউপবাসের দিন বদলাতে পারে
Kṣaya/vṛddhiতিথি কোন sunrise স্পর্শ করেক্ষয় বা বৃদ্ধি assignment বদলাতে পারে
Traditional timeদণ্ড-পলের originসব elapsed value shift করবে
Daily XMLSunrise-to-next-sunrise windowEvent কোন record-এ যাবে বদলাতে পারে

এ কারণে UI-তে শুধু “সূর্যোদয় ৫:৩১” দেখালেই যথেষ্ট নয়। Research metadata-তে disc point, refraction, position mode, coordinates, elevation ও horizon policy লিখতে হবে।

Standard apparent sunrise: upper limb ও refraction

সাধারণ astronomical almanac ও সংবাদপত্রের sunrise সাধারণত তখন, যখন সূর্যের উপরের কিনারা atmospheric refraction-এর সাহায্যে horizon-এ দৃশ্যমান হয়। Computational approximation-এ সূর্যের center geometric horizon-এর প্রায় ৫০ arcminute নিচে থাকে:

Equivalent zenith distance প্রায় ৯০.৮৩৩৩°। এটি average sea-level atmosphere ও unobstructed horizon-এর standard model; বাস্তব refraction আবহাওয়ার কারণে বদলায়।

Sun-center geometric sunrise: center ঠিক horizon-এ

Traditional Hindu-calendar profile-এ একটি প্রচলিত সংজ্ঞা হলো solar disc-এর center geometric horizon অতিক্রমের মুহূর্ত, refraction উপেক্ষা করে:

Morning-এ standard apparent upper-limb sunrise আগে এবং geometric center sunrise পরে ঘটে। কত মিনিট ব্যবধান হবে তা latitude, season এবং horizon-crossing angle-এর ওপর নির্ভর করে; fixed “সব জায়গায় ৩ মিনিট” ধরে নেবেন না। Sunset-এ ক্রম উল্টোভাবে প্রতিফলিত হয়—apparent upper limb দেরিতে অদৃশ্য হয়।

ProfileSolar pointRefractionTypical use
Standard apparentUpper limbAverage refractionWeather/almanac sunrise
Center apparentDisc centerIncludedSpecial comparison profile
Center geometricDisc centerExcludedTraditional Hindu sunrise profile
Custom true horizonDeclared pointDeclaredResearch with local horizon altitude

সূর্য সিদ্ধান্ত পঞ্জিকা project-এর নির্বাচিত profile

এই project-এর declared solar-day profile:

অতএব weather service-এর apparent sunrise সরাসরি copy করা যাবে না। Swiss Ephemeris call-এ অন্তত SE_BIT_DISC_CENTER ও SE_BIT_NO_REFRACTION flags স্পষ্টভাবে দিতে হবে। Full Swiss “Hindu rising” preset আরও একটি geocentric/no-ecliptic-latitude flag যোগ করে; project যদি সেটি গ্রহণ করে, profile ID বদলিয়ে ফল পুনরায় validate করতে হবে। Center/no-refraction থেকে full preset-এ silent switch করা উচিত নয়।

Moonrise/moonset-এর project policy আলাদা—Moon edge/apparent। Solar flags Moon-এর calculation-এ reuse করলে parallax, semidiameter ও refraction treatment ভুল হবে। Sun ও Moon rise/set profile পৃথক রাখুন।

Atmospheric refraction: বাস্তব sunrise পূর্বানুমান কেন পুরো নির্ভুল নয়

Horizon-এর কাছে atmosphere আলো বাঁকায়, ফলে সূর্য geometric অবস্থানের তুলনায় উপরে দেখা যায়। Refraction-এর পরিমাণ pressure, temperature, humidity এবং atmospheric layering-এর ওপর নির্ভরশীল। Standard apparent sunrise একটি adopted average ব্যবহার করে; সেদিনের বাস্তব atmosphere জানে না।

এই কারণে official source-ও rise/set computation এক মিনিট বা তার বেশি ভুল হতে পারে বলে সতর্ক করে, এমনকি sea-level clear horizon-এও। পাহাড়, ভবন, কুয়াশা ও observer height আরও পার্থক্য ঘটায়।

InputRefraction-on profile-এ প্রভাবNo-refraction profile-এ
Atmospheric pressureRefraction estimate বদলায়Rise/set boundary-তে উপেক্ষিত
TemperatureRefraction estimate বদলায়Rise/set boundary-তে উপেক্ষিত
Solar semidiameterUpper-limb event-এ লাগেCenter event-এ লাগে না
Weather observationActual sighting বদলাতে পারেGeometric computed instant বদলায় না

No-refraction profile “খালি চোখে সূর্য দেখা যাওয়ার exact সময়” নয়; এটি reproducible geometric convention। Traditional calendar comparison-এর জন্য এটাই তার শক্তি।

Observer elevation ও local horizon

উঁচু স্থানে observer দূরের horizon বেশি নিচে দেখতে পান; apparent sunrise আগে ও sunset পরে দেখা যেতে পারে। পাহাড় বা ভবন পূর্ব horizon ঢেকে রাখলে observed sunrise আবার দেরি হয়। দুটি elevation আলাদা:

  • Observer elevation: sea level থেকে observer-এর উচ্চতা;
  • Local horizon altitude: নির্দিষ্ট azimuth-এ দৃশ্যমান পাহাড়/বাধার angular height।

City-level calendar সাধারণত standardized flat-horizon/elevation policy ব্যবহার করে। User যদি পাহাড়ি এলাকার actual visible sunrise চান, true-horizon solver ও horizon data দরকার। Standard profile বদলে না দিয়ে নতুন profile তৈরি করুন।

Project center/no-refraction profile-এ Swiss preset-এর exact geocentric mode ব্যবহার করলে elevation irrelevant হতে পারে; topocentric/custom-horizon profile-এ তা relevant। Metadata-তে observerElevationMeters এবং horizonAltitudeDegrees রাখুন, এমনকি value ০ হলেও।

Civil, nautical ও astronomical twilight

Twilight sunrise নয়। Morning twilight-এর শুরু সূর্যের geometric center horizon-এর নির্দিষ্ট নিচে পৌঁছালে:

পর্যায়Sun center altitudeZenith distance
Civil dawn−৬°৯৬°
Nautical dawn−১২°১০২°
Astronomical dawn−১৮°১০৮°
Project sunrise০° center, no refraction৯০°

Twilight duration latitude ও season অনুযায়ী বদলে যায়। Civil dawn কখনো sunrise-এর প্রায় আধঘণ্টা আগে, আবার অন্য স্থানে/ঋতুতে অনেক বেশি আগে হতে পারে। তাই “অরুণোদয় = civil dawn” বা “অরুণোদয় = −৬°” ধরে নেওয়া যাবে না, যদি ritual rule fixed ৯৬ মিনিট বলে।

অরুণোদয়: project rule-এ sunrise-এর ৯৬ মিনিট আগে

এই project-এর Vaiṣṇava observance convention-এ অরুণোদয় হলো selected Panjika sunrise-এর ঠিক ৯৬ মিনিট আগে—অর্থাৎ চার fixed দণ্ড:

এটি ritual evaluation moment; astronomical twilight category নয়। Sunrise profile বদলালে aruṇodaya-ও একই পরিমাণ shift করবে। তাই festival engine নিজে sunrise calculate না করে canonical SunDayResult থেকে sunrise নেবে।

DST-safe calculation:

DateTimeOffset arunodayaUtc = sunrise.ToUniversalTime()
    .Subtract(TimeSpan.FromMinutes(96));

DateTimeOffset arunodayaLocal = TimeZoneInfo.ConvertTime(
    arunodayaUtc, selectedZone);

Local wall-clock value থেকে AddMinutes(-96) অধিকাংশ দিনে কাজ করলেও timezone transition-এর ক্ষেত্রে offset context হারানোর ঝুঁকি থাকে। Absolute instant থেকে subtract করে পুনরায় localize করা নিরাপদ।

একাদশী ও festival rule-এ sunrise/aruṇodaya

Festival engine raw astronomical timeline-এর ওপর নির্বাচিত rule-moment-এ state পরীক্ষা করে। উদাহরণস্বরূপ:

  1. Current local date-এর project sunrise solve করুন;
  2. তার ৯৬ মিনিট আগে aruṇodaya instant নিন;
  3. Aruṇodaya-তে তিথি ও তার remaining interval নির্ণয় করুন;
  4. Current ও next sunrise-এ তিথি দেখুন;
  5. School-specific viddhi/mahādvādaśī rule প্রয়োগ করুন;
  6. Applied rule code ও evaluated instants result-এ রাখুন।

শুধু daily header-এর sunrise tithi ব্যবহার করলে aruṇodaya-তে দশমী ছিল কি না বোঝা যায় না। আবার civil dawn-কে aruṇodaya ধরলে latitude অনুযায়ী rule moment বদলে যায়—project-এর fixed ৯৬-minute convention ভেঙে যায়।

Janmāṣṭamī-তে local midnight, Pradosha rule-এ sunset-পরবর্তী interval, Pāraṇa-তে next-day sunrise—প্রতিটি rule-moment আলাদা। একটিকে আরেকটির synonym হিসেবে ব্যবহার করবেন না।

Panjika day: বর্তমান sunrise অন্তর্ভুক্ত, পরের sunrise বাদ

Project daily window:

Next sunrise currentSunrise + 24 hours নয়। পরের local civil date-এর coordinates/profile দিয়ে আবার solve করতে হবে। DST, equation of time ও seasonal motion-এর কারণে interval fixed নয়।

Exact current sunrise-এর event current day-এর; exact next sunrise-এর event next day-এর। Festival rule-এর aruṇodaya window-এর আগে হলেও same day object-এ auxiliary moment হিসেবে থাকবে—daily event filter দিয়ে বাদ দেবেন না।

Swiss Ephemeris flags কী বোঝায়?

Flagমানঅর্থ
SE_CALC_RISE১Rise event
SE_CALC_SET২Set event
SE_BIT_GEOCTR_NO_ECL_LAT১২৮Geocentric position ও ecliptic latitude ignore
SE_BIT_DISC_CENTER২৫৬Upper limb নয়, disc center
SE_BIT_NO_REFRACTION৫১২Atmospheric refraction বাদ
SE_BIT_CIVIL_TWILIGHT১০২৪Civil twilight
SE_BIT_NAUTIC_TWILIGHT২০৪৮Nautical twilight
SE_BIT_ASTRO_TWILIGHT৪০৯৬Astronomical twilight

Swiss SE_BIT_HINDU_RISING preset হলো center + no refraction + geocentric/no-ecliptic-latitude combination। Project-এর exact binding-এ constant names/values library version থেকে নিন; article-এর numeric table documentation বুঝতে সহায়ক, copy-paste-এর একমাত্র source নয়।

rsmi = 0 default astronomical upper-limb/refraction sunrise দিতে পারে। Explicit flags না দিলে library upgrade বা wrapper default বদলালে calendar silently shift করতে পারে।

C# 5/.NET Framework-compatible profile

public sealed class SolarRiseSetProfile
{
    public string Id { get; set; }
    public bool DiscCenter { get; set; }
    public bool Refraction { get; set; }
    public bool GeocentricNoEclipticLatitude { get; set; }
    public double ObserverElevationMeters { get; set; }
    public double HorizonAltitudeDegrees { get; set; }
}

public static readonly SolarRiseSetProfile ProjectSunProfile =
    new SolarRiseSetProfile
    {
        Id = "sun-center-no-refraction-v1",
        DiscCenter = true,
        Refraction = false,
        GeocentricNoEclipticLatitude = false,
        ObserverElevationMeters = 0.0,
        HorizonAltitudeDegrees = 0.0
    };

Flags এক জায়গায় তৈরি করুন:

const int SE_CALC_RISE = 1;
const int SE_CALC_SET = 2;
const int SE_BIT_GEOCTR_NO_ECL_LAT = 128;
const int SE_BIT_DISC_CENTER = 256;
const int SE_BIT_NO_REFRACTION = 512;

static int BuildSwissFlags(
    bool rising,
    SolarRiseSetProfile profile)
{
    int flags = rising ? SE_CALC_RISE : SE_CALC_SET;

    if (profile.DiscCenter)
        flags |= SE_BIT_DISC_CENTER;

    if (!profile.Refraction)
        flags |= SE_BIT_NO_REFRACTION;

    if (profile.GeocentricNoEclipticLatitude)
        flags |= SE_BIT_GEOCTR_NO_ECL_LAT;

    return flags;
}

Result model:

public sealed class SunDayResult
{
    public DateTime LocalDate { get; set; }
    public DateTimeOffset Sunrise { get; set; }
    public DateTimeOffset Sunset { get; set; }
    public DateTimeOffset NextSunrise { get; set; }
    public DateTimeOffset Arunodaya { get; set; }
    public string SolarProfileId { get; set; }
    public string TimeZoneId { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

Canonical service:

public SunDayResult CalculateSunDay(
    DateTime localDate,
    LocationProfile location,
    SolarRiseSetProfile profile)
{
    DateTimeOffset sunrise = SolveRiseOrSet(
        localDate, location, profile, true);

    DateTimeOffset sunset = SolveRiseOrSet(
        localDate, location, profile, false);

    DateTimeOffset nextSunrise = SolveRiseOrSet(
        localDate.AddDays(1), location, profile, true);

    DateTimeOffset arunodayaUtc = sunrise.ToUniversalTime()
        .Subtract(TimeSpan.FromMinutes(96));

    TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(
        location.WindowsTimeZoneId);

    return new SunDayResult
    {
        LocalDate = localDate.Date,
        Sunrise = sunrise,
        Sunset = sunset,
        NextSunrise = nextSunrise,
        Arunodaya = TimeZoneInfo.ConvertTime(arunodayaUtc, zone),
        SolarProfileId = profile.Id,
        TimeZoneId = location.WindowsTimeZoneId,
        Latitude = location.Latitude,
        Longitude = location.Longitude
    };
}

SolveRiseOrSet ephemeris error ও no-event return code surface করবে। ব্যর্থ হলে midnight বা 6:00 AM fallback দিয়ে calculation চালানো যাবে না; এতে সব downstream festival result বিশ্বাসযোগ্য দেখালেও ভুল হবে।

উচ্চ latitude ও sunrise না-থাকার দিন

Polar circle-এর কাছে এমন দিন থাকে যখন সূর্য ওঠে না বা অস্ত যায় না। Swiss rise/set function no-event/circumpolar status দিতে পারে। Application-এর behavior:

  • Result-এ sunriseStatus = "no-rise" বা sunsetStatus = "no-set";
  • Daily Panchanga rule engine silent অনুমান করবে না;
  • প্রযোজ্য ধর্মীয় fallback rule থাকলে আলাদা documented profile;
  • User-কে nearest valid sunrise বা reference-location method-এর ব্যাখ্যা;
  • Batch export-এ error log ও chosen fallback policy।

Twilight-ও polar regions-এ অনুপস্থিত বা দীর্ঘস্থায়ী হতে পারে। Fixed ৯৬-minute aruṇodaya কেবল valid selected sunrise থাকলে সহজে নির্ণীত। No-rise day-এ sunrise − 96m কল্পনা করা যাবে না।

API ও XML metadata

{
  "sunDay": {
    "localDate": "2026-10-08",
    "sunrise": "2026-10-08T05:31:00+05:30",
    "sunset": "2026-10-08T17:18:00+05:30",
    "nextSunrise": "2026-10-09T05:31:30+05:30",
    "arunodaya": "2026-10-08T03:55:00+05:30"
  },
  "definition": {
    "profileId": "sun-center-no-refraction-v1",
    "discPoint": "center",
    "refraction": false,
    "geocentricNoEclipticLatitude": false,
    "observerElevationMeters": 0,
    "horizonAltitudeDegrees": 0,
    "arunodayaOffsetMinutes": -96
  }
}

সময়গুলো illustrative। Production API-তে actual result থাকবে। XML:

<sun-day profile="sun-center-no-refraction-v1"
         latitude="22.5833"
         longitude="88.3500"
         timezone="India Standard Time">
  <sunrise>...ISO local time...</sunrise>
  <sunset>...ISO local time...</sunset>
  <next-sunrise>...ISO local time...</next-sunrise>
  <arunodaya offset-minutes="-96">...ISO local time...</arunodaya>
  <definition disc-point="center"
              refraction="false"
              elevation-m="0"
              horizon-deg="0" />
</sun-day>

Human-facing footer-এ সংক্ষিপ্তভাবে লেখা যায়: “সূর্যোদয়/সূর্যাস্ত: সূর্যকেন্দ্র, refraction-বর্জিত।” Research details expandable panel-এ থাকবে।

Validation checklist

  1. Project profile ID সব page-এ একই;
  2. Sun disc center flag set;
  3. No-refraction flag set;
  4. Geocentric/no-ecliptic-latitude flag explicit on/off;
  5. Standard apparent comparison profile upper limb/refraction ব্যবহার করে;
  6. Standard apparent sunrise center geometric sunrise-এর আগে;
  7. Standard apparent sunset center geometric sunset-এর পরে;
  8. Difference fixed minutes হিসেবে hard-code নয়;
  9. Civil dawn Sun center −৬°;
  10. Nautical dawn −১২°;
  11. Astronomical dawn −১৮°;
  12. Aruṇodaya twilight flag ব্যবহার করে না;
  13. Aruṇodaya exactly ৯৬ absolute minutes before project sunrise;
  14. Aruṇodaya = ৪ fixed দণ্ড;
  15. Festival engine canonical SunDayResult ব্যবহার করে;
  16. Ekādaśī rule aruṇodaya-র তিথি evaluate করে;
  17. Current sunrise window-start inclusive;
  18. Next sunrise window-end exclusive;
  19. Next sunrise localDate+1 থেকে পুনর্গণিত;
  20. Next sunrise current+24h নয়;
  21. DST day-এ absolute aruṇodaya subtraction;
  22. Kolkata, Dhaka, New York coordinates আলাদা ফল দেয়;
  23. Elevation metadata present;
  24. Horizon altitude metadata present;
  25. No-rise/no-set status handled;
  26. Failure-এ fabricated 6:00 AM fallback নেই;
  27. Sun ও Moon rise/set profiles পৃথক;
  28. Moon edge/apparent policy অপরিবর্তিত;
  29. Daily tithi একই sunrise instant ব্যবহার করে;
  30. Bengali date service একই sunrise instant ব্যবহার করে;
  31. Traditional time converter একই sunrise origin ব্যবহার করে;
  32. API ও XML profile metadata মেলে;
  33. Cache key-তে solar profile version থাকে;
  34. Profile বদলালে cached calendar invalidated;
  35. Reference printed Panjika-এর সঙ্গে regression dates test করা হয়।

উপসংহার

Sunrise একটি calculated convention। সাধারণ apparent sunrise upper limb ও atmospheric refraction ধরে; project-এর traditional day boundary Sun center এবং no refraction ধরে। একই city/date-এ এই দুটির কয়েক মিনিট পার্থক্য স্বাভাবিক, এবং সেই পার্থক্য sunrise-tithi, Bengali date বা festival observance-এ কার্যকর হতে পারে।

Aruṇodaya-ও astronomical civil dawn নয়। এই project-এ এটি canonical project sunrise-এর ঠিক ৯৬ মিনিট বা চার দণ্ড আগে একটি ritual instant। তাই aruṇodaya calculation twilight flag দিয়ে নয়, sunrise instant থেকে absolute duration subtract করে হবে।

একটি versioned SolarRiseSetProfile সব service-এ inject করলে flags, refraction ও horizon policy বিচ্ছিন্ন হয় না। Daily HTML, Calendar grid, festival engine, API, print ও XML একই SunDayResult ব্যবহার করলে পঞ্জিকার দিনের সীমা reproducible থাকে এবং printed reference-এর সঙ্গে regression test অর্থপূর্ণ হয়।

তথ্যসূত্র ও আরও পাঠ

  1. U.S. Naval Observatory—Rise, Set, and Twilight Definitions; ৯০.৮৩৩৩° standard sunrise, solar semidiameter, refraction ও accuracy limitations.
  2. U.S. Naval Observatory—Astronomical Applications Glossary; apparent upper-limb sunrise ও ৯০°৫০′ zenith distance.
  3. NOAA/National Weather Service—Twilight Types; civil −৬°, nautical −১২°, astronomical −১৮°.
  4. Astrodienst—Swiss Ephemeris Programmer’s Documentation; swe_rise_trans, disc-center, no-refraction, twilight ও Hindu-rising flags.
  5. Swiss Ephemeris 2.10 Programming Guide; pressure, temperature, horizon ও no-event return values.
  6. সূর্য সিদ্ধান্ত পঞ্জিকা project; Sun center/no-refraction, Moon edge/apparent, sunrise-window এবং ৯৬-minute Vaiṣṇava aruṇodaya policy.

মন্তব্য, আলোচনা ও প্রশ্ন