YetAnotherCoupler 3.2.0_a
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
8
9#ifdef HAVE_CONFIG_H
10! Get the definition of the 'YAC_MPI_FINT_FC_KIND' macro.
11#include "config.h"
12#endif
13
15 use, intrinsic :: iso_c_binding, only : c_int, c_long, &
16 & c_long_long, c_short, c_char, &
17 & c_size_t, c_double, c_null_char
18
19 implicit none
20
21 public
22
23 !------------------------------------------------
24 ! Constants for Fortran-C interoperability
25 !------------------------------------------------
26
27 integer, parameter :: yac_mpi_fint_kind = yac_mpi_fint_fc_kind
28
29 !---------------
30 ! Location enums
31 !---------------
32
33 enum, bind(c)
34 enumerator :: yac_loc_cell = 0
35 enumerator :: yac_loc_corner = 1
36 enumerator :: yac_loc_edge = 2
37 end enum
38
39 !---------------------------
40 ! Interpolation method enums
41 !---------------------------
42
43 enum, bind(c)
44 enumerator :: yac_interp_avg_arithmetic = 0
45 enumerator :: yac_interp_avg_dist = 1
46 enumerator :: yac_interp_avg_bary = 2
47 end enum
48
49 enum, bind(c)
50 enumerator :: yac_interp_ncc_avg = 0
51 enumerator :: yac_interp_ncc_dist = 1
52 end enum
53
54 enum, bind(c)
55 enumerator :: yac_interp_nnn_avg = 0
56 enumerator :: yac_interp_nnn_dist = 1
57 enumerator :: yac_interp_nnn_gauss = 2
58 enumerator :: yac_interp_nnn_rbf = 3
59 enumerator :: yac_interp_nnn_zero = 4
60 end enum
61
62 enum, bind(c)
65 end enum
66
67 enum, bind(c)
68 enumerator :: yac_interp_spmap_avg = 0
69 enumerator :: yac_interp_spmap_dist = 1
70 end enum
71
72 enum, bind(c)
73 enumerator :: yac_interp_spmap_none = 0
74 enumerator :: yac_interp_spmap_srcarea = 1
76 enumerator :: yac_interp_spmap_fracarea = 3
77 end enum
78
79 !------------------------------------
80 ! Interpolation method default values
81 !------------------------------------
82
83 ! average
84 integer(kind=c_int), parameter :: yac_interp_avg_weight_type_default_f = 0_c_int
85 integer(kind=c_int), parameter :: yac_interp_avg_partial_coverage_default_f = 0_c_int
86
87 ! nearest corner cells
88 integer(kind=c_int), parameter :: yac_interp_ncc_weight_type_default_f = 0_c_int
89 integer(kind=c_int), parameter :: yac_interp_ncc_partial_coverage_default_f = 0_c_int
90
91 ! conserv
92 integer(kind=c_int), parameter :: yac_interp_conserv_order_default_f = 1_c_int
93 integer(kind=c_int), parameter :: yac_interp_conserv_enforced_conserv_default_f = 0_c_int
94 integer(kind=c_int), parameter :: yac_interp_conserv_partial_coverage_default_f = 0_c_int
95 integer(kind=c_int), parameter :: yac_interp_conserv_normalisation_default_f = 0_c_int
96
97 ! creep
98 integer(kind=c_int), parameter :: yac_interp_creep_distance_default_f = -1_c_int
99
100 ! fixed
101 real(kind=c_double), parameter :: yac_interp_fixed_value_default_f = huge(1.0_c_double)
102
103 ! n-nearest-neighbour
104 integer(kind=c_int), parameter :: yac_interp_nnn_weighted_default_f = 0_c_int
105 integer(kind=c_size_t), parameter :: yac_interp_nnn_n_default_f = 1_c_size_t
106 real(kind=c_double), parameter :: yac_interp_nnn_gauss_scale_default_f = 0.1_c_double
107
108 ! rbf
109 integer(kind=c_int), parameter :: yac_interp_rbf_n_default_f = 9_c_int
110 real(kind=c_double), parameter :: yac_interp_rbf_scale_default_f = 1.487973e+01_c_double
111 integer(kind=c_int), parameter :: yac_interp_rbf_kernel_default_f = 0_c_int
112
113 ! source-point mapping
114 real(kind=c_double), parameter :: yac_interp_spmap_spread_distance_default_f = 0.0_c_double
115 real(kind=c_double), parameter :: yac_interp_spmap_max_search_distance_default_f = 0.0_c_double
116 integer(kind=c_int), parameter :: yac_interp_spmap_weighted_default_f = 0_c_int
117 integer(kind=c_int), parameter :: yac_interp_spmap_scale_default_f = 0_c_int
118 real(kind=c_double), parameter :: yac_interp_spmap_src_sphere_radius_default_f = 1.0_c_double
119 real(kind=c_double), parameter :: yac_interp_spmap_tgt_sphere_radius_default_f = 1.0_c_double
120
121 character(kind=c_char,len=*), parameter :: yac_interp_check_constructor_key_default_f = "" // c_null_char
122 character(kind=c_char,len=*), parameter :: yac_interp_check_do_search_key_default_f = "" // c_null_char
123
124 !---------------------------
125 ! Interpolation weight enums
126 !---------------------------
127
128 enum, bind(c)
129 enumerator :: yac_mapping_on_src = 0
130 enumerator :: yac_mapping_on_tgt = 1
131 end enum
132
133 !------------------------------------------------
134 ! Initialisation and finalization of MPI and YAXT
135 !------------------------------------------------
136
137 interface
138
139 ! initialise MPI (if not already initialised)
140 subroutine yac_mpi_init_c () &
141 bind( c, name='yac_mpi_init' )
142 end subroutine yac_mpi_init_c
143
144 ! initialise YAXT
145 subroutine yac_yaxt_init_c (comm) &
146 bind( c, name='yac_yaxt_init_f2c' )
147
148 import :: yac_mpi_fint_kind
149
150 integer(kind=YAC_MPI_FINT_KIND), value :: comm
151 end subroutine yac_yaxt_init_c
152
153 ! check whether MPI is initialised
155 bind( c, name='yac_mpi_is_initialised' )
156
157 use, intrinsic :: iso_c_binding
158
159 integer(kind=c_int) :: yac_mpi_is_initialised_c
160 end function yac_mpi_is_initialised_c
161
162 ! free internal buffers and finalize yaxt
163 subroutine yac_mpi_cleanup_c () &
164 bind ( c, name="yac_mpi_cleanup" )
165 end subroutine yac_mpi_cleanup_c
166
167 ! finalize MPI (if initialised by YAC)
168 subroutine yac_mpi_finalize_c () &
169 bind( c, name='yac_mpi_finalize' )
170 end subroutine yac_mpi_finalize_c
171
172 end interface
173
174 !-----------------------
175 ! Handling of basic grid
176 !-----------------------
177
178 interface
179
181 bind( c, name='yac_basic_grid_empty_new' )
182
183 use, intrinsic :: iso_c_binding
184
185 character(kind=c_char) :: name(*)
186
187 type(c_ptr) :: yac_basic_grid_empty_new_c
188 end function yac_basic_grid_empty_new_c
189
190 subroutine yac_basic_grid_delete_c(grid) &
191 bind( c, name='yac_basic_grid_delete' )
192
193 use, intrinsic :: iso_c_binding
194
195 type(c_ptr), value :: grid
196 end subroutine yac_basic_grid_delete_c
197
198 function yac_basic_grid_get_data_size_c(grid, location) &
199 bind( c, name='yac_basic_grid_get_data_size_f2c')
200
201 use, intrinsic :: iso_c_binding
202
203 type(c_ptr), value :: grid
204 integer(kind=c_int), value :: location
205
206 integer(kind=c_size_t) :: yac_basic_grid_get_data_size_c
208
210 grid, location, coordinates, count) &
211 bind( c, name='yac_basic_grid_add_coordinates_f2c')
212
213 use, intrinsic :: iso_c_binding
214
215 type(c_ptr), value :: grid
216 integer(kind=c_int), value :: location
217 real(kind=c_double) :: coordinates(*)
218 integer(kind=c_size_t), value :: count
219
220 integer(kind=c_size_t) :: yac_basic_grid_add_coordinates_c
222
224 grid, location, coordinates) &
225 bind( c, name='yac_basic_grid_add_coordinates_nocpy_f2c')
226
227 use, intrinsic :: iso_c_binding
228
229 type(c_ptr), value :: grid
230 integer(kind=c_int), value :: location
231 real(kind=c_double) :: coordinates(*)
232
233 integer(kind=c_size_t) :: yac_basic_grid_add_coordinates_nocpy_c
235
237 grid, location, mask, count, name) &
238 bind( c, name='yac_basic_grid_add_mask_f2c')
239
240 use, intrinsic :: iso_c_binding
241
242 type(c_ptr), value :: grid
243 integer(kind=c_int), value :: location
244 integer(kind=c_int) :: mask(*)
245 integer(kind=c_size_t), value :: count
246 character(kind=c_char) :: name(*)
247
248 integer(kind=c_size_t) :: yac_basic_grid_add_mask_c
249 end function yac_basic_grid_add_mask_c
250
252 grid, location, mask, name) &
253 bind( c, name='yac_basic_grid_add_mask_nocpy_f2c')
254
255 use, intrinsic :: iso_c_binding
256
257 type(c_ptr), value :: grid
258 integer(kind=c_int), value :: location
259 integer(kind=c_int) :: mask(*)
260 character(kind=c_char) :: name(*)
261
262 integer(kind=c_size_t) :: yac_basic_grid_add_mask_nocpy_c
264
266 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
267 bind( c, name='yac_basic_grid_reg_2d_new')
268
269 use, intrinsic :: iso_c_binding
270
271 character(kind=c_char) :: name(*)
272 integer(kind=c_size_t) :: nbr_vertices(2)
273 integer(kind=c_int) :: cyclic(2)
274 real(kind=c_double) :: lon_vertices(*)
275 real(kind=c_double) :: lat_vertices(*)
276
277 type(c_ptr) :: yac_basic_grid_reg_2d_new_c
278 end function yac_basic_grid_reg_2d_new_c
279
281 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
282 bind( c, name='yac_basic_grid_reg_2d_deg_new')
283
284 use, intrinsic :: iso_c_binding
285
286 character(kind=c_char) :: name(*)
287 integer(kind=c_size_t) :: nbr_vertices(2)
288 integer(kind=c_int) :: cyclic(2)
289 real(kind=c_double) :: lon_vertices(*)
290 real(kind=c_double) :: lat_vertices(*)
291
294
296 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
297 bind( c, name='yac_basic_grid_curve_2d_new')
298
299 use, intrinsic :: iso_c_binding
300
301 character(kind=c_char) :: name(*)
302 integer(kind=c_size_t) :: nbr_vertices(2)
303 integer(kind=c_int) :: cyclic(2)
304 real(kind=c_double) :: lon_vertices(*)
305 real(kind=c_double) :: lat_vertices(*)
306
307 type(c_ptr) :: yac_basic_grid_curve_2d_new_c
309
311 name, nbr_vertices, cyclic, lon_vertices, lat_vertices) &
312 bind( c, name='yac_basic_grid_curve_2d_deg_new')
313
314 use, intrinsic :: iso_c_binding
315
316 character(kind=c_char) :: name(*)
317 integer(kind=c_size_t) :: nbr_vertices(2)
318 integer(kind=c_int) :: cyclic(2)
319 real(kind=c_double) :: lon_vertices(*)
320 real(kind=c_double) :: lat_vertices(*)
321
324
326 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
327 x_vertices, y_vertices, cell_to_vertex) &
328 bind( c, name='yac_basic_grid_unstruct_new')
329
330 use, intrinsic :: iso_c_binding
331
332 character(kind=c_char) :: name(*)
333 integer(kind=c_size_t), value :: nbr_vertices
334 integer(kind=c_size_t), value :: nbr_cells
335 integer(kind=c_int) :: num_vertices_per_cell(*)
336 real(kind=c_double) :: x_vertices(*)
337 real(kind=c_double) :: y_vertices(*)
338 integer(kind=c_int) :: cell_to_vertex(*)
339
340 type(c_ptr) :: yac_basic_grid_unstruct_new_c
342
344 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
345 x_vertices, y_vertices, cell_to_vertex) &
346 bind( c, name='yac_basic_grid_unstruct_deg_new')
347
348 use, intrinsic :: iso_c_binding
349
350 character(kind=c_char) :: name(*)
351 integer(kind=c_size_t), value :: nbr_vertices
352 integer(kind=c_size_t), value :: nbr_cells
353 integer(kind=c_int) :: num_vertices_per_cell(*)
354 real(kind=c_double) :: x_vertices(*)
355 real(kind=c_double) :: y_vertices(*)
356 integer(kind=c_int) :: cell_to_vertex(*)
357
360
362 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
363 x_vertices, y_vertices, cell_to_vertex) &
364 bind( c, name='yac_basic_grid_unstruct_ll_new')
365
366 use, intrinsic :: iso_c_binding
367
368 character(kind=c_char) :: name(*)
369 integer(kind=c_size_t), value :: nbr_vertices
370 integer(kind=c_size_t), value :: nbr_cells
371 integer(kind=c_int) :: num_vertices_per_cell(*)
372 real(kind=c_double) :: x_vertices(*)
373 real(kind=c_double) :: y_vertices(*)
374 integer(kind=c_int) :: cell_to_vertex(*)
375
378
380 name, nbr_vertices, nbr_cells, num_vertices_per_cell, &
381 x_vertices, y_vertices, cell_to_vertex) &
382 bind( c, name='yac_basic_grid_unstruct_ll_deg_new')
383
384 use, intrinsic :: iso_c_binding
385
386 character(kind=c_char) :: name(*)
387 integer(kind=c_size_t), value :: nbr_vertices
388 integer(kind=c_size_t), value :: nbr_cells
389 integer(kind=c_int) :: num_vertices_per_cell(*)
390 real(kind=c_double) :: x_vertices(*)
391 real(kind=c_double) :: y_vertices(*)
392 integer(kind=c_int) :: cell_to_vertex(*)
393
396
397 end interface
398
399 !------------------------------
400 ! Handling of distributed grids
401 !------------------------------
402
403 interface
404
405 function yac_dist_grid_pair_new_c(grid_a, grid_b, comm) &
406 bind( c, name='yac_dist_grid_pair_new_f2c' )
407
408 use, intrinsic :: iso_c_binding
409 import :: yac_mpi_fint_kind
410
411 type(c_ptr), value :: grid_a
412 type(c_ptr), value :: grid_b
413 integer(kind=YAC_MPI_FINT_KIND), value :: comm
414
415 type(c_ptr) :: yac_dist_grid_pair_new_c
416 end function yac_dist_grid_pair_new_c
417
418 subroutine yac_dist_grid_pair_delete_c(grid_pair) &
419 bind( c, name='yac_dist_grid_pair_delete' )
420
421 use, intrinsic :: iso_c_binding
422
423 type(c_ptr), value :: grid_pair
424 end subroutine yac_dist_grid_pair_delete_c
425
426 end interface
427
428 !-------------------------------
429 ! Handling of interpolation grid
430 !-------------------------------
431
432 interface
433
434 function yac_interp_grid_new_c( dist_grid_pair, &
435 src_grid_name, &
436 tgt_grid_name, &
437 num_src_fields, &
438 src_field_locations, &
439 src_field_coordinate_idxs, &
440 src_field_masks_idxs, &
441 tgt_field_location, &
442 tgt_field_coordinate_idx, &
443 tgt_field_masks_idx) &
444 bind( c, name='yac_interp_grid_new_f2c' )
445
446 use, intrinsic :: iso_c_binding
447
448 type(c_ptr), value :: dist_grid_pair
449 character(kind=c_char) :: src_grid_name(*)
450 character(kind=c_char) :: tgt_grid_name(*)
451 integer(kind=c_size_t), value :: num_src_fields
452 integer(kind=c_int) :: src_field_locations(*)
453 integer(kind=c_size_t) :: src_field_coordinate_idxs(*)
454 integer(kind=c_size_t) :: src_field_masks_idxs(*)
455 integer(kind=c_int), value :: tgt_field_location
456 integer(kind=c_size_t), value :: tgt_field_coordinate_idx
457 integer(kind=c_size_t), value :: tgt_field_masks_idx
458
459 type(c_ptr) :: yac_interp_grid_new_c
460 end function yac_interp_grid_new_c
461
462 subroutine yac_interp_grid_delete_c(interp_grid) &
463 bind( c, name='yac_interp_grid_delete' )
464
465 use, intrinsic :: iso_c_binding
466
467 type(c_ptr), value :: interp_grid
468 end subroutine yac_interp_grid_delete_c
469
470 end interface
471
472 !--------------------------------
473 ! Handling of interpolation stack
474 !--------------------------------
475
476 interface
477
479 bind( c, name='yac_interp_stack_config_new' )
480
481 use, intrinsic :: iso_c_binding
482
483 type(c_ptr) :: yac_interp_stack_config_new_c
485
486 function yac_interp_stack_config_copy_c(interp_stack_config) &
487 bind( c, name='yac_interp_stack_config_copy' )
488
489 use, intrinsic :: iso_c_binding
490
491 type(c_ptr), value :: interp_stack_config
492
493 type(c_ptr) :: yac_interp_stack_config_copy_c
495
496 subroutine yac_interp_stack_config_delete_c(interp_stack_config) &
497 bind( c, name='yac_interp_stack_config_delete' )
498
499 use, intrinsic :: iso_c_binding
500
501 type(c_ptr), value :: interp_stack_config
503
505 interp_stack_config, reduction_type, partial_coverage) &
506 bind( c, name='yac_interp_stack_config_add_average_f2c' )
507
508 use, intrinsic :: iso_c_binding
509
510 type(c_ptr), value :: interp_stack_config
511 integer(kind=c_int), value :: reduction_type
512 integer(kind=c_int), value :: partial_coverage
514
516 interp_stack_config, weight_type, partial_coverage) &
517 bind( c, name='yac_interp_stack_config_add_ncc_f2c' )
518
519 use, intrinsic :: iso_c_binding
520
521 type(c_ptr), value :: interp_stack_config
522 integer(kind=c_int), value :: weight_type
523 integer(kind=c_int), value :: partial_coverage
525
527 interp_stack_config, type, n, scale) &
528 bind( c, name='yac_interp_stack_config_add_nnn_f2c' )
529
530 use, intrinsic :: iso_c_binding
531
532 type(c_ptr), value :: interp_stack_config
533 integer(kind=c_int), value :: type
534 integer(kind=c_size_t), value :: n
535 real(kind=c_double), value :: scale
537
539 interp_stack_config, order, enforced_conserv, partial_coverage, &
540 normalisation) &
541 bind( c, name='yac_interp_stack_config_add_conservative_f2c' )
542
543 use, intrinsic :: iso_c_binding
544
545 type(c_ptr), value :: interp_stack_config
546 integer(kind=c_int), value :: order
547 integer(kind=c_int), value :: enforced_conserv
548 integer(kind=c_int), value :: partial_coverage
549 integer(kind=c_int), value :: normalisation
551
553 interp_stack_config, spread_distance, max_search_distance, &
554 weight_type, scale_type, src_sphere_radius, tgt_sphere_radius) &
555 bind( c, name='yac_interp_stack_config_add_spmap_f2c' )
556
557 use, intrinsic :: iso_c_binding
558
559 type(c_ptr), value :: interp_stack_config
560 real(kind=c_double), value :: spread_distance
561 real(kind=c_double), value :: max_search_distance
562 integer(kind=c_int), value :: weight_type
563 integer(kind=c_int), value :: scale_type
564 real(kind=c_double), value :: src_sphere_radius
565 real(kind=c_double), value :: tgt_sphere_radius
567
568 subroutine yac_interp_stack_config_add_hcsbb_c(interp_stack_config) &
569 bind( c, name='yac_interp_stack_config_add_hcsbb' )
570
571 use, intrinsic :: iso_c_binding
572
573 type(c_ptr), value :: interp_stack_config
575
577 interp_stack_config, filename, src_grid_name, tgt_grid_name) &
578 bind( c, name='yac_interp_stack_config_add_user_file' )
579
580 use, intrinsic :: iso_c_binding
581
582 type(c_ptr), value :: interp_stack_config
583 character(kind=c_char) :: filename(*)
584 character(kind=c_char) :: src_grid_name(*)
585 character(kind=c_char) :: tgt_grid_name(*)
587
589 interp_stack_config, value) &
590 bind( c, name='yac_interp_stack_config_add_fixed' )
591
592 use, intrinsic :: iso_c_binding
593
594 type(c_ptr), value :: interp_stack_config
595 real(kind=c_double), value :: value
597
599 interp_stack_config, n) &
600 bind( c, name='yac_interp_stack_config_add_creep' )
601
602 use, intrinsic :: iso_c_binding
603
604 type(c_ptr), value :: interp_stack_config
605 integer(kind=c_int), value :: n
607
609 interp_stack_config, constructor_key, do_search_key) &
610 bind( c, name='yac_interp_stack_config_add_check' )
611
612 use, intrinsic :: iso_c_binding
613
614 type(c_ptr), value :: interp_stack_config
615 character(kind=c_char) :: constructor_key(*)
616 character(kind=c_char) :: do_search_key(*)
618
620 bind( c, name='yac_interp_stack_config_compare' )
621
622 use, intrinsic :: iso_c_binding
623
624 type(c_ptr), value :: a
625 type(c_ptr), value :: b
626
627 integer(kind=c_int) :: yac_interp_stack_config_compare_c
629
630 function yac_interp_stack_config_generate_c(interp_stack_config) &
631 bind( c, name='yac_interp_stack_config_generate' )
632
633 use, intrinsic :: iso_c_binding
634
635 type(c_ptr), value :: interp_stack_config
636
639
640 end interface
641
642 !----------------------------------
643 ! Handling of interpolation methods
644 !----------------------------------
645
646 interface
647
648 function yac_interp_method_do_search_c(interp_method_stack, interp_grid) &
649 bind( c, name='yac_interp_method_do_search' )
650
651 use, intrinsic :: iso_c_binding
652
653 type(c_ptr), value :: interp_method_stack
654 type(c_ptr), value :: interp_grid
655
656 type(c_ptr) :: yac_interp_method_do_search_c
658
659 subroutine yac_interp_method_delete_c(interp_method_stack) &
660 bind( c, name='yac_interp_method_delete' )
661
662 use, intrinsic :: iso_c_binding
663
664 type(c_ptr), value :: interp_method_stack
665 end subroutine yac_interp_method_delete_c
666
667 end interface
668
669 !----------------------------------
670 ! Handling of interpolation weights
671 !----------------------------------
672
673 interface
674
675 subroutine yac_interp_weights_delete_c(interp_weights) &
676 bind( c, name='yac_interp_weights_delete' )
677
678 use, intrinsic :: iso_c_binding
679
680 type(c_ptr), value :: interp_weights
681 end subroutine yac_interp_weights_delete_c
682
683 subroutine yac_interp_weights_write_to_file_c(interp_weights, &
684 filename, &
685 src_grid_name, &
686 tgt_grid_name, &
687 src_grid_size, &
688 tgt_grid_size) &
689 bind( c, name='yac_interp_weights_write_to_file' )
690
691 use, intrinsic :: iso_c_binding
692
693 type(c_ptr), value :: interp_weights
694 character(kind=c_char) :: filename(*)
695 character(kind=c_char) :: src_grid_name(*)
696 character(kind=c_char) :: tgt_grid_name(*)
697 integer(kind=c_size_t), value :: src_grid_size
698 integer(kind=c_size_t), value :: tgt_grid_size
700
702 interp_weights, reorder, collection_size, frac_mask_fallback_value, &
703 scaling_factor, scaling_summand) &
704 bind( c, name='yac_interp_weights_get_interpolation_f2c' )
705
706 use, intrinsic :: iso_c_binding
707
708 type(c_ptr), value :: interp_weights
709 integer(kind=c_int), value :: reorder
710 integer(kind=c_size_t), value :: collection_size
711 real(kind=c_double), value :: frac_mask_fallback_value
712 real(kind=c_double), value :: scaling_factor
713 real(kind=c_double), value :: scaling_summand
714
717
718 end interface
719
720 !---------------------------
721 ! Handling of interpolations
722 !---------------------------
723
724 interface
725
726 subroutine yac_interpolation_delete_c(interp) &
727 bind( c, name='yac_interpolation_delete' )
728
729 use, intrinsic :: iso_c_binding
730
731 type(c_ptr), value :: interp
732 end subroutine yac_interpolation_delete_c
733
735 interp, src_fields, tgt_field) &
736 bind( c, name='yac_interpolation_execute' )
737
738 use, intrinsic :: iso_c_binding
739
740 type(c_ptr), value :: interp
741 type(c_ptr), value :: src_fields
742 type(c_ptr), value :: tgt_field
743 end subroutine yac_interpolation_execute_c
744
746 interp, src_fields, src_frac_masks, tgt_field) &
747 bind( c, name='yac_interpolation_execute_frac' )
748
749 use, intrinsic :: iso_c_binding
750
751 type(c_ptr), value :: interp
752 type(c_ptr), value :: src_fields
753 type(c_ptr), value :: src_frac_masks
754 type(c_ptr), value :: tgt_field
756
757 subroutine yac_interpolation_execute_put_c(interp, src_fields) &
758 bind( c, name='yac_interpolation_execute_put' )
759
760 use, intrinsic :: iso_c_binding
761
762 type(c_ptr), value :: interp
763 type(c_ptr), value :: src_fields
765
767 interp, src_fields, src_frac_masks) &
768 bind( c, name='yac_interpolation_execute_put_frac' )
769
770 use, intrinsic :: iso_c_binding
771
772 type(c_ptr), value :: interp
773 type(c_ptr), value :: src_fields
774 type(c_ptr), value :: src_frac_masks
776
777 subroutine yac_interpolation_execute_get_c(interp, tgt_field) &
778 bind( c, name='yac_interpolation_execute_get' )
779
780 use, intrinsic :: iso_c_binding
781
782 type(c_ptr), value :: interp
783 type(c_ptr), value :: tgt_field
785
786 subroutine yac_interpolation_execute_get_async_c(interp, tgt_field) &
787 bind( c, name='yac_interpolation_execute_get_async' )
788
789 use, intrinsic :: iso_c_binding
790
791 type(c_ptr), value :: interp
792 type(c_ptr), value :: tgt_field
794
796 bind( c, name='yac_interpolation_execute_put_test' )
797
798 use, intrinsic :: iso_c_binding
799
800 type(c_ptr), value :: interp
801
802 integer(kind=c_int) :: yac_interpolation_execute_put_test_c
804
806 bind( c, name='yac_interpolation_execute_get_test' )
807
808 use, intrinsic :: iso_c_binding
809
810 type(c_ptr), value :: interp
811
812 integer(kind=c_int) :: yac_interpolation_execute_get_test_c
814
816 bind( c, name='yac_interpolation_execute_wait' )
817
818 use, intrinsic :: iso_c_binding
819
820 type(c_ptr), value :: interp
822
824 bind( c, name='yac_interpolation_get_const_frac_mask_no_value_c2f' )
825
826 use, intrinsic :: iso_c_binding
827
828 real(kind=c_double) :: &
831
833 bind( c, name='yac_interpolation_get_const_frac_mask_undef_c2f' )
834
835 use, intrinsic :: iso_c_binding
836
837 real(kind=c_double) :: &
840
841 end interface
842
843 !--------------------
844 ! Abort functionality
845 !--------------------
846
847 interface
848
849 subroutine yac_abort_message_c ( text, file, line ) &
850 bind( c, name='yac_abort_message' )
851
852 use, intrinsic :: iso_c_binding, only : c_int, c_char
853
854 character ( kind=c_char ), dimension(*) :: text
855 character ( kind=c_char ), dimension(*) :: file
856 integer ( kind=c_int ), value :: line
857
858 end subroutine yac_abort_message_c
859
860 end interface
861
862 !---------------------------------
863 ! Setting of callback routines for
864 ! check interpolation method
865 !---------------------------------
866
867 interface
868
870 constructor_callback, user_data, key ) &
871 bind( c, name='yac_interp_method_check_add_constructor_callback' )
872
873 use, intrinsic :: iso_c_binding, only : c_funptr, c_ptr, c_char
874
875 type(c_funptr), value :: constructor_callback
876 type(c_ptr), value :: user_data
877 character ( kind=c_char ), dimension(*) :: key
878
880
882 do_search_callback, user_data, key ) &
883 bind( c, name='yac_interp_method_check_add_do_search_callback' )
884
885 use, intrinsic :: iso_c_binding, only : c_funptr, c_ptr, c_char
886
887 type(c_funptr), value :: do_search_callback
888 type(c_ptr), value :: user_data
889 character ( kind=c_char ), dimension(*) :: key
890
892
893 end interface
894
895end module yac_core
integer(kind=c_int), parameter yac_interp_ncc_partial_coverage_default_f
Definition yac_core.F90:89
integer(kind=c_int), parameter yac_interp_rbf_kernel_default_f
Definition yac_core.F90:111
@ yac_loc_cell
Definition yac_core.F90:34
@ yac_loc_edge
Definition yac_core.F90:36
@ yac_loc_corner
Definition yac_core.F90:35
@ yac_interp_spmap_fracarea
Definition yac_core.F90:76
@ yac_interp_spmap_srcarea
Definition yac_core.F90:74
@ yac_interp_spmap_invtgtarea
Definition yac_core.F90:75
@ yac_interp_spmap_none
Definition yac_core.F90:73
integer(kind=c_int), parameter yac_interp_nnn_weighted_default_f
Definition yac_core.F90:104
real(kind=c_double), parameter yac_interp_spmap_tgt_sphere_radius_default_f
Definition yac_core.F90:119
integer(kind=c_int), parameter yac_interp_avg_partial_coverage_default_f
Definition yac_core.F90:85
@ yac_interp_avg_arithmetic
Definition yac_core.F90:44
@ yac_interp_avg_bary
Definition yac_core.F90:46
@ yac_interp_avg_dist
Definition yac_core.F90:45
integer(kind=c_int), parameter yac_interp_conserv_normalisation_default_f
Definition yac_core.F90:95
@ yac_interp_conserv_destarea
Definition yac_core.F90:63
@ yac_interp_conserv_fracarea
Definition yac_core.F90:64
integer(kind=c_int), parameter yac_interp_avg_weight_type_default_f
Definition yac_core.F90:84
@ yac_interp_spmap_avg
Definition yac_core.F90:68
@ yac_interp_spmap_dist
Definition yac_core.F90:69
real(kind=c_double), parameter yac_interp_spmap_src_sphere_radius_default_f
Definition yac_core.F90:118
real(kind=c_double), parameter yac_interp_rbf_scale_default_f
Definition yac_core.F90:110
integer(kind=c_int), parameter yac_interp_spmap_scale_default_f
Definition yac_core.F90:117
integer(kind=c_int), parameter yac_interp_ncc_weight_type_default_f
Definition yac_core.F90:88
integer(kind=c_int), parameter yac_interp_spmap_weighted_default_f
Definition yac_core.F90:116
integer(kind=c_int), parameter yac_interp_conserv_order_default_f
Definition yac_core.F90:92
@ yac_mapping_on_src
Definition yac_core.F90:129
@ yac_mapping_on_tgt
Definition yac_core.F90:130
real(kind=c_double), parameter yac_interp_spmap_spread_distance_default_f
Definition yac_core.F90:114
real(kind=c_double), parameter yac_interp_nnn_gauss_scale_default_f
Definition yac_core.F90:106
integer(kind=c_int), parameter yac_interp_rbf_n_default_f
Definition yac_core.F90:109
@ yac_interp_nnn_rbf
Definition yac_core.F90:58
@ yac_interp_nnn_dist
Definition yac_core.F90:56
@ yac_interp_nnn_gauss
Definition yac_core.F90:57
@ yac_interp_nnn_avg
Definition yac_core.F90:55
@ yac_interp_nnn_zero
Definition yac_core.F90:59
character(kind=c_char, len= *), parameter yac_interp_check_constructor_key_default_f
Definition yac_core.F90:121
real(kind=c_double), parameter yac_interp_fixed_value_default_f
Definition yac_core.F90:101
integer(kind=c_int), parameter yac_interp_conserv_partial_coverage_default_f
Definition yac_core.F90:94
integer(kind=c_int), parameter yac_interp_conserv_enforced_conserv_default_f
Definition yac_core.F90:93
integer(kind=c_size_t), parameter yac_interp_nnn_n_default_f
Definition yac_core.F90:105
integer, parameter yac_mpi_fint_kind
Definition yac_core.F90:27
real(kind=c_double), parameter yac_interp_spmap_max_search_distance_default_f
Definition yac_core.F90:115
@ yac_interp_ncc_avg
Definition yac_core.F90:50
@ yac_interp_ncc_dist
Definition yac_core.F90:51
integer(kind=c_int), parameter yac_interp_creep_distance_default_f
Definition yac_core.F90:98
character(kind=c_char, len= *), parameter yac_interp_check_do_search_key_default_f
Definition yac_core.F90:122