@@ -332,6 +332,24 @@ def calc_costs(
332332 # interpolation with 0's
333333 surge_noadapt = []
334334 surge = []
335+
336+ def _check_vals (rh_diff_arr , lslr_arr , seg ):
337+ error_str = (
338+ "{0} value is {1} than {2} in storm damage lookup "
339+ f"table for segment { seg } . Please investigate why this is. You may "
340+ "need to re-generate the surge lookup table (or perhaps the `refA` "
341+ "(initial adaptation) table if it was generated for a different "
342+ "set of SLR scenarios or years."
343+ )
344+ if rh_diff_arr .max () > this_surge_lookup .rh_diff .max ():
345+ raise ValueError (error_str .format ("rh_diff" , "higher" , "maximum" ))
346+ if rh_diff_arr .min () < this_surge_lookup .rh_diff .min ():
347+ raise ValueError (error_str .format ("rh_diff" , "lower" , "minimum" ))
348+ if lslr_arr .max () > this_surge_lookup .lslr .max ():
349+ raise ValueError (error_str .format ("lslr" , "higher" , "maximum" ))
350+ if lslr_arr .min () < this_surge_lookup .lslr .min ():
351+ raise ValueError (error_str .format ("lslr" , "lower" , "minimum" ))
352+
335353 for seg in inputs .seg .values :
336354 this_surge_lookup = (
337355 surge_lookup .sel (seg = seg )
@@ -342,38 +360,47 @@ def calc_costs(
342360 lslr_too_low = lslr .sel (seg = seg ) < this_surge_lookup .lslr .min ()
343361 if this_surge_lookup .sum () == 0 :
344362 continue
363+
364+ this_rh_diff_noadapt = rh_diff_noadapt .sel (seg = seg , drop = True )
365+ this_lslr = lslr .sel (seg = seg , drop = True )
366+ _check_vals (this_rh_diff_noadapt , this_lslr , seg )
367+
345368 this_surge_noadapt = (
346369 this_surge_lookup .sel (adapttype = "retreat" , drop = True )
347370 .interp (
348- lslr = lslr . sel ( seg = seg ) ,
349- rh_diff = rh_diff_noadapt . sel ( seg = seg ) ,
371+ lslr = this_lslr ,
372+ rh_diff = this_rh_diff_noadapt ,
350373 assume_sorted = True ,
351374 )
352375 .reset_coords (drop = True )
353376 .expand_dims (seg = [seg ])
354377 )
355378
356379 # ensure nans are only at the beginning
357- assert (this_surge_noadapt .notnull () | lslr_too_low ).all ()
380+ assert (this_surge_noadapt .notnull () | lslr_too_low ).all (), seg
358381
359382 surge_noadapt .append (this_surge_noadapt .fillna (0 ))
360383
361384 surge_adapt = []
385+
386+ this_rh_diff_adapt = rh_diff .sel (seg = seg , drop = True )
387+ _check_vals (this_rh_diff_noadapt , this_lslr , seg )
388+
362389 for adapttype in this_surge_lookup .adapttype .values :
363390 this_surge_adapt = (
364391 this_surge_lookup .sel (adapttype = adapttype )
365392 .interp (
366- lslr = lslr . sel ( seg = seg ) ,
367- rh_diff = rh_diff .sel (
368- adapttype = adapttype , seg = seg , drop = True
393+ lslr = this_lslr ,
394+ rh_diff = this_rh_diff_adapt .sel (
395+ adapttype = adapttype , drop = True
369396 ),
370397 assume_sorted = True ,
371398 )
372399 .reset_coords (drop = True )
373400 )
374401
375402 # ensure nans are only at the beginning
376- assert (this_surge_adapt .notnull () | lslr_too_low ).all ()
403+ assert (this_surge_adapt .notnull () | lslr_too_low ).all (), seg
377404
378405 surge_adapt .append (this_surge_adapt .fillna (0 ))
379406 surge .append (
@@ -1157,7 +1184,7 @@ def execute_pyciam(
11571184 storage_options = storage_options ,
11581185 )
11591186 # block on this calculation
1160- wait (surge_futs )
1187+ client . gather (surge_futs )
11611188
11621189 ###############################
11631190 # define temporary output store
@@ -1380,7 +1407,7 @@ def execute_pyciam(
13801407 ###############################
13811408 # Rechunk and save final
13821409 ###############################
1383- wait (ciam_futs_2 .tolist ())
1410+ client . gather (ciam_futs_2 .tolist ())
13841411 assert [f .status == "finished" for f in ciam_futs_2 .tolist ()]
13851412 client .cancel (ciam_futs_2 )
13861413 del ciam_futs_2
0 commit comments