@@ -425,93 +425,64 @@ def is_land(ti: int, zi: int, yi: int, xi: int):
425425 vval = corner_dataV [ti , zi , yi , xi , :]
426426 return np .where (np .isclose (uval , 0.0 ) & np .isclose (vval , 0.0 ), True , False )
427427
428- f_u = np .ones_like (xsi )
429- f_v = np .ones_like (eta )
428+ if is_dask_collection (u ):
429+ u = u .compute ()
430+ v = v .compute ()
431+ if vectorfield .W :
432+ w = w .compute ()
430433
434+ f_u = np .ones_like (xsi )
431435 if lenZ == 1 :
432- f_u = np .where (is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & (eta > 0 ), f_u * (a + b * eta ) / eta , f_u )
433- f_u = np .where (is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & (eta < 1 ), f_u * (1 - b * eta ) / (1 - eta ), f_u )
434- f_v = np .where (is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & (xsi > 0 ), f_v * (a + b * xsi ) / xsi , f_v )
435- f_v = np .where (is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & (xsi < 1 ), f_v * (1 - b * xsi ) / (1 - xsi ), f_v )
436+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & (eta > 0 )
436437 else :
437- f_u = np .where (
438- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & (eta > 0 ),
439- f_u * (a + b * eta ) / eta ,
440- f_u ,
441- )
442- f_u = np .where (
443- is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (eta < 1 ),
444- f_u * (1 - b * eta ) / (1 - eta ),
445- f_u ,
446- )
447- f_v = np .where (
448- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 1 , 0 ) & (xsi > 0 ),
449- f_v * (a + b * xsi ) / xsi ,
450- f_v ,
451- )
452- f_v = np .where (
453- is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 1 ) & (xsi < 1 ),
454- f_v * (1 - b * xsi ) / (1 - xsi ),
455- f_v ,
456- )
457- f_u = np .where (
458- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & (zeta > 0 ),
459- f_u * (a + b * zeta ) / zeta ,
460- f_u ,
461- )
462- f_u = np .where (
463- is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (zeta < 1 ),
464- f_u * (1 - b * zeta ) / (1 - zeta ),
465- f_u ,
466- )
467- f_v = np .where (
468- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & (zeta > 0 ),
469- f_v * (a + b * zeta ) / zeta ,
470- f_v ,
471- )
472- f_v = np .where (
473- is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (zeta < 1 ),
474- f_v * (1 - b * zeta ) / (1 - zeta ),
475- f_v ,
476- )
438+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & (eta > 0 )
439+ f_u [land ] = f_u [land ] * (a + b * eta [land ]) / eta [land ]
477440
478- if is_dask_collection (u ):
479- u = u .compute ()
480- v = v .compute ()
441+ if lenZ == 1 :
442+ land = is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & (eta < 1 )
443+ else :
444+ land = is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (eta < 1 )
445+ f_u [land ] = f_u [land ] * (1 - b * eta [land ]) / (1 - eta [land ])
481446
482447 u = u * f_u
483- v = v * f_v
484-
485448 if vectorfield .grid ._mesh == "spherical" :
486449 u /= 1852 * 60 * np .cos (np .deg2rad (particle_positions ["y" ]))
450+
451+ f_v = np .ones_like (eta )
452+ if lenZ == 1 :
453+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & (xsi > 0 )
454+ else :
455+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 1 , 0 ) & (xsi > 0 )
456+ f_v [land ] = f_v [land ] * (a + b * xsi [land ]) / xsi [land ]
457+
458+ if lenZ == 1 :
459+ land = is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & (xsi < 1 )
460+ else :
461+ land = is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 1 ) & (xsi < 1 )
462+ f_v [land ] = f_v [land ] * (1 - b * xsi [land ]) / (1 - xsi [land ])
463+
464+ v = v * f_v
465+ if vectorfield .grid ._mesh == "spherical" :
487466 v /= 1852 * 60
488467
489468 if vectorfield .W :
490469 f_w = np .ones_like (zeta )
491- f_w = np .where (
492- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & (eta > 0 ),
493- f_w * (a + b * eta ) / eta ,
494- f_w ,
495- )
496- f_w = np .where (
497- is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (eta < 1 ),
498- f_w * (a - b * eta ) / (1 - eta ),
499- f_w ,
500- )
501- f_w = np .where (
502- is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 1 , 0 ) & (xsi > 0 ),
503- f_w * (a + b * xsi ) / xsi ,
504- f_w ,
505- )
506- f_w = np .where (
507- is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 1 ) & (xsi < 1 ),
508- f_w * (a - b * xsi ) / (1 - xsi ),
509- f_w ,
510- )
470+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 0 , 1 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 0 , 1 ) & (eta > 0 )
471+ f_w [land ] = f_w [land ] * (a + b * eta [land ]) / eta [land ]
472+
473+ land = is_land (0 , 0 , 1 , 0 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 1 , 0 ) & is_land (0 , 1 , 1 , 1 ) & (eta < 1 )
474+ f_w [land ] = f_w [land ] * (1 - b * eta [land ]) / (1 - eta [land ])
475+
476+ land = is_land (0 , 0 , 0 , 0 ) & is_land (0 , 0 , 1 , 0 ) & is_land (0 , 1 , 0 , 0 ) & is_land (0 , 1 , 1 , 0 ) & (xsi > 0 )
477+ f_w [land ] = f_w [land ] * (a + b * xsi [land ]) / xsi [land ]
478+
479+ land = is_land (0 , 0 , 0 , 1 ) & is_land (0 , 0 , 1 , 1 ) & is_land (0 , 1 , 0 , 1 ) & is_land (0 , 1 , 1 , 1 ) & (xsi < 1 )
480+ f_w [land ] = f_w [land ] * (1 - b * xsi [land ]) / (1 - xsi [land ])
511481
512482 w = w * f_w
513483 else :
514484 w = np .zeros_like (u )
485+
515486 return u , v , w
516487
517488
@@ -657,7 +628,7 @@ def interp(
657628 values [some_land ] = val [some_land ] / w_sum [some_land ]
658629
659630 # If a particle hits exactly one of the 8 corner points, extract it
660- exact_mask = dist2 == 0 & valid_mask
631+ exact_mask = ( dist2 == 0 ) & valid_mask
661632 exact_vals = np .sum (np .where (exact_mask , corner_data , 0.0 ), axis = (0 , 1 , 2 , 3 ))
662633 has_exact = np .any (exact_mask , axis = (0 , 1 , 2 , 3 ))
663634
0 commit comments