GribStream

Simulation de croissance du maïs basée sur HRRR

Cette simulation offre une manière pratique de prédire les stades de développement du maïs et d'évaluer les stress de croissance avec des données météorologiques horaires détaillées. Elle utilise les données d'entrée précises du modèle HRRR de la NOAA, dont température, rayonnement solaire, vitesse du vent, humidité et humidité du sol, pour estimer la croissance du maïs avec des méthodes agrométéorologiques avancées.

La simulation utilise les Photothermal Units (PTU), une métrique qui combine les températures horaires au-dessus d'un seuil de base, souvent 10 °C pour le maïs, avec le rayonnement solaire en MJ/m² par heure. Contrairement aux Growing Degree Days (GDD) traditionnels, PTU intègre à la fois les conditions thermiques et de rayonnement, ce qui reflète mieux la croissance réelle de la culture. Le calcul brut de PTU est ensuite affiné avec des facteurs de stress pour simuler des conditions réalistes pendant toute la saison.

Plusieurs hypothèses clés structurent ce modèle. Des valeurs horaires de température et de rayonnement sont utilisées, ajustées par un facteur empirique de 0.55 pour aligner les prévisions avec les calendriers typiques de développement du maïs observés historiquement en Iowa. Les calculs de stress d'humidité du sol utilisent un point de flétrissement (wilting point) de 0.15 et une capacité au champ (field capacity) de 0.30, valeurs typiques des sols agricoles du Midwest. Les vitesses de vent mesurées à 10 m sont ajustées pour approximer les conditions à 2 m, afin d'améliorer les calculs d'évapotranspiration (ET₀).

ET₀ est calculé avec l'équation Penman-Monteith, produisant des estimations horaires de demande en eau de la culture, essentielles pour prédire le stress de sécheresse. Un coefficient de culture (crop coefficient, Kc) constant de 1.05 représente la demande en eau typique du maïs pendant la saison. Le seuil de stress ET₀ est fixé à 0.35 mm/heure, ce qui identifie les périodes où le stress hydrique pourrait limiter fortement la croissance.

Le stress dû au froid est évalué en comparant les températures horaires aux seuils définis par l'utilisateur, ce qui aide à repérer les périodes où des températures basses peuvent nuire à la santé et au développement de la culture. Le stress de rayonnement identifie de la même façon les moments de rayonnement solaire insuffisant, un point critique pour comprendre les limites de croissance par temps nuageux ou couvert.

Le tableau de bord permet d'interpréter ces résultats visuellement avec des graphiques clairs. La température est présentée avec les seuils importants, rendant visibles les événements possibles de stress dû au froid. L'humidité du sol est comparée au point de flétrissement et à la capacité au champ, ce qui signale rapidement les conditions de sécheresse possibles. Le graphique ET₀, accompagné de l'humidité, met en évidence les périodes de stress hydrique élevé.

Le tableau de bord visualise aussi le PTU cumulé pendant la saison, ce qui permet de comparer directement la croissance potentielle et la croissance réelle ajustée par stress. Les valeurs finales de PTU ajusté correspondent aux stades établis du maïs, de la levée et de l'apparition de la panicule jusqu'au grain laiteux, denté et à la maturité, donnant une lecture immédiate du progrès attendu de la culture.

Cette simulation offre aux agriculteurs, agronomes et chercheurs un outil direct pour anticiper le développement du maïs. Elle aide à éclairer les décisions de semis, d'irrigation et de récolte en identifiant tôt les conditions de stress, ce qui peut contribuer à de meilleurs rendements et à une gestion agricole plus informée.

Les graphiques ci-dessous montrent tout le cycle, du semis le 1er mai à la maturité dans les premiers jours de septembre. Zoomez pour mieux voir les corrélations entre variables météorologiques, facteurs de stress et croissance.

Exemple de requête GribStream qui alimente le tableau de bord ci-dessous :

