Пример #1
0
def test_getnetdata(file_nc, expected_size):
    """
    file_nc = os.path.join(dir_testinput,'DFM_3D_z_Grevelingen','computations','run01','DFM_OUTPUT_Grevelingen-FM','Grevelingen-FM_0000_map.nc')
    expected_size = 44796
    """
    from dfm_tools.get_nc import get_netdata
    
    ugrid = get_netdata(file_nc)
    
    assert ugrid.verts.shape[0] == expected_size
Пример #2
0
def test_UGrid_polygon_intersect():
    import numpy as np
    from dfm_tools.get_nc import get_netdata
    
    file_nc = os.path.join(dir_testinput,'DFM_sigma_curved_bend\\DFM_OUTPUT_cb_3d\\cb_3d_map.nc')
    multipart = None
    line_array = np.array([[2084.67741935, 3353.02419355], #with linebend in cell en with line crossing same cell twice
       [2255.79637097, 3307.15725806],
       [2222.27822581, 3206.60282258],
       [2128.78024194, 3266.58266129]])

    ugrid = get_netdata(file_nc=file_nc, multipart=multipart)

    #intersect function, find crossed cell numbers (gridnos) and coordinates of intersection (2 per crossed cell)
    intersect_gridnos, intersect_coords = ugrid.polygon_intersect(line_array, optimize_dist=False)
    
    expected_intersectgridnos = np.array([ 91, 146, 146, 147, 147, 201, 201, 202], dtype=np.int64)
    expected_intersectcoords = np.array([[[2084.67741935, 2144.15041424],
                                            [3353.02419355, 3337.08297842]],
                                    
                                           [[2144.15041424, 2202.53662217],
                                            [3337.08297842, 3321.43306702]],
                                    
                                           [[2173.05750857, 2128.78024194],
                                            [3238.17837704, 3266.58266129]],
                                    
                                           [[2202.53662217, 2255.79637097],
                                            [3321.43306702, 3307.15725806]],
                                    
                                           [[2255.79637097, 2246.9810802 ],
                                            [3307.15725806, 3280.71138574]],
                                    
                                           [[2239.02015401, 2222.27822581],
                                            [3256.82860719, 3206.60282258]],
                                    
                                           [[2222.27822581, 2173.05750857],
                                            [3206.60282258, 3238.17837704]],
                                    
                                           [[2246.9810802 , 2239.02015401],
                                            [3280.71138574, 3256.82860719]]])
    
    assert (intersect_gridnos-expected_intersectgridnos<1e-9).all()
    assert (intersect_coords-expected_intersectcoords<1e-8).all()
            [79018.07708186, 435169.27404501],
            [81324.39771538, 434536.89580679],
            [82923.94267088, 434611.29324658],
            [84449.09018659, 435132.07532512],
            [86606.61594052, 434685.69068637],
            [88689.74425466, 435355.26764449],
            [90772.8725688, 434983.28044554],
            [91926.03288556, 435132.07532512]
        ])
        val_ylim = None
        clim_bl = [-10, 10]
        #optimize_dist = 150
    else:
        raise Exception('ERROR: no settings provided for this mapfile')

    ugrid = get_netdata(file_nc=file_nc, multipart=multipart)

    #get bedlevel and create plot with ugrid and cross section line
    data_frommap_bl = get_ncmodeldata(file_nc=file_nc,
                                      varname='mesh2d_flowelem_bl',
                                      multipart=multipart)
    fig, ax_input = plt.subplots()
    pc = plot_netmapdata(ugrid.verts,
                         values=data_frommap_bl,
                         ax=ax_input,
                         linewidth=0.5,
                         edgecolors='face',
                         cmap='jet')  #, color='crimson', facecolor="None")
    pc.set_clim(clim_bl)
    fig.colorbar(pc, ax=ax_input)
    ax_input.set_aspect('equal')
                                  varname='waterlevel',
                                  station='all',
                                  timestep='all')
fig, ax = plt.subplots(1, 1, figsize=(10, 5))
for iP, station in enumerate(data_fromhis_wl.var_stations['station_name']):
    ax.plot(data_fromhis_wl.var_times,
            data_fromhis_wl[:, iP],
            '-',
            label=station)
ax.legend()
ax.set_ylabel(
    '%s (%s)' %
    (data_fromhis_wl.var_varname, data_fromhis_wl.var_ncvarobject.units))

#plot net/grid
ugrid_all = get_netdata(file_nc=file_nc_map)  #,multipart=False)
fig, ax = plt.subplots()
pc = plot_netmapdata(ugrid_all.verts,
                     values=None,
                     ax=None,
                     linewidth=0.5,
                     color="crimson",
                     facecolor="None")
ax.set_aspect('equal')

