13from scipy.sparse
import csr_matrix
24 ConservNormalizationType,
28def_calendar(Calendar.PROLEPTIC_GREGORIAN)
32yac.def_datetime(
"2020-01-01T00:00:00",
"2020-01-02T00:00:00")
34comp1, comp2 = yac.def_comps([
"comp1",
"comp2"])
37grid1.set_core_mask([1, 1, 0, 1], Location.CELL)
38points1 = grid1.def_points(Location.CELL, [-0.5, 0.5], [-0.5, 0.5])
40grid2 =
Reg2dGrid(
"grid2", [-1, -1/3, 1/3, 1], [-1, -1/3, 1/3, 1])
41points2 = grid2.def_points(Location.CELL, [-2/3, 0.0, 2/3], [-2/3, 0.0, 2/3])
43field1 = Field.create(
"field1", comp1, points1, 1,
"1", TimeUnit.HOUR)
44field2 = Field.create(
"field2", comp2, points2, 1,
"1", TimeUnit.HOUR)
45field3 = Field.create(
"field3", comp2, points2, 1,
"1", TimeUnit.HOUR)
46field4 = Field.create(
"field4", comp2, points2, 1,
"1", TimeUnit.HOUR)
49interp.add_conservative(1, 0, 1, ConservNormalizationType.DESTAREA)
52couple_kwargs = {
"src_comp":
"comp1",
54 "src_field":
"field1",
57 "coupling_timestep":
"60",
58 "timeunit": TimeUnit.MINUTE,
59 "time_reduction": Reduction.TIME_NONE,
60 "interp_stack": interp}
81raw_data = field2.get_raw_interp_weights_data()
82indptr = np.insert(np.cumsum(raw_data.num_src_per_tgt), 0, 0)
84raw_data_csr = field4.get_raw_interp_weights_data_csr()
85W = csr_matrix((raw_data_csr.weights, raw_data_csr.src_idx, raw_data_csr.src_indptr))
87buf = np.empty(shape=(1, raw_data.src_field_buffer_sizes[0]), dtype=np.float64)
90while field2.datetime < yac.end_datetime:
91 field1.put(np.arange(i, i + 4., dtype=np.float64))
95 f2_buf = np.empty(shape=(1, field2.size), dtype=np.float64)
96 f2_buf[0, raw_data.tgt_idx_fixed] = raw_data.fixed_values[0]
97 for tgt_idx, start_idx, end_idx
in zip(raw_data.wgt_tgt_idx, indptr[:-1], indptr[1:]):
98 f2_buf[0, tgt_idx] = raw_data.weights[start_idx:end_idx]
@buf[0, raw_data.src_idx[start_idx: end_idx]]
100 f3_buf, info = field3.get()
101 assert np.allclose(f2_buf, f3_buf)
105 f4_buf[raw_data_csr.tgt_idx_fixed] = raw_data_csr.fixed_values[0]
106 assert np.allclose(f2_buf[0, :], f4_buf)
Initializies a YAC instance and provides further functionality.