From dc48ed6c3f8d93a83a5d42615b983a0c877e9491 Mon Sep 17 00:00:00 2001 From: cfontana00 Date: Tue, 9 Apr 2024 15:06:03 +0200 Subject: [PATCH] add meteo --- config/config_TEMPLATE.json | 7 ++ meteo/ECMWF/.process_data.py.swp | Bin 0 -> 24576 bytes meteo/ECMWF/get_data.py | 134 +++++++++++++++++++++ meteo/ECMWF/process_data.py | 196 +++++++++++++++++++++++++++++++ meteo/MOLOCH/process_meteo.py | 109 ++++++++++++++++- modules/.fun_gen.py.swp | Bin 12288 -> 0 bytes modules/.fun_io.py.swp | Bin 16384 -> 0 bytes 7 files changed, 441 insertions(+), 5 deletions(-) create mode 100644 meteo/ECMWF/.process_data.py.swp create mode 100644 meteo/ECMWF/get_data.py create mode 100644 meteo/ECMWF/process_data.py delete mode 100644 modules/.fun_gen.py.swp delete mode 100644 modules/.fun_io.py.swp diff --git a/config/config_TEMPLATE.json b/config/config_TEMPLATE.json index 417f4ad..dca726a 100644 --- a/config/config_TEMPLATE.json +++ b/config/config_TEMPLATE.json @@ -16,7 +16,14 @@ "_____":"METEO PARAMETERS", +"meteo_ini":"2015-03-10", +"meteo_end":"2015-03-11", "meteodir":"/path/to/meteo/files", +"imin":"500", +"imax":"600", +"jmin":"350", +"jmax":"450", + "_____":"DYFAMED PARAMETERS", diff --git a/meteo/ECMWF/.process_data.py.swp b/meteo/ECMWF/.process_data.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..79b418439a271e506c693d3dfbf3a9553abd8858 GIT binary patch literal 24576 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',ftag) + + full_data = [] + + + # Loop on days + # ------------ + for jd in range(mdini,mdend+1): + + date = dt.datetime.fromordinal(jd) + print(date.strftime('%Y-%m-%d')) + + year,mon,day = date.strftime('%Y'),date.strftime('%m'),date.strftime('%d') + + # Load variable + fname = indir+'/'+name+'_'+str(year)+mon+'_'+ftag+'.nc' + ds = xr.open_dataset(fname) + + # Loop on records + for rec in range(0,8): + + data = np.array(ds[var])[8*int(day)+rec,:,:] + + # Interpolate on model grid + data = data.flatten() + idata = griddata((met_lat,met_lon),data,(LAT,LON),method='linear') + full_data.append(idata.T) + + full_data = np.array(full_data) + ds.close() + + + # Specific tuning + #if tag[0] == 'surface_net_solar_radiation': + # full_data = full_data/3600. + # print('HERE') + + + # Write variable to NetCDF + # ------------------------ + vdata = dataset.createVariable(var,np.float32,('time','latitude','longitude'),fill_value=-9999) + vdata.units = units + print(var) + vlat.long_name = ds[var].GRIB_name + + vdata[:] = full_data + + + +dataset.close() + + + + + + + + + + + + + + + + + + + + + +''' + + for var in [ '10m_wind_direction', '10m_wind_speed', '2m_relative_humidity','surface_latent_heat_flux', 'surface_net_solar_radiation', 'surface_net_thermal_radiation','surface_pressure', 'surface_sensible_heat_flux', 'surface_solar_radiation_downwards','surface_thermal_radiation_downwards', 'time_integrated_surface_direct_short_wave_radiation_flux', 'total_cloud_cover','2m_temperature', 'evaporation', 'mean_sea_level_pressure','total_precipitation', '2m_temperature']: + + +''' + + diff --git a/meteo/MOLOCH/process_meteo.py b/meteo/MOLOCH/process_meteo.py index 20c2a25..8fd0060 100644 --- a/meteo/MOLOCH/process_meteo.py +++ b/meteo/MOLOCH/process_meteo.py @@ -11,6 +11,10 @@ from fun_gen import * from fun_io import * import sys,os +from glob import glob +import datetime as dt +import xarray as xr +from netCDF4 import Dataset # Get args @@ -25,13 +29,16 @@ # Create output directory # ----------------------- -os.system('mkdir -p '+meteodir+'/readyfiles') +savedir = meteodir + '/readyfiles' +os.system('mkdir -p ' + savedir) # Date conversion # --------------- mdini = datetime.strptime(meteo_ini,'%Y-%m-%d').toordinal() mdend = datetime.strptime(meteo_end,'%Y-%m-%d').toordinal() +print('Processing data from',meteo_ini,'to',meteo_end,'\n') + # Nomenclature # ------------ @@ -44,29 +51,121 @@ nom.append([ 'dswrf' , 'dswrf' , 'p3111' ]) # Downward short-wave radiation flux #nom.append([ '' , '', 'p3112' ]) # Downward long-wave radiation flux nom.append([ 'rh2m' , 'r2' , 'r' ]) # 2 metre relative humidity -nom.append([ 't2m' , 't2' , 't2m' ]) # 2 metre temperature +nom.append([ 't2m' , 't2m' , 't2m' ]) # 2 metre temperature nom.append([ 'clct' , 'clct' , 'tcc' ]) # Total Cloud Cover nom.append([ 'apcp' , 'unknown', 'tp' ]) # Total precipitation nom.append([ 'wind10m' , 'u10' , 'u10' ]) # 10 metre U wind component -nom.append([ 'wind10m' , 'v10' , 'v10' ]) # 10 metre U wind component +nom.append([ 'wind10m' , 'v10' , 'v10' ]) # 10 metre V wind component # ------------------------------------------------------------------------------------- +# Get dimensions size +# ------------------- +fname = glob(meteodir+'/*.nc')[0] +ds = xr.open_dataset(fname) +lon = ds['longitude'] +lat = ds['latitude'] +time = ds['time'] + +slon = lon.shape[0] +slat = lat.shape[0] + +ds.close() + + # Loop on days # ------------ for jd in range(mdini,mdend+1): + + # Define time parameters + # ----------------------- + d = dt.datetime.fromordinal(jd) + year,mon,day = d.strftime('%Y'),d.strftime('%m'),d.strftime('%d') + doy = int(d.strftime('%j')) + + print(year,mon,day) + + + if doy == 1 : + year = int(year)-1 + istart = 8760-24 + iend = 8760 + else : + istart = (doy-1)*24 + iend = (doy)*24 + + # !!!!!!!!!!!!!! + # REDUCE LON LAT + + + # Open file to write + # ------------------ + dtag = str(year)+mon+day + fout = savedir + '/'+ dtag + '00_mol02ecm.nc' + dataset = Dataset( fout ,'w',format='NETCDF3_CLASSIC') + + dlon = dataset.createDimension('longitude',slon) + dlat = dataset.createDimension('latitude',slat) + dtime= dataset.createDimension('time',24) + + + # Create variables & set attributes + # --------------------------------- + vlon = dataset.createVariable('longitude',np.float32,('longitude')) + vlon.units="degrees east" + vlon.long_name="Longitude of considered cell" + vlon[:] = lon + + vlat = dataset.createVariable('latitude',np.float32,('latitude')) + vlat.units="degrees north" + vlat.long_name="Latitude of considered cell" + vlat[:] = lat + + vtime = dataset.createVariable('time',np.float32,('time')) + vtime.units="hours since 1900-01-01 00:00:00.0" + vtime.long_name="time" + vtime.calendar = "gregorian" + vtime[:] = time[istart:iend] + + # Loop on variables # ----------------- for tags in nom: + intag = tags[0] invar = tags[1] ovar = tags[2] + #print(intag,invar,ovar) + + # Read data + # --------- + fname = meteodir+'/moloch_'+str(year)+'_'+intag+'.nc' + ds = xr.open_dataset(fname) + data = ds[invar][istart:iend,:,:] + ds.close() + + # Write data + # ---------- + vdata = dataset.createVariable(ovar,np.float32,('time','latitude','longitude'),fill_value=-9999) + try : + vdata.units = data.units + except : + pass + + if intag != "apcp": + vdata.long_name = data.long_name + else: + vdata.long_name = 'Total Precipitation' + + vdata[:] = data[:,:,:] + + dataset.close() + print("[SAVED NC]",fout,'\n') + - print(intag,invar,ovar) - exit() diff --git a/modules/.fun_gen.py.swp b/modules/.fun_gen.py.swp deleted file mode 100644 index 5eacd96e8247d158b88c14e393925c68034365a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2OKclO7{@0quTs)NIdEiZ6YU1S+N3~L$(2G9P}PK%2uiEOSQ~q6w(-uccGqqq zphZY<00alrBNrYLLL5Ni#!Hnr07Afl0}`A$@D>t}zJUKXyPNot+9|h+S?QPv*0k;15#io7zSsD8T%HT0jI$+a1=~{+rbX- z*$s?64W0r=!9&0V=eIKUDR>(^15SY!Xo3&~zy}AxZQ$bdj9mcd!8z~^cn`b;PJ+jP z17^TgU^Dn}3u9k{GvFQY7I+aXgNMO1NP{ilm+Kh&5_|zZ2k(N{!D%4DEEoqIYzN!G z57#pGF?bEU3SI#(gD1fvxEpYAE4T^#dJSVAffvB@;BjymjDg)C4N_ne7y=CZgP8se zE`kf-JU9o=g1^9@fa3l;(3e&~EAW3*AkB0AE|ekei?HcS-m2O@y}Cg@SP4Smn1-{2 zHlFjik)hsE^wOOddDXV+c*+4QhGjyNEblChcJxr&o>F$r;EpbXu9ji_+A) zl;Ine@QzwjRfp1saCmDvHEn zPlrXrttTDh9UT?N@{*phj-J&60A~=c_Vv2A5N&`QqH7UpwZzn;UE`4kyjY}|@1tf) zF|=~*2Dd=9rTL8OdK?+Dni-L1Fepk-MI>Af&8Y)(86(Q|!m4H2vBUD(Y0g)z(8yN9 z6;Bj{FmfE@ia3mQ5enHdjpWyzWwb}mlLJ#c=f(V>moX0*$z#Lb(D@`?a`R_eMAmXv;2C~5i;a> zjTR#f#d1Y>A)i(^I_p-zk&P7bOJshp8(n9ixSvl(HIL$gS{|*IF;s9wwd3IQ&eq)m zbMj{6MVYKQKVB8GT0~Nb&~`)~Ddo|Fi56=X(`BfPh^hc} zAfIS(9?x(h?(E!7vX?o56Nj~LW zMWU2yFCR427^U>3p~|BTl#lLYi{HujxVA(qCFhdnW<2y)q9f8)b0WLA;tZ%Zw2G<( zJr$>OwZT@vq^SCE@Pb_8A@m5GQ>8)G9l$ZAkDSYHF PeoU{v4_xBoAGZGjxHJ@t diff --git a/modules/.fun_io.py.swp b/modules/.fun_io.py.swp deleted file mode 100644 index 6b6bb06fbd52f2f69ac2d26ff929cea2ad043d45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 q!^_C##QZ`ndz)Fa$C+eCtRiyG)D{;GF3w0iW