#plot water level on map
data_frommap_wl = get_ncmodeldata(file_nc=file_nc_map,
                                  varname='mesh2d_s1',
                                  timestep=3)  #, multipart=False)
fig, ax = plt.subplots()
pc = plot_netmapdata(ugrid_all.verts,
Пример #5
0
#plt.close('all')

file = 'p:\\1221207-kuweit-iczm-marshlands\\02_Marshlands\\task_5D_-_Water_Quality\\02_modelSetup\\03_loads\\UAE_diffuse_loads.def'
grd = 'p:\\1221207-kuweit-iczm-marshlands\\02_Marshlands\\task_5C_-_Sediment_Transport\\model_setup\\coupling\\final\\aggregations\\7_zones_4x4\\7_zones_4x4_waqgeom.nc'
#grd = r'p:\1221207-kuweit-iczm-marshlands\02_Marshlands\task_5D_-_Water_Quality\02_modelSetup\T04\7_zones_4x4_waqgeom.nc'

segs = dict()
with open(file, 'r') as def_file:
    lines = def_file.readlines()
    for line in lines:
        if "'" in line:
            tmp = line.split(' ')
            segs[tmp[2]] = int(tmp[0])

fig, ax = plt.subplots()
ugrid = get_netdata(grd)
pc = plot_netmapdata(ugrid.verts, values=None, ax=None, linewidth=0.5, color="crimson", facecolor="None")
ax.set_aspect(1./np.cos(np.mean(ax.get_ylim())/180*np.pi),adjustable='box') # see Matlab axislat()
show_waq_segment(grd, 8, segs)


grd = 'p:\\11202512-h2020_impaqt\\03_waterquality\\03_baseCase\\RT_spin\\NZB_waqgeom_UGRID.nc'
segs = {'module_1 (11)': 448023,
       'module_1 (12)': 491961,
       'module_1 (13)': 535899}

fig, ax = plt.subplots()
ugrid = get_netdata(grd)
pc = plot_netmapdata(ugrid.verts, values=None, ax=None, linewidth=0.5, color="crimson", facecolor="None")
show_waq_segment(grd, 20, segs)
Пример #6
0
"""

# import libraries
from dfm_tools.get_nc import get_netdata, get_ncmodeldata, plot_netmapdata
from dfm_tools.get_nc_helpers import get_ncvardimlist, get_timesfromnc, get_hisstationlist
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt

# set filename
fname = 'C:\\Users\\backeber\\OneDrive - Stichting Deltares\\Desktop\\Project-D-HYDRO-Phase-4\\dflowfm\\dflowfm_serial\\oceaneddy_expt00_20010101_000000_rst.nc'
ds = xr.open_dataset(fname)
# plt.scatter(ds.FlowElem_xzw.data,ds.FlowElem_yzw.data,1,ds.s1.data[0,:])

ugrid_all = get_netdata(
    file_nc=
    'C:\\Users\\backeber\\OneDrive - Stichting Deltares\\Desktop\\Project-D-HYDRO-Phase-4\\dflowfm\\dflowfm_serial\\DFM_OUTPUT_oceaneddy_expt00\\oceaneddy_expt00_map.nc'
)
#ugrid_all = get_netdata(file_nc=fname)
ds = xr.open_dataset(fname)

ssh = get_ncmodeldata(file_nc=fname, varname='s1', timestep=0)

# find location of max ssh to add to plot
maxi = np.argmax(ssh)

fig, ax = plt.subplots()  #(figsize=(15, 10))

pc = plot_netmapdata(ugrid_all.verts,
                     values=ssh[0, :],
                     ax=ax,
                     linewidth=0.5,
Пример #7
0
from dfm_tools.get_nc import get_netdata, plot_netmapdata

dir_testinput = r'c:\DATA\dfm_tools_testdata'
dir_output = '.'

file_nc_list = [
    os.path.join(
        dir_testinput,
        r'DFM_3D_z_Grevelingen\computations\run01\Grevelingen_FM_grid_20190603_net.nc'
    ),
    os.path.join(dir_testinput, 'vanNithin', 'myortho3_RGFGRID_net.nc'),
    os.path.join(dir_testinput, 'DFM_fou_RMM', 'rooster_rmm_v1p5_net.nc'),
]

for file_nc in file_nc_list:

    print('plot only grid from net.nc')
    ugrid = get_netdata(file_nc=file_nc)
    fig, ax = plt.subplots()
    plot_netmapdata(ugrid.verts,
                    values=None,
                    ax=None,
                    linewidth=0.5,
                    color="crimson",
                    facecolor="None")
    ax.set_aspect('equal')
    plt.savefig(
        os.path.join(dir_output,
                     os.path.basename(file_nc).replace('.', '')))
Пример #8
0
#
expt = 'expt03'
varname = 'mesh2d_ucy'
tstep2plot = 0

#
# import libraries
#
from dfm_tools.get_nc import get_netdata, get_ncmodeldata, plot_netmapdata
from dfm_tools.get_nc_helpers import get_ncvardimlist, get_timesfromnc, get_hisstationlist
import matplotlib.pyplot as plt
import xarray as xr
import numpy as np

fname = 'C:\\Users\\backeber\\OneDrive - Stichting Deltares\\Desktop\\Project-D-HYDRO-Phase-4\\dflowfm\\dflowfm_serial\\DFM_OUTPUT_ocean_eddy_' + expt + '\\ocean_eddy_' + expt + '_map.nc'
ugrid_all = get_netdata(file_nc=fname)
ds = xr.open_dataset(fname)

fig, axs = plt.subplots(1, 1, figsize=(5, 5))

var = get_ncmodeldata(file_nc=fname, varname=varname, timestep=tstep2plot)

pc = plot_netmapdata(ugrid_all.verts,
                     values=var[0, :],
                     ax=axs,
                     linewidth=0.5,
                     cmap="jet")
#pc.set_clim([0, 0.25])
#axs.plot(x[:i],y[:i],'r.', markersize = 2)
axs.set_title(np.datetime_as_string(ds.time.data[tstep2plot], unit='h'))
#axs.set_title('t = '+str(tstep2plot)+' hours')
Пример #9
0
varlist = ['Chlfa']  #,'mesh2d_s1']
dir_shp = dir_output
if not os.path.exists(dir_shp):
    os.makedirs(dir_shp)
file_nc = os.path.join(
    r'p:\11203850-coastserv\06-Model\waq_model\simulations\run0_20200319\DFM_OUTPUT_kzn_waq',
    'kzn_waq_0000_map.nc')

vars_pd, dims_pd = get_ncvardimlist(file_nc=file_nc)
vars_pd_matching = vars_pd[vars_pd.loc[:, 'long_name'].str.match('.*Chl.*')]
#vars_pd_matching = vars_pd[vars_pd.loc[:,'long_name'].str.startswith('') & vars_pd.loc[:,'long_name'].str.endswith('Chlo')]
varns_Chl = vars_pd_matching['nc_varkeys'].tolist()
varns_Chl_long = vars_pd_matching['long_name'].tolist()

ugrid = get_netdata(file_nc=file_nc)  #, multipart=False)

pol_shp_list = []
#partly from dfm_tools.ugrid.polygon_intersect()
for iP, pol_data in enumerate(ugrid.verts):  #[range(5000),:,:]
    pol_data_nonan = pol_data[~np.isnan(pol_data).all(axis=1)]
    pol_shp = Polygon(pol_data_nonan)
    pol_shp_list.append(pol_shp)

print('creating geodataframe with cells')
newdata = gpd.GeoDataFrame(crs="EPSG:4326")
newdata[
    'geometry'] = pol_shp_list  #way more time efficient than doing it the loop

for iV, varname in enumerate(varlist):
    newdata[varname] = None
Пример #10
0
"import libraries"
from dfm_tools.get_nc import get_netdata, get_ncmodeldata, plot_netmapdata
from dfm_tools.get_nc_helpers import get_ncvardimlist, get_timesfromnc, get_hisstationlist
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

#set filename
fname11 = 'c:\oceaneddy\DFM_OUTPUT_oceaneddymankmx0-expt11\oceaneddymankmx0_map.nc'  # beta plane 100x100_dx2000
fname12 = 'c:\oceaneddy\DFM_OUTPUT_oceaneddymankmx0-expt12\oceaneddymankmx0_map.nc'  # sferic 100x100_dx2000
fname13 = 'c:\oceaneddy\DFM_OUTPUT_oceaneddymankmx0-expt13\oceaneddymankmx0_map.nc'  # sferic 100x100_dx2000 oceaneddysizefrac=0.025
fname14 = 'c:\oceaneddy\DFM_OUTPUT_oceaneddymankmx0-expt14\oceaneddymankmx0_map.nc'  # init from map, use release v2021.03, oceaneddysizefrac=0.05

ds11 = xr.open_dataset(fname11)
ugrid_all11 = get_netdata(file_nc=fname11)
ds12 = xr.open_dataset(fname12)
ugrid_all12 = get_netdata(file_nc=fname12)
ds13 = xr.open_dataset(fname13)
ugrid_all13 = get_netdata(file_nc=fname13)
ds14 = xr.open_dataset(fname14)
ugrid_all14 = get_netdata(file_nc=fname14)

x11 = np.empty(ds11.time.size)
y11 = np.empty(ds11.time.size)
x12 = np.empty(ds12.time.size)
y12 = np.empty(ds12.time.size)
x13 = np.empty(ds13.time.size)
y13 = np.empty(ds13.time.size)
x14 = np.empty(ds14.time.size)
y14 = np.empty(ds14.time.size)