13 from mpi4py
import MPI
20from yac.core
import (BasicGrid,
25 yac_weight_file_on_existing,
34logging.basicConfig(level=logging.WARNING, format=f
'%(name)s rank={rank} - %(levelname)s - %(message)s')
35logging.getLogger(
"yac.core").setLevel(logging.INFO)
39reg_grid = BasicGrid.reg_2d_new(
"reg_grid",
40 np.linspace(-2, 2, 20),
41 np.linspace(-1.5, 1.5, 20))
42reg_grid.set_core_mask(yac_location.YAC_LOC_CORNER, np.ones(400, dtype=int))
46 reg_grid.set_global_index(yac_location.YAC_LOC_CORNER, range(10**99, 10**99+400))
47 raise RuntimeError(
"set_global_index did not throw an exception for very large indices.")
51reg_grid.set_global_index(yac_location.YAC_LOC_CORNER, range(400))
52reg_grid.to_file(
"reg_grid.nc", comm)
54coords = reg_grid.add_coordinates(yac_location.YAC_LOC_CORNER)
55src_field = InterpField(coords)
57icon_grid, icon_cell_field = BasicGrid.read_icon(grid_dir+
"icon_grid_0030_R02B03_G.nc",
60interp_stack = InterpolationStack.from_list([(
"nnn", {
"n": 3,
"max_search_distance": 2.}),
61 (
"fixed", {
"value": 42.0})])
63weights = compute_weights(interp_stack,
67weights.write_to_file(
"weights.nc", on_existing=yac_weight_file_on_existing.YAC_WEIGHT_FILE_OVERWRITE)
69interpolate = weights.get_interpolation(collection_selection=[1, 4, 2])
71src_size = src_field.basic_grid.get_data_size(yac_location.YAC_LOC_CORNER)
72src = np.stack([i*np.ones(src_size, dtype=np.float64)
for i
in range(5)], axis=0)
75assert np.all(tgt[0,...] == 1.0), f
"Wrong result: {tgt=}"
76assert np.all(tgt[1,...] == 4.0), f
"Wrong result: {tgt=}"
77assert np.all(tgt[2,...] == 2.0), f
"Wrong result: {tgt=}"
79local_is_io, io_ranks = get_io_ranks()
80assert local_is_io ==
True
81assert len(io_ranks) == 1
82assert io_ranks[0] == 0
85 tgt = await interpolate.execute_async(src)
86 assert np.all(tgt[0,...] == 1.0), f
"Wrong result: {tgt=}"
87 assert np.all(tgt[1,...] == 4.0), f
"Wrong result: {tgt=}"
88 assert np.all(tgt[2,...] == 2.0), f
"Wrong result: {tgt=}"