Source code for pycif.plugins.domains.chimere.read_domain
import numpy as np
[docs]
def read_grid(domain, **kwargs):
"""Reads an horizontal and a vertical grid from existing files
Args:
domain (dictionary): dictionary defining the domain. Should include
filegrid to be able to read the grid from a file
Return:
Grid dictionary with meshgrids for center lon/lat and corner lon/lat
Notes:
"""
# Loading geometry from the list of existing domains
nzo = 0
nme = 0
with open("{}/domainlist.nml".format(domain.repgrid), "r") as fgrid:
ln = fgrid.readlines()
for l in ln[1:]:
s = l.split()
if s[0] == domain.domid:
nzo = int(s[1])
nme = int(s[2])
break
if nzo == nme == 0:
raise AttributeError("Could not find the domain {} in the domainlist file {}"
.format(domain.domid, domain.repgrid))
# Saving information to domain attributes
domain.nlat = nme
domain.nlon = nzo
# Reading lat/lon and latc/lonc
file_hcoord = "{}/HCOORD/COORD_{}".format(domain.repgrid, domain.domid)
data = np.genfromtxt(file_hcoord)
lon = data[:, 0].reshape(nme, nzo)
lat = data[:, 1].reshape(nme, nzo)
file_hcoord = "{}/HCOORD/COORDcorner_{}".format(
domain.repgrid, domain.domid
)
data = np.genfromtxt(file_hcoord)
lonc = data[:, 0].reshape(nme + 1, nzo + 1)
latc = data[:, 1].reshape(nme + 1, nzo + 1)
# Putting the data into the domain
domain.zlonc = lonc
domain.zlatc = latc
domain.zlon = lon
domain.zlat = lat
domain.corners = "{}/HCOORD/COORDcorner_{}".format(
domain.repgrid, domain.domid
)
# Reading vertical coordinates
file_vcoord = "{}/VCOORD/VCOORD_{}_{}_{}".format(
domain.repgrid, domain.nlev, domain.p1, domain.pmax
)
data = np.concatenate([[[0, 1]], np.genfromtxt(file_vcoord)], axis=0)
domain.sigma_a = data[:, 0] * 1e3
domain.sigma_b = data[:, 1]
domain.nlev = len(domain.sigma_a) - 1