13 from mpi4py
import MPI
20from yac.core
import (BasicGrid,
26 yac_weight_file_on_existing,
35logging.basicConfig(level=logging.WARNING, format=f
'%(name)s rank={rank} - %(levelname)s - %(message)s')
36logging.getLogger(
"yac.core").setLevel(logging.INFO)
38logging.getLogger(
"yac.core").
info(f
"YAC core version: {version()}")
42reg_grid = BasicGrid.reg_2d_new(
"reg_grid",
43 np.linspace(-2, 2, 20),
44 np.linspace(-1.5, 1.5, 20))
45reg_grid.set_core_mask(yac_location.YAC_LOC_CORNER, np.ones(400, dtype=int))
49 reg_grid.set_global_index(yac_location.YAC_LOC_CORNER, range(10**99, 10**99+400))
50 raise RuntimeError(
"set_global_index did not throw an exception for very large indices.")
54reg_grid.set_global_index(yac_location.YAC_LOC_CORNER, range(400))
55reg_grid.to_file(
"reg_grid.nc", comm)
57coords = reg_grid.add_coordinates(yac_location.YAC_LOC_CORNER)
59assert reg_grid.check_coordinates(is_fatal=
True) ==
False
61src_field = InterpField(coords)
63icon_grid, icon_cell_field = BasicGrid.read_icon(grid_dir+
"icon_grid_R02B01.nc",
66interp_stack = InterpolationStack.from_list([(
"nnn", {
"n": 3,
"max_search_distance": 2.}),
67 (
"fixed", {
"value": 42.0})])
69weights = compute_weights(interp_stack,
73weights.write_to_file(
"weights.nc", on_existing=yac_weight_file_on_existing.YAC_WEIGHT_FILE_OVERWRITE)
75interpolate = weights.get_interpolation(collection_selection=[1, 4, 2])
77src_size = src_field.basic_grid.get_data_size(yac_location.YAC_LOC_CORNER)
78src = np.stack([i*np.ones(src_size, dtype=np.float64)
for i
in range(5)], axis=0)
81assert np.all(tgt[0,...] == 1.0), f
"Wrong result: {tgt=}"
82assert np.all(tgt[1,...] == 4.0), f
"Wrong result: {tgt=}"
83assert np.all(tgt[2,...] == 2.0), f
"Wrong result: {tgt=}"
85local_is_io, io_ranks = get_io_ranks()
86assert local_is_io ==
True
87assert len(io_ranks) == 1
88assert io_ranks[0] == 0
91 tgt = await interpolate.execute_async(src)
92 assert np.all(tgt[0,...] == 1.0), f
"Wrong result: {tgt=}"
93 assert np.all(tgt[1,...] == 4.0), f
"Wrong result: {tgt=}"
94 assert np.all(tgt[2,...] == 2.0), f
"Wrong result: {tgt=}"