YAC 3.18.0
Yet Another Coupler
Loading...
Searching...
No Matches
yac_core.F90
Go to the documentation of this file.
1! Copyright (c) 2024 The YAC Authors
2!
3! SPDX-License-Identifier: BSD-3-Clause
4
5#ifdef HAVE_CONFIG_H
6#include "config.h"
7#endif
8
9module yac_core
10 use, intrinsic :: iso_c_binding, only : c_int, c_long, &
11 & c_long_long, c_short, c_char, &
12 & c_size_t, c_double, c_null_char, &
13 & c_ptr, c_null_ptr
14
15 implicit none
16
17 public
18
19 !------------------------------------------------
20 ! Constants for Fortran-C interoperability
21 !------------------------------------------------
22
23 integer, parameter :: yac_mpi_fint_kind = yac_mpi_fint_fc_kind
24 real(kind=c_double), parameter :: &
25 yac_frac_mask_no_value = 133713371337.0_c_double
26
27 !---------------
28 ! Location enums
29 !---------------
30
31 enum, bind(c)
32 enumerator :: yac_loc_cell = 0
33 enumerator :: yac_loc_corner = 1
34 enumerator :: yac_loc_edge = 2
35 end enum
36
37 !----------------------------------
38 ! Handling of existing weight files
39 !----------------------------------
40
41 enum, bind(c)
42 enumerator :: yac_weight_file_error = 0
43 enumerator :: yac_weight_file_keep = 1
44 enumerator :: yac_weight_file_overwrite = 2
45 end enum
46
47 !---------------------------
48 ! Interpolation method enums
49 !---------------------------
50
51 enum, bind(c)
52 enumerator :: yac_interp_avg_arithmetic = 0
53 enumerator :: yac_interp_avg_dist = 1
54 enumerator :: yac_interp_avg_bary = 2
55 end enum
56
57 enum, bind(c)
58 enumerator :: yac_interp_ncc_avg = 0
59 enumerator :: yac_interp_ncc_dist = 1
60 end enum
61
62 enum, bind(c)
63 enumerator :: yac_interp_nnn_avg = 0
64 enumerator :: yac_interp_nnn_dist = 1
65 enumerator :: yac_interp_nnn_gauss = 2
66 enumerator :: yac_interp_nnn_rbf = 3
67 enumerator :: yac_interp_nnn_zero = 4
68 end enum
69
70 enum, bind(c)
71 enumerator :: yac_interp_dnn_weight_avg = 0
74 enumerator :: yac_interp_dnn_weight_rbf = 3
75 end enum
76
77 enum, bind(c)
80 end enum
81
82 enum, bind(c)
85 end enum
86
87 enum, bind(c)
88 enumerator :: yac_interp_spmap_avg = 0
89 enumerator :: yac_interp_spmap_dist = 1
90 end enum
91
92 enum, bind(c)
93 enumerator :: yac_interp_spmap_none = 0
94 enumerator :: yac_interp_spmap_srcarea = 1
96 enumerator :: yac_interp_spmap_fracarea = 3
97 end enum
98
99 enum, bind(c)
102 end enum
103
104 enum, bind(c)
110 end enum
111
112 !------------------------------------
113 ! Interpolation method default values
114 !------------------------------------
115
116 ! average
117 integer(kind=c_int), parameter :: yac_interp_avg_weight_type_default_f = 0_c_int
118 integer(kind=c_int), parameter :: yac_interp_avg_partial_coverage_default_f = 0_c_int
119
120 ! nearest corner cells
121 integer(kind=c_int), parameter :: yac_interp_ncc_weight_type_default_f = 0_c_int
122 integer(kind=c_int), parameter :: yac_interp_ncc_partial_coverage_default_f = 0_c_int
123
124 ! conserv
125 integer(kind=c_int), parameter :: yac_interp_conserv_order_default_f = 1_c_int
126 integer(kind=c_int), parameter :: yac_interp_conserv_enforced_conserv_default_f = 0_c_int
127 integer(kind=c_int), parameter :: yac_interp_conserv_partial_coverage_default_f = 0_c_int
128 integer(kind=c_int), parameter :: yac_interp_conserv_normalisation_default_f = 0_c_int
129
130 ! creep
131 integer(kind=c_int), parameter :: yac_interp_creep_distance_default_f = -1_c_int
132
133 ! fixed
134 real(kind=c_double), parameter :: yac_interp_fixed_value_default_f = huge(1.0_c_double)
135
136 ! n-nearest-neighbour
137 integer(kind=c_int), parameter :: yac_interp_nnn_weighted_default_f = 0_c_int
138 integer(kind=c_size_t), parameter :: yac_interp_nnn_n_default_f = 1_c_size_t
139 real(kind=c_double), parameter :: yac_interp_nnn_max_search_distance_default_f = 0.0_c_double
140 real(kind=c_double), parameter :: yac_interp_nnn_gauss_scale_default_f = 0.1_c_double
141
142 ! distance-nearest-neighbour
143 integer(kind=c_int), parameter :: yac_interp_dnn_weight_type_default_f = 1_c_int
144 integer(kind=c_int), parameter :: yac_interp_dnn_search_distance_type_default_f = 1_c_int
145 real(kind=c_double), parameter :: yac_interp_dnn_search_distance_default_f = 1.0_c_double
146 real(kind=c_double), parameter :: yac_interp_dnn_scale_default_f = 0.0_c_double
147 real(kind=c_double), parameter :: yac_interp_dnn_gauss_scale_default_f = 0.1_c_double
148 real(kind=c_double), parameter :: yac_interp_dnn_rbf_scale_default_f = 1.487973e+01_c_double
149
150 ! rbf
151 integer(kind=c_size_t), parameter :: yac_interp_rbf_n_default_f = 9_c_size_t
152 real(kind=c_double), parameter :: yac_interp_rbf_max_search_distance_default_f = 0.0_c_double
153 real(kind=c_double), parameter :: yac_interp_rbf_scale_default_f = 1.487973e+01_c_double
154 integer(kind=c_int), parameter :: yac_interp_rbf_kernel_default_f = 0_c_int
155
156 ! source-point mapping
157 real(kind=c_double), parameter :: yac_interp_spmap_spread_distance_default_f = 0.0_c_double
158 real(kind=c_double), parameter :: yac_interp_spmap_max_search_distance_default_f = 0.0_c_double
159 integer(kind=c_int), parameter :: yac_interp_spmap_weighted_default_f = 0_c_int
160 integer(kind=c_int), parameter :: yac_interp_spmap_scale_type_default_f = 0_c_int
161 real(kind=c_double), parameter :: yac_interp_spmap_sphere_radius_default_f = 1.0_c_double
162 character(kind=c_char,len=*), parameter :: yac_interp_spmap_filename_default_f = "" // c_null_char
163 character(kind=c_char,len=*), parameter :: yac_interp_spmap_varname_default_f = "" // c_null_char
164 integer(kind=c_int), parameter :: yac_interp_spmap_min_global_id_default_f = 0_c_int
165 type(c_ptr), parameter :: yac_interp_spmap_config_default_f = c_null_ptr
166 type(c_ptr), parameter :: yac_interp_spmap_overwrite_default_f = c_null_ptr
167
168 ! check
169 character(kind=c_char,len=*), parameter :: yac_interp_check_constructor_key_default_f = "" // c_null_char
170 character(kind=c_char,len=*), parameter :: yac_interp_check_do_search_key_default_f = "" // c_null_char
171
172 ! user file
173 integer(kind=c_int), parameter :: yac_interp_file_on_missing_file_default_f = 0_c_int
174 integer(kind=c_int), parameter :: yac_interp_file_on_success_default_f = 1_c_int
175
176 !---------------------------
177 ! Interpolation weight enums
178 !---------------------------
179
180 enum, bind(c)
181 enumerator :: yac_mapping_on_src = 0
182 enumerator :: yac_mapping_on_tgt = 1
183 end enum
184
185 !------------------------------------------------
186 ! Initialisation and finalization of MPI and yaxt
187 !------------------------------------------------
188
189 interface
190
191 ! initialise MPI (if not already initialised)
192 subroutine yac_mpi_init_c () &
193 bind( c, name='yac_mpi_init' )
194 end subroutine yac_mpi_init_c
195
196 ! initialise yaxt
197 subroutine yac_yaxt_init_c (comm) &
198 bind( c, name='yac_yaxt_init_f2c' )
199
200 import :: yac_mpi_fint_kind
201
202 integer(kind=YAC_MPI_FINT_KIND), value :: comm
203 end subroutine yac_yaxt_init_c
204
205 ! check whether MPI is initialised
207 bind( c, name='yac_mpi_is_initialised' )
208
209 use, intrinsic :: iso_c_binding
210
211 integer(kind=c_int) :: yac_mpi_is_initialised_c
212 end function yac_mpi_is_initialised_c
213
214 ! free internal buffers and finalize yaxt
215 subroutine yac_mpi_cleanup_c () &
216 bind ( c, name="yac_mpi_cleanup" )
217 end subroutine yac_mpi_cleanup_c
218
219 ! finalize MPI (if initialised by YAC)
220 subroutine yac_mpi_finalize_c () &
221 bind( c, name='yac_mpi_finalize' )
222 end subroutine yac_mpi_finalize_c
223
224 end interface
225
226 !-----------------------
227 ! Handling of basic grid
228 !-----------------------
229
230 interface
231
233 bind( c, name='yac_basic_grid_empty_new' )
234
235 use, intrinsic :: iso_c_binding
236
237 character(kind=c_char) :: name(*)
238
239 type(c_ptr) :: yac_basic_grid_empty_new_c
240 end function yac_basic_grid_empty_new_c
241
242 subroutine yac_basic_grid_delete_c(grid) &
243 bind( c, name='yac_basic_grid_delete' )
244
245 use, intrinsic :: iso_c_binding
246
247 type(c_ptr), value :: grid
248 end subroutine yac_basic_grid_delete_c
249
250 function yac_basic_grid_get_data_size_c(grid, location) &
251 bind( c, name='yac_basic_grid_get_data_size_f2c')
252
253 use, intrinsic :: iso_c_binding
254
255 type(c_ptr), value :: grid
256 integer(kind=c_int), value :: location
257
258 integer(kind=c_size_t) :: yac_basic_grid_get_data_size_c
260
262 grid, location, coordinates, count) &
263 bind( c, name='yac_basic_grid_add_coordinates_f2c')
264
265 use, intrinsic :: iso_c_binding
266
267 type(c_ptr), value :: grid
268 integer(kind=c_int), value :: location
269 real(kind=c_double) :: coordinates(*)
270 integer(kind=c_size_t), value :: count
271
272 integer(kind=c_size_t) :: yac_basic_grid_add_coordinates_c
274
276 grid, location, coordinates) &
277 bind( c, name='yac_basic_grid_add_coordinates_nocpy_f2c')
278
279 use, intrinsic :: iso_c_binding
280
281 type(c_ptr), value :: grid
282 integer(kind=c_int), value :: location
283 real(kind=c_double) :: coordinates(*)
284
285 integer(kind=c_size_t) :: yac_basic_grid_add_coordinates_nocpy_c
287
289 grid, location, mask, count, name) &
290 bind( c, name='yac_basic_grid_add_mask_f2c')
291
292 use, intrinsic :: iso_c_binding
293
294 type(c_ptr), value :: grid
295 integer(kind=c_int), value :: location
296 integer(kind=c_int) :: mask(*)
297 integer(kind=c_size_t), value :: count
298 character(kind=c_char) :: name(*)
299
300 integer(kind=c_size_t) :: yac_basic_grid_add_mask_c
301 end function yac_basic_grid_add_mask_c
302
304 grid, location, mask, name) &
305 bind( c, name='yac_basic_grid_add_mask_nocpy_f2c')
306
307 use, intrinsic :: iso_c_binding
308
309 type(c_ptr), value :: grid
310 integer(kind=c_int), value :: location
311 integer(kind=c_int) :: mask(*)
312 character(kind=c_char) :: name(*)
313
314 integer(kind=c_size_t) :: yac_basic_grid_add_mask_nocpy_c
316
318 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
319 bind( c, name='yac_basic_grid_reg_2d_new')
320
321 use, intrinsic :: iso_c_binding
322
323 character(kind=c_char) :: name(*)
324 integer(kind=c_size_t) :: nbr_vertices(2)
325 integer(kind=c_int) :: cyclic(2)
326 real(kind=c_double) :: lon_vertices(*)
327 real(kind=c_double) :: lat_vertices(*)
328
329 ! struct yac_basic_grid *
330 type(c_ptr) :: yac_basic_grid_reg_2d_new_c
331 end function yac_basic_grid_reg_2d_new_c
332
334 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
335 bind( c, name='yac_basic_grid_reg_2d_deg_new')
336
337 use, intrinsic :: iso_c_binding
338
339 character(kind=c_char) :: name(*)
340 integer(kind=c_size_t) :: nbr_vertices(2)
341 integer(kind=c_int) :: cyclic(2)
342 real(kind=c_double) :: lon_vertices(*)
343 real(kind=c_double) :: lat_vertices(*)
344
345 ! struct yac_basic_grid *
348
350 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
351 bind( c, name='yac_basic_grid_curve_2d_new')
352
353 use, intrinsic :: iso_c_binding
354
355 character(kind=c_char) :: name(*)
356 integer(kind=c_size_t) :: nbr_vertices(2)
357 integer(kind=c_int) :: cyclic(2)
358 real(kind=c_double) :: lon_vertices(*)
359 real(kind=c_double) :: lat_vertices(*)
360
361 ! struct yac_basic_grid *
362 type(c_ptr) :: yac_basic_grid_curve_2d_new_c
364
366 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
367 bind( c, name='yac_basic_grid_curve_2d_deg_new')
368
369 use, intrinsic :: iso_c_binding
370
371 character(kind=c_char) :: name(*)
372 integer(kind=c_size_t) :: nbr_vertices(2)
373 integer(kind=c_int) :: cyclic(2)
374 real(kind=c_double) :: lon_vertices(*)
375 real(kind=c_double) :: lat_vertices(*)
376
377 ! struct yac_basic_grid *
380
382 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
383 x_vertices, y_vertices, cell_to_vertex) &
384 bind( c, name='yac_basic_grid_unstruct_new')
385
386 use, intrinsic :: iso_c_binding
387
388 character(kind=c_char) :: name(*)
389 integer(kind=c_size_t), value :: nbr_vertices
390 integer(kind=c_size_t), value :: nbr_cells
391 integer(kind=c_int) :: num_vertices_per_cell(*)
392 real(kind=c_double) :: x_vertices(*)
393 real(kind=c_double) :: y_vertices(*)
394 integer(kind=c_int) :: cell_to_vertex(*)
395
396 ! struct yac_basic_grid *
397 type(c_ptr) :: yac_basic_grid_unstruct_new_c
399
401 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
402 x_vertices, y_vertices, cell_to_vertex) &
403 bind( c, name='yac_basic_grid_unstruct_deg_new')
404
405 use, intrinsic :: iso_c_binding
406
407 character(kind=c_char) :: name(*)
408 integer(kind=c_size_t), value :: nbr_vertices
409 integer(kind=c_size_t), value :: nbr_cells
410 integer(kind=c_int) :: num_vertices_per_cell(*)
411 real(kind=c_double) :: x_vertices(*)
412 real(kind=c_double) :: y_vertices(*)
413 integer(kind=c_int) :: cell_to_vertex(*)
414
415 ! struct yac_basic_grid *
418
420 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
421 x_vertices, y_vertices, cell_to_vertex) &
422 bind( c, name='yac_basic_grid_unstruct_ll_new')
423
424 use, intrinsic :: iso_c_binding
425
426 character(kind=c_char) :: name(*)
427 integer(kind=c_size_t), value :: nbr_vertices
428 integer(kind=c_size_t), value :: nbr_cells
429 integer(kind=c_int) :: num_vertices_per_cell(*)
430 real(kind=c_double) :: x_vertices(*)
431 real(kind=c_double) :: y_vertices(*)
432 integer(kind=c_int) :: cell_to_vertex(*)
433
434 ! struct yac_basic_grid *
437
439 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
440 x_vertices, y_vertices, cell_to_vertex) &
441 bind( c, name='yac_basic_grid_unstruct_ll_deg_new')
442
443 use, intrinsic :: iso_c_binding
444
445 character(kind=c_char) :: name(*)
446 integer(kind=c_size_t), value :: nbr_vertices
447 integer(kind=c_size_t), value :: nbr_cells
448 integer(kind=c_int) :: num_vertices_per_cell(*)
449 real(kind=c_double) :: x_vertices(*)
450 real(kind=c_double) :: y_vertices(*)
451 integer(kind=c_int) :: cell_to_vertex(*)
452
453 ! struct yac_basic_grid *
456
458 name, nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell, &
459 x_vertices, y_vertices, cell_to_edge, edge_to_vertex) &
460 bind( c, name='yac_basic_grid_unstruct_edge_new')
461
462 use, intrinsic :: iso_c_binding
463
464 character(kind=c_char) :: name(*)
465 integer(kind=c_size_t), value :: nbr_vertices
466 integer(kind=c_size_t), value :: nbr_cells
467 integer(kind=c_size_t), value :: nbr_edges
468 integer(kind=c_int) :: num_edges_per_cell(*)
469 real(kind=c_double) :: x_vertices(*)
470 real(kind=c_double) :: y_vertices(*)
471 integer(kind=c_int) :: cell_to_edge(*)
472 integer(kind=c_int) :: edge_to_vertex(*)
473
474 ! struct yac_basic_grid *
477
479 name, nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell, &
480 x_vertices, y_vertices, cell_to_edge, edge_to_vertex) &
481 bind( c, name='yac_basic_grid_unstruct_edge_deg_new')
482
483 use, intrinsic :: iso_c_binding
484
485 character(kind=c_char) :: name(*)
486 integer(kind=c_size_t), value :: nbr_vertices
487 integer(kind=c_size_t), value :: nbr_cells
488 integer(kind=c_size_t), value :: nbr_edges
489 integer(kind=c_int) :: num_edges_per_cell(*)
490 real(kind=c_double) :: x_vertices(*)
491 real(kind=c_double) :: y_vertices(*)
492 integer(kind=c_int) :: cell_to_edge(*)
493 integer(kind=c_int) :: edge_to_vertex(*)
494
495 ! struct yac_basic_grid *
498
500 name, nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell, &
501 x_vertices, y_vertices, cell_to_edge, edge_to_vertex) &
502 bind( c, name='yac_basic_grid_unstruct_edge_ll_new')
503
504 use, intrinsic :: iso_c_binding
505
506 character(kind=c_char) :: name(*)
507 integer(kind=c_size_t), value :: nbr_vertices
508 integer(kind=c_size_t), value :: nbr_cells
509 integer(kind=c_size_t), value :: nbr_edges
510 integer(kind=c_int) :: num_edges_per_cell(*)
511 real(kind=c_double) :: x_vertices(*)
512 real(kind=c_double) :: y_vertices(*)
513 integer(kind=c_int) :: cell_to_edge(*)
514 integer(kind=c_int) :: edge_to_vertex(*)
515
516 ! struct yac_basic_grid *
519
521 name, nbr_vertices, nbr_cells, nbr_edges, num_edges_per_cell, &
522 x_vertices, y_vertices, cell_to_edge, edge_to_vertex) &
523 bind( c, name='yac_basic_grid_unstruct_edge_ll_deg_new')
524
525 use, intrinsic :: iso_c_binding
526
527 character(kind=c_char) :: name(*)
528 integer(kind=c_size_t), value :: nbr_vertices
529 integer(kind=c_size_t), value :: nbr_cells
530 integer(kind=c_size_t), value :: nbr_edges
531 integer(kind=c_int) :: num_edges_per_cell(*)
532 real(kind=c_double) :: x_vertices(*)
533 real(kind=c_double) :: y_vertices(*)
534 integer(kind=c_int) :: cell_to_edge(*)
535 integer(kind=c_int) :: edge_to_vertex(*)
536
537 ! struct yac_basic_grid *
540
542 name, nbr_points, x_points, y_points) &
543 bind( c, name='yac_basic_grid_cloud_new')
544
545 use, intrinsic :: iso_c_binding
546
547 character(kind=c_char) :: name(*)
548 integer(kind=c_size_t), value :: nbr_points
549 real(kind=c_double) :: x_points(*)
550 real(kind=c_double) :: y_points(*)
551
552 ! struct yac_basic_grid *
553 type(c_ptr) :: yac_basic_grid_cloud_new_c
554 end function yac_basic_grid_cloud_new_c
555
557 name, nbr_points, x_points, y_points) &
558 bind( c, name='yac_basic_grid_cloud_deg_new')
559
560 use, intrinsic :: iso_c_binding
561
562 character(kind=c_char) :: name(*)
563 integer(kind=c_size_t), value :: nbr_points
564 real(kind=c_double) :: x_points(*)
565 real(kind=c_double) :: y_points(*)
566
567 ! struct yac_basic_grid *
568 type(c_ptr) :: yac_basic_grid_cloud_deg_new_c
570
572 name, nbr_vertices, cyclic, lon_vertices, lat_vertices, &
573 north_pol_lon, north_pol_lat) &
574 bind( c, name='yac_basic_grid_reg_2d_rot_new')
575
576 use, intrinsic :: iso_c_binding
577
578 character(kind=c_char) :: name(*)
579 integer(kind=c_size_t) :: nbr_vertices(2)
580 integer(kind=c_int) :: cyclic(2)
581 real(kind=c_double) :: lon_vertices(*)
582 real(kind=c_double) :: lat_vertices(*)
583 real(kind=c_double), value :: north_pol_lon
584 real(kind=c_double), value :: north_pol_lat
585
588
590 name, nbr_vertices, cyclic, lon_vertices, lat_vertices, &
591 north_pol_lon, north_pol_lat) &
592 bind( c, name='yac_basic_grid_reg_2d_rot_deg_new')
593
594 use, intrinsic :: iso_c_binding
595
596 character(kind=c_char) :: name(*)
597 integer(kind=c_size_t) :: nbr_vertices(2)
598 integer(kind=c_int) :: cyclic(2)
599 real(kind=c_double) :: lon_vertices(*)
600 real(kind=c_double) :: lat_vertices(*)
601 real(kind=c_double), value :: north_pol_lon
602 real(kind=c_double), value :: north_pol_lat
603
606
607 function yac_basic_grid_check_coordinates_c(grid, is_fatal) &
608 bind( c, name='yac_basic_grid_check_coordinates' )
609
610 use, intrinsic :: iso_c_binding
611
612 type(c_ptr), value :: grid
613 integer(kind=c_int), value :: is_fatal
614
615 integer(kind=c_int) :: yac_basic_grid_check_coordinates_c
617
618 subroutine yac_basic_grid_compute_cell_areas_c(grid, cell_areas) &
619 bind( c, name='yac_basic_grid_compute_cell_areas')
620
621 use, intrinsic :: iso_c_binding
622
623 type(c_ptr), value :: grid
624 real(kind=c_double) :: cell_areas(*)
626
627 end interface
628
629 !------------------------------
630 ! Handling of distributed grids
631 !------------------------------
632
633 interface
634
635 function yac_dist_grid_pair_new_c(grid_a, grid_b, comm) &
636 bind( c, name='yac_dist_grid_pair_new_f2c' )
637
638 use, intrinsic :: iso_c_binding
639 import :: yac_mpi_fint_kind
640
641 type(c_ptr), value :: grid_a
642 type(c_ptr), value :: grid_b
643 integer(kind=YAC_MPI_FINT_KIND), value :: comm
644
645 ! struct yac_dist_grid_pair *
646 type(c_ptr) :: yac_dist_grid_pair_new_c
647 end function yac_dist_grid_pair_new_c
648
649 subroutine yac_dist_grid_pair_delete_c(grid_pair) &
650 bind( c, name='yac_dist_grid_pair_delete' )
651
652 use, intrinsic :: iso_c_binding
653
654 type(c_ptr), value :: grid_pair
655 end subroutine yac_dist_grid_pair_delete_c
656
657 end interface
658
659 !-------------------------------
660 ! Handling of interpolation grid
661 !-------------------------------
662
663 interface
664
665 function yac_interp_grid_new_c( dist_grid_pair, &
666 src_grid_name, &
667 tgt_grid_name, &
668 num_src_fields, &
669 src_field_locations, &
670 src_field_coordinate_idxs, &
671 src_field_masks_idxs, &
672 tgt_field_location, &
673 tgt_field_coordinate_idx, &
674 tgt_field_masks_idx) &
675 bind( c, name='yac_interp_grid_new_f2c' )
676
677 use, intrinsic :: iso_c_binding
678
679 type(c_ptr), value :: dist_grid_pair
680 character(kind=c_char) :: src_grid_name(*)
681 character(kind=c_char) :: tgt_grid_name(*)
682 integer(kind=c_size_t), value :: num_src_fields
683 integer(kind=c_int) :: src_field_locations(*)
684 integer(kind=c_size_t) :: src_field_coordinate_idxs(*)
685 integer(kind=c_size_t) :: src_field_masks_idxs(*)
686 integer(kind=c_int), value :: tgt_field_location
687 integer(kind=c_size_t), value :: tgt_field_coordinate_idx
688 integer(kind=c_size_t), value :: tgt_field_masks_idx
689
690 ! struct yac_interp_grid *
691 type(c_ptr) :: yac_interp_grid_new_c
692 end function yac_interp_grid_new_c
693
694 subroutine yac_interp_grid_delete_c(interp_grid) &
695 bind( c, name='yac_interp_grid_delete' )
696
697 use, intrinsic :: iso_c_binding
698
699 type(c_ptr), value :: interp_grid
700 end subroutine yac_interp_grid_delete_c
701
702 end interface
703
704 !---------------------------------------------------------------------
705 ! Handling of datastructures required for extended spmap configuration
706 !---------------------------------------------------------------------
707
708 interface
709
711 center_lon, center_lat, inc_angle) &
712 bind( c, name='yac_point_selection_bnd_circle_new' )
713
714 use, intrinsic :: iso_c_binding
715
716 real(kind=c_double), value :: center_lon
717 real(kind=c_double), value :: center_lat
718 real(kind=c_double), value :: inc_angle
719
720 ! struct yac_point_selection *
723
724 subroutine yac_point_selection_delete_c(point_select) &
725 bind( c, name='yac_point_selection_delete' )
726
727 use, intrinsic :: iso_c_binding
728
729 ! struct yac_point_selection *
730 type(c_ptr), value :: point_select
731 end subroutine yac_point_selection_delete_c
732
734 spread_distance, max_search_distance, &
735 weight_type, scale_config) &
736 bind( c, name='yac_interp_spmap_config_new_f2c' )
737
738 use, intrinsic :: iso_c_binding
739
740 real(kind=c_double), value :: spread_distance
741 real(kind=c_double), value :: max_search_distance
742 integer(kind=c_int), value :: weight_type
743 ! struct yac_spmap_scale_config *
744 type(c_ptr), value :: scale_config
745
746 ! struct yac_interp_spmap_config *
747 type(c_ptr) :: yac_interp_spmap_config_new_c
749
750 subroutine yac_interp_spmap_config_delete_c(spmap_config) &
751 bind( c, name='yac_interp_spmap_config_delete' )
752
753 use, intrinsic :: iso_c_binding
754
755 ! struct yac_interp_spmap_config *
756 type(c_ptr), value :: spmap_config
758
760 scale_type, source_cell_area_config, target_cell_area_config) &
761 bind( c, name='yac_spmap_scale_config_new_f2c' )
762
763 use, intrinsic :: iso_c_binding
764
765 integer(kind=c_int), value :: scale_type
766 ! struct yac_spmap_cell_area_config *
767 type(c_ptr), value :: source_cell_area_config
768 ! struct yac_spmap_cell_area_config *
769 type(c_ptr), value :: target_cell_area_config
770
771 ! struct yac_spmap_scale_config *
772 type(c_ptr) :: yac_spmap_scale_config_new_c
774
775 subroutine yac_spmap_scale_config_delete_c(scale_config) &
776 bind( c, name='yac_spmap_scale_config_delete' )
777
778 use, intrinsic :: iso_c_binding
779
780 ! struct yac_spmap_scale_config *
781 type(c_ptr), value :: scale_config
783
784 function yac_spmap_cell_area_config_yac_new_c(sphere_radius) &
785 bind( c, name='yac_spmap_cell_area_config_yac_new' )
786
787 use, intrinsic :: iso_c_binding
788
789 real(kind=c_double), value :: sphere_radius
790
791 ! struct yac_spmap_cell_area_config *
794
796 filename, varname, min_global_id) &
797 bind( c, name='yac_spmap_cell_area_config_file_new_f2c' )
798
799 use, intrinsic :: iso_c_binding
800
801 character(kind=c_char) :: filename(*)
802 character(kind=c_char) :: varname(*)
803 integer(kind=c_int), value :: min_global_id
804
805 ! struct yac_spmap_cell_area_config *
808
809 subroutine yac_spmap_cell_area_config_delete_c(cell_area_config) &
810 bind( c, name='yac_spmap_cell_area_config_delete' )
811
812 use, intrinsic :: iso_c_binding
813
814 ! struct yac_spmap_cell_area_config *
815 type(c_ptr), value :: cell_area_config
817
818 function yac_spmap_overwrite_config_new_c(src_point_selection, config) &
819 bind( c, name='yac_spmap_overwrite_config_new' )
820
821 use, intrinsic :: iso_c_binding
822
823 ! struct yac_point_selection *
824 type(c_ptr), value :: src_point_selection
825 ! struct yac_interp_spmap_config *
826 type(c_ptr), value :: config
827
828 ! struct yac_spmap_overwrite_config *
831
832 subroutine yac_spmap_overwrite_config_delete_c(overwrite_config) &
833 bind( c, name='yac_spmap_overwrite_config_delete' )
834
835 use, intrinsic :: iso_c_binding
836
837 ! struct yac_spmap_overwrite_config *
838 type(c_ptr), value :: overwrite_config
840
841 subroutine yac_spmap_overwrite_configs_delete_c(overwrite_configs) &
842 bind( c, name='yac_spmap_overwrite_configs_delete' )
843
844 use, intrinsic :: iso_c_binding
845
846 ! struct yac_spmap_overwrite_config **
847 type(c_ptr), value :: overwrite_configs
849
850 end interface
851
852 !----------------------------------------------------
853 ! Handling of interpolation method configurations
854 !----------------------------------------------------
855
856 interface
857
859 bind( c, name='yac_interp_method_config_default_from_name_new' )
860
861 use, intrinsic :: iso_c_binding
862
863 character(kind=c_char) :: method_name(*)
864
865 ! struct yac_interp_method_config *
868
870 bind( c, name='yac_interp_method_config_delete' )
871
872 use, intrinsic :: iso_c_binding
873
874 ! struct yac_interp_method_config *
875 type(c_ptr), value :: config
877
879 config, path, value) &
880 bind( c, name='yac_interp_method_config_set_param_str' )
881
882 use, intrinsic :: iso_c_binding
883
884 ! struct yac_interp_method_config *
885 type(c_ptr), value :: config
886 character(kind=c_char) :: path(*)
887 character(kind=c_char) :: value(*)
889
891 config, path, value) &
892 bind( c, name='yac_interp_method_config_set_param_int' )
893
894 use, intrinsic :: iso_c_binding
895
896 ! struct yac_interp_method_config *
897 type(c_ptr), value :: config
898 character(kind=c_char) :: path(*)
899 integer(kind=c_int), value :: value
901
903 config, path, value) &
904 bind( c, name='yac_interp_method_config_set_param_dble' )
905
906 use, intrinsic :: iso_c_binding
907
908 ! struct yac_interp_method_config *
909 type(c_ptr), value :: config
910 character(kind=c_char) :: path(*)
911 real(kind=c_double), value :: value
913
915 bind( c, name='yac_interp_method_config_get_param_int' )
916
917 use, intrinsic :: iso_c_binding
918
919 ! struct yac_interp_method_config const *
920 type(c_ptr), value :: config
921 character(kind=c_char) :: path(*)
922
923 integer(kind=c_int) :: yac_interp_method_config_get_param_int_c
925
927 bind( c, name='yac_interp_method_config_get_param_dble' )
928
929 use, intrinsic :: iso_c_binding
930
931 ! struct yac_interp_method_config const *
932 type(c_ptr), value :: config
933 character(kind=c_char) :: path(*)
934
935 real(kind=c_double) :: yac_interp_method_config_get_param_dble_c
937
939 config, path, buf, buflen) &
940 bind( c, name='yac_interp_method_config_get_param_str_f2c' )
941
942 use, intrinsic :: iso_c_binding
943
944 ! struct yac_interp_method_config const *
945 type(c_ptr), value :: config
946 character(kind=c_char) :: path(*)
947 character(kind=c_char) :: buf(*)
948 integer(kind=c_int), value :: buflen
950
952 bind( c, name='yac_interp_method_config_get_list_size' )
953
954 use, intrinsic :: iso_c_binding
955
956 ! struct yac_interp_method_config const *
957 type(c_ptr), value :: config
958 character(kind=c_char) :: path(*)
959 ! size_t (returned as c_size_t)
960 integer(kind=c_size_t) :: yac_interp_method_config_get_list_size_c
962
964 bind( c, name='yac_interp_method_config_append_list_element' )
965
966 use, intrinsic :: iso_c_binding
967
968 ! struct yac_interp_method_config *
969 type(c_ptr), value :: config
970 character(kind=c_char) :: path(*)
971 ! zero-based index of the new element (size_t)
972 integer(kind=c_size_t) :: yac_interp_method_config_append_list_element_c
974
976 interp_stack_config, method_config) &
977 bind( c, name='yac_interp_stack_config_add' )
978
979 use, intrinsic :: iso_c_binding
980
981 type(c_ptr), value :: interp_stack_config
982 type(c_ptr), value :: method_config
983 end subroutine yac_interp_stack_config_add_c
984
985 end interface
986
987 !--------------------------------
988 ! Handling of interpolation stack
989 !--------------------------------
990
991 interface
992
994 bind( c, name='yac_interp_stack_config_new' )
995
996 use, intrinsic :: iso_c_binding
997
998 type(c_ptr) :: yac_interp_stack_config_new_c
1000
1001 function yac_interp_stack_config_copy_c(interp_stack_config) &
1002 bind( c, name='yac_interp_stack_config_copy' )
1003
1004 use, intrinsic :: iso_c_binding
1005
1006 type(c_ptr), value :: interp_stack_config
1007
1008 type(c_ptr) :: yac_interp_stack_config_copy_c
1010
1011 subroutine yac_interp_stack_config_delete_c(interp_stack_config) &
1012 bind( c, name='yac_interp_stack_config_delete' )
1013
1014 use, intrinsic :: iso_c_binding
1015
1016 type(c_ptr), value :: interp_stack_config
1018
1020 interp_stack_config, reduction_type, partial_coverage) &
1021 bind( c, name='yac_interp_stack_config_add_average_f2c' )
1022
1023 use, intrinsic :: iso_c_binding
1024
1025 type(c_ptr), value :: interp_stack_config
1026 integer(kind=c_int), value :: reduction_type
1027 integer(kind=c_int), value :: partial_coverage
1029
1031 interp_stack_config, weight_type, partial_coverage) &
1032 bind( c, name='yac_interp_stack_config_add_ncc_f2c' )
1033
1034 use, intrinsic :: iso_c_binding
1035
1036 type(c_ptr), value :: interp_stack_config
1037 integer(kind=c_int), value :: weight_type
1038 integer(kind=c_int), value :: partial_coverage
1040
1042 interp_stack_config, type, search_distance_type, search_distance, scale) &
1043 bind( c, name='yac_interp_stack_config_add_dnn_f2c' )
1044
1045 use, intrinsic :: iso_c_binding
1046
1047 type(c_ptr), value :: interp_stack_config
1048 integer(kind=c_int), value :: type
1049 integer(kind=c_int), value :: search_distance_type
1050 real(kind=c_double), value :: search_distance
1051 real(kind=c_double), value :: scale
1053
1055 interp_stack_config, type, n, max_search_distance, scale) &
1056 bind( c, name='yac_interp_stack_config_add_nnn_f2c' )
1057
1058 use, intrinsic :: iso_c_binding
1059
1060 type(c_ptr), value :: interp_stack_config
1061 integer(kind=c_int), value :: type
1062 integer(kind=c_size_t), value :: n
1063 real(kind=c_double), value :: max_search_distance
1064 real(kind=c_double), value :: scale
1066
1068 interp_stack_config, n, max_search_distance, scale) &
1069 bind( c, name='yac_interp_stack_config_add_rbf' )
1070
1071 use, intrinsic :: iso_c_binding
1072
1073 type(c_ptr), value :: interp_stack_config
1074 integer(kind=c_size_t), value :: n
1075 real(kind=c_double), value :: max_search_distance
1076 real(kind=c_double), value :: scale
1078
1080 interp_stack_config, order, enforced_conserv, partial_coverage, &
1081 normalisation) &
1082 bind( c, name='yac_interp_stack_config_add_conservative_f2c' )
1083
1084 use, intrinsic :: iso_c_binding
1085
1086 type(c_ptr), value :: interp_stack_config
1087 integer(kind=c_int), value :: order
1088 integer(kind=c_int), value :: enforced_conserv
1089 integer(kind=c_int), value :: partial_coverage
1090 integer(kind=c_int), value :: normalisation
1092
1094 interp_stack_config, default_config, overwrite_configs) &
1095 bind( c, name='yac_interp_stack_config_add_spmap_ext' )
1096
1097 use, intrinsic :: iso_c_binding
1098
1099 type(c_ptr), value :: interp_stack_config
1100 type(c_ptr), value :: default_config
1101 type(c_ptr), value :: overwrite_configs
1103
1105 interp_stack_config, spread_distance, max_search_distance, &
1106 weight_type, scale_type, &
1107 src_sphere_radius, src_filename, src_varname, src_min_global_id, &
1108 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id) &
1109 bind( c, name='yac_interp_stack_config_add_spmap_f2c' )
1110
1111 use, intrinsic :: iso_c_binding
1112
1113 type(c_ptr), value :: interp_stack_config
1114 real(kind=c_double), value :: spread_distance
1115 real(kind=c_double), value :: max_search_distance
1116 integer(kind=c_int), value :: weight_type
1117 integer(kind=c_int), value :: scale_type
1118 real(kind=c_double), value :: src_sphere_radius
1119 character(kind=c_char) :: src_filename(*)
1120 character(kind=c_char) :: src_varname(*)
1121 integer(kind=c_int), value :: src_min_global_id
1122 real(kind=c_double), value :: tgt_sphere_radius
1123 character(kind=c_char) :: tgt_filename(*)
1124 character(kind=c_char) :: tgt_varname(*)
1125 integer(kind=c_int), value :: tgt_min_global_id
1127
1128 subroutine yac_interp_stack_config_add_hcsbb_c(interp_stack_config) &
1129 bind( c, name='yac_interp_stack_config_add_hcsbb' )
1130
1131 use, intrinsic :: iso_c_binding
1132
1133 type(c_ptr), value :: interp_stack_config
1135
1137 interp_stack_config, filename, on_missing_file, on_success) &
1138 bind( c, name='yac_interp_stack_config_add_user_file_f2c' )
1139
1140 use, intrinsic :: iso_c_binding
1141
1142 type(c_ptr), value :: interp_stack_config
1143 character(kind=c_char) :: filename(*)
1144 integer(kind=c_int), value :: on_missing_file
1145 integer(kind=c_int), value :: on_success
1147
1149 interp_stack_config, value) &
1150 bind( c, name='yac_interp_stack_config_add_fixed' )
1151
1152 use, intrinsic :: iso_c_binding
1153
1154 type(c_ptr), value :: interp_stack_config
1155 real(kind=c_double), value :: value
1157
1159 interp_stack_config, n) &
1160 bind( c, name='yac_interp_stack_config_add_creep' )
1161
1162 use, intrinsic :: iso_c_binding
1163
1164 type(c_ptr), value :: interp_stack_config
1165 integer(kind=c_int), value :: n
1167
1169 interp_stack_config, constructor_key, do_search_key) &
1170 bind( c, name='yac_interp_stack_config_add_check' )
1171
1172 use, intrinsic :: iso_c_binding
1173
1174 type(c_ptr), value :: interp_stack_config
1175 character(kind=c_char) :: constructor_key(*)
1176 character(kind=c_char) :: do_search_key(*)
1178
1180 bind( c, name='yac_interp_stack_config_compare' )
1181
1182 use, intrinsic :: iso_c_binding
1183
1184 type(c_ptr), value :: a
1185 type(c_ptr), value :: b
1186
1187 integer(kind=c_int) :: yac_interp_stack_config_compare_c
1189
1190 function yac_interp_stack_config_generate_c(interp_stack_config) &
1191 bind( c, name='yac_interp_stack_config_generate' )
1192
1193 use, intrinsic :: iso_c_binding
1194
1195 type(c_ptr), value :: interp_stack_config
1196
1197 ! struct interp_method **
1200
1201 end interface
1202
1203 !----------------------------------
1204 ! Handling of interpolation methods
1205 !----------------------------------
1206
1207 interface
1208
1209 function yac_interp_method_do_search_c(interp_method_stack, interp_grid) &
1210 bind( c, name='yac_interp_method_do_search' )
1211
1212 use, intrinsic :: iso_c_binding
1213
1214 type(c_ptr), value :: interp_method_stack
1215 type(c_ptr), value :: interp_grid
1216
1217 ! struct yac_interp_weights *
1218 type(c_ptr) :: yac_interp_method_do_search_c
1220
1221 subroutine yac_interp_method_delete_c(interp_method_stack) &
1222 bind( c, name='yac_interp_method_delete' )
1223
1224 use, intrinsic :: iso_c_binding
1225
1226 type(c_ptr), value :: interp_method_stack
1227 end subroutine yac_interp_method_delete_c
1228
1230 bind( c, name='yac_interp_method_cleanup' )
1231
1232 end subroutine yac_interp_method_cleanup_c
1233
1234 end interface
1235
1236 !----------------------------------
1237 ! Handling of collection selections
1238 !----------------------------------
1239
1240 interface
1241
1242 subroutine yac_collection_selection_delete_c(collection_selection) &
1243 bind( c, name='yac_collection_selection_delete' )
1244
1245 use, intrinsic :: iso_c_binding
1246
1247 type(c_ptr), value :: collection_selection
1249
1250 end interface
1251
1252 !---------------------------------------------------
1253 ! Handling of interpolation generation configuration
1254 !---------------------------------------------------
1255
1256 interface
1257
1258 function yac_interpolation_gen_config_new_c() result(config) &
1259 bind(c, name='yac_interpolation_gen_config_new')
1260
1261 use, intrinsic :: iso_c_binding
1262
1263 type(c_ptr) :: config
1265
1267 bind(c, name='yac_interpolation_gen_config_delete')
1268
1269 use, intrinsic :: iso_c_binding
1270
1271 type(c_ptr), value :: config
1273
1274 function yac_interpolation_gen_config_copy_c(src) result(copy) &
1275 bind(c, name='yac_interpolation_gen_config_copy')
1276
1277 use, intrinsic :: iso_c_binding
1278
1279 type(c_ptr), value :: src
1280 type(c_ptr) :: copy
1282
1284 bind(c, name='yac_interpolation_gen_config_set_reorder_f2c')
1285
1286 use, intrinsic :: iso_c_binding
1287
1288 type(c_ptr), value :: config
1289 integer(kind=c_int), value :: reorder
1291
1293 config, collection_size) &
1294 bind(c, name='yac_interpolation_gen_config_set_collection_size')
1295
1296 use, intrinsic :: iso_c_binding
1297
1298 type(c_ptr), value :: config
1299 integer(kind=c_size_t), value :: collection_size
1301
1303 config, collection_selection) &
1304 bind(c, name='yac_interpolation_gen_config_set_collection_selection')
1305
1306 use, intrinsic :: iso_c_binding
1307
1308 type(c_ptr), value :: config
1309 type(c_ptr), value :: collection_selection
1311
1313 config, frac_mask_fallback_value) &
1314 bind(c, name='yac_interpolation_gen_config_set_frac_mask_fallback_value')
1315
1316 use, intrinsic :: iso_c_binding
1317
1318 type(c_ptr), value :: config
1319 real(kind=c_double), value :: frac_mask_fallback_value
1321
1323 config, scaling_factor) &
1324 bind(c, name='yac_interpolation_gen_config_set_scaling_factor')
1325
1326 use, intrinsic :: iso_c_binding
1327
1328 type(c_ptr), value :: config
1329 real(kind=c_double), value :: scaling_factor
1331
1333 config, scaling_summand) &
1334 bind(c, name='yac_interpolation_gen_config_set_scaling_summand')
1335
1336 use, intrinsic :: iso_c_binding
1337
1338 type(c_ptr), value :: config
1339 real(kind=c_double), value :: scaling_summand
1341
1343 config, yaxt_exchanger_name) &
1344 bind(c, name='yac_interpolation_gen_config_set_yaxt_exchanger_name_f2c')
1345
1346 use, intrinsic :: iso_c_binding
1347
1348 type(c_ptr), value :: config
1349 character(kind=c_char) :: yaxt_exchanger_name(*)
1351
1352 end interface
1353
1354 !----------------------------------
1355 ! Handling of interpolation weights
1356 !----------------------------------
1357
1358 interface
1359
1360 subroutine yac_interp_weights_delete_c(interp_weights) &
1361 bind( c, name='yac_interp_weights_delete' )
1362
1363 use, intrinsic :: iso_c_binding
1364
1365 type(c_ptr), value :: interp_weights
1366 end subroutine yac_interp_weights_delete_c
1367
1368 subroutine yac_interp_weights_write_to_file_c(interp_weights, &
1369 filename, &
1370 src_grid_name, &
1371 tgt_grid_name, &
1372 src_grid_size, &
1373 tgt_grid_size, &
1374 on_existing) &
1375 bind( c, name='yac_interp_weights_write_to_file' )
1376
1377 use, intrinsic :: iso_c_binding
1378
1379 type(c_ptr), value :: interp_weights
1380 character(kind=c_char) :: filename(*)
1381 character(kind=c_char) :: src_grid_name(*)
1382 character(kind=c_char) :: tgt_grid_name(*)
1383 integer(kind=c_size_t), value :: src_grid_size
1384 integer(kind=c_size_t), value :: tgt_grid_size
1385 integer(kind=c_int), value :: on_existing
1387
1389 interp_weights, reorder, collection_size, frac_mask_fallback_value, &
1390 scaling_factor, scaling_summand, yaxt_exchanger_name, &
1391 is_source, is_target) &
1392 bind( c, name='yac_interp_weights_get_interpolation_f2c' )
1393
1394 use, intrinsic :: iso_c_binding
1395
1396 type(c_ptr), value :: interp_weights
1397 integer(kind=c_int), value :: reorder
1398 integer(kind=c_size_t), value :: collection_size
1399 real(kind=c_double), value :: frac_mask_fallback_value
1400 real(kind=c_double), value :: scaling_factor
1401 real(kind=c_double), value :: scaling_summand
1402 character(kind=c_char) :: yaxt_exchanger_name
1403 integer(kind=c_int), value :: is_source
1404 integer(kind=c_int), value :: is_target
1405
1406 ! struct yac_interpolation *
1409
1411 interp_weights, interpolation_gen_config, is_source, is_target) &
1412 bind( c, name='yac_interp_weights_get_interpolation_ext' )
1413
1414 use, intrinsic :: iso_c_binding
1415
1416 type(c_ptr), value :: interp_weights
1417 type(c_ptr), value :: interpolation_gen_config
1418 integer(kind=c_int), value :: is_source
1419 integer(kind=c_int), value :: is_target
1420
1421 ! struct yac_interpolation *
1424
1425 end interface
1426
1427 !---------------------------
1428 ! Handling of interpolations
1429 !---------------------------
1430
1431 interface
1432
1433 subroutine yac_interpolation_delete_c(interp) &
1434 bind( c, name='yac_interpolation_delete' )
1435
1436 use, intrinsic :: iso_c_binding
1437
1438 type(c_ptr), value :: interp
1439 end subroutine yac_interpolation_delete_c
1440
1442 interp, src_fields, tgt_field) &
1443 bind( c, name='yac_interpolation_execute' )
1444
1445 use, intrinsic :: iso_c_binding
1446
1447 type(c_ptr), value :: interp
1448 type(c_ptr), value :: src_fields
1449 type(c_ptr), value :: tgt_field
1450 end subroutine yac_interpolation_execute_c
1451
1453 interp, src_fields, src_frac_masks, tgt_field) &
1454 bind( c, name='yac_interpolation_execute_frac' )
1455
1456 use, intrinsic :: iso_c_binding
1457
1458 type(c_ptr), value :: interp
1459 type(c_ptr), value :: src_fields
1460 type(c_ptr), value :: src_frac_masks
1461 type(c_ptr), value :: tgt_field
1463
1464 subroutine yac_interpolation_execute_put_c(interp, src_fields) &
1465 bind( c, name='yac_interpolation_execute_put' )
1466
1467 use, intrinsic :: iso_c_binding
1468
1469 type(c_ptr), value :: interp
1470 type(c_ptr), value :: src_fields
1471 end subroutine yac_interpolation_execute_put_c
1472
1474 interp, src_fields, src_frac_masks) &
1475 bind( c, name='yac_interpolation_execute_put_frac' )
1476
1477 use, intrinsic :: iso_c_binding
1478
1479 type(c_ptr), value :: interp
1480 type(c_ptr), value :: src_fields
1481 type(c_ptr), value :: src_frac_masks
1483
1484 subroutine yac_interpolation_execute_get_c(interp, tgt_field) &
1485 bind( c, name='yac_interpolation_execute_get' )
1486
1487 use, intrinsic :: iso_c_binding
1488
1489 type(c_ptr), value :: interp
1490 type(c_ptr), value :: tgt_field
1491 end subroutine yac_interpolation_execute_get_c
1492
1493 subroutine yac_interpolation_execute_get_async_c(interp, tgt_field) &
1494 bind( c, name='yac_interpolation_execute_get_async' )
1495
1496 use, intrinsic :: iso_c_binding
1497
1498 type(c_ptr), value :: interp
1499 type(c_ptr), value :: tgt_field
1501
1503 bind( c, name='yac_interpolation_execute_put_test' )
1504
1505 use, intrinsic :: iso_c_binding
1506
1507 type(c_ptr), value :: interp
1508
1509 integer(kind=c_int) :: yac_interpolation_execute_put_test_c
1511
1513 bind( c, name='yac_interpolation_execute_get_test' )
1514
1515 use, intrinsic :: iso_c_binding
1516
1517 type(c_ptr), value :: interp
1518
1519 integer(kind=c_int) :: yac_interpolation_execute_get_test_c
1521
1523 bind( c, name='yac_interpolation_execute_wait' )
1524
1525 use, intrinsic :: iso_c_binding
1526
1527 type(c_ptr), value :: interp
1529
1531 bind( c, name='yac_interpolation_get_const_frac_mask_no_value_c2f' )
1532
1533 use, intrinsic :: iso_c_binding
1534
1535 real(kind=c_double) :: &
1538
1540 bind( c, name='yac_interpolation_get_const_frac_mask_undef_c2f' )
1541
1542 use, intrinsic :: iso_c_binding
1543
1544 real(kind=c_double) :: &
1547
1548 end interface
1549
1550 !--------------------
1551 ! Abort functionality
1552 !--------------------
1553
1554 interface
1555
1556 subroutine yac_abort_message_c ( text, file, line ) &
1557 bind( c, name='yac_abort_message' )
1558
1559 use, intrinsic :: iso_c_binding, only : c_int, c_char
1560
1561 character ( kind=c_char ), dimension(*) :: text
1562 character ( kind=c_char ), dimension(*) :: file
1563 integer ( kind=c_int ), value :: line
1564
1565 end subroutine yac_abort_message_c
1566
1567 end interface
1568
1569 !---------------------------------
1570 ! Setting of callback routines for
1571 ! check interpolation method
1572 !---------------------------------
1573
1574 interface
1575
1577 constructor_callback, user_data, key ) &
1578 bind( c, name='yac_interp_method_check_add_constructor_callback' )
1579
1580 use, intrinsic :: iso_c_binding, only : c_funptr, c_ptr, c_char
1581
1582 type(c_funptr), value :: constructor_callback
1583 type(c_ptr), value :: user_data
1584 character ( kind=c_char ), dimension(*) :: key
1585
1587
1589 do_search_callback, user_data, key ) &
1590 bind( c, name='yac_interp_method_check_add_do_search_callback' )
1591
1592 use, intrinsic :: iso_c_binding, only : c_funptr, c_ptr, c_char
1593
1594 type(c_funptr), value :: do_search_callback
1595 type(c_ptr), value :: user_data
1596 character ( kind=c_char ), dimension(*) :: key
1597
1599
1600 end interface
1601
1602contains
1603
1604 !----------------------------------
1605 ! Handling of collection selections
1606 !----------------------------------
1607
1608 function yac_collection_selection_new_c(collection_size, &
1609 selection_indices)
1610
1611 use, intrinsic :: iso_c_binding
1612
1613 implicit none
1614
1615 integer(kind=c_size_t), intent(in) :: collection_size
1616 integer(kind=c_size_t), target, optional, intent(in) :: selection_indices(*)
1617 type(c_ptr) :: yac_collection_selection_new_c
1618
1619 interface
1620 function yac_collection_selection_new_c_(collection_size, &
1621 selection_indices) &
1622 bind( c, name='yac_collection_selection_new' )
1623
1624 use, intrinsic :: iso_c_binding
1625
1626 integer(kind=c_size_t), value :: collection_size
1627 type(c_ptr), value :: selection_indices
1628
1629 type(c_ptr) :: yac_collection_selection_new_c_
1630 end function yac_collection_selection_new_c_
1631 end interface
1632
1633 if (present(selection_indices)) then
1635 yac_collection_selection_new_c_( &
1636 collection_size, c_loc(selection_indices))
1637 else
1639 yac_collection_selection_new_c_( &
1640 collection_size, c_null_ptr)
1641 end if
1642
1644
1645 !----------------------------------
1646 ! Core version query
1647 !----------------------------------
1648
1649 function yac_get_core_version_c () result (version_string)
1650
1651 use, intrinsic :: iso_c_binding, only : c_ptr, c_char, &
1652 c_f_pointer, c_size_t
1653
1654 implicit none
1655
1656 interface
1657 function yac_get_core_version_c_ () &
1658 bind( c, name='yac_get_core_version' )
1659 use, intrinsic :: iso_c_binding, only : c_ptr
1660 type(c_ptr) :: yac_get_core_version_c_
1661 end function yac_get_core_version_c_
1662 end interface
1663
1664 interface
1665 function strlen_c(str_ptr) bind ( C, name = "strlen" ) result(len)
1666 use, intrinsic :: iso_c_binding
1667 type(c_ptr), value :: str_ptr
1668 integer(kind=c_size_t) :: len
1669 end function strlen_c
1670 end interface
1671
1672 type(c_ptr) :: c_string_ptr
1673 character(len=:), allocatable :: version_string
1674 character(kind=c_char), dimension(:), pointer :: chars
1675 integer(kind=c_size_t) :: i, slen
1676
1677 c_string_ptr = yac_get_core_version_c_()
1678 slen = strlen_c(c_string_ptr)
1679 call c_f_pointer(c_string_ptr, chars, [ slen ])
1680 allocate(character(len=slen) :: version_string)
1681 do i = 1, slen
1682 version_string(i:i) = chars(i)
1683 end do
1684
1685 end function yac_get_core_version_c
1686
1687end module yac_core
Definition __init__.py:1
integer(kind=c_int), parameter yac_interp_ncc_partial_coverage_default_f
Definition yac_core.F90:122
character(kind=c_char, len= *), parameter yac_interp_spmap_varname_default_f
Definition yac_core.F90:163
integer(kind=c_int), parameter yac_interp_dnn_weight_type_default_f
Definition yac_core.F90:143
integer(kind=c_int), parameter yac_interp_dnn_search_distance_type_default_f
Definition yac_core.F90:144
integer(kind=c_int), parameter yac_interp_rbf_kernel_default_f
Definition yac_core.F90:154
type(c_ptr) function yac_collection_selection_new_c(collection_size, selection_indices)
real(kind=c_double), parameter yac_interp_dnn_rbf_scale_default_f
Definition yac_core.F90:148
@ yac_loc_cell
Definition yac_core.F90:32
@ yac_loc_edge
Definition yac_core.F90:34
@ yac_loc_corner
Definition yac_core.F90:33
real(kind=c_double), parameter yac_interp_dnn_gauss_scale_default_f
Definition yac_core.F90:147
@ yac_interp_dnn_search_distance_fixed
Definition yac_core.F90:78
@ yac_interp_dnn_search_distance_cell_area
Definition yac_core.F90:79
integer(kind=c_int), parameter yac_interp_nnn_weighted_default_f
Definition yac_core.F90:137
character(len=:) function, allocatable yac_get_core_version_c()
integer(kind=c_int), parameter yac_interp_avg_partial_coverage_default_f
Definition yac_core.F90:118
@ yac_mapping_on_src
Definition yac_core.F90:181
@ yac_mapping_on_tgt
Definition yac_core.F90:182
real(kind=c_double), parameter yac_interp_nnn_max_search_distance_default_f
Definition yac_core.F90:139
@ yac_weight_file_keep
Definition yac_core.F90:43
@ yac_weight_file_error
Definition yac_core.F90:42
@ yac_weight_file_overwrite
Definition yac_core.F90:44
integer(kind=c_int), parameter yac_interp_conserv_normalisation_default_f
Definition yac_core.F90:128
@ yac_interp_nnn_rbf
Definition yac_core.F90:66
@ yac_interp_nnn_dist
Definition yac_core.F90:64
@ yac_interp_nnn_gauss
Definition yac_core.F90:65
@ yac_interp_nnn_avg
Definition yac_core.F90:63
@ yac_interp_nnn_zero
Definition yac_core.F90:67
integer(kind=c_int), parameter yac_interp_avg_weight_type_default_f
Definition yac_core.F90:117
integer(kind=c_size_t), parameter yac_interp_rbf_n_default_f
Definition yac_core.F90:151
@ yac_interp_spmap_fracarea
Definition yac_core.F90:96
@ yac_interp_spmap_srcarea
Definition yac_core.F90:94
@ yac_interp_spmap_invtgtarea
Definition yac_core.F90:95
@ yac_interp_spmap_none
Definition yac_core.F90:93
@ yac_interp_dnn_weight_gauss
Definition yac_core.F90:73
@ yac_interp_dnn_weight_dist
Definition yac_core.F90:72
@ yac_interp_dnn_weight_rbf
Definition yac_core.F90:74
@ yac_interp_dnn_weight_avg
Definition yac_core.F90:71
integer(kind=c_int), parameter yac_interp_file_on_missing_file_default_f
Definition yac_core.F90:173
real(kind=c_double), parameter yac_interp_dnn_scale_default_f
Definition yac_core.F90:146
real(kind=c_double), parameter yac_interp_rbf_scale_default_f
Definition yac_core.F90:153
integer(kind=c_int), parameter yac_interp_spmap_min_global_id_default_f
Definition yac_core.F90:164
@ yac_interp_file_success_stop
prevents following interpolation method from computating further weights
Definition yac_core.F90:105
@ yac_interp_file_success_cont
continue weight computation with following interpolation methods
Definition yac_core.F90:108
integer(kind=c_int), parameter yac_interp_ncc_weight_type_default_f
Definition yac_core.F90:121
type(c_ptr), parameter yac_interp_spmap_overwrite_default_f
Definition yac_core.F90:166
integer(kind=c_int), parameter yac_interp_spmap_weighted_default_f
Definition yac_core.F90:159
integer(kind=c_int), parameter yac_interp_conserv_order_default_f
Definition yac_core.F90:125
@ yac_interp_conserv_destarea
Definition yac_core.F90:83
@ yac_interp_conserv_fracarea
Definition yac_core.F90:84
character(kind=c_char, len= *), parameter yac_interp_spmap_filename_default_f
Definition yac_core.F90:162
real(kind=c_double), parameter yac_interp_spmap_spread_distance_default_f
Definition yac_core.F90:157
@ yac_interp_spmap_avg
Definition yac_core.F90:88
@ yac_interp_spmap_dist
Definition yac_core.F90:89
real(kind=c_double), parameter yac_interp_nnn_gauss_scale_default_f
Definition yac_core.F90:140
@ yac_interp_ncc_avg
Definition yac_core.F90:58
@ yac_interp_ncc_dist
Definition yac_core.F90:59
character(kind=c_char, len= *), parameter yac_interp_check_constructor_key_default_f
Definition yac_core.F90:169
real(kind=c_double), parameter yac_frac_mask_no_value
Definition yac_core.F90:24
integer(kind=c_int), parameter yac_interp_file_on_success_default_f
Definition yac_core.F90:174
real(kind=c_double), parameter yac_interp_fixed_value_default_f
Definition yac_core.F90:134
integer(kind=c_int), parameter yac_interp_conserv_partial_coverage_default_f
Definition yac_core.F90:127
real(kind=c_double), parameter yac_interp_spmap_sphere_radius_default_f
Definition yac_core.F90:161
integer(kind=c_int), parameter yac_interp_conserv_enforced_conserv_default_f
Definition yac_core.F90:126
integer(kind=c_size_t), parameter yac_interp_nnn_n_default_f
Definition yac_core.F90:138
real(kind=c_double), parameter yac_interp_rbf_max_search_distance_default_f
Definition yac_core.F90:152
integer, parameter yac_mpi_fint_kind
Definition yac_core.F90:23
real(kind=c_double), parameter yac_interp_dnn_search_distance_default_f
Definition yac_core.F90:145
type(c_ptr), parameter yac_interp_spmap_config_default_f
Definition yac_core.F90:165
real(kind=c_double), parameter yac_interp_spmap_max_search_distance_default_f
Definition yac_core.F90:158
@ yac_interp_avg_arithmetic
Definition yac_core.F90:52
@ yac_interp_avg_bary
Definition yac_core.F90:54
@ yac_interp_avg_dist
Definition yac_core.F90:53
integer(kind=c_int), parameter yac_interp_creep_distance_default_f
Definition yac_core.F90:131
character(kind=c_char, len= *), parameter yac_interp_check_do_search_key_default_f
Definition yac_core.F90:170
integer(kind=c_int), parameter yac_interp_spmap_scale_type_default_f
Definition yac_core.F90:160
@ yac_interp_file_missing_error
abort on missing file
Definition yac_core.F90:100
@ yac_interp_file_missing_cont
continue on missing file
Definition yac_core.F90:101