Aller au contenu. | Aller à la navigation

Outils personnels

Navigation
Vous êtes ici : Accueil / Pour utiliser LMDZ / ressources / Cycle diurne

Cycle diurne

Script pour calculer le cycle diurne

Python Source icon diurnal_cycle.py — Python Source, 1 ko (1241 bytes)

Contenu du fichier

#!/usr/bin/env python3

"""This script reads a NetCDF file which should contain time series of
fields, and computes the diurnal cycle.

Author: Lionel GUEZ
"""

import sys
import cdo
import nco
import netCDF4
import os

def time_counter(hour):
    with netCDF4.Dataset(f"ncra_plouf{hour:02}.nc") as ncra_plouf:
        return ncra_plouf["time_counter"][0]

if len(sys.argv) != 3:
    sys.exit("Required arguments: input-netCDF-file output-netCDF-file")

cdo_instance = cdo.Cdo()
cdo_instance.splithour(output = "plouf", input = sys.argv[1])
nco_instance = nco.Nco()

for hour in range(24):
    nco_instance.ncra(input = f"plouf{hour:02}.nc",
                      output = f"ncra_plouf{hour:02}.nc")
    # (does not seem to work without the output argument)

    with netCDF4.Dataset(f"ncra_plouf{hour:02}.nc", "r+") as ncra_plouf, \
         netCDF4.Dataset(f"plouf{hour:02}.nc") as plouf:
        ncra_plouf["time_counter"][0] = plouf["time_counter"][0]

hour_list = sorted(range(24), key = time_counter)
nco_instance.ncrcat(input = [f"ncra_plouf{hour:02}.nc" for hour in hour_list],
                    output = sys.argv[2])

# Clean up:
for hour in range(24):
    os.remove(f"ncra_plouf{hour:02}.nc")
    os.remove(f"plouf{hour:02}.nc")