@@ -322,7 +322,8 @@ def get_layer_data(
322322 bottom_depth = data ["mesh2d_waterdepth" ].values [time_index , :]
323323 waterlevel = data ["mesh2d_s1" ].values [time_index , :]
324324 coords = list (data ["waterdepth" ].coords )
325- elif str (list (data [variable ].coords )) == "['FlowElem_xcc', 'FlowElem_ycc', 'time']" :
325+ elif str (list (data [variable ].coords )) == "['FlowElem_xcc', 'FlowElem_ycc', 'time']" or \
326+ str (list (data [variable ].coords )) == "['FlowLink_xu', 'FlowLink_yu', 'time']" :
326327 cords_to_layers = {
327328 "FlowElem_xcc FlowElem_ycc" : {
328329 "name" : "laydim" ,
@@ -336,6 +337,20 @@ def get_layer_data(
336337 bottom_depth = data ["waterdepth" ].values [time_index , :]
337338 waterlevel = data ["s1" ].values [time_index , :]
338339 coords = list (data ["waterdepth" ].coords )
340+ else :
341+ cords_to_layers = {
342+ "FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc" : {
343+ "name" : "laydim" ,
344+ "coords" : data .variables ["LayCoord_cc" ][:],
345+ },
346+ "FlowLink_xu FlowLink_yu" : {
347+ "name" : "wdim" ,
348+ "coords" : data .variables ["LayCoord_w" ][:],
349+ },
350+ }
351+ bottom_depth = data ["waterdepth" ].values [time_index , :]
352+ waterlevel = data ["s1" ].values [time_index , :]
353+ coords = list (data ["waterdepth" ].coords )
339354
340355 layer_dim = " " .join (map (str , list (data [variable ].coords )[0 :2 ]))
341356
@@ -349,30 +364,54 @@ def get_layer_data(
349364 elif isinstance (data , xr .Dataset ):
350365 layer_percentages = cord_sys .values # accumulative
351366
367+ if isinstance (data , netCDF4 .Dataset ):
368+ if layer_dim == "FlowLink_xu FlowLink_yu" :
369+ # interpolate
370+ x_laydim = np .ma .getdata (data .variables [coords [0 ]][:], False )
371+ y_laydim = np .ma .getdata (data .variables [coords [1 ]][:], False )
372+ points_laydim = np .array ([[x , y ] for x , y in zip (x_laydim , y_laydim )])
352373
353- if layer_dim == "FlowLink_xu FlowLink_yu" :
354- # interpolate
355- x_laydim = np .ma .getdata (data .variables [coords [0 ]][:], False )
356- y_laydim = np .ma .getdata (data .variables [coords [1 ]][:], False )
357- points_laydim = np .array ([[x , y ] for x , y in zip (x_laydim , y_laydim )])
374+ coords_request = str (data .variables [variable ].coordinates ).split ()
375+ x_wdim = np .ma .getdata (data .variables [coords_request [0 ]][:], False )
376+ y_wdim = np .ma .getdata (data .variables [coords_request [1 ]][:], False )
377+ points_wdim = np .array ([[x , y ] for x , y in zip (x_wdim , y_wdim )])
358378
359- coords_request = str (data .variables [variable ].coordinates ).split ()
360- x_wdim = np .ma .getdata (data .variables [coords_request [0 ]][:], False )
361- y_wdim = np .ma .getdata (data .variables [coords_request [1 ]][:], False )
362- points_wdim = np .array ([[x , y ] for x , y in zip (x_wdim , y_wdim )])
379+ bottom_depth_wdim = interp .griddata (points_laydim , bottom_depth , points_wdim )
380+ water_level_wdim = interp .griddata (points_laydim , waterlevel , points_wdim )
363381
364- bottom_depth_wdim = interp .griddata (points_laydim , bottom_depth , points_wdim )
365- water_level_wdim = interp .griddata (points_laydim , waterlevel , points_wdim )
382+ idx_bd = np .where (np .isnan (bottom_depth_wdim ))
366383
367- idx_bd = np .where (np .isnan (bottom_depth_wdim ))
384+ for i in idx_bd :
385+ bottom_depth_wdim [i ] = interp .griddata (
386+ points_laydim , bottom_depth , points_wdim [i ], method = "nearest"
387+ )
388+ water_level_wdim [i ] = interp .griddata (
389+ points_laydim , waterlevel , points_wdim [i ], method = "nearest"
390+ )
391+ elif isinstance (data , xr .Dataset ):
392+ if layer_dim == "FlowLink_xu FlowLink_yu" :
393+ # interpolate
394+ x_laydim = data [coords [0 ]].values
395+ y_laydim = data [coords [1 ]].values
396+ points_laydim = np .array ([[x , y ] for x , y in zip (x_laydim , y_laydim )])
368397
369- for i in idx_bd :
370- bottom_depth_wdim [i ] = interp .griddata (
371- points_laydim , bottom_depth , points_wdim [i ], method = "nearest"
372- )
373- water_level_wdim [i ] = interp .griddata (
374- points_laydim , waterlevel , points_wdim [i ], method = "nearest"
375- )
398+ coords_request = list (data [variable ].coords )[0 :2 ]
399+ x_wdim = data [coords_request [0 ]].values
400+ y_wdim = data [coords_request [1 ]].values
401+ points_wdim = np .array ([[x , y ] for x , y in zip (x_wdim , y_wdim )])
402+
403+ bottom_depth_wdim = interp .griddata (points_laydim , bottom_depth , points_wdim )
404+ water_level_wdim = interp .griddata (points_laydim , waterlevel , points_wdim )
405+
406+ idx_bd = np .where (np .isnan (bottom_depth_wdim ))
407+
408+ for i in idx_bd :
409+ bottom_depth_wdim [i ] = interp .griddata (
410+ points_laydim , bottom_depth , points_wdim [i ], method = "nearest"
411+ )
412+ water_level_wdim [i ] = interp .griddata (
413+ points_laydim , waterlevel , points_wdim [i ], method = "nearest"
414+ )
376415
377416 waterdepth = []
378417
@@ -595,8 +634,8 @@ def variable_interpolation(
595634 f"If a string, points must be cells or faces. Got { points } "
596635 )
597636
598- if not isinstance (data , netCDF4 .Dataset ):
599- raise TypeError (f"data must be netCDF4 object. Got { type (data )} " )
637+ if not isinstance (data , ( netCDF4 .Dataset , xr . Dataset ) ):
638+ raise TypeError (f"data must be netCDF4 or xarray Dataset object. Got { type (data )} " )
600639
601640 if not isinstance (to_pandas , bool ):
602641 raise TypeError (f"to_pandas must be of type bool. Got: { type (to_pandas )} " )
@@ -743,7 +782,8 @@ def get_all_data_points(
743782 bottom_depth = data ["mesh2d_waterdepth" ].values [time_index , :]
744783 waterlevel = data ["mesh2d_s1" ].values [time_index , :]
745784 coords = list (data ["waterdepth" ].coords )
746- elif str (list (data [variable ].coords )) == "['FlowElem_xcc', 'FlowElem_ycc', 'time']" :
785+ elif str (list (data [variable ].coords )) == "['FlowElem_xcc', 'FlowElem_ycc', 'time']" or \
786+ str (list (data [variable ].coords )) == "['FlowLink_xu', 'FlowLink_yu', 'time']" :
747787 cords_to_layers = {
748788 "FlowElem_xcc FlowElem_ycc" : {
749789 "name" : "laydim" ,
@@ -757,6 +797,20 @@ def get_all_data_points(
757797 bottom_depth = data ["waterdepth" ].values [time_index , :]
758798 waterlevel = data ["s1" ].values [time_index , :]
759799 coords = list (data ["waterdepth" ].coords )
800+ else :
801+ cords_to_layers = {
802+ "FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc" : {
803+ "name" : "laydim" ,
804+ "coords" : data .variables ["LayCoord_cc" ][:],
805+ },
806+ "FlowLink_xu FlowLink_yu" : {
807+ "name" : "wdim" ,
808+ "coords" : data .variables ["LayCoord_w" ][:],
809+ },
810+ }
811+ bottom_depth = data ["waterdepth" ].values [time_index , :]
812+ waterlevel = data ["s1" ].values [time_index , :]
813+ coords = list (data ["waterdepth" ].coords )
760814
761815 layer_dim = " " .join (map (str , list (data [variable ].coords )[0 :2 ]))
762816
@@ -879,8 +933,8 @@ def turbulent_intensity(
879933 f"value of the max time index { max_time_index } "
880934 )
881935
882- if not isinstance (data , netCDF4 .Dataset ):
883- raise TypeError ("data must be netCDF4 object" )
936+ if not isinstance (data , ( netCDF4 .Dataset , xr . Dataset ) ):
937+ raise TypeError ("data must be netCDF4 object or xarray Dataset " )
884938
885939 for variable in ["turkin1" , "ucx" , "ucy" , "ucz" ]:
886940 if variable not in data .variables .keys ():
0 commit comments