curl -X POST 'https://gribstream.com/api/v2/hrrr/timeseries' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer [API_TOKEN]" \
    -d '{
    "fromTime": "2024-05-01T00:00:00Z",
    "untilTime": "2024-05-05T00:00:00Z",
    "minHorizon": 0,
    "maxHorizon": 48,
    "coordinates": [
        {
            "name": "Iowa",
            "lat": 42.0347,
            "lon": -93.6200
        }
    ],
    "variables": [
        { "name": "TMP", "level": "2 m above ground", "info": "", "alias": "temperature" },
        { "name": "SOILW", "level": "0.3-0.3 m below ground", "info": "", "alias": "soil_moisture" },
        { "name": "WIND", "level": "10 m above ground", "info": "", "alias": "wind" },
        { "name": "RH", "level": "2 m above ground", "info": "", "alias": "humidity" },
        { "name": "DSWRF", "level": "surface", "info": "", "alias": "dsw_radiation" },
        { "name": "ULWRF", "level": "surface", "info": "", "alias": "ulw_radiation" },
        { "name": "GFLUX", "level": "surface", "info": "", "alias": "ground_heat_flux" }
    ],
    "expressions": [
        { "expression": "120", "alias": "emergence_threshold"},
        { "expression": "1300", "alias": "tasseling_threshold"},
        { "expression": "1500", "alias": "silking_threshold"},
        { "expression": "1800", "alias": "blister_threshold"},
        { "expression": "2100", "alias": "milk_threshold"},
        { "expression": "2400", "alias": "dough_threshold"},
        { "expression": "2700", "alias": "dent_threshold"},
        { "expression": "2900", "alias": "maturity_threshold"},
        { "expression": "wind * 0.748", "alias": "wind"},
        { "expression": "dsw_radiation * 0.0036", "alias": "dsw_radiation"},
        { "expression": "ulw_radiation * 0.0036", "alias": "ulw_radiation"},
        { "expression": "temperature - 273.15", "alias": "temperature"},
        { "expression": "humidity / 100", "alias": "humidity"},
        { "expression": "10", "alias": "base_temperature"},
        { "expression": "0", "alias": "cold_stress_threshold"},
        { "expression": "5", "alias": "cold_stress_recovery_temperature"},
        { "expression": "0.15", "alias": "wilting_point"},
        { "expression": "0.3", "alias": "field_capacity"},
        { "expression": "0.35", "alias": "max_et0_threshold"},
        { "expression": "0.25", "alias": "useful_radiation_cutoff"},
        { "expression": "ground_heat_flux * 0.0036", "alias": "ground_heat_flux"},
        { "expression": "0.066", "alias": "gamma"},
        { "expression": "dsw_radiation * 0.77 - ulw_radiation", "alias": "net_radiation"},
        { "expression": "0.6108 * 2.718281828 ^ (17.27 * temperature / (temperature + 237.3))", "alias": "es"},
        { "expression": "es * (1 - humidity)", "alias": "vpd"},
        { "expression": "(4098 * (0.6108 * 2.718281828 ^ (17.27 * temperature / (temperature + 237.3)))) / ((temperature + 237.3) ^ 2)", "alias": "delta"},
        { "expression": "(0.6108 * 2.718281828 ^ (17.27 * temperature / (temperature + 237.3))) * humidity", "alias": "ea"},
        { "expression": "max((0.408 * delta * (net_radiation - ground_heat_flux) + gamma * (37 * wind * vpd / (temperature + 273))) / (delta + gamma * (1 + 0.34 * wind)), 0)", "alias": "et0"},
        { "expression": "max(0, min(1, 1 - 1.05 * et0 / max_et0_threshold))", "alias": "et0_stress"},
        { "expression": "(max((temperature - base_temperature), 0) * dsw_radiation) * 0.55", "alias": "PTU" },
        { "expression": "dsw_radiation >= useful_radiation_cutoff ? 1 : dsw_radiation / useful_radiation_cutoff", "alias": "radiation_stress"},
        { "expression": "min(max(0, (temperature - cold_stress_threshold) / (cold_stress_recovery_temperature - cold_stress_threshold)), 1)", "alias": "cold_stress"},
        { "expression": "min(max(0, (soil_moisture - wilting_point)/(field_capacity - wilting_point)), 1)", "alias": "water_stress" },
        { "expression": "PTU * water_stress * cold_stress * radiation_stress * et0_stress", "alias": "PTU_adjusted" }
    ]
}'

