#!/usr/bin/env python3
# convert from fixed grid to another fixed grid
#;;DIAG_NORCPM;; DSTFILE: VAR_ocngrid.nc
#;;DIAG_NORCPM;; SRCFILE: 
#;;DIAG_NORCPM;; SRCVAR: 
#;;DIAG_NORCPM;; OVARPOST: ## no postproc for ovar

from os.path import exists
from sys import exit

def regrid_fix2fix(srcf,srcvn,dstf=''):  # convert 
    import xarray as xr
    import xesmf  as xe
    ## input grid
    ifile = xr.open_dataset(srcf)
    srclat = ifile.variables['lat']
    srclon = ifile.variables['lon']

    ## dst grid file
    dfile = xr.open_dataset(dstf)
    dstlat = dfile.variables['lat']
    dstlon = dfile.variables['lon']

    ## set grid
    srcgrid = xr.Dataset({
        'lat': srclat,
        'lon': srclon
        })
    dstgrid = xr.Dataset({
        'lat': dstlat,
        'lon': dstlon
        })
    regridder = xe.Regridder(srcgrid,dstgrid,'bilinear',periodic=True,ignore_degenerate=True)
    ## ignore_degenerate=True is necessery for NorESM2-MM grid
    return regridder(ifile[srcvn])

if __name__ == '__main__':
    srcfile = '/projects/NS9039K/data/external/observation/GPCP/precip.mon.mean.nc'
    srcvar  = 'precip'
    dstgridfile = 'N2_FF_detrend_PRECT_ensmean_1980-2020.nc'
    outputf = 'gpcp_prec_atm_grid_1980-2020.nc'

    if exists(outputf): 
        print(f'{outputf} exist, skip.')
        exit()
    ## regrid
    import xarray as xr
    ovar = regrid_fix2fix(srcfile,srcvar,dstgridfile)
    years = list(range(1980,2020+1))
    ovar = ovar.sel(time=ovar.time.dt.year.isin(years))
    
    outds = xr.Dataset({srcvar:ovar})
    outds.to_netcdf(outputf,mode='w')

