[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/AetherModel/AetherDocumentation/main/scripts/plot_sphere.py [Back]  [Original]

#!/opt/local/bin/python
from __future__ import print_function

import numpy as np
import netCDF4
import matplotlib.pyplot as plt
from math import pi

directory = '../restarts/restartOut.Sphere.1member/'

files = [directory+'grid_g' + str(side).zfill(4) + '.nc' for side in range(0,4)]
print(files)

colors = ['#0072b2', '#e69f00', '#cc79a7', '#009e73']

radians_to_degrees = 180.0/pi

plotting = False
# Plot the full extent of the latitudes and longitudes 
if plotting: 
    fig, ax = plt.subplots()

    for ifile, this_file in enumerate(files):
        f = netCDF4.Dataset(this_file)
        # Slice the longitude and latitude arrays to only include the lowest altitude
        lons = f.variables['Longitude'][:, :, 0]*radians_to_degrees
        lats = f.variables['Latitude'][:, :, 0]*radians_to_degrees
        ax.scatter(lons, lats, c=colors[ifile], alpha=0.3, edgecolors='none', label='Grid ' + str(ifile).zfill(4))
        f.close()

    ax.legend(loc='lower right')
    plt.title('Grid file correspondence to sphere')
    plt.ylabel('Latitude')
    plt.xlabel('Longitude')
    plt.xlim((-20, 380))
    plt.ylim((-100, 100)) 
    plt.savefig('../_static/sphere_scatter.png', dpi=200, transparent=True, bbox_inches='tight')
    plt.clf()


print('+-----------+---------+---------+---------+---------+')
print('| Grid file | Min lat | Max lat | Min lon | Max lon |')
print('+-----------+---------+---------+---------+---------+')

for ifile, this_file in enumerate(files):
    
    f = netCDF4.Dataset(this_file)
    if ifile == 0:
        lons = f.variables['Longitude'][2:-2, 2:-2, 0]*radians_to_degrees
        lats = f.variables['Latitude'][2:-2, 2:-2, 0]*radians_to_degrees
    elif ifile == 1:
        lons = f.variables['Longitude'][2:-2, 2:-2, 0]*radians_to_degrees
        lats = f.variables['Latitude'][2:-2, 2:-2, 0]*radians_to_degrees
    elif ifile == 2:
        lons = f.variables['Longitude'][2:-2, 2:-2, 0]*radians_to_degrees
        lats = f.variables['Latitude'][2:-2, 2:-2, 0]*radians_to_degrees
    elif ifile == 3:
        lons = f.variables['Longitude'][2:-2, 2:-2, 0]*radians_to_degrees
        lats = f.variables['Latitude'][2:-2, 2:-2, 0]*radians_to_degrees
    print('| '+'{0: >9}'.format(str(ifile).zfill(4))+' | ' + '{0: >7}'.format(str(np.min(lats))[0:7]) + ' | ' + '{0: >7}'.format(str(np.max(lats))[0:7]) + ' | ' + '{0: >7}'.format(str(np.min(lons))[0:7]) + ' | ' + '{0: >7}'.format(str(np.max(lons))[0:7]) + ' |')
    print('+-----------+---------+---------+---------+---------+')

# Truncate the latitudes and longitudes so there is no overlap

fig, ax = plt.subplots()

for ifile, this_file in enumerate(files):
    f = netCDF4.Dataset(this_file)
    # Slice the longitude and latitude arrays to only include the lowest altitude
    lons = f.variables['Longitude'][2:-2, 2:-2, 0]*radians_to_degrees
    lats = f.variables['Latitude'][2:-2, 2:-2, 0]*radians_to_degrees
    
    ax.scatter(lons, lats, c=colors[ifile], alpha=0.3, edgecolors='none', label='Grid ' + str(ifile).zfill(4))
    f.close()

ax.legend(loc='lower right')
plt.title('[2:-2, 2:-2] Truncated grid file correspondence to sphere')
plt.ylabel('Latitude')
plt.xlabel('Longitude')
plt.savefig('../_static/sphere_scatter_truncated.png', dpi=200, transparent=True, bbox_inches='tight')
plt.clf()

Web Proxy Viewer  |  New URL  |  Original Page