#!/usr/bin/env python3 # -*- coding: utf-8 -*- #--------------------------------------------------------------------------------# # This file is part of the PALM model system. # # PALM is free software: you can redistribute it and/or modify it under the terms # of the GNU General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # PALM is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # PALM. If not, see . # # Copyright 1997-2018 Leibniz Universitaet Hannover #--------------------------------------------------------------------------------# # # Current revisions: # ----------------- # # # Former revisions: # ----------------- # $Id: palm_csd_netcdf_interface.py 3629 2018-12-13 12:18:54Z maronga $ # Some new routines # # 3567 2018-11-27 13:59:21Z maronga # Initial revisions # # Description: # ------------ # NetCDF interface routines for palm_csd # # @Author Bjoern Maronga (maronga@muk.uni-hannover.de) # #------------------------------------------------------------------------------# from netCDF4 import Dataset def nc_read_from_file_2d(filename, varname, x0, x1, y0, y1): import numpy as np import sys try: f = open(filename) f.close() # print("Load: " + filename + ".") except FileNotFoundError: print("Error: " + filename + ". No such file. Aborting...") sys.exit(1) nc_file = Dataset(filename, "r+", format="NETCDF4") tmp_array = np.array(nc_file.variables[varname][y0:y1+1,x0:x1+1] , dtype=type(nc_file.variables[varname])) return tmp_array def nc_read_from_file_2d_all(filename, varname): import numpy as np import sys try: f = open(filename) f.close() # print("Load: " + filename + ".") except FileNotFoundError: print("Error: " + filename + ". No such file. Aborting...") sys.exit(1) nc_file = Dataset(filename, "r+", format="NETCDF4") tmp_array = np.array(nc_file.variables[varname][:][:], dtype=type(nc_file.variables[varname])) return tmp_array def nc_read_from_file_3d_all(filename, varname): import numpy as np import sys try: f = open(filename) f.close() # print("Load: " + filename + ".") except FileNotFoundError: print("Error: " + filename + ". No such file. Aborting...") sys.exit(1) nc_file = Dataset(filename, "r+", format="NETCDF4") tmp_array = np.array(nc_file.variables[varname][:][:][:], dtype=type(nc_file.variables[varname])) return tmp_array def nc_read_from_file_1d(filename, varname, x0, x1): import numpy as np import sys try: f = open(filename) f.close() #print("Load: " + filename + ".") except FileNotFoundError: print("Error: " + filename + ". No such file. Aborting...") sys.exit(1) nc_file = Dataset(filename, "r+", format="NETCDF4") tmp_array = np.array(nc_file.variables[varname][x0:x1+1] , dtype=type(nc_file.variables[varname])) return tmp_array def nc_create_file(filename): import datetime try: f = Dataset(filename, "w", format="NETCDF4") f.close() print("Created: " + filename + ".") except FileNotFoundError: print("Error. Could not create file: " + filename + ". Aborting...") sys.exit(1) return 0 def nc_write_global_attributes(filename,origin_x,origin_y,origin_lat,origin_lon,origin_time, global_acronym,global_angle, global_author,global_campaign,global_comment,global_contact,global_data_content, global_dependencies,global_institution,global_keywords,global_location,global_palm_version, global_references,global_site,global_source,global_version): import datetime import os print("Writing global attributes to file...") f = Dataset(filename, "a", format="NETCDF4") f.setncattr('Conventions',"CF-1.7") f.origin_x = origin_x f.origin_y = origin_y f.origin_time = origin_time f.origin_lat = origin_lat f.origin_lon = origin_lon f.acronym = global_acronym f.rotation_angle = global_angle f.author = global_author f.campaign = global_campaign f.comment = global_comment f.contact = global_contact f.data_content = global_data_content f.dependencies = global_dependencies f.institution = global_institution f.keywords = global_keywords f.location = global_location f.palm_version = global_palm_version f.references = global_references f.site = global_site f.source = global_source f.version = global_version f.close() return 0 def nc_write_dimension(filename,varname,array,datatype): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing dimension " + varname + " to file...") f.createDimension(varname,len(array)) temp = f.createVariable(varname,datatype,varname) temp[:] = array f.close() return 0 def nc_write_to_file_2d(filename,varname,array,datatype,dimname1,dimname2,fillvalue): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing array " + varname + " to file...") temp = f.createVariable(varname,datatype,(dimname1,dimname2),fill_value=fillvalue) temp[:] = array f.close() return 0 def nc_overwrite_to_file_2d(filename,varname,array): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing array " + varname + " to file...") temp = f.variables[varname] temp[:,:] = array f.close() return 0 def nc_overwrite_to_file_3d(filename,varname,array): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing array " + varname + " to file...") temp = f.variables[varname] temp[:,:,:] = array f.close() return 0 def nc_write_to_file_3d(filename,varname,array,datatype,dimname1,dimname2,dimname3,fillvalue): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing array " + varname + " to file...") temp = f.createVariable(varname,datatype,(dimname1,dimname2,dimname3),fill_value=fillvalue) temp[:,:,:] = array f.close() return 0 def nc_write_attribute(filename,variable,attribute,value): f = Dataset(filename, "a", format="NETCDF4") var = f.variables[variable] var.setncattr(attribute,value) f.close() return 0 def nc_write_crs(filename): try: f = Dataset(filename, "a", format="NETCDF4") #print("Opened: " + filename + ".") except FileNotFoundError: print("Error. Could not open file: " + filename + ". Aborting...") sys.exit(1) print("Writing crs to file...") temp = f.createVariable("crs","i") temp.long_name = "coordinate reference system" temp.grid_mapping_name = "transverse_mercator" temp.semi_major_axis = 6378137.0 temp.inverse_flattening = 298.257222101 temp.longitude_of_prime_meridian = 0.0 temp.longitude_of_central_meridian = 9.0 temp.scale_factor_at_central_meridian = 0.9996 temp.latitude_of_projection_origin = 0.0 temp.false_easting = 50000.0 temp.false_northing = 0.0 temp.units = "m" temp.epsg_code = "EPSG:25833" f.close() return 0