Résultat :

forecasted_at,forecasted_time,lat,lon,name,PTU,PTU_adjusted,base_temperature,blister_threshold,cold_stress,cold_stress_recovery_temperature,cold_stress_threshold,delta,dent_threshold,dough_threshold,dsw_radiation,ea,emergence_threshold,es,et0,et0_stress,field_capacity,gamma,ground_heat_flux,humidity,maturity_threshold,max_et0_threshold,milk_threshold,net_radiation,radiation_stress,silking_threshold,soil_moisture,tasseling_threshold,temperature,ulw_radiation,useful_radiation_cutoff,vpd,water_stress,wilting_point,wind
2024-05-01T02:00:00Z,2024-05-01T02:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.1177,2700,2400,0.0000,1.5558,120,1.8455,0,1,0.3000,0.0660,0.1440,0.8430,2900,0.3500,2100,-1.3260,0.0000,1500,0.2490,1300,16.2332,1.3260,0.2500,0.2898,0.6600,0.1500,1.9666
2024-05-01T03:00:00Z,2024-05-01T03:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.1138,2700,2400,0.0000,1.5708,120,1.7769,0,1,0.3000,0.0660,0.0360,0.8840,2900,0.3500,2100,-1.3156,0.0000,1500,0.2490,1300,15.6400,1.3156,0.2500,0.2061,0.6600,0.1500,2.9006
2024-05-01T00:00:00Z,2024-05-01T00:00:00Z,42.0347,-93.6200,Iowa,0.0641,0.0026,10,1800,1,5,0,0.1265,2700,2400,0.0155,1.5834,120,2.0043,0,1,0.3000,0.0660,0.0720,0.7900,2900,0.3500,2100,-1.3388,0.0619,1500,0.2500,1300,17.5343,1.3508,0.2500,0.4209,0.6667,0.1500,1.6368
2024-05-01T04:00:00Z,2024-05-01T04:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.1130,2700,2400,0.0000,1.6018,120,1.7622,0,1,0.3000,0.0660,0.2160,0.9090,2900,0.3500,2100,-1.3189,0.0000,1500,0.2490,1300,15.5103,1.3189,0.2500,0.1604,0.6600,0.1500,4.0706
2024-05-01T06:00:00Z,2024-05-01T06:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.1031,2700,2400,0.0000,1.3385,120,1.5878,0,1,0.3000,0.0660,0.2880,0.8430,2900,0.3500,2100,-1.2832,0.0000,1500,0.2480,1300,13.8959,1.2832,0.2500,0.2493,0.6533,0.1500,4.6756
2024-05-01T07:00:00Z,2024-05-01T07:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.0965,2700,2400,0.0000,1.1602,120,1.4724,0,1,0.3000,0.0660,0.3240,0.7880,2900,0.3500,2100,-1.2630,0.0000,1500,0.2480,1300,12.7389,1.2630,0.2500,0.3121,0.6533,0.1500,4.0216
2024-05-01T09:00:00Z,2024-05-01T09:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.0839,2700,2400,0.0000,1.0344,120,1.2554,0,1,0.3000,0.0660,0.2520,0.8240,2900,0.3500,2100,-1.2218,0.0000,1500,0.2480,1300,10.3302,1.2218,0.2500,0.2210,0.6533,0.1500,2.1057
2024-05-01T05:00:00Z,2024-05-01T05:00:00Z,42.0347,-93.6200,Iowa,0.0000,0.0000,10,1800,1,5,0,0.1050,2700,2400,0.0000,1.4488,120,1.6205,0,1,0.3000,0.0660,0.2520,0.8940,2900,0.3500,2100,-1.2927,0.0000,1500,0.2490,1300,14.2103,1.2927,0.2500,0.1718,0.6600,0.1500,3.7411
...