YAC 3.18.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_dynamic_config.F90
Go to the documentation of this file.
1! Copyright (c) 2024 The YAC Authors
2!
3! SPDX-License-Identifier: BSD-3-Clause
4
9
10#include "test_macros.inc"
11
12#define YAC_RAD (0.01745329251994329576923690768489d0) ! M_PI / 180
13
14PROGRAM main
15
16 use mpi
17 use utest
18 use yac
19 use, intrinsic :: iso_c_binding, only : c_null_char
20
21 IMPLICIT NONE
22
23 INTEGER :: rank, global_size, ierror
24 INTEGER, PARAMETER :: n_cells(2) = (/32, 16/)
25 INTEGER, PARAMETER :: n_corners(2) = (/33, 17/)
26 INTEGER, PARAMETER :: cyclic(2) = (/0, 0/)
27 DOUBLE PRECISION, PARAMETER :: delta_lon=1., delta_lat=1.
28 DOUBLE PRECISION, ALLOCATABLE :: data(:,:)
29 DOUBLE PRECISION, ALLOCATABLE :: cell_lon(:), cell_lat(:), corner_lon(:), corner_lat(:)
30 INTEGER :: i, comp_id, grid_id, points_id, info, timestep_counter
31 INTEGER :: field_1, field_2, field_3, field_4
32 CHARACTER(len=YAC_MAX_CHARLEN), PARAMETER :: &
33 weight_file_name = "test_dynamic_config.nc"
34 CHARACTER(len=YAC_MAX_CHARLEN), PARAMETER :: &
35 weight_file_name_dummy = "test_dynamic_config_dummy.nc"
36 CHARACTER(len=YAC_MAX_CHARLEN), PARAMETER :: &
37 test_config_filename_yaml = "test_dynamic_config.yaml"
38 CHARACTER(len=YAC_MAX_CHARLEN), PARAMETER :: &
39 test_config_filename_json = "test_dynamic_config.json"
40 CHARACTER(len=YAC_MAX_CHARLEN), PARAMETER :: &
41 grid_output_filename = "test_dynamic_config_grids.nc"
42 LOGICAL :: file_exists
43
44 INTERFACE
45 SUBROUTINE c_unlink ( path ) bind ( c, name='unlink' )
46 use, INTRINSIC :: iso_c_binding, only : c_char
47 CHARACTER(KIND=c_char), DIMENSION(*) :: path
48 END SUBROUTINE c_unlink
49 END INTERFACE
50
51 CALL mpi_init(ierror)
52 CALL mpi_comm_rank(mpi_comm_world, rank, ierror)
53 CALL mpi_comm_size(mpi_comm_world, global_size, ierror)
54
55 IF (global_size /= 4) THEN
56 WRITE ( * , * ) "Wrong number of processes (should be 4)"
57 CALL error_exit
58 ENDIF
59
60 ALLOCATE(data(n_cells(1), n_cells(2)))
61 ALLOCATE(corner_lon(n_corners(1)), corner_lat(n_corners(2)))
62 ALLOCATE(cell_lon(n_cells(1)), cell_lat(n_cells(2)))
63
64 DO i = 1, n_corners(1)
65 corner_lon(i) = (dble(i-1)*delta_lon-180.)*yac_rad
66 END DO
67 DO i = 1, n_corners(2)
68 corner_lat(i) = (dble(i-1)*delta_lat-90.)*yac_rad
69 END DO
70 DO i = 1, n_cells(1)
71 cell_lon(i) = ((dble(i)-0.5)*delta_lon-180.)*yac_rad
72 END DO
73 DO i = 1, n_cells(2)
74 cell_lat(i) = ((dble(i)-0.5)*delta_lat-90.)*yac_rad
75 END DO
76
77 IF (rank == 0) CALL gen_weight_file()
78
79 timestep_counter = 0
80
81 IF ( modulo(rank, 2) .eq. 0 ) THEN
82 CALL comp1_main()
83 ELSE
84 CALL comp2_main()
85 END IF
86
87 IF (rank == 0) THEN
88 INQUIRE(file=test_config_filename_yaml, exist=file_exists)
89 CALL test(file_exists)
90 INQUIRE(file=test_config_filename_json, exist=file_exists)
91 CALL test(file_exists)
92 INQUIRE(file=grid_output_filename, exist=file_exists)
93 CALL test(file_exists)
94 CALL c_unlink(trim(grid_output_filename) // c_null_char)
95 CALL c_unlink(trim(test_config_filename_json) // c_null_char)
96 CALL c_unlink(trim(test_config_filename_yaml) // c_null_char)
97 CALL c_unlink(trim(weight_file_name) // c_null_char)
98 CALL c_unlink(trim(weight_file_name_dummy) // c_null_char)
99 END IF
100
101 DEALLOCATE(data, cell_lon, cell_lat, corner_lon, corner_lat)
102
103 IF (timestep_counter .NE. 11) stop 2
104
105 CALL mpi_finalize(ierror)
106
107CONTAINS
108
109 SUBROUTINE gen_weight_file()
110
111 INTEGER :: yac_id
112 INTEGER :: grid_id_out, grid_id_in
113 INTEGER :: point_id_in, point_id_out
114 INTEGER :: field_id_in, field_id_out
115 INTEGER :: interp_stack
116
117 CALL yac_finit_comm(mpi_comm_self, yac_id)
119 CALL yac_fdef_datetime( &
120 yac_id, "2000-01-01T00:00:00", "2000-01-01T00:00:10")
121 CALL yac_fdef_comp(yac_id, "comp", comp_id)
122 CALL yac_fdef_grid("grid1", n_corners, cyclic, &
123 & corner_lon, corner_lat, grid_id_out)
124 CALL yac_fdef_grid("grid2", n_corners, cyclic, &
125 & corner_lon, corner_lat, grid_id_in)
126 CALL yac_fdef_points(grid_id_out, n_cells, yac_location_cell, &
127 & cell_lon, cell_lat, point_id_out)
128 CALL yac_fdef_points(grid_id_in, n_cells, yac_location_cell, &
129 & cell_lon, cell_lat, point_id_in)
130
131 CALL yac_fdef_field( &
132 "out", comp_id, [point_id_out], 1, 1, "1", &
133 yac_time_unit_second, field_id_out)
134 CALL yac_fdef_field( &
135 "in", comp_id, [point_id_in], 1, 1, "1", &
136 yac_time_unit_second, field_id_in)
137
138 CALL yac_fget_interp_stack_config(interp_stack)
140 interp_stack, yac_avg_arithmetic, 1)
141 CALL yac_fdef_couple(yac_id, &
142 "comp", "grid1", "out", &
143 "comp", "grid2", "in", &
145 yac_reduction_time_none, interp_stack, &
146 src_lag = 0, tgt_lag = 0, &
147 weight_file = weight_file_name, &
148 mapping_side = 1, &
149 scale_factor = 1.0d0, scale_summand = 0.0d0, &
150 yaxt_exchanger_name = "irecv_send", &
151 collection_indices = (/0/), &
152 use_raw_exchange = .false.)
153 CALL yac_ffree_interp_stack_config(interp_stack)
154
155 CALL yac_fenddef(yac_id)
156 CALL yac_ffinalize(yac_id)
157 END SUBROUTINE gen_weight_file
158
159 SUBROUTINE comp1_main()
160
161 IMPLICIT NONE
162
163 INTEGER :: field_out, avg_interp
164
165 CALL yac_finit()
166 ! this component defines the datetime
168 CALL yac_fdef_datetime("2000-01-01T00:00:00", "2000-01-01T00:00:10")
169
170 CALL yac_fset_grid_output_file("grid1", grid_output_filename)
171
172 CALL yac_fset_coordinates_check(.false.)
174
175 ! test yac_fpredef_comp:
176 CALL yac_fpredef_comp("comp1", comp_id)
178
179 CALL yac_fdef_grid("grid1", n_corners, cyclic, &
180 & corner_lon, corner_lat, grid_id)
181 CALL yac_fdef_points(grid_id, n_cells, yac_location_cell, &
182 & cell_lon, cell_lat, points_id)
183
184 CALL yac_fdef_field( &
185 "A", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_1)
186 CALL yac_fdef_field( &
187 "B", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_2)
188 CALL yac_fdef_field( &
189 "C", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_3)
190 CALL yac_fdef_field( &
191 "D", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_4)
192
193 CALL yac_fdef_field( &
194 "OUT", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_out)
195
196 CALL yac_fget_interp_stack_config(avg_interp)
198 avg_interp, yac_avg_arithmetic, 1)
199 CALL yac_fdef_couple( &
200 "comp2", "grid2", "4", &
201 "comp1", "grid1", "D", &
203 yac_reduction_time_accumulate, avg_interp, &
204 src_lag = 0, tgt_lag = 0, &
205 weight_file = weight_file_name_dummy, mapping_side = 1, &
206 scale_factor = 1.0d0, scale_summand = 0.0d0, &
207 yaxt_exchanger_name = "irecv_isend", &
208 collection_indices = (/0/), &
209 weight_file_on_existing = yac_wgt_on_existing_overwrite)
210 CALL yac_ffree_interp_stack_config(avg_interp)
211
213 test_config_filename_yaml, yac_config_output_format_yaml, &
216 test_config_filename_json, yac_config_output_format_json, &
217 yac_config_output_sync_loc_enddef, include_definitions=.false.)
218
219 CALL yac_fenddef( )
220
221 DO WHILE (.true.)
222 timestep_counter = timestep_counter + 1
223 data = 42.
224 CALL yac_fput(field_1, SIZE(data), 1, 1, reshape(data, [SIZE(data), 1, 1]), info, ierror)
225 WRITE (0, *) "time of field_1: ", yac_fget_field_datetime(field_1)
226 data = 43.
227 CALL yac_fput(field_2, SIZE(data), 1, 1, reshape(data, [SIZE(data), 1, 1]), info, ierror)
228 data = 44.
229 CALL yac_fput(field_3, SIZE(data), 1, 1, reshape(data, [SIZE(data), 1, 1]), info, ierror)
230 data = -1.
231 CALL yac_fget(field_4, SIZE(data), 1, data, info, ierror)
232 IF ((data(1,1) - 40.) > 1e-14) stop 1
233 data = 45.
234 CALL yac_fput(field_out, SIZE(data), 1, 1, reshape(data, [SIZE(data), 1, 1]), info, ierror)
235 IF ( info .EQ. yac_action_put_for_restart) EXIT
236 END DO
237
238 CALL yac_ffinalize()
239
240 END SUBROUTINE comp1_main
241
242 SUBROUTINE comp2_main()
243 IMPLICIT NONE
244 INTEGER :: yac_id, avg_interp, i, field_in(15)
245 CHARACTER (LEN=:), ALLOCATABLE :: config
246
247 CALL yac_finit(yac_id)
249 CALL yac_fpredef_comp(yac_id, "comp2", comp_id)
250 CALL yac_fdef_comp_dummy(yac_id)
251
252 CALL yac_fsync_def(yac_id)
253
254 ! define fields after sync_def to tests the sync mechanism
255 CALL yac_fdef_grid("grid2", n_corners, cyclic, &
256 & corner_lon, corner_lat, grid_id)
257 CALL yac_fdef_points(grid_id, n_cells, yac_location_cell, &
258 & cell_lon, cell_lat, points_id)
259
260 CALL yac_fset_grid_output_file(yac_id, "grid2", grid_output_filename)
261
262 CALL yac_fset_coordinates_check(yac_id, .false.)
263 CALL yac_fset_coordinates_mismatch_is_fatal(yac_id, .false.)
264
265 CALL yac_fdef_field( &
266 "1", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_1)
267 CALL yac_fdef_field( &
268 "2", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_2)
269 CALL yac_fdef_field( &
270 "3", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_3)
271 CALL yac_fdef_field( &
272 "4", comp_id, [points_id], 1, 1, "1", yac_time_unit_second, field_4)
273
274 CALL yac_fget_interp_stack_config(avg_interp)
276 avg_interp, yac_avg_arithmetic, 1)
277
278 CALL yac_fdef_couple(yac_id, &
279 "comp1", "grid1", "A", &
280 "comp2", "grid2", "1", &
283 CALL yac_fdef_couple(yac_id, &
284 "comp1", "grid1", "B", &
285 "comp2", "grid2", "2", &
288 CALL yac_fdef_couple(yac_id, &
289 "comp1", "grid1", "C", &
290 "comp2", "grid2", "3", &
293
294 CALL yac_ffree_interp_stack_config(avg_interp)
295
296 ! check all interpolation methods
297 field_in(1) = gen_field_avg(yac_id)
298 field_in(2) = gen_field_ncc(yac_id)
299 field_in(3) = gen_field_nnn(yac_id)
300 field_in(4) = gen_field_dnn(yac_id)
301 field_in(5) = gen_field_rbf(yac_id)
302 field_in(6) = gen_field_rbf_opts(yac_id)
303 field_in(7) = gen_field_conserv(yac_id)
304 field_in(8) = gen_field_spmap_yac(yac_id)
305 field_in(9) = gen_field_spmap_file(yac_id)
306 field_in(10) = gen_field_spmap_ext(yac_id)
307 field_in(11) = gen_field_hcsbb(yac_id)
308 field_in(12) = gen_field_user_file(yac_id)
309 field_in(13) = gen_field_user_file_opts(yac_id)
310 field_in(14) = gen_field_fixed(yac_id)
311 field_in(15) = gen_field_creep(yac_id)
312
313 CALL yac_fenddef( &
314 yac_id, yac_yaml_emitter_default_f, config)
315 DEALLOCATE(config)
316
317 DO WHILE (.true.)
318 timestep_counter = timestep_counter + 1
319 data = -1.0
320 CALL yac_fget(field_1, SIZE(data), 1, data, info, ierror)
321 WRITE (0, *) "time of field_1: ", yac_fget_field_datetime(field_1)
322 IF ((data(1,1) - 42.) > 1e-14) stop 1
323 data = -1.0
324 CALL yac_fget(field_2, SIZE(data), 1, data, info, ierror)
325 IF ((data(1,1) - 43.) > 1e-14) stop 1
326 data = -1.0
327 CALL yac_fget(field_3, SIZE(data), 1, data, info, ierror)
328 IF ((data(1,1) - 44.) > 1e-14) stop 1
329 data = 40.
330 CALL yac_fput(field_4, SIZE(data), 1, 1, reshape(data, [SIZE(data), 1, 1]), info, ierror)
331 DO i = 1, SIZE(field_in)
332 CALL yac_fget(field_in(i), SIZE(data), 1, data, info, ierror)
333 END DO
334 IF ( info .EQ. yac_action_get_for_restart) EXIT
335 END DO
336
337 CALL yac_ffinalize(yac_id)
338
339 END SUBROUTINE comp2_main
340
341 FUNCTION gen_field(yac_id, field_name, interp_stack) RESULT(field_id)
342 INTEGER, INTENT(IN) :: yac_id
343 CHARACTER(len=*), INTENT(IN) :: field_name
344 INTEGER, INTENT(IN) :: interp_stack
345 INTEGER :: field_id
346
347 CALL yac_fdef_field( &
348 field_name, comp_id, [points_id], 1, 1, "1", &
349 yac_time_unit_second, field_id)
350 CALL yac_fdef_couple( &
351 yac_id, "comp1", "grid1", "OUT", "comp2", "grid2", field_name, &
352 "1", yac_time_unit_second, yac_reduction_time_none, interp_stack, &
353 weight_file_on_existing = yac_wgt_on_existing_overwrite)
354 CALL yac_ffree_interp_stack_config(interp_stack)
355 END FUNCTION gen_field
356
357 FUNCTION gen_field_avg(yac_id)
358 INTEGER, INTENT(IN) :: yac_id
359 INTEGER :: gen_field_avg
360 INTEGER :: interp_stack
361 CALL yac_fget_interp_stack_config(interp_stack)
363 interp_stack, yac_avg_arithmetic, 1)
364 gen_field_avg = gen_field(yac_id, "avg", interp_stack)
365 END FUNCTION gen_field_avg
366
367 FUNCTION gen_field_ncc(yac_id)
368 INTEGER, INTENT(IN) :: yac_id
369 INTEGER :: gen_field_ncc
370 INTEGER :: interp_stack
371 CALL yac_fget_interp_stack_config(interp_stack)
373 interp_stack, yac_ncc_avg, 1)
374 gen_field_ncc = gen_field(yac_id, "ncc", interp_stack)
375 END FUNCTION gen_field_ncc
376
377 FUNCTION gen_field_nnn(yac_id)
378 INTEGER, INTENT(IN) :: yac_id
379 INTEGER :: gen_field_nnn
380 INTEGER :: interp_stack
381 CALL yac_fget_interp_stack_config(interp_stack)
383 interp_stack, yac_nnn_avg, 3, 0.0d0, 1.0d0)
384 gen_field_nnn = gen_field(yac_id, "nnn", interp_stack)
385 END FUNCTION gen_field_nnn
386
387 FUNCTION gen_field_dnn(yac_id)
388 INTEGER, INTENT(IN) :: yac_id
389 INTEGER :: gen_field_dnn
390 INTEGER :: interp_stack
391 CALL yac_fget_interp_stack_config(interp_stack)
393 interp_stack, yac_dnn_dist, yac_dnn_search_distance_fixed, 0.1d0, 1.0d0)
394 gen_field_dnn = gen_field(yac_id, "dnn", interp_stack)
395 END FUNCTION gen_field_dnn
396
397 FUNCTION gen_field_rbf(yac_id)
398 INTEGER, INTENT(IN) :: yac_id
399 INTEGER :: gen_field_rbf
400 INTEGER :: interp_stack
401 CALL yac_fget_interp_stack_config(interp_stack)
402 CALL yac_fadd_interp_stack_config_rbf(interp_stack)
403 gen_field_rbf = gen_field(yac_id, "rbf", interp_stack)
404 END FUNCTION gen_field_rbf
405
406 FUNCTION gen_field_rbf_opts(yac_id)
410 INTEGER, INTENT(IN) :: yac_id
411 INTEGER :: gen_field_rbf_opts
412 INTEGER :: interp_stack
413 CALL yac_fget_interp_stack_config(interp_stack)
415 interp_stack, &
419 gen_field_rbf_opts = gen_field(yac_id, "rbf_opts", interp_stack)
420 END FUNCTION gen_field_rbf_opts
421
422 FUNCTION gen_field_conserv(yac_id)
423 INTEGER, INTENT(IN) :: yac_id
424 INTEGER :: gen_field_conserv
425 INTEGER :: interp_stack
426 CALL yac_fget_interp_stack_config(interp_stack)
428 interp_stack, 1, 1, 1, yac_conserv_destarea)
429 gen_field_conserv = gen_field(yac_id, "conserv", interp_stack)
430 END FUNCTION gen_field_conserv
431
432 FUNCTION gen_field_spmap_yac(yac_id)
433 INTEGER, INTENT(IN) :: yac_id
434 INTEGER :: gen_field_spmap_yac
435 INTEGER :: interp_stack
436 CALL yac_fget_interp_stack_config(interp_stack)
438 interp_stack, 0.0d0, 0.0d0, yac_spmap_avg, yac_spmap_none, &
439 1.0d0, "" // c_null_char, "" // c_null_char, 0, &
440 1.0d0, "" // c_null_char, "" // c_null_char, 0)
441 gen_field_spmap_yac = gen_field(yac_id, "spmap_yac", interp_stack)
442 END FUNCTION gen_field_spmap_yac
443
444 FUNCTION gen_field_spmap_file(yac_id)
445 INTEGER, INTENT(IN) :: yac_id
446 INTEGER :: gen_field_spmap_file
447 INTEGER :: interp_stack
448 CALL yac_fget_interp_stack_config(interp_stack)
450 interp_stack, 0.0d0, 0.0d0, yac_spmap_avg, yac_spmap_none, &
451 0.0d0, "area.nc" // c_null_char, "src_cell_area" // c_null_char, 0, &
452 0.0d0, "area.nc" // c_null_char, "tgt_cell_area" // c_null_char, 0)
453 gen_field_spmap_file = gen_field(yac_id, "spmap_file", interp_stack)
454 END FUNCTION gen_field_spmap_file
455
456 FUNCTION gen_field_spmap_ext(yac_id)
457 INTEGER, INTENT(IN) :: yac_id
458 INTEGER :: gen_field_spmap_ext
459 INTEGER :: interp_stack
460 INTEGER :: spmap_overwrite_config_ids(2)
462 0.0d0, 0.0d0, 1.0d0, spmap_overwrite_config_ids(1), &
463 spread_distance = 0.5d0)
465 0.0d0, 1.5d0, 1.0d0, spmap_overwrite_config_ids(2), &
466 max_search_distance = 0.6d0, weight_type = yac_spmap_dist)
467 CALL yac_fget_interp_stack_config(interp_stack)
469 interp_stack, 0.0d0, 0.0d0, yac_spmap_avg, yac_spmap_none, &
470 1.0d0, "" // c_null_char, "" // c_null_char, 0, &
471 1.0d0, "" // c_null_char, "" // c_null_char, 0, &
472 spmap_overwrite_config_ids = spmap_overwrite_config_ids)
473 gen_field_spmap_ext = gen_field(yac_id, "spmap_ext", interp_stack)
475 spmap_overwrite_config_ids(2))
477 spmap_overwrite_config_ids(1))
478 END FUNCTION gen_field_spmap_ext
479
480 FUNCTION gen_field_hcsbb(yac_id)
481 INTEGER, INTENT(IN) :: yac_id
482 INTEGER :: gen_field_hcsbb
483 INTEGER :: interp_stack
484 CALL yac_fget_interp_stack_config(interp_stack)
485 CALL yac_fadd_interp_stack_config_hcsbb(interp_stack)
486 gen_field_hcsbb = gen_field(yac_id, "hcsbb", interp_stack)
487 END FUNCTION gen_field_hcsbb
488
489 FUNCTION gen_field_user_file(yac_id)
490 INTEGER, INTENT(IN) :: yac_id
491 INTEGER :: gen_field_user_file
492 INTEGER :: interp_stack
493 CALL yac_fget_interp_stack_config(interp_stack)
495 interp_stack, weight_file_name)
496 gen_field_user_file = gen_field(yac_id, "user_file", interp_stack)
497 END FUNCTION gen_field_user_file
498
499 FUNCTION gen_field_user_file_opts(yac_id)
501 INTEGER, INTENT(IN) :: yac_id
502 INTEGER :: gen_field_user_file_opts
503 INTEGER :: interp_stack
504 CALL yac_fget_interp_stack_config(interp_stack)
506 interp_stack, weight_file_name, &
507 on_missing_file=yac_file_missing_cont, &
508 on_success=yac_file_success_stop)
509 gen_field_user_file_opts = gen_field(yac_id, "user_file_opts", interp_stack)
510 END FUNCTION gen_field_user_file_opts
511
512 FUNCTION gen_field_fixed(yac_id)
513 INTEGER, INTENT(IN) :: yac_id
514 INTEGER :: gen_field_fixed
515 INTEGER :: interp_stack
516 CALL yac_fget_interp_stack_config(interp_stack)
518 interp_stack, -1.0d0)
519 gen_field_fixed = gen_field(yac_id, "fixed", interp_stack)
520 END FUNCTION gen_field_fixed
521
522 FUNCTION gen_field_creep(yac_id)
523 INTEGER, INTENT(IN) :: yac_id
524 INTEGER :: gen_field_creep
525 INTEGER :: interp_stack
526 CALL yac_fget_interp_stack_config(interp_stack)
528 interp_stack, 0)
529 gen_field_creep = gen_field(yac_id, "creep", interp_stack)
530 END FUNCTION gen_field_creep
531
532 SUBROUTINE error_exit ()
533
534 USE mpi, ONLY : mpi_abort, mpi_comm_world
535 USE utest
536
537 INTEGER :: ierror
538
539 CALL test ( .false. )
540 CALL stop_test
541 CALL exit_tests
542 CALL mpi_abort ( mpi_comm_world, 999, ierror )
543
544 END SUBROUTINE error_exit
545
546END PROGRAM main
Fortran interface for definition of a couple.
Fortran interface for the definition of time parameters.
Fortran interface for the definition of coupling fields using default masks.
Fortran interface for the definition of grids.
Fortran interface for the definition of points.
Fortran interface for invoking the end of the definition phase.
Fortran interface for the coupler termination.
Fortran interfaces for the definition of an interpolation stack.
Fortran interface for receiving coupling fields.
Fortran interface for the coupler initialisation.
Fortran interface for the component definition.
Fortran interface for sending coupling fields.
Fortran interface for the writing of configuration files.
Fortran interface for enabling/disabling of coordinate checks.
Fortran interface for enabling/disabling of coordinates mismatch fatality.
Fortran interface for the writing of grid files.
Fortran interface for invoking the end of the definition phase.
Definition utest.F90:5
subroutine, public stop_test()
Definition utest.F90:27
subroutine, public exit_tests()
Definition utest.F90:81
integer(kind=c_size_t), parameter yac_interp_rbf_n_default_f
Definition yac_core.F90:151
real(kind=c_double), parameter yac_interp_rbf_scale_default_f
Definition yac_core.F90:153
real(kind=c_double), parameter yac_interp_rbf_max_search_distance_default_f
Definition yac_core.F90:152
@ yac_location_cell
@ yac_time_unit_second
@ yac_action_put_for_restart
last valid put
@ yac_action_get_for_restart
last valid get
@ yac_nnn_avg
@ yac_ncc_avg
@ yac_spmap_none
@ yac_config_output_format_json
@ yac_config_output_format_yaml
@ yac_proleptic_gregorian
integer yac_yaml_emitter_default_f
Flag paramters for emitting of coupling configurations.
@ yac_dnn_dist
@ yac_avg_arithmetic
@ yac_dnn_search_distance_fixed
@ yac_file_missing_cont
continue on missing file
@ yac_wgt_on_existing_overwrite
@ yac_file_success_stop
prevents following interpolation method from computating further weights
@ yac_reduction_time_accumulate
@ yac_reduction_time_none
@ yac_spmap_avg
@ yac_spmap_dist
@ yac_config_output_sync_loc_sync_def
@ yac_config_output_sync_loc_enddef
@ yac_conserv_destarea
subroutine error_exit()
static int file_exists(char const *path)
subroutine yac_fget_interp_stack_config(interp_stack_config_id)
subroutine yac_fadd_interp_stack_config_fixed(interp_stack_config_id, val)
subroutine yac_fadd_interp_stack_config_creep(interp_stack_config_id, creep_distance)