YAC 3.21.0
Yet Another Coupler
Loading...
Searching...
No Matches
yac_global.F90
Go to the documentation of this file.
1! Copyright (c) 2024 The YAC Authors
2!
3! SPDX-License-Identifier: BSD-3-Clause
4
6
7 use, intrinsic :: iso_c_binding, only: c_null_char
8
9 private
11 public :: yac_dble2cptr
15
16 character(len=*), parameter :: yac_component_has_metadata_hint = &
17 "(use yac_fcomponent_has_metadata to check for the existence of " // &
18 "metadata before calling yac_fget_component_metadata)"
19
20 character(len=*), parameter :: yac_grid_has_metadata_hint = &
21 "(use yac_fgrid_has_metadata to check for the existence of " // &
22 "metadata before calling yac_fget_grid_metadata)"
23
24 character(len=*), parameter :: yac_field_has_metadata_hint = &
25 "(use yac_ffield_has_metadata to check for the existence of " // &
26 "metadata before calling yac_fget_field_metadata)"
27
28
29 contains
30
31#ifndef YAC_CODE_COVERAGE_TEST
32#define YAC_FASSERT(exp, msg) IF (.NOT. exp) call yac_abort_message(TRIM(msg) // c_null_char, TRIM(__FILE__) // c_null_char, __LINE__)
33#define YAC_CHECK_STRING_LEN(routine, str) YAC_FASSERT(LEN_TRIM(str) < YAC_MAX_CHARLEN, "ERROR(" // TRIM(routine) // "): string """ // TRIM(str) // """ exceeds length of YAC_MAX_CHARLEN")
34#else
35#define YAC_FASSERT(exp, msg)
36#define YAC_CHECK_STRING_LEN(routine, str)
37#endif
38
42 function yac_internal_cptr2char( cptr ) result (string)
43
44 use, intrinsic :: iso_c_binding, only: c_ptr, c_char, &
45 c_f_pointer,c_size_t
46
47 implicit none
48
49 TYPE(c_ptr), intent(in) :: cptr
50 CHARACTER(len=:), allocatable :: string
51 CHARACTER(kind=c_char), dimension(:), pointer :: chars
52 INTEGER(kind=c_size_t) :: i, strlen
53
54 interface
55 function strlen_c(str_ptr) bind ( C, name = "strlen" ) result(len)
56 use, intrinsic :: iso_c_binding
57 type(c_ptr), value :: str_ptr
58 integer(kind=c_size_t) :: len
59 end function strlen_c
60 end interface
61
62 strlen = strlen_c(cptr)
63 CALL c_f_pointer(cptr, chars, [ strlen ])
64 allocate(character(len=strlen) :: string)
65 DO i=1,strlen
66 string(i:i) = chars(i)
67 END DO
68 end function yac_internal_cptr2char
69
70 function yac_dble2cptr(routine, ptr_name, dble_ptr)
71
72 use yac
73 use, intrinsic :: iso_c_binding, only: c_ptr, c_loc, c_null_ptr
74
75 character(len=*), intent(in) :: routine
76 character(len=*), intent(in) :: ptr_name
77 type(yac_dble_ptr), intent(in) :: dble_ptr
78 type(c_ptr) :: yac_dble2cptr
79
80 if (SIZE(dble_ptr%p) > 0) then
81 yac_fassert(is_contiguous(dble_ptr%p), "ERROR(" // trim(routine) // "): " // trim(ptr_name) // " is not contiguous")
82 yac_dble2cptr = c_loc(dble_ptr%p(1))
83 else
84 yac_dble2cptr = c_null_ptr
85 endif
86 end function yac_dble2cptr
87
88end module mo_yac_iso_c_helpers
89
91
92 public :: send_field_to_dble, &
99
100contains
101
102 subroutine send_field_to_dble(field_id, &
103 nbr_hor_points, &
104 nbr_pointsets, &
105 collection_size, &
106 send_field, &
107 send_field_dble, &
108 send_frac_mask, &
109 send_frac_mask_dble)
110
111 use yac
112 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
113
114 implicit none
115
116 interface
117
118 function yac_get_field_put_mask_c2f_c ( field_id ) &
119 bind( c, name='yac_get_field_put_mask_c2f' )
120
121 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
122
123 integer ( kind=c_int ), value :: field_id
124 type(c_ptr) :: yac_get_field_put_mask_c2f_c
125
126 end function yac_get_field_put_mask_c2f_c
127
128 end interface
129
130 integer, intent (in) :: field_id
131 integer, intent (in) :: nbr_hor_points
132 integer, intent (in) :: nbr_pointsets
133 integer, intent (in) :: collection_size
134 real, intent (in) :: send_field(nbr_hor_points, &
135 nbr_pointsets, &
136 collection_size)
137 double precision, intent (out) :: send_field_dble(nbr_hor_points, &
138 nbr_pointsets, &
139 collection_size)
140 real, optional, intent (in) :: send_frac_mask(nbr_hor_points, &
141 nbr_pointsets, &
142 collection_size)
143 double precision, optional, intent (out) :: send_frac_mask_dble(nbr_hor_points, &
144 nbr_pointsets, &
145 collection_size)
146
147 integer :: i, j, k
148 type(c_ptr) :: put_mask_
149 type(c_ptr), pointer :: put_mask(:)
150 integer(kind=c_int), pointer :: pointset_put_mask(:)
151
153
154 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
155 if (c_associated(put_mask_)) then
156 call c_f_pointer(put_mask_, put_mask, shape=[nbr_pointsets])
157 do i = 1, collection_size
158 do j = 1, nbr_pointsets
159 call c_f_pointer( &
160 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
161 do k = 1, nbr_hor_points
162 if (pointset_put_mask(k) /= 0) then
163 send_field_dble(k, j, i) = dble(send_field(k, j, i))
164 else
165 send_field_dble(k, j, i) = 0d0
166 end if
167 end do
168 end do
169 end do
170 if (present(send_frac_mask)) then
171 do i = 1, collection_size
172 do j = 1, nbr_pointsets
173 call c_f_pointer( &
174 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
175 do k = 1, nbr_hor_points
176 if (pointset_put_mask(k) /= 0) then
177 send_frac_mask_dble(k, j, i) = dble(send_frac_mask(k, j, i))
178 else
179 send_frac_mask_dble(k, j, i) = 0d0
180 end if
181 end do
182 end do
183 end do
184 end if
185 else
186 send_field_dble = dble(send_field)
187 if (present(send_frac_mask)) then
188 send_frac_mask_dble = dble(send_frac_mask)
189 end if
190 end if
191 else
192 send_field_dble = 0d0
193 if (present(send_frac_mask)) then
194 send_frac_mask_dble = 0d0
195 end if
196 end if
197 end subroutine send_field_to_dble
198
199 subroutine send_field_to_dble_single(field_id, &
200 nbr_hor_points, &
201 collection_size, &
202 send_field, &
203 send_field_dble, &
204 send_frac_mask, &
205 send_frac_mask_dble)
206
207 use yac
208 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
209
210 implicit none
211
212 interface
213
214 function yac_get_field_put_mask_c2f_c ( field_id ) &
215 bind( c, name='yac_get_field_put_mask_c2f' )
216
217 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
218
219 integer ( kind=c_int ), value :: field_id
220 type(c_ptr) :: yac_get_field_put_mask_c2f_c
221
222 end function yac_get_field_put_mask_c2f_c
223
224 end interface
225
226 integer, intent (in) :: field_id
227 integer, intent (in) :: nbr_hor_points
228 integer, intent (in) :: collection_size
229 real, intent (in) :: send_field(nbr_hor_points, &
230 collection_size)
231 double precision, intent (out) :: send_field_dble(nbr_hor_points, &
232 collection_size)
233 real, optional, intent (in) :: send_frac_mask(nbr_hor_points, &
234 collection_size)
235 double precision, optional, intent (out) :: send_frac_mask_dble(nbr_hor_points, &
236 collection_size)
237
238 integer :: i, j
239 type(c_ptr) :: put_mask_
240 type(c_ptr), pointer :: put_mask(:)
241 integer(kind=c_int), pointer :: pointset_put_mask(:)
242
244
245 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
246 if (c_associated(put_mask_)) then
247 call c_f_pointer(put_mask_, put_mask, shape=[1])
248 do i = 1, collection_size
249 call c_f_pointer( &
250 put_mask(1), pointset_put_mask, shape=[nbr_hor_points])
251 do j = 1, nbr_hor_points
252 if (pointset_put_mask(j) /= 0) then
253 send_field_dble(j, i) = dble(send_field(j, i))
254 else
255 send_field_dble(j, i) = 0d0
256 end if
257 end do
258 end do
259 if (present(send_frac_mask)) then
260 do i = 1, collection_size
261 call c_f_pointer( &
262 put_mask(1), pointset_put_mask, shape=[nbr_hor_points])
263 do j = 1, nbr_hor_points
264 if (pointset_put_mask(j) /= 0) then
265 send_frac_mask_dble(j, i) = dble(send_frac_mask(j, i))
266 else
267 send_frac_mask_dble(j, i) = 0d0
268 end if
269 end do
270 end do
271 end if
272 else
273 send_field_dble = dble(send_field)
274 if (present(send_frac_mask)) then
275 send_frac_mask_dble = dble(send_frac_mask)
276 end if
277 end if
278 else
279 send_field_dble = 0d0
280 if (present(send_frac_mask)) then
281 send_frac_mask_dble = 0d0
282 end if
283 end if
284 end subroutine send_field_to_dble_single
285
286 subroutine send_field_to_dble_ptr(field_id, &
287 nbr_pointsets, &
288 collection_size, &
289 send_field, &
290 send_field_dble, &
291 send_frac_mask, &
292 send_frac_mask_dble)
293
294 use yac
295 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
296
297 implicit none
298
299 interface
300
301 function yac_get_field_put_mask_c2f_c ( field_id ) &
302 bind( c, name='yac_get_field_put_mask_c2f' )
303
304 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
305
306 integer ( kind=c_int ), value :: field_id
307 type(c_ptr) :: yac_get_field_put_mask_c2f_c
308
309 end function yac_get_field_put_mask_c2f_c
310
311 end interface
312
313 integer, intent (in) :: field_id
314 integer, intent (in) :: nbr_pointsets
315 integer, intent (in) :: collection_size
316 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
317 collection_size)
318 type(yac_dble_ptr), intent (out) :: send_field_dble(nbr_pointsets, &
319 collection_size)
320 type(yac_real_ptr), optional, intent (in) :: send_frac_mask(nbr_pointsets, &
321 collection_size)
322 type(yac_dble_ptr), optional, intent (out) :: send_frac_mask_dble(nbr_pointsets, &
323 collection_size)
324
325 integer :: i, j, k, nbr_hor_points
326 type(c_ptr) :: put_mask_
327 type(c_ptr), pointer :: put_mask(:)
328 integer(kind=c_int), pointer :: pointset_put_mask(:)
329
331
332 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
333 if (c_associated(put_mask_)) then
334 call c_f_pointer(put_mask_, put_mask, shape=[nbr_pointsets])
335 do i = 1, collection_size
336 do j = 1, nbr_pointsets
337 nbr_hor_points = size(send_field(j,i)%p)
338 allocate(send_field_dble(j,i)%p(nbr_hor_points))
339 call c_f_pointer( &
340 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
341 do k = 1, nbr_hor_points
342 if (pointset_put_mask(k) /= 0) then
343 send_field_dble(j, i)%p(k) = dble(send_field(j, i)%p(k))
344 else
345 send_field_dble(j, i)%p(k) = 0d0
346 end if
347 end do
348 end do
349 end do
350 if (present(send_frac_mask)) then
351 do i = 1, collection_size
352 do j = 1, nbr_pointsets
353 nbr_hor_points = size(send_frac_mask(j,i)%p)
354 allocate(send_frac_mask_dble(j,i)%p(nbr_hor_points))
355 call c_f_pointer( &
356 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
357 do k = 1, nbr_hor_points
358 if (pointset_put_mask(k) /= 0) then
359 send_frac_mask_dble(j, i)%p(k) = dble(send_frac_mask(j, i)%p(k))
360 else
361 send_frac_mask_dble(j, i)%p(k) = 0d0
362 end if
363 end do
364 end do
365 end do
366 end if
367 else
368 do i = 1, collection_size
369 do j = 1, nbr_pointsets
370 nbr_hor_points = size(send_field(j,i)%p)
371 allocate(send_field_dble(j,i)%p(nbr_hor_points))
372 send_field_dble(j,i)%p = dble(send_field(j,i)%p)
373 end do
374 end do
375 if (present(send_frac_mask)) then
376 do i = 1, collection_size
377 do j = 1, nbr_pointsets
378 nbr_hor_points = size(send_frac_mask(j,i)%p)
379 allocate(send_frac_mask_dble(j,i)%p(nbr_hor_points))
380 send_frac_mask_dble(j,i)%p = dble(send_frac_mask(j,i)%p)
381 end do
382 end do
383 end if
384 end if
385 else
386 do i = 1, collection_size
387 do j = 1, nbr_pointsets
388 nbr_hor_points = size(send_field(j,i)%p)
389 allocate(send_field_dble(j,i)%p(nbr_hor_points))
390 send_field_dble(j,i)%p = 0d0
391 end do
392 end do
393 if (present(send_frac_mask)) then
394 do i = 1, collection_size
395 do j = 1, nbr_pointsets
396 nbr_hor_points = size(send_frac_mask(j,i)%p)
397 allocate(send_frac_mask_dble(j,i)%p(nbr_hor_points))
398 send_frac_mask_dble(j,i)%p = 0d0
399 end do
400 end do
401 end if
402 end if
403 end subroutine send_field_to_dble_ptr
404
405 ! -----------------------------------------------------------------------
406
407 subroutine recv_field_to_dble(field_id, &
408 nbr_hor_points, &
409 collection_size, &
410 recv_field, &
411 recv_field_dble)
412
413 use yac
414 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
415
416 implicit none
417
418 interface
419
420 function yac_get_field_get_mask_c2f_c ( field_id ) &
421 bind( c, name='yac_get_field_get_mask_c2f' )
422
423 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
424
425 integer ( kind=c_int ), value :: field_id
426 type(c_ptr) :: yac_get_field_get_mask_c2f_c
427
428 end function yac_get_field_get_mask_c2f_c
429
430 end interface
431
432 integer, intent (in) :: field_id
433 integer, intent (in) :: nbr_hor_points
434 integer, intent (in) :: collection_size
435 real, intent (in) :: recv_field(nbr_hor_points, &
436 collection_size)
437 double precision, intent (out) :: recv_field_dble(nbr_hor_points, &
438 collection_size)
439
440 integer :: i, j
441 type(c_ptr) :: get_mask_
442 integer(kind=c_int), pointer :: get_mask(:)
443
445
446 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
447 if (c_associated(get_mask_)) then
448 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
449 do i = 1, collection_size
450 do j = 1, nbr_hor_points
451 if (get_mask(j) /= 0) then
452 recv_field_dble(j, i) = dble(recv_field(j, i))
453 else
454 recv_field_dble(j, i) = 0d0
455 end if
456 end do
457 end do
458 else
459 recv_field_dble = dble(recv_field)
460 end if
461 else
462 recv_field_dble = 0d0
463 end if
464 end subroutine recv_field_to_dble
465
466 subroutine recv_field_to_dble_ptr(field_id, &
467 collection_size, &
468 recv_field, &
469 recv_field_dble)
470
471 use yac
472 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
473
474 implicit none
475
476 interface
477
478 function yac_get_field_get_mask_c2f_c ( field_id ) &
479 bind( c, name='yac_get_field_get_mask_c2f' )
480
481 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
482
483 integer ( kind=c_int ), value :: field_id
484 type(c_ptr) :: yac_get_field_get_mask_c2f_c
485
486 end function yac_get_field_get_mask_c2f_c
487
488 end interface
489
490 integer, intent (in) :: field_id
491 integer, intent (in) :: collection_size
492 type(yac_real_ptr), intent (in) :: recv_field(collection_size)
493 type(yac_dble_ptr), intent (out) :: recv_field_dble(collection_size)
494
495 integer :: i, j, nbr_hor_points
496 type(c_ptr) :: get_mask_
497 integer(kind=c_int), pointer :: get_mask(:)
498
500
501 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
502 if (c_associated(get_mask_) .and. (collection_size > 0)) then
503 nbr_hor_points = size(recv_field(1)%p)
504 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
505 do i = 1, collection_size
506 nbr_hor_points = size(recv_field(i)%p)
507 allocate(recv_field_dble(i)%p(nbr_hor_points))
508 do j = 1, nbr_hor_points
509 if (get_mask(j) /= 0) then
510 recv_field_dble(i)%p(j) = dble(recv_field(i)%p(j))
511 else
512 recv_field_dble(i)%p(j) = 0d0
513 end if
514 end do
515 end do
516 else
517 do i = 1, collection_size
518 nbr_hor_points = size(recv_field(i)%p)
519 allocate(recv_field_dble(i)%p(nbr_hor_points))
520 recv_field_dble(i)%p = dble(recv_field(i)%p)
521 end do
522 end if
523 else
524 do i = 1, collection_size
525 nbr_hor_points = size(recv_field(i)%p)
526 allocate(recv_field_dble(i)%p(nbr_hor_points))
527 recv_field_dble(i)%p = 0d0
528 end do
529 end if
530 end subroutine recv_field_to_dble_ptr
531
532 ! -----------------------------------------------------------------------
533
534 subroutine recv_field_from_dble(field_id, &
535 nbr_hor_points, &
536 collection_size, &
537 recv_field_dble, &
538 recv_field)
539
540 use yac
541 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
542
543 implicit none
544
545 interface
546
547 function yac_get_field_get_mask_c2f_c ( field_id ) &
548 bind( c, name='yac_get_field_get_mask_c2f' )
549
550 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
551
552 integer ( kind=c_int ), value :: field_id
553 type(c_ptr) :: yac_get_field_get_mask_c2f_c
554
555 end function yac_get_field_get_mask_c2f_c
556
557 end interface
558
559 integer, intent (in) :: field_id
560 integer, intent (in) :: nbr_hor_points
561 integer, intent (in) :: collection_size
562 double precision, intent (in) :: recv_field_dble(nbr_hor_points, &
563 collection_size)
564 real, intent (inout) :: recv_field(nbr_hor_points, &
565 collection_size)
566
567 integer :: i, j
568 type(c_ptr) :: get_mask_
569 integer(kind=c_int), pointer :: get_mask(:)
570
572
573 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
574 if (c_associated(get_mask_)) then
575 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
576 do i = 1, collection_size
577 do j = 1, nbr_hor_points
578 if (get_mask(j) /= 0) then
579 recv_field(j, i) = real(recv_field_dble(j, i))
580 end if
581 end do
582 end do
583 else
584 recv_field = real(recv_field_dble)
585 end if
586 end if
587 end subroutine recv_field_from_dble
588
589 subroutine recv_field_from_dble_ptr(field_id, &
590 collection_size, &
591 recv_field_dble, &
592 recv_field)
593
594 use yac
595 use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
596
597 implicit none
598
599 interface
600
601 function yac_get_field_get_mask_c2f_c ( field_id ) &
602 bind( c, name='yac_get_field_get_mask_c2f' )
603
604 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
605
606 integer ( kind=c_int ), value :: field_id
607 type(c_ptr) :: yac_get_field_get_mask_c2f_c
608
609 end function yac_get_field_get_mask_c2f_c
610
611 end interface
612
613 integer, intent (in) :: field_id
614 integer, intent (in) :: collection_size
615 type(yac_dble_ptr), intent (inout) :: recv_field_dble(collection_size)
616 type(yac_real_ptr), intent (inout) :: recv_field(collection_size)
617
618 integer :: i, j, nbr_hor_points
619 type(c_ptr) :: get_mask_
620 integer(kind=c_int), pointer :: get_mask(:)
621
623
624 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
625 if (c_associated(get_mask_) .and. (collection_size > 0)) then
626 nbr_hor_points = size(recv_field(1)%p)
627 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
628 do i = 1, collection_size
629 nbr_hor_points = size(recv_field(i)%p)
630 do j = 1, nbr_hor_points
631 if (get_mask(j) /= 0) then
632 recv_field(i)%p(j) = real(recv_field_dble(i)%p(j))
633 end if
634 end do
635 deallocate(recv_field_dble(i)%p)
636 end do
637 else
638 do i = 1, collection_size
639 recv_field(i)%p = real(recv_field_dble(i)%p)
640 deallocate(recv_field_dble(i)%p)
641 end do
642 end if
643 end if
644 end subroutine recv_field_from_dble_ptr
645
647
648! -------------------------- init -------------------------------------
649
650subroutine yac_fmpi_handshake ( comm, group_names, group_comms )
651 use, intrinsic :: iso_c_binding, only : c_ptr, c_null_char, c_loc
652 use yac, dummy => yac_fmpi_handshake
653
654 use, intrinsic :: iso_c_binding, only : c_char
655
656 implicit none
657
658 interface
659 subroutine yac_cmpi_handshake_c (comm, n, group_names, group_comms) &
660 bind( c, name='yac_cmpi_handshake_f2c')
661 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
662 use yac, only : yac_mpi_fint_kind
663 integer (kind = YAC_MPI_FINT_KIND ), intent(in), value :: comm
664 integer(c_int), intent(in), value :: n
665 type (c_ptr) , intent(in) :: group_names(n)
666 integer (kind = YAC_MPI_FINT_KIND ), intent(out) :: group_comms(n)
667 end subroutine yac_cmpi_handshake_c
668 end interface
669
670 integer, intent(in) :: comm
671 character(len=YAC_MAX_CHARLEN), intent(in) :: group_names(:)
672 integer, intent(out) :: group_comms(SIZE(group_names))
673
674 CHARACTER (kind=c_char, len=YAC_MAX_CHARLEN+1), TARGET, allocatable :: &
675 group_names_cpy(:)
676 type( c_ptr ), allocatable :: group_name_ptr(:)
677 integer :: i
678 allocate(group_names_cpy(SIZE(group_names)))
679 allocate(group_name_ptr(SIZE(group_names)))
680 DO i=1,SIZE(group_names)
681 group_names_cpy(i) = trim(group_names(i)) // c_null_char
682 group_name_ptr(i) = c_loc(group_names_cpy(i))
683 END DO
684
685 call yac_cmpi_handshake_c( &
686 comm, SIZE(group_names), group_name_ptr, group_comms)
687
688 deallocate(group_names_cpy)
689 deallocate(group_name_ptr)
690
691end subroutine yac_fmpi_handshake
692
694
695 use yac, only : yac_yaml_emitter_default_f, &
697
698 implicit none
699
700 interface
701
702 function yac_cyaml_get_emitter_flag_default () &
703 bind( c, name='yac_cyaml_get_emitter_flag_default_c2f' )
704
705 use, intrinsic :: iso_c_binding, only : c_int
706
707 integer ( kind=c_int) :: yac_cyaml_get_emitter_flag_default
708
709 end function yac_cyaml_get_emitter_flag_default
710
711 function yac_cyaml_get_emitter_flag_json () &
712 bind( c, name='yac_cyaml_get_emitter_flag_json_c2f' )
713
714 use, intrinsic :: iso_c_binding, only : c_int
715
716 integer ( kind=c_int) :: yac_cyaml_get_emitter_flag_json
717
718 end function yac_cyaml_get_emitter_flag_json
719
720 end interface
721
722 yac_yaml_emitter_default_f = yac_cyaml_get_emitter_flag_default()
723 yac_yaml_emitter_json_f = yac_cyaml_get_emitter_flag_json()
724
725end subroutine
726
727subroutine yac_finit_comm ( comm )
728
729 use yac, dummy => yac_finit_comm
730
731 implicit none
732
733 interface
734
735 subroutine yac_cinit_comm_c ( comm ) &
736 bind( c, name='yac_cinit_comm_f2c' )
737
738 use yac, only : yac_mpi_fint_kind
739
740 integer ( kind=YAC_MPI_FINT_KIND ), value :: comm
741
742 end subroutine yac_cinit_comm_c
743
744 subroutine yac_finit_emitter_flags()
745 end subroutine yac_finit_emitter_flags
746
747 end interface
748
749 integer, intent(in) :: comm
750
752 call yac_cinit_comm_c ( comm )
753
754end subroutine yac_finit_comm
755
756subroutine yac_finit_comm_instance( comm, yac_instance_id)
757
758 use yac, dummy => yac_finit_comm_instance
759
760 implicit none
761
762 interface
763
764 subroutine yac_cinit_comm_instance_c ( comm, yac_instance_id) &
765 bind( c, name='yac_cinit_comm_instance_f2c' )
766
767 use, intrinsic :: iso_c_binding, only : c_int
768 use yac, only : yac_mpi_fint_kind
769
770 integer ( kind=YAC_MPI_FINT_KIND ), value :: comm
771 integer (kind=c_int) :: yac_instance_id
772
773 end subroutine yac_cinit_comm_instance_c
774
775 subroutine yac_finit_emitter_flags()
776 end subroutine yac_finit_emitter_flags
777
778 end interface
779
780 integer, intent(in) :: comm
781 integer, intent(out) :: yac_instance_id
782
784 call yac_cinit_comm_instance_c ( comm, yac_instance_id )
785
786end subroutine yac_finit_comm_instance
787
788subroutine yac_finit ( )
789
790 use yac, dummy => yac_finit
791
792 implicit none
793
794 interface
795
796 subroutine yac_cinit_c ( ) &
797 bind( c, name='yac_cinit' )
798
799 end subroutine yac_cinit_c
800
801 subroutine yac_finit_emitter_flags()
802 end subroutine yac_finit_emitter_flags
803
804 end interface
805
807 call yac_cinit_c ( )
808
809end subroutine yac_finit
810
811subroutine yac_finit_instance ( yac_instance_id )
812
813 use yac, dummy => yac_finit_instance
814
815 implicit none
816
817 interface
818
819 subroutine yac_cinit_instance_c ( yac_instance_id ) &
820 bind( c, name='yac_cinit_instance' )
821
822 use, intrinsic :: iso_c_binding, only : c_int
823
824 integer (kind=c_int) :: yac_instance_id
825
826 end subroutine yac_cinit_instance_c
827
828 subroutine yac_finit_emitter_flags()
829 end subroutine yac_finit_emitter_flags
830
831 end interface
832
833 integer, intent(out) :: yac_instance_id
834
836 call yac_cinit_instance_c ( yac_instance_id )
837
838end subroutine yac_finit_instance
839
840subroutine yac_finit_comm_dummy ( world_comm )
841
842 use yac, dummy => yac_finit_comm_dummy
843
844 implicit none
845
846 interface
847
848 subroutine yac_cinit_comm_dummy_c ( world_comm ) &
849 bind( c, name='yac_cinit_comm_dummy_f2c' )
850
851 use yac, only : yac_mpi_fint_kind
852
853 integer ( kind=YAC_MPI_FINT_KIND ), value :: world_comm
854
855 end subroutine yac_cinit_comm_dummy_c
856
857 subroutine yac_finit_emitter_flags()
858 end subroutine yac_finit_emitter_flags
859
860 end interface
861
862 integer, intent(in) :: world_comm
863
865 call yac_cinit_comm_dummy_c ( world_comm )
866
867end subroutine yac_finit_comm_dummy
868
869subroutine yac_finit_dummy ( )
870
871 use yac, dummy => yac_finit_dummy
872
873 implicit none
874
875 interface
876
877 subroutine yac_cinit_dummy_c ( ) &
878 bind( c, name='yac_cinit_dummy' )
879
880 end subroutine yac_cinit_dummy_c
881
882 subroutine yac_finit_emitter_flags()
883 end subroutine yac_finit_emitter_flags
884
885 end interface
886
888 call yac_cinit_dummy_c ( )
889
890end subroutine yac_finit_dummy
891
892! ----------------------- getting default instance id ------------------------
893
895
897
898 implicit none
899
900 interface
901
902 function yac_cget_default_instance_id_c ( ) &
903 bind( c, name='yac_cget_default_instance_id' )
904 use, intrinsic :: iso_c_binding, only : c_int
905
906 integer(kind=c_int) :: yac_cget_default_instance_id_c
907
908 end function yac_cget_default_instance_id_c
909
910 end interface
911
913
914 yac_fget_default_instance_id = yac_cget_default_instance_id_c( )
915
917
918! ----------------------- check if default instance is defined ----------------
919
921
923 use, intrinsic :: iso_c_binding, only : c_int
924
925 implicit none
926
927 interface
928
929 function yac_cdefault_instance_defined_c ( ) &
930 bind( c, name='yac_cdefault_instance_defined' )
931 use, intrinsic :: iso_c_binding, only : c_int
932
933 integer(kind=c_int) :: yac_cdefault_instance_defined_c
934
935 end function yac_cdefault_instance_defined_c
936
937 end interface
938
940
942 yac_cdefault_instance_defined_c( ) /= 0_c_int
943
945
946! -------------------------- reading config file ---------------------------
947
948subroutine yac_fread_config_yaml (yaml_filename)
949 use yac, dummy => yac_fread_config_yaml
950 use, intrinsic :: iso_c_binding, only : c_null_char
952
953 implicit none
954
955 interface
956 subroutine yac_cread_config_yaml_c(yaml_filename) &
957 bind( c, name='yac_cread_config_yaml' )
958 use, intrinsic :: iso_c_binding, only : c_char
959 character (kind=c_char), dimension(*) :: yaml_filename
960 end subroutine yac_cread_config_yaml_c
961 end interface
962
963 character(len=*), intent(in) :: yaml_filename
964
965 call yac_cread_config_yaml_c(trim(yaml_filename) // c_null_char)
966
967end subroutine yac_fread_config_yaml
968
969subroutine yac_fread_config_yaml_instance(yac_instance_id, yaml_filename)
971 use, intrinsic :: iso_c_binding, only : c_null_char
973
974 implicit none
975
976 interface
977 subroutine yac_cread_config_yaml_instance_c( &
978 yac_instance_id, yaml_filename) &
979 bind( c, name='yac_cread_config_yaml_instance' )
980 use, intrinsic :: iso_c_binding, only : c_char, c_int
981 integer (kind=c_int), value :: yac_instance_id
982 character (kind=c_char), dimension(*) :: yaml_filename
983 end subroutine yac_cread_config_yaml_instance_c
984 end interface
985
986 integer, intent(in) :: yac_instance_id
987 character(len=*), intent(in) :: yaml_filename
988
989 call yac_cread_config_yaml_instance_c(yac_instance_id, &
990 & trim(yaml_filename) // c_null_char)
991
993
994subroutine yac_fread_config_json (json_filename)
995 use yac, dummy => yac_fread_config_json
996 use, intrinsic :: iso_c_binding, only : c_null_char
998
999 implicit none
1000
1001 interface
1002 subroutine yac_cread_config_json_c(json_filename) &
1003 bind( c, name='yac_cread_config_json' )
1004 use, intrinsic :: iso_c_binding, only : c_char
1005 character (kind=c_char), dimension(*) :: json_filename
1006 end subroutine yac_cread_config_json_c
1007 end interface
1008
1009 character(len=*), intent(in) :: json_filename
1010
1011 call yac_cread_config_json_c(trim(json_filename) // c_null_char)
1012
1013end subroutine yac_fread_config_json
1014
1015subroutine yac_fread_config_json_instance(yac_instance_id, json_filename)
1017 use, intrinsic :: iso_c_binding, only : c_null_char
1019
1020 implicit none
1021
1022 interface
1023 subroutine yac_cread_config_json_instance_c( &
1024 yac_instance_id, json_filename) &
1025 bind( c, name='yac_cread_config_json_instance' )
1026 use, intrinsic :: iso_c_binding, only : c_char, c_int
1027 integer (kind=c_int), value :: yac_instance_id
1028 character (kind=c_char), dimension(*) :: json_filename
1029 end subroutine yac_cread_config_json_instance_c
1030 end interface
1031
1032 integer, intent(in) :: yac_instance_id
1033 character(len=*), intent(in) :: json_filename
1034
1035 call yac_cread_config_json_instance_c(yac_instance_id, &
1036 & trim(json_filename) // c_null_char)
1037
1038end subroutine yac_fread_config_json_instance
1039
1040! -------------------------- writing config file ---------------------------
1041
1043 filename, fileformat, sync_location, include_definitions)
1044 use yac, dummy => yac_fset_config_output_file
1045 use, intrinsic :: iso_c_binding, only : c_null_char, c_int
1047
1048 implicit none
1049
1050 interface
1051 subroutine yac_cset_config_output_file_c(&
1052 filename, fileformat, sync_location, include_definitions) &
1053 bind( c, name='yac_cset_config_output_file' )
1054 use, intrinsic :: iso_c_binding, only : c_char, c_int
1055 character (kind=c_char), dimension(*) :: filename
1056 integer (kind=c_int), value :: fileformat
1057 integer (kind=c_int), value :: sync_location
1058 integer (kind=c_int), value :: include_definitions
1059 end subroutine yac_cset_config_output_file_c
1060 end interface
1061
1062 character(len=*), intent(in) :: filename
1063 integer, intent(in) :: fileformat
1064 integer, intent(in) :: sync_location
1065 logical, intent(in), optional :: include_definitions
1066
1067 integer(kind=c_int) :: c_include_definitions
1068
1069 if (present(include_definitions)) then
1070 c_include_definitions = merge(1_c_int, 0_c_int, include_definitions)
1071 else
1072 c_include_definitions = 0_c_int
1073 end if
1074
1075 call yac_cset_config_output_file_c( &
1076 trim(filename) // c_null_char, fileformat, sync_location, &
1077 c_include_definitions)
1078
1079end subroutine yac_fset_config_output_file
1080
1082 yac_instance_id, filename, fileformat, sync_location, include_definitions)
1084 use, intrinsic :: iso_c_binding, only : c_null_char
1086
1087 implicit none
1088
1089 interface
1090 subroutine yac_cset_config_output_file_instance_c(&
1091 yac_instance_id, filename, fileformat, sync_location, &
1092 include_definitions) &
1093 bind( c, name='yac_cset_config_output_file_instance' )
1094 use, intrinsic :: iso_c_binding, only : c_char, c_int
1095 integer (kind=c_int), value :: yac_instance_id
1096 character (kind=c_char), dimension(*) :: filename
1097 integer (kind=c_int), value :: fileformat
1098 integer (kind=c_int), value :: sync_location
1099 integer (kind=c_int), value :: include_definitions
1100 end subroutine yac_cset_config_output_file_instance_c
1101 end interface
1102
1103 integer, intent(in) :: yac_instance_id
1104 character(len=*), intent(in) :: filename
1105 integer, intent(in) :: fileformat
1106 integer, intent(in) :: sync_location
1107 logical, intent(in), optional :: include_definitions
1108
1109 integer(kind=c_int) :: c_include_definitions
1110
1111 if (present(include_definitions)) then
1112 c_include_definitions = merge(1_c_int, 0_c_int, include_definitions)
1113 else
1114 c_include_definitions = 0_c_int
1115 end if
1116
1117 call yac_cset_config_output_file_instance_c( &
1118 yac_instance_id, trim(filename) // c_null_char, fileformat, sync_location, &
1119 c_include_definitions)
1120
1122
1123! -------------------------- writing grid file ---------------------------
1124
1126 gridname, filename)
1127 use yac, dummy => yac_fset_grid_output_file
1128 use, intrinsic :: iso_c_binding, only : c_null_char
1130
1131 implicit none
1132
1133 interface
1134 subroutine yac_cset_grid_output_file_c(&
1135 gridname, filename) &
1136 bind( c, name='yac_cset_grid_output_file' )
1137 use, intrinsic :: iso_c_binding, only : c_char
1138 character (kind=c_char), dimension(*) :: gridname
1139 character (kind=c_char), dimension(*) :: filename
1140 end subroutine yac_cset_grid_output_file_c
1141 end interface
1142
1143 character(len=*), intent(in) :: gridname
1144 character(len=*), intent(in) :: filename
1145
1146 call yac_cset_grid_output_file_c( &
1147 trim(gridname) // c_null_char, trim(filename) // c_null_char)
1148
1149end subroutine yac_fset_grid_output_file
1150
1152 yac_instance_id, gridname, filename)
1154 use, intrinsic :: iso_c_binding, only : c_null_char
1156
1157 implicit none
1158
1159 interface
1160 subroutine yac_cset_grid_output_file_instance_c(&
1161 yac_instance_id, gridname, filename) &
1162 bind( c, name='yac_cset_grid_output_file_instance' )
1163 use, intrinsic :: iso_c_binding, only : c_char, c_int
1164 integer (kind=c_int), value :: yac_instance_id
1165 character (kind=c_char), dimension(*) :: gridname
1166 character (kind=c_char), dimension(*) :: filename
1167 end subroutine yac_cset_grid_output_file_instance_c
1168 end interface
1169
1170 integer, intent(in) :: yac_instance_id
1171 character(len=*), intent(in) :: gridname
1172 character(len=*), intent(in) :: filename
1173
1174 call yac_cset_grid_output_file_instance_c( &
1175 yac_instance_id, trim(gridname) // c_null_char, &
1176 trim(filename) // c_null_char)
1177
1179
1181 filename)
1182 use yac, dummy => yac_fset_grids_output_file
1183 use, intrinsic :: iso_c_binding, only : c_null_char
1185
1186 implicit none
1187
1188 interface
1189 subroutine yac_cset_grids_output_file_c(&
1190 filename) &
1191 bind( c, name='yac_cset_grids_output_file' )
1192 use, intrinsic :: iso_c_binding, only : c_char
1193 character (kind=c_char), dimension(*) :: filename
1194 end subroutine yac_cset_grids_output_file_c
1195 end interface
1196
1197 character(len=*), intent(in) :: filename
1198
1199 call yac_cset_grids_output_file_c(trim(filename) // c_null_char)
1200
1201end subroutine yac_fset_grids_output_file
1202
1204 yac_instance_id, filename)
1206 use, intrinsic :: iso_c_binding, only : c_null_char
1208
1209 implicit none
1210
1211 interface
1212 subroutine yac_cset_grids_output_file_instance_c(&
1213 yac_instance_id, filename) &
1214 bind( c, name='yac_cset_grids_output_file_instance' )
1215 use, intrinsic :: iso_c_binding, only : c_char, c_int
1216 integer (kind=c_int), value :: yac_instance_id
1217 character (kind=c_char), dimension(*) :: filename
1218 end subroutine yac_cset_grids_output_file_instance_c
1219 end interface
1220
1221 integer, intent(in) :: yac_instance_id
1222 character(len=*), intent(in) :: filename
1223
1224 call yac_cset_grids_output_file_instance_c( &
1225 yac_instance_id, trim(filename) // c_null_char)
1226
1228
1229! -------------------------- set coordinate checks ---------------------------
1230
1231subroutine yac_fset_coordinates_check ( apply_check )
1232 use yac, dummy => yac_fset_coordinates_check
1233 use, intrinsic :: iso_c_binding, only : c_int
1235
1236 implicit none
1237
1238 interface
1239 subroutine yac_cset_coordinates_check_c( apply_check ) &
1240 bind( c, name='yac_cset_coordinates_check' )
1241 use, intrinsic :: iso_c_binding, only : c_int
1242 integer (kind=c_int), value :: apply_check
1243 end subroutine yac_cset_coordinates_check_c
1244 end interface
1245
1247 logical, intent(in) :: apply_check
1248
1249 call yac_cset_coordinates_check_c( merge(1_c_int, 0_c_int, apply_check) )
1250
1251end subroutine yac_fset_coordinates_check
1252
1253subroutine yac_fset_coordinates_check_instance ( yac_instance_id, apply_check )
1255 use, intrinsic :: iso_c_binding, only : c_int
1257
1258 implicit none
1259
1260 interface
1261 subroutine yac_cset_coordinates_check_instance_c( &
1262 yac_instance_id, apply_check ) &
1263 bind( c, name='yac_cset_coordinates_check_instance' )
1264 use, intrinsic :: iso_c_binding, only : c_int
1265 integer (kind=c_int), value :: yac_instance_id
1266 integer (kind=c_int), value :: apply_check
1267 end subroutine yac_cset_coordinates_check_instance_c
1268 end interface
1269
1271 integer, intent(in) :: yac_instance_id
1273 logical, intent(in) :: apply_check
1274
1275 call yac_cset_coordinates_check_instance_c( &
1276 yac_instance_id, merge(1_c_int, 0_c_int, apply_check) )
1277
1279
1280! -------------------- set coordinate mismatch fatality ---------------------
1281
1284 use, intrinsic :: iso_c_binding, only : c_int
1286
1287 implicit none
1288
1289 interface
1290 subroutine yac_cset_coordinates_mismatch_is_fatal_c( is_fatal ) &
1291 bind( c, name='yac_cset_coordinates_mismatch_is_fatal' )
1292 use, intrinsic :: iso_c_binding, only : c_int
1293 integer (kind=c_int), value :: is_fatal
1294 end subroutine yac_cset_coordinates_mismatch_is_fatal_c
1295 end interface
1296
1298 logical, intent(in) :: is_fatal
1299
1300 call yac_cset_coordinates_mismatch_is_fatal_c( &
1301 merge(1_c_int, 0_c_int, is_fatal) )
1302
1304
1306 yac_instance_id, is_fatal )
1308 use, intrinsic :: iso_c_binding, only : c_int
1310
1311 implicit none
1312
1313 interface
1314 subroutine yac_cset_coordinates_mismatch_is_fatal_instance_c( &
1315 yac_instance_id, is_fatal ) &
1316 bind( c, name='yac_cset_coordinates_mismatch_is_fatal_instance' )
1317 use, intrinsic :: iso_c_binding, only : c_int
1318 integer (kind=c_int), value :: yac_instance_id
1319 integer (kind=c_int), value :: is_fatal
1320 end subroutine yac_cset_coordinates_mismatch_is_fatal_instance_c
1321 end interface
1322
1324 integer, intent(in) :: yac_instance_id
1326 logical, intent(in) :: is_fatal
1327
1328 call yac_cset_coordinates_mismatch_is_fatal_instance_c( &
1329 yac_instance_id, merge(1_c_int, 0_c_int, is_fatal) )
1330
1332
1333! -------------------------- cleanup -----------------------------------
1334
1335subroutine yac_fcleanup ( )
1336
1337 use yac, dummy => yac_fcleanup
1338
1339 implicit none
1340
1341 interface
1342
1343 subroutine yac_ccleanup_c () bind ( c, name='yac_ccleanup' )
1344 end subroutine yac_ccleanup_c
1345
1346 end interface
1347
1348 call yac_ccleanup_c ( )
1349
1350end subroutine yac_fcleanup
1351
1352subroutine yac_fcleanup_instance ( yac_instance_id )
1353
1354 use yac, dummy => yac_fcleanup_instance
1355
1356 implicit none
1357
1358 interface
1359
1360 subroutine yac_ccleanup_instance_c ( yac_instance_id ) &
1361 bind( c, name='yac_ccleanup_instance' )
1362
1363 use, intrinsic :: iso_c_binding, only : c_int
1364
1365 integer (kind=c_int), value :: yac_instance_id
1366
1367 end subroutine yac_ccleanup_instance_c
1368
1369 end interface
1370
1371 integer, intent(in) :: yac_instance_id
1372
1373 call yac_ccleanup_instance_c ( yac_instance_id )
1374
1375end subroutine yac_fcleanup_instance
1376
1377! -------------------------- final -------------------------------------
1378
1379subroutine yac_ffinalize ( )
1380
1381 use yac, dummy => yac_ffinalize
1382
1383 implicit none
1384
1385 interface
1386 subroutine yac_cfinalize_c () bind ( c, name='yac_cfinalize' )
1387 end subroutine yac_cfinalize_c
1388 end interface
1389
1390 call yac_cfinalize_c ( )
1391
1392end subroutine yac_ffinalize
1393
1394subroutine yac_ffinalize_instance ( yac_instance_id )
1395
1396 use yac, dummy => yac_ffinalize_instance
1397
1398 implicit none
1399
1400 interface
1401 subroutine yac_cfinalize_instance_c ( yac_instance_id ) &
1402 bind( c, name='yac_cfinalize_instance' )
1403
1404 use, intrinsic :: iso_c_binding, only : c_int
1405
1406 integer (kind=c_int), value :: yac_instance_id
1407
1408 end subroutine yac_cfinalize_instance_c
1409 end interface
1410
1411 integer, intent(in) :: yac_instance_id
1412
1413 call yac_cfinalize_instance_c ( yac_instance_id )
1414
1415end subroutine yac_ffinalize_instance
1416
1417! -------------------------- version ----------------------------------
1418
1419function yac_fget_version () result (version_string)
1420
1421 use, intrinsic :: iso_c_binding, only : c_ptr
1422 use yac, dummy => yac_fget_version
1424
1425 implicit none
1426
1427 interface
1428 function yac_cget_version_c () bind ( c, name='yac_cget_version' )
1429
1430 use, intrinsic :: iso_c_binding, only : c_ptr
1431 type(c_ptr) :: yac_cget_version_c
1432
1433 end function yac_cget_version_c
1434 end interface
1435
1436 type (c_ptr) :: c_string_ptr
1437 character (len=:), allocatable :: version_string
1438
1439 c_string_ptr = yac_cget_version_c()
1440 version_string = yac_internal_cptr2char(c_string_ptr)
1441
1442end function yac_fget_version
1443
1444! -------------------------- mpi_handshake group name -----------------
1445
1446function yac_fget_mpi_handshake_group_name () result (mpi_handshake_group_name)
1447
1448 use, intrinsic :: iso_c_binding, only : c_ptr
1451
1452 implicit none
1453
1454 interface
1455 function yac_cget_mpi_handshake_group_name_c () &
1456 bind( c, name='yac_cget_mpi_handshake_group_name' )
1457
1458 use, intrinsic :: iso_c_binding, only : c_ptr
1459 type(c_ptr) :: yac_cget_mpi_handshake_group_name_c
1460
1461 end function yac_cget_mpi_handshake_group_name_c
1462 end interface
1463
1464 type (c_ptr) :: c_string_ptr
1465 character (len=:), allocatable :: mpi_handshake_group_name
1466
1467 c_string_ptr = yac_cget_mpi_handshake_group_name_c()
1468 mpi_handshake_group_name = yac_internal_cptr2char(c_string_ptr)
1469
1471
1472! -------------------------- dates ------------------------------------
1473
1474subroutine yac_fdef_datetime ( start_datetime, end_datetime )
1475
1476 use, intrinsic :: iso_c_binding, only : c_char, c_null_char
1477 use yac, dummy => yac_fdef_datetime
1479
1480 implicit none
1481
1482 interface
1483
1484 subroutine yac_cdef_datetime_c ( start_datetime, end_datetime ) &
1485 & bind( c, name='yac_cdef_datetime' )
1486
1487 use, intrinsic :: iso_c_binding, only : c_char
1488
1489 character ( kind=c_char), dimension(*) :: start_datetime
1490 character ( kind=c_char), dimension(*) :: end_datetime
1491
1492 end subroutine yac_cdef_datetime_c
1493
1494 end interface
1495
1496 character(len=*), intent(in), optional :: start_datetime
1497 character(len=*), intent(in), optional :: end_datetime
1498
1499 character(kind=c_char, len=YAC_MAX_CHARLEN+1) :: start_datetime_c
1500 character(kind=c_char, len=YAC_MAX_CHARLEN+1) :: end_datetime_c
1501
1502 if (present(start_datetime)) then
1503 yac_check_string_len( "yac_fdef_datetime", start_datetime )
1504 start_datetime_c = trim(start_datetime) // c_null_char
1505 else
1506 start_datetime_c = c_null_char
1507 end if
1508
1509 if (present(end_datetime)) then
1510 yac_check_string_len( "yac_fdef_datetime", end_datetime )
1511 end_datetime_c = trim(end_datetime) // c_null_char
1512 else
1513 end_datetime_c = c_null_char
1514 end if
1515
1516 call yac_cdef_datetime_c ( start_datetime_c, end_datetime_c )
1517
1518end subroutine yac_fdef_datetime
1519
1521 yac_instance_id, start_datetime, end_datetime )
1522
1523 use, intrinsic :: iso_c_binding, only : c_char, c_null_char
1524 use yac, dummy => yac_fdef_datetime_instance
1526
1527 implicit none
1528
1529 interface
1530
1531 subroutine yac_cdef_datetime_instance_c ( yac_instance_id, &
1532 start_datetime, &
1533 end_datetime ) &
1534 bind( c, name='yac_cdef_datetime_instance' )
1535
1536 use, intrinsic :: iso_c_binding, only : c_char, c_int
1537
1538 integer (kind=c_int), value :: yac_instance_id
1539 character ( kind=c_char), dimension(*) :: start_datetime
1540 character ( kind=c_char), dimension(*) :: end_datetime
1541
1542 end subroutine yac_cdef_datetime_instance_c
1543
1544 end interface
1545
1546 integer, intent(in) :: yac_instance_id
1547 character(len=*), intent(in), optional :: start_datetime
1548 character(len=*), intent(in), optional :: end_datetime
1549
1550 character(kind=c_char, len=YAC_MAX_CHARLEN+1) :: start_datetime_c
1551 character(kind=c_char, len=YAC_MAX_CHARLEN+1) :: end_datetime_c
1552
1553 if (present(start_datetime)) then
1554 yac_check_string_len( "yac_fdef_datetime_instance", start_datetime )
1555 start_datetime_c = trim(start_datetime) // c_null_char
1556 else
1557 start_datetime_c = c_null_char
1558 end if
1559
1560 if (present(end_datetime)) then
1561 yac_check_string_len( "yac_fdef_datetime_instance", end_datetime )
1562 end_datetime_c = trim(end_datetime) // c_null_char
1563 else
1564 end_datetime_c = c_null_char
1565 end if
1566
1567 call yac_cdef_datetime_instance_c ( yac_instance_id, &
1568 start_datetime_c, &
1569 end_datetime_c )
1570
1571end subroutine yac_fdef_datetime_instance
1572
1573subroutine yac_fdef_calendar ( calendar )
1574
1575 use yac, dummy => yac_fdef_calendar
1576
1577 implicit none
1578
1579 interface
1580
1581 subroutine yac_cdef_calendar_c ( calendar ) &
1582 bind( c, name='yac_cdef_calendar' )
1583 use, intrinsic :: iso_c_binding, only : c_int
1584
1585 integer ( kind=c_int ), value :: calendar
1586
1587 end subroutine yac_cdef_calendar_c
1588
1589 end interface
1590
1591 integer, intent(in) :: calendar
1592
1593 call yac_cdef_calendar_c ( calendar )
1594
1595end subroutine yac_fdef_calendar
1596
1597subroutine yac_fget_calendar ( calendar )
1598
1599 use yac, dummy => yac_fget_calendar
1600
1601 implicit none
1602
1603 interface
1604
1605 function yac_cget_calendar_c ( ) &
1606 bind( c, name='yac_cget_calendar' )
1607 use, intrinsic :: iso_c_binding, only : c_int
1608
1609 integer ( kind=c_int ) :: yac_cget_calendar_c
1610
1611 end function yac_cget_calendar_c
1612
1613 end interface
1614
1615 integer, intent(out) :: calendar
1616
1617 calendar = yac_cget_calendar_c()
1618
1619end subroutine yac_fget_calendar
1620
1621! ------------------------ predef_comp ------------------------------------
1622
1623SUBROUTINE yac_fpredef_comp ( comp_name, comp_id )
1624
1625 use, intrinsic :: iso_c_binding, only : c_null_char
1626 use yac, dummy => yac_fpredef_comp
1628
1629 implicit none
1630
1631 INTERFACE
1632
1633 SUBROUTINE yac_cpredef_comp_c ( comp_name, comp_id ) &
1634 bind( c, name='yac_cpredef_comp' )
1635
1636 use, intrinsic :: iso_c_binding, only : c_int, c_char
1637
1638 character ( kind=c_char), dimension(*) :: comp_name
1639 integer ( kind=c_int ) :: comp_id
1640
1641 END SUBROUTINE yac_cpredef_comp_c
1642
1643 END INTERFACE
1644
1645 character(len=*), intent(in) :: comp_name
1646 integer, intent(out) :: comp_id
1647
1648 yac_check_string_len( "yac_fpredef_comp", comp_name )
1649
1650 call yac_cpredef_comp_c ( trim(comp_name) // c_null_char, comp_id )
1651
1652END SUBROUTINE yac_fpredef_comp
1653
1654SUBROUTINE yac_fpredef_comp_instance ( yac_instance_id, comp_name, comp_id )
1655
1656 use, intrinsic :: iso_c_binding, only : c_null_char
1657 use yac, dummy => yac_fpredef_comp_instance
1659
1660 implicit none
1661
1662 INTERFACE
1663
1664 SUBROUTINE yac_cpredef_comp_instance_c ( yac_instance_id, &
1665 comp_name, &
1666 comp_id ) &
1667 bind( c, name='yac_cpredef_comp_instance' )
1668
1669 use, intrinsic :: iso_c_binding, only : c_int, c_char
1670
1671 integer (kind=c_int), value :: yac_instance_id
1672 character ( kind=c_char), dimension(*) :: comp_name
1673 integer ( kind=c_int ) :: comp_id
1674
1675 END SUBROUTINE yac_cpredef_comp_instance_c
1676
1677 END INTERFACE
1678
1679 integer, intent(in) :: yac_instance_id
1680 character(len=*), intent(in) :: comp_name
1681 integer, intent(out) :: comp_id
1682
1683 yac_check_string_len( "yac_fpredef_comp_instance", comp_name )
1684
1685 call yac_cpredef_comp_instance_c( yac_instance_id, &
1686 trim(comp_name) // c_null_char, &
1687 comp_id )
1688
1689END SUBROUTINE yac_fpredef_comp_instance
1690
1691! ------------------------ def_comp ------------------------------------
1692
1693subroutine yac_fdef_comp ( comp_name, comp_id )
1694
1695 use, intrinsic :: iso_c_binding, only : c_null_char
1696 use yac, dummy => yac_fdef_comp
1698
1699 implicit none
1700
1701 interface
1702
1703 subroutine yac_cdef_comp_c ( comp_name, comp_id ) &
1704 bind( c, name='yac_cdef_comp' )
1705
1706 use, intrinsic :: iso_c_binding, only : c_int, c_char
1707
1708 character ( kind=c_char), dimension(*) :: comp_name
1709 integer ( kind=c_int ) :: comp_id
1710
1711 end subroutine yac_cdef_comp_c
1712
1713 end interface
1714
1715 character(len=*), intent(in) :: comp_name
1716 integer, intent(out) :: comp_id
1717
1718 yac_check_string_len( "yac_fdef_comp", comp_name )
1719
1720 call yac_cdef_comp_c ( trim(comp_name) // c_null_char, comp_id )
1721
1722end subroutine yac_fdef_comp
1723
1724subroutine yac_fdef_comp_instance ( yac_instance_id, comp_name, comp_id )
1725
1726 use, intrinsic :: iso_c_binding, only : c_null_char
1727 use yac, dummy => yac_fdef_comp_instance
1729
1730 implicit none
1731
1732 interface
1733
1734 subroutine yac_cdef_comp_instance_c ( yac_instance_id, &
1735 comp_name, &
1736 comp_id ) &
1737 bind( c, name='yac_cdef_comp_instance' )
1738
1739 use, intrinsic :: iso_c_binding, only : c_int, c_char
1740
1741 integer (kind=c_int), value :: yac_instance_id
1742 character ( kind=c_char), dimension(*) :: comp_name
1743 integer ( kind=c_int ) :: comp_id
1744
1745 end subroutine yac_cdef_comp_instance_c
1746
1747 end interface
1748
1749 integer, intent(in) :: yac_instance_id
1750 character(len=*), intent(in) :: comp_name
1751 integer, intent(out) :: comp_id
1752
1753 yac_check_string_len( "yac_fdef_comp_instance", comp_name )
1754
1755 call yac_cdef_comp_instance_c( yac_instance_id, &
1756 trim(comp_name) // c_null_char, &
1757 comp_id )
1758
1759end subroutine yac_fdef_comp_instance
1760
1761! ------------------------ def_comps ------------------------------------
1762
1763subroutine yac_fdef_comps ( comp_names, num_comps, comp_ids )
1764
1765 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
1766 use yac, dummy => yac_fdef_comps
1768
1769 implicit none
1770
1771 interface
1772
1773 subroutine yac_cdef_comps_c ( comp_names, num_comps, comp_ids ) &
1774 bind( c, name='yac_cdef_comps' )
1775
1776 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1777
1778 type ( c_ptr ), value :: comp_names
1779 integer ( kind=c_int ), value :: num_comps
1780 integer ( kind=c_int ) :: comp_ids(*)
1781
1782 end subroutine yac_cdef_comps_c
1783
1784 end interface
1785
1786 integer, intent(in) :: num_comps
1787 character(kind=c_char, len=*), intent(in) :: &
1788 comp_names(num_comps)
1789 integer, intent(out) :: comp_ids(num_comps)
1790
1791 integer :: i, j
1792 character(kind=c_char), target, allocatable :: comp_names_cpy(:,:)
1793 type(c_ptr), target, allocatable :: comp_name_ptrs(:)
1794
1795 allocate(comp_names_cpy(yac_max_charlen+1, num_comps))
1796 allocate(comp_name_ptrs(num_comps))
1797 comp_names_cpy = c_null_char
1798
1799 do i = 1, num_comps
1800 yac_check_string_len( "yac_fdef_comps", comp_names(i))
1801 do j = 1, len_trim(comp_names(i))
1802 comp_names_cpy(j,i) = comp_names(i)(j:j)
1803 end do
1804 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
1805 end do
1806
1807 call yac_cdef_comps_c ( c_loc(comp_name_ptrs), num_comps, comp_ids )
1808
1809 deallocate(comp_names_cpy)
1810 deallocate(comp_name_ptrs)
1811
1812end subroutine yac_fdef_comps
1813
1814subroutine yac_fdef_comps_instance ( yac_instance_id, &
1815 comp_names, &
1816 num_comps, &
1817 comp_ids )
1818
1819 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
1820 use yac, dummy => yac_fdef_comps_instance
1822
1823 implicit none
1824
1825 interface
1826
1827 subroutine yac_cdef_comps_instance_c ( yac_instance_id, &
1828 comp_names, &
1829 num_comps, &
1830 comp_ids ) &
1831 bind( c, name='yac_cdef_comps_instance' )
1832
1833 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1834
1835 integer (kind=c_int), value :: yac_instance_id
1836 type ( c_ptr ), value :: comp_names
1837 integer ( kind=c_int ), value :: num_comps
1838 integer ( kind=c_int ) :: comp_ids(*)
1839
1840 end subroutine yac_cdef_comps_instance_c
1841
1842 end interface
1843
1844 integer, intent(in) :: yac_instance_id
1845 integer, intent(in) :: num_comps
1846 character(kind=c_char, len=*), intent(in) :: &
1847 comp_names(num_comps)
1848 integer, intent(out) :: comp_ids(num_comps)
1849
1850 integer :: i, j
1851 character(kind=c_char), target, allocatable :: comp_names_cpy(:,:)
1852 type(c_ptr), target, allocatable :: comp_name_ptrs(:)
1853
1854 allocate(comp_names_cpy(yac_max_charlen+1, num_comps))
1855 allocate(comp_name_ptrs(num_comps))
1856 comp_names_cpy = c_null_char
1857
1858 do i = 1, num_comps
1859 yac_check_string_len( "yac_fdef_comps_instance", comp_names(i))
1860 do j = 1, len_trim(comp_names(i))
1861 comp_names_cpy(j,i) = comp_names(i)(j:j)
1862 end do
1863 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
1864 end do
1865
1866 call yac_cdef_comps_instance_c ( yac_instance_id, &
1867 c_loc(comp_name_ptrs), &
1868 num_comps, &
1869 comp_ids )
1870
1871 deallocate(comp_names_cpy)
1872 deallocate(comp_name_ptrs)
1873
1874end subroutine yac_fdef_comps_instance
1875
1876
1877! ------------------------- def_comp_dummy ------------------------------
1878
1880
1881 use, intrinsic :: iso_c_binding, only : c_null_ptr, c_int
1882 use yac, dummy => yac_fdef_comp_dummy
1883
1884 implicit none
1885
1886 interface
1887
1888 subroutine yac_cdef_comps_dummy_c ( comp_names, num_comps, comp_ids ) &
1889 bind( c, name='yac_cdef_comps' )
1890
1891 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1892
1893 type ( c_ptr ), value :: comp_names
1894 integer ( kind=c_int ), value :: num_comps
1895 integer ( kind=c_int ) :: comp_ids(*)
1896
1897 end subroutine yac_cdef_comps_dummy_c
1898
1899 end interface
1900
1901 call yac_cdef_comps_dummy_c ( c_null_ptr, 0_c_int, [ integer( kind=c_int ) :: ] )
1902
1903end subroutine yac_fdef_comp_dummy
1904
1905subroutine yac_fdef_comp_dummy_instance ( yac_instance_id )
1906
1907 use, intrinsic :: iso_c_binding, only : c_null_ptr, c_int
1908 use yac, dummy => yac_fdef_comp_dummy_instance
1910
1911 implicit none
1912
1913 interface
1914 subroutine yac_cdef_comps_dummy_instance_c ( &
1915 yac_instance_id, comp_names, num_comps, comp_ids ) &
1916 bind( c, name='yac_cdef_comps_instance' )
1917
1918 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1919
1920 integer (kind=c_int), value :: yac_instance_id
1921 type ( c_ptr ), value :: comp_names
1922 integer ( kind=c_int ), value :: num_comps
1923 integer ( kind=c_int ) :: comp_ids(*)
1924
1925 end subroutine yac_cdef_comps_dummy_instance_c
1926
1927 end interface
1928
1929 integer, intent(in) :: yac_instance_id
1930
1931 call yac_cdef_comps_dummy_instance_c( yac_instance_id, &
1932 c_null_ptr, &
1933 0_c_int, &
1934 [ integer( kind=c_int ) :: ] )
1935
1936end subroutine yac_fdef_comp_dummy_instance
1937
1938! ------------------------- def_points ----------------------------------
1939
1940subroutine yac_fdef_points_reg2d_real ( grid_id, &
1941 nbr_points, &
1942 location, &
1943 x_points_real, &
1944 y_points_real, &
1945 point_id )
1946
1947 use yac, dummy => yac_fdef_points_reg2d_real
1948
1949 implicit none
1950
1951 integer, intent(in) :: grid_id
1952 integer, intent(in) :: nbr_points(2)
1953 integer, intent(in) :: location
1954 real, intent(in) :: x_points_real(nbr_points(1))
1955 real, intent(in) :: y_points_real(nbr_points(2))
1956 integer, intent(out) :: point_id
1957
1958 double precision, allocatable :: x_points(:)
1959 double precision, allocatable :: y_points(:)
1960
1961 allocate(x_points(nbr_points(1)))
1962 allocate(y_points(nbr_points(2)))
1963 x_points(:) = dble(x_points_real(:))
1964 y_points(:) = dble(y_points_real(:))
1965
1966 call yac_fdef_points_reg2d_dble ( grid_id, &
1967 nbr_points, &
1968 location, &
1969 x_points, &
1970 y_points, &
1971 point_id )
1972
1973 deallocate(x_points)
1974 deallocate(y_points)
1975
1976end subroutine yac_fdef_points_reg2d_real
1977
1978subroutine yac_fdef_points_reg2d_dble ( grid_id, &
1979 nbr_points, &
1980 location, &
1981 x_points, &
1982 y_points, &
1983 point_id )
1984
1985 use yac, dummy => yac_fdef_points_reg2d_dble
1986
1987 implicit none
1988
1989 interface
1990
1991 subroutine yac_cdef_points_reg2d_c ( grid_id, &
1992 nbr_points, &
1993 location, &
1994 x_points, &
1995 y_points, &
1996 point_id ) &
1997 & bind( c, name='yac_cdef_points_reg2d' )
1998
1999 use, intrinsic :: iso_c_binding, only : c_int, c_double
2000
2001 integer ( kind=c_int ), value :: grid_id
2002 integer ( kind=c_int ) :: nbr_points(2)
2003 integer ( kind=c_int ), value :: location
2004
2005 real ( kind=c_double ) :: x_points(nbr_points(1))
2006 real ( kind=c_double ) :: y_points(nbr_points(2))
2007
2008 integer ( kind=c_int ) :: point_id
2009
2010 end subroutine yac_cdef_points_reg2d_c
2011
2012 end interface
2013
2014 integer, intent(in) :: grid_id
2015 integer, intent(in) :: nbr_points(2)
2016 integer, intent(in) :: location
2017
2018 double precision, intent(in) :: x_points(nbr_points(1))
2019 double precision, intent(in) :: y_points(nbr_points(2))
2020
2021 integer, intent(out) :: point_id
2022
2023 call yac_cdef_points_reg2d_c ( grid_id, &
2024 nbr_points, &
2025 location, &
2026 x_points, &
2027 y_points, &
2028 point_id )
2029
2030end subroutine yac_fdef_points_reg2d_dble
2031
2032subroutine yac_fdef_points_curve2d_real ( grid_id, &
2033 nbr_points, &
2034 location, &
2035 x_points_real, &
2036 y_points_real, &
2037 point_id )
2038
2039 use yac, dummy => yac_fdef_points_curve2d_real
2040
2041 implicit none
2042
2043 integer, intent(in) :: grid_id
2044 integer, intent(in) :: nbr_points(2)
2045 integer, intent(in) :: location
2046 real, intent(in) :: &
2047 x_points_real(nbr_points(1),nbr_points(2))
2048 real, intent(in) :: &
2049 y_points_real(nbr_points(1),nbr_points(2))
2050 integer, intent(out) :: point_id
2051
2052 double precision, allocatable :: x_points(:,:)
2053 double precision, allocatable :: y_points(:,:)
2054
2055 allocate(x_points(nbr_points(1),nbr_points(2)))
2056 allocate(y_points(nbr_points(1),nbr_points(2)))
2057 x_points(:,:) = dble(x_points_real(:,:))
2058 y_points(:,:) = dble(y_points_real(:,:))
2059
2060 call yac_fdef_points_curve2d_dble ( grid_id, &
2061 nbr_points, &
2062 location, &
2063 x_points, &
2064 y_points, &
2065 point_id )
2066
2067 deallocate(x_points)
2068 deallocate(y_points)
2069
2070end subroutine yac_fdef_points_curve2d_real
2071
2072subroutine yac_fdef_points_curve2d_dble ( grid_id, &
2073 nbr_points, &
2074 location, &
2075 x_points, &
2076 y_points, &
2077 point_id )
2078
2079 use yac, dummy => yac_fdef_points_curve2d_dble
2080
2081 implicit none
2082
2083 interface
2084
2085 subroutine yac_cdef_points_curve2d_c ( grid_id, &
2086 nbr_points, &
2087 location, &
2088 x_points, &
2089 y_points, &
2090 point_id ) &
2091 bind( c, name='yac_cdef_points_curve2d' )
2092
2093 use, intrinsic :: iso_c_binding, only : c_int, c_double
2094
2095 integer ( kind=c_int ), value :: grid_id
2096 integer ( kind=c_int ) :: nbr_points(2)
2097 integer ( kind=c_int ), value :: location
2098
2099 real ( kind=c_double ) :: x_points(nbr_points(1),nbr_points(2))
2100 real ( kind=c_double ) :: y_points(nbr_points(1),nbr_points(2))
2101
2102 integer ( kind=c_int ) :: point_id
2103
2104 end subroutine yac_cdef_points_curve2d_c
2105
2106 end interface
2107
2108 integer, intent(in) :: grid_id
2109 integer, intent(in) :: nbr_points(2)
2110 integer, intent(in) :: location
2111
2112 double precision, intent(in) :: &
2113 x_points(nbr_points(1),nbr_points(2))
2114 double precision, intent(in) :: &
2115 y_points(nbr_points(1),nbr_points(2))
2116
2117 integer, intent(out) :: point_id
2118
2119 call yac_cdef_points_curve2d_c ( grid_id, &
2120 nbr_points, &
2121 location, &
2122 x_points, &
2123 y_points, &
2124 point_id )
2125
2126end subroutine yac_fdef_points_curve2d_dble
2127
2128subroutine yac_fdef_points_unstruct_real ( grid_id, &
2129 nbr_points, &
2130 location, &
2131 x_points_real, &
2132 y_points_real, &
2133 point_id )
2134
2136
2137 implicit none
2138
2139 integer, intent(in) :: grid_id
2140 integer, intent(in) :: nbr_points
2141 integer, intent(in) :: location
2142
2143 real, intent(in) :: x_points_real(nbr_points)
2144 real, intent(in) :: y_points_real(nbr_points)
2145
2146 integer, intent(out) :: point_id
2147
2148 double precision, allocatable :: x_points(:)
2149 double precision, allocatable :: y_points(:)
2150
2151 allocate(x_points(nbr_points))
2152 allocate(y_points(nbr_points))
2153 x_points(:) = dble(x_points_real(:))
2154 y_points(:) = dble(y_points_real(:))
2155
2156 call yac_fdef_points_unstruct_dble ( grid_id, &
2157 nbr_points, &
2158 location, &
2159 x_points, &
2160 y_points, &
2161 point_id )
2162
2163 deallocate(x_points)
2164 deallocate(y_points)
2165
2166end subroutine yac_fdef_points_unstruct_real
2167
2168subroutine yac_fdef_points_unstruct_dble ( grid_id, &
2169 nbr_points, &
2170 location, &
2171 x_points, &
2172 y_points, &
2173 point_id )
2174
2176
2177 implicit none
2178
2179 interface
2180
2181 subroutine yac_cdef_points_unstruct_c ( grid_id, &
2182 nbr_points, &
2183 location, &
2184 x_points, &
2185 y_points, &
2186 point_id ) &
2187 bind( c, name='yac_cdef_points_unstruct' )
2188
2189 use, intrinsic :: iso_c_binding, only : c_int, c_double
2190
2191 integer (kind=c_int), value :: grid_id
2192 integer (kind=c_int), value :: nbr_points
2193 integer (kind=c_int), value :: location
2194
2195 real (kind=c_double) :: x_points(nbr_points)
2196 real (kind=c_double) :: y_points(nbr_points)
2197
2198 integer (kind=c_int) :: point_id
2199
2200 end subroutine yac_cdef_points_unstruct_c
2201
2202 end interface
2203
2204 integer, intent(in) :: grid_id
2205 integer, intent(in) :: nbr_points
2206 integer, intent(in) :: location
2207
2208 double precision, intent(in) :: x_points(nbr_points)
2209 double precision, intent(in) :: y_points(nbr_points)
2210
2211 integer, intent(out) :: point_id
2212
2213 call yac_cdef_points_unstruct_c ( grid_id, &
2214 nbr_points, &
2215 location, &
2216 x_points, &
2217 y_points, &
2218 point_id )
2219
2220end subroutine yac_fdef_points_unstruct_dble
2221
2222subroutine yac_fdef_points_reg2d_rot_real ( grid_id, &
2223 nbr_points, &
2224 location, &
2225 x_points_real, &
2226 y_points_real, &
2227 x_north_pole_real, &
2228 y_north_pole_real, &
2229 point_id )
2230
2232
2233 implicit none
2234
2235 integer, intent(in) :: grid_id
2236 integer, intent(in) :: nbr_points(2)
2237 integer, intent(in) :: location
2238 real, intent(in) :: x_points_real(nbr_points(1))
2239 real, intent(in) :: y_points_real(nbr_points(2))
2240 real, intent(in) :: x_north_pole_real
2241 real, intent(in) :: y_north_pole_real
2242 integer, intent(out) :: point_id
2243
2244 double precision, allocatable :: x_points(:)
2245 double precision, allocatable :: y_points(:)
2246 double precision :: x_north_pole
2247 double precision :: y_north_pole
2248
2249 allocate(x_points(nbr_points(1)))
2250 allocate(y_points(nbr_points(2)))
2251 x_points(:) = dble(x_points_real(:))
2252 y_points(:) = dble(y_points_real(:))
2253
2254 x_north_pole = dble(x_north_pole_real)
2255 y_north_pole = dble(y_north_pole_real)
2256
2257 call yac_fdef_points_reg2d_rot_dble ( grid_id, &
2258 nbr_points, &
2259 location, &
2260 x_points, &
2261 y_points, &
2262 x_north_pole, &
2263 y_north_pole, &
2264 point_id )
2265
2266 deallocate(x_points)
2267 deallocate(y_points)
2268
2269end subroutine yac_fdef_points_reg2d_rot_real
2270
2271subroutine yac_fdef_points_reg2d_rot_dble ( grid_id, &
2272 nbr_points, &
2273 location, &
2274 x_points, &
2275 y_points, &
2276 x_north_pole, &
2277 y_north_pole, &
2278 point_id )
2279
2281
2282 implicit none
2283
2284 interface
2285
2286 subroutine yac_cdef_points_reg2d_rot_c ( grid_id, &
2287 nbr_points, &
2288 location, &
2289 x_points, &
2290 y_points, &
2291 x_north_pole, &
2292 y_north_pole, &
2293 point_id ) &
2294 & bind( c, name='yac_cdef_points_reg2d_rot' )
2295
2296 use, intrinsic :: iso_c_binding, only : c_int, c_double
2297
2298 integer ( kind=c_int ), value :: grid_id
2299 integer ( kind=c_int ) :: nbr_points(2)
2300 integer ( kind=c_int ), value :: location
2301
2302 real ( kind=c_double ) :: x_points(nbr_points(1))
2303 real ( kind=c_double ) :: y_points(nbr_points(2))
2304
2305 real ( kind=c_double ), value :: x_north_pole
2306 real ( kind=c_double ), value :: y_north_pole
2307
2308 integer ( kind=c_int ) :: point_id
2309
2310 end subroutine yac_cdef_points_reg2d_rot_c
2311
2312 end interface
2313
2314 integer, intent(in) :: grid_id
2315 integer, intent(in) :: nbr_points(2)
2316 integer, intent(in) :: location
2317
2318 double precision, intent(in) :: x_points(nbr_points(1))
2319 double precision, intent(in) :: y_points(nbr_points(2))
2320 double precision, intent(in) :: x_north_pole
2321 double precision, intent(in) :: y_north_pole
2322
2323 integer, intent(out) :: point_id
2324
2325 call yac_cdef_points_reg2d_rot_c ( grid_id, &
2326 nbr_points, &
2327 location, &
2328 x_points, &
2329 y_points, &
2330 x_north_pole, &
2331 y_north_pole, &
2332 point_id )
2333
2334end subroutine yac_fdef_points_reg2d_rot_dble
2335
2336! ------------------------- def_points_named -------------------------
2337
2339 nbr_points, &
2340 location, &
2341 x_points_real, &
2342 y_points_real, &
2343 name, &
2344 point_id )
2345
2347
2348 implicit none
2349
2350 integer, intent(in) :: grid_id
2351 integer, intent(in) :: nbr_points(2)
2352 integer, intent(in) :: location
2353 real, intent(in) :: x_points_real(nbr_points(1))
2354 real, intent(in) :: y_points_real(nbr_points(2))
2355 character(len=*), intent(in) :: name
2356 integer, intent(out) :: point_id
2357
2358 double precision, allocatable :: x_points(:)
2359 double precision, allocatable :: y_points(:)
2360
2361 allocate(x_points(nbr_points(1)))
2362 allocate(y_points(nbr_points(2)))
2363 x_points(:) = dble(x_points_real(:))
2364 y_points(:) = dble(y_points_real(:))
2365
2366 call yac_fdef_points_reg2d_named_dble ( grid_id, &
2367 nbr_points, &
2368 location, &
2369 x_points, &
2370 y_points, &
2371 name, &
2372 point_id )
2373
2374 deallocate(x_points)
2375 deallocate(y_points)
2376
2378
2380 nbr_points, &
2381 location, &
2382 x_points, &
2383 y_points, &
2384 name, &
2385 point_id )
2386
2387 use, intrinsic :: iso_c_binding, only : c_null_char
2390
2391 implicit none
2392
2393 interface
2394
2395 subroutine yac_cdef_points_reg2d_named_c ( grid_id, &
2396 nbr_points, &
2397 location, &
2398 x_points, &
2399 y_points, &
2400 name, &
2401 point_id ) &
2402 bind( c, name='yac_cdef_points_reg2d_named' )
2403
2404 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_char
2405
2406 integer ( kind=c_int ), value :: grid_id
2407 integer ( kind=c_int ) :: nbr_points(2)
2408 integer ( kind=c_int ), value :: location
2409 real ( kind=c_double ) :: x_points(nbr_points(1))
2410 real ( kind=c_double ) :: y_points(nbr_points(2))
2411 character ( kind=c_char ), dimension(*) :: name
2412 integer ( kind=c_int ) :: point_id
2413
2414 end subroutine yac_cdef_points_reg2d_named_c
2415
2416 end interface
2417
2418 integer, intent(in) :: grid_id
2419 integer, intent(in) :: nbr_points(2)
2420 integer, intent(in) :: location
2421 double precision, intent(in) :: x_points(nbr_points(1))
2422 double precision, intent(in) :: y_points(nbr_points(2))
2423 character(len=*), intent(in) :: name
2424 integer, intent(out) :: point_id
2425
2426 yac_check_string_len( "yac_fdef_points_reg2d_named_dble", name )
2427
2428 call yac_cdef_points_reg2d_named_c ( grid_id, &
2429 nbr_points, &
2430 location, &
2431 x_points, &
2432 y_points, &
2433 trim(name) // c_null_char, &
2434 point_id )
2435
2437
2439 nbr_points, &
2440 location, &
2441 x_points_real, &
2442 y_points_real, &
2443 name, &
2444 point_id )
2445
2447
2448 implicit none
2449
2450 integer, intent(in) :: grid_id
2451 integer, intent(in) :: nbr_points(2)
2452 integer, intent(in) :: location
2453 real, intent(in) :: x_points_real(nbr_points(1),nbr_points(2))
2454 real, intent(in) :: y_points_real(nbr_points(1),nbr_points(2))
2455 character(len=*), intent(in) :: name
2456 integer, intent(out) :: point_id
2457
2458 double precision, allocatable :: x_points(:,:)
2459 double precision, allocatable :: y_points(:,:)
2460
2461 allocate(x_points(nbr_points(1),nbr_points(2)))
2462 allocate(y_points(nbr_points(1),nbr_points(2)))
2463 x_points(:,:) = dble(x_points_real(:,:))
2464 y_points(:,:) = dble(y_points_real(:,:))
2465
2466 call yac_fdef_points_curve2d_named_dble ( grid_id, &
2467 nbr_points, &
2468 location, &
2469 x_points, &
2470 y_points, &
2471 name, &
2472 point_id )
2473
2474 deallocate(x_points)
2475 deallocate(y_points)
2476
2478
2480 nbr_points, &
2481 location, &
2482 x_points, &
2483 y_points, &
2484 name, &
2485 point_id )
2486
2487 use, intrinsic :: iso_c_binding, only : c_null_char
2490
2491 implicit none
2492
2493 interface
2494
2495 subroutine yac_cdef_points_curve2d_named_c ( grid_id, &
2496 nbr_points, &
2497 location, &
2498 x_points, &
2499 y_points, &
2500 name, &
2501 point_id ) &
2502 bind( c, name='yac_cdef_points_curve2d_named' )
2503
2504 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_char
2505
2506 integer ( kind=c_int ), value :: grid_id
2507 integer ( kind=c_int ) :: nbr_points(2)
2508 integer ( kind=c_int ), value :: location
2509 real ( kind=c_double ) :: x_points(nbr_points(1),nbr_points(2))
2510 real ( kind=c_double ) :: y_points(nbr_points(1),nbr_points(2))
2511 character ( kind=c_char ), dimension(*) :: name
2512 integer ( kind=c_int ) :: point_id
2513
2514 end subroutine yac_cdef_points_curve2d_named_c
2515
2516 end interface
2517
2518 integer, intent(in) :: grid_id
2519 integer, intent(in) :: nbr_points(2)
2520 integer, intent(in) :: location
2521 double precision, intent(in) :: x_points(nbr_points(1),nbr_points(2))
2522 double precision, intent(in) :: y_points(nbr_points(1),nbr_points(2))
2523 character(len=*), intent(in) :: name
2524 integer, intent(out) :: point_id
2525
2526 yac_check_string_len( "yac_fdef_points_curve2d_named_dble", name )
2527
2528 call yac_cdef_points_curve2d_named_c ( grid_id, &
2529 nbr_points, &
2530 location, &
2531 x_points, &
2532 y_points, &
2533 trim(name) // c_null_char, &
2534 point_id )
2535
2537
2539 nbr_points, &
2540 location, &
2541 x_points_real, &
2542 y_points_real, &
2543 name, &
2544 point_id )
2545
2547
2548 implicit none
2549
2550 integer, intent(in) :: grid_id
2551 integer, intent(in) :: nbr_points
2552 integer, intent(in) :: location
2553 real, intent(in) :: x_points_real(nbr_points)
2554 real, intent(in) :: y_points_real(nbr_points)
2555 character(len=*), intent(in) :: name
2556 integer, intent(out) :: point_id
2557
2558 double precision, allocatable :: x_points(:)
2559 double precision, allocatable :: y_points(:)
2560
2561 allocate(x_points(nbr_points))
2562 allocate(y_points(nbr_points))
2563 x_points(:) = dble(x_points_real(:))
2564 y_points(:) = dble(y_points_real(:))
2565
2566 call yac_fdef_points_unstruct_named_dble ( grid_id, &
2567 nbr_points, &
2568 location, &
2569 x_points, &
2570 y_points, &
2571 name, &
2572 point_id )
2573
2574 deallocate(x_points)
2575 deallocate(y_points)
2576
2578
2580 nbr_points, &
2581 location, &
2582 x_points, &
2583 y_points, &
2584 name, &
2585 point_id )
2586
2587 use, intrinsic :: iso_c_binding, only : c_null_char
2590
2591 implicit none
2592
2593 interface
2594
2595 subroutine yac_cdef_points_unstruct_named_c ( grid_id, &
2596 nbr_points, &
2597 location, &
2598 x_points, &
2599 y_points, &
2600 name, &
2601 point_id ) &
2602 bind( c, name='yac_cdef_points_unstruct_named' )
2603
2604 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_char
2605
2606 integer ( kind=c_int ), value :: grid_id
2607 integer ( kind=c_int ), value :: nbr_points
2608 integer ( kind=c_int ), value :: location
2609 real ( kind=c_double ) :: x_points(nbr_points)
2610 real ( kind=c_double ) :: y_points(nbr_points)
2611 character ( kind=c_char ), dimension(*) :: name
2612 integer ( kind=c_int ) :: point_id
2613
2614 end subroutine yac_cdef_points_unstruct_named_c
2615
2616 end interface
2617
2618 integer, intent(in) :: grid_id
2619 integer, intent(in) :: nbr_points
2620 integer, intent(in) :: location
2621 double precision, intent(in) :: x_points(nbr_points)
2622 double precision, intent(in) :: y_points(nbr_points)
2623 character(len=*), intent(in) :: name
2624 integer, intent(out) :: point_id
2625
2626 yac_check_string_len( "yac_fdef_points_unstruct_named_dble", name )
2627
2628 call yac_cdef_points_unstruct_named_c ( grid_id, &
2629 nbr_points, &
2630 location, &
2631 x_points, &
2632 y_points, &
2633 trim(name) // c_null_char, &
2634 point_id )
2635
2637
2639 nbr_points, &
2640 location, &
2641 x_points_real, &
2642 y_points_real, &
2643 x_north_pole_real, &
2644 y_north_pole_real, &
2645 name, &
2646 point_id )
2647
2649
2650 implicit none
2651
2652 integer, intent(in) :: grid_id
2653 integer, intent(in) :: nbr_points(2)
2654 integer, intent(in) :: location
2655 real, intent(in) :: x_points_real(nbr_points(1))
2656 real, intent(in) :: y_points_real(nbr_points(2))
2657 real, intent(in) :: x_north_pole_real
2658 real, intent(in) :: y_north_pole_real
2659 character(len=*), intent(in) :: name
2660 integer, intent(out) :: point_id
2661
2662 double precision, allocatable :: x_points(:)
2663 double precision, allocatable :: y_points(:)
2664 double precision :: x_north_pole
2665 double precision :: y_north_pole
2666
2667 allocate(x_points(nbr_points(1)))
2668 allocate(y_points(nbr_points(2)))
2669 x_points(:) = dble(x_points_real(:))
2670 y_points(:) = dble(y_points_real(:))
2671 x_north_pole = dble(x_north_pole_real)
2672 y_north_pole = dble(y_north_pole_real)
2673
2674 call yac_fdef_points_reg2d_rot_named_dble ( grid_id, &
2675 nbr_points, &
2676 location, &
2677 x_points, &
2678 y_points, &
2679 x_north_pole, &
2680 y_north_pole, &
2681 name, &
2682 point_id )
2683
2684 deallocate(x_points)
2685 deallocate(y_points)
2686
2688
2690 nbr_points, &
2691 location, &
2692 x_points, &
2693 y_points, &
2694 x_north_pole, &
2695 y_north_pole, &
2696 name, &
2697 point_id )
2698
2699 use, intrinsic :: iso_c_binding, only : c_null_char
2702
2703 implicit none
2704
2705 interface
2706
2707 subroutine yac_cdef_points_reg2d_rot_named_c ( grid_id, &
2708 nbr_points, &
2709 location, &
2710 x_points, &
2711 y_points, &
2712 x_north_pole, &
2713 y_north_pole, &
2714 name, &
2715 point_id ) &
2716 bind( c, name='yac_cdef_points_reg2d_rot_named' )
2717
2718 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_char
2719
2720 integer ( kind=c_int ), value :: grid_id
2721 integer ( kind=c_int ) :: nbr_points(2)
2722 integer ( kind=c_int ), value :: location
2723 real ( kind=c_double ) :: x_points(nbr_points(1))
2724 real ( kind=c_double ) :: y_points(nbr_points(2))
2725 real ( kind=c_double ), value :: x_north_pole
2726 real ( kind=c_double ), value :: y_north_pole
2727 character ( kind=c_char ), dimension(*) :: name
2728 integer ( kind=c_int ) :: point_id
2729
2730 end subroutine yac_cdef_points_reg2d_rot_named_c
2731
2732 end interface
2733
2734 integer, intent(in) :: grid_id
2735 integer, intent(in) :: nbr_points(2)
2736 integer, intent(in) :: location
2737 double precision, intent(in) :: x_points(nbr_points(1))
2738 double precision, intent(in) :: y_points(nbr_points(2))
2739 double precision, intent(in) :: x_north_pole
2740 double precision, intent(in) :: y_north_pole
2741 character(len=*), intent(in) :: name
2742 integer, intent(out) :: point_id
2743
2744 yac_check_string_len( "yac_fdef_points_reg2d_rot_named_dble", name )
2745
2746 call yac_cdef_points_reg2d_rot_named_c ( grid_id, &
2747 nbr_points, &
2748 location, &
2749 x_points, &
2750 y_points, &
2751 x_north_pole, &
2752 y_north_pole, &
2753 trim(name) // c_null_char, &
2754 point_id )
2755
2757
2758! ------------------------- def_grid -------------------------------
2759
2779subroutine yac_fdef_grid_nonuniform_real ( grid_name, &
2780 nbr_vertices, &
2781 nbr_cells, &
2782 nbr_connections, &
2783 nbr_vertices_per_cell, &
2784 x_vertices_real, &
2785 y_vertices_real, &
2786 cell_to_vertex_in, &
2787 grid_id, &
2788 use_ll_edges)
2789
2791
2792 implicit none
2793
2794 character(len=*), intent(in) :: grid_name
2795 integer, intent(in) :: nbr_vertices
2796 integer, intent(in) :: nbr_cells
2797 integer, intent(in) :: nbr_connections
2798 integer, intent(in) :: nbr_vertices_per_cell(nbr_cells)
2799
2800 real, intent(in) :: x_vertices_real(nbr_vertices)
2801 real, intent(in) :: y_vertices_real(nbr_vertices)
2802
2803 integer, intent(in) :: cell_to_vertex_in(nbr_connections)
2804
2805 integer, intent(out) :: grid_id
2806
2807 logical, optional, intent(in) :: use_ll_edges
2808
2809 double precision, allocatable :: x_vertices(:)
2810 double precision, allocatable :: y_vertices(:)
2811
2812 allocate(x_vertices(nbr_vertices))
2813 allocate(y_vertices(nbr_vertices))
2814 x_vertices(:) = dble(x_vertices_real(:))
2815 y_vertices(:) = dble(y_vertices_real(:))
2816
2817 call yac_fdef_grid_nonuniform_dble ( grid_name, &
2818 nbr_vertices, &
2819 nbr_cells, &
2820 nbr_connections, &
2821 nbr_vertices_per_cell, &
2822 x_vertices, &
2823 y_vertices, &
2824 cell_to_vertex_in, &
2825 grid_id, &
2826 use_ll_edges )
2827
2828 deallocate(x_vertices)
2829 deallocate(y_vertices)
2830
2831end subroutine yac_fdef_grid_nonuniform_real
2832
2852subroutine yac_fdef_grid_nonuniform_dble ( grid_name, &
2853 nbr_vertices, &
2854 nbr_cells, &
2855 nbr_connections, &
2856 nbr_vertices_per_cell, &
2857 x_vertices, &
2858 y_vertices, &
2859 cell_to_vertex_in, &
2860 grid_id, &
2861 use_ll_edges )
2862
2863 use, intrinsic :: iso_c_binding, only : c_null_char
2865
2866 implicit none
2867
2868 interface
2869
2870 subroutine yac_cdef_grid_unstruct_c ( grid_name, &
2871 nbr_vertices, &
2872 nbr_cells, &
2873 nbr_vertices_per_cell, &
2874 x_vertices, &
2875 y_vertices, &
2876 cell_to_vertex, &
2877 grid_id ) &
2878 bind( c, name='yac_cdef_grid_unstruct' )
2879
2880 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2881
2882 character ( kind=c_char ), dimension(*) :: grid_name
2883 integer ( kind=c_int ), value :: nbr_vertices
2884 integer ( kind=c_int ), value :: nbr_cells
2885 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
2886 real ( kind=c_double ) :: x_vertices(nbr_vertices)
2887 real ( kind=c_double ) :: y_vertices(nbr_vertices)
2888 integer ( kind=c_int ) :: cell_to_vertex(*)
2889 integer ( kind=c_int ) :: grid_id
2890
2891 end subroutine yac_cdef_grid_unstruct_c
2892
2893 subroutine yac_cdef_grid_unstruct_ll_c ( grid_name, &
2894 nbr_vertices, &
2895 nbr_cells, &
2896 nbr_vertices_per_cell, &
2897 x_vertices, &
2898 y_vertices, &
2899 cell_to_vertex, &
2900 grid_id ) &
2901 bind( c, name='yac_cdef_grid_unstruct_ll' )
2902
2903 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2904
2905 character ( kind=c_char ), dimension(*) :: grid_name
2906 integer ( kind=c_int ), value :: nbr_vertices
2907 integer ( kind=c_int ), value :: nbr_cells
2908 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
2909 real ( kind=c_double ) :: x_vertices(nbr_vertices)
2910 real ( kind=c_double ) :: y_vertices(nbr_vertices)
2911 integer ( kind=c_int ) :: cell_to_vertex(*)
2912 integer ( kind=c_int ) :: grid_id
2913
2914 end subroutine yac_cdef_grid_unstruct_ll_c
2915
2916 end interface
2917
2918 character(len=*), intent(in) :: grid_name
2919 integer, intent(in) :: nbr_vertices
2920 integer, intent(in) :: nbr_cells
2921 integer, intent(in) :: nbr_connections
2922 integer, intent(in) :: nbr_vertices_per_cell(nbr_cells)
2923
2924 double precision, intent(in) :: x_vertices(nbr_vertices)
2925 double precision, intent(in) :: y_vertices(nbr_vertices)
2926
2927 integer, intent(in) :: cell_to_vertex_in(nbr_connections)
2928
2929 integer, intent(out) :: grid_id
2930
2931 logical, optional, intent(in) :: use_ll_edges
2932
2933
2934 integer, allocatable :: cell_to_vertex(:)
2935
2936 logical :: use_ll_edges_
2937
2938 yac_fassert(all(cell_to_vertex_in > 0), "ERROR(yac_fdef_grid_nonuniform_dble): all entries of cell_to_vertex have to be > 0")
2939
2940 yac_fassert(all(cell_to_vertex_in <= nbr_vertices), "ERROR(yac_fdef_grid_nonuniform_dble): all entries of cell_to_vertex have to be <= nbr_vertices")
2941
2942 allocate(cell_to_vertex(nbr_connections))
2943 cell_to_vertex(:) = cell_to_vertex_in(:) - 1
2944
2945 if (present(use_ll_edges)) then
2946 use_ll_edges_ = use_ll_edges
2947 else
2948 use_ll_edges_ = .false.
2949 end if
2950
2951 if (use_ll_edges_) then
2952 call yac_cdef_grid_unstruct_ll_c ( trim(grid_name) // c_null_char, &
2953 nbr_vertices, &
2954 nbr_cells, &
2955 nbr_vertices_per_cell, &
2956 x_vertices, &
2957 y_vertices, &
2958 cell_to_vertex, &
2959 grid_id )
2960 else
2961 call yac_cdef_grid_unstruct_c ( trim(grid_name) // c_null_char, &
2962 nbr_vertices, &
2963 nbr_cells, &
2964 nbr_vertices_per_cell, &
2965 x_vertices, &
2966 y_vertices, &
2967 cell_to_vertex, &
2968 grid_id )
2969 end if
2970
2971 deallocate(cell_to_vertex)
2972
2973end subroutine yac_fdef_grid_nonuniform_dble
2974
2993subroutine yac_fdef_grid_unstruct_real ( grid_name, &
2994 nbr_vertices, &
2995 nbr_cells, &
2996 nbr_vertices_per_cell_in, &
2997 x_vertices_real, &
2998 y_vertices_real, &
2999 cell_to_vertex_in, &
3000 grid_id, &
3001 use_ll_edges )
3002
3003 use yac, dummy => yac_fdef_grid_unstruct_real
3004
3005 implicit none
3006
3007 character(len=*), intent(in) :: grid_name
3008 integer, intent(in) :: nbr_vertices
3009 integer, intent(in) :: nbr_cells
3010 integer, intent(in) :: nbr_vertices_per_cell_in
3011
3012 real, intent(in) :: x_vertices_real(nbr_vertices)
3013 real, intent(in) :: y_vertices_real(nbr_vertices)
3014
3015 integer, intent(in) :: cell_to_vertex_in(nbr_vertices_per_cell_in,nbr_cells)
3016
3017 integer, intent(out) :: grid_id
3018
3019 logical, optional, intent(in) :: use_ll_edges
3020
3021 double precision, allocatable :: x_vertices(:)
3022 double precision, allocatable :: y_vertices(:)
3023
3024 allocate(x_vertices(nbr_vertices))
3025 allocate(y_vertices(nbr_vertices))
3026 x_vertices(:) = dble(x_vertices_real(:))
3027 y_vertices(:) = dble(y_vertices_real(:))
3028
3029 call yac_fdef_grid_unstruct_dble ( grid_name, &
3030 nbr_vertices, &
3031 nbr_cells, &
3032 nbr_vertices_per_cell_in, &
3033 x_vertices, &
3034 y_vertices, &
3035 cell_to_vertex_in, &
3036 grid_id, &
3037 use_ll_edges )
3038
3039 deallocate(x_vertices)
3040 deallocate(y_vertices)
3041
3042end subroutine yac_fdef_grid_unstruct_real
3043
3062subroutine yac_fdef_grid_unstruct_dble ( grid_name, &
3063 nbr_vertices, &
3064 nbr_cells, &
3065 nbr_vertices_per_cell_in, &
3066 x_vertices, &
3067 y_vertices, &
3068 cell_to_vertex_in, &
3069 grid_id, &
3070 use_ll_edges )
3071
3072 use, intrinsic :: iso_c_binding, only : c_null_char
3073 use yac, dummy => yac_fdef_grid_unstruct_dble
3074
3075 implicit none
3076
3077 interface
3078
3079 subroutine yac_cdef_grid_unstruct_c ( grid_name, &
3080 nbr_vertices, &
3081 nbr_cells, &
3082 nbr_vertices_per_cell, &
3083 x_vertices, &
3084 y_vertices, &
3085 cell_to_vertex, &
3086 grid_id ) &
3087 bind( c, name='yac_cdef_grid_unstruct' )
3088
3089 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3090
3091 character ( kind=c_char ), dimension(*) :: grid_name
3092 integer ( kind=c_int ), value :: nbr_vertices
3093 integer ( kind=c_int ), value :: nbr_cells
3094 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
3095 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3096 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3097 integer ( kind=c_int ) :: cell_to_vertex(*)
3098 integer ( kind=c_int ) :: grid_id
3099
3100 end subroutine yac_cdef_grid_unstruct_c
3101
3102 subroutine yac_cdef_grid_unstruct_ll_c ( grid_name, &
3103 nbr_vertices, &
3104 nbr_cells, &
3105 nbr_vertices_per_cell, &
3106 x_vertices, &
3107 y_vertices, &
3108 cell_to_vertex, &
3109 grid_id ) &
3110 bind( c, name='yac_cdef_grid_unstruct_ll' )
3111
3112 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3113
3114 character ( kind=c_char ), dimension(*) :: grid_name
3115 integer ( kind=c_int ), value :: nbr_vertices
3116 integer ( kind=c_int ), value :: nbr_cells
3117 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
3118 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3119 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3120 integer ( kind=c_int ) :: cell_to_vertex(*)
3121 integer ( kind=c_int ) :: grid_id
3122
3123 end subroutine yac_cdef_grid_unstruct_ll_c
3124
3125 end interface
3126
3127 character(len=*), intent(in) :: grid_name
3128 integer, intent(in) :: nbr_vertices
3129 integer, intent(in) :: nbr_cells
3130 integer, intent(in) :: nbr_vertices_per_cell_in
3131
3132 double precision, intent(in) :: x_vertices(nbr_vertices)
3133 double precision, intent(in) :: y_vertices(nbr_vertices)
3134
3135 integer, intent(in) :: cell_to_vertex_in( &
3136 nbr_vertices_per_cell_in, &
3137 nbr_cells)
3138
3139 integer, intent(out) :: grid_id
3140
3141 logical, optional, intent(in) :: use_ll_edges
3142
3143 integer, allocatable :: nbr_vertices_per_cell(:)
3144 integer, allocatable :: cell_to_vertex(:,:)
3145 logical :: use_ll_edges_
3146
3147 allocate(nbr_vertices_per_cell(nbr_cells))
3148 allocate(cell_to_vertex(nbr_vertices_per_cell_in,nbr_cells))
3149 nbr_vertices_per_cell(:) = nbr_vertices_per_cell_in
3150
3151 yac_fassert(all(cell_to_vertex_in > 0), "ERROR(yac_fdef_grid_unstruct_dble): all entries of cell_to_vertex have to be > 0")
3152
3153 yac_fassert(all(cell_to_vertex_in <= nbr_vertices), "ERROR(yac_fdef_grid_unstruct_dble): all entries of cell_to_vertex have to be <= nbr_vertices")
3154
3155 cell_to_vertex(:,:) = cell_to_vertex_in(:,:) - 1
3156
3157 if (present(use_ll_edges)) then
3158 use_ll_edges_ = use_ll_edges
3159 else
3160 use_ll_edges_ = .false.
3161 end if
3162
3163 if (use_ll_edges_) then
3164 call yac_cdef_grid_unstruct_ll_c ( trim(grid_name) // c_null_char, &
3165 nbr_vertices, &
3166 nbr_cells, &
3167 nbr_vertices_per_cell, &
3168 x_vertices, &
3169 y_vertices, &
3170 cell_to_vertex, &
3171 grid_id )
3172 else
3173 call yac_cdef_grid_unstruct_c ( trim(grid_name) // c_null_char, &
3174 nbr_vertices, &
3175 nbr_cells, &
3176 nbr_vertices_per_cell, &
3177 x_vertices, &
3178 y_vertices, &
3179 cell_to_vertex, &
3180 grid_id )
3181 end if
3182
3183 deallocate(nbr_vertices_per_cell)
3184 deallocate(cell_to_vertex)
3185
3186end subroutine yac_fdef_grid_unstruct_dble
3187
3209subroutine yac_fdef_grid_nonuniform_edge_real ( grid_name, &
3210 nbr_vertices, &
3211 nbr_cells, &
3212 nbr_edges, &
3213 nbr_connections, &
3214 nbr_edges_per_cell, &
3215 x_vertices_real, &
3216 y_vertices_real, &
3217 cell_to_edge, &
3218 edge_to_vertex, &
3219 grid_id, &
3220 use_ll_edges)
3221
3223
3224 implicit none
3225
3226 character(len=*), intent(in) :: grid_name
3227 integer, intent(in) :: nbr_vertices
3228 integer, intent(in) :: nbr_cells
3229 integer, intent(in) :: nbr_edges
3230 integer, intent(in) :: nbr_connections
3231 integer, intent(in) :: nbr_edges_per_cell(nbr_cells)
3232
3233 real, intent(in) :: x_vertices_real(nbr_vertices)
3234 real, intent(in) :: y_vertices_real(nbr_vertices)
3235
3236 integer, intent(in) :: cell_to_edge(nbr_connections)
3237 integer, intent(in) :: edge_to_vertex(2,nbr_edges)
3238
3239 integer, intent(out) :: grid_id
3240
3241 logical, optional, intent(in) :: use_ll_edges
3242
3243 double precision, allocatable :: x_vertices(:)
3244 double precision, allocatable :: y_vertices(:)
3245
3246 allocate(x_vertices(nbr_vertices))
3247 allocate(y_vertices(nbr_vertices))
3248 x_vertices(:) = dble(x_vertices_real(:))
3249 y_vertices(:) = dble(y_vertices_real(:))
3250
3251 call yac_fdef_grid_nonuniform_edge_dble ( grid_name, &
3252 nbr_vertices, &
3253 nbr_cells, &
3254 nbr_edges, &
3255 nbr_connections, &
3256 nbr_edges_per_cell, &
3257 x_vertices, &
3258 y_vertices, &
3259 cell_to_edge, &
3260 edge_to_vertex, &
3261 grid_id, &
3262 use_ll_edges )
3263
3264 deallocate(x_vertices)
3265 deallocate(y_vertices)
3266
3268
3290subroutine yac_fdef_grid_nonuniform_edge_dble ( grid_name, &
3291 nbr_vertices, &
3292 nbr_cells, &
3293 nbr_edges, &
3294 nbr_connections, &
3295 nbr_edges_per_cell, &
3296 x_vertices, &
3297 y_vertices, &
3298 cell_to_edge_in, &
3299 edge_to_vertex_in, &
3300 grid_id, &
3301 use_ll_edges)
3302
3303 use, intrinsic :: iso_c_binding, only : c_null_char
3305
3306 implicit none
3307
3308 interface
3309
3310 subroutine yac_cdef_grid_unstruct_edge_c ( grid_name, &
3311 nbr_vertices, &
3312 nbr_cells, &
3313 nbr_edges, &
3314 nbr_edges_per_cell, &
3315 x_vertices, &
3316 y_vertices, &
3317 cell_to_edge, &
3318 edge_to_vertex, &
3319 grid_id ) &
3320 bind( c, name='yac_cdef_grid_unstruct_edge' )
3321
3322 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3323
3324 character ( kind=c_char ), dimension(*) :: grid_name
3325 integer ( kind=c_int ), value :: nbr_vertices
3326 integer ( kind=c_int ), value :: nbr_cells
3327 integer ( kind=c_int ), value :: nbr_edges
3328 integer ( kind=c_int ) :: nbr_edges_per_cell(nbr_cells)
3329 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3330 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3331 integer ( kind=c_int ) :: cell_to_edge(*)
3332 integer ( kind=c_int ) :: edge_to_vertex(2,nbr_edges)
3333 integer ( kind=c_int ) :: grid_id
3334
3335 end subroutine yac_cdef_grid_unstruct_edge_c
3336
3337 subroutine yac_cdef_grid_unstruct_edge_ll_c ( grid_name, &
3338 nbr_vertices, &
3339 nbr_cells, &
3340 nbr_edges, &
3341 nbr_edges_per_cell, &
3342 x_vertices, &
3343 y_vertices, &
3344 cell_to_edge, &
3345 edge_to_vertex, &
3346 grid_id ) &
3347 bind( c, name='yac_cdef_grid_unstruct_edge_ll' )
3348
3349 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3350
3351 character ( kind=c_char ), dimension(*) :: grid_name
3352 integer ( kind=c_int ), value :: nbr_vertices
3353 integer ( kind=c_int ), value :: nbr_cells
3354 integer ( kind=c_int ), value :: nbr_edges
3355 integer ( kind=c_int ) :: nbr_edges_per_cell(nbr_cells)
3356 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3357 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3358 integer ( kind=c_int ) :: cell_to_edge(*)
3359 integer ( kind=c_int ) :: edge_to_vertex(2,nbr_edges)
3360 integer ( kind=c_int ) :: grid_id
3361
3362 end subroutine yac_cdef_grid_unstruct_edge_ll_c
3363
3364 end interface
3365
3366 character(len=*), intent(in) :: grid_name
3367 integer, intent(in) :: nbr_vertices
3368 integer, intent(in) :: nbr_cells
3369 integer, intent(in) :: nbr_edges
3370 integer, intent(in) :: nbr_connections
3371 integer, intent(in) :: nbr_edges_per_cell(nbr_cells)
3372
3373 double precision, intent(in) :: x_vertices(nbr_vertices)
3374 double precision, intent(in) :: y_vertices(nbr_vertices)
3375
3376 integer, intent(in) :: cell_to_edge_in(nbr_connections)
3377 integer, intent(in) :: edge_to_vertex_in(2,nbr_edges)
3378
3379 integer, intent(out) :: grid_id
3380
3381 logical, optional, intent(in) :: use_ll_edges
3382
3383
3384 integer, allocatable :: cell_to_edge(:)
3385 integer, allocatable :: edge_to_vertex(:,:)
3386
3387 logical :: use_ll_edges_
3388
3389 yac_fassert(all(cell_to_edge_in > 0), "ERROR(yac_fdef_grid_nonuniform_edge_dble): all entries of cell_to_edge have to be > 0")
3390
3391 yac_fassert(all(cell_to_edge_in <= nbr_edges), "ERROR(yac_fdef_grid_nonuniform_edge_dble): all entries of cell_to_edge have to be <= nbr_edges")
3392
3393 yac_fassert(all(edge_to_vertex_in > 0), "ERROR(yac_fdef_grid_nonuniform_edge_dble): all entries of edge_to_vertex have to be > 0")
3394
3395 yac_fassert(all(edge_to_vertex_in <= nbr_vertices), "ERROR(yac_fdef_grid_nonuniform_edge_dble): all entries of edge_to_vertex have to be <= nbr_vertices")
3396
3397 allocate(cell_to_edge(nbr_connections))
3398 allocate(edge_to_vertex(2,nbr_edges))
3399 cell_to_edge(:) = cell_to_edge_in(:) - 1
3400 edge_to_vertex(:,:) = edge_to_vertex_in(:,:) - 1
3401
3402 if (present(use_ll_edges)) then
3403 use_ll_edges_ = use_ll_edges
3404 else
3405 use_ll_edges_ = .false.
3406 end if
3407
3408 if (use_ll_edges_) then
3409 call yac_cdef_grid_unstruct_edge_ll_c ( trim(grid_name) // c_null_char, &
3410 nbr_vertices, &
3411 nbr_cells, &
3412 nbr_edges, &
3413 nbr_edges_per_cell, &
3414 x_vertices, &
3415 y_vertices, &
3416 cell_to_edge, &
3417 edge_to_vertex, &
3418 grid_id )
3419 else
3420 call yac_cdef_grid_unstruct_edge_c ( trim(grid_name) // c_null_char, &
3421 nbr_vertices, &
3422 nbr_cells, &
3423 nbr_edges, &
3424 nbr_edges_per_cell, &
3425 x_vertices, &
3426 y_vertices, &
3427 cell_to_edge, &
3428 edge_to_vertex, &
3429 grid_id )
3430 end if
3431
3432 deallocate(cell_to_edge)
3433 deallocate(edge_to_vertex)
3434
3436
3457subroutine yac_fdef_grid_unstruct_edge_real ( grid_name, &
3458 nbr_vertices, &
3459 nbr_cells, &
3460 nbr_edges, &
3461 nbr_edges_per_cell_in, &
3462 x_vertices_real, &
3463 y_vertices_real, &
3464 cell_to_edge_in, &
3465 edge_to_vertex_in, &
3466 grid_id, &
3467 use_ll_edges)
3468
3470
3471 implicit none
3472
3473 character(len=*), intent(in) :: grid_name
3474 integer, intent(in) :: nbr_vertices
3475 integer, intent(in) :: nbr_cells
3476 integer, intent(in) :: nbr_edges
3477 integer, intent(in) :: nbr_edges_per_cell_in
3478
3479 real, intent(in) :: x_vertices_real(nbr_vertices)
3480 real, intent(in) :: y_vertices_real(nbr_vertices)
3481
3482 integer, intent(in) :: cell_to_edge_in(nbr_edges_per_cell_in,nbr_cells)
3483 integer, intent(in) :: edge_to_vertex_in(2,nbr_edges)
3484
3485 integer, intent(out) :: grid_id
3486
3487 logical, optional, intent(in) :: use_ll_edges
3488
3489 double precision, allocatable :: x_vertices(:)
3490 double precision, allocatable :: y_vertices(:)
3491
3492 allocate(x_vertices(nbr_vertices))
3493 allocate(y_vertices(nbr_vertices))
3494 x_vertices(:) = dble(x_vertices_real(:))
3495 y_vertices(:) = dble(y_vertices_real(:))
3496
3497 call yac_fdef_grid_unstruct_edge_dble ( grid_name, &
3498 nbr_vertices, &
3499 nbr_cells, &
3500 nbr_edges, &
3501 nbr_edges_per_cell_in, &
3502 x_vertices, &
3503 y_vertices, &
3504 cell_to_edge_in, &
3505 edge_to_vertex_in, &
3506 grid_id, &
3507 use_ll_edges )
3508
3509 deallocate(x_vertices)
3510 deallocate(y_vertices)
3511
3513
3534subroutine yac_fdef_grid_unstruct_edge_dble ( grid_name, &
3535 nbr_vertices, &
3536 nbr_cells, &
3537 nbr_edges, &
3538 nbr_edges_per_cell_in, &
3539 x_vertices, &
3540 y_vertices, &
3541 cell_to_edge_in, &
3542 edge_to_vertex_in, &
3543 grid_id, &
3544 use_ll_edges)
3545
3546 use, intrinsic :: iso_c_binding, only : c_null_char
3548
3549 implicit none
3550
3551 interface
3552
3553 subroutine yac_cdef_grid_unstruct_edge_c ( grid_name, &
3554 nbr_vertices, &
3555 nbr_cells, &
3556 nbr_edges, &
3557 nbr_edges_per_cell, &
3558 x_vertices, &
3559 y_vertices, &
3560 cell_to_edge, &
3561 edge_to_vertex, &
3562 grid_id ) &
3563 bind( c, name='yac_cdef_grid_unstruct_edge' )
3564
3565 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3566
3567 character ( kind=c_char ), dimension(*) :: grid_name
3568 integer ( kind=c_int ), value :: nbr_vertices
3569 integer ( kind=c_int ), value :: nbr_cells
3570 integer ( kind=c_int ), value :: nbr_edges
3571 integer ( kind=c_int ) :: nbr_edges_per_cell(nbr_cells)
3572 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3573 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3574 integer ( kind=c_int ) :: cell_to_edge(*)
3575 integer ( kind=c_int ) :: edge_to_vertex(2,nbr_edges)
3576 integer ( kind=c_int ) :: grid_id
3577
3578 end subroutine yac_cdef_grid_unstruct_edge_c
3579
3580 subroutine yac_cdef_grid_unstruct_edge_ll_c ( grid_name, &
3581 nbr_vertices, &
3582 nbr_cells, &
3583 nbr_edges, &
3584 nbr_edges_per_cell, &
3585 x_vertices, &
3586 y_vertices, &
3587 cell_to_edge, &
3588 edge_to_vertex, &
3589 grid_id ) &
3590 bind( c, name='yac_cdef_grid_unstruct_edge_ll' )
3591
3592 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3593
3594 character ( kind=c_char ), dimension(*) :: grid_name
3595 integer ( kind=c_int ), value :: nbr_vertices
3596 integer ( kind=c_int ), value :: nbr_cells
3597 integer ( kind=c_int ), value :: nbr_edges
3598 integer ( kind=c_int ) :: nbr_edges_per_cell(nbr_cells)
3599 real ( kind=c_double ) :: x_vertices(nbr_vertices)
3600 real ( kind=c_double ) :: y_vertices(nbr_vertices)
3601 integer ( kind=c_int ) :: cell_to_edge(*)
3602 integer ( kind=c_int ) :: edge_to_vertex(2,nbr_edges)
3603 integer ( kind=c_int ) :: grid_id
3604
3605 end subroutine yac_cdef_grid_unstruct_edge_ll_c
3606
3607 end interface
3608
3609 character(len=*), intent(in) :: grid_name
3610 integer, intent(in) :: nbr_vertices
3611 integer, intent(in) :: nbr_cells
3612 integer, intent(in) :: nbr_edges
3613 integer, intent(in) :: nbr_edges_per_cell_in
3614
3615 double precision, intent(in) :: x_vertices(nbr_vertices)
3616 double precision, intent(in) :: y_vertices(nbr_vertices)
3617
3618 integer, intent(in) :: cell_to_edge_in(nbr_edges_per_cell_in, nbr_cells)
3619 integer, intent(in) :: edge_to_vertex_in(2, nbr_edges)
3620
3621 integer, intent(out) :: grid_id
3622
3623 logical, optional, intent(in) :: use_ll_edges
3624
3625 integer, allocatable :: nbr_edges_per_cell(:)
3626 integer, allocatable :: cell_to_edge(:,:)
3627 integer, allocatable :: edge_to_vertex(:,:)
3628 logical :: use_ll_edges_
3629
3630 allocate(nbr_edges_per_cell(nbr_cells))
3631 allocate(cell_to_edge(nbr_edges_per_cell_in,nbr_cells))
3632 allocate(edge_to_vertex(2,nbr_edges))
3633 nbr_edges_per_cell(:) = nbr_edges_per_cell_in
3634
3635 yac_fassert(all(cell_to_edge_in > 0), "ERROR(yac_fdef_grid_unstruct_edge_dble): all entries of cell_to_edge have to be > 0")
3636
3637 yac_fassert(all(cell_to_edge_in <= nbr_edges), "ERROR(yac_fdef_grid_unstruct_edge_dble): all entries of cell_to_edge have to be <= nbr_edges")
3638
3639 yac_fassert(all(edge_to_vertex_in > 0), "ERROR(yac_fdef_grid_unstruct_edge_dble): all entries of edge_to_vertex have to be > 0")
3640
3641 yac_fassert(all(edge_to_vertex_in <= nbr_vertices), "ERROR(yac_fdef_grid_unstruct_edge_dble): all entries of edge_to_vertex have to be <= nbr_vertices")
3642
3643 cell_to_edge(:,:) = cell_to_edge_in(:,:) - 1
3644 edge_to_vertex(:,:) = edge_to_vertex_in(:,:) - 1
3645
3646 if (present(use_ll_edges)) then
3647 use_ll_edges_ = use_ll_edges
3648 else
3649 use_ll_edges_ = .false.
3650 end if
3651
3652 if (use_ll_edges_) then
3653 call yac_cdef_grid_unstruct_edge_ll_c ( trim(grid_name) // c_null_char, &
3654 nbr_vertices, &
3655 nbr_cells, &
3656 nbr_edges, &
3657 nbr_edges_per_cell, &
3658 x_vertices, &
3659 y_vertices, &
3660 cell_to_edge, &
3661 edge_to_vertex, &
3662 grid_id )
3663 else
3664 call yac_cdef_grid_unstruct_edge_c ( trim(grid_name) // c_null_char, &
3665 nbr_vertices, &
3666 nbr_cells, &
3667 nbr_edges, &
3668 nbr_edges_per_cell, &
3669 x_vertices, &
3670 y_vertices, &
3671 cell_to_edge, &
3672 edge_to_vertex, &
3673 grid_id )
3674 end if
3675
3676 deallocate(nbr_edges_per_cell)
3677 deallocate(cell_to_edge)
3678 deallocate(edge_to_vertex)
3679
3681
3689subroutine yac_fdef_grid_curve2d_real ( grid_name, &
3690 nbr_vertices, &
3691 cyclic, &
3692 x_vertices_real, &
3693 y_vertices_real, &
3694 grid_id )
3695
3696 use yac, dummy => yac_fdef_grid_curve2d_real
3697
3698 implicit none
3699
3700 character(len=*), intent(in) :: grid_name
3701 integer, intent(in) :: nbr_vertices(2)
3702 integer, intent(in) :: cyclic(2)
3703 real, intent(in) :: &
3704 x_vertices_real(nbr_vertices(1),nbr_vertices(2))
3705 real, intent(in) :: &
3706 y_vertices_real(nbr_vertices(1),nbr_vertices(2))
3707 integer, intent(out) :: grid_id
3708
3709 double precision, allocatable :: x_vertices(:,:)
3710 double precision, allocatable :: y_vertices(:,:)
3711
3712 allocate(x_vertices(nbr_vertices(1),nbr_vertices(2)))
3713 allocate(y_vertices(nbr_vertices(1),nbr_vertices(2)))
3714 x_vertices(:,:) = dble(x_vertices_real(:,:))
3715 y_vertices(:,:) = dble(y_vertices_real(:,:))
3716
3717 call yac_fdef_grid_curve2d_dble ( grid_name, &
3718 nbr_vertices, &
3719 cyclic, &
3720 x_vertices, &
3721 y_vertices, &
3722 grid_id )
3723
3724 deallocate(x_vertices)
3725 deallocate(y_vertices)
3726
3727end subroutine yac_fdef_grid_curve2d_real
3728
3736subroutine yac_fdef_grid_curve2d_dble ( grid_name, &
3737 nbr_vertices, &
3738 cyclic, &
3739 x_vertices, &
3740 y_vertices, &
3741 grid_id )
3742
3743 use, intrinsic :: iso_c_binding, only : c_null_char
3744 use yac, dummy => yac_fdef_grid_curve2d_dble
3745
3746 implicit none
3747
3748 interface
3749
3750 subroutine yac_cdef_grid_curve2d_c ( grid_name, &
3751 nbr_vertices, &
3752 cyclic, &
3753 x_vertices, &
3754 y_vertices, &
3755 grid_id ) &
3756 bind( c, name='yac_cdef_grid_curve2d' )
3757
3758 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3759
3760 character ( kind=c_char ), dimension(*) :: grid_name
3761 integer ( kind=c_int ) :: nbr_vertices(2)
3762 integer ( kind=c_int ) :: cyclic(2)
3763 real ( kind=c_double ) :: x_vertices(nbr_vertices(1),nbr_vertices(2))
3764 real ( kind=c_double ) :: y_vertices(nbr_vertices(1),nbr_vertices(2))
3765 integer ( kind=c_int ) :: grid_id
3766
3767 end subroutine yac_cdef_grid_curve2d_c
3768
3769 end interface
3770
3771 character(len=*), intent(in) :: grid_name
3772 integer, intent(in) :: nbr_vertices(2)
3773 integer, intent(in) :: cyclic(2)
3774 double precision, intent(in) :: &
3775 x_vertices(nbr_vertices(1),nbr_vertices(2))
3776 double precision, intent(in) :: &
3777 y_vertices(nbr_vertices(1),nbr_vertices(2))
3778 integer, intent(out) :: grid_id
3779
3780 call yac_cdef_grid_curve2d_c ( trim(grid_name) // c_null_char, &
3781 nbr_vertices, &
3782 cyclic, &
3783 x_vertices, &
3784 y_vertices, &
3785 grid_id )
3786
3787end subroutine yac_fdef_grid_curve2d_dble
3788
3796subroutine yac_fdef_grid_reg2d_real ( grid_name, &
3797 nbr_vertices, &
3798 cyclic, &
3799 x_vertices_real, &
3800 y_vertices_real, &
3801 grid_id )
3802
3803 use yac, dummy => yac_fdef_grid_reg2d_real
3804
3805 implicit none
3806
3807 character(len=*), intent(in) :: grid_name
3808 integer, intent(in) :: nbr_vertices(2)
3809 integer, intent(in) :: cyclic(2)
3810 real, intent(in) :: x_vertices_real(nbr_vertices(1))
3811 real, intent(in) :: y_vertices_real(nbr_vertices(2))
3812 integer, intent(out) :: grid_id
3813
3814 double precision, allocatable :: x_vertices(:)
3815 double precision, allocatable :: y_vertices(:)
3816
3817 allocate(x_vertices(nbr_vertices(1)))
3818 allocate(y_vertices(nbr_vertices(2)))
3819 x_vertices(:) = dble(x_vertices_real(:))
3820 y_vertices(:) = dble(y_vertices_real(:))
3821
3822 call yac_fdef_grid_reg2d_dble ( grid_name, &
3823 nbr_vertices, &
3824 cyclic, &
3825 x_vertices, &
3826 y_vertices, &
3827 grid_id )
3828
3829 deallocate(x_vertices)
3830 deallocate(y_vertices)
3831
3832end subroutine yac_fdef_grid_reg2d_real
3833
3841subroutine yac_fdef_grid_reg2d_dble ( grid_name, &
3842 nbr_vertices, &
3843 cyclic, &
3844 x_vertices, &
3845 y_vertices, &
3846 grid_id )
3847
3848 use, intrinsic :: iso_c_binding, only : c_null_char
3849 use yac, dummy => yac_fdef_grid_reg2d_dble
3850
3851 implicit none
3852
3853 interface
3854
3855 subroutine yac_cdef_grid_reg2d_c ( grid_name, &
3856 nbr_vertices, &
3857 cyclic, &
3858 x_vertices, &
3859 y_vertices, &
3860 grid_id ) &
3861 bind( c, name='yac_cdef_grid_reg2d' )
3862
3863 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3864
3865 character ( kind=c_char ), dimension(*) :: grid_name
3866 integer ( kind=c_int ) :: nbr_vertices(2)
3867 integer ( kind=c_int ) :: cyclic(2)
3868 real ( kind=c_double ) :: x_vertices(nbr_vertices(1))
3869 real ( kind=c_double ) :: y_vertices(nbr_vertices(2))
3870 integer ( kind=c_int ) :: grid_id
3871
3872 end subroutine yac_cdef_grid_reg2d_c
3873
3874 end interface
3875
3876 character(len=*), intent(in) :: grid_name
3877 integer, intent(in) :: nbr_vertices(2)
3878 integer, intent(in) :: cyclic(2)
3879 double precision, intent(in) :: x_vertices(nbr_vertices(1))
3880 double precision, intent(in) :: y_vertices(nbr_vertices(2))
3881 integer, intent(out) :: grid_id
3882
3883 call yac_cdef_grid_reg2d_c ( trim(grid_name) // c_null_char, &
3884 nbr_vertices, &
3885 cyclic, &
3886 x_vertices, &
3887 y_vertices, &
3888 grid_id )
3889
3890end subroutine yac_fdef_grid_reg2d_dble
3891
3898subroutine yac_fdef_grid_cloud_real ( grid_name, &
3899 nbr_points, &
3900 x_points_real, &
3901 y_points_real, &
3902 grid_id)
3903
3904 use yac, dummy => yac_fdef_grid_cloud_real
3905
3906 implicit none
3907
3908 character(len=*), intent(in) :: grid_name
3909 integer, intent(in) :: nbr_points
3910 real, intent(in) :: x_points_real(nbr_points)
3911 real, intent(in) :: y_points_real(nbr_points)
3912 integer, intent(out) :: grid_id
3913
3914 double precision, allocatable :: x_points(:)
3915 double precision, allocatable :: y_points(:)
3916
3917 allocate(x_points(nbr_points))
3918 allocate(y_points(nbr_points))
3919 x_points(:) = dble(x_points_real(:))
3920 y_points(:) = dble(y_points_real(:))
3921
3922 call yac_fdef_grid_cloud_dble ( grid_name, &
3923 nbr_points, &
3924 x_points, &
3925 y_points, &
3926 grid_id )
3927
3928 deallocate(x_points)
3929 deallocate(y_points)
3930
3931end subroutine yac_fdef_grid_cloud_real
3932
3939subroutine yac_fdef_grid_cloud_dble ( grid_name, &
3940 nbr_points, &
3941 x_points, &
3942 y_points, &
3943 grid_id)
3944
3945 use, intrinsic :: iso_c_binding, only : c_null_char
3946 use yac, dummy => yac_fdef_grid_cloud_dble
3947
3948 implicit none
3949
3950 interface
3951
3952 subroutine yac_fdef_grid_cloud_c ( grid_name, &
3953 nbr_points, &
3954 x_points, &
3955 y_points, &
3956 grid_id ) &
3957 bind( c, name='yac_cdef_grid_cloud' )
3958
3959 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
3960
3961 character ( kind=c_char ), dimension(*) :: grid_name
3962 integer ( kind=c_int ), value :: nbr_points
3963 real ( kind=c_double ) :: x_points(nbr_points)
3964 real ( kind=c_double ) :: y_points(nbr_points)
3965 integer ( kind=c_int ) :: grid_id
3966
3967 end subroutine yac_fdef_grid_cloud_c
3968
3969 end interface
3970
3971 character(len=*), intent(in) :: grid_name
3972 integer, intent(in) :: nbr_points
3973 double precision, intent(in) :: x_points(nbr_points)
3974 double precision, intent(in) :: y_points(nbr_points)
3975 integer, intent(out) :: grid_id
3976
3977 call yac_fdef_grid_cloud_c ( trim(grid_name) // c_null_char, &
3978 nbr_points, &
3979 x_points, &
3980 y_points, &
3981 grid_id )
3982
3983end subroutine yac_fdef_grid_cloud_dble
3984
3994subroutine yac_fdef_grid_reg2d_rot_real ( grid_name, &
3995 nbr_vertices, &
3996 cyclic, &
3997 x_vertices_real, &
3998 y_vertices_real, &
3999 x_north_pole_real, &
4000 y_north_pole_real, &
4001 grid_id )
4002
4003 use yac, dummy => yac_fdef_grid_reg2d_rot_real
4004
4005 implicit none
4006
4007 character(len=*), intent(in) :: grid_name
4008 integer, intent(in) :: nbr_vertices(2)
4009 integer, intent(in) :: cyclic(2)
4010 real, intent(in) :: x_vertices_real(nbr_vertices(1))
4011 real, intent(in) :: y_vertices_real(nbr_vertices(2))
4012 real, intent(in) :: x_north_pole_real
4013 real, intent(in) :: y_north_pole_real
4014 integer, intent(out) :: grid_id
4015
4016 double precision, allocatable :: x_vertices(:)
4017 double precision, allocatable :: y_vertices(:)
4018 double precision :: x_north_pole
4019 double precision :: y_north_pole
4020
4021 allocate(x_vertices(nbr_vertices(1)))
4022 allocate(y_vertices(nbr_vertices(2)))
4023 x_vertices(:) = dble(x_vertices_real(:))
4024 y_vertices(:) = dble(y_vertices_real(:))
4025
4026 x_north_pole = dble(x_north_pole_real)
4027 y_north_pole = dble(y_north_pole_real)
4028
4029 call yac_fdef_grid_reg2d_rot_dble ( grid_name, &
4030 nbr_vertices, &
4031 cyclic, &
4032 x_vertices, &
4033 y_vertices, &
4034 x_north_pole, &
4035 y_north_pole, &
4036 grid_id )
4037
4038 deallocate(x_vertices)
4039 deallocate(y_vertices)
4040
4041end subroutine yac_fdef_grid_reg2d_rot_real
4042
4052subroutine yac_fdef_grid_reg2d_rot_dble ( grid_name, &
4053 nbr_vertices, &
4054 cyclic, &
4055 x_vertices, &
4056 y_vertices, &
4057 x_north_pole, &
4058 y_north_pole, &
4059 grid_id )
4060
4061 use, intrinsic :: iso_c_binding, only : c_null_char
4062 use yac, dummy => yac_fdef_grid_reg2d_rot_dble
4063
4064 implicit none
4065
4066 interface
4067
4068 subroutine yac_cdef_grid_reg2d_rot_c ( grid_name, &
4069 nbr_vertices, &
4070 cyclic, &
4071 x_vertices, &
4072 y_vertices, &
4073 x_north_pole, &
4074 y_north_pole, &
4075 grid_id ) &
4076 bind( c, name='yac_cdef_grid_reg2d_rot' )
4077
4078 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
4079
4080 character ( kind=c_char ), dimension(*) :: grid_name
4081 integer ( kind=c_int ) :: nbr_vertices(2)
4082 integer ( kind=c_int ) :: cyclic(2)
4083 real ( kind=c_double ) :: x_vertices(nbr_vertices(1))
4084 real ( kind=c_double ) :: y_vertices(nbr_vertices(2))
4085 real ( kind=c_double ), value :: x_north_pole
4086 real ( kind=c_double ), value :: y_north_pole
4087 integer ( kind=c_int ) :: grid_id
4088
4089 end subroutine yac_cdef_grid_reg2d_rot_c
4090
4091 end interface
4092
4093 character(len=*), intent(in) :: grid_name
4094 integer, intent(in) :: nbr_vertices(2)
4095 integer, intent(in) :: cyclic(2)
4096 double precision, intent(in) :: x_vertices(nbr_vertices(1))
4097 double precision, intent(in) :: y_vertices(nbr_vertices(2))
4098 double precision, intent(in) :: x_north_pole
4099 double precision, intent(in) :: y_north_pole
4100 integer, intent(out) :: grid_id
4101
4102 call yac_cdef_grid_reg2d_rot_c ( trim(grid_name) // c_null_char, &
4103 nbr_vertices, &
4104 cyclic, &
4105 x_vertices, &
4106 y_vertices, &
4107 x_north_pole, &
4108 y_north_pole, &
4109 grid_id )
4110
4111end subroutine yac_fdef_grid_reg2d_rot_dble
4112
4113! ------------------------- set global_index ------------------------------
4114
4115subroutine yac_fset_global_index ( global_index, &
4116 location, &
4117 grid_id )
4118
4119 use yac, dummy => yac_fset_global_index
4120
4121 implicit none
4122
4123 interface
4124
4125 subroutine yac_cset_global_index_c ( global_index, &
4126 location, &
4127 grid_id ) &
4128 bind( c, name='yac_cset_global_index' )
4129
4130 use, intrinsic :: iso_c_binding, only : c_int
4131
4132 integer ( kind=c_int ) :: global_index(*)
4133 integer ( kind=c_int ), value :: location
4134 integer ( kind=c_int ), value :: grid_id
4135
4136 end subroutine yac_cset_global_index_c
4137
4138 end interface
4139
4140 integer, intent(in) :: global_index(*)
4141 integer, intent(in) :: location
4142 integer, intent(in) :: grid_id
4143
4144 call yac_cset_global_index_c ( global_index, &
4145 location, &
4146 grid_id )
4147
4148end subroutine yac_fset_global_index
4149
4150subroutine yac_fset_global_index_yac_int ( global_index, &
4151 location, &
4152 grid_id )
4153
4155 use yac, only: yac_int_kind
4156
4157 implicit none
4158
4159 interface
4160
4161 subroutine yac_cset_global_index_yac_int_c ( global_index, &
4162 location, &
4163 grid_id ) &
4164 bind( c, name='yac_cset_global_index_yac_int' )
4165
4166 use, intrinsic :: iso_c_binding, only : c_int
4167 use yac, only: yac_int_kind
4168
4169 integer ( kind=YAC_INT_KIND ) :: global_index(*)
4170 integer ( kind=c_int ), value :: location
4171 integer ( kind=c_int ), value :: grid_id
4172
4173 end subroutine yac_cset_global_index_yac_int_c
4174
4175 end interface
4176
4177 integer(kind=YAC_INT_KIND), intent(in) :: global_index(*)
4178 integer, intent(in) :: location
4179 integer, intent(in) :: grid_id
4180
4181 call yac_cset_global_index_yac_int_c ( global_index, &
4182 location, &
4183 grid_id )
4184
4185end subroutine yac_fset_global_index_yac_int
4186
4187! ------------------------- set core_mask ------------------------------
4188
4189subroutine yac_fset_core_lmask ( is_core, &
4190 location, &
4191 grid_id )
4192
4193 use yac, dummy => yac_fset_core_lmask
4194 use, intrinsic :: iso_c_binding, only : c_size_t
4195
4196 implicit none
4197
4198 logical, intent(in) :: is_core(*)
4201 integer, intent(in) :: location
4202 integer, intent(in) :: grid_id
4203
4204 integer (kind=c_size_t) :: i, count
4205 integer, allocatable :: int_is_core(:)
4206
4207 interface
4208
4209 function yac_cget_grid_size_c ( location, &
4210 grid_id ) &
4211 result( grid_size ) &
4212 bind( c, name='yac_cget_grid_size' )
4213
4214 use, intrinsic :: iso_c_binding, only : c_int, c_size_t
4215
4216 integer ( kind=c_int ), value :: location
4217 integer ( kind=c_int ), value :: grid_id
4218 integer ( kind=c_size_t) :: grid_size
4219
4220 end function yac_cget_grid_size_c
4221
4222 end interface
4223
4224 count = yac_cget_grid_size_c(location, grid_id)
4225 allocate(int_is_core(count))
4226
4227 do i = 1, count
4228 if ( is_core(i) ) then
4229 int_is_core(i) = 1
4230 else
4231 int_is_core(i) = 0
4232 endif
4233 enddo
4234
4235 call yac_fset_core_imask ( int_is_core, &
4236 location, &
4237 grid_id )
4238
4239end subroutine yac_fset_core_lmask
4240
4241subroutine yac_fset_core_imask ( is_core, &
4242 location, &
4243 grid_id )
4244
4245 use yac, dummy => yac_fset_core_imask
4246
4247 implicit none
4248
4249 interface
4250
4251 subroutine yac_cset_core_mask_c ( mask, &
4252 location, &
4253 grid_id ) &
4254 bind( c, name='yac_cset_core_mask' )
4255
4256 use, intrinsic :: iso_c_binding, only : c_int
4257
4258 integer ( kind=c_int ) :: mask(*)
4259 integer ( kind=c_int ), value :: location
4260 integer ( kind=c_int ), value :: grid_id
4261
4262 end subroutine yac_cset_core_mask_c
4263
4264 end interface
4265
4266
4267 integer, intent(in) :: is_core(*)
4270 integer, intent(in) :: location
4271 integer, intent(in) :: grid_id
4272
4273 call yac_cset_core_mask_c ( is_core, &
4274 location, &
4275 grid_id )
4276
4277end subroutine yac_fset_core_imask
4278
4279! ------------------------- set_mask ------------------------------
4280
4281subroutine yac_fset_lmask ( is_valid, &
4282 points_id )
4283
4284 use yac, dummy => yac_fset_lmask
4285 use, intrinsic :: iso_c_binding, only : c_size_t
4286
4287 implicit none
4288
4289 logical, intent(in) :: is_valid(*)
4292 integer, intent(in) :: points_id
4293
4294 integer ( kind=c_size_t) :: i, count
4295 integer, allocatable :: int_is_valid(:)
4296
4297 interface
4298
4299 function yac_cget_points_size_c ( points_id ) &
4300 result( points_size ) &
4301 bind( c, name='yac_cget_points_size' )
4302
4303 use, intrinsic :: iso_c_binding, only : c_int, c_size_t
4304
4305 integer ( kind=c_int ), value :: points_id
4306 integer ( kind=c_size_t) :: points_size
4307
4308 end function yac_cget_points_size_c
4309
4310 end interface
4311
4312 count = yac_cget_points_size_c(points_id)
4313 allocate(int_is_valid(count))
4314
4315 do i = 1, count
4316 int_is_valid(i) = merge(1,0,is_valid(i))
4317 enddo
4318
4319 call yac_fset_imask ( int_is_valid, points_id )
4320
4321end subroutine yac_fset_lmask
4322
4323subroutine yac_fset_imask ( is_valid, &
4324 points_id )
4325
4326 use yac, dummy => yac_fset_imask
4327
4328 implicit none
4329
4330 interface
4331
4332 subroutine yac_cset_mask_c ( is_valid, &
4333 points_id ) &
4334 bind( c, name='yac_cset_mask' )
4335
4336 use, intrinsic :: iso_c_binding, only : c_int
4337
4338 integer ( kind=c_int ) :: is_valid(*)
4339 integer ( kind=c_int ), value :: points_id
4340
4341 end subroutine yac_cset_mask_c
4342
4343 end interface
4344
4345 integer, intent(in) :: is_valid(*)
4348 integer, intent(in) :: points_id
4349
4350 call yac_cset_mask_c ( is_valid, points_id )
4351
4352end subroutine yac_fset_imask
4353
4354! ------------------------- def_mask ------------------------------
4355
4356subroutine yac_fdef_lmask ( grid_id, &
4357 nbr_points, &
4358 location, &
4359 is_valid, &
4360 mask_id )
4361
4362 use yac, dummy => yac_fdef_lmask
4363
4364 implicit none
4365
4366 integer, intent(in) :: grid_id
4367 integer, intent(in) :: nbr_points
4368 integer, intent(in) :: location
4369 logical, intent(in) :: is_valid(*)
4372 integer, intent(out) :: mask_id
4373
4374 integer, allocatable :: int_is_valid(:)
4375
4376 allocate(int_is_valid(nbr_points))
4377 int_is_valid(:) = merge(1,0,is_valid(1:nbr_points))
4378
4379 call yac_fdef_imask ( grid_id, &
4380 nbr_points, &
4381 location, &
4382 int_is_valid, &
4383 mask_id )
4384
4385 deallocate(int_is_valid)
4386
4387end subroutine yac_fdef_lmask
4388
4389subroutine yac_fdef_imask ( grid_id, &
4390 nbr_points, &
4391 location, &
4392 is_valid, &
4393 mask_id )
4394
4395 use yac, dummy => yac_fdef_imask
4396
4397 implicit none
4398
4399 interface
4400
4401 subroutine yac_cdef_mask_c ( grid_id, &
4402 nbr_points, &
4403 location, &
4404 is_valid, &
4405 mask_id ) &
4406 bind( c, name='yac_cdef_mask' )
4407
4408 use, intrinsic :: iso_c_binding, only : c_int
4409
4410 integer ( kind=c_int ), value :: grid_id
4411 integer ( kind=c_int ), value :: nbr_points
4412 integer ( kind=c_int ), value :: location
4413 integer ( kind=c_int ) :: is_valid(*)
4414 integer ( kind=c_int ) :: mask_id
4415
4416 end subroutine yac_cdef_mask_c
4417
4418 end interface
4419
4420 integer, intent(in) :: grid_id
4421 integer, intent(in) :: nbr_points
4422 integer, intent(in) :: location
4423 integer, intent(in) :: is_valid(*)
4426 integer, intent(out) :: mask_id
4427
4428 call yac_cdef_mask_c ( grid_id, &
4429 nbr_points, &
4430 location, &
4431 is_valid, &
4432 mask_id )
4433
4434end subroutine yac_fdef_imask
4435
4436! ------------------------- def_mask_named ------------------------
4437
4438subroutine yac_fdef_lmask_named ( grid_id, &
4439 nbr_points, &
4440 location, &
4441 is_valid, &
4442 name, &
4443 mask_id )
4444
4445 use yac, dummy => yac_fdef_lmask_named
4446
4447 implicit none
4448
4449 integer, intent(in) :: grid_id
4450 integer, intent(in) :: nbr_points
4451 integer, intent(in) :: location
4452 logical, intent(in) :: is_valid(*)
4455 character(len=*), intent(in) :: name
4456 integer, intent(out) :: mask_id
4457
4458 integer, allocatable :: int_is_valid(:)
4459
4460 allocate(int_is_valid(nbr_points))
4461
4462 int_is_valid(:) = merge(1,0,is_valid(1:nbr_points))
4463
4464 call yac_fdef_imask_named ( grid_id, &
4465 nbr_points, &
4466 location, &
4467 int_is_valid, &
4468 name, &
4469 mask_id )
4470
4471 deallocate(int_is_valid)
4472
4473end subroutine yac_fdef_lmask_named
4474
4475subroutine yac_fdef_imask_named ( grid_id, &
4476 nbr_points, &
4477 location, &
4478 is_valid, &
4479 name, &
4480 mask_id )
4481
4482 use, intrinsic :: iso_c_binding, only : c_null_char
4483 use yac, dummy => yac_fdef_imask_named
4485
4486 implicit none
4487
4488 interface
4489
4490 subroutine yac_cdef_mask_named_c ( grid_id, &
4491 nbr_points, &
4492 location, &
4493 is_valid, &
4494 name, &
4495 mask_id ) &
4496 bind( c, name='yac_cdef_mask_named' )
4497
4498 use, intrinsic :: iso_c_binding, only : c_int, c_char
4499
4500 integer ( kind=c_int ), value :: grid_id
4501 integer ( kind=c_int ), value :: nbr_points
4502 integer ( kind=c_int ), value :: location
4503 integer ( kind=c_int ) :: is_valid(*)
4504 character ( kind=c_char ), dimension(*) :: name
4505 integer ( kind=c_int ) :: mask_id
4506
4507 end subroutine yac_cdef_mask_named_c
4508
4509 end interface
4510
4511 integer, intent(in) :: grid_id
4512 integer, intent(in) :: nbr_points
4513 integer, intent(in) :: location
4514 integer, intent(in) :: is_valid(*)
4517 character(len=*), intent(in) :: name
4518 integer, intent(out) :: mask_id
4519
4520 yac_check_string_len( "yac_fdef_imask_named", name )
4521
4522 call yac_cdef_mask_named_c ( grid_id, &
4523 nbr_points, &
4524 location, &
4525 is_valid, &
4526 trim(name) // c_null_char, &
4527 mask_id )
4528
4529end subroutine yac_fdef_imask_named
4530
4531! ----------------------------- def_field -------------------------------
4532
4533subroutine yac_fdef_field ( field_name, &
4534 component_id, &
4535 point_ids, &
4536 num_pointsets, &
4537 collection_size, &
4538 timestep, &
4539 time_unit, &
4540 field_id )
4541
4542 use, intrinsic :: iso_c_binding, only : c_null_char
4543 use yac, dummy => yac_fdef_field
4545
4546 implicit none
4547
4548 interface
4549
4550 subroutine yac_cdef_field_c ( field_name, &
4551 component_id, &
4552 point_ids, &
4553 num_pointsets, &
4554 collection_size, &
4555 timestep, &
4556 time_unit, &
4557 field_id ) &
4558 bind( c, name='yac_cdef_field' )
4559
4560 use, intrinsic :: iso_c_binding, only : c_int, c_char
4561
4562 character ( kind=c_char ), dimension(*) :: field_name
4563 integer ( kind=c_int ), value :: component_id
4564 integer ( kind=c_int ) :: point_ids(*)
4565 integer ( kind=c_int ), value :: num_pointsets
4566 integer ( kind=c_int ), value :: collection_size
4567 character ( kind=c_char ), dimension(*) :: timestep
4568 integer ( kind=c_int ), value :: time_unit
4569 integer ( kind=c_int ) :: field_id
4570
4571 end subroutine yac_cdef_field_c
4572
4573 end interface
4574
4575 !
4576 ! Definition of coupling fields
4577 !
4578 character(len=*), intent (in) :: field_name
4579 integer, intent (in) :: component_id
4580 integer, intent (in) :: point_ids(*)
4581 integer, intent (in) :: num_pointsets
4582 integer, intent (in) :: collection_size
4583 character(len=*), intent (in) :: timestep
4584 integer, intent (in) :: time_unit
4585 integer, intent (out) :: field_id
4586
4587 yac_check_string_len( "yac_fdef_field", field_name )
4588 yac_check_string_len( "yac_fdef_field", timestep )
4589
4590
4591 call yac_cdef_field_c ( trim(field_name) // c_null_char, &
4592 component_id, &
4593 point_ids, &
4594 num_pointsets, &
4595 collection_size, &
4596 trim(timestep) // c_null_char, &
4597 time_unit, &
4598 field_id )
4599
4600end subroutine yac_fdef_field
4601
4602! ----------------------------- def_field_mask---------------------------
4603
4604subroutine yac_fdef_field_mask ( field_name, &
4605 component_id, &
4606 point_ids, &
4607 mask_ids, &
4608 num_pointsets, &
4609 collection_size, &
4610 timestep, &
4611 time_unit, &
4612 field_id )
4613
4614 use, intrinsic :: iso_c_binding, only : c_null_char
4615 use yac, dummy => yac_fdef_field_mask
4617
4618 implicit none
4619
4620 interface
4621
4622 subroutine yac_cdef_field_mask_c ( field_name, &
4623 component_id, &
4624 point_ids, &
4625 mask_ids, &
4626 num_pointsets, &
4627 collection_size, &
4628 timestep, &
4629 time_unit, &
4630 field_id ) &
4631 bind( c, name='yac_cdef_field_mask' )
4632
4633 use, intrinsic :: iso_c_binding, only : c_int, c_char
4634
4635 character ( kind=c_char ), dimension(*) :: field_name
4636 integer ( kind=c_int ), value :: component_id
4637 integer ( kind=c_int ) :: point_ids(*)
4638 integer ( kind=c_int ) :: mask_ids(*)
4639 integer ( kind=c_int ), value :: num_pointsets
4640 integer ( kind=c_int ), value :: collection_size
4641 character ( kind=c_char ), dimension(*) :: timestep
4642 integer ( kind=c_int ), value :: time_unit
4643 integer ( kind=c_int ) :: field_id
4644
4645 end subroutine yac_cdef_field_mask_c
4646
4647 end interface
4648
4649
4650 !
4651 ! Definition of coupling fields
4652 !
4653 character(len=*), intent (in) :: field_name
4654 integer, intent (in) :: component_id
4655 integer, intent (in) :: point_ids(*)
4656 integer, intent (in) :: mask_ids(*)
4657 integer, intent (in) :: num_pointsets
4658 integer, intent (in) :: collection_size
4659 character(len=*), intent (in) :: timestep
4660 integer, intent (in) :: time_unit
4661 integer, intent (out) :: field_id
4662
4663 yac_check_string_len( "yac_fdef_field_mask", field_name )
4664 yac_check_string_len( "yac_fdef_field_mask", timestep )
4665
4666 call yac_cdef_field_mask_c ( trim(field_name) // c_null_char, &
4667 component_id, &
4668 point_ids, &
4669 mask_ids, &
4670 num_pointsets, &
4671 collection_size, &
4672 trim(timestep) // c_null_char, &
4673 time_unit, &
4674 field_id )
4675
4676end subroutine yac_fdef_field_mask
4677
4678! -----------------------------------------------------------------------
4679
4680subroutine yac_fcheck_field_dimensions( field_id, &
4681 collection_size, &
4682 num_interp_fields, &
4683 interp_field_sizes )
4684
4685 use yac, dummy => yac_fcheck_field_dimensions
4686
4687 implicit none
4688
4689 interface
4690
4691 subroutine yac_ccheck_field_dimensions_c ( field_id, &
4692 collection_size, &
4693 num_interp_fields, &
4694 interp_field_sizes ) &
4695 bind( c, name='yac_ccheck_field_dimensions' )
4696
4697 use, intrinsic :: iso_c_binding, only : c_int
4698
4699 integer ( kind=c_int ), value :: field_id
4700 integer ( kind=c_int ), value :: collection_size
4701 integer ( kind=c_int ), value :: num_interp_fields
4702 integer ( kind=c_int ), dimension(*) :: interp_field_sizes
4703
4704 end subroutine yac_ccheck_field_dimensions_c
4705
4706 end interface
4707
4708 integer, intent (in) :: field_id
4709 integer, intent (in) :: collection_size
4710 integer, intent (in) :: num_interp_fields
4712 integer, intent (in) :: interp_field_sizes(num_interp_fields)
4714
4715 call yac_ccheck_field_dimensions_c(field_id, &
4716 collection_size, &
4717 num_interp_fields, &
4718 interp_field_sizes)
4719
4720end subroutine yac_fcheck_field_dimensions
4721
4723 collection_size, &
4724 src_field_buffer_size )
4725
4727
4728 implicit none
4729
4730 interface
4731
4732 subroutine yac_ccheck_src_field_buffer_size_c ( field_id, &
4733 collection_size, &
4734 src_field_buffer_size ) &
4735 bind( c, name='yac_ccheck_src_field_buffer_size' )
4736
4737 use, intrinsic :: iso_c_binding, only : c_int
4738
4739 integer ( kind=c_int ), value :: field_id
4740 integer ( kind=c_int ), value :: collection_size
4741 integer ( kind=c_int ), value :: src_field_buffer_size
4742
4743 end subroutine yac_ccheck_src_field_buffer_size_c
4744
4745 end interface
4746
4747 integer, intent (in) :: field_id
4748 integer, intent (in) :: collection_size
4749 integer, intent (in) :: src_field_buffer_size
4751
4752 call yac_ccheck_src_field_buffer_size_c(field_id, &
4753 collection_size, &
4754 src_field_buffer_size)
4755
4757
4759 num_src_fields, &
4760 collection_size, &
4761 src_field_buffer_sizes )
4762
4764
4765 implicit none
4766
4767 interface
4768
4769 subroutine yac_ccheck_src_field_buffer_sizes_c ( field_id, &
4770 num_src_fields, &
4771 collection_size, &
4772 src_field_buffer_sizes ) &
4773 bind( c, name='yac_ccheck_src_field_buffer_sizes' )
4774
4775 use, intrinsic :: iso_c_binding, only : c_int
4776
4777 integer ( kind=c_int ), value :: field_id
4778 integer ( kind=c_int ), value :: num_src_fields
4779 integer ( kind=c_int ), value :: collection_size
4780 integer ( kind=c_int ) :: src_field_buffer_sizes(*)
4781
4782 end subroutine yac_ccheck_src_field_buffer_sizes_c
4783
4784 end interface
4785
4786 integer, intent (in) :: field_id
4787 integer, intent (in) :: num_src_fields
4788 integer, intent (in) :: collection_size
4789 integer, intent (in) :: src_field_buffer_sizes(num_src_fields)
4790
4792
4793 call yac_ccheck_src_field_buffer_sizes_c(field_id, &
4794 num_src_fields, &
4795 collection_size, &
4796 src_field_buffer_sizes)
4797
4799
4800! -----------------------------------------------------------------------
4801
4803 field_id, &
4804 frac_mask_fallback_value, &
4805 scaling_factor, &
4806 scaling_summand, &
4807 num_fixed_values, &
4808 fixed_values, &
4809 num_tgt_per_fixed_value, &
4810 tgt_idx_fixed, &
4811 num_wgt_tgt, &
4812 wgt_tgt_idx, &
4813 num_src_per_tgt, &
4814 weights, &
4815 src_field_idx, &
4816 src_idx, &
4817 num_src_fields, &
4818 src_field_buffer_size )
4819
4821
4822 use, intrinsic :: iso_c_binding, only : &
4823 c_int, c_size_t, c_double, c_ptr, c_f_pointer
4824
4825 implicit none
4826
4827 integer, intent (in) :: field_id
4828 double precision, intent(out) :: frac_mask_fallback_value
4829 double precision, intent(out) :: scaling_factor
4830 double precision, intent(out) :: scaling_summand
4831 integer, intent(out) :: num_fixed_values
4832 double precision, allocatable, intent(out) :: fixed_values(:)
4833 integer, allocatable, intent(out) :: num_tgt_per_fixed_value(:)
4834 integer, allocatable, intent(out) :: tgt_idx_fixed(:)
4835 integer, intent(out) :: num_wgt_tgt
4836 integer, allocatable, intent(out) :: wgt_tgt_idx(:)
4837 integer, allocatable, intent(out) :: num_src_per_tgt(:)
4838 double precision, allocatable, intent(out) :: weights(:)
4839 integer, allocatable, intent(out) :: src_field_idx(:)
4840 integer, allocatable, intent(out) :: src_idx(:)
4841 integer, intent(out) :: num_src_fields
4842 integer, allocatable, intent(out) :: src_field_buffer_size(:)
4843
4844 integer :: total_num_fixed_tgt, total_num_weights
4845
4846 real (kind=c_double) :: frac_mask_fallback_value_c
4847 real (kind=c_double) :: scaling_factor_c
4848 real (kind=c_double) :: scaling_summand_c
4849 integer ( kind=c_size_t ) :: num_fixed_values_c
4850 real (kind=c_double), pointer :: fixed_values_c(:)
4851 integer ( kind=c_size_t ), pointer :: num_tgt_per_fixed_value_c(:)
4852 integer ( kind=c_size_t ), pointer :: tgt_idx_fixed_c(:)
4853 integer(kind=c_size_t) :: num_wgt_tgt_c
4854 integer ( kind=c_size_t ), pointer :: wgt_tgt_idx_c(:)
4855 integer ( kind=c_size_t ), pointer :: num_src_per_tgt_c(:)
4856 real (kind=c_double), pointer :: weights_c(:)
4857 integer ( kind=c_size_t ), pointer :: src_field_idx_c(:)
4858 integer ( kind=c_size_t ), pointer :: src_idx_c(:)
4859 integer ( kind=c_size_t ) :: num_src_fields_c
4860 integer ( kind=c_size_t ), pointer :: src_field_buffer_size_c(:)
4861
4862 type(c_ptr) :: fixed_values_c_ptr
4863 type(c_ptr) :: num_tgt_per_fixed_value_c_ptr
4864 type(c_ptr) :: tgt_idx_fixed_c_ptr
4865 type(c_ptr) :: wgt_tgt_idx_c_ptr
4866 type(c_ptr) :: num_src_per_tgt_c_ptr
4867 type(c_ptr) :: weights_c_ptr
4868 type(c_ptr) :: src_field_idx_c_ptr
4869 type(c_ptr) :: src_idx_c_ptr
4870 type(c_ptr) :: src_field_buffer_size_c_ptr
4871
4872 interface
4873
4874 subroutine yac_cget_raw_interp_weights_data_c ( &
4875 field_id, &
4876 frac_mask_fallback_value, &
4877 scaling_factor, &
4878 scaling_summand, &
4879 num_fixed_values, &
4880 fixed_values, &
4881 num_tgt_per_fixed_value, &
4882 tgt_idx_fixed, &
4883 num_wgt_tgt, &
4884 wgt_tgt_idx, &
4885 num_src_per_tgt, &
4886 weights, &
4887 src_field_idx, &
4888 src_idx, &
4889 num_src_fields, &
4890 src_field_buffer_size ) &
4891 bind( c, name='yac_cget_raw_interp_weights_data' )
4892
4893 use, intrinsic :: iso_c_binding, only : c_int, c_size_t, c_double, c_ptr
4894
4895 integer ( kind=c_int ), value :: field_id
4896 real (kind=c_double), intent(out) :: frac_mask_fallback_value
4897 real (kind=c_double), intent(out) :: scaling_factor
4898 real (kind=c_double), intent(out) :: scaling_summand
4899 integer(kind=c_size_t), intent(out) :: num_fixed_values
4900 type(c_ptr), intent(out) :: fixed_values
4901 type(c_ptr), intent(out) :: num_tgt_per_fixed_value
4902 type(c_ptr), intent(out) :: tgt_idx_fixed
4903 integer(kind=c_size_t), intent(out) :: num_wgt_tgt
4904 type(c_ptr), intent(out) :: wgt_tgt_idx
4905 type(c_ptr), intent(out) :: num_src_per_tgt
4906 type(c_ptr), intent(out) :: weights
4907 type(c_ptr), intent(out) :: src_field_idx
4908 type(c_ptr), intent(out) :: src_idx
4909 integer(kind=c_size_t), intent(out) :: num_src_fields
4910 type(c_ptr), intent(out) :: src_field_buffer_size
4911
4912 end subroutine yac_cget_raw_interp_weights_data_c
4913
4914 subroutine free_c ( ptr ) bind ( c, NAME='free' )
4915
4916 use, intrinsic :: iso_c_binding, only : c_ptr
4917
4918 type ( c_ptr ), intent(in), value :: ptr
4919
4920 end subroutine free_c
4921
4922 end interface
4923
4924 ! get interpolation weight data through C interface
4925 CALL yac_cget_raw_interp_weights_data_c ( &
4926 int(field_id, c_int), &
4927 frac_mask_fallback_value_c, &
4928 scaling_factor_c, &
4929 scaling_summand_c, &
4930 num_fixed_values_c, &
4931 fixed_values_c_ptr, &
4932 num_tgt_per_fixed_value_c_ptr, &
4933 tgt_idx_fixed_c_ptr, &
4934 num_wgt_tgt_c, &
4935 wgt_tgt_idx_c_ptr, &
4936 num_src_per_tgt_c_ptr, &
4937 weights_c_ptr, &
4938 src_field_idx_c_ptr, &
4939 src_idx_c_ptr, &
4940 num_src_fields_c, &
4941 src_field_buffer_size_c_ptr )
4942
4943 call c_f_pointer( &
4944 fixed_values_c_ptr, fixed_values_c, [int(num_fixed_values_c)])
4945 call c_f_pointer( &
4946 num_tgt_per_fixed_value_c_ptr, num_tgt_per_fixed_value_c, &
4947 [int(num_fixed_values_c)])
4948 total_num_fixed_tgt = int(sum(num_tgt_per_fixed_value_c))
4949 call c_f_pointer( &
4950 tgt_idx_fixed_c_ptr, tgt_idx_fixed_c, [int(total_num_fixed_tgt)])
4951
4952 call c_f_pointer( &
4953 wgt_tgt_idx_c_ptr, wgt_tgt_idx_c, [int(num_wgt_tgt_c)])
4954 call c_f_pointer( &
4955 num_src_per_tgt_c_ptr, num_src_per_tgt_c, [int(num_wgt_tgt_c)])
4956 total_num_weights = int(sum(num_src_per_tgt_c))
4957 call c_f_pointer( &
4958 weights_c_ptr, weights_c, [int(total_num_weights)])
4959 call c_f_pointer( &
4960 src_field_idx_c_ptr, src_field_idx_c, [int(total_num_weights)])
4961 call c_f_pointer( &
4962 src_idx_c_ptr, src_idx_c, [int(total_num_weights)])
4963
4964 call c_f_pointer( &
4965 src_field_buffer_size_c_ptr, src_field_buffer_size_c, &
4966 [int(num_src_fields_c)])
4967
4968 ! convert C to Fortran data
4969 frac_mask_fallback_value = dble(frac_mask_fallback_value_c)
4970 scaling_factor = dble(scaling_factor_c)
4971 scaling_summand = dble(scaling_summand_c)
4972 num_fixed_values = int(num_fixed_values_c)
4973 allocate(fixed_values, source=dble(fixed_values_c))
4974 allocate(num_tgt_per_fixed_value, source=int(num_tgt_per_fixed_value_c))
4975 allocate(tgt_idx_fixed, source=int(tgt_idx_fixed_c)+1)
4976 num_wgt_tgt = int(num_wgt_tgt_c)
4977 allocate(wgt_tgt_idx, source=int(wgt_tgt_idx_c)+1)
4978 allocate(num_src_per_tgt, source=int(num_src_per_tgt_c))
4979 allocate(weights, source=dble(weights_c))
4980 allocate(src_field_idx, source=int(src_field_idx_c)+1)
4981 allocate(src_idx, source=int(src_idx_c)+1)
4982 num_src_fields = int(num_src_fields_c)
4983 allocate(src_field_buffer_size, source=int(src_field_buffer_size_c))
4984
4985 ! free C arrays
4986 CALL free_c(fixed_values_c_ptr)
4987 CALL free_c(num_tgt_per_fixed_value_c_ptr)
4988 CALL free_c(tgt_idx_fixed_c_ptr)
4989 CALL free_c(wgt_tgt_idx_c_ptr)
4990 CALL free_c(num_src_per_tgt_c_ptr)
4991 CALL free_c(weights_c_ptr)
4992 CALL free_c(src_field_idx_c_ptr)
4993 CALL free_c(src_idx_c_ptr)
4994 CALL free_c(src_field_buffer_size_c_ptr)
4995
4997
4999 field_id, &
5000 frac_mask_fallback_value, &
5001 scaling_factor, &
5002 scaling_summand, &
5003 num_fixed_values, &
5004 fixed_values, &
5005 num_tgt_per_fixed_value, &
5006 tgt_idx_fixed, &
5007 src_indptr, &
5008 weights, &
5009 src_field_idx, &
5010 src_idx, &
5011 num_src_fields, &
5012 src_field_buffer_size )
5013
5015
5016 use, intrinsic :: iso_c_binding, only : &
5017 c_int, c_size_t, c_double, c_ptr, c_f_pointer
5018
5019 implicit none
5020
5021 integer, intent (in) :: field_id
5022 double precision, intent(out) :: frac_mask_fallback_value
5023 double precision, intent(out) :: scaling_factor
5024 double precision, intent(out) :: scaling_summand
5025 integer, intent(out) :: num_fixed_values
5026 double precision, allocatable, intent(out) :: fixed_values(:)
5027 integer, allocatable, intent(out) :: num_tgt_per_fixed_value(:)
5028 integer, allocatable, intent(out) :: tgt_idx_fixed(:)
5029 integer, allocatable, intent(out) :: src_indptr(:)
5030 double precision, allocatable, intent(out) :: weights(:)
5031 integer, allocatable, intent(out) :: src_field_idx(:)
5032 integer, allocatable, intent(out) :: src_idx(:)
5033 integer, intent(out) :: num_src_fields
5034 integer, allocatable, intent(out) :: src_field_buffer_size(:)
5035
5036 integer :: total_num_fixed_tgt, total_num_weights
5037
5038 real (kind=c_double) :: frac_mask_fallback_value_c
5039 real (kind=c_double) :: scaling_factor_c
5040 real (kind=c_double) :: scaling_summand_c
5041 integer ( kind=c_size_t ) :: num_fixed_values_c
5042 real (kind=c_double), pointer :: fixed_values_c(:)
5043 integer ( kind=c_size_t ), pointer :: num_tgt_per_fixed_value_c(:)
5044 integer ( kind=c_size_t ), pointer :: tgt_idx_fixed_c(:)
5045 integer ( kind=c_size_t ), pointer :: src_indptr_c(:)
5046 real (kind=c_double), pointer :: weights_c(:)
5047 integer ( kind=c_size_t ), pointer :: src_field_idx_c(:)
5048 integer ( kind=c_size_t ), pointer :: src_idx_c(:)
5049 integer ( kind=c_size_t ) :: num_src_fields_c
5050 integer ( kind=c_size_t ), pointer :: src_field_buffer_size_c(:)
5051 integer ( kind=c_size_t ) :: tgt_field_data_size_c
5052
5053 type(c_ptr) :: fixed_values_c_ptr
5054 type(c_ptr) :: num_tgt_per_fixed_value_c_ptr
5055 type(c_ptr) :: tgt_idx_fixed_c_ptr
5056 type(c_ptr) :: src_indptr_c_ptr
5057 type(c_ptr) :: weights_c_ptr
5058 type(c_ptr) :: src_field_idx_c_ptr
5059 type(c_ptr) :: src_idx_c_ptr
5060 type(c_ptr) :: src_field_buffer_size_c_ptr
5061
5062 interface
5063
5064 subroutine yac_cget_raw_interp_weights_data_csr_c2f_c ( &
5065 field_id, &
5066 frac_mask_fallback_value, &
5067 scaling_factor, &
5068 scaling_summand, &
5069 num_fixed_values, &
5070 fixed_values, &
5071 num_tgt_per_fixed_value, &
5072 tgt_idx_fixed, &
5073 src_indptr, &
5074 weights, &
5075 src_field_idx, &
5076 src_idx, &
5077 num_src_fields, &
5078 src_field_buffer_size, &
5079 tgt_field_data_size) &
5080 bind( c, name='yac_cget_raw_interp_weights_data_csr_c2f' )
5081
5082 use, intrinsic :: iso_c_binding, only : c_int, c_size_t, c_double, c_ptr
5083
5084 integer ( kind=c_int ), value :: field_id
5085 real (kind=c_double), intent(out) :: frac_mask_fallback_value
5086 real (kind=c_double), intent(out) :: scaling_factor
5087 real (kind=c_double), intent(out) :: scaling_summand
5088 integer(kind=c_size_t), intent(out) :: num_fixed_values
5089 type(c_ptr), intent(out) :: fixed_values
5090 type(c_ptr), intent(out) :: num_tgt_per_fixed_value
5091 type(c_ptr), intent(out) :: tgt_idx_fixed
5092 type(c_ptr), intent(out) :: src_indptr
5093 type(c_ptr), intent(out) :: weights
5094 type(c_ptr), intent(out) :: src_field_idx
5095 type(c_ptr), intent(out) :: src_idx
5096 integer(kind=c_size_t), intent(out) :: num_src_fields
5097 type(c_ptr), intent(out) :: src_field_buffer_size
5098 integer(kind=c_size_t), intent(out) :: tgt_field_data_size
5099
5100 end subroutine yac_cget_raw_interp_weights_data_csr_c2f_c
5101
5102 subroutine free_c ( ptr ) bind ( c, NAME='free' )
5103
5104 use, intrinsic :: iso_c_binding, only : c_ptr
5105
5106 type ( c_ptr ), intent(in), value :: ptr
5107
5108 end subroutine free_c
5109
5110 end interface
5111
5112 ! get interpolation weight data through C interface
5113 CALL yac_cget_raw_interp_weights_data_csr_c2f_c ( &
5114 int(field_id, c_int), &
5115 frac_mask_fallback_value_c, &
5116 scaling_factor_c, &
5117 scaling_summand_c, &
5118 num_fixed_values_c, &
5119 fixed_values_c_ptr, &
5120 num_tgt_per_fixed_value_c_ptr, &
5121 tgt_idx_fixed_c_ptr, &
5122 src_indptr_c_ptr, &
5123 weights_c_ptr, &
5124 src_field_idx_c_ptr, &
5125 src_idx_c_ptr, &
5126 num_src_fields_c, &
5127 src_field_buffer_size_c_ptr, &
5128 tgt_field_data_size_c)
5129
5130 call c_f_pointer( &
5131 fixed_values_c_ptr, fixed_values_c, [int(num_fixed_values_c)])
5132 call c_f_pointer( &
5133 num_tgt_per_fixed_value_c_ptr, num_tgt_per_fixed_value_c, &
5134 [int(num_fixed_values_c)])
5135 total_num_fixed_tgt = int(sum(num_tgt_per_fixed_value_c))
5136 call c_f_pointer( &
5137 tgt_idx_fixed_c_ptr, tgt_idx_fixed_c, [int(total_num_fixed_tgt)])
5138
5139 call c_f_pointer( &
5140 src_indptr_c_ptr, src_indptr_c, [int(tgt_field_data_size_c+1)])
5141 total_num_weights = int(src_indptr_c(tgt_field_data_size_c+1))
5142 call c_f_pointer( &
5143 weights_c_ptr, weights_c, [int(total_num_weights)])
5144 call c_f_pointer( &
5145 src_field_idx_c_ptr, src_field_idx_c, [int(total_num_weights)])
5146 call c_f_pointer( &
5147 src_idx_c_ptr, src_idx_c, [int(total_num_weights)])
5148
5149 call c_f_pointer( &
5150 src_field_buffer_size_c_ptr, src_field_buffer_size_c, &
5151 [int(num_src_fields_c)])
5152
5153 ! convert C to Fortran data
5154 frac_mask_fallback_value = dble(frac_mask_fallback_value_c)
5155 scaling_factor = dble(scaling_factor_c)
5156 scaling_summand = dble(scaling_summand_c)
5157 num_fixed_values = int(num_fixed_values_c)
5158 allocate(fixed_values, source=dble(fixed_values_c))
5159 allocate(num_tgt_per_fixed_value, source=int(num_tgt_per_fixed_value_c))
5160 allocate(tgt_idx_fixed, source=int(tgt_idx_fixed_c)+1)
5161 allocate(src_indptr, source=int(src_indptr_c)+1)
5162 allocate(weights, source=dble(weights_c))
5163 allocate(src_field_idx, source=int(src_field_idx_c)+1)
5164 allocate(src_idx, source=int(src_idx_c)+1)
5165 num_src_fields = int(num_src_fields_c)
5166 allocate(src_field_buffer_size, source=int(src_field_buffer_size_c))
5167
5168 ! free C arrays
5169 CALL free_c(fixed_values_c_ptr)
5170 CALL free_c(num_tgt_per_fixed_value_c_ptr)
5171 CALL free_c(tgt_idx_fixed_c_ptr)
5172 CALL free_c(src_indptr_c_ptr)
5173 CALL free_c(weights_c_ptr)
5174 CALL free_c(src_field_idx_c_ptr)
5175 CALL free_c(src_idx_c_ptr)
5176 CALL free_c(src_field_buffer_size_c_ptr)
5177
5179
5180! ---------------------------------- put --------------------------------
5189subroutine yac_fput_real ( field_id, &
5190 nbr_hor_points, &
5191 nbr_pointsets, &
5192 collection_size, &
5193 send_field, &
5194 info, &
5195 ierror )
5196
5197 use yac, dummy => yac_fput_real
5199
5200 implicit none
5201
5202 integer, intent (in) :: field_id
5203 integer, intent (in) :: nbr_hor_points
5204 integer, intent (in) :: nbr_pointsets
5205 integer, intent (in) :: collection_size
5206 real, intent (in) :: send_field(nbr_hor_points, &
5207 nbr_pointsets, &
5208 collection_size)
5209 integer, intent (out) :: info
5210 integer, intent (out) :: ierror
5211
5212 double precision, allocatable :: send_field_dble(:,:,:)
5213 integer :: i
5214
5215 allocate(send_field_dble(nbr_hor_points, &
5216 nbr_pointsets, &
5217 collection_size))
5219 field_id, collection_size, nbr_pointsets, &
5220 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
5221
5222 call send_field_to_dble(field_id, &
5223 nbr_hor_points, &
5224 nbr_pointsets, &
5225 collection_size, &
5226 send_field, &
5227 send_field_dble)
5228
5229 call yac_fput_dble ( field_id, &
5230 nbr_hor_points, &
5231 nbr_pointsets, &
5232 collection_size, &
5233 send_field_dble, &
5234 info, &
5235 ierror )
5236
5237 deallocate(send_field_dble)
5238
5239end subroutine yac_fput_real
5240
5250subroutine yac_fput_frac_real ( field_id, &
5251 nbr_hor_points, &
5252 nbr_pointsets, &
5253 collection_size, &
5254 send_field, &
5255 send_frac_mask, &
5256 info, &
5257 ierror )
5258
5259 use yac, dummy => yac_fput_frac_real
5261
5262 implicit none
5263
5264 integer, intent (in) :: field_id
5265 integer, intent (in) :: nbr_hor_points
5266 integer, intent (in) :: nbr_pointsets
5267 integer, intent (in) :: collection_size
5268 real, intent (in) :: send_field(nbr_hor_points, &
5269 nbr_pointsets, &
5270 collection_size)
5271 real, intent (in) :: send_frac_mask(nbr_hor_points, &
5272 nbr_pointsets, &
5273 collection_size)
5274 integer, intent (out) :: info
5275 integer, intent (out) :: ierror
5276
5277 double precision, allocatable :: send_field_dble(:,:,:)
5278 double precision, allocatable :: send_frac_mask_dble(:,:,:)
5279 integer :: i
5280
5281 allocate(send_field_dble(nbr_hor_points, &
5282 nbr_pointsets, &
5283 collection_size))
5284 allocate(send_frac_mask_dble(nbr_hor_points, &
5285 nbr_pointsets, &
5286 collection_size))
5288 field_id, collection_size, nbr_pointsets, &
5289 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
5290
5291 call send_field_to_dble(field_id, &
5292 nbr_hor_points, &
5293 nbr_pointsets, &
5294 collection_size, &
5295 send_field, &
5296 send_field_dble, &
5297 send_frac_mask, &
5298 send_frac_mask_dble)
5299
5300 call yac_fput_frac_dble ( field_id, &
5301 nbr_hor_points, &
5302 nbr_pointsets, &
5303 collection_size, &
5304 send_field_dble, &
5305 send_frac_mask_dble, &
5306 info, &
5307 ierror )
5308
5309 deallocate(send_field_dble)
5310 deallocate(send_frac_mask_dble)
5311
5312end subroutine yac_fput_frac_real
5313
5321subroutine yac_fput_real_ptr ( field_id, &
5322 nbr_pointsets, &
5323 collection_size, &
5324 send_field, &
5325 info, &
5326 ierror )
5327
5328 use yac, dummy => yac_fput_real_ptr
5330
5331 implicit none
5332
5333 integer, intent (in) :: field_id
5334 integer, intent (in) :: nbr_pointsets
5335 integer, intent (in) :: collection_size
5336 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
5337 collection_size)
5338 integer, intent (out) :: info
5339 integer, intent (out) :: ierror
5340
5341 integer :: i, j
5342 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
5343
5344 allocate(send_field_dble(nbr_pointsets, collection_size))
5346 field_id, collection_size, nbr_pointsets, &
5347 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
5348
5349 call send_field_to_dble_ptr(field_id, &
5350 nbr_pointsets, &
5351 collection_size, &
5352 send_field, &
5353 send_field_dble)
5354
5355 call yac_fput_dble_ptr ( field_id, &
5356 nbr_pointsets, &
5357 collection_size, &
5358 send_field_dble, &
5359 info, &
5360 ierror )
5361
5362 do i = 1, collection_size
5363 do j = 1, nbr_pointsets
5364 deallocate(send_field_dble(j, i)%p)
5365 end do
5366 end do
5367
5368 deallocate(send_field_dble)
5369
5370end subroutine yac_fput_real_ptr
5371
5380subroutine yac_fput_frac_real_ptr ( field_id, &
5381 nbr_pointsets, &
5382 collection_size, &
5383 send_field, &
5384 send_frac_mask, &
5385 info, &
5386 ierror )
5387
5388 use yac, dummy => yac_fput_frac_real_ptr
5390
5391 implicit none
5392
5393 integer, intent (in) :: field_id
5394 integer, intent (in) :: nbr_pointsets
5395 integer, intent (in) :: collection_size
5396 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
5397 collection_size)
5398 type(yac_real_ptr), intent (in) :: send_frac_mask(nbr_pointsets, &
5399 collection_size)
5400 integer, intent (out) :: info
5401 integer, intent (out) :: ierror
5402
5403 integer :: i, j
5404 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
5405 type(yac_dble_ptr), allocatable :: send_frac_mask_dble(:,:)
5406
5407 allocate(send_field_dble(nbr_pointsets, collection_size))
5408 allocate(send_frac_mask_dble(nbr_pointsets, collection_size))
5409
5411 field_id, collection_size, nbr_pointsets, &
5412 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
5413
5414 call send_field_to_dble_ptr(field_id, &
5415 nbr_pointsets, &
5416 collection_size, &
5417 send_field, &
5418 send_field_dble, &
5419 send_frac_mask, &
5420 send_frac_mask_dble)
5421
5422 call yac_fput_frac_dble_ptr ( field_id, &
5423 nbr_pointsets, &
5424 collection_size, &
5425 send_field_dble, &
5426 send_frac_mask_dble, &
5427 info, &
5428 ierror )
5429
5430 do i = 1, collection_size
5431 do j = 1, nbr_pointsets
5432 deallocate(send_field_dble(j, i)%p)
5433 deallocate(send_frac_mask_dble(j, i)%p)
5434 end do
5435 end do
5436
5437 deallocate(send_field_dble)
5438 deallocate(send_frac_mask_dble)
5439
5440end subroutine yac_fput_frac_real_ptr
5441
5449subroutine yac_fput_single_pointset_real ( field_id, &
5450 nbr_hor_points, &
5451 collection_size, &
5452 send_field, &
5453 info, &
5454 ierror )
5455
5458
5459 implicit none
5460
5461 integer, intent (in) :: field_id
5462 integer, intent (in) :: nbr_hor_points
5463 integer, intent (in) :: collection_size
5464 real, intent (in) :: send_field(nbr_hor_points, &
5465 collection_size)
5466 integer, intent (out) :: info
5467 integer, intent (out) :: ierror
5468
5469 double precision, allocatable :: send_field_dble(:,:)
5470
5472 field_id, collection_size, 1, (/nbr_hor_points/) )
5473
5474 allocate(send_field_dble(nbr_hor_points, collection_size))
5475
5476 call send_field_to_dble_single(field_id, &
5477 nbr_hor_points, &
5478 collection_size, &
5479 send_field, &
5480 send_field_dble)
5481
5482 call yac_fput_single_pointset_dble ( field_id, &
5483 nbr_hor_points, &
5484 collection_size, &
5485 send_field_dble, &
5486 info, &
5487 ierror )
5488
5489 deallocate(send_field_dble)
5490
5491end subroutine yac_fput_single_pointset_real
5492
5502 nbr_hor_points, &
5503 collection_size, &
5504 send_field, &
5505 send_frac_mask, &
5506 info, &
5507 ierror )
5508
5511
5512 implicit none
5513
5514 integer, intent (in) :: field_id
5515 integer, intent (in) :: nbr_hor_points
5516 integer, intent (in) :: collection_size
5517 real, intent (in) :: send_field(nbr_hor_points, &
5518 collection_size)
5519 real, intent (in) :: send_frac_mask(nbr_hor_points, &
5520 collection_size)
5521 integer, intent (out) :: info
5522 integer, intent (out) :: ierror
5523
5524 double precision, allocatable :: send_field_dble(:,:)
5525 double precision, allocatable :: send_frac_mask_dble(:,:)
5526
5527 allocate(send_field_dble(nbr_hor_points, collection_size))
5528 allocate(send_frac_mask_dble(nbr_hor_points, collection_size))
5529
5531 field_id, collection_size, 1, (/nbr_hor_points/) )
5532
5533 call send_field_to_dble_single(field_id, &
5534 nbr_hor_points, &
5535 collection_size, &
5536 send_field, &
5537 send_field_dble, &
5538 send_frac_mask, &
5539 send_frac_mask_dble)
5540
5541 call yac_fput_frac_single_pointset_dble ( field_id, &
5542 nbr_hor_points, &
5543 collection_size, &
5544 send_field_dble, &
5545 send_frac_mask_dble, &
5546 info, &
5547 ierror )
5548
5549 deallocate(send_field_dble)
5550 deallocate(send_frac_mask_dble)
5551
5553
5562subroutine yac_fput_dble ( field_id, &
5563 nbr_hor_points, &
5564 nbr_pointsets, &
5565 collection_size, &
5566 send_field, &
5567 info, &
5568 ierror )
5569
5570 use yac, dummy => yac_fput_dble
5571
5572 implicit none
5573
5574 interface
5575
5576 subroutine yac_cput__c ( field_id, &
5577 collection_size, &
5578 send_field, &
5579 info, &
5580 ierror ) bind ( c, name='yac_cput_' )
5581
5582 use, intrinsic :: iso_c_binding, only : c_int, c_double
5583
5584 integer ( kind=c_int ), value :: field_id
5585 integer ( kind=c_int ), value :: collection_size
5586 real ( kind=c_double ) :: send_field(*)
5587 integer ( kind=c_int ) :: info
5588 integer ( kind=c_int ) :: ierror
5589
5590 end subroutine yac_cput__c
5591
5592 end interface
5593
5594 integer, intent (in) :: field_id
5595 integer, intent (in) :: nbr_hor_points
5596 integer, intent (in) :: nbr_pointsets
5597 integer, intent (in) :: collection_size
5598 double precision, intent (in) :: send_field(nbr_hor_points, &
5599 nbr_pointsets, &
5600 collection_size)
5601 integer, intent (out) :: info
5602 integer, intent (out) :: ierror
5603
5604 integer :: i
5605
5607 field_id, collection_size, nbr_pointsets, &
5608 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
5609
5610 call yac_cput__c ( field_id, &
5611 collection_size, &
5612 send_field, &
5613 info, &
5614 ierror )
5615
5616end subroutine yac_fput_dble
5617
5627subroutine yac_fput_frac_dble ( field_id, &
5628 nbr_hor_points, &
5629 nbr_pointsets, &
5630 collection_size, &
5631 send_field, &
5632 send_frac_mask, &
5633 info, &
5634 ierror )
5635
5636 use yac, dummy => yac_fput_frac_dble
5637
5638 implicit none
5639
5640 interface
5641
5642 subroutine yac_cput_frac__c ( field_id, &
5643 collection_size, &
5644 send_field, &
5645 send_frac_mask, &
5646 info, &
5647 ierror ) &
5648 bind( c, name='yac_cput_frac_' )
5649
5650 use, intrinsic :: iso_c_binding, only : c_int, c_double
5651
5652 integer ( kind=c_int ), value :: field_id
5653 integer ( kind=c_int ), value :: collection_size
5654 real ( kind=c_double ) :: send_field(*)
5655 real ( kind=c_double ) :: send_frac_mask(*)
5656 integer ( kind=c_int ) :: info
5657 integer ( kind=c_int ) :: ierror
5658
5659 end subroutine yac_cput_frac__c
5660
5661 end interface
5662
5663 integer, intent (in) :: field_id
5664 integer, intent (in) :: nbr_hor_points
5665 integer, intent (in) :: nbr_pointsets
5666 integer, intent (in) :: collection_size
5667 double precision, intent (in) :: send_field(nbr_hor_points, &
5668 nbr_pointsets, &
5669 collection_size)
5670 double precision, intent (in) :: send_frac_mask(nbr_hor_points, &
5671 nbr_pointsets, &
5672 collection_size)
5673 integer, intent (out) :: info
5674 integer, intent (out) :: ierror
5675
5676 integer :: i
5677
5679 field_id, collection_size, nbr_pointsets, &
5680 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
5681
5682 call yac_cput_frac__c ( field_id, &
5683 collection_size, &
5684 send_field, &
5685 send_frac_mask, &
5686 info, &
5687 ierror )
5688
5689end subroutine yac_fput_frac_dble
5690
5698subroutine yac_fput_dble_ptr ( field_id, &
5699 nbr_pointsets, &
5700 collection_size, &
5701 send_field, &
5702 info, &
5703 ierror )
5704
5705 use yac, dummy => yac_fput_dble_ptr
5707 use, intrinsic :: iso_c_binding, only: c_ptr
5708
5709 implicit none
5710
5711 interface
5712
5713 subroutine yac_cput_ptr__c ( field_id, &
5714 collection_size, &
5715 send_field, &
5716 info, &
5717 ierror ) &
5718 bind( c, name='yac_cput_ptr_' )
5719
5720 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5721
5722 integer ( kind=c_int ), value :: field_id
5723 integer ( kind=c_int ), value :: collection_size
5724 type(c_ptr) :: send_field(*)
5725 integer ( kind=c_int ) :: info
5726 integer ( kind=c_int ) :: ierror
5727
5728 end subroutine yac_cput_ptr__c
5729
5730 end interface
5731
5732 integer, intent (in) :: field_id
5733 integer, intent (in) :: nbr_pointsets
5734 integer, intent (in) :: collection_size
5735 type(yac_dble_ptr), intent (in) :: send_field(nbr_pointsets, collection_size)
5736 integer, intent (out) :: info
5737 integer, intent (out) :: ierror
5738
5739 integer :: i, j
5740 type(c_ptr), allocatable :: send_field_(:,:)
5741
5742 allocate(send_field_(nbr_pointsets, collection_size))
5743
5745 field_id, collection_size, nbr_pointsets, &
5746 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
5747
5748 do i = 1, collection_size
5749 do j = 1, nbr_pointsets
5750 send_field_(j, i) = &
5751 yac_dble2cptr("yac_fput_dble_ptr", "send_field", send_field(j, i))
5752 end do
5753 end do
5754
5755 call yac_cput_ptr__c ( field_id, &
5756 collection_size, &
5757 send_field_, &
5758 info, &
5759 ierror )
5760
5761 deallocate(send_field_)
5762
5763end subroutine yac_fput_dble_ptr
5764
5773subroutine yac_fput_frac_dble_ptr ( field_id, &
5774 nbr_pointsets, &
5775 collection_size, &
5776 send_field, &
5777 send_frac_mask, &
5778 info, &
5779 ierror )
5780
5782 use yac, dummy => yac_fput_frac_dble_ptr
5783 use, intrinsic :: iso_c_binding, only: c_ptr
5784
5785 implicit none
5786
5787 interface
5788
5789 subroutine yac_cput_frac_ptr__c ( field_id, &
5790 collection_size, &
5791 send_field, &
5792 send_frac_mask, &
5793 info, &
5794 ierror ) &
5795 bind( c, name='yac_cput_frac_ptr_' )
5796
5797 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5798
5799 integer ( kind=c_int ), value :: field_id
5800 integer ( kind=c_int ), value :: collection_size
5801 type(c_ptr) :: send_field(*)
5802 type(c_ptr) :: send_frac_mask(*)
5803 integer ( kind=c_int ) :: info
5804 integer ( kind=c_int ) :: ierror
5805
5806 end subroutine yac_cput_frac_ptr__c
5807
5808 end interface
5809
5810 integer, intent (in) :: field_id
5811 integer, intent (in) :: nbr_pointsets
5812 integer, intent (in) :: collection_size
5813 type(yac_dble_ptr), intent (in) :: send_field(nbr_pointsets, collection_size)
5814 type(yac_dble_ptr), intent (in) :: send_frac_mask(nbr_pointsets, collection_size)
5815 integer, intent (out) :: info
5816 integer, intent (out) :: ierror
5817
5818 integer :: i, j
5819 type(c_ptr), allocatable :: send_field_(:,:)
5820 type(c_ptr), allocatable :: send_frac_mask_(:,:)
5821
5822 allocate(send_field_(nbr_pointsets, collection_size))
5823 allocate(send_frac_mask_(nbr_pointsets, collection_size))
5824
5826 field_id, collection_size, nbr_pointsets, &
5827 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
5828
5829 do i = 1, collection_size
5830 do j = 1, nbr_pointsets
5831 send_field_(j, i) = &
5832 yac_dble2cptr( &
5833 "yac_fput_frac_dble_ptr", "send_field", send_field(j, i))
5834 send_frac_mask_(j, i) = &
5835 yac_dble2cptr( &
5836 "yac_fput_frac_dble_ptr", "send_frac_mask", send_frac_mask(j, i))
5837 end do
5838 end do
5839
5840 call yac_cput_frac_ptr__c ( field_id, &
5841 collection_size, &
5842 send_field_, &
5843 send_frac_mask_, &
5844 info, &
5845 ierror )
5846
5847 deallocate(send_field_)
5848 deallocate(send_frac_mask_)
5849
5850end subroutine yac_fput_frac_dble_ptr
5851
5859subroutine yac_fput_single_pointset_dble ( field_id, &
5860 nbr_hor_points, &
5861 collection_size, &
5862 send_field, &
5863 info, &
5864 ierror )
5865
5867
5868 implicit none
5869
5870 interface
5871
5872 subroutine yac_cput__c ( field_id, &
5873 collection_size, &
5874 send_field, &
5875 info, &
5876 ierror ) bind ( c, name='yac_cput_' )
5877
5878 use, intrinsic :: iso_c_binding, only : c_int, c_double
5879
5880 integer ( kind=c_int ), value :: field_id
5881 integer ( kind=c_int ), value :: collection_size
5882 real ( kind=c_double ) :: send_field(*)
5883 integer ( kind=c_int ) :: info
5884 integer ( kind=c_int ) :: ierror
5885
5886 end subroutine yac_cput__c
5887
5888 end interface
5889
5890 integer, intent (in) :: field_id
5891 integer, intent (in) :: nbr_hor_points
5892 integer, intent (in) :: collection_size
5893 double precision, intent (in) :: send_field(nbr_hor_points, &
5894 collection_size)
5895 integer, intent (out) :: info
5896 integer, intent (out) :: ierror
5897
5899 field_id, collection_size, 1, (/nbr_hor_points/) )
5900
5901 call yac_cput__c ( field_id, &
5902 collection_size, &
5903 send_field, &
5904 info, &
5905 ierror )
5906
5907end subroutine yac_fput_single_pointset_dble
5908
5918 nbr_hor_points, &
5919 collection_size, &
5920 send_field, &
5921 send_frac_mask, &
5922 info, &
5923 ierror )
5924
5926
5927 implicit none
5928
5929 interface
5930
5931 subroutine yac_cput_frac__c ( field_id, &
5932 collection_size, &
5933 send_field, &
5934 send_frac_mask, &
5935 info, &
5936 ierror ) &
5937 bind( c, name='yac_cput_frac_' )
5938
5939 use, intrinsic :: iso_c_binding, only : c_int, c_double
5940
5941 integer ( kind=c_int ), value :: field_id
5942 integer ( kind=c_int ), value :: collection_size
5943 real ( kind=c_double ) :: send_field(*)
5944 real ( kind=c_double ) :: send_frac_mask(*)
5945 integer ( kind=c_int ) :: info
5946 integer ( kind=c_int ) :: ierror
5947
5948 end subroutine yac_cput_frac__c
5949
5950 end interface
5951
5952 integer, intent (in) :: field_id
5953 integer, intent (in) :: nbr_hor_points
5954 integer, intent (in) :: collection_size
5955 double precision, intent (in) :: send_field(nbr_hor_points, &
5956 collection_size)
5957 double precision, intent (in) :: send_frac_mask(nbr_hor_points, &
5958 collection_size)
5959 integer, intent (out) :: info
5960 integer, intent (out) :: ierror
5961
5963 field_id, collection_size, 1, (/nbr_hor_points/) )
5964
5965 call yac_cput_frac__c ( field_id, &
5966 collection_size, &
5967 send_field, &
5968 send_frac_mask, &
5969 info, &
5970 ierror )
5971
5973
5974! ---------------------------------- get -------------------------------
5975
5976subroutine yac_fget_real ( field_id, &
5977 nbr_hor_points, &
5978 collection_size, &
5979 recv_field, &
5980 info, &
5981 ierror )
5982
5983 use yac, dummy => yac_fget_real
5985
5986 implicit none
5987
5988 integer, intent (in) :: field_id
5989 integer, intent (in) :: nbr_hor_points
5990 integer, intent (in) :: collection_size
5991 real, intent (inout) :: recv_field(nbr_hor_points, collection_size)
5992
5993 integer, intent (out) :: info
5994 integer, intent (out) :: ierror
5995
5996 double precision, allocatable :: recv_field_dble(:,:)
5997
5999 field_id, collection_size, 1, (/nbr_hor_points/) )
6000
6001 allocate(recv_field_dble(nbr_hor_points, collection_size))
6002
6003 call recv_field_to_dble(field_id, &
6004 nbr_hor_points, &
6005 collection_size, &
6006 recv_field, &
6007 recv_field_dble)
6008
6009 call yac_fget_dble ( field_id, &
6010 nbr_hor_points, &
6011 collection_size, &
6012 recv_field_dble, &
6013 info, &
6014 ierror )
6015
6016 call recv_field_from_dble(field_id, &
6017 nbr_hor_points, &
6018 collection_size, &
6019 recv_field_dble, &
6020 recv_field)
6021
6022 deallocate(recv_field_dble)
6023
6024end subroutine yac_fget_real
6025
6026subroutine yac_fget_real_ptr ( field_id, &
6027 collection_size, &
6028 recv_field, &
6029 info, &
6030 ierror )
6031
6032 use yac, dummy => yac_fget_real_ptr
6034
6035 implicit none
6036
6037 integer, intent (in) :: field_id
6038 integer, intent (in) :: collection_size
6039 type(yac_real_ptr) :: recv_field(collection_size)
6040 integer, intent (out) :: info
6041 integer, intent (out) :: ierror
6042
6043 type(yac_dble_ptr), allocatable :: recv_field_dble(:)
6044
6045 allocate(recv_field_dble(collection_size))
6046
6048 field_id, collection_size, 1, (/SIZE(recv_field(1)%p, 1)/) )
6049
6050 call recv_field_to_dble_ptr(field_id, &
6051 collection_size, &
6052 recv_field, &
6053 recv_field_dble)
6054
6055 call yac_fget_dble_ptr ( field_id, &
6056 collection_size, &
6057 recv_field_dble, &
6058 info, &
6059 ierror )
6060
6061 call recv_field_from_dble_ptr(field_id, &
6062 collection_size, &
6063 recv_field_dble, &
6064 recv_field)
6065
6066end subroutine yac_fget_real_ptr
6067
6068subroutine yac_fget_dble ( field_id, &
6069 nbr_hor_points, &
6070 collection_size, &
6071 recv_field, &
6072 info, &
6073 ierror )
6074
6075 use yac, dummy => yac_fget_dble
6076
6077 implicit none
6078
6079 interface
6080
6081 subroutine yac_cget__c ( field_id, &
6082 collection_size, &
6083 recv_field, &
6084 info, &
6085 ierror ) bind ( c, name='yac_cget_' )
6086
6087 use, intrinsic :: iso_c_binding, only : c_int, c_double
6088
6089 integer ( kind=c_int ), value :: field_id
6090 integer ( kind=c_int ), value :: collection_size
6091 real ( kind=c_double ) :: recv_field(*)
6092 integer ( kind=c_int ) :: info
6093 integer ( kind=c_int ) :: ierror
6094
6095 end subroutine yac_cget__c
6096
6097 end interface
6098
6099 integer, intent (in) :: field_id
6100 integer, intent (in) :: nbr_hor_points
6101 integer, intent (in) :: collection_size
6102 double precision, intent (inout):: recv_field(nbr_hor_points, collection_size)
6103
6104 integer, intent (out) :: info
6105 integer, intent (out) :: ierror
6106
6108 field_id, collection_size, 1, (/nbr_hor_points/) )
6109
6110 call yac_cget__c ( field_id, &
6111 collection_size, &
6112 recv_field, &
6113 info, &
6114 ierror )
6115
6116end subroutine yac_fget_dble
6117
6118subroutine yac_fget_dble_ptr ( field_id, &
6119 collection_size, &
6120 recv_field, &
6121 info, &
6122 ierror )
6123
6125 use yac, dummy => yac_fget_dble_ptr
6126 use, intrinsic :: iso_c_binding, only: c_ptr
6127
6128 implicit none
6129
6130 interface
6131
6132 subroutine yac_cget_c ( field_id, &
6133 collection_size, &
6134 recv_field, &
6135 info, &
6136 ierror ) bind ( c, name='yac_cget' )
6137
6138 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6139
6140 integer ( kind=c_int ), value :: field_id
6141 integer ( kind=c_int ), value :: collection_size
6142 type(c_ptr) :: recv_field(*)
6143 integer ( kind=c_int ) :: info
6144 integer ( kind=c_int ) :: ierror
6145
6146 end subroutine yac_cget_c
6147
6148 end interface
6149
6150 integer, intent (in) :: field_id
6151 integer, intent (in) :: collection_size
6152 type(yac_dble_ptr) :: recv_field(collection_size)
6153 integer, intent (out) :: info
6154 integer, intent (out) :: ierror
6155
6156 integer :: i
6157 type(c_ptr), allocatable :: recv_field_(:)
6158
6159 allocate(recv_field_(collection_size))
6160
6162 field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
6163
6164 do i = 1, collection_size
6165 recv_field_(i) = yac_dble2cptr("yac_fget_dble_ptr", "recv_field", recv_field(i))
6166 end do
6167
6168 call yac_cget_c ( field_id, &
6169 collection_size, &
6170 recv_field_, &
6171 info, &
6172 ierror )
6173
6174 deallocate(recv_field_)
6175
6176end subroutine yac_fget_dble_ptr
6177
6178! ---------------------------------- get_raw -------------------------------
6179
6180subroutine yac_fget_raw_real ( field_id, &
6181 src_field_buffer_size, &
6182 collection_size, &
6183 src_field_buffer, &
6184 info, &
6185 ierror )
6186
6187 use yac, dummy => yac_fget_raw_real
6189
6190 implicit none
6191
6192 integer, intent (in) :: field_id
6193 integer, intent (in) :: src_field_buffer_size
6194
6196 integer, intent (in) :: collection_size
6197 real, intent (out) :: &
6198 src_field_buffer(src_field_buffer_size, collection_size)
6199
6200 integer, intent (out) :: info
6201 integer, intent (out) :: ierror
6202
6203 double precision, allocatable :: src_field_buffer_dble(:, :)
6204
6205 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
6206
6207 call yac_fget_raw_dble ( field_id, &
6208 src_field_buffer_size, &
6209 collection_size, &
6210 src_field_buffer_dble, &
6211 info, &
6212 ierror )
6213
6214 src_field_buffer = real(src_field_buffer_dble)
6215
6216 deallocate(src_field_buffer_dble)
6217
6218end subroutine yac_fget_raw_real
6219
6220subroutine yac_fget_raw_real_ptr ( field_id, &
6221 num_src_fields, &
6222 collection_size, &
6223 src_field_buffer, &
6224 info, &
6225 ierror )
6226
6227 use yac, dummy => yac_fget_raw_real_ptr
6228 use, intrinsic :: iso_c_binding, only: c_null_char
6229
6230 implicit none
6231
6232 integer, intent (in) :: field_id
6233 integer, intent (in) :: num_src_fields
6234 integer, intent (in) :: collection_size
6235 type(yac_real_ptr), intent(inout) :: &
6236 src_field_buffer(num_src_fields, collection_size)
6237
6238 integer, intent (out) :: info
6239 integer, intent (out) :: ierror
6240
6241 integer :: i, j
6242 integer, allocatable :: src_field_buffer_sizes(:)
6243 type(yac_dble_ptr), allocatable :: src_field_buffer_dble(:,:)
6244
6245 allocate(src_field_buffer_sizes(num_src_fields))
6246 allocate(src_field_buffer_dble(num_src_fields, collection_size))
6247
6248 do i = 1, num_src_fields
6249 src_field_buffer_sizes(i) = size(src_field_buffer(i,1)%p(:))
6250 do j = 1, collection_size
6251 yac_fassert(src_field_buffer_sizes(i) == size(src_field_buffer(i,j)%p), "ERROR(yac_fget_raw_real_ptr): inconsistent source buffer sizes")
6252 allocate(src_field_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
6253 end do
6254 end do
6255
6257 field_id, num_src_fields, collection_size, src_field_buffer_sizes)
6258
6259 call yac_fget_raw_dble_ptr ( field_id, &
6260 num_src_fields, &
6261 collection_size, &
6262 src_field_buffer_dble, &
6263 info, &
6264 ierror )
6265
6266 do i = 1, num_src_fields
6267 do j = 1, collection_size
6268 src_field_buffer(i,j)%p = &
6269 real(src_field_buffer_dble(i,j)%p)
6270 deallocate(src_field_buffer_dble(i,j)%p)
6271 end do
6272 end do
6273
6274deallocate(src_field_buffer_sizes)
6275deallocate(src_field_buffer_dble)
6276
6277end subroutine yac_fget_raw_real_ptr
6278
6279subroutine yac_fget_raw_dble ( field_id, &
6280 src_field_buffer_size, &
6281 collection_size, &
6282 src_field_buffer, &
6283 info, &
6284 ierror )
6285
6286 use yac, dummy => yac_fget_raw_dble
6287
6288 implicit none
6289
6290 interface
6291
6292 subroutine yac_cget_raw__c ( field_id, &
6293 collection_size, &
6294 src_field_buffer, &
6295 info, &
6296 ierror ) &
6297 bind( c, name='yac_cget_raw_' )
6298
6299 use, intrinsic :: iso_c_binding, only : c_int, c_double
6300
6301 integer ( kind=c_int ), value :: field_id
6302 integer ( kind=c_int ), value :: collection_size
6303 real ( kind=c_double ) :: src_field_buffer(*)
6304 integer ( kind=c_int ) :: info
6305 integer ( kind=c_int ) :: ierror
6306
6307 end subroutine yac_cget_raw__c
6308
6309 end interface
6310
6311 integer, intent (in) :: field_id
6312 integer, intent (in) :: src_field_buffer_size
6314 integer, intent (in) :: collection_size
6315 double precision, intent (out) :: &
6316 src_field_buffer(src_field_buffer_size, collection_size)
6317
6318 integer, intent (out) :: info
6319 integer, intent (out) :: ierror
6320
6322 field_id, collection_size, src_field_buffer_size)
6323
6324 call yac_cget_raw__c ( field_id, &
6325 collection_size, &
6326 src_field_buffer, &
6327 info, &
6328 ierror )
6329
6330end subroutine yac_fget_raw_dble
6331
6332subroutine yac_get_raw_dble_ptr ( field_id, &
6333 num_src_fields, &
6334 collection_size, &
6335 src_field_buffer, &
6336 info, &
6337 ierror, &
6338 use_async )
6339
6341 use yac
6342 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
6343
6344 implicit none
6345
6346 interface
6347
6348 subroutine yac_cget_raw_ptr__c ( field_id, &
6349 collection_size, &
6350 src_field_buffer, &
6351 info, &
6352 ierror ) &
6353 bind( c, name='yac_cget_raw_ptr_' )
6354
6355 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6356
6357 integer ( kind=c_int ), value :: field_id
6358 integer ( kind=c_int ), value :: collection_size
6359 type(c_ptr) :: src_field_buffer(*)
6360 integer ( kind=c_int ) :: info
6361 integer ( kind=c_int ) :: ierror
6362
6363 end subroutine yac_cget_raw_ptr__c
6364
6365 subroutine yac_cget_raw_async_ptr__c ( field_id, &
6366 collection_size, &
6367 src_field_buffer, &
6368 info, &
6369 ierror ) &
6370 bind( c, name='yac_cget_raw_async_ptr_' )
6371
6372 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6373
6374 integer ( kind=c_int ), value :: field_id
6375 integer ( kind=c_int ), value :: collection_size
6376 type(c_ptr) :: src_field_buffer(*)
6377 integer ( kind=c_int ) :: info
6378 integer ( kind=c_int ) :: ierror
6379
6380 end subroutine yac_cget_raw_async_ptr__c
6381
6382 end interface
6383
6384 integer, intent (in) :: field_id
6385 integer, intent (in) :: num_src_fields
6386 integer, intent (in) :: collection_size
6387 type(yac_dble_ptr), intent(inout) :: &
6388 src_field_buffer(num_src_fields, collection_size)
6389
6390 integer, intent (out) :: info
6391 integer, intent (out) :: ierror
6392 logical, intent(in) :: use_async
6393
6394 integer :: i, j
6395 integer, allocatable :: src_field_buffer_sizes(:)
6396 type(c_ptr), allocatable :: src_field_buffer_(:,:)
6397
6398 allocate(src_field_buffer_sizes(num_src_fields))
6399 allocate(src_field_buffer_(num_src_fields, collection_size))
6400
6401 src_field_buffer_sizes = &
6402 (/(SIZE(src_field_buffer(i, 1)%p),i=1,num_src_fields)/)
6403
6405 field_id, num_src_fields, collection_size, src_field_buffer_sizes)
6406
6407 do i = 1, collection_size
6408 do j = 1, num_src_fields
6409 yac_fassert(src_field_buffer_sizes(j) == size(src_field_buffer(j,i)%p), "ERROR(yac_get_raw_dble_ptr): inconsistent source buffer sizes")
6410 src_field_buffer_(j, i) = &
6411 yac_dble2cptr( &
6412 "yac_get_raw_dble_ptr", "src_field_buffer", src_field_buffer(j, i))
6413 end do
6414 end do
6415
6416 if (use_async) then
6417 call yac_cget_raw_async_ptr__c ( field_id, &
6418 collection_size, &
6419 src_field_buffer_, &
6420 info, &
6421 ierror )
6422 else
6423 call yac_cget_raw_ptr__c ( field_id, &
6424 collection_size, &
6425 src_field_buffer_, &
6426 info, &
6427 ierror )
6428 end if
6429
6430 deallocate(src_field_buffer_sizes)
6431 deallocate(src_field_buffer_)
6432
6433end subroutine yac_get_raw_dble_ptr
6434
6435subroutine yac_fget_raw_dble_ptr ( field_id, &
6436 num_src_fields, &
6437 collection_size, &
6438 src_field_buffer, &
6439 info, &
6440 ierror )
6441
6442 use yac, dummy => yac_fget_raw_dble_ptr
6443
6444 implicit none
6445
6446 interface
6447 subroutine yac_get_raw_dble_ptr ( field_id, &
6448 num_src_fields, &
6449 collection_size, &
6450 src_field_buffer, &
6451 info, &
6452 ierror, &
6453 use_async )
6454 import :: yac_dble_ptr
6455 integer, intent (in) :: field_id
6456 integer, intent (in) :: num_src_fields
6457 integer, intent (in) :: collection_size
6458 type(yac_dble_ptr), intent(inout) :: &
6459 src_field_buffer(num_src_fields, collection_size)
6460 integer, intent (out) :: info
6461 integer, intent (out) :: ierror
6462 logical, intent(in) :: use_async
6463 end subroutine yac_get_raw_dble_ptr
6464 end interface
6465
6466 integer, intent (in) :: field_id
6467 integer, intent (in) :: num_src_fields
6468 integer, intent (in) :: collection_size
6469 type(yac_dble_ptr), intent(inout) :: &
6470 src_field_buffer(num_src_fields, collection_size)
6471
6472 integer, intent (out) :: info
6473 integer, intent (out) :: ierror
6474
6475 call yac_get_raw_dble_ptr( &
6476 field_id, num_src_fields, collection_size, &
6477 src_field_buffer, info, ierror, .false. )
6478
6479end subroutine yac_fget_raw_dble_ptr
6480
6481subroutine yac_fget_raw_frac_real ( field_id, &
6482 src_field_buffer_size, &
6483 collection_size, &
6484 src_field_buffer, &
6485 src_frac_mask_buffer, &
6486 info, &
6487 ierror )
6488
6489 use yac, dummy => yac_fget_raw_frac_real
6491
6492 implicit none
6493
6494 integer, intent (in) :: field_id
6495 integer, intent (in) :: src_field_buffer_size
6497 integer, intent (in) :: collection_size
6498 real, intent (out) :: &
6499 src_field_buffer(src_field_buffer_size, collection_size)
6500
6501 real, intent (out) :: &
6502 src_frac_mask_buffer(src_field_buffer_size, collection_size)
6503
6504 integer, intent (out) :: info
6505 integer, intent (out) :: ierror
6506
6507 double precision, allocatable :: src_field_buffer_dble(:, :)
6508 double precision, allocatable :: src_frac_mask_buffer_dble(:, :)
6509
6510 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
6511 allocate(src_frac_mask_buffer_dble(src_field_buffer_size, collection_size))
6512
6513 call yac_fget_raw_frac_dble ( field_id, &
6514 src_field_buffer_size, &
6515 collection_size, &
6516 src_field_buffer_dble, &
6517 src_frac_mask_buffer_dble, &
6518 info, &
6519 ierror )
6520
6521 src_field_buffer = real(src_field_buffer_dble)
6522 src_frac_mask_buffer = real(src_frac_mask_buffer_dble)
6523
6524 deallocate(src_field_buffer_dble)
6525 deallocate(src_frac_mask_buffer_dble)
6526
6527end subroutine yac_fget_raw_frac_real
6528
6529subroutine yac_fget_raw_frac_real_ptr ( field_id, &
6530 num_src_fields, &
6531 collection_size, &
6532 src_field_buffer, &
6533 src_frac_mask_buffer, &
6534 info, &
6535 ierror )
6536
6537 use yac, dummy => yac_fget_raw_frac_real_ptr
6538 use, intrinsic :: iso_c_binding, only: c_null_char
6539
6540 implicit none
6541
6542 integer, intent (in) :: field_id
6543 integer, intent (in) :: num_src_fields
6544 integer, intent (in) :: collection_size
6545 type(yac_real_ptr), intent(inout) :: &
6546 src_field_buffer(num_src_fields, collection_size)
6547
6548 type(yac_real_ptr), intent(inout) :: &
6549 src_frac_mask_buffer(num_src_fields, collection_size)
6550
6551 integer, intent (out) :: info
6552 integer, intent (out) :: ierror
6553
6554 integer :: i, j
6555 integer, allocatable :: src_field_buffer_sizes(:)
6556 type(yac_dble_ptr), allocatable :: src_field_buffer_dble(:,:)
6557 type(yac_dble_ptr), allocatable :: src_frac_mask_buffer_dble(:,:)
6558
6559 allocate(src_field_buffer_sizes(num_src_fields))
6560 allocate(src_field_buffer_dble(num_src_fields, collection_size))
6561 allocate(src_frac_mask_buffer_dble(num_src_fields, collection_size))
6562
6563 do i = 1, num_src_fields
6564 src_field_buffer_sizes(i) = size(src_field_buffer(i,1)%p(:))
6565 do j = 1, collection_size
6566 yac_fassert(src_field_buffer_sizes(i) == size(src_field_buffer(i,j)%p), "ERROR(yac_fget_raw_frac_real_ptr): inconsistent source buffer sizes")
6567 allocate(src_field_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
6568 allocate(src_frac_mask_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
6569 end do
6570 end do
6571
6573 field_id, num_src_fields, collection_size, src_field_buffer_sizes)
6574
6575 call yac_fget_raw_frac_dble_ptr ( field_id, &
6576 num_src_fields, &
6577 collection_size, &
6578 src_field_buffer_dble, &
6579 src_frac_mask_buffer_dble, &
6580 info, &
6581 ierror )
6582
6583 do i = 1, num_src_fields
6584 do j = 1, collection_size
6585 src_field_buffer(i,j)%p = &
6586 real(src_field_buffer_dble(i,j)%p)
6587 deallocate(src_field_buffer_dble(i,j)%p)
6588 src_frac_mask_buffer(i,j)%p = &
6589 real(src_frac_mask_buffer_dble(i,j)%p)
6590 deallocate(src_frac_mask_buffer_dble(i,j)%p)
6591 end do
6592 end do
6593
6594deallocate(src_field_buffer_sizes)
6595deallocate(src_field_buffer_dble)
6596deallocate(src_frac_mask_buffer_dble)
6597
6598end subroutine yac_fget_raw_frac_real_ptr
6599
6600subroutine yac_fget_raw_frac_dble ( field_id, &
6601 src_field_buffer_size, &
6602 collection_size, &
6603 src_field_buffer, &
6604 src_frac_mask_buffer, &
6605 info, &
6606 ierror )
6607
6608 use yac, dummy => yac_fget_raw_frac_dble
6609
6610 implicit none
6611
6612 interface
6613
6614 subroutine yac_cget_raw_frac__c ( field_id, &
6615 collection_size, &
6616 src_field_buffer, &
6617 src_frac_mask_buffer, &
6618 info, &
6619 ierror ) &
6620 bind( c, name='yac_cget_raw_frac_' )
6621
6622 use, intrinsic :: iso_c_binding, only : c_int, c_double
6623
6624 integer ( kind=c_int ), value :: field_id
6625 integer ( kind=c_int ), value :: collection_size
6626 real ( kind=c_double ) :: src_field_buffer(*)
6627 real ( kind=c_double ) :: src_frac_mask_buffer(*)
6628 integer ( kind=c_int ) :: info
6629 integer ( kind=c_int ) :: ierror
6630
6631 end subroutine yac_cget_raw_frac__c
6632
6633 end interface
6634
6635 integer, intent (in) :: field_id
6636 integer, intent (in) :: src_field_buffer_size
6638 integer, intent (in) :: collection_size
6639 double precision, intent (out) :: &
6640 src_field_buffer(src_field_buffer_size, collection_size)
6641
6642 double precision, intent (out) :: &
6643 src_frac_mask_buffer(src_field_buffer_size, collection_size)
6644
6645 integer, intent (out) :: info
6646 integer, intent (out) :: ierror
6647
6649 field_id, collection_size, src_field_buffer_size)
6650
6651 call yac_cget_raw_frac__c ( field_id, &
6652 collection_size, &
6653 src_field_buffer, &
6654 src_frac_mask_buffer, &
6655 info, &
6656 ierror )
6657
6658end subroutine yac_fget_raw_frac_dble
6659
6660subroutine yac_get_raw_frac_dble_ptr ( field_id, &
6661 num_src_fields, &
6662 collection_size, &
6663 src_field_buffer, &
6664 src_frac_mask_buffer, &
6665 info, &
6666 ierror, &
6667 use_async )
6668
6670 use yac
6671 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
6672
6673 implicit none
6674
6675 interface
6676
6677 subroutine yac_cget_raw_frac_ptr__c ( field_id, &
6678 collection_size, &
6679 src_field_buffer, &
6680 src_frac_mask_buffer, &
6681 info, &
6682 ierror ) &
6683 bind( c, name='yac_cget_raw_frac_ptr_' )
6684
6685 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6686
6687 integer ( kind=c_int ), value :: field_id
6688 integer ( kind=c_int ), value :: collection_size
6689 type(c_ptr) :: src_field_buffer(*)
6690 type(c_ptr) :: src_frac_mask_buffer(*)
6691 integer ( kind=c_int ) :: info
6692 integer ( kind=c_int ) :: ierror
6693
6694 end subroutine yac_cget_raw_frac_ptr__c
6695
6696 subroutine yac_cget_raw_frac_async_ptr__c ( field_id, &
6697 collection_size, &
6698 src_field_buffer, &
6699 src_frac_mask_buffer, &
6700 info, &
6701 ierror ) &
6702 bind( c, name='yac_cget_raw_frac_async_ptr_' )
6703
6704 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6705
6706 integer ( kind=c_int ), value :: field_id
6707 integer ( kind=c_int ), value :: collection_size
6708 type(c_ptr) :: src_field_buffer(*)
6709 type(c_ptr) :: src_frac_mask_buffer(*)
6710 integer ( kind=c_int ) :: info
6711 integer ( kind=c_int ) :: ierror
6712
6713 end subroutine yac_cget_raw_frac_async_ptr__c
6714
6715 end interface
6716
6717 integer, intent (in) :: field_id
6718 integer, intent (in) :: num_src_fields
6719 integer, intent (in) :: collection_size
6720 type(yac_dble_ptr), intent(inout) :: &
6721 src_field_buffer(num_src_fields, collection_size)
6722
6723 type(yac_dble_ptr), intent(inout) :: &
6724 src_frac_mask_buffer(num_src_fields, collection_size)
6725
6726 integer, intent (out) :: info
6727 integer, intent (out) :: ierror
6728 logical, intent(in) :: use_async
6729
6730 integer :: i, j
6731 integer, allocatable :: src_field_buffer_sizes(:)
6732 type(c_ptr), allocatable :: src_field_buffer_(:,:)
6733 type(c_ptr), allocatable :: src_frac_mask_buffer_(:,:)
6734
6735 allocate(src_field_buffer_sizes(num_src_fields))
6736 allocate(src_field_buffer_(num_src_fields, collection_size))
6737 allocate(src_frac_mask_buffer_(num_src_fields, collection_size))
6738
6739 src_field_buffer_sizes = &
6740 (/(SIZE(src_field_buffer(i, 1)%p),i=1,num_src_fields)/)
6741
6743 field_id, num_src_fields, collection_size, src_field_buffer_sizes)
6744
6745 do i = 1, collection_size
6746 do j = 1, num_src_fields
6747 yac_fassert(src_field_buffer_sizes(j) == size(src_field_buffer(j,i)%p), "ERROR(yac_get_raw_frac_dble_ptr): inconsistent source buffer sizes")
6748 yac_fassert(src_field_buffer_sizes(j) == size(src_frac_mask_buffer(j,i)%p), "ERROR(yac_get_raw_frac_dble_ptr): inconsistent source buffer sizes")
6749 src_field_buffer_(j, i) = &
6750 yac_dble2cptr( &
6751 "yac_get_raw_frac_dble_ptr", "src_field_buffer", src_field_buffer(j, i))
6752 src_frac_mask_buffer_(j, i) = &
6753 yac_dble2cptr( &
6754 "yac_get_raw_frac_dble_ptr", "src_frac_mask_buffer", src_frac_mask_buffer(j, i))
6755 end do
6756 end do
6757
6758 if (use_async) then
6759 call yac_cget_raw_frac_async_ptr__c ( field_id, &
6760 collection_size, &
6761 src_field_buffer_, &
6762 src_frac_mask_buffer_, &
6763 info, &
6764 ierror )
6765 else
6766 call yac_cget_raw_frac_ptr__c ( field_id, &
6767 collection_size, &
6768 src_field_buffer_, &
6769 src_frac_mask_buffer_, &
6770 info, &
6771 ierror )
6772 end if
6773
6774 deallocate(src_field_buffer_sizes)
6775 deallocate(src_field_buffer_)
6776 deallocate(src_frac_mask_buffer_)
6777
6778end subroutine yac_get_raw_frac_dble_ptr
6779
6780subroutine yac_fget_raw_frac_dble_ptr ( field_id, &
6781 num_src_fields, &
6782 collection_size, &
6783 src_field_buffer, &
6784 src_frac_mask_buffer, &
6785 info, &
6786 ierror )
6787
6788 use yac, dummy => yac_fget_raw_frac_dble_ptr
6789
6790 implicit none
6791
6792 interface
6793 subroutine yac_get_raw_frac_dble_ptr ( field_id, &
6794 num_src_fields, &
6795 collection_size, &
6796 src_field_buffer, &
6797 src_frac_mask_buffer, &
6798 info, &
6799 ierror, &
6800 use_async )
6801 import :: yac_dble_ptr
6802 integer, intent (in) :: field_id
6803 integer, intent (in) :: num_src_fields
6804 integer, intent (in) :: collection_size
6805 type(yac_dble_ptr), intent(inout) :: &
6806 src_field_buffer(num_src_fields, collection_size)
6807 type(yac_dble_ptr), intent(inout) :: &
6808 src_frac_mask_buffer(num_src_fields, collection_size)
6809 integer, intent (out) :: info
6810 integer, intent (out) :: ierror
6811 logical, intent(in) :: use_async
6812 end subroutine yac_get_raw_frac_dble_ptr
6813 end interface
6814
6815 integer, intent (in) :: field_id
6816 integer, intent (in) :: num_src_fields
6817 integer, intent (in) :: collection_size
6818 type(yac_dble_ptr), intent(inout) :: &
6819 src_field_buffer(num_src_fields, collection_size)
6820
6821 type(yac_dble_ptr), intent(inout) :: &
6822 src_frac_mask_buffer(num_src_fields, collection_size)
6823
6824 integer, intent (out) :: info
6825 integer, intent (out) :: ierror
6826
6828 field_id, num_src_fields, collection_size, &
6829 src_field_buffer, src_frac_mask_buffer, &
6830 info, ierror, .false.)
6831
6832end subroutine yac_fget_raw_frac_dble_ptr
6833
6834! ---------------------------------- get_async -------------------------------
6835
6836subroutine yac_fget_async_dble_ptr ( field_id, &
6837 collection_size, &
6838 recv_field, &
6839 info, &
6840 ierror )
6841
6843 use yac, dummy => yac_fget_async_dble_ptr
6844 use, intrinsic :: iso_c_binding, only: c_ptr
6845
6846 implicit none
6847
6848 interface
6849
6850 subroutine yac_cget_async_c ( field_id, &
6851 collection_size, &
6852 recv_field, &
6853 info, &
6854 ierror ) bind ( c, name='yac_cget_async' )
6855
6856 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6857
6858 integer ( kind=c_int ), value :: field_id
6859 integer ( kind=c_int ), value :: collection_size
6860 type(c_ptr) :: recv_field(*)
6861 integer ( kind=c_int ) :: info
6862 integer ( kind=c_int ) :: ierror
6863
6864 end subroutine yac_cget_async_c
6865
6866 end interface
6867
6868 integer, intent (in) :: field_id
6869 integer, intent (in) :: collection_size
6870 type(yac_dble_ptr) :: recv_field(collection_size)
6871 integer, intent (out) :: info
6872 integer, intent (out) :: ierror
6873
6874 integer :: i
6875 type(c_ptr), allocatable :: recv_field_(:)
6876
6878 field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
6879
6880 allocate(recv_field_(collection_size))
6881
6882 do i = 1, collection_size
6883 recv_field_(i) = yac_dble2cptr("yac_fget_async_dble_ptr", "recv_field", recv_field(i))
6884 end do
6885
6886 call yac_cget_async_c ( field_id, &
6887 collection_size, &
6888 recv_field_, &
6889 info, &
6890 ierror )
6891
6892 deallocate(recv_field_)
6893
6894end subroutine yac_fget_async_dble_ptr
6895
6896! ---------------------------------- get_raw_async -------------------------------
6897
6898subroutine yac_fget_raw_async_dble_ptr ( field_id, &
6899 num_src_fields, &
6900 collection_size, &
6901 src_field_buffer, &
6902 info, &
6903 ierror )
6904
6905 use yac, dummy => yac_fget_raw_async_dble_ptr
6906
6907 implicit none
6908
6909 interface
6910 subroutine yac_get_raw_dble_ptr ( field_id, &
6911 num_src_fields, &
6912 collection_size, &
6913 src_field_buffer, &
6914 info, &
6915 ierror, &
6916 use_async )
6917 import :: yac_dble_ptr
6918 integer, intent (in) :: field_id
6919 integer, intent (in) :: num_src_fields
6920 integer, intent (in) :: collection_size
6921 type(yac_dble_ptr), intent(inout) :: &
6922 src_field_buffer(num_src_fields, collection_size)
6923 integer, intent (out) :: info
6924 integer, intent (out) :: ierror
6925 logical, intent(in) :: use_async
6926 end subroutine yac_get_raw_dble_ptr
6927 end interface
6928
6929 integer, intent (in) :: field_id
6930 integer, intent (in) :: num_src_fields
6931 integer, intent (in) :: collection_size
6932 type(yac_dble_ptr), intent(inout) :: &
6933 src_field_buffer(num_src_fields, collection_size)
6934
6935 integer, intent (out) :: info
6936 integer, intent (out) :: ierror
6937
6938 call yac_get_raw_dble_ptr( &
6939 field_id, num_src_fields, collection_size, src_field_buffer, &
6940 info, ierror, .true.)
6941
6942end subroutine yac_fget_raw_async_dble_ptr
6943
6944subroutine yac_fget_raw_frac_async_dble_ptr ( field_id, &
6945 num_src_fields, &
6946 collection_size, &
6947 src_field_buffer, &
6948 src_frac_mask_buffer, &
6949 info, &
6950 ierror )
6951
6953
6954 implicit none
6955
6956 interface
6957 subroutine yac_get_raw_frac_dble_ptr ( field_id, &
6958 num_src_fields, &
6959 collection_size, &
6960 src_field_buffer, &
6961 src_frac_mask_buffer, &
6962 info, &
6963 ierror, &
6964 use_async )
6965 import :: yac_dble_ptr
6966 integer, intent (in) :: field_id
6967 integer, intent (in) :: num_src_fields
6968 integer, intent (in) :: collection_size
6969 type(yac_dble_ptr), intent(inout) :: &
6970 src_field_buffer(num_src_fields, collection_size)
6971 type(yac_dble_ptr), intent(inout) :: &
6972 src_frac_mask_buffer(num_src_fields, collection_size)
6973 integer, intent (out) :: info
6974 integer, intent (out) :: ierror
6975 logical, intent(in) :: use_async
6976 end subroutine yac_get_raw_frac_dble_ptr
6977 end interface
6978
6979 integer, intent (in) :: field_id
6980 integer, intent (in) :: num_src_fields
6981 integer, intent (in) :: collection_size
6982 type(yac_dble_ptr), intent(inout) :: &
6983 src_field_buffer(num_src_fields, collection_size)
6984
6985 type(yac_dble_ptr), intent(inout) :: &
6986 src_frac_mask_buffer(num_src_fields, collection_size)
6987
6988 integer, intent (out) :: info
6989 integer, intent (out) :: ierror
6990
6992 field_id, num_src_fields, collection_size, &
6993 src_field_buffer, src_frac_mask_buffer, &
6994 info, ierror, .true.)
6995
6997
6998! ---------------------------------- exchange --------------------------------
6999
7000subroutine yac_fexchange_real ( send_field_id, &
7001 recv_field_id, &
7002 send_nbr_hor_points, &
7003 send_nbr_pointsets, &
7004 recv_nbr_hor_points, &
7005 collection_size, &
7006 send_field, &
7007 recv_field, &
7008 send_info, &
7009 recv_info, &
7010 ierror )
7011
7012 use yac, dummy => yac_fexchange_real
7014
7015 implicit none
7016
7017 integer, intent (in) :: send_field_id
7018 integer, intent (in) :: recv_field_id
7019 integer, intent (in) :: send_nbr_hor_points
7020 integer, intent (in) :: send_nbr_pointsets
7021 integer, intent (in) :: recv_nbr_hor_points
7022 integer, intent (in) :: collection_size
7023 real, intent (in) :: send_field(send_nbr_hor_points, &
7024 send_nbr_pointsets, &
7025 collection_size)
7026
7027 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
7028 collection_size)
7029
7030 integer, intent (out) :: send_info
7031 integer, intent (out) :: recv_info
7032 integer, intent (out) :: ierror
7033
7034 double precision :: send_buffer(send_nbr_hor_points, &
7035 send_nbr_pointsets, &
7036 collection_size)
7037 double precision :: recv_buffer(recv_nbr_hor_points, &
7038 collection_size)
7039
7040 integer :: i
7041
7043 send_field_id, collection_size, send_nbr_pointsets, &
7044 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
7046 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
7047
7048 call send_field_to_dble(send_field_id, &
7049 send_nbr_hor_points, &
7050 send_nbr_pointsets, &
7051 collection_size, &
7052 send_field, &
7053 send_buffer)
7054 call recv_field_to_dble(recv_field_id, &
7055 recv_nbr_hor_points, &
7056 collection_size, &
7057 recv_field, &
7058 recv_buffer)
7059
7060 call yac_fexchange_dble ( send_field_id, &
7061 recv_field_id, &
7062 send_nbr_hor_points, &
7063 send_nbr_pointsets, &
7064 recv_nbr_hor_points, &
7065 collection_size, &
7066 send_buffer, &
7067 recv_buffer, &
7068 send_info, &
7069 recv_info, &
7070 ierror )
7071
7072 call recv_field_from_dble(recv_field_id, &
7073 recv_nbr_hor_points, &
7074 collection_size, &
7075 recv_buffer, &
7076 recv_field)
7077
7078end subroutine yac_fexchange_real
7079
7080subroutine yac_fexchange_frac_real ( send_field_id, &
7081 recv_field_id, &
7082 send_nbr_hor_points, &
7083 send_nbr_pointsets, &
7084 recv_nbr_hor_points, &
7085 collection_size, &
7086 send_field, &
7087 send_frac_mask, &
7088 recv_field, &
7089 send_info, &
7090 recv_info, &
7091 ierror )
7092
7093 use yac, dummy => yac_fexchange_frac_real
7095
7096 implicit none
7097
7098 integer, intent (in) :: send_field_id
7099 integer, intent (in) :: recv_field_id
7100 integer, intent (in) :: send_nbr_hor_points
7101 integer, intent (in) :: send_nbr_pointsets
7102 integer, intent (in) :: recv_nbr_hor_points
7103 integer, intent (in) :: collection_size
7104 real, intent (in) :: send_field(send_nbr_hor_points, &
7105 send_nbr_pointsets, &
7106 collection_size)
7107
7108 real, intent (in) :: send_frac_mask(send_nbr_hor_points, &
7109 send_nbr_pointsets, &
7110 collection_size)
7111
7112 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
7113 collection_size)
7114
7115 integer, intent (out) :: send_info
7116 integer, intent (out) :: recv_info
7117 integer, intent (out) :: ierror
7118
7119 double precision, allocatable :: send_buffer(:,:,:)
7120 double precision, allocatable :: send_frac_mask_buffer(:,:,:)
7121 double precision, allocatable :: recv_buffer(:,:)
7122
7123 integer :: i
7124
7126 send_field_id, collection_size, send_nbr_pointsets, &
7127 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
7129 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
7130
7131 allocate(send_buffer(send_nbr_hor_points, &
7132 send_nbr_pointsets, &
7133 collection_size))
7134 allocate(send_frac_mask_buffer(send_nbr_hor_points, &
7135 send_nbr_pointsets, &
7136 collection_size))
7137 allocate(recv_buffer(recv_nbr_hor_points, &
7138 collection_size))
7139
7140 call send_field_to_dble(send_field_id, &
7141 send_nbr_hor_points, &
7142 send_nbr_pointsets, &
7143 collection_size, &
7144 send_field, &
7145 send_buffer, &
7146 send_frac_mask, &
7147 send_frac_mask_buffer)
7148 call recv_field_to_dble(recv_field_id, &
7149 recv_nbr_hor_points, &
7150 collection_size, &
7151 recv_field, &
7152 recv_buffer)
7153
7154 call yac_fexchange_frac_dble ( send_field_id, &
7155 recv_field_id, &
7156 send_nbr_hor_points, &
7157 send_nbr_pointsets, &
7158 recv_nbr_hor_points, &
7159 collection_size, &
7160 send_buffer, &
7161 send_frac_mask_buffer, &
7162 recv_buffer, &
7163 send_info, &
7164 recv_info, &
7165 ierror )
7166
7167 call recv_field_from_dble(recv_field_id, &
7168 recv_nbr_hor_points, &
7169 collection_size, &
7170 recv_buffer, &
7171 recv_field)
7172
7173 deallocate(send_buffer)
7174 deallocate(send_frac_mask_buffer)
7175 deallocate(recv_buffer)
7176
7177end subroutine yac_fexchange_frac_real
7178
7179subroutine yac_fexchange_raw_real ( send_field_id, &
7180 recv_field_id, &
7181 send_nbr_hor_points, &
7182 send_nbr_pointsets, &
7183 src_field_buffer_size, &
7184 collection_size, &
7185 send_field, &
7186 src_field_buffer, &
7187 send_info, &
7188 recv_info, &
7189 ierror )
7190
7191 use yac, dummy => yac_fexchange_raw_real
7193
7194 implicit none
7195
7196 integer, intent (in) :: send_field_id
7197 integer, intent (in) :: recv_field_id
7198 integer, intent (in) :: send_nbr_hor_points
7199 integer, intent (in) :: send_nbr_pointsets
7200 integer, intent (in) :: src_field_buffer_size
7202 integer, intent (in) :: collection_size
7203 real, intent (in) :: send_field(send_nbr_hor_points, &
7204 send_nbr_pointsets, &
7205 collection_size)
7206
7207 real, intent (out) :: &
7208 src_field_buffer(src_field_buffer_size, collection_size)
7209
7210 integer, intent (out) :: send_info
7211 integer, intent (out) :: recv_info
7212 integer, intent (out) :: ierror
7213
7214 double precision, allocatable :: send_buffer(:,:,:)
7215 double precision, allocatable :: src_field_buffer_dble(:,:)
7216
7217 integer :: i
7218
7220 send_field_id, collection_size, send_nbr_pointsets, &
7221 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
7223 recv_field_id, collection_size, src_field_buffer_size)
7224
7225 allocate(send_buffer(send_nbr_hor_points, &
7226 send_nbr_pointsets, &
7227 collection_size))
7228 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
7229
7230 call send_field_to_dble(send_field_id, &
7231 send_nbr_hor_points, &
7232 send_nbr_pointsets, &
7233 collection_size, &
7234 send_field, &
7235 send_buffer)
7236
7237 call yac_fexchange_raw_dble ( send_field_id, &
7238 recv_field_id, &
7239 send_nbr_hor_points, &
7240 send_nbr_pointsets, &
7241 src_field_buffer_size, &
7242 collection_size, &
7243 send_buffer, &
7244 src_field_buffer_dble, &
7245 send_info, &
7246 recv_info, &
7247 ierror )
7248
7249 src_field_buffer = real(src_field_buffer_dble)
7250
7251 deallocate(send_buffer)
7252 deallocate(src_field_buffer_dble)
7253
7254end subroutine yac_fexchange_raw_real
7255
7256subroutine yac_fexchange_raw_frac_real ( send_field_id, &
7257 recv_field_id, &
7258 send_nbr_hor_points, &
7259 send_nbr_pointsets, &
7260 src_field_buffer_size, &
7261 collection_size, &
7262 send_field, &
7263 send_frac_mask, &
7264 src_field_buffer, &
7265 src_frac_mask_buffer, &
7266 send_info, &
7267 recv_info, &
7268 ierror )
7269
7270 use yac, dummy => yac_fexchange_raw_frac_real
7272
7273 implicit none
7274
7275 integer, intent (in) :: send_field_id
7276 integer, intent (in) :: recv_field_id
7277 integer, intent (in) :: send_nbr_hor_points
7278 integer, intent (in) :: send_nbr_pointsets
7279 integer, intent (in) :: src_field_buffer_size
7281 integer, intent (in) :: collection_size
7282 real, intent (in) :: &
7283 send_field(send_nbr_hor_points, send_nbr_pointsets, collection_size)
7284
7285 real, intent (in) :: &
7286 send_frac_mask(send_nbr_hor_points, send_nbr_pointsets, collection_size)
7287
7288 real, intent (out) :: &
7289 src_field_buffer(src_field_buffer_size, collection_size)
7290
7291 real, intent (out) :: &
7292 src_frac_mask_buffer(src_field_buffer_size, collection_size)
7293
7294 integer, intent (out) :: send_info
7295 integer, intent (out) :: recv_info
7296 integer, intent (out) :: ierror
7297
7298 double precision, allocatable :: send_field_dble(:,:,:)
7299 double precision, allocatable :: send_frac_mask_dble(:,:,:)
7300 double precision, allocatable :: src_field_buffer_dble(:,:)
7301 double precision, allocatable :: src_frac_mask_buffer_dble(:,:)
7302
7303 integer :: i
7304
7306 send_field_id, collection_size, send_nbr_pointsets, &
7307 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
7309 recv_field_id, collection_size, src_field_buffer_size)
7310
7311 allocate(send_field_dble(send_nbr_hor_points, &
7312 send_nbr_pointsets, &
7313 collection_size))
7314 allocate(send_frac_mask_dble(send_nbr_hor_points, &
7315 send_nbr_pointsets, &
7316 collection_size))
7317 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
7318 allocate(src_frac_mask_buffer_dble(src_field_buffer_size, collection_size))
7319
7320 call send_field_to_dble(send_field_id, &
7321 send_nbr_hor_points, &
7322 send_nbr_pointsets, &
7323 collection_size, &
7324 send_field, &
7325 send_field_dble)
7326 call send_field_to_dble(send_field_id, &
7327 send_nbr_hor_points, &
7328 send_nbr_pointsets, &
7329 collection_size, &
7330 send_frac_mask, &
7331 send_frac_mask_dble)
7332
7333 call yac_fexchange_raw_frac_dble ( send_field_id, &
7334 recv_field_id, &
7335 send_nbr_hor_points, &
7336 send_nbr_pointsets, &
7337 src_field_buffer_size, &
7338 collection_size, &
7339 send_field_dble, &
7340 send_frac_mask_dble, &
7341 src_field_buffer_dble, &
7342 src_frac_mask_buffer_dble, &
7343 send_info, &
7344 recv_info, &
7345 ierror )
7346
7347 src_field_buffer = real(src_field_buffer_dble)
7348 src_frac_mask_buffer = real(src_frac_mask_buffer_dble)
7349
7350 deallocate(send_field_dble)
7351 deallocate(send_frac_mask_dble)
7352 deallocate(src_field_buffer_dble)
7353 deallocate(src_frac_mask_buffer_dble)
7354
7355end subroutine yac_fexchange_raw_frac_real
7356
7357subroutine yac_fexchange_real_ptr ( send_field_id, &
7358 recv_field_id, &
7359 send_nbr_pointsets, &
7360 collection_size, &
7361 send_field, &
7362 recv_field, &
7363 send_info, &
7364 recv_info, &
7365 ierror )
7366
7367 use yac, dummy => yac_fexchange_real_ptr
7369
7370 implicit none
7371
7372 integer, intent (in) :: send_field_id
7373 integer, intent (in) :: recv_field_id
7374 integer, intent (in) :: send_nbr_pointsets
7375 integer, intent (in) :: collection_size
7376 type(yac_real_ptr), intent (in) :: &
7377 send_field(send_nbr_pointsets, &
7378 collection_size)
7379
7380 type(yac_real_ptr) :: recv_field(collection_size)
7381
7382 integer, intent (out) :: send_info
7383 integer, intent (out) :: recv_info
7384 integer, intent (out) :: ierror
7385
7386 integer :: i, j
7387 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
7388 type(yac_dble_ptr), allocatable :: recv_field_dble(:)
7389
7390 allocate(send_field_dble(send_nbr_pointsets, collection_size))
7391 allocate(recv_field_dble(collection_size))
7392
7394 send_field_id, collection_size, send_nbr_pointsets, &
7395 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
7397 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
7398
7399 call send_field_to_dble_ptr(send_field_id, &
7400 send_nbr_pointsets, &
7401 collection_size, &
7402 send_field, &
7403 send_field_dble)
7404 call recv_field_to_dble_ptr(recv_field_id, &
7405 collection_size, &
7406 recv_field, &
7407 recv_field_dble)
7408
7409 call yac_fexchange_dble_ptr ( send_field_id, &
7410 recv_field_id, &
7411 send_nbr_pointsets, &
7412 collection_size, &
7413 send_field_dble, &
7414 recv_field_dble, &
7415 send_info, &
7416 recv_info, &
7417 ierror )
7418
7419 call recv_field_from_dble_ptr(recv_field_id, &
7420 collection_size, &
7421 recv_field_dble, &
7422 recv_field)
7423 do i = 1, collection_size
7424 do j = 1, send_nbr_pointsets
7425 deallocate(send_field_dble(j, i)%p)
7426 end do
7427 end do
7428
7429 deallocate(send_field_dble)
7430 deallocate(recv_field_dble)
7431
7432end subroutine yac_fexchange_real_ptr
7433
7434subroutine yac_fexchange_frac_real_ptr ( send_field_id, &
7435 recv_field_id, &
7436 send_nbr_pointsets, &
7437 collection_size, &
7438 send_field, &
7439 send_frac_mask, &
7440 recv_field, &
7441 send_info, &
7442 recv_info, &
7443 ierror )
7444
7445 use yac, dummy => yac_fexchange_frac_real_ptr
7447
7448 implicit none
7449
7450 integer, intent (in) :: send_field_id
7451 integer, intent (in) :: recv_field_id
7452 integer, intent (in) :: send_nbr_pointsets
7453 integer, intent (in) :: collection_size
7454 type(yac_real_ptr), intent (in) :: &
7455 send_field(send_nbr_pointsets, &
7456 collection_size)
7457
7458 type(yac_real_ptr), intent (in) :: &
7459 send_frac_mask(send_nbr_pointsets, &
7460 collection_size)
7461
7462 type(yac_real_ptr) :: recv_field(collection_size)
7463
7464 integer, intent (out) :: send_info
7465 integer, intent (out) :: recv_info
7466 integer, intent (out) :: ierror
7467
7468 integer :: i, j
7469 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
7470 type(yac_dble_ptr), allocatable :: send_frac_mask_dble(:,:)
7471 type(yac_dble_ptr), allocatable :: recv_field_dble(:)
7472
7473 allocate(send_field_dble(send_nbr_pointsets, collection_size))
7474 allocate(send_frac_mask_dble(send_nbr_pointsets, collection_size))
7475 allocate(recv_field_dble(collection_size))
7476
7478 send_field_id, collection_size, send_nbr_pointsets, &
7479 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
7481 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
7482
7483 call send_field_to_dble_ptr(send_field_id, &
7484 send_nbr_pointsets, &
7485 collection_size, &
7486 send_field, &
7487 send_field_dble, &
7488 send_frac_mask, &
7489 send_frac_mask_dble)
7490 call recv_field_to_dble_ptr(recv_field_id, &
7491 collection_size, &
7492 recv_field, &
7493 recv_field_dble)
7494
7495 call yac_fexchange_frac_dble_ptr ( send_field_id, &
7496 recv_field_id, &
7497 send_nbr_pointsets, &
7498 collection_size, &
7499 send_field_dble, &
7500 send_frac_mask_dble, &
7501 recv_field_dble, &
7502 send_info, &
7503 recv_info, &
7504 ierror )
7505
7506 call recv_field_from_dble_ptr(recv_field_id, &
7507 collection_size, &
7508 recv_field_dble, &
7509 recv_field)
7510 do i = 1, collection_size
7511 do j = 1, send_nbr_pointsets
7512 deallocate(send_field_dble(j, i)%p)
7513 deallocate(send_frac_mask_dble(j, i)%p)
7514 end do
7515 end do
7516
7517 deallocate(send_field_dble)
7518 deallocate(send_frac_mask_dble)
7519 deallocate(recv_field_dble)
7520
7521end subroutine yac_fexchange_frac_real_ptr
7522
7523subroutine yac_fexchange_raw_real_ptr ( send_field_id, &
7524 recv_field_id, &
7525 send_nbr_pointsets, &
7526 collection_size, &
7527 send_field, &
7528 src_field_buffer, &
7529 send_info, &
7530 recv_info, &
7531 ierror )
7532
7533 use yac, dummy => yac_fexchange_raw_real_ptr
7535 use, intrinsic :: iso_c_binding, only: c_null_char
7536
7537 implicit none
7538
7539 integer, intent (in) :: send_field_id
7540 integer, intent (in) :: recv_field_id
7541 integer, intent (in) :: send_nbr_pointsets
7542 integer, intent (in) :: collection_size
7543 type(yac_real_ptr), intent (in) :: &
7544 send_field(send_nbr_pointsets, collection_size)
7545 type(yac_real_ptr), intent (inout) :: &
7546 src_field_buffer(send_nbr_pointsets, collection_size)
7547 integer, intent (out) :: send_info
7548 integer, intent (out) :: recv_info
7549 integer, intent (out) :: ierror
7550
7551 integer :: i, j
7552 integer, allocatable :: src_field_buffer_sizes(:)
7553 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
7554 type(yac_dble_ptr), allocatable :: src_field_buffer_dble(:,:)
7555
7556 allocate(src_field_buffer_sizes(send_nbr_pointsets))
7557 allocate(send_field_dble(send_nbr_pointsets, collection_size))
7558 allocate(src_field_buffer_dble(send_nbr_pointsets, collection_size))
7559
7560 src_field_buffer_sizes = &
7561 (/(SIZE(src_field_buffer(i, 1)%p),i=1,send_nbr_pointsets)/)
7562
7564 send_field_id, collection_size, send_nbr_pointsets, &
7565 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
7567 recv_field_id, send_nbr_pointsets, collection_size, src_field_buffer_sizes)
7568
7569 call send_field_to_dble_ptr(send_field_id, &
7570 send_nbr_pointsets, &
7571 collection_size, &
7572 send_field, &
7573 send_field_dble)
7574
7575 do i = 1, send_nbr_pointsets
7576 do j = 1, collection_size
7577 yac_fassert(src_field_buffer_sizes(i) == size(src_field_buffer(i,j)%p), "ERROR(yac_fexchange_raw_real_ptr): inconsistent source buffer sizes")
7578 allocate(src_field_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
7579 end do
7580 end do
7581
7583 recv_field_id, send_nbr_pointsets, collection_size, src_field_buffer_sizes)
7584
7585 call yac_fexchange_raw_dble_ptr ( send_field_id, &
7586 recv_field_id, &
7587 send_nbr_pointsets, &
7588 collection_size, &
7589 send_field_dble, &
7590 src_field_buffer_dble, &
7591 send_info, &
7592 recv_info, &
7593 ierror )
7594
7595 do i = 1, send_nbr_pointsets
7596 do j = 1, collection_size
7597 src_field_buffer(i,j)%p = &
7598 real(src_field_buffer_dble(i,j)%p)
7599 deallocate(src_field_buffer_dble(i,j)%p)
7600 end do
7601 end do
7602
7603 do i = 1, collection_size
7604 do j = 1, send_nbr_pointsets
7605 deallocate(send_field_dble(j, i)%p)
7606 end do
7607 end do
7608
7609 deallocate(src_field_buffer_sizes)
7610 deallocate(send_field_dble)
7611 deallocate(src_field_buffer_dble)
7612
7613end subroutine yac_fexchange_raw_real_ptr
7614
7615subroutine yac_fexchange_raw_frac_real_ptr ( send_field_id, &
7616 recv_field_id, &
7617 send_nbr_pointsets, &
7618 collection_size, &
7619 send_field, &
7620 send_frac_mask, &
7621 src_field_buffer, &
7622 src_frac_mask_buffer, &
7623 send_info, &
7624 recv_info, &
7625 ierror )
7626
7629 use, intrinsic :: iso_c_binding, only: c_null_char
7630
7631 implicit none
7632
7633 integer, intent (in) :: send_field_id
7634 integer, intent (in) :: recv_field_id
7635 integer, intent (in) :: send_nbr_pointsets
7636 integer, intent (in) :: collection_size
7637 type(yac_real_ptr), intent (in) :: &
7638 send_field(send_nbr_pointsets, collection_size)
7639 type(yac_real_ptr), intent (in) :: &
7640 send_frac_mask(send_nbr_pointsets, collection_size)
7641 type(yac_real_ptr), intent(inout) :: &
7642 src_field_buffer(send_nbr_pointsets, collection_size)
7643 type(yac_real_ptr), intent(inout) :: &
7644 src_frac_mask_buffer(send_nbr_pointsets, collection_size)
7645
7646 integer, intent (out) :: send_info
7647 integer, intent (out) :: recv_info
7648 integer, intent (out) :: ierror
7649
7650 integer :: i, j
7651 integer, allocatable :: src_field_buffer_sizes(:)
7652 type(yac_dble_ptr), allocatable :: send_field_dble(:,:)
7653 type(yac_dble_ptr), allocatable :: send_frac_mask_dble(:,:)
7654 type(yac_dble_ptr), allocatable :: src_field_buffer_dble(:,:)
7655 type(yac_dble_ptr), allocatable :: src_frac_mask_buffer_dble(:,:)
7656
7657 allocate(src_field_buffer_sizes(send_nbr_pointsets))
7658 allocate(send_field_dble(send_nbr_pointsets, collection_size))
7659 allocate(send_frac_mask_dble(send_nbr_pointsets, collection_size))
7660 allocate(src_field_buffer_dble(send_nbr_pointsets, collection_size))
7661 allocate(src_frac_mask_buffer_dble(send_nbr_pointsets, collection_size))
7662
7663 src_field_buffer_sizes = &
7664 (/(SIZE(src_field_buffer(i, 1)%p),i=1,send_nbr_pointsets)/)
7665
7667 send_field_id, collection_size, send_nbr_pointsets, &
7668 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
7670 recv_field_id, send_nbr_pointsets, collection_size, src_field_buffer_sizes)
7671
7672 call send_field_to_dble_ptr(send_field_id, &
7673 send_nbr_pointsets, &
7674 collection_size, &
7675 send_field, &
7676 send_field_dble, &
7677 send_frac_mask, &
7678 send_frac_mask_dble)
7679
7680 do i = 1, send_nbr_pointsets
7681 do j = 1, collection_size
7682 yac_fassert(src_field_buffer_sizes(i) == size(src_field_buffer(i,j)%p), "ERROR(yac_fexchange_raw_frac_real_ptr): inconsistent source buffer sizes")
7683 allocate(src_field_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
7684 allocate(src_frac_mask_buffer_dble(i,j)%p(src_field_buffer_sizes(i)))
7685 end do
7686 end do
7687
7688 call yac_fexchange_raw_frac_dble_ptr ( send_field_id, &
7689 recv_field_id, &
7690 send_nbr_pointsets, &
7691 collection_size, &
7692 send_field_dble, &
7693 send_frac_mask_dble, &
7694 src_field_buffer_dble, &
7695 src_frac_mask_buffer_dble, &
7696 send_info, &
7697 recv_info, &
7698 ierror )
7699
7700 do i = 1, send_nbr_pointsets
7701 do j = 1, collection_size
7702 src_field_buffer(i,j)%p = &
7703 real(src_field_buffer_dble(i,j)%p)
7704 deallocate(src_field_buffer_dble(i,j)%p)
7705 src_frac_mask_buffer(i,j)%p = &
7706 real(src_frac_mask_buffer_dble(i,j)%p)
7707 deallocate(src_frac_mask_buffer_dble(i,j)%p)
7708 end do
7709 end do
7710
7711 do i = 1, collection_size
7712 do j = 1, send_nbr_pointsets
7713 deallocate(send_field_dble(j, i)%p)
7714 deallocate(send_frac_mask_dble(j, i)%p)
7715 end do
7716 end do
7717
7718 deallocate(src_field_buffer_sizes)
7719 deallocate(send_field_dble)
7720 deallocate(send_frac_mask_dble)
7721 deallocate(src_field_buffer_dble)
7722 deallocate(src_frac_mask_buffer_dble)
7723
7725
7726subroutine yac_fexchange_single_pointset_real ( send_field_id, &
7727 recv_field_id, &
7728 send_nbr_hor_points, &
7729 recv_nbr_hor_points, &
7730 collection_size, &
7731 send_field, &
7732 recv_field, &
7733 send_info, &
7734 recv_info, &
7735 ierror )
7736
7739
7740 implicit none
7741
7742 integer, intent (in) :: send_field_id
7743 integer, intent (in) :: recv_field_id
7744 integer, intent (in) :: send_nbr_hor_points
7745 integer, intent (in) :: recv_nbr_hor_points
7746 integer, intent (in) :: collection_size
7747 real, intent (in) :: send_field(send_nbr_hor_points, &
7748 collection_size)
7749
7750 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
7751 collection_size)
7752
7753 integer, intent (out) :: send_info
7754 integer, intent (out) :: recv_info
7755 integer, intent (out) :: ierror
7756
7757 double precision, allocatable :: send_buffer(:,:)
7758 double precision, allocatable :: recv_buffer(:,:)
7759
7760 allocate(send_buffer(send_nbr_hor_points, collection_size))
7761 allocate(recv_buffer(recv_nbr_hor_points, collection_size))
7762
7764 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
7766 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
7767
7768 call send_field_to_dble_single(send_field_id, &
7769 send_nbr_hor_points, &
7770 collection_size, &
7771 send_field, &
7772 send_buffer)
7773
7774 call recv_field_to_dble(recv_field_id, &
7775 recv_nbr_hor_points, &
7776 collection_size, &
7777 recv_field, &
7778 recv_buffer)
7779
7780 call yac_fexchange_single_pointset_dble ( send_field_id, &
7781 recv_field_id, &
7782 send_nbr_hor_points, &
7783 recv_nbr_hor_points, &
7784 collection_size, &
7785 send_buffer, &
7786 recv_buffer, &
7787 send_info, &
7788 recv_info, &
7789 ierror )
7790
7791 call recv_field_from_dble(recv_field_id, &
7792 recv_nbr_hor_points, &
7793 collection_size, &
7794 recv_buffer, &
7795 recv_field)
7796
7797 deallocate(send_buffer)
7798 deallocate(recv_buffer)
7799
7801
7802subroutine yac_fexchange_frac_single_pointset_real ( send_field_id, &
7803 recv_field_id, &
7804 send_nbr_hor_points, &
7805 recv_nbr_hor_points, &
7806 collection_size, &
7807 send_field, &
7808 send_frac_mask, &
7809 recv_field, &
7810 send_info, &
7811 recv_info, &
7812 ierror )
7813
7816
7817 implicit none
7818
7819 integer, intent (in) :: send_field_id
7820 integer, intent (in) :: recv_field_id
7821 integer, intent (in) :: send_nbr_hor_points
7822 integer, intent (in) :: recv_nbr_hor_points
7823 integer, intent (in) :: collection_size
7824 real, intent (in) :: send_field(send_nbr_hor_points, &
7825 collection_size)
7826
7827 real, intent (in) :: send_frac_mask(send_nbr_hor_points, &
7828 collection_size)
7829
7830 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
7831 collection_size)
7832
7833 integer, intent (out) :: send_info
7834 integer, intent (out) :: recv_info
7835 integer, intent (out) :: ierror
7836
7837 double precision, allocatable :: send_buffer(:, :)
7838 double precision, allocatable :: send_frac_mask_buffer(:, :)
7839 double precision, allocatable :: recv_buffer(:, :)
7840
7842 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
7844 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
7845
7846 allocate(send_buffer(send_nbr_hor_points, collection_size))
7847 allocate(send_frac_mask_buffer(send_nbr_hor_points, collection_size))
7848 allocate(recv_buffer(recv_nbr_hor_points, collection_size))
7849
7850 call send_field_to_dble_single(send_field_id, &
7851 send_nbr_hor_points, &
7852 collection_size, &
7853 send_field, &
7854 send_buffer, &
7855 send_frac_mask, &
7856 send_frac_mask_buffer)
7857
7858 call recv_field_to_dble(recv_field_id, &
7859 recv_nbr_hor_points, &
7860 collection_size, &
7861 recv_field, &
7862 recv_buffer)
7863
7864 call yac_fexchange_frac_single_pointset_dble ( send_field_id, &
7865 recv_field_id, &
7866 send_nbr_hor_points, &
7867 recv_nbr_hor_points, &
7868 collection_size, &
7869 send_buffer, &
7870 send_frac_mask_buffer, &
7871 recv_buffer, &
7872 send_info, &
7873 recv_info, &
7874 ierror )
7875
7876 call recv_field_from_dble(recv_field_id, &
7877 recv_nbr_hor_points, &
7878 collection_size, &
7879 recv_buffer, &
7880 recv_field)
7881
7882 deallocate(send_buffer)
7883 deallocate(send_frac_mask_buffer)
7884 deallocate(recv_buffer)
7885
7887
7888subroutine yac_fexchange_raw_single_pointset_real ( send_field_id, &
7889 recv_field_id, &
7890 send_nbr_hor_points, &
7891 src_field_buffer_size, &
7892 collection_size, &
7893 send_field, &
7894 src_field_buffer, &
7895 send_info, &
7896 recv_info, &
7897 ierror )
7898
7901
7902 implicit none
7903
7904 integer, intent (in) :: send_field_id
7905 integer, intent (in) :: recv_field_id
7906 integer, intent (in) :: send_nbr_hor_points
7907 integer, intent (in) :: src_field_buffer_size
7908 integer, intent (in) :: collection_size
7909 real, intent (in) :: &
7910 send_field(send_nbr_hor_points, collection_size)
7911
7912 real, intent (out) :: &
7913 src_field_buffer(src_field_buffer_size, collection_size)
7914
7915 integer, intent (out) :: send_info
7916 integer, intent (out) :: recv_info
7917 integer, intent (out) :: ierror
7918
7919 double precision, allocatable :: send_buffer(:, :)
7920 double precision, allocatable :: src_field_buffer_dble(:, :)
7921
7923 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
7925 recv_field_id, collection_size, src_field_buffer_size)
7926
7927 allocate(send_buffer(send_nbr_hor_points, collection_size))
7928 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
7929
7930 call send_field_to_dble_single(send_field_id, &
7931 send_nbr_hor_points, &
7932 collection_size, &
7933 send_field, &
7934 send_buffer)
7935
7936 call yac_fexchange_raw_single_pointset_dble ( send_field_id, &
7937 recv_field_id, &
7938 send_nbr_hor_points, &
7939 src_field_buffer_size, &
7940 collection_size, &
7941 send_buffer, &
7942 src_field_buffer_dble, &
7943 send_info, &
7944 recv_info, &
7945 ierror )
7946
7947 src_field_buffer = real(src_field_buffer_dble)
7948
7949 deallocate(send_buffer)
7950 deallocate(src_field_buffer_dble)
7951
7953
7955 recv_field_id, &
7956 send_nbr_hor_points, &
7957 src_field_buffer_size, &
7958 collection_size, &
7959 send_field, &
7960 send_frac_mask, &
7961 src_field_buffer, &
7962 src_frac_mask_buffer, &
7963 send_info, &
7964 recv_info, &
7965 ierror )
7966
7969
7970 implicit none
7971
7972 integer, intent (in) :: send_field_id
7973 integer, intent (in) :: recv_field_id
7974 integer, intent (in) :: send_nbr_hor_points
7975 integer, intent (in) :: src_field_buffer_size
7977 integer, intent (in) :: collection_size
7978 real, intent (in) :: &
7979 send_field(send_nbr_hor_points, collection_size)
7980
7981 real, intent (in) :: &
7982 send_frac_mask(send_nbr_hor_points, collection_size)
7983
7984 real, intent (out) :: &
7985 src_field_buffer(src_field_buffer_size, collection_size)
7986
7987 real, intent (out) :: &
7988 src_frac_mask_buffer(src_field_buffer_size, collection_size)
7989
7990 integer, intent (out) :: send_info
7991 integer, intent (out) :: recv_info
7992 integer, intent (out) :: ierror
7993
7994 double precision, allocatable :: send_field_dble(:,:)
7995 double precision, allocatable :: send_frac_mask_dble(:,:)
7996 double precision, allocatable :: src_field_buffer_dble(:,:)
7997 double precision, allocatable :: src_frac_mask_buffer_dble(:,:)
7998
8000 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
8002 recv_field_id, collection_size, src_field_buffer_size)
8003
8004 allocate(send_field_dble(send_nbr_hor_points, collection_size))
8005 allocate(send_frac_mask_dble(send_nbr_hor_points, collection_size))
8006 allocate(src_field_buffer_dble(src_field_buffer_size, collection_size))
8007 allocate(src_frac_mask_buffer_dble(src_field_buffer_size, collection_size))
8008
8009 call send_field_to_dble_single(send_field_id, &
8010 send_nbr_hor_points, &
8011 collection_size, &
8012 send_field, &
8013 send_field_dble)
8014 call send_field_to_dble_single(send_field_id, &
8015 send_nbr_hor_points, &
8016 collection_size, &
8017 send_frac_mask, &
8018 send_frac_mask_dble)
8019
8020 call yac_fexchange_raw_frac_single_pointset_dble ( send_field_id, &
8021 recv_field_id, &
8022 send_nbr_hor_points, &
8023 src_field_buffer_size, &
8024 collection_size, &
8025 send_field_dble, &
8026 send_frac_mask_dble, &
8027 src_field_buffer_dble, &
8028 src_frac_mask_buffer_dble, &
8029 send_info, &
8030 recv_info, &
8031 ierror )
8032
8033 src_field_buffer = real(src_field_buffer_dble)
8034 src_frac_mask_buffer = real(src_frac_mask_buffer_dble)
8035
8036 deallocate(send_field_dble)
8037 deallocate(send_frac_mask_dble)
8038 deallocate(src_field_buffer_dble)
8039 deallocate(src_frac_mask_buffer_dble)
8040
8042
8055subroutine yac_fexchange_dble ( send_field_id, &
8056 recv_field_id, &
8057 send_nbr_hor_points, &
8058 send_nbr_pointsets, &
8059 recv_nbr_hor_points, &
8060 collection_size, &
8061 send_field, &
8062 recv_field, &
8063 send_info, &
8064 recv_info, &
8065 ierror )
8066
8067 use yac, dummy => yac_fexchange_dble
8068
8069 implicit none
8070
8071 interface
8072
8073 subroutine yac_cexchange__c ( send_field_id, &
8074 recv_field_id, &
8075 collection_size, &
8076 send_field, &
8077 recv_field, &
8078 send_info, &
8079 recv_info, &
8080 ierror ) &
8081 bind( c, name='yac_cexchange_' )
8082
8083 use, intrinsic :: iso_c_binding, only : c_int, c_double
8084
8085 integer ( kind=c_int ), value :: send_field_id
8086 integer ( kind=c_int ), value :: recv_field_id
8087 integer ( kind=c_int ), value :: collection_size
8088 real ( kind=c_double ) :: send_field(*)
8089 real ( kind=c_double ) :: recv_field(*)
8090 integer ( kind=c_int ) :: send_info
8091 integer ( kind=c_int ) :: recv_info
8092 integer ( kind=c_int ) :: ierror
8093
8094 end subroutine yac_cexchange__c
8095
8096 end interface
8097
8098 integer, intent (in) :: send_field_id
8099 integer, intent (in) :: recv_field_id
8100 integer, intent (in) :: send_nbr_hor_points
8101 integer, intent (in) :: send_nbr_pointsets
8102 integer, intent (in) :: recv_nbr_hor_points
8103 integer, intent (in) :: collection_size
8104 double precision, intent (in) :: &
8105 send_field( &
8106 send_nbr_hor_points, &
8107 send_nbr_pointsets, &
8108 collection_size)
8109 double precision, intent (inout):: &
8110 recv_field( &
8111 recv_nbr_hor_points, &
8112 collection_size)
8113 integer, intent (out) :: send_info
8114 integer, intent (out) :: recv_info
8115 integer, intent (out) :: ierror
8116
8117 integer :: i
8118
8120 send_field_id, collection_size, send_nbr_pointsets, &
8121 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
8123 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
8124
8125 call yac_cexchange__c ( send_field_id, &
8126 recv_field_id, &
8127 collection_size, &
8128 send_field, &
8129 recv_field, &
8130 send_info, &
8131 recv_info, &
8132 ierror )
8133
8134end subroutine yac_fexchange_dble
8135
8149subroutine yac_fexchange_frac_dble ( send_field_id, &
8150 recv_field_id, &
8151 send_nbr_hor_points, &
8152 send_nbr_pointsets, &
8153 recv_nbr_hor_points, &
8154 collection_size, &
8155 send_field, &
8156 send_frac_mask, &
8157 recv_field, &
8158 send_info, &
8159 recv_info, &
8160 ierror )
8161
8162 use yac, dummy => yac_fexchange_frac_dble
8163
8164 implicit none
8165
8166 interface
8167
8168 subroutine yac_cexchange_frac__c ( send_field_id, &
8169 recv_field_id, &
8170 collection_size, &
8171 send_field, &
8172 send_frac_mask, &
8173 recv_field, &
8174 send_info, &
8175 recv_info, &
8176 ierror ) &
8177 bind( c, name='yac_cexchange_frac_' )
8178
8179 use, intrinsic :: iso_c_binding, only : c_int, c_double
8180
8181 integer ( kind=c_int ), value :: send_field_id
8182 integer ( kind=c_int ), value :: recv_field_id
8183 integer ( kind=c_int ), value :: collection_size
8184 real ( kind=c_double ) :: send_field(*)
8185 real ( kind=c_double ) :: send_frac_mask(*)
8186 real ( kind=c_double ) :: recv_field(*)
8187 integer ( kind=c_int ) :: send_info
8188 integer ( kind=c_int ) :: recv_info
8189 integer ( kind=c_int ) :: ierror
8190
8191 end subroutine yac_cexchange_frac__c
8192
8193 end interface
8194
8195 integer, intent (in) :: send_field_id
8196 integer, intent (in) :: recv_field_id
8197 integer, intent (in) :: send_nbr_hor_points
8198 integer, intent (in) :: send_nbr_pointsets
8199 integer, intent (in) :: recv_nbr_hor_points
8200 integer, intent (in) :: collection_size
8201 double precision, intent (in) :: &
8202 send_field( &
8203 send_nbr_hor_points, &
8204 send_nbr_pointsets, &
8205 collection_size)
8206 double precision, intent (in) :: &
8207 send_frac_mask( &
8208 send_nbr_hor_points, &
8209 send_nbr_pointsets, &
8210 collection_size)
8211 double precision, intent (inout):: &
8212 recv_field( &
8213 recv_nbr_hor_points, &
8214 collection_size)
8215 integer, intent (out) :: send_info
8216 integer, intent (out) :: recv_info
8217 integer, intent (out) :: ierror
8218
8219 integer :: i
8220
8222 send_field_id, collection_size, send_nbr_pointsets, &
8223 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
8225 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
8226
8227 call yac_cexchange_frac__c ( send_field_id, &
8228 recv_field_id, &
8229 collection_size, &
8230 send_field, &
8231 send_frac_mask, &
8232 recv_field, &
8233 send_info, &
8234 recv_info, &
8235 ierror )
8236
8237end subroutine yac_fexchange_frac_dble
8238
8239subroutine yac_fexchange_raw_dble ( send_field_id, &
8240 recv_field_id, &
8241 send_nbr_hor_points, &
8242 send_nbr_pointsets, &
8243 src_field_buffer_size, &
8244 collection_size, &
8245 send_field, &
8246 src_field_buffer, &
8247 send_info, &
8248 recv_info, &
8249 ierror )
8250
8251 use yac, dummy => yac_fexchange_raw_dble
8252
8253 implicit none
8254
8255 interface
8256
8257 subroutine yac_cexchange_raw__c ( send_field_id, &
8258 recv_field_id, &
8259 collection_size, &
8260 send_field, &
8261 src_field_buffer, &
8262 send_info, &
8263 recv_info, &
8264 ierror ) &
8265 bind( c, name='yac_cexchange_raw_' )
8266
8267 use, intrinsic :: iso_c_binding, only : c_int, c_double
8268
8269 integer ( kind=c_int ), value :: send_field_id
8270 integer ( kind=c_int ), value :: recv_field_id
8271 integer ( kind=c_int ), value :: collection_size
8272 real ( kind=c_double ) :: send_field(*)
8273 real ( kind=c_double ) :: src_field_buffer(*)
8274 integer ( kind=c_int ) :: send_info
8275 integer ( kind=c_int ) :: recv_info
8276 integer ( kind=c_int ) :: ierror
8277
8278 end subroutine yac_cexchange_raw__c
8279
8280 end interface
8281
8282 integer, intent (in) :: send_field_id
8283 integer, intent (in) :: recv_field_id
8284 integer, intent (in) :: send_nbr_hor_points
8285 integer, intent (in) :: send_nbr_pointsets
8286 integer, intent (in) :: src_field_buffer_size
8288 integer, intent (in) :: collection_size
8289 double precision, intent (in) :: &
8290 send_field(send_nbr_hor_points, send_nbr_pointsets, collection_size)
8291
8292 double precision, intent (out) :: &
8293 src_field_buffer(src_field_buffer_size, collection_size)
8294
8295 integer, intent (out) :: send_info
8296 integer, intent (out) :: recv_info
8297 integer, intent (out) :: ierror
8298
8299 integer :: i
8300
8302 send_field_id, collection_size, send_nbr_pointsets, &
8303 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
8305 recv_field_id, collection_size, src_field_buffer_size)
8306
8307 call yac_cexchange_raw__c ( send_field_id, &
8308 recv_field_id, &
8309 collection_size, &
8310 send_field, &
8311 src_field_buffer, &
8312 send_info, &
8313 recv_info, &
8314 ierror )
8315
8316end subroutine yac_fexchange_raw_dble
8317
8318subroutine yac_fexchange_raw_frac_dble ( send_field_id, &
8319 recv_field_id, &
8320 send_nbr_hor_points, &
8321 send_nbr_pointsets, &
8322 src_field_buffer_size, &
8323 collection_size, &
8324 send_field, &
8325 send_frac_mask, &
8326 src_field_buffer, &
8327 src_frac_mask_buffer, &
8328 send_info, &
8329 recv_info, &
8330 ierror )
8331
8332 use yac, dummy => yac_fexchange_raw_frac_dble
8333
8334 implicit none
8335
8336 interface
8337
8338 subroutine yac_cexchange_raw_frac__c ( send_field_id, &
8339 recv_field_id, &
8340 collection_size, &
8341 send_field, &
8342 send_frac_mask, &
8343 src_field_buffer, &
8344 src_frac_mask_buffer, &
8345 send_info, &
8346 recv_info, &
8347 ierror ) &
8348 bind( c, name='yac_cexchange_raw_frac_' )
8349
8350 use, intrinsic :: iso_c_binding, only : c_int, c_double
8351
8352 integer ( kind=c_int ), value :: send_field_id
8353 integer ( kind=c_int ), value :: recv_field_id
8354 integer ( kind=c_int ), value :: collection_size
8355 real ( kind=c_double ) :: send_field(*)
8356 real ( kind=c_double ) :: send_frac_mask(*)
8357 real ( kind=c_double ) :: src_field_buffer(*)
8358 real ( kind=c_double ) :: src_frac_mask_buffer(*)
8359 integer ( kind=c_int ) :: send_info
8360 integer ( kind=c_int ) :: recv_info
8361 integer ( kind=c_int ) :: ierror
8362
8363 end subroutine yac_cexchange_raw_frac__c
8364
8365 end interface
8366
8367 integer, intent (in) :: send_field_id
8368 integer, intent (in) :: recv_field_id
8369 integer, intent (in) :: send_nbr_hor_points
8370 integer, intent (in) :: send_nbr_pointsets
8371 integer, intent (in) :: src_field_buffer_size
8373 integer, intent (in) :: collection_size
8374 double precision, intent (in) :: &
8375 send_field(send_nbr_hor_points, send_nbr_pointsets, collection_size)
8376
8377 double precision, intent (in) :: &
8378 send_frac_mask(send_nbr_hor_points, send_nbr_pointsets, collection_size)
8379
8380 double precision, intent (out):: &
8381 src_field_buffer(src_field_buffer_size, collection_size)
8382
8383 double precision, intent (out):: &
8384 src_frac_mask_buffer(src_field_buffer_size, collection_size)
8385
8386 integer, intent (out) :: send_info
8387 integer, intent (out) :: recv_info
8388 integer, intent (out) :: ierror
8389
8390 integer :: i
8391
8393 send_field_id, collection_size, send_nbr_pointsets, &
8394 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
8396 recv_field_id, collection_size, src_field_buffer_size)
8397
8398 call yac_cexchange_raw_frac__c ( send_field_id, &
8399 recv_field_id, &
8400 collection_size, &
8401 send_field, &
8402 send_frac_mask, &
8403 src_field_buffer, &
8404 src_frac_mask_buffer, &
8405 send_info, &
8406 recv_info, &
8407 ierror )
8408
8409end subroutine yac_fexchange_raw_frac_dble
8410
8421subroutine yac_fexchange_dble_ptr ( send_field_id, &
8422 recv_field_id, &
8423 send_nbr_pointsets, &
8424 collection_size, &
8425 send_field, &
8426 recv_field, &
8427 send_info, &
8428 recv_info, &
8429 ierror )
8430
8432 use yac, dummy => yac_fexchange_dble_ptr
8433 use, intrinsic :: iso_c_binding, only: c_ptr
8434
8435 implicit none
8436
8437 interface
8438
8439 subroutine yac_cexchange_ptr__c ( send_field_id, &
8440 recv_field_id, &
8441 collection_size, &
8442 send_field, &
8443 recv_field, &
8444 send_info, &
8445 recv_info, &
8446 ierror ) &
8447 bind( c, name='yac_cexchange_ptr_' )
8448
8449 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
8450
8451 integer ( kind=c_int ), value :: send_field_id
8452 integer ( kind=c_int ), value :: recv_field_id
8453 integer ( kind=c_int ), value :: collection_size
8454 type(c_ptr) :: send_field(*)
8455 type(c_ptr) :: recv_field(*)
8456 integer ( kind=c_int ) :: send_info
8457 integer ( kind=c_int ) :: recv_info
8458 integer ( kind=c_int ) :: ierror
8459
8460 end subroutine yac_cexchange_ptr__c
8461
8462 end interface
8463
8464 integer, intent (in) :: send_field_id
8465 integer, intent (in) :: recv_field_id
8466 integer, intent (in) :: send_nbr_pointsets
8467 integer, intent (in) :: collection_size
8468 type(yac_dble_ptr), intent (in) :: &
8469 send_field(send_nbr_pointsets, &
8470 collection_size)
8471 type(yac_dble_ptr) :: recv_field(collection_size)
8472 integer, intent (out) :: send_info
8473 integer, intent (out) :: recv_info
8474 integer, intent (out) :: ierror
8475
8476 integer :: i, j
8477 type(c_ptr), allocatable :: send_field_(:,:)
8478 type(c_ptr), allocatable :: recv_field_(:)
8479
8481 send_field_id, collection_size, send_nbr_pointsets, &
8482 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
8484 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
8485
8486 allocate(send_field_(send_nbr_pointsets, collection_size))
8487 allocate(recv_field_(collection_size))
8488
8489 do i = 1, collection_size
8490 do j = 1, send_nbr_pointsets
8491 send_field_(j, i) = yac_dble2cptr("yac_fexchange_dble_ptr", "send_field", send_field(j, i))
8492 end do
8493 end do
8494 do i = 1, collection_size
8495 recv_field_(i) = yac_dble2cptr("yac_fexchange_dble_ptr", "recv_field", recv_field(i))
8496 end do
8497
8498 call yac_cexchange_ptr__c ( send_field_id, &
8499 recv_field_id, &
8500 collection_size, &
8501 send_field_, &
8502 recv_field_, &
8503 send_info, &
8504 recv_info, &
8505 ierror )
8506
8507 deallocate(send_field_)
8508 deallocate(recv_field_)
8509
8510end subroutine yac_fexchange_dble_ptr
8511
8523subroutine yac_fexchange_frac_dble_ptr ( send_field_id, &
8524 recv_field_id, &
8525 send_nbr_pointsets, &
8526 collection_size, &
8527 send_field, &
8528 send_frac_mask, &
8529 recv_field, &
8530 send_info, &
8531 recv_info, &
8532 ierror )
8533
8535 use yac, dummy => yac_fexchange_frac_dble_ptr
8536 use, intrinsic :: iso_c_binding, only: c_ptr
8537
8538 implicit none
8539
8540 interface
8541
8542 subroutine yac_cexchange_frac_ptr__c ( send_field_id, &
8543 recv_field_id, &
8544 collection_size, &
8545 send_field, &
8546 send_frac_mask, &
8547 recv_field, &
8548 send_info, &
8549 recv_info, &
8550 ierror ) &
8551 bind( c, name='yac_cexchange_frac_ptr_' )
8552
8553 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
8554
8555 integer ( kind=c_int ), value :: send_field_id
8556 integer ( kind=c_int ), value :: recv_field_id
8557 integer ( kind=c_int ), value :: collection_size
8558 type(c_ptr) :: send_field(*)
8559 type(c_ptr) :: send_frac_mask(*)
8560 type(c_ptr) :: recv_field(*)
8561 integer ( kind=c_int ) :: send_info
8562 integer ( kind=c_int ) :: recv_info
8563 integer ( kind=c_int ) :: ierror
8564
8565 end subroutine yac_cexchange_frac_ptr__c
8566
8567 end interface
8568
8569 integer, intent (in) :: send_field_id
8570 integer, intent (in) :: recv_field_id
8571 integer, intent (in) :: send_nbr_pointsets
8572 integer, intent (in) :: collection_size
8573 type(yac_dble_ptr), intent (in) :: &
8574 send_field(send_nbr_pointsets, &
8575 collection_size)
8576 type(yac_dble_ptr), intent (in) :: &
8577 send_frac_mask(send_nbr_pointsets, &
8578 collection_size)
8579 type(yac_dble_ptr) :: recv_field(collection_size)
8580 integer, intent (out) :: send_info
8581 integer, intent (out) :: recv_info
8582 integer, intent (out) :: ierror
8583
8584 integer :: i, j
8585 type(c_ptr), allocatable :: send_field_(:,:)
8586 type(c_ptr), allocatable :: send_frac_mask_(:,:)
8587 type(c_ptr), allocatable :: recv_field_(:)
8588
8590 send_field_id, collection_size, send_nbr_pointsets, &
8591 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
8593 send_field_id, collection_size, send_nbr_pointsets, &
8594 (/(SIZE(send_frac_mask(i,1)%p),i=1,send_nbr_pointsets)/) )
8596 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
8597
8598 allocate(send_field_(send_nbr_pointsets, collection_size))
8599 allocate(send_frac_mask_(send_nbr_pointsets, collection_size))
8600 allocate(recv_field_(collection_size))
8601
8602 do i = 1, collection_size
8603 do j = 1, send_nbr_pointsets
8604 send_field_(j, i) = &
8605 yac_dble2cptr( &
8606 "yac_fexchange_frac_dble_ptr", "send_field", send_field(j, i))
8607 send_frac_mask_(j, i) = &
8608 yac_dble2cptr( &
8609 "yac_fexchange_frac_dble_ptr", "send_frac_mask", send_frac_mask(j, i))
8610 end do
8611 end do
8612 do i = 1, collection_size
8613 recv_field_(i) = &
8614 yac_dble2cptr("yac_fexchange_frac_dble_ptr", "recv_field", recv_field(i))
8615 end do
8616
8617 call yac_cexchange_frac_ptr__c ( send_field_id, &
8618 recv_field_id, &
8619 collection_size, &
8620 send_field_, &
8621 send_frac_mask_, &
8622 recv_field_, &
8623 send_info, &
8624 recv_info, &
8625 ierror )
8626
8627 deallocate(send_field_)
8628 deallocate(send_frac_mask_)
8629 deallocate(recv_field_)
8630
8631end subroutine yac_fexchange_frac_dble_ptr
8632
8633subroutine yac_fexchange_raw_dble_ptr ( send_field_id, &
8634 recv_field_id, &
8635 send_nbr_pointsets, &
8636 collection_size, &
8637 send_field, &
8638 src_field_buffer, &
8639 send_info, &
8640 recv_info, &
8641 ierror )
8642
8644 use yac, dummy => yac_fexchange_raw_dble_ptr
8645 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
8646
8647 implicit none
8648
8649 interface
8650
8651 subroutine yac_cexchange_raw_ptr__c ( send_field_id, &
8652 recv_field_id, &
8653 collection_size, &
8654 send_field, &
8655 src_field_buffer, &
8656 send_info, &
8657 recv_info, &
8658 ierror ) &
8659 bind( c, name='yac_cexchange_raw_ptr_' )
8660
8661 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
8662
8663 integer ( kind=c_int ), value :: send_field_id
8664 integer ( kind=c_int ), value :: recv_field_id
8665 integer ( kind=c_int ), value :: collection_size
8666 type(c_ptr) :: send_field(*)
8667 type(c_ptr) :: src_field_buffer(*)
8668 integer ( kind=c_int ) :: send_info
8669 integer ( kind=c_int ) :: recv_info
8670 integer ( kind=c_int ) :: ierror
8671
8672 end subroutine yac_cexchange_raw_ptr__c
8673
8674 end interface
8675
8676 integer, intent (in) :: send_field_id
8677 integer, intent (in) :: recv_field_id
8678 integer, intent (in) :: send_nbr_pointsets
8679 integer, intent (in) :: collection_size
8680 type(yac_dble_ptr), intent (in) :: &
8681 send_field(send_nbr_pointsets, collection_size)
8682 type(yac_dble_ptr), intent(inout) :: &
8683 src_field_buffer(send_nbr_pointsets, collection_size)
8684 integer, intent (out) :: send_info
8685 integer, intent (out) :: recv_info
8686 integer, intent (out) :: ierror
8687
8688 integer :: i, j
8689 integer, allocatable :: src_field_buffer_sizes(:)
8690 type(c_ptr), allocatable :: send_field_(:,:)
8691 type(c_ptr), allocatable :: src_field_buffer_(:,:)
8692
8693 allocate(src_field_buffer_sizes(send_nbr_pointsets))
8694 allocate(send_field_(send_nbr_pointsets, collection_size))
8695 allocate(src_field_buffer_(send_nbr_pointsets, collection_size))
8696
8697 src_field_buffer_sizes = &
8698 (/(SIZE(src_field_buffer(i, 1)%p),i=1,send_nbr_pointsets)/)
8699
8701 send_field_id, collection_size, send_nbr_pointsets, &
8702 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
8704 recv_field_id, send_nbr_pointsets, collection_size, src_field_buffer_sizes)
8705
8706 do i = 1, collection_size
8707 do j = 1, send_nbr_pointsets
8708 send_field_(j, i) = &
8709 yac_dble2cptr( &
8710 "yac_fexchange_raw_dble_ptr", "send_field", send_field(j, i))
8711 end do
8712 end do
8713 do i = 1, collection_size
8714 do j = 1, send_nbr_pointsets
8715 yac_fassert(src_field_buffer_sizes(j) == size(src_field_buffer(j,i)%p), "ERROR(yac_fexchange_raw_dble_ptr): inconsistent source buffer sizes")
8716 src_field_buffer_(j, i) = &
8717 yac_dble2cptr( &
8718 "yac_fexchange_raw_dble_ptr", "src_field_buffer", &
8719 src_field_buffer(j, i))
8720 end do
8721 end do
8722
8723 call yac_cexchange_raw_ptr__c ( send_field_id, &
8724 recv_field_id, &
8725 collection_size, &
8726 send_field_, &
8727 src_field_buffer_, &
8728 send_info, &
8729 recv_info, &
8730 ierror )
8731
8732 deallocate(src_field_buffer_sizes)
8733 deallocate(send_field_)
8734 deallocate(src_field_buffer_)
8735
8736end subroutine yac_fexchange_raw_dble_ptr
8737
8738
8739subroutine yac_fexchange_raw_frac_dble_ptr ( send_field_id, &
8740 recv_field_id, &
8741 send_nbr_pointsets, &
8742 collection_size, &
8743 send_field, &
8744 send_frac_mask, &
8745 src_field_buffer, &
8746 src_frac_mask_buffer, &
8747 send_info, &
8748 recv_info, &
8749 ierror )
8750
8753 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
8754
8755 implicit none
8756
8757 interface
8758
8759 subroutine yac_cexchange_raw_frac_ptr__c ( send_field_id, &
8760 recv_field_id, &
8761 collection_size, &
8762 send_field, &
8763 send_frac_mask, &
8764 src_field_buffer, &
8765 src_frac_mask_buffer, &
8766 send_info, &
8767 recv_info, &
8768 ierror ) &
8769 bind( c, name='yac_cexchange_raw_frac_ptr_' )
8770
8771 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
8772
8773 integer ( kind=c_int ), value :: send_field_id
8774 integer ( kind=c_int ), value :: recv_field_id
8775 integer ( kind=c_int ), value :: collection_size
8776 type(c_ptr) :: send_field(*)
8777 type(c_ptr) :: send_frac_mask(*)
8778 type(c_ptr) :: src_field_buffer(*)
8779 type(c_ptr) :: src_frac_mask_buffer(*)
8780 integer ( kind=c_int ) :: send_info
8781 integer ( kind=c_int ) :: recv_info
8782 integer ( kind=c_int ) :: ierror
8783
8784 end subroutine yac_cexchange_raw_frac_ptr__c
8785
8786 end interface
8787
8788 integer, intent (in) :: send_field_id
8789 integer, intent (in) :: recv_field_id
8790 integer, intent (in) :: send_nbr_pointsets
8791 integer, intent (in) :: collection_size
8792 type(yac_dble_ptr), intent (in) :: &
8793 send_field(send_nbr_pointsets, collection_size)
8794 type(yac_dble_ptr), intent (in) :: &
8795 send_frac_mask(send_nbr_pointsets, collection_size)
8796 type(yac_dble_ptr), intent(inout) :: &
8797 src_field_buffer(send_nbr_pointsets, collection_size)
8798 type(yac_dble_ptr), intent(inout) :: &
8799 src_frac_mask_buffer(send_nbr_pointsets, collection_size)
8800
8801 integer, intent (out) :: send_info
8802 integer, intent (out) :: recv_info
8803 integer, intent (out) :: ierror
8804
8805 integer :: i, j
8806 integer, allocatable :: src_field_buffer_sizes(:)
8807 type(c_ptr), allocatable :: send_field_(:,:)
8808 type(c_ptr), allocatable :: send_frac_mask_(:,:)
8809 type(c_ptr), allocatable :: src_field_buffer_(:,:)
8810 type(c_ptr), allocatable :: src_frac_mask_buffer_(:,:)
8811
8812 allocate(src_field_buffer_sizes(send_nbr_pointsets))
8813 allocate(send_field_(send_nbr_pointsets, collection_size))
8814 allocate(send_frac_mask_(send_nbr_pointsets, collection_size))
8815 allocate(src_field_buffer_(send_nbr_pointsets, collection_size))
8816 allocate(src_frac_mask_buffer_(send_nbr_pointsets, collection_size))
8817
8818 src_field_buffer_sizes = &
8819 (/(SIZE(src_field_buffer(i, 1)%p),i=1,send_nbr_pointsets)/)
8820
8822 send_field_id, collection_size, send_nbr_pointsets, &
8823 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
8825 send_field_id, collection_size, send_nbr_pointsets, &
8826 (/(SIZE(send_frac_mask(i,1)%p),i=1,send_nbr_pointsets)/) )
8828 recv_field_id, send_nbr_pointsets, collection_size, src_field_buffer_sizes)
8829
8830 do i = 1, collection_size
8831 do j = 1, send_nbr_pointsets
8832 send_field_(j, i) = &
8833 yac_dble2cptr( &
8834 "yac_fexchange_raw_frac_dble_ptr", "send_field", send_field(j, i))
8835 send_frac_mask_(j, i) = &
8836 yac_dble2cptr( &
8837 "yac_fexchange_raw_frac_dble_ptr", "send_frac_mask", send_frac_mask(j, i))
8838 end do
8839 end do
8840
8841 do i = 1, collection_size
8842 do j = 1, send_nbr_pointsets
8843 yac_fassert(src_field_buffer_sizes(j) == size(src_field_buffer(j,i)%p), "ERROR(yac_fexchange_raw_frac_dble_ptr): inconsistent source buffer sizes")
8844 yac_fassert(src_field_buffer_sizes(j) == size(src_frac_mask_buffer(j,i)%p), "ERROR(yac_fexchange_raw_frac_dble_ptr): inconsistent source buffer sizes")
8845 src_field_buffer_(j, i) = &
8846 yac_dble2cptr( &
8847 "yac_fexchange_raw_frac_dble_ptr", "src_field_buffer", src_field_buffer(j, i))
8848 src_frac_mask_buffer_(j, i) = &
8849 yac_dble2cptr( &
8850 "yac_fexchange_raw_frac_dble_ptr", "src_frac_mask_buffer", src_frac_mask_buffer(j, i))
8851 end do
8852 end do
8853
8854 call yac_cexchange_raw_frac_ptr__c ( send_field_id, &
8855 recv_field_id, &
8856 collection_size, &
8857 send_field_, &
8858 send_frac_mask_, &
8859 src_field_buffer_, &
8860 src_frac_mask_buffer_, &
8861 send_info, &
8862 recv_info, &
8863 ierror )
8864
8865 deallocate(src_field_buffer_sizes)
8866 deallocate(send_field_)
8867 deallocate(send_frac_mask_)
8868 deallocate(src_field_buffer_)
8869 deallocate(src_frac_mask_buffer_)
8870
8872
8884subroutine yac_fexchange_single_pointset_dble ( send_field_id, &
8885 recv_field_id, &
8886 send_nbr_hor_points, &
8887 recv_nbr_hor_points, &
8888 collection_size, &
8889 send_field, &
8890 recv_field, &
8891 send_info, &
8892 recv_info, &
8893 ierror )
8894
8896
8897 implicit none
8898
8899 interface
8900
8901 subroutine yac_cexchange__c ( send_field_id, &
8902 recv_field_id, &
8903 collection_size, &
8904 send_field, &
8905 recv_field, &
8906 send_info, &
8907 recv_info, &
8908 ierror ) &
8909 bind( c, name='yac_cexchange_' )
8910
8911 use, intrinsic :: iso_c_binding, only : c_int, c_double
8912
8913 integer ( kind=c_int ), value :: send_field_id
8914 integer ( kind=c_int ), value :: recv_field_id
8915 integer ( kind=c_int ), value :: collection_size
8916 real ( kind=c_double ) :: send_field(*)
8917 real ( kind=c_double ) :: recv_field(*)
8918 integer ( kind=c_int ) :: send_info
8919 integer ( kind=c_int ) :: recv_info
8920 integer ( kind=c_int ) :: ierror
8921
8922 end subroutine yac_cexchange__c
8923
8924 end interface
8925
8926 integer, intent (in) :: send_field_id
8927 integer, intent (in) :: recv_field_id
8928 integer, intent (in) :: send_nbr_hor_points
8929 integer, intent (in) :: recv_nbr_hor_points
8930 integer, intent (in) :: collection_size
8931 double precision, intent (in) :: &
8932 send_field(send_nbr_hor_points, &
8933 collection_size)
8934 double precision, intent (inout):: &
8935 recv_field(recv_nbr_hor_points, &
8936 collection_size)
8937 integer, intent (out) :: send_info
8938 integer, intent (out) :: recv_info
8939 integer, intent (out) :: ierror
8940
8942 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
8944 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
8945
8946 call yac_cexchange__c ( send_field_id, &
8947 recv_field_id, &
8948 collection_size, &
8949 send_field, &
8950 recv_field, &
8951 send_info, &
8952 recv_info, &
8953 ierror )
8954
8956
8969subroutine yac_fexchange_frac_single_pointset_dble ( send_field_id, &
8970 recv_field_id, &
8971 send_nbr_hor_points, &
8972 recv_nbr_hor_points, &
8973 collection_size, &
8974 send_field, &
8975 send_frac_mask, &
8976 recv_field, &
8977 send_info, &
8978 recv_info, &
8979 ierror )
8980
8982
8983 implicit none
8984
8985 interface
8986
8987 subroutine yac_cexchange_frac__c ( send_field_id, &
8988 recv_field_id, &
8989 collection_size, &
8990 send_field, &
8991 send_frac_mask, &
8992 recv_field, &
8993 send_info, &
8994 recv_info, &
8995 ierror ) &
8996 bind( c, name='yac_cexchange_frac_' )
8997
8998 use, intrinsic :: iso_c_binding, only : c_int, c_double
8999
9000 integer ( kind=c_int ), value :: send_field_id
9001 integer ( kind=c_int ), value :: recv_field_id
9002 integer ( kind=c_int ), value :: collection_size
9003 real ( kind=c_double ) :: send_field(*)
9004 real ( kind=c_double ) :: send_frac_mask(*)
9005 real ( kind=c_double ) :: recv_field(*)
9006 integer ( kind=c_int ) :: send_info
9007 integer ( kind=c_int ) :: recv_info
9008 integer ( kind=c_int ) :: ierror
9009
9010 end subroutine yac_cexchange_frac__c
9011
9012 end interface
9013
9014 integer, intent (in) :: send_field_id
9015 integer, intent (in) :: recv_field_id
9016 integer, intent (in) :: send_nbr_hor_points
9017 integer, intent (in) :: recv_nbr_hor_points
9018 integer, intent (in) :: collection_size
9019 double precision, intent (in) :: &
9020 send_field(send_nbr_hor_points, &
9021 collection_size)
9022 double precision, intent (in) :: &
9023 send_frac_mask(send_nbr_hor_points, &
9024 collection_size)
9025 double precision, intent (inout):: &
9026 recv_field(recv_nbr_hor_points, &
9027 collection_size)
9028 integer, intent (out) :: send_info
9029 integer, intent (out) :: recv_info
9030 integer, intent (out) :: ierror
9031
9033 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
9035 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
9036
9037 call yac_cexchange_frac__c ( send_field_id, &
9038 recv_field_id, &
9039 collection_size, &
9040 send_field, &
9041 send_frac_mask, &
9042 recv_field, &
9043 send_info, &
9044 recv_info, &
9045 ierror )
9046
9048
9049subroutine yac_fexchange_raw_single_pointset_dble ( send_field_id, &
9050 recv_field_id, &
9051 send_nbr_hor_points, &
9052 src_field_buffer_size, &
9053 collection_size, &
9054 send_field, &
9055 src_field_buffer, &
9056 send_info, &
9057 recv_info, &
9058 ierror )
9059
9061
9062 implicit none
9063
9064 interface
9065
9066 subroutine yac_cexchange_raw__c ( send_field_id, &
9067 recv_field_id, &
9068 collection_size, &
9069 send_field, &
9070 src_field_buffer, &
9071 send_info, &
9072 recv_info, &
9073 ierror ) &
9074 bind( c, name='yac_cexchange_raw_' )
9075
9076 use, intrinsic :: iso_c_binding, only : c_int, c_double
9077
9078 integer ( kind=c_int ), value :: send_field_id
9079 integer ( kind=c_int ), value :: recv_field_id
9080 integer ( kind=c_int ), value :: collection_size
9081 real ( kind=c_double ) :: send_field(*)
9082 real ( kind=c_double ) :: src_field_buffer(*)
9083 integer ( kind=c_int ) :: send_info
9084 integer ( kind=c_int ) :: recv_info
9085 integer ( kind=c_int ) :: ierror
9086
9087 end subroutine yac_cexchange_raw__c
9088
9089 end interface
9090
9091 integer, intent (in) :: send_field_id
9092 integer, intent (in) :: recv_field_id
9093 integer, intent (in) :: send_nbr_hor_points
9094 integer, intent (in) :: src_field_buffer_size
9095 integer, intent (in) :: collection_size
9096 double precision, intent (in) :: &
9097 send_field(send_nbr_hor_points, collection_size)
9098
9099 double precision, intent(out) :: &
9100 src_field_buffer(src_field_buffer_size, collection_size)
9101
9102 integer, intent (out) :: send_info
9103 integer, intent (out) :: recv_info
9104 integer, intent (out) :: ierror
9105
9107 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
9109 recv_field_id, collection_size, src_field_buffer_size)
9110
9111 call yac_cexchange_raw__c ( send_field_id, &
9112 recv_field_id, &
9113 collection_size, &
9114 send_field, &
9115 src_field_buffer, &
9116 send_info, &
9117 recv_info, &
9118 ierror )
9119
9121
9123 recv_field_id, &
9124 send_nbr_hor_points, &
9125 src_field_buffer_size, &
9126 collection_size, &
9127 send_field, &
9128 send_frac_mask, &
9129 src_field_buffer, &
9130 src_frac_mask_buffer, &
9131 send_info, &
9132 recv_info, &
9133 ierror )
9134
9136
9137 implicit none
9138
9139 interface
9140
9141 subroutine yac_cexchange_raw_frac__c ( send_field_id, &
9142 recv_field_id, &
9143 collection_size, &
9144 send_field, &
9145 send_frac_mask, &
9146 src_field_buffer, &
9147 src_frac_mask_buffer, &
9148 send_info, &
9149 recv_info, &
9150 ierror ) &
9151 bind( c, name='yac_cexchange_raw_frac_' )
9152
9153 use, intrinsic :: iso_c_binding, only : c_int, c_double
9154
9155 integer ( kind=c_int ), value :: send_field_id
9156 integer ( kind=c_int ), value :: recv_field_id
9157 integer ( kind=c_int ), value :: collection_size
9158 real ( kind=c_double ) :: send_field(*)
9159 real ( kind=c_double ) :: send_frac_mask(*)
9160 real ( kind=c_double ) :: src_field_buffer(*)
9161 real ( kind=c_double ) :: src_frac_mask_buffer(*)
9162 integer ( kind=c_int ) :: send_info
9163 integer ( kind=c_int ) :: recv_info
9164 integer ( kind=c_int ) :: ierror
9165
9166 end subroutine yac_cexchange_raw_frac__c
9167
9168 end interface
9169
9170 integer, intent (in) :: send_field_id
9171 integer, intent (in) :: recv_field_id
9172 integer, intent (in) :: send_nbr_hor_points
9173 integer, intent (in) :: src_field_buffer_size
9175 integer, intent (in) :: collection_size
9176 double precision, intent (in) :: &
9177 send_field(send_nbr_hor_points, collection_size)
9178 double precision, intent (in) :: &
9179 send_frac_mask(send_nbr_hor_points, collection_size)
9180 double precision, intent (out) :: &
9181 src_field_buffer(src_field_buffer_size, collection_size)
9182
9183 double precision, intent (out) :: &
9184 src_frac_mask_buffer(src_field_buffer_size, collection_size)
9185
9186 integer, intent (out) :: send_info
9187 integer, intent (out) :: recv_info
9188 integer, intent (out) :: ierror
9189
9191 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
9193 recv_field_id, collection_size, src_field_buffer_size)
9194
9195 call yac_cexchange_raw_frac__c ( send_field_id, &
9196 recv_field_id, &
9197 collection_size, &
9198 send_field, &
9199 send_frac_mask, &
9200 src_field_buffer, &
9201 src_frac_mask_buffer, &
9202 send_info, &
9203 recv_info, &
9204 ierror )
9205
9207
9208! ----------------------------------------------------------------------
9209
9210subroutine yac_ftest_i ( field_id, flag )
9211
9212 use yac, dummy => yac_ftest_i
9213
9214 implicit none
9215
9216 interface
9217
9218 subroutine yac_ctest_c ( field_id, flag ) &
9219 bind( c, name='yac_ctest' )
9220
9221 use, intrinsic :: iso_c_binding, only : c_int
9222
9223 integer ( kind=c_int ), value :: field_id
9224 integer ( kind=c_int ) :: flag
9225
9226 end subroutine yac_ctest_c
9227
9228 end interface
9229
9230 integer, intent (in) :: field_id
9231 integer, intent (out) :: flag
9232
9233 call yac_ctest_c ( field_id, flag )
9234
9235end subroutine yac_ftest_i
9236
9237subroutine yac_ftest_l ( field_id, flag )
9238
9239 use yac, dummy => yac_ftest_l
9240
9241 implicit none
9242
9243 interface
9244
9245 subroutine yac_ctest_c ( field_id, flag ) &
9246 bind( c, name='yac_ctest' )
9247
9248 use, intrinsic :: iso_c_binding, only : c_int
9249
9250 integer ( kind=c_int ), value :: field_id
9251 integer ( kind=c_int ) :: flag
9252
9253 end subroutine yac_ctest_c
9254
9255 end interface
9256
9257 integer, intent (in) :: field_id
9258 logical, intent (out) :: flag
9259
9260 integer :: iflag
9261
9262 call yac_ctest_c ( field_id, iflag )
9263
9264 flag = iflag /= 0
9265
9266end subroutine yac_ftest_l
9267
9268! ----------------------------------------------------------------------
9269
9270subroutine yac_fwait ( field_id )
9271
9272 use yac, dummy => yac_fwait
9273
9274 implicit none
9275
9276 interface
9277
9278 subroutine yac_cwait_c ( field_id ) &
9279 bind( c, name='yac_cwait' )
9280
9281 use, intrinsic :: iso_c_binding, only : c_int
9282
9283 integer ( kind=c_int ), value :: field_id
9284
9285 end subroutine yac_cwait_c
9286
9287 end interface
9288
9289 integer, intent (in) :: field_id
9290
9291 call yac_cwait_c ( field_id )
9292
9293end subroutine yac_fwait
9294
9295! ----------------------------------------------------------------------
9296
9297subroutine yac_fget_comp_comm ( comp_id, comp_comm )
9298
9299 use yac, dummy => yac_fget_comp_comm
9300
9301 implicit none
9302
9303 interface
9304
9305 subroutine yac_get_comp_comm_c ( comp_id, comp_comm ) &
9306 bind( c, name='yac_get_comp_comm_f2c' )
9307
9308 use, intrinsic :: iso_c_binding, only : c_int
9309 use yac, only : yac_mpi_fint_kind
9310
9311 integer ( kind=c_int ), value :: comp_id
9312 integer ( kind=YAC_MPI_FINT_KIND ) :: comp_comm
9313
9314 end subroutine yac_get_comp_comm_c
9315
9316 end interface
9317
9318 integer, intent (in) :: comp_id
9319 integer, intent (out) :: comp_comm
9320
9321 call yac_get_comp_comm_c ( comp_id, comp_comm )
9322
9323end subroutine yac_fget_comp_comm
9324
9325! ----------------------------------------------------------------------
9326
9327subroutine yac_fget_comps_comm ( comp_names, num_comps, comps_comm )
9328
9329 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
9330 use yac, dummy => yac_fget_comps_comm
9332
9333 implicit none
9334
9335 interface
9336
9337 subroutine yac_cget_comps_comm_c ( comp_names, &
9338 num_comps, &
9339 comps_comm) &
9340 bind( c, name='yac_cget_comps_comm_f2c' )
9341
9342 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
9343 use yac, only : yac_mpi_fint_kind
9344
9345 type ( c_ptr ) :: comp_names(*)
9346 integer ( kind=c_int ), value :: num_comps
9347 integer ( kind=YAC_MPI_FINT_KIND ) :: comps_comm
9348
9349 end subroutine yac_cget_comps_comm_c
9350
9351 end interface
9352
9353 integer, intent(in) :: num_comps
9354 character(kind=c_char, len=*), intent(in) :: &
9355 comp_names(num_comps)
9356 integer, intent (out) :: comps_comm
9357
9358 integer :: i, j
9359 character(kind=c_char), allocatable, target :: comp_names_cpy(:,:)
9360 type(c_ptr), allocatable :: comp_name_ptrs(:)
9361
9362 allocate(comp_names_cpy(yac_max_charlen+1, num_comps))
9363 allocate(comp_name_ptrs(num_comps))
9364
9365 comp_names_cpy = c_null_char
9366
9367 do i = 1, num_comps
9368 yac_check_string_len( "yac_fget_comps_comm", comp_names(i))
9369 do j = 1, len_trim(comp_names(i))
9370 comp_names_cpy(j,i) = comp_names(i)(j:j)
9371 end do
9372 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
9373 end do
9374
9375 call yac_cget_comps_comm_c ( comp_name_ptrs, &
9376 num_comps, &
9377 comps_comm )
9378
9379 deallocate(comp_names_cpy)
9380 deallocate(comp_name_ptrs)
9381
9382end subroutine yac_fget_comps_comm
9383
9384subroutine yac_fget_comps_comm_instance ( yac_instance_id, &
9385 comp_names, &
9386 num_comps, &
9387 comps_comm )
9388
9389 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
9390 use yac, dummy => yac_fget_comps_comm_instance
9392
9393 implicit none
9394
9395 interface
9396
9397 subroutine yac_cget_comps_comm_instance_c ( yac_instance_id, &
9398 comp_names, &
9399 num_comps, &
9400 comps_comm) &
9401 bind( c, name='yac_cget_comps_comm_instance_f2c' )
9402
9403 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
9404 use yac, only : yac_mpi_fint_kind
9405
9406 integer ( kind=c_int ), value :: yac_instance_id
9407 type ( c_ptr ) :: comp_names(*)
9408 integer ( kind=c_int ), value :: num_comps
9409 integer ( kind=YAC_MPI_FINT_KIND ) :: comps_comm
9410
9411 end subroutine yac_cget_comps_comm_instance_c
9412
9413 end interface
9414
9415 integer, intent(in) :: yac_instance_id
9416 integer, intent(in) :: num_comps
9417 character(kind=c_char, len=*), intent(in) :: &
9418 comp_names(num_comps)
9419 integer, intent (out) :: comps_comm
9420
9421 integer :: i, j
9422 character(kind=c_char), allocatable, target :: comp_names_cpy(:,:)
9423 type(c_ptr), allocatable :: comp_name_ptrs(:)
9424
9425 allocate(comp_names_cpy(yac_max_charlen+1, num_comps))
9426 allocate(comp_name_ptrs(num_comps))
9427
9428 comp_names_cpy = c_null_char
9429
9430 do i = 1, num_comps
9431 yac_check_string_len( "yac_fget_comps_comm_instance", comp_names(i))
9432 do j = 1, len_trim(comp_names(i))
9433 comp_names_cpy(j,i) = comp_names(i)(j:j)
9434 end do
9435 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
9436 end do
9437
9438 call yac_cget_comps_comm_instance_c ( yac_instance_id, &
9439 comp_name_ptrs, &
9440 num_comps, &
9441 comps_comm )
9442
9443 deallocate(comp_names_cpy)
9444 deallocate(comp_name_ptrs)
9445
9446end subroutine yac_fget_comps_comm_instance
9447
9448! ------------------- search/end of definition -------------------------
9449
9450subroutine yac_fsync_def ( )
9451
9452 use yac, dummy => yac_fsync_def
9453
9454 implicit none
9455
9456 interface
9457
9458 subroutine yac_csync_def_c ( ) bind ( c, name='yac_csync_def' )
9459
9460 end subroutine yac_csync_def_c
9461
9462 end interface
9463
9464 call yac_csync_def_c ( )
9465
9466end subroutine yac_fsync_def
9467
9468subroutine yac_fsync_def_instance ( yac_instance_id )
9469
9470 use yac, dummy => yac_fsync_def_instance
9471
9472 implicit none
9473
9474 interface
9475
9476 subroutine yac_csync_def_instance_c ( yac_instance_id ) &
9477 bind( c, name='yac_csync_def_instance' )
9478
9479 use, intrinsic :: iso_c_binding, only : c_int
9480
9481 integer ( kind=c_int ), value :: yac_instance_id
9482
9483 end subroutine yac_csync_def_instance_c
9484
9485 end interface
9486
9487 integer, intent(in) :: yac_instance_id
9488
9489 call yac_csync_def_instance_c ( yac_instance_id )
9490
9491end subroutine yac_fsync_def_instance
9492
9493subroutine yac_fsync_def_comps ( comp_names, num_comp_names )
9494
9495 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
9496 use yac, dummy => yac_fsync_def_comps
9498
9499 implicit none
9500
9501 interface
9502
9503 subroutine yac_csync_def_comps_c ( comp_names, num_comp_names ) &
9504 bind( c, name='yac_csync_def_comps' )
9505
9506 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
9507
9508 type ( c_ptr ) :: comp_names(*)
9509 integer ( kind=c_int ), value :: num_comp_names
9510
9511 end subroutine yac_csync_def_comps_c
9512
9513 end interface
9514
9515 integer, intent(in) :: num_comp_names
9516 character(kind=c_char, len=YAC_MAX_CHARLEN), intent(in) :: &
9517 comp_names(num_comp_names)
9518
9519 integer :: i, j
9520 character(kind=c_char), allocatable, target :: comp_names_cpy(:,:)
9521 type(c_ptr), allocatable :: comp_name_ptrs(:)
9522
9523 allocate(comp_names_cpy(yac_max_charlen+1, num_comp_names))
9524 allocate(comp_name_ptrs(num_comp_names))
9525
9526 comp_names_cpy = c_null_char
9527
9528 do i = 1, num_comp_names
9529 yac_check_string_len( "yac_fsync_def_comps", comp_names(i))
9530 do j = 1, len_trim(comp_names(i))
9531 comp_names_cpy(j,i) = comp_names(i)(j:j)
9532 end do
9533 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
9534 end do
9535
9536 call yac_csync_def_comps_c ( comp_name_ptrs, &
9537 int(num_comp_names, c_int) )
9538
9539 deallocate(comp_names_cpy)
9540 deallocate(comp_name_ptrs)
9541
9542end subroutine yac_fsync_def_comps
9543
9544subroutine yac_fsync_def_comps_instance ( yac_instance_id, &
9545 comp_names, &
9546 num_comp_names )
9547
9548 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, &
9549 c_char, c_int
9550 use yac, dummy => yac_fsync_def_comps_instance
9552
9553 implicit none
9554
9555 interface
9556
9557 subroutine yac_csync_def_comps_instance_c ( yac_instance_id, &
9558 comp_names, &
9559 num_comp_names ) &
9560 bind( c, name='yac_csync_def_comps_instance' )
9561
9562 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
9563
9564 integer ( kind=c_int ), value :: yac_instance_id
9565 type ( c_ptr ) :: comp_names(*)
9566 integer ( kind=c_int ), value :: num_comp_names
9567
9568 end subroutine yac_csync_def_comps_instance_c
9569
9570 end interface
9571
9572 integer, intent(in) :: yac_instance_id
9573 integer, intent(in) :: num_comp_names
9574 character(kind=c_char, len=YAC_MAX_CHARLEN), intent(in) :: &
9575 comp_names(num_comp_names)
9576
9577 integer :: i, j
9578 character(kind=c_char), allocatable, target :: comp_names_cpy(:,:)
9579 type(c_ptr), allocatable :: comp_name_ptrs(:)
9580
9581 allocate(comp_names_cpy(yac_max_charlen+1, num_comp_names))
9582 allocate(comp_name_ptrs(num_comp_names))
9583
9584 comp_names_cpy = c_null_char
9585
9586 do i = 1, num_comp_names
9587 yac_check_string_len( "yac_fsync_def_comps_instance", comp_names(i))
9588 do j = 1, len_trim(comp_names(i))
9589 comp_names_cpy(j,i) = comp_names(i)(j:j)
9590 end do
9591 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
9592 end do
9593
9594 call yac_csync_def_comps_instance_c ( yac_instance_id, &
9595 comp_name_ptrs, &
9596 int(num_comp_names, c_int) )
9597
9598 deallocate(comp_names_cpy)
9599 deallocate(comp_name_ptrs)
9600
9601end subroutine yac_fsync_def_comps_instance
9602
9603
9604subroutine yac_fenddef ( )
9605
9606 use yac, dummy => yac_fenddef
9607
9608 implicit none
9609
9610 interface
9611
9612 subroutine yac_cenddef_c ( ) bind ( c, name='yac_cenddef' )
9613
9614 end subroutine yac_cenddef_c
9615
9616 end interface
9617
9618 call yac_cenddef_c ( )
9619
9620end subroutine yac_fenddef
9621
9622subroutine yac_fenddef_instance ( yac_instance_id )
9623
9624 use yac, dummy => yac_fenddef_instance
9625
9626 implicit none
9627
9628 interface
9629
9630 subroutine yac_cenddef_instance_c ( yac_instance_id ) &
9631 bind( c, name='yac_cenddef_instance' )
9632
9633 use, intrinsic :: iso_c_binding, only : c_int
9634
9635 integer ( kind=c_int ), value :: yac_instance_id
9636
9637 end subroutine yac_cenddef_instance_c
9638
9639 end interface
9640
9641 integer, intent(in) :: yac_instance_id
9642
9643 call yac_cenddef_instance_c ( yac_instance_id )
9644
9645end subroutine yac_fenddef_instance
9646
9647subroutine yac_fenddef_and_emit_config(emit_flags, config)
9648
9649 use, intrinsic :: iso_c_binding, only : c_ptr
9650 use yac, dummy => yac_fenddef_and_emit_config
9652
9653 implicit none
9654
9655 interface
9656 subroutine yac_fenddef_and_emit_config_c ( &
9657 emit_flags, config) &
9658 bind( c, name='yac_cenddef_and_emit_config' )
9659
9660 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
9661 integer ( kind=c_int ), value :: emit_flags
9662 type(c_ptr) :: config
9663
9664 end subroutine yac_fenddef_and_emit_config_c
9665
9666 subroutine free_c ( ptr ) bind ( c, NAME='free' )
9667
9668 use, intrinsic :: iso_c_binding, only : c_ptr
9669
9670 type ( c_ptr ), intent(in), value :: ptr
9671
9672 end subroutine free_c
9673 end interface
9674
9675 integer, intent (in) :: emit_flags
9676 character (len=:), allocatable :: config
9677
9678 type (c_ptr) :: c_string_ptr
9679
9680 call yac_fenddef_and_emit_config_c(emit_flags, c_string_ptr)
9681 config = yac_internal_cptr2char(c_string_ptr)
9682 call free_c(c_string_ptr)
9683
9684end subroutine yac_fenddef_and_emit_config
9685
9687 yac_instance_id, emit_flags, config)
9688
9689 use, intrinsic :: iso_c_binding, only : c_ptr
9692
9693 implicit none
9694
9695 interface
9696 subroutine yac_fenddef_and_emit_config_instance_c ( &
9697 yac_instance_id, emit_flags, config) &
9698 bind( c, name='yac_cenddef_and_emit_config_instance' )
9699
9700 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
9701 integer ( kind=c_int ), value :: yac_instance_id
9702 integer ( kind=c_int ), value :: emit_flags
9703 type(c_ptr) :: config
9704
9705 end subroutine yac_fenddef_and_emit_config_instance_c
9706
9707 subroutine free_c ( ptr ) bind ( c, NAME='free' )
9708
9709 use, intrinsic :: iso_c_binding, only : c_ptr
9710
9711 type ( c_ptr ), intent(in), value :: ptr
9712
9713 end subroutine free_c
9714 end interface
9715
9716 integer, intent (in) :: yac_instance_id
9717 integer, intent (in) :: emit_flags
9718 character (len=:), allocatable :: config
9719
9720 type (c_ptr) :: c_string_ptr
9721
9722 call yac_fenddef_and_emit_config_instance_c( &
9723 yac_instance_id, emit_flags, c_string_ptr)
9724 config = yac_internal_cptr2char(c_string_ptr)
9725 call free_c(c_string_ptr)
9726
9728
9729! ------------------------ query routines -----------------------------
9730
9731function yac_fget_grid_size( location, grid_id ) result (grid_size)
9732
9733 use yac, dummy => yac_fget_grid_size
9734
9735 use, intrinsic :: iso_c_binding, only: c_size_t, c_int, c_null_char
9736 implicit none
9737
9738 interface
9739 function yac_cget_grid_size_c(location, grid_id) result (grid_size) &
9740 bind(c, name='yac_cget_grid_size')
9741 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
9742 integer(kind=c_int), value :: location
9743 integer(kind=c_int), value :: grid_id
9744 integer(kind=c_size_t) :: grid_size
9745 end function yac_cget_grid_size_c
9746 end interface
9747
9748 integer, intent(in) :: location
9749 integer, intent(in) :: grid_id
9750 integer :: grid_size
9751
9752 integer(kind=c_size_t) :: c_grid_size
9753
9754 c_grid_size = &
9755 yac_cget_grid_size_c(int(location, c_int), int(grid_id, c_int))
9756
9757 yac_fassert(int(huge(grid_size), c_size_t) >= c_grid_size, "ERROR(yac_fget_grid_size): grid size exceeds HUGE(grid_size)")
9758
9759 grid_size = int(c_grid_size)
9760
9761end function yac_fget_grid_size
9762
9763! ---------------------------------------------------------------------
9764
9766 grid_id, nbr_cells, cell_areas )
9767
9768 use, intrinsic :: iso_c_binding, only: c_int, c_double, c_null_char
9770
9771 implicit none
9772
9773 interface
9774
9775 subroutine yac_ccompute_grid_cell_areas_c ( grid_id, cell_areas )&
9776 bind( c, name='yac_ccompute_grid_cell_areas' )
9777
9778 use, intrinsic :: iso_c_binding, only : c_int, c_double
9779
9780 integer ( kind=c_int), value :: grid_id
9781 real ( kind=c_double) :: cell_areas(*)
9782
9783 end subroutine yac_ccompute_grid_cell_areas_c
9784
9785 end interface
9786
9787 integer, intent(in) :: grid_id
9788 integer, intent(in) :: nbr_cells
9789 real, intent(out) :: cell_areas(nbr_cells)
9790
9791 real(kind=c_double), allocatable :: c_cell_areas(:)
9792 integer :: ref_nbr_cells
9793
9794 ref_nbr_cells = yac_fget_grid_size(yac_location_cell, grid_id)
9795
9796 yac_fassert(nbr_cells == ref_nbr_cells, "ERROR(yac_fcompute_grid_cell_areas_real): wrong number of cells for provided grid")
9797
9798 allocate(c_cell_areas(nbr_cells))
9799
9800 CALL yac_ccompute_grid_cell_areas_c(int(grid_id, c_int), c_cell_areas)
9801
9802 cell_areas(:) = real(c_cell_areas(:))
9803
9804 deallocate(c_cell_areas)
9805
9807
9808
9810 grid_id, nbr_cells, cell_areas )
9811
9812 use, intrinsic :: iso_c_binding, only: c_int, c_double, c_null_char
9814
9815 implicit none
9816
9817 interface
9818
9819 subroutine yac_ccompute_grid_cell_areas_c ( grid_id, cell_areas )&
9820 bind( c, name='yac_ccompute_grid_cell_areas' )
9821
9822 use, intrinsic :: iso_c_binding, only : c_int, c_double
9823
9824 integer ( kind=c_int), value :: grid_id
9825 real ( kind=c_double) :: cell_areas(*)
9826
9827 end subroutine yac_ccompute_grid_cell_areas_c
9828
9829 end interface
9830
9831 integer, intent(in) :: grid_id
9832 integer, intent(in) :: nbr_cells
9833 double precision, intent(out) :: cell_areas(nbr_cells)
9834
9835 real(kind=c_double), allocatable :: c_cell_areas(:)
9836 integer :: ref_nbr_cells
9837
9838 ref_nbr_cells = yac_fget_grid_size(yac_location_cell, grid_id)
9839
9840 yac_fassert(nbr_cells == ref_nbr_cells, "ERROR(yac_fcompute_grid_cell_areas_dble): wrong number of cells for provided grid")
9841
9842 allocate(c_cell_areas(nbr_cells))
9843
9844 CALL yac_ccompute_grid_cell_areas_c(int(grid_id, c_int), c_cell_areas)
9845
9846 cell_areas(:) = dble(c_cell_areas(:))
9847
9848 deallocate(c_cell_areas)
9849
9851
9852! ---------------------------------------------------------------------
9853
9854function yac_fget_points_size( point_id ) result (points_size)
9855
9856 use yac, dummy => yac_fget_points_size
9857
9858 use, intrinsic :: iso_c_binding, only: c_size_t, c_int, c_null_char
9859 implicit none
9860
9861 interface
9862 function yac_cget_points_size_c(point_id) result (points_size) &
9863 bind(c, name='yac_cget_points_size')
9864 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
9865 integer(kind=c_int), value :: point_id
9866 integer(kind=c_size_t) :: points_size
9867 end function yac_cget_points_size_c
9868 end interface
9869
9870 integer, intent(in) :: point_id
9871 integer :: points_size
9872
9873 integer(kind=c_size_t) :: c_points_size
9874
9875 c_points_size = yac_cget_points_size_c(int(point_id, c_int))
9876
9877 yac_fassert(int(huge(points_size), c_size_t) >= c_points_size, "ERROR(yac_fget_point_size): point size exceeds HUGE(point_size)")
9878
9879 points_size = int(c_points_size)
9880
9881end function yac_fget_points_size
9882
9883! ---------------------------------------------------------------------
9884
9885 function yac_fget_comp_names ( ) result( comp_names )
9886
9887 use yac, dummy => yac_fget_comp_names
9889
9890 use, intrinsic :: iso_c_binding, only: c_ptr
9891 implicit none
9892
9893 interface
9894 function yac_cget_nbr_comps_c() result( nbr_comps ) &
9895 bind(c, name='yac_cget_nbr_comps')
9896 use, intrinsic :: iso_c_binding, only: c_int
9897 integer(kind=c_int) :: nbr_comps
9898
9899 end function yac_cget_nbr_comps_c
9900
9901 subroutine yac_cget_comp_names_c( nbr_comps, comp_names ) &
9902 bind(c, name='yac_cget_comp_names')
9903 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
9904 integer(kind=c_int), intent(in), value :: nbr_comps
9905 TYPE(c_ptr), intent(out) :: comp_names(nbr_comps)
9906 end subroutine yac_cget_comp_names_c
9907 end interface
9908
9909 type(yac_string), allocatable :: comp_names(:)
9910 integer :: nbr_comps
9911 INTEGER :: i
9912 TYPE(c_ptr), allocatable :: comp_ptr(:)
9913
9914 nbr_comps = yac_cget_nbr_comps_c()
9915 allocate(comp_ptr(nbr_comps))
9916 allocate(comp_names(nbr_comps))
9917 CALL yac_cget_comp_names_c(nbr_comps, comp_ptr)
9918 DO i=1,nbr_comps
9919 comp_names(i)%string = yac_internal_cptr2char(comp_ptr(i))
9920 END DO
9921 end function yac_fget_comp_names
9922
9923 function yac_fget_comp_names_instance ( yac_instance_id ) result ( comp_names )
9924
9925 use yac, dummy => yac_fget_comp_names_instance
9927 use, intrinsic :: iso_c_binding, only: c_ptr
9928 implicit none
9929
9930 interface
9931 function yac_cget_nbr_comps_instance_c( yac_instance_id ) &
9932 result( nbr_comps ) &
9933 bind(c, name='yac_cget_nbr_comps_instance')
9934 use, intrinsic :: iso_c_binding, only: c_int
9935 integer(kind=c_int), value, intent(in) :: yac_instance_id
9936 integer(kind=c_int) :: nbr_comps
9937 end function yac_cget_nbr_comps_instance_c
9938
9939 subroutine yac_cget_comp_names_instance_c( yac_instance_id, &
9940 nbr_comps, &
9941 comp_names ) &
9942 bind(c, name='yac_cget_comp_names_instance')
9943 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
9944 integer(kind=c_int), intent(in), value :: yac_instance_id
9945 integer(kind=c_int), intent(in), value :: nbr_comps
9946 TYPE(c_ptr), intent(out) :: comp_names(nbr_comps)
9947 end subroutine yac_cget_comp_names_instance_c
9948 end interface
9949
9950 integer, intent(in) :: yac_instance_id
9951 type(yac_string), allocatable :: comp_names(:)
9952 integer :: nbr_comps
9953 INTEGER :: i
9954 TYPE(c_ptr), allocatable :: comp_ptr(:)
9955
9956 nbr_comps = yac_cget_nbr_comps_instance_c(yac_instance_id)
9957 allocate(comp_names(nbr_comps))
9958 allocate(comp_ptr(nbr_comps))
9959 CALL yac_cget_comp_names_instance_c(yac_instance_id, &
9960 nbr_comps, &
9961 comp_ptr)
9962 DO i=1,nbr_comps
9963 comp_names(i)%string = yac_internal_cptr2char(comp_ptr(i))
9964 END DO
9965 end function yac_fget_comp_names_instance
9966
9967! ---------------------------------------------------------------------
9968
9969 function yac_fget_grid_names ( ) result ( grid_names )
9970
9971 use yac, dummy => yac_fget_grid_names
9973 use, intrinsic :: iso_c_binding, only: c_ptr
9974
9975 implicit none
9976
9977 interface
9978 function yac_cget_nbr_grids_c() result( nbr_grids ) &
9979 bind(c, name='yac_cget_nbr_grids')
9980 use, intrinsic :: iso_c_binding, only: c_int
9981 integer(kind=c_int) :: nbr_grids
9982 end function yac_cget_nbr_grids_c
9983
9984 subroutine yac_cget_grid_names_c( nbr_grids, grid_names ) &
9985 bind(c, name='yac_cget_grid_names')
9986 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
9987 integer(kind=c_int), intent(in), value :: nbr_grids
9988 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
9989 end subroutine yac_cget_grid_names_c
9990 end interface
9991
9992 type(yac_string), allocatable :: grid_names(:)
9993 integer :: nbr_grids
9994 INTEGER :: i
9995 TYPE(c_ptr), allocatable :: grid_ptr(:)
9996
9997 nbr_grids = yac_cget_nbr_grids_c()
9998 allocate(grid_ptr(nbr_grids))
9999 CALL yac_cget_grid_names_c(nbr_grids, grid_ptr)
10000 allocate(grid_names(nbr_grids))
10001 DO i=1,nbr_grids
10002 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
10003 END DO
10004 end function yac_fget_grid_names
10005
10006 function yac_fget_grid_names_instance ( yac_instance_id ) result ( grid_names )
10007
10008 use yac, dummy => yac_fget_grid_names_instance
10010 use, intrinsic :: iso_c_binding, only: c_ptr
10011
10012 implicit none
10013
10014 interface
10015 function yac_cget_nbr_grids_instance_c( yac_instance_id ) &
10016 result( nbr_grids ) &
10017 bind(c, name='yac_cget_nbr_grids_instance')
10018 use, intrinsic :: iso_c_binding, only: c_int
10019 integer(kind=c_int), value, intent(in) :: yac_instance_id
10020 integer(kind=c_int) :: nbr_grids
10021
10022 end function yac_cget_nbr_grids_instance_c
10023
10024 subroutine yac_cget_grid_names_instance_c( yac_instance_id, &
10025 nbr_grids, &
10026 grid_names ) &
10027 bind(c, name='yac_cget_grid_names_instance')
10028 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
10029 integer(kind=c_int), intent(in), value :: yac_instance_id
10030 integer(kind=c_int), intent(in), value :: nbr_grids
10031 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
10032 end subroutine yac_cget_grid_names_instance_c
10033 end interface
10034
10035 integer, intent(in) :: yac_instance_id
10036 type(yac_string), allocatable :: grid_names(:)
10037 integer :: nbr_grids
10038 INTEGER :: i
10039 TYPE(c_ptr), allocatable :: grid_ptr(:)
10040
10041 nbr_grids = yac_cget_nbr_grids_instance_c(yac_instance_id)
10042 allocate(grid_ptr(nbr_grids))
10043 CALL yac_cget_grid_names_instance_c(yac_instance_id, &
10044 nbr_grids, &
10045 grid_ptr)
10046 allocate(grid_names(nbr_grids))
10047 DO i=1,nbr_grids
10048 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
10049 END DO
10050 end function yac_fget_grid_names_instance
10051
10052 ! ---------------------------------------------------------------------
10053
10054 function yac_fget_comp_grid_names ( comp_name ) result ( grid_names )
10055
10056 use yac, dummy => yac_fget_comp_grid_names
10058 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
10059
10060 implicit none
10061
10062 interface
10063 function yac_cget_comp_nbr_grids_c( comp_name ) result( nbr_grids ) &
10064 bind(c, name='yac_cget_comp_nbr_grids')
10065 use, intrinsic :: iso_c_binding, only: c_int, c_char
10066 character(kind=c_char), dimension(*), intent(in) :: comp_name
10067 integer(kind=c_int) :: nbr_grids
10068
10069 end function yac_cget_comp_nbr_grids_c
10070
10071 subroutine yac_cget_comp_grid_names_c( comp_name, &
10072 nbr_grids, &
10073 grid_names ) &
10074 bind(c, name='yac_cget_comp_grid_names')
10075 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
10076 character(kind=c_char), dimension(*), intent(in) :: comp_name
10077 integer(kind=c_int), intent(in), value :: nbr_grids
10078 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
10079 end subroutine yac_cget_comp_grid_names_c
10080 end interface
10081
10082 type(yac_string), allocatable :: grid_names(:)
10083 CHARACTER(len=*), intent(in) :: comp_name
10084 integer :: nbr_grids
10085 INTEGER :: i
10086 TYPE(c_ptr), allocatable :: grid_ptr(:)
10087
10088 nbr_grids = yac_cget_comp_nbr_grids_c(trim(comp_name) // c_null_char)
10089 allocate(grid_ptr(nbr_grids))
10090 CALL yac_cget_comp_grid_names_c(trim(comp_name) // c_null_char, &
10091 nbr_grids, &
10092 grid_ptr)
10093 allocate(grid_names(nbr_grids))
10094 DO i=1,nbr_grids
10095 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
10096 END DO
10097 end function yac_fget_comp_grid_names
10098
10099 function yac_fget_comp_grid_names_instance ( yac_instance_id, comp_name) result ( grid_names )
10100
10103 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
10104
10105 implicit none
10106
10107 interface
10108 function yac_cget_comp_nbr_grids_instance_c( yac_instance_id, &
10109 comp_name ) &
10110 result( nbr_grids ) &
10111 bind(c, name='yac_cget_comp_nbr_grids_instance')
10112 use, intrinsic :: iso_c_binding, only: c_int, c_char
10113 character(kind=c_char), dimension(*), intent(in) :: comp_name
10114 integer(kind=c_int), value, intent(in) :: yac_instance_id
10115 integer(kind=c_int) :: nbr_grids
10116 end function yac_cget_comp_nbr_grids_instance_c
10117
10118 subroutine yac_cget_comp_grid_names_instance_c( yac_instance_id, &
10119 comp_name, &
10120 nbr_grids, &
10121 grid_names ) &
10122 bind(c, name='yac_cget_comp_grid_names_instance')
10123 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
10124 character(kind=c_char), dimension(*), intent(in) :: comp_name
10125 integer(kind=c_int), intent(in), value :: yac_instance_id
10126 integer(kind=c_int), intent(in), value :: nbr_grids
10127 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
10128 end subroutine yac_cget_comp_grid_names_instance_c
10129 end interface
10130
10131 integer, intent(in) :: yac_instance_id
10132 character(len=*), intent(in) :: comp_name
10133 type(yac_string), allocatable :: grid_names(:)
10134 integer :: nbr_grids
10135 INTEGER :: i
10136 TYPE(c_ptr), allocatable :: grid_ptr(:)
10137
10138 nbr_grids = &
10139 yac_cget_comp_nbr_grids_instance_c(yac_instance_id, &
10140 trim(comp_name) // c_null_char)
10141 allocate(grid_ptr(nbr_grids))
10142 CALL yac_cget_comp_grid_names_instance_c(yac_instance_id, &
10143 trim(comp_name) // c_null_char, &
10144 nbr_grids, &
10145 grid_ptr)
10146 allocate(grid_names(nbr_grids))
10147 DO i=1,nbr_grids
10148 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
10149 END DO
10151
10152 ! ---------------------------------------------------------------------
10153
10154 function yac_fget_field_names ( comp_name, grid_name ) result( field_names )
10155
10156 use yac, dummy => yac_fget_field_names
10158 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
10159
10160 implicit none
10161
10162 interface
10163 function yac_cget_nbr_fields_c(comp_name, grid_name) &
10164 result( nbr_fields ) &
10165 bind(c, name='yac_cget_nbr_fields')
10166 use, intrinsic :: iso_c_binding, only: c_int, c_char
10167 character(kind=c_char), dimension(*), intent(in) :: comp_name
10168 character(kind=c_char), dimension(*), intent(in) :: grid_name
10169 integer(kind=c_int) :: nbr_fields
10170 end function yac_cget_nbr_fields_c
10171
10172 subroutine yac_cget_field_names_c( comp_name, &
10173 grid_name, &
10174 nbr_fields, &
10175 field_names ) &
10176 bind(c, name='yac_cget_field_names')
10177 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
10178 character(kind=c_char), dimension(*), intent(in) :: comp_name
10179 character(kind=c_char), dimension(*), intent(in) :: grid_name
10180 integer(kind=c_int), intent(in), value :: nbr_fields
10181 TYPE(c_ptr), intent(out) :: field_names(nbr_fields)
10182 end subroutine yac_cget_field_names_c
10183 end interface
10184
10185 character(len=*), intent(in) :: comp_name
10186 character(len=*), intent(in) :: grid_name
10187 type(yac_string), allocatable :: field_names(:)
10188 integer :: nbr_fields
10189 INTEGER :: i
10190 TYPE(c_ptr), allocatable :: field_ptr(:)
10191
10192 nbr_fields = yac_cget_nbr_fields_c(trim(comp_name)//c_null_char, &
10193 trim(grid_name)//c_null_char)
10194 allocate(field_ptr(nbr_fields))
10195 CALL yac_cget_field_names_c(trim(comp_name)//c_null_char, &
10196 trim(grid_name)//c_null_char, &
10197 nbr_fields, &
10198 field_ptr)
10199 allocate(field_names(nbr_fields))
10200 DO i=1,nbr_fields
10201 field_names(i)%string = yac_internal_cptr2char(field_ptr(i))
10202 END DO
10203 end function yac_fget_field_names
10204
10205 function yac_fget_field_names_instance ( yac_instance_id, &
10206 comp_name, &
10207 grid_name ) &
10208 result( field_names )
10209
10212 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
10213
10214 implicit none
10215
10216 interface
10217 function yac_cget_nbr_fields_instance_c( yac_instance_id, &
10218 comp_name, &
10219 grid_name ) &
10220 result( nbr_fields ) bind(c, name='yac_cget_nbr_fields_instance')
10221 use, intrinsic :: iso_c_binding, only: c_int, c_char
10222 integer(kind=c_int), value, intent(in) :: yac_instance_id
10223 character(kind=c_char), dimension(*), intent(in) :: comp_name
10224 character(kind=c_char), dimension(*), intent(in) :: grid_name
10225 integer(kind=c_int) :: nbr_fields
10226 end function yac_cget_nbr_fields_instance_c
10227
10228 subroutine yac_cget_field_names_instance_c( yac_instance_id, &
10229 comp_name, &
10230 grid_name, &
10231 nbr_fields, &
10232 field_names ) &
10233 bind(c, name='yac_cget_field_names_instance')
10234 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
10235 integer(kind=c_int), intent(in), value :: yac_instance_id
10236 character(kind=c_char), dimension(*), intent(in) :: comp_name
10237 character(kind=c_char), dimension(*), intent(in) :: grid_name
10238 integer(kind=c_int), intent(in), value :: nbr_fields
10239 TYPE(c_ptr), intent(out) :: field_names(nbr_fields)
10240 end subroutine yac_cget_field_names_instance_c
10241 end interface
10242
10243 integer, intent(in) :: yac_instance_id
10244 character(len=*), intent(in) :: comp_name
10245 character(len=*), intent(in) :: grid_name
10246 type(yac_string), allocatable :: field_names(:)
10247 integer :: nbr_fields
10248 INTEGER :: i
10249 TYPE(c_ptr), allocatable :: field_ptr(:)
10250
10251 nbr_fields = &
10252 yac_cget_nbr_fields_instance_c(yac_instance_id, &
10253 trim(comp_name)//c_null_char, &
10254 trim(grid_name)//c_null_char)
10255 allocate(field_ptr(nbr_fields))
10256 CALL yac_cget_field_names_instance_c(yac_instance_id, &
10257 trim(comp_name)//c_null_char, &
10258 trim(grid_name)//c_null_char, &
10259 nbr_fields, &
10260 field_ptr)
10261 allocate(field_names(nbr_fields))
10262 DO i=1,nbr_fields
10263 field_names(i)%string = yac_internal_cptr2char(field_ptr(i))
10264 END DO
10266
10267! ---------------------------------------------------------------------
10268
10269function yac_fget_comp_id(comp_name) result(comp_id)
10270
10271 use yac, dummy => yac_fget_comp_id
10272 use, intrinsic :: iso_c_binding, only : c_null_char
10273
10274 implicit none
10275
10276 interface
10277
10278 function yac_cget_comp_id_c(comp_name) result(comp_id) &
10279 bind( c, name='yac_cget_comp_id' )
10280
10281 use, intrinsic :: iso_c_binding, only : c_int, c_char
10282
10283 character ( kind=c_char ), dimension(*) :: comp_name
10284 integer ( kind=c_int ) :: comp_id
10285
10286 end function yac_cget_comp_id_c
10287
10288 end interface
10289
10290 character(len=*), intent(in) :: comp_name
10291 integer :: comp_id
10292
10293 comp_id = yac_cget_comp_id_c(trim(comp_name)//c_null_char)
10294
10295end function yac_fget_comp_id
10296
10297function yac_fget_comp_id_instance(yac_id, comp_name) result(comp_id)
10298
10299 use yac, dummy => yac_fget_comp_id_instance
10300 use, intrinsic :: iso_c_binding, only : c_null_char
10301
10302 implicit none
10303
10304 interface
10305
10306 function yac_cget_comp_id_instance_c(yac_id, comp_name) result(comp_id) &
10307 bind( c, name='yac_cget_comp_id_instance' )
10308
10309 use, intrinsic :: iso_c_binding, only : c_int, c_char
10310
10311 integer ( kind=c_int ), value, intent(in) :: yac_id
10312 character ( kind=c_char ), dimension(*) :: comp_name
10313 integer ( kind=c_int ) :: comp_id
10314
10315 end function yac_cget_comp_id_instance_c
10316
10317 end interface
10318
10319 integer, intent(in) :: yac_id
10320 character(len=*), intent(in) :: comp_name
10321 integer :: comp_id
10322
10323 comp_id = yac_cget_comp_id_instance_c(yac_id, trim(comp_name)//c_null_char)
10324
10325end function yac_fget_comp_id_instance
10326
10327function yac_fget_grid_id(grid_name) result(grid_id)
10328
10329 use yac, dummy => yac_fget_grid_id
10330 use, intrinsic :: iso_c_binding, only : c_null_char
10331
10332 implicit none
10333
10334 interface
10335
10336 function yac_cget_grid_id_c(grid_name) result(grid_id) &
10337 bind( c, name='yac_cget_grid_id' )
10338
10339 use, intrinsic :: iso_c_binding, only : c_int, c_char
10340
10341 character ( kind=c_char ), dimension(*) :: grid_name
10342 integer ( kind=c_int ) :: grid_id
10343
10344 end function yac_cget_grid_id_c
10345
10346 end interface
10347
10348 character(len=*), intent(in) :: grid_name
10349 integer :: grid_id
10350
10351 grid_id = yac_cget_grid_id_c(trim(grid_name)//c_null_char)
10352
10353end function yac_fget_grid_id
10354
10355function yac_fget_points_id(grid_id, location, point_name) result(point_id)
10356
10357 use yac, dummy => yac_fget_points_id
10358 use, intrinsic :: iso_c_binding, only : c_null_char
10359
10360 implicit none
10361
10362 interface
10363
10364 function yac_cget_points_id_c(grid_id, location, point_name) &
10365 result(point_id) bind( c, name='yac_cget_points_id' )
10366
10367 use, intrinsic :: iso_c_binding, only : c_int, c_char
10368
10369 integer ( kind=c_int ), value, intent(in) :: grid_id
10370 integer ( kind=c_int ), value, intent(in) :: location
10371 character ( kind=c_char ), dimension(*) :: point_name
10372 integer ( kind=c_int ) :: point_id
10373
10374 end function yac_cget_points_id_c
10375
10376 end interface
10377
10378 integer, intent(in) :: grid_id
10379 integer, intent(in) :: location
10380 character(len=*), intent(in) :: point_name
10381 integer :: point_id
10382
10383 point_id = &
10384 yac_cget_points_id_c(grid_id, location, trim(point_name)//c_null_char)
10385
10386end function yac_fget_points_id
10387
10388function yac_fget_mask_id(grid_id, location, mask_name) result(mask_id)
10389
10390 use yac, dummy => yac_fget_mask_id
10391 use, intrinsic :: iso_c_binding, only : c_null_char
10392
10393 implicit none
10394
10395 interface
10396
10397 function yac_cget_mask_id_c(grid_id, location, mask_name) result(mask_id) &
10398 bind( c, name='yac_cget_mask_id' )
10399
10400 use, intrinsic :: iso_c_binding, only : c_int, c_char
10401
10402 integer ( kind=c_int ), value, intent(in) :: grid_id
10403 integer ( kind=c_int ), value, intent(in) :: location
10404 character ( kind=c_char ), dimension(*) :: mask_name
10405 integer ( kind=c_int ) :: mask_id
10406
10407 end function yac_cget_mask_id_c
10408
10409 end interface
10410
10411 integer, intent(in) :: grid_id
10412 integer, intent(in) :: location
10413 character(len=*), intent(in) :: mask_name
10414 integer :: mask_id
10415
10416 mask_id = yac_cget_mask_id_c(grid_id, location, trim(mask_name)//c_null_char)
10417
10418end function yac_fget_mask_id
10419
10420! ---------------------------------------------------------------------
10421
10422function yac_fget_field_is_defined ( comp_name, grid_name, field_name ) &
10423 result(field_is_defined)
10424
10425 use yac, dummy => yac_fget_field_is_defined
10426 use, intrinsic :: iso_c_binding, only : c_null_char, c_int
10427
10428 implicit none
10429
10430 interface
10431
10432 function yac_cget_field_is_defined_c ( comp_name, grid_name, field_name ) &
10433 bind( c, name='yac_cget_field_is_defined' )
10434
10435 use, intrinsic :: iso_c_binding, only : c_int, c_char
10436
10437 character ( kind=c_char ), dimension(*) :: comp_name
10438 character ( kind=c_char ), dimension(*) :: grid_name
10439 character ( kind=c_char ), dimension(*) :: field_name
10440 integer ( kind=c_int ) :: yac_cget_field_is_defined_c
10441
10442 end function yac_cget_field_is_defined_c
10443
10444 end interface
10445
10446 character(len=*), intent (in) :: comp_name
10447 character(len=*), intent (in) :: grid_name
10448 character(len=*), intent (in) :: field_name
10449 logical :: field_is_defined
10450
10451 field_is_defined = &
10452 0_c_int /= yac_cget_field_is_defined_c( trim(comp_name)//c_null_char, &
10453 trim(grid_name)//c_null_char, &
10454 trim(field_name)//c_null_char )
10455
10456end function yac_fget_field_is_defined
10457
10459 comp_name, &
10460 grid_name, &
10461 field_name ) &
10462 result(field_is_defined)
10463
10465 use, intrinsic :: iso_c_binding, only : c_null_char, c_int
10466
10467 implicit none
10468
10469 interface
10470
10471 function yac_cget_field_is_defined_instance_c ( yac_id, &
10472 comp_name, &
10473 grid_name, &
10474 field_name ) &
10475 bind( c, name='yac_cget_field_is_defined_instance' )
10476
10477 use, intrinsic :: iso_c_binding, only : c_int, c_char
10478
10479 integer( kind=c_int ), value, intent(in) :: yac_id
10480 character ( kind=c_char ), dimension(*) :: comp_name
10481 character ( kind=c_char ), dimension(*) :: grid_name
10482 character ( kind=c_char ), dimension(*) :: field_name
10483 integer ( kind=c_int ) :: yac_cget_field_is_defined_instance_c
10484
10485 end function yac_cget_field_is_defined_instance_c
10486
10487 end interface
10488
10489 integer, intent(in) :: yac_id
10490 character(len=*), intent (in) :: comp_name
10491 character(len=*), intent (in) :: grid_name
10492 character(len=*), intent (in) :: field_name
10493 logical :: field_is_defined
10494
10495 field_is_defined = &
10496 0_c_int /= yac_cget_field_is_defined_instance_c( yac_id, &
10497 trim(comp_name)//c_null_char, &
10498 trim(grid_name)//c_null_char, &
10499 trim(field_name)//c_null_char )
10500
10502
10503! ---------------------------------------------------------------------
10504
10505function yac_fget_field_id ( comp_name, grid_name, field_name ) &
10506 result(field_id)
10507
10508 use yac, dummy => yac_fget_field_id
10509 use, intrinsic :: iso_c_binding, only : c_null_char
10510
10511 implicit none
10512
10513 interface
10514
10515 function yac_cget_field_id_c ( comp_name, grid_name, field_name ) &
10516 result(field_id) &
10517 bind( c, name='yac_cget_field_id' )
10518
10519 use, intrinsic :: iso_c_binding, only : c_int, c_char
10520
10521 character ( kind=c_char ), dimension(*) :: comp_name
10522 character ( kind=c_char ), dimension(*) :: grid_name
10523 character ( kind=c_char ), dimension(*) :: field_name
10524 integer ( kind=c_int ) :: field_id
10525
10526 end function yac_cget_field_id_c
10527
10528 end interface
10529
10530 character(len=*), intent (in) :: comp_name
10531 character(len=*), intent (in) :: grid_name
10532 character(len=*), intent (in) :: field_name
10533 integer :: field_id
10534
10535 field_id = yac_cget_field_id_c( trim(comp_name)//c_null_char, &
10536 trim(grid_name)//c_null_char, &
10537 trim(field_name)//c_null_char )
10538
10539end function yac_fget_field_id
10540
10541function yac_fget_field_id_instance ( yac_id, &
10542 comp_name, &
10543 grid_name, &
10544 field_name ) &
10545 result(field_id)
10546
10547 use yac, dummy => yac_fget_field_id_instance
10548 use, intrinsic :: iso_c_binding, only : c_null_char
10549
10550 implicit none
10551
10552 interface
10553
10554 function yac_cget_field_id_instance_c ( yac_id, &
10555 comp_name, &
10556 grid_name, &
10557 field_name ) &
10558 result(field_id) &
10559 bind( c, name='yac_cget_field_id_instance' )
10560
10561 use, intrinsic :: iso_c_binding, only : c_int, c_char
10562
10563 integer( kind=c_int ), value, intent(in) :: yac_id
10564 character ( kind=c_char ), dimension(*) :: comp_name
10565 character ( kind=c_char ), dimension(*) :: grid_name
10566 character ( kind=c_char ), dimension(*) :: field_name
10567 integer ( kind=c_int ) :: field_id
10568
10569 end function yac_cget_field_id_instance_c
10570
10571 end interface
10572
10573 integer, intent(in) :: yac_id
10574 character(len=*), intent (in) :: comp_name
10575 character(len=*), intent (in) :: grid_name
10576 character(len=*), intent (in) :: field_name
10577 integer :: field_id
10578
10579 field_id = &
10580 yac_cget_field_id_instance_c( yac_id, &
10581 trim(comp_name)//c_null_char, &
10582 trim(grid_name)//c_null_char, &
10583 trim(field_name)//c_null_char )
10584
10585end function yac_fget_field_id_instance
10586
10587! ---------------------------------------------------------------------
10588
10589subroutine yac_fget_action ( field_id, action )
10590
10591 use yac, dummy => yac_fget_action
10592
10593 implicit none
10594
10595 interface
10596
10597 subroutine yac_cget_action_c ( field_id, action ) &
10598 bind( c, name='yac_cget_action' )
10599
10600 use, intrinsic :: iso_c_binding, only : c_int
10601
10602 integer ( kind=c_int ), value :: field_id
10603 integer ( kind=c_int) :: action
10604
10605 end subroutine yac_cget_action_c
10606
10607 end interface
10608
10609 integer, intent (in) :: field_id
10610 integer, intent (out) :: action
10616
10617 call yac_cget_action_c(field_id, action)
10618
10619end subroutine yac_fget_action
10620
10621! ---------------------------------------------------------------------
10622
10623subroutine yac_fupdate ( field_id )
10624
10625 use yac, dummy => yac_fupdate
10626
10627 implicit none
10628
10629 interface
10630
10631 subroutine yac_cupdate_c ( field_id ) &
10632 bind( c, name='yac_cupdate' )
10633
10634 use, intrinsic :: iso_c_binding, only : c_int
10635
10636 integer ( kind=c_int ), value :: field_id
10637
10638 end subroutine yac_cupdate_c
10639
10640 end interface
10641
10642 integer, intent (in) :: field_id
10643
10644 call yac_cupdate_c(field_id)
10645
10646end subroutine yac_fupdate
10647
10648subroutine yac_fdef_couple( src_comp_name, src_grid_name, src_field_name, &
10649 tgt_comp_name, tgt_grid_name, tgt_field_name, &
10650 coupling_timestep, time_unit, time_reduction, interp_stack_config_id, &
10651 src_lag, tgt_lag, weight_file, weight_file_on_existing, mapping_side, &
10652 scale_factor, scale_summand, src_mask_names, tgt_mask_name, &
10653 yaxt_exchanger_name, collection_indices, use_raw_exchange)
10654
10655 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_null_ptr, &
10656 c_loc, c_char
10657 use yac, dummy => yac_fdef_couple
10659
10660 implicit none
10661
10662 interface
10663
10664 subroutine yac_cdef_couple__c( src_comp_name, &
10665 src_grid_name, &
10666 src_field_name, &
10667 tgt_comp_name, &
10668 tgt_grid_name, &
10669 tgt_field_name, &
10670 coupling_timestep, &
10671 time_unit, &
10672 time_reduction, &
10673 interp_stack_config_id, &
10674 src_lag, &
10675 tgt_lag, &
10676 weight_file, &
10677 weight_file_on_existing, &
10678 mapping_side, &
10679 scale_factor, &
10680 scale_summand, &
10681 num_src_mask_names, &
10682 src_mask_names, &
10683 tgt_mask_name, &
10684 yaxt_exchanger_name, &
10685 collection_size, &
10686 collection_indices, &
10687 use_raw_exchange) &
10688 bind( c, name='yac_cdef_couple_' )
10689
10690 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr, c_double
10691
10692 character ( kind=c_char ), dimension(*) :: src_comp_name
10693 character ( kind=c_char ), dimension(*) :: src_grid_name
10694 character ( kind=c_char ), dimension(*) :: src_field_name
10695 character ( kind=c_char ), dimension(*) :: tgt_comp_name
10696 character ( kind=c_char ), dimension(*) :: tgt_grid_name
10697 character ( kind=c_char ), dimension(*) :: tgt_field_name
10698 character ( kind=c_char ), dimension(*) :: coupling_timestep
10699 integer ( kind=c_int ), value :: time_unit
10700 integer ( kind=c_int ), value :: time_reduction
10701 integer ( kind=c_int ), value :: interp_stack_config_id
10702 integer ( kind=c_int ), value :: src_lag
10703 integer ( kind=c_int ), value :: tgt_lag
10704 type ( c_ptr ), value :: weight_file
10705 integer ( kind=c_int ), value :: weight_file_on_existing
10706 integer ( kind=c_int ), value :: mapping_side
10707 real ( kind=c_double ), value :: scale_factor
10708 real ( kind=c_double ), value :: scale_summand
10709 integer ( kind=c_int ), value :: num_src_mask_names
10710 type ( c_ptr ) :: src_mask_names(*)
10711 type ( c_ptr ), value :: tgt_mask_name
10712 type ( c_ptr ), value :: yaxt_exchanger_name
10713 integer ( kind=c_int ), value :: collection_size
10714 integer ( kind=c_int ) :: collection_indices(*)
10715 integer ( kind=c_int ), value :: use_raw_exchange
10716 end subroutine yac_cdef_couple__c
10717
10718 end interface
10719
10720 character ( len=* ), intent(in) :: src_comp_name
10721 character ( len=* ), intent(in) :: src_grid_name
10722 character ( len=* ), intent(in) :: src_field_name
10723 character ( len=* ), intent(in) :: tgt_comp_name
10724 character ( len=* ), intent(in) :: tgt_grid_name
10725 character ( len=* ), intent(in) :: tgt_field_name
10726 character ( len=* ), intent(in) :: coupling_timestep
10727 integer, intent(in) :: time_unit
10728 integer, intent(in) :: time_reduction
10729 integer, intent(in) :: interp_stack_config_id
10730 integer, intent(in), optional :: src_lag
10731 integer, intent(in), optional :: tgt_lag
10732 character ( len=* ), intent(in), optional :: weight_file
10733 integer, intent(in), optional :: weight_file_on_existing
10734 integer, intent(in), optional :: mapping_side
10735 double precision, intent(in), optional :: scale_factor
10736 double precision, intent(in), optional :: scale_summand
10737 type(yac_string), intent(in), optional :: src_mask_names(:)
10738 character ( len=* ), intent(in), optional :: tgt_mask_name
10739 character ( len=* ), intent(in), optional :: yaxt_exchanger_name
10740 integer, intent(in), optional :: collection_indices(:)
10741 logical, intent(in), optional :: use_raw_exchange
10742
10743 integer :: i, j
10744 integer :: src_lag_cpy, tgt_lag_cpy, weight_file_on_existing_cpy, &
10745 mapping_side_cpy
10746 character(kind=c_char), allocatable, target :: weight_file_cpy(:)
10747 type(c_ptr) :: weight_file_ptr
10748 double precision :: scale_factor_cpy, scale_summand_cpy
10749 integer :: num_src_mask_names
10750 character(kind=c_char), allocatable, target :: src_mask_names_cpy(:,:)
10751 type(c_ptr), allocatable :: src_mask_names_ptr(:)
10752 character(kind=c_char), allocatable, target :: tgt_mask_name_cpy(:)
10753 type(c_ptr) :: tgt_mask_name_ptr
10754 character(kind=c_char), allocatable, target :: yaxt_exchanger_name_cpy(:)
10755 type(c_ptr) :: yaxt_exchanger_name_ptr
10756 integer(kind=c_int) :: collection_size
10757 integer(kind=c_int), allocatable :: collection_indices_cpy(:)
10758 integer(kind=c_int) :: use_raw_exchange_cpy
10759
10760 allocate(weight_file_cpy(yac_max_charlen+1))
10761 allocate(tgt_mask_name_cpy(yac_max_charlen+1))
10762 allocate(yaxt_exchanger_name_cpy(yac_max_charlen+1))
10763
10764 yac_check_string_len( "yac_fdef_couple", src_comp_name )
10765 yac_check_string_len( "yac_fdef_couple", src_grid_name )
10766 yac_check_string_len( "yac_fdef_couple", src_field_name )
10767 yac_check_string_len( "yac_fdef_couple", tgt_comp_name )
10768 yac_check_string_len( "yac_fdef_couple", tgt_grid_name )
10769 yac_check_string_len( "yac_fdef_couple", tgt_field_name )
10770 yac_check_string_len( "yac_fdef_couple", coupling_timestep )
10771 if ( present(src_lag) ) then
10772 src_lag_cpy = src_lag
10773 else
10774 src_lag_cpy = 0
10775 end if
10776 if ( present(tgt_lag) ) then
10777 tgt_lag_cpy = tgt_lag
10778 else
10779 tgt_lag_cpy = 0
10780 end if
10781 if ( present(weight_file) ) then
10782 yac_check_string_len( "yac_fdef_couple", weight_file )
10783 weight_file_cpy = c_null_char
10784 do i = 1, len_trim(weight_file)
10785 weight_file_cpy(i) = weight_file(i:i)
10786 end do
10787 weight_file_ptr = c_loc(weight_file_cpy(1))
10788 else
10789 weight_file_ptr = c_null_ptr
10790 end if
10791 if ( present(weight_file_on_existing) ) then
10792 weight_file_on_existing_cpy = weight_file_on_existing
10793 else
10794 weight_file_on_existing_cpy = yac_wgt_on_existing_overwrite
10795 end if
10796 if ( present(mapping_side) ) then
10797 mapping_side_cpy = mapping_side
10798 else
10799 mapping_side_cpy = 1
10800 end if
10801 if ( present(scale_factor) ) then
10802 scale_factor_cpy = scale_factor
10803 else
10804 scale_factor_cpy = 1.0
10805 end if
10806 if ( present(scale_summand) ) then
10807 scale_summand_cpy = scale_summand
10808 else
10809 scale_summand_cpy = 0.0
10810 end if
10811 if ( present(src_mask_names) ) then
10812 num_src_mask_names = size(src_mask_names)
10813 allocate(src_mask_names_ptr(num_src_mask_names))
10814 allocate(src_mask_names_cpy(yac_max_charlen+1,num_src_mask_names))
10815 src_mask_names_cpy = c_null_char
10816 do i = 1, num_src_mask_names
10817 yac_fassert(allocated(src_mask_names(i)%string), "ERROR(yac_fdef_couple): source mask name not allocated")
10818 yac_check_string_len( "yac_fdef_couple", src_mask_names(i)%string )
10819 do j = 1, len_trim(src_mask_names(i)%string)
10820 src_mask_names_cpy(j, i) = src_mask_names(i)%string(j:j)
10821 end do
10822 src_mask_names_ptr(i) = c_loc(src_mask_names_cpy(1,i))
10823 end do
10824 else
10825 num_src_mask_names = 0
10826 allocate(src_mask_names_ptr(0))
10827 end if
10828 if ( present(tgt_mask_name) ) then
10829 yac_check_string_len( "yac_fdef_couple", tgt_mask_name )
10830 tgt_mask_name_cpy = c_null_char
10831 do i = 1, len_trim(tgt_mask_name)
10832 tgt_mask_name_cpy(i) = tgt_mask_name(i:i)
10833 end do
10834 tgt_mask_name_ptr = c_loc(tgt_mask_name_cpy(1))
10835 else
10836 tgt_mask_name_ptr = c_null_ptr
10837 end if
10838 if ( present(yaxt_exchanger_name) ) then
10839 yac_check_string_len( "yac_fdef_couple", yaxt_exchanger_name )
10840 yaxt_exchanger_name_cpy = c_null_char
10841 do i = 1, len_trim(yaxt_exchanger_name)
10842 yaxt_exchanger_name_cpy(i) = yaxt_exchanger_name(i:i)
10843 end do
10844 yaxt_exchanger_name_ptr = c_loc(yaxt_exchanger_name_cpy(1))
10845 else
10846 yaxt_exchanger_name_ptr = c_null_ptr
10847 end if
10848 if ( present(collection_indices) )then
10849 collection_size = size(collection_indices)
10850 allocate(collection_indices_cpy(collection_size))
10851 collection_indices_cpy = int(collection_indices, c_int)
10852 else
10853 collection_size = 0
10854 allocate(collection_indices_cpy(0))
10855 endif
10856 if ( present(use_raw_exchange) ) then
10857 use_raw_exchange_cpy = merge(1_c_int, 0_c_int, use_raw_exchange)
10858 else
10859 use_raw_exchange_cpy = 0
10860 end if
10861
10862 call yac_cdef_couple__c( trim(src_comp_name) // c_null_char, &
10863 trim(src_grid_name) // c_null_char, &
10864 trim(src_field_name) // c_null_char, &
10865 trim(tgt_comp_name) // c_null_char, &
10866 trim(tgt_grid_name) // c_null_char, &
10867 trim(tgt_field_name) // c_null_char, &
10868 trim(coupling_timestep) // c_null_char, &
10869 time_unit, &
10870 time_reduction, &
10871 interp_stack_config_id, &
10872 src_lag_cpy, &
10873 tgt_lag_cpy, &
10874 weight_file_ptr, &
10875 weight_file_on_existing_cpy, &
10876 mapping_side_cpy, &
10877 scale_factor_cpy, &
10878 scale_summand_cpy, &
10879 num_src_mask_names, &
10880 src_mask_names_ptr, &
10881 tgt_mask_name_ptr, &
10882 yaxt_exchanger_name_ptr, &
10883 collection_size, &
10884 collection_indices_cpy, &
10885 use_raw_exchange_cpy)
10886
10887 deallocate(weight_file_cpy)
10888 deallocate(tgt_mask_name_cpy)
10889 deallocate(yaxt_exchanger_name_cpy)
10890
10891end subroutine yac_fdef_couple
10892
10893subroutine yac_fdef_couple_instance( instance_id, &
10894 src_comp_name, src_grid_name, src_field_name, &
10895 tgt_comp_name, tgt_grid_name, tgt_field_name, &
10896 coupling_timestep, time_unit, time_reduction, &
10897 interp_stack_config_id, src_lag, tgt_lag, &
10898 weight_file, weight_file_on_existing, &
10899 mapping_side, scale_factor, scale_summand, &
10900 src_mask_names, tgt_mask_name, &
10901 yaxt_exchanger_name, collection_indices, &
10902 use_raw_exchange )
10903
10904 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, &
10905 c_null_ptr, c_loc, c_char
10906 use yac, dummy => yac_fdef_couple_instance
10908
10909 implicit none
10910
10911 interface
10912
10913 subroutine yac_cdef_couple_instance__c( instance_id, &
10914 src_comp_name, &
10915 src_grid_name, &
10916 src_field_name, &
10917 tgt_comp_name, &
10918 tgt_grid_name, &
10919 tgt_field_name, &
10920 coupling_timestep, &
10921 time_unit, &
10922 time_reduction, &
10923 interp_stack_config_id, &
10924 src_lag, &
10925 tgt_lag, &
10926 weight_file, &
10927 weight_file_on_existing, &
10928 mapping_side, &
10929 scale_factor, &
10930 scale_summand, &
10931 num_src_mask_names, &
10932 src_mask_names, &
10933 tgt_mask_name, &
10934 yaxt_exchanger_name, &
10935 collection_size, &
10936 collection_indices, &
10937 use_raw_exchange) &
10938 bind( c, name='yac_cdef_couple_instance_' )
10939
10940 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr, c_double
10941
10942 integer ( kind=c_int ), value :: instance_id
10943 character ( kind=c_char ), dimension(*) :: src_comp_name
10944 character ( kind=c_char ), dimension(*) :: src_grid_name
10945 character ( kind=c_char ), dimension(*) :: src_field_name
10946 character ( kind=c_char ), dimension(*) :: tgt_comp_name
10947 character ( kind=c_char ), dimension(*) :: tgt_grid_name
10948 character ( kind=c_char ), dimension(*) :: tgt_field_name
10949 character ( kind=c_char ), dimension(*) :: coupling_timestep
10950 integer ( kind=c_int ), value :: time_unit
10951 integer ( kind=c_int ), value :: time_reduction
10952 integer ( kind=c_int ), value :: interp_stack_config_id
10953 integer ( kind=c_int ), value :: src_lag
10954 integer ( kind=c_int ), value :: tgt_lag
10955 type ( c_ptr ), value :: weight_file
10956 integer ( kind=c_int ), value :: weight_file_on_existing
10957 integer ( kind=c_int ), value :: mapping_side
10958 real ( kind=c_double ), value :: scale_factor
10959 real ( kind=c_double ), value :: scale_summand
10960 integer ( kind=c_int ), value :: num_src_mask_names
10961 type ( c_ptr ) :: src_mask_names(*)
10962 type ( c_ptr ), value :: tgt_mask_name
10963 type ( c_ptr ), value :: yaxt_exchanger_name
10964 integer ( kind=c_int ), value :: collection_size
10965 integer ( kind=c_int ) :: collection_indices(*)
10966 integer ( kind=c_int ), value :: use_raw_exchange
10967 end subroutine yac_cdef_couple_instance__c
10968
10969 end interface
10970
10971 integer, intent(in) :: instance_id
10972 character ( len=* ), intent(in) :: src_comp_name
10973 character ( len=* ), intent(in) :: src_grid_name
10974 character ( len=* ), intent(in) :: src_field_name
10975 character ( len=* ), intent(in) :: tgt_comp_name
10976 character ( len=* ), intent(in) :: tgt_grid_name
10977 character ( len=* ), intent(in) :: tgt_field_name
10978 character ( len=* ), intent(in) :: coupling_timestep
10979 integer, intent(in) :: time_unit
10980 integer, intent(in) :: time_reduction
10981 integer, intent(in) :: interp_stack_config_id
10982 integer, intent(in), optional :: src_lag
10983 integer, intent(in), optional :: tgt_lag
10984 character ( len=* ), intent(in), optional :: weight_file
10985 integer, intent(in), optional :: weight_file_on_existing
10986 integer, intent(in), optional :: mapping_side
10987 double precision, intent(in), optional :: scale_factor
10988 double precision, intent(in), optional :: scale_summand
10989 type(yac_string), intent(in), optional :: src_mask_names(:)
10990 character ( len=* ), intent(in), optional :: tgt_mask_name
10991 character ( len=* ), intent(in), optional :: yaxt_exchanger_name
10992 integer, intent(in), optional :: collection_indices(:)
10993 logical, intent(in), optional :: use_raw_exchange
10994
10995 integer :: i, j
10996 integer :: src_lag_cpy, tgt_lag_cpy, weight_file_on_existing_cpy, &
10997 mapping_side_cpy
10998 character(kind=c_char), allocatable, target :: weight_file_cpy(:)
10999 type(c_ptr) :: weight_file_ptr
11000 double precision :: scale_factor_cpy, scale_summand_cpy
11001 integer :: num_src_mask_names
11002 character(kind=c_char), allocatable, target :: src_mask_names_cpy(:,:)
11003 type(c_ptr), allocatable :: src_mask_names_ptr(:)
11004 character(kind=c_char), allocatable, target :: tgt_mask_name_cpy(:)
11005 type(c_ptr) :: tgt_mask_name_ptr
11006 character(kind=c_char), allocatable, target :: yaxt_exchanger_name_cpy(:)
11007 type(c_ptr) :: yaxt_exchanger_name_ptr
11008 integer(kind=c_int) :: collection_size
11009 integer(kind=c_int), allocatable :: collection_indices_cpy(:)
11010 integer(kind=c_int) :: use_raw_exchange_cpy
11011
11012 allocate(weight_file_cpy(yac_max_charlen+1))
11013 allocate(tgt_mask_name_cpy(yac_max_charlen+1))
11014 allocate(yaxt_exchanger_name_cpy(yac_max_charlen+1))
11015
11016 yac_check_string_len( "yac_fdef_couple_instance", src_comp_name )
11017 yac_check_string_len( "yac_fdef_couple_instance", src_grid_name )
11018 yac_check_string_len( "yac_fdef_couple_instance", src_field_name )
11019 yac_check_string_len( "yac_fdef_couple_instance", tgt_comp_name )
11020 yac_check_string_len( "yac_fdef_couple_instance", tgt_grid_name )
11021 yac_check_string_len( "yac_fdef_couple_instance", tgt_field_name )
11022 yac_check_string_len( "yac_fdef_couple_instance", coupling_timestep )
11023 if ( present(src_lag) ) then
11024 src_lag_cpy = src_lag
11025 else
11026 src_lag_cpy = 0
11027 end if
11028 if ( present(tgt_lag) ) then
11029 tgt_lag_cpy = tgt_lag
11030 else
11031 tgt_lag_cpy = 0
11032 end if
11033 if ( present(weight_file) ) then
11034 yac_check_string_len( "yac_fdef_couple_instance", weight_file )
11035 weight_file_cpy = c_null_char
11036 do i = 1, len_trim(weight_file)
11037 weight_file_cpy(i) = weight_file(i:i)
11038 end do
11039 weight_file_ptr = c_loc(weight_file_cpy(1))
11040 else
11041 weight_file_ptr = c_null_ptr
11042 end if
11043 if ( present(weight_file_on_existing) ) then
11044 weight_file_on_existing_cpy = weight_file_on_existing
11045 else
11046 weight_file_on_existing_cpy = yac_wgt_on_existing_overwrite
11047 end if
11048 if ( present(mapping_side) ) then
11049 mapping_side_cpy = mapping_side
11050 else
11051 mapping_side_cpy = 1
11052 end if
11053 if ( present(scale_factor) ) then
11054 scale_factor_cpy = scale_factor
11055 else
11056 scale_factor_cpy = 1.0
11057 end if
11058 if ( present(scale_summand) ) then
11059 scale_summand_cpy = scale_summand
11060 else
11061 scale_summand_cpy = 0.0
11062 end if
11063 if ( present(src_mask_names) ) then
11064 num_src_mask_names = size(src_mask_names)
11065 allocate(src_mask_names_ptr(num_src_mask_names))
11066 allocate(src_mask_names_cpy(yac_max_charlen+1,num_src_mask_names))
11067 src_mask_names_cpy = c_null_char
11068 do i = 1, num_src_mask_names
11069 yac_fassert(allocated(src_mask_names(i)%string), "ERROR(yac_fdef_couple): source mask name not allocated")
11070 yac_check_string_len( "yac_fdef_couple_instance", src_mask_names(i)%string )
11071 do j = 1, len_trim(src_mask_names(i)%string)
11072 src_mask_names_cpy(j, i) = src_mask_names(i)%string(j:j)
11073 end do
11074 src_mask_names_ptr(i) = c_loc(src_mask_names_cpy(1,i))
11075 end do
11076 else
11077 num_src_mask_names = 0
11078 allocate(src_mask_names_ptr(0))
11079 end if
11080 if ( present(tgt_mask_name) ) then
11081 yac_check_string_len( "yac_fdef_couple_instance", tgt_mask_name )
11082 tgt_mask_name_cpy = c_null_char
11083 do i = 1, len_trim(tgt_mask_name)
11084 tgt_mask_name_cpy(i) = tgt_mask_name(i:i)
11085 end do
11086 tgt_mask_name_ptr = c_loc(tgt_mask_name_cpy(1))
11087 else
11088 tgt_mask_name_ptr = c_null_ptr
11089 end if
11090 if ( present(yaxt_exchanger_name) ) then
11091 yac_check_string_len( "yac_fdef_couple_instance", yaxt_exchanger_name )
11092 yaxt_exchanger_name_cpy = c_null_char
11093 do i = 1, len_trim(yaxt_exchanger_name)
11094 yaxt_exchanger_name_cpy(i) = yaxt_exchanger_name(i:i)
11095 end do
11096 yaxt_exchanger_name_ptr = c_loc(yaxt_exchanger_name_cpy(1))
11097 else
11098 yaxt_exchanger_name_ptr = c_null_ptr
11099 end if
11100 if ( present(collection_indices) )then
11101 collection_size = size(collection_indices)
11102 allocate(collection_indices_cpy(collection_size))
11103 collection_indices_cpy = int(collection_indices, c_int)
11104 else
11105 collection_size = 0
11106 allocate(collection_indices_cpy(0))
11107 endif
11108 if ( present(use_raw_exchange) ) then
11109 use_raw_exchange_cpy = merge(1_c_int, 0_c_int, use_raw_exchange)
11110 else
11111 use_raw_exchange_cpy = 0
11112 end if
11113
11114 call yac_cdef_couple_instance__c( instance_id, &
11115 trim(src_comp_name) // c_null_char, &
11116 trim(src_grid_name) // c_null_char, &
11117 trim(src_field_name) // c_null_char, &
11118 trim(tgt_comp_name) // c_null_char, &
11119 trim(tgt_grid_name) // c_null_char, &
11120 trim(tgt_field_name) // c_null_char, &
11121 trim(coupling_timestep) // c_null_char, &
11122 time_unit, &
11123 time_reduction, &
11124 interp_stack_config_id, &
11125 src_lag_cpy, &
11126 tgt_lag_cpy, &
11127 weight_file_ptr, &
11128 weight_file_on_existing_cpy, &
11129 mapping_side_cpy, &
11130 scale_factor_cpy, &
11131 scale_summand_cpy, &
11132 num_src_mask_names, &
11133 src_mask_names_ptr, &
11134 tgt_mask_name_ptr, &
11135 yaxt_exchanger_name_ptr, &
11136 collection_size, &
11137 collection_indices_cpy, &
11138 use_raw_exchange_cpy )
11139
11140 deallocate(weight_file_cpy)
11141 deallocate(tgt_mask_name_cpy)
11142 deallocate(yaxt_exchanger_name_cpy)
11143
11144end subroutine yac_fdef_couple_instance
11145
11146! ---------------------------------------------------------------------
11147
11149 result(comp_name)
11150
11153
11154 implicit none
11155
11156 interface
11157
11158 function yac_cget_component_name_from_field_id_c ( field_id ) &
11159 result(comp_name) &
11160 bind( c, name='yac_cget_component_name_from_field_id' )
11161
11162 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
11163
11164 integer ( kind=c_int ), value :: field_id
11165 TYPE(c_ptr) :: comp_name
11166
11167 end function yac_cget_component_name_from_field_id_c
11168
11169 end interface
11170
11171 integer, intent (in) :: field_id
11172 character (len=:), allocatable :: comp_name
11173
11174 comp_name = yac_internal_cptr2char( &
11175 yac_cget_component_name_from_field_id_c( field_id ))
11176
11178
11179! ---------------------------------------------------------------------
11180
11182 result(grid_name)
11183
11186
11187 implicit none
11188
11189 interface
11190
11191 function yac_cget_grid_name_from_field_id_c ( field_id ) &
11192 result(grid_name) &
11193 bind( c, name='yac_cget_grid_name_from_field_id' )
11194
11195 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
11196
11197 integer ( kind=c_int ), value :: field_id
11198 TYPE(c_ptr) :: grid_name
11199
11200 end function yac_cget_grid_name_from_field_id_c
11201
11202 end interface
11203
11204 integer, intent (in) :: field_id
11205 character (len=:), allocatable :: grid_name
11206
11207 grid_name = yac_internal_cptr2char( &
11208 yac_cget_grid_name_from_field_id_c( field_id ))
11209
11211
11212! ---------------------------------------------------------------------
11213
11215 result(field_name)
11216
11219
11220 implicit none
11221
11222 interface
11223
11224 function yac_cget_field_name_from_field_id_c ( field_id ) &
11225 result(field_name) &
11226 bind( c, name='yac_cget_field_name_from_field_id' )
11227
11228 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
11229
11230 integer ( kind=c_int ), value :: field_id
11231 TYPE(c_ptr) :: field_name
11232
11233 end function yac_cget_field_name_from_field_id_c
11234
11235 end interface
11236
11237 integer, intent (in) :: field_id
11238 character (len=:), allocatable :: field_name
11239
11240 field_name = yac_internal_cptr2char( &
11241 yac_cget_field_name_from_field_id_c( field_id ))
11242
11244
11245! ---------------------------------------------------------------------
11246
11247 function yac_fget_role_from_field_id ( field_id )
11248
11249 use yac, dummy => yac_fget_role_from_field_id
11250
11251 implicit none
11252
11253 interface
11254
11255 function yac_cget_role_from_field_id_c ( field_id ) &
11256 bind( c, name='yac_cget_role_from_field_id' )
11257
11258 use, intrinsic :: iso_c_binding, only : c_int
11259
11260 integer ( kind=c_int ), value :: field_id
11261 integer ( kind=c_int ) :: yac_cget_role_from_field_id_c
11262
11263 end function yac_cget_role_from_field_id_c
11264
11265 end interface
11266
11267 integer, intent (in) :: field_id
11269
11271 yac_cget_role_from_field_id_c( field_id )
11272
11273 end function yac_fget_role_from_field_id
11274
11275 ! Note that in contrast to most of the other functions in this file, we have to
11276 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
11277 ! the file due to the fact that the name of the function is also a name of the
11278 ! interface in the YAC module.
11279 function yac_fget_field_role ( comp_name, grid_name, field_name ) result( res )
11280
11281 use yac, dummy => yac_fget_field_role
11282 use, intrinsic :: iso_c_binding, only: c_null_char
11283
11284 implicit none
11285
11286 interface
11287
11288 function yac_cget_field_role_c ( comp_name, grid_name, field_name ) &
11289 bind( c, name='yac_cget_field_role' )
11290
11291 use, intrinsic :: iso_c_binding, only : c_int, c_char
11292
11293 character( kind=c_char), dimension(*), intent(in) :: comp_name
11294 character( kind=c_char), dimension(*), intent(in) :: grid_name
11295 character( kind=c_char), dimension(*), intent(in) :: field_name
11296 integer ( kind=c_int ) :: yac_cget_field_role_c
11297
11298 end function yac_cget_field_role_c
11299
11300 end interface
11301
11302 character(len=*), intent(in) :: comp_name
11303 character(len=*), intent(in) :: grid_name
11304 character(len=*), intent(in) :: field_name
11305 integer :: res
11306
11307 res = yac_cget_field_role_c( &
11308 trim(comp_name) // c_null_char, &
11309 trim(grid_name) // c_null_char, &
11310 trim(field_name) // c_null_char )
11311
11312 end function yac_fget_field_role
11313
11314 function yac_fget_field_role_instance ( yac_instance_id, comp_name, grid_name, field_name )
11315
11316 use yac, dummy => yac_fget_field_role_instance
11317 use, intrinsic :: iso_c_binding, only: c_null_char
11318
11319 implicit none
11320
11321 interface
11322
11323 function yac_cget_field_role_instance_c ( yac_instance_id, &
11324 comp_name, &
11325 grid_name, &
11326 field_name ) &
11327 bind( c, name='yac_cget_field_role_instance' )
11328
11329 use, intrinsic :: iso_c_binding, only : c_int, c_char
11330
11331 integer( kind=c_int ), intent(in), value :: yac_instance_id
11332 character( kind=c_char), dimension(*), intent(in) :: comp_name
11333 character( kind=c_char), dimension(*), intent(in) :: grid_name
11334 character( kind=c_char), dimension(*), intent(in) :: field_name
11335 integer ( kind=c_int ) :: yac_cget_field_role_instance_c
11336
11337 end function yac_cget_field_role_instance_c
11338
11339 end interface
11340
11341 integer, intent(in) :: yac_instance_id
11342 character(len=*), intent(in) :: comp_name
11343 character(len=*), intent(in) :: grid_name
11344 character(len=*), intent(in) :: field_name
11346
11348 yac_cget_field_role_instance_c( &
11349 yac_instance_id, &
11350 trim(comp_name) // c_null_char, &
11351 trim(grid_name) // c_null_char, &
11352 trim(field_name) // c_null_char )
11353
11354 end function yac_fget_field_role_instance
11355
11356! ---------------------------------------------------------------------
11357
11358subroutine yac_fget_field_source ( tgt_comp_name, &
11359 tgt_grid_name, &
11360 tgt_field_name, &
11361 src_comp_name, &
11362 src_grid_name, &
11363 src_field_name )
11364
11365 use yac, dummy => yac_fget_field_source
11366 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr
11368
11369 implicit none
11370
11371 interface
11372
11373 subroutine yac_cget_field_source_c ( tgt_comp_name, &
11374 tgt_grid_name, &
11375 tgt_field_name, &
11376 src_comp_name, &
11377 src_grid_name, &
11378 src_field_name) &
11379 bind( c, name='yac_cget_field_source' )
11380
11381 use, intrinsic :: iso_c_binding, only : c_ptr, c_char
11382
11383 character( kind=c_char), dimension(*), intent(in) :: tgt_comp_name
11384 character( kind=c_char), dimension(*), intent(in) :: tgt_grid_name
11385 character( kind=c_char), dimension(*), intent(in) :: tgt_field_name
11386 type(c_ptr) :: src_comp_name
11387 type(c_ptr) :: src_grid_name
11388 type(c_ptr) :: src_field_name
11389
11390 end subroutine yac_cget_field_source_c
11391
11392 end interface
11393
11394 character(len=*), intent(in) :: tgt_comp_name
11395 character(len=*), intent(in) :: tgt_grid_name
11396 character(len=*), intent(in) :: tgt_field_name
11397 character(len=:), allocatable :: src_comp_name
11398 character(len=:), allocatable :: src_grid_name
11399 character(len=:), allocatable :: src_field_name
11400
11401 type(c_ptr) :: src_comp_name_c
11402 type(c_ptr) :: src_grid_name_c
11403 type(c_ptr) :: src_field_name_c
11404
11405 CALL yac_cget_field_source_c ( trim(tgt_comp_name) // c_null_char, &
11406 trim(tgt_grid_name) // c_null_char, &
11407 trim(tgt_field_name) // c_null_char, &
11408 src_comp_name_c, &
11409 src_grid_name_c, &
11410 src_field_name_c)
11411
11412 src_comp_name = yac_internal_cptr2char(src_comp_name_c)
11413 src_grid_name = yac_internal_cptr2char(src_grid_name_c)
11414 src_field_name = yac_internal_cptr2char(src_field_name_c)
11415
11416end subroutine yac_fget_field_source
11417
11418subroutine yac_fget_field_source_instance ( yac_instance_id, &
11419 tgt_comp_name, &
11420 tgt_grid_name, &
11421 tgt_field_name, &
11422 src_comp_name, &
11423 src_grid_name, &
11424 src_field_name )
11425
11427 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr
11429
11430 implicit none
11431
11432 interface
11433
11434 subroutine yac_cget_field_source_instance_c ( yac_instance_id, &
11435 tgt_comp_name, &
11436 tgt_grid_name, &
11437 tgt_field_name, &
11438 src_comp_name, &
11439 src_grid_name, &
11440 src_field_name) &
11441 bind( c, name='yac_cget_field_source_instance' )
11442
11443 use, intrinsic :: iso_c_binding, only : c_ptr, c_char, c_int
11444
11445 integer( kind=c_int ), intent(in), value :: yac_instance_id
11446 character( kind=c_char), dimension(*), intent(in) :: tgt_comp_name
11447 character( kind=c_char), dimension(*), intent(in) :: tgt_grid_name
11448 character( kind=c_char), dimension(*), intent(in) :: tgt_field_name
11449 type(c_ptr) :: src_comp_name
11450 type(c_ptr) :: src_grid_name
11451 type(c_ptr) :: src_field_name
11452
11453 end subroutine yac_cget_field_source_instance_c
11454
11455 end interface
11456
11457 integer, intent(in) :: yac_instance_id
11458 character(len=*), intent(in) :: tgt_comp_name
11459 character(len=*), intent(in) :: tgt_grid_name
11460 character(len=*), intent(in) :: tgt_field_name
11461 character(len=:), allocatable :: src_comp_name
11462 character(len=:), allocatable :: src_grid_name
11463 character(len=:), allocatable :: src_field_name
11464
11465 type(c_ptr) :: src_comp_name_c
11466 type(c_ptr) :: src_grid_name_c
11467 type(c_ptr) :: src_field_name_c
11468
11469 CALL yac_cget_field_source_instance_c ( yac_instance_id, &
11470 trim(tgt_comp_name) // c_null_char, &
11471 trim(tgt_grid_name) // c_null_char, &
11472 trim(tgt_field_name) // c_null_char, &
11473 src_comp_name_c, &
11474 src_grid_name_c, &
11475 src_field_name_c)
11476
11477 src_comp_name = yac_internal_cptr2char(src_comp_name_c)
11478 src_grid_name = yac_internal_cptr2char(src_grid_name_c)
11479 src_field_name = yac_internal_cptr2char(src_field_name_c)
11480
11481end subroutine yac_fget_field_source_instance
11482
11483! ---------------------------------------------------------------------
11484
11485function yac_fget_timestep_from_field_id ( field_id ) result(string)
11486
11489
11490 implicit none
11491
11492 interface
11493
11494 function yac_cget_timestep_from_field_id_c ( field_id ) &
11495 result(string) &
11496 bind( c, name='yac_cget_timestep_from_field_id' )
11497
11498 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
11499
11500 integer ( kind=c_int ), value :: field_id
11501 type(c_ptr) :: string
11502
11503 end function yac_cget_timestep_from_field_id_c
11504
11505 end interface
11506
11507 integer, intent (in) :: field_id
11508 character (len=:), allocatable :: string
11509
11510 string = yac_internal_cptr2char(yac_cget_timestep_from_field_id_c(field_id))
11511
11513
11514function yac_fget_field_timestep ( comp_name, grid_name, field_name ) &
11515 result( timestep )
11516
11517 use yac, dummy => yac_fget_field_timestep
11519 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char, c_associated
11520
11521 implicit none
11522
11523 interface
11524
11525 function yac_cget_field_timestep_c ( comp_name, grid_name, field_name) &
11526 result( timestep ) &
11527 bind( c, name='yac_cget_field_timestep' )
11528
11529 use, intrinsic :: iso_c_binding, only : c_char, c_ptr
11530
11531 character( kind=c_char), dimension(*), intent(in) :: comp_name
11532 character( kind=c_char), dimension(*), intent(in) :: grid_name
11533 character( kind=c_char), dimension(*), intent(in) :: field_name
11534 type(c_ptr) :: timestep
11535 end function yac_cget_field_timestep_c
11536
11537 end interface
11538
11539 character(len=*), intent(in) :: comp_name
11540 character(len=*), intent(in) :: grid_name
11541 character(len=*), intent(in) :: field_name
11542 character(len=:), allocatable :: timestep
11543 TYPE(c_ptr) :: c_char_ptr
11544
11545 c_char_ptr = &
11546 yac_cget_field_timestep_c( &
11547 trim(comp_name) // c_null_char, &
11548 trim(grid_name) // c_null_char, &
11549 trim(field_name) // c_null_char)
11550
11551 yac_fassert(c_associated(c_char_ptr), "ERROR(yac_fget_field_timestep): no timestep defined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name))
11552 timestep = yac_internal_cptr2char(c_char_ptr)
11553
11554end function yac_fget_field_timestep
11555
11557 yac_instance_id, comp_name, grid_name, field_name ) &
11558 result( timestep )
11559
11562 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char, c_associated
11563
11564 implicit none
11565
11566 interface
11567
11568 function yac_cget_field_timestep_instance_c ( &
11569 yac_instance_id, comp_name, grid_name, field_name ) &
11570 result( timestep ) &
11571 bind( c, name='yac_cget_field_timestep_instance' )
11572
11573 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr
11574
11575 integer( kind=c_int ), intent(in), value :: yac_instance_id
11576 character( kind=c_char), dimension(*), intent(in) :: comp_name
11577 character( kind=c_char), dimension(*), intent(in) :: grid_name
11578 character( kind=c_char), dimension(*), intent(in) :: field_name
11579 type(c_ptr) :: timestep
11580
11581 end function yac_cget_field_timestep_instance_c
11582
11583 end interface
11584
11585 integer, intent(in) :: yac_instance_id
11586 character(len=*), intent(in) :: comp_name
11587 character(len=*), intent(in) :: grid_name
11588 character(len=*), intent(in) :: field_name
11589 character(len=:), allocatable :: timestep
11590 type(c_ptr) :: c_char_ptr
11591
11592 c_char_ptr = &
11593 yac_cget_field_timestep_instance_c( &
11594 yac_instance_id, &
11595 trim(comp_name) // c_null_char, &
11596 trim(grid_name) // c_null_char, &
11597 trim(field_name) // c_null_char)
11598
11599 yac_fassert(c_associated(c_char_ptr), "ERROR(yac_fget_field_timestep_instance): no timestep defined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name))
11600 timestep = yac_internal_cptr2char(c_char_ptr)
11601
11603
11604! ---------------------------------------------------------------------
11605
11606function yac_fget_field_datetime(field_id) &
11607 result(datetime)
11608
11609 use yac, dummy => yac_fget_field_datetime
11611
11612 implicit none
11613
11614 interface
11615 function yac_cget_field_datetime_c( field_id ) &
11616 result(datetime) &
11617 bind ( c, name="yac_cget_field_datetime" )
11618 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
11619 integer (kind=c_int ), intent(in), value :: field_id
11620 type(c_ptr) :: datetime
11621 end function yac_cget_field_datetime_c
11622 end interface
11623
11624 integer, intent(in) :: field_id
11625 character(len=:), allocatable :: datetime
11626 datetime = yac_internal_cptr2char(yac_cget_field_datetime_c(field_id))
11627end function yac_fget_field_datetime
11628
11629! ---------------------------------------------------------------------
11630
11632 comp_name, grid_name, field_name, frac_mask_fallback_value)
11633
11634 use, intrinsic :: iso_c_binding, only: c_null_char
11635 use yac, dummy => yac_fenable_field_frac_mask
11636
11637 implicit none
11638
11639 interface
11640 subroutine yac_cenable_field_frac_mask_c (comp_name, &
11641 grid_name, &
11642 field_name, &
11643 frac_mask_fallback_value) &
11644 bind( c, name="yac_cenable_field_frac_mask" )
11645 use, intrinsic :: iso_c_binding, only: c_char, c_double
11646 character(kind=c_char), dimension(*), intent(in) :: comp_name
11647 character(kind=c_char), dimension(*), intent(in) :: grid_name
11648 character(kind=c_char), dimension(*), intent(in) :: field_name
11649 real(kind=c_double), value :: frac_mask_fallback_value
11650 end subroutine yac_cenable_field_frac_mask_c
11651 end interface
11652
11653 character(len=*), intent(in) :: comp_name
11654 character(len=*), intent(in) :: grid_name
11655 character(len=*), intent(in) :: field_name
11656 double precision, intent(in) :: frac_mask_fallback_value
11657
11658 CALL yac_cenable_field_frac_mask_c ( &
11659 trim(comp_name) // c_null_char, &
11660 trim(grid_name) // c_null_char, &
11661 trim(field_name) // c_null_char, &
11662 frac_mask_fallback_value)
11663 end subroutine yac_fenable_field_frac_mask
11664
11665 subroutine yac_fenable_field_frac_mask_instance(yac_instance_id, comp_name, &
11666 grid_name, field_name, frac_mask_fallback_value)
11667
11668 use, intrinsic :: iso_c_binding, only: c_null_char
11670
11671 implicit none
11672
11673 interface
11674 subroutine yac_cenable_field_frac_mask_instance_c ( &
11675 yac_instance_id, comp_name, grid_name, field_name, &
11676 frac_mask_fallback_value) &
11677 bind( c, name="yac_cenable_field_frac_mask_instance" )
11678 use, intrinsic :: iso_c_binding, only: c_char, c_double, c_int
11679 integer(kind=c_int), intent(in), value :: yac_instance_id
11680 character(kind=c_char), dimension(*), intent(in) :: comp_name
11681 character(kind=c_char), dimension(*), intent(in) :: grid_name
11682 character(kind=c_char), dimension(*), intent(in) :: field_name
11683 real(kind=c_double), value :: frac_mask_fallback_value
11684 end subroutine yac_cenable_field_frac_mask_instance_c
11685 end interface
11686
11687 integer, intent(in) :: yac_instance_id
11688 character(len=*), intent(in) :: comp_name
11689 character(len=*), intent(in) :: grid_name
11690 character(len=*), intent(in) :: field_name
11691 double precision, intent(in) :: frac_mask_fallback_value
11692
11693 CALL yac_cenable_field_frac_mask_instance_c ( &
11694 yac_instance_id, &
11695 trim(comp_name) // c_null_char, &
11696 trim(grid_name) // c_null_char, &
11697 trim(field_name) // c_null_char, &
11698 frac_mask_fallback_value)
11700
11701! ---------------------------------------------------------------------
11702
11703 ! Note that in contrast to most of the other functions in this file, we have to
11704 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
11705 ! the file due to the fact that the name of the function is also a name of the
11706 ! interface in the YAC module.
11708 comp_name, grid_name, field_name ) result( res )
11709
11711 use, intrinsic :: iso_c_binding, only: c_null_char
11712
11713 implicit none
11714
11715 interface
11716
11717 function yac_cget_field_frac_mask_fallback_value_c ( &
11718 comp_name, grid_name, field_name ) &
11719 bind( c, name='yac_cget_field_frac_mask_fallback_value' )
11720
11721 use, intrinsic :: iso_c_binding, only : c_double, c_char
11722
11723 character( kind=c_char), dimension(*), intent(in) :: comp_name
11724 character( kind=c_char), dimension(*), intent(in) :: grid_name
11725 character( kind=c_char), dimension(*), intent(in) :: field_name
11726 real ( kind=c_double ) :: yac_cget_field_frac_mask_fallback_value_c
11727
11728 end function yac_cget_field_frac_mask_fallback_value_c
11729
11730 end interface
11731
11732 character(len=*), intent(in) :: comp_name
11733 character(len=*), intent(in) :: grid_name
11734 character(len=*), intent(in) :: field_name
11735 double precision :: res
11736
11737 res = yac_cget_field_frac_mask_fallback_value_c( &
11738 trim(comp_name) // c_null_char, &
11739 trim(grid_name) // c_null_char, &
11740 trim(field_name) // c_null_char )
11741
11743
11745 yac_instance_id, comp_name, grid_name, field_name )
11746
11748 use, intrinsic :: iso_c_binding, only: c_null_char
11749
11750 implicit none
11751
11752 interface
11753
11754 function yac_cget_field_frac_mask_fallback_value_instance_c ( &
11755 yac_instance_id, comp_name, grid_name, field_name ) &
11756 bind( c, name='yac_cget_field_frac_mask_fallback_value_instance' )
11757
11758 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
11759
11760 integer( kind=c_int ), intent(in), value :: yac_instance_id
11761 character( kind=c_char), dimension(*), intent(in) :: comp_name
11762 character( kind=c_char), dimension(*), intent(in) :: grid_name
11763 character( kind=c_char), dimension(*), intent(in) :: field_name
11764 real ( kind=c_double ) :: yac_cget_field_frac_mask_fallback_value_instance_c
11765
11766 end function yac_cget_field_frac_mask_fallback_value_instance_c
11767
11768 end interface
11769
11770 integer, intent(in) :: yac_instance_id
11771 character(len=*), intent(in) :: comp_name
11772 character(len=*), intent(in) :: grid_name
11773 character(len=*), intent(in) :: field_name
11775
11777 yac_cget_field_frac_mask_fallback_value_instance_c( &
11778 yac_instance_id, &
11779 trim(comp_name) // c_null_char, &
11780 trim(grid_name) // c_null_char, &
11781 trim(field_name) // c_null_char )
11782
11784
11785 ! ---------------------------------------------------------------------
11786
11788 result(collection_size)
11789
11792
11793 implicit none
11794
11795 interface
11796
11797 function yac_cget_collection_size_from_field_id_c ( field_id ) &
11798 result(collection_size) &
11799 bind( c, name='yac_cget_collection_size_from_field_id' )
11800
11801 use, intrinsic :: iso_c_binding, only : c_int
11802
11803 integer ( kind=c_int ), value :: field_id
11804 integer ( kind=c_int ) :: collection_size
11805
11806 end function yac_cget_collection_size_from_field_id_c
11807
11808 end interface
11809
11810 integer, intent (in) :: field_id
11811 integer :: collection_size
11812
11813 collection_size = &
11814 yac_cget_collection_size_from_field_id_c( field_id )
11815
11817
11818 ! Note that in contrast to most of the other functions in this file, we have to
11819 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
11820 ! the file due to the fact that the name of the function is also a name of the
11821 ! interface in the YAC module.
11822 function yac_fget_field_collection_size ( comp_name, grid_name, field_name ) result( res )
11823
11825 use, intrinsic :: iso_c_binding, only: c_null_char
11826
11827 implicit none
11828
11829 interface
11830
11831 function yac_cget_field_collection_size_c ( comp_name, &
11832 grid_name, &
11833 field_name ) &
11834 bind( c, name='yac_cget_field_collection_size' )
11835
11836 use, intrinsic :: iso_c_binding, only : c_int, c_char
11837
11838 character( kind=c_char), dimension(*), intent(in) :: comp_name
11839 character( kind=c_char), dimension(*), intent(in) :: grid_name
11840 character( kind=c_char), dimension(*), intent(in) :: field_name
11841 integer ( kind=c_int ) :: yac_cget_field_collection_size_c
11842
11843 end function yac_cget_field_collection_size_c
11844
11845 end interface
11846
11847 character(len=*), intent(in) :: comp_name
11848 character(len=*), intent(in) :: grid_name
11849 character(len=*), intent(in) :: field_name
11850 integer :: res
11851
11852 res = yac_cget_field_collection_size_c( &
11853 trim(comp_name) // c_null_char, &
11854 trim(grid_name) // c_null_char, &
11855 trim(field_name) // c_null_char )
11856
11857 yac_fassert(res >= 0, "ERROR(yac_fget_field_collection_size): collection size undefined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name))
11858
11860
11861 function yac_fget_field_collection_size_instance ( yac_instance_id, comp_name, grid_name, field_name )
11862
11864 use, intrinsic :: iso_c_binding, only: c_null_char
11865
11866 implicit none
11867
11868 interface
11869
11870 function yac_cget_field_collection_size_instance_c ( yac_instance_id, &
11871 comp_name, &
11872 grid_name, &
11873 field_name ) &
11874 bind( c, name='yac_cget_field_collection_size_instance' )
11875
11876 use, intrinsic :: iso_c_binding, only : c_int, c_char
11877
11878 integer( kind=c_int ), intent(in), value :: yac_instance_id
11879 character( kind=c_char), dimension(*), intent(in) :: comp_name
11880 character( kind=c_char), dimension(*), intent(in) :: grid_name
11881 character( kind=c_char), dimension(*), intent(in) :: field_name
11882 integer ( kind=c_int ) :: yac_cget_field_collection_size_instance_c
11883
11884 end function yac_cget_field_collection_size_instance_c
11885
11886 end interface
11887
11888 integer, intent(in) :: yac_instance_id
11889 character(len=*), intent(in) :: comp_name
11890 character(len=*), intent(in) :: grid_name
11891 character(len=*), intent(in) :: field_name
11893
11895 yac_cget_field_collection_size_instance_c( &
11896 yac_instance_id, &
11897 trim(comp_name) // c_null_char, &
11898 trim(grid_name) // c_null_char, &
11899 trim(field_name) // c_null_char )
11900
11901 yac_fassert(yac_fget_field_collection_size_instance >= 0, "ERROR(yac_fget_field_collection_size_instance): collection size undefined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name))
11902
11904
11905 ! ---------------------------------------------------------------------
11906
11907 subroutine yac_fdef_component_metadata(comp_name, metadata)
11908
11909 use, intrinsic :: iso_c_binding, only: c_null_char
11910 use yac, dummy => yac_fdef_component_metadata
11911
11912 implicit none
11913
11914 interface
11915 subroutine yac_cdef_component_metadata_c (comp_name, metadata) &
11916 bind( c, name="yac_cdef_component_metadata" )
11917 use, intrinsic :: iso_c_binding, only: c_char
11918 character(kind=c_char), dimension(*), intent(in) :: comp_name
11919 character(kind=c_char), dimension(*), intent(in) :: metadata
11920 end subroutine yac_cdef_component_metadata_c
11921 end interface
11922
11923 character(len=*), intent(in) :: comp_name
11924 character(len=*), intent(in) :: metadata
11925 CALL yac_cdef_component_metadata_c (trim(comp_name) // c_null_char, &
11926 trim(metadata) // c_null_char)
11927 end subroutine yac_fdef_component_metadata
11928
11929 subroutine yac_fdef_component_metadata_instance(yac_instance_id, comp_name, &
11930 metadata)
11931
11932 use, intrinsic :: iso_c_binding, only: c_null_char
11934
11935 implicit none
11936
11937 interface
11938 subroutine yac_cdef_component_metadata_instance_c (yac_instance_id, &
11939 comp_name, &
11940 metadata) &
11941 bind( c, name="yac_cdef_component_metadata_instance" )
11942 use, intrinsic :: iso_c_binding, only: c_char, c_int
11943 integer(kind=c_int), intent(in), value :: yac_instance_id
11944 character(kind=c_char), dimension(*), intent(in) :: comp_name
11945 character(kind=c_char), dimension(*), intent(in) :: metadata
11946 end subroutine yac_cdef_component_metadata_instance_c
11947 end interface
11948
11949 integer, intent(in) :: yac_instance_id
11950 character(len=*), intent(in) :: comp_name
11951 character(len=*), intent(in) :: metadata
11952 CALL yac_cdef_component_metadata_instance_c ( &
11953 yac_instance_id, &
11954 trim(comp_name) // c_null_char, &
11955 trim(metadata) // c_null_char)
11957
11958 subroutine yac_fdef_grid_metadata(grid_name, metadata)
11959
11960 use, intrinsic :: iso_c_binding, only: c_null_char
11961 use yac, dummy => yac_fdef_grid_metadata
11962
11963 implicit none
11964
11965 interface
11966 subroutine yac_cdef_grid_metadata_c (grid_name, metadata) &
11967 bind( c, name="yac_cdef_grid_metadata" )
11968 use, intrinsic :: iso_c_binding, only: c_char
11969 character(kind=c_char), dimension(*), intent(in) :: grid_name
11970 character(kind=c_char), dimension(*), intent(in) :: metadata
11971 end subroutine yac_cdef_grid_metadata_c
11972 end interface
11973
11974 character(len=*), intent(in) :: grid_name
11975 character(len=*), intent(in) :: metadata
11976 CALL yac_cdef_grid_metadata_c ( trim(grid_name) // c_null_char, &
11977 trim(metadata) // c_null_char)
11978 end subroutine yac_fdef_grid_metadata
11979
11980 subroutine yac_fdef_grid_metadata_instance(yac_instance_id, grid_name, metadata)
11981
11982 use, intrinsic :: iso_c_binding, only: c_null_char
11984
11985 implicit none
11986
11987 interface
11988 subroutine yac_cdef_grid_metadata_instance_c (yac_instance_id, &
11989 grid_name, &
11990 metadata) &
11991 bind( c, name="yac_cdef_grid_metadata_instance" )
11992 use, intrinsic :: iso_c_binding, only: c_char, c_int
11993 integer(kind=c_int), intent(in), value :: yac_instance_id
11994 character(kind=c_char), dimension(*), intent(in) :: grid_name
11995 character(kind=c_char), dimension(*), intent(in) :: metadata
11996 end subroutine yac_cdef_grid_metadata_instance_c
11997 end interface
11998
11999 integer, intent(in) :: yac_instance_id
12000 character(len=*), intent(in) :: grid_name
12001 character(len=*), intent(in) :: metadata
12002 CALL yac_cdef_grid_metadata_instance_c ( &
12003 yac_instance_id, &
12004 trim(grid_name) // c_null_char, &
12005 trim(metadata) // c_null_char)
12006 end subroutine yac_fdef_grid_metadata_instance
12007
12008 subroutine yac_fdef_field_metadata(comp_name, grid_name, field_name, metadata)
12009
12010 use, intrinsic :: iso_c_binding, only: c_null_char
12011 use yac, dummy => yac_fdef_field_metadata
12012
12013 implicit none
12014
12015 interface
12016 subroutine yac_cdef_field_metadata_c (comp_name, &
12017 grid_name, &
12018 field_name, &
12019 metadata) &
12020 bind( c, name="yac_cdef_field_metadata" )
12021 use, intrinsic :: iso_c_binding, only: c_char
12022 character(kind=c_char), dimension(*), intent(in) :: comp_name
12023 character(kind=c_char), dimension(*), intent(in) :: grid_name
12024 character(kind=c_char), dimension(*), intent(in) :: field_name
12025 character(kind=c_char), dimension(*), intent(in) :: metadata
12026 end subroutine yac_cdef_field_metadata_c
12027 end interface
12028
12029 character(len=*), intent(in) :: comp_name
12030 character(len=*), intent(in) :: grid_name
12031 character(len=*), intent(in) :: field_name
12032 character(len=*), intent(in) :: metadata
12033 CALL yac_cdef_field_metadata_c ( &
12034 trim(comp_name) // c_null_char, &
12035 trim(grid_name) // c_null_char, &
12036 trim(field_name) // c_null_char, &
12037 trim(metadata) // c_null_char)
12038 end subroutine yac_fdef_field_metadata
12039
12040 subroutine yac_fdef_field_metadata_instance(yac_instance_id, comp_name, &
12041 grid_name, field_name, metadata)
12042
12043 use, intrinsic :: iso_c_binding, only: c_null_char
12045
12046 implicit none
12047
12048 interface
12049 subroutine yac_cdef_field_metadata_instance_c (yac_instance_id, &
12050 comp_name, &
12051 grid_name, &
12052 field_name, &
12053 metadata) &
12054 bind( c, name="yac_cdef_field_metadata_instance" )
12055 use, intrinsic :: iso_c_binding, only: c_char, c_int
12056 integer(kind=c_int), intent(in), value :: yac_instance_id
12057 character(kind=c_char), dimension(*), intent(in) :: comp_name
12058 character(kind=c_char), dimension(*), intent(in) :: grid_name
12059 character(kind=c_char), dimension(*), intent(in) :: field_name
12060 character(kind=c_char), dimension(*), intent(in) :: metadata
12061 end subroutine yac_cdef_field_metadata_instance_c
12062 end interface
12063
12064 integer, intent(in) :: yac_instance_id
12065 character(len=*), intent(in) :: comp_name
12066 character(len=*), intent(in) :: grid_name
12067 character(len=*), intent(in) :: field_name
12068 character(len=*), intent(in) :: metadata
12069 CALL yac_cdef_field_metadata_instance_c ( &
12070 yac_instance_id, &
12071 trim(comp_name) // c_null_char, &
12072 trim(grid_name) // c_null_char, &
12073 trim(field_name) // c_null_char, &
12074 trim(metadata) // c_null_char)
12076
12077 function yac_fcomponent_has_metadata(comp_name) result( has_metadata )
12078 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12079 use yac, dummy => yac_fcomponent_has_metadata
12081 implicit none
12082
12083 interface
12084 function yac_cget_component_metadata_c (comp_name) &
12085 result(metadata) &
12086 bind( c, name="yac_cget_component_metadata")
12087 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12088 character(kind=c_char), dimension(*), intent(in) :: comp_name
12089 type(c_ptr) :: metadata
12090 end function yac_cget_component_metadata_c
12091 end interface
12092 character(len=*), intent(in) :: comp_name
12093 logical :: has_metadata
12094 has_metadata = &
12095 c_associated( &
12096 yac_cget_component_metadata_c(trim(comp_name) // c_null_char))
12097 end function yac_fcomponent_has_metadata
12098
12099 function yac_fcomponent_has_metadata_instance(yac_instance_id, comp_name) &
12100 result( has_metadata )
12101 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12104 implicit none
12105
12106 interface
12107 function yac_cget_component_metadata_instance_c(yac_instance_id, &
12108 comp_name) &
12109 result(metadata) &
12110 bind( c, name="yac_cget_component_metadata_instance")
12111 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12112 integer(kind=c_int), intent(in), value :: yac_instance_id
12113 character(kind=c_char), dimension(*), intent(in) :: comp_name
12114 type(c_ptr) :: metadata
12115 end function yac_cget_component_metadata_instance_c
12116 end interface
12117 integer, intent(in) :: yac_instance_id
12118 character(len=*), intent(in) :: comp_name
12119 logical :: has_metadata
12120 has_metadata = &
12121 c_associated( &
12122 yac_cget_component_metadata_instance_c( &
12123 yac_instance_id, trim(comp_name) // c_null_char))
12125
12126 function yac_fgrid_has_metadata(grid_name) result( has_metadata )
12127 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12128 use yac, dummy => yac_fgrid_has_metadata
12130 implicit none
12131
12132 interface
12133 function yac_cget_grid_metadata_c(grid_name) result(metadata) &
12134 bind( c, name="yac_cget_grid_metadata")
12135 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12136 character(kind=c_char), dimension(*), intent(in) :: grid_name
12137 type(c_ptr) :: metadata
12138 end function yac_cget_grid_metadata_c
12139 end interface
12140 character(len=*), intent(in) :: grid_name
12141 logical :: has_metadata
12142 has_metadata = &
12143 c_associated(yac_cget_grid_metadata_c(trim(grid_name) // c_null_char))
12144 end function yac_fgrid_has_metadata
12145
12146 function yac_fgrid_has_metadata_instance(yac_instance_id, grid_name) &
12147 result( has_metadata )
12148 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12151 implicit none
12152
12153 interface
12154 function yac_cget_grid_metadata_instance_c(yac_instance_id, grid_name) &
12155 result(metadata) &
12156 bind( c, name="yac_cget_grid_metadata_instance")
12157 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12158 integer(kind=c_int), intent(in), value :: yac_instance_id
12159 character(kind=c_char), dimension(*), intent(in) :: grid_name
12160 type(c_ptr) :: metadata
12161 end function yac_cget_grid_metadata_instance_c
12162 end interface
12163 integer, intent(in) :: yac_instance_id
12164 character(len=*), intent(in) :: grid_name
12165 logical :: has_metadata
12166 has_metadata = &
12167 c_associated( &
12168 yac_cget_grid_metadata_instance_c( &
12169 yac_instance_id, trim(grid_name) // c_null_char))
12171
12172 function yac_ffield_has_metadata(comp_name, grid_name, field_name) &
12173 result( has_metadata )
12174 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12175 use yac, dummy => yac_ffield_has_metadata
12177 implicit none
12178
12179 interface
12180 function yac_cget_field_metadata_c(comp_name, grid_name, field_name) &
12181 result(metadata) &
12182 bind( c, name="yac_cget_field_metadata")
12183 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12184 character(kind=c_char), dimension(*), intent(in) :: comp_name
12185 character(kind=c_char), dimension(*), intent(in) :: grid_name
12186 character(kind=c_char), dimension(*), intent(in) :: field_name
12187 type(c_ptr) :: metadata
12188 end function yac_cget_field_metadata_c
12189 end interface
12190 character(len=*), intent(in) :: comp_name
12191 character(len=*), intent(in) :: grid_name
12192 character(len=*), intent(in) :: field_name
12193 logical :: has_metadata
12194 has_metadata = &
12195 c_associated( &
12196 yac_cget_field_metadata_c( &
12197 trim(comp_name) // c_null_char, &
12198 trim(grid_name) // c_null_char, &
12199 trim(field_name) // c_null_char))
12200 end function yac_ffield_has_metadata
12201
12203 yac_instance_id, comp_name, grid_name, field_name) &
12204 result( has_metadata )
12205 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
12208 implicit none
12209
12210 interface
12211 function yac_cget_field_metadata_instance_c(yac_instance_id, &
12212 comp_name, &
12213 grid_name, &
12214 field_name) &
12215 result(metadata) &
12216 bind( c, name="yac_cget_field_metadata_instance")
12217 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12218 integer(kind=c_int), intent(in), value :: yac_instance_id
12219 character(kind=c_char), dimension(*), intent(in) :: comp_name
12220 character(kind=c_char), dimension(*), intent(in) :: grid_name
12221 character(kind=c_char), dimension(*), intent(in) :: field_name
12222 type(c_ptr) :: metadata
12223 end function yac_cget_field_metadata_instance_c
12224 end interface
12225 integer, intent(in) :: yac_instance_id
12226 character(len=*), intent(in) :: comp_name
12227 character(len=*), intent(in) :: grid_name
12228 character(len=*), intent(in) :: field_name
12229 logical :: has_metadata
12230 has_metadata = &
12231 c_associated( &
12232 yac_cget_field_metadata_instance_c( &
12233 yac_instance_id, &
12234 trim(comp_name) // c_null_char, &
12235 trim(grid_name) // c_null_char, &
12236 trim(field_name) // c_null_char))
12238
12239 function yac_fget_component_metadata(comp_name) result( metadata )
12240 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12241 use yac, dummy => yac_fget_component_metadata
12243 implicit none
12244
12245 interface
12246 function yac_cget_component_metadata_c(comp_name) result(metadata) &
12247 bind( c, name="yac_cget_component_metadata")
12248 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12249 character(kind=c_char), dimension(*), intent(in) :: comp_name
12250 type(c_ptr) :: metadata
12251 end function yac_cget_component_metadata_c
12252 end interface
12253 character(len=*), intent(in) :: comp_name
12254 character(len=:), allocatable :: metadata
12255 type(c_ptr) :: c_metadata
12256 c_metadata = yac_cget_component_metadata_c(trim(comp_name) // c_null_char)
12257 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_component_metadata): no metadata defined for component " // trim(comp_name) // yac_component_has_metadata_hint )
12258 metadata = yac_internal_cptr2char(c_metadata)
12259 end function yac_fget_component_metadata
12260
12261 function yac_fget_component_metadata_instance(yac_instance_id, comp_name) &
12262 result( metadata )
12263
12264 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12267 implicit none
12268
12269 interface
12270 function yac_cget_component_metadata_instance_c(yac_instance_id, &
12271 comp_name) &
12272 result(metadata) &
12273 bind( c, name="yac_cget_component_metadata_instance")
12274 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12275 integer(kind=c_int), intent(in), value :: yac_instance_id
12276 character(kind=c_char), dimension(*), intent(in) :: comp_name
12277 type(c_ptr) :: metadata
12278 end function yac_cget_component_metadata_instance_c
12279 end interface
12280 integer, intent(in) :: yac_instance_id
12281 character(len=*), intent(in) :: comp_name
12282 character(len=:), allocatable :: metadata
12283 type(c_ptr) :: c_metadata
12284 c_metadata = &
12285 yac_cget_component_metadata_instance_c( &
12286 yac_instance_id, trim(comp_name) // c_null_char)
12287 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_component_metadata_instance): no metadata defined for component " // trim(comp_name) // yac_component_has_metadata_hint )
12288 metadata = yac_internal_cptr2char(c_metadata)
12290
12291 function yac_fget_grid_metadata(grid_name) result( metadata )
12292 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12293 use yac, dummy => yac_fget_grid_metadata
12295 implicit none
12296
12297 interface
12298 function yac_cget_grid_metadata_c(grid_name) result(metadata) &
12299 bind( c, name="yac_cget_grid_metadata")
12300 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12301 character(kind=c_char), dimension(*), intent(in) :: grid_name
12302 type(c_ptr) :: metadata
12303 end function yac_cget_grid_metadata_c
12304 end interface
12305 character(len=*), intent(in) :: grid_name
12306 character(len=:), allocatable :: metadata
12307 type(c_ptr) :: c_metadata
12308 c_metadata = yac_cget_grid_metadata_c(trim(grid_name) // c_null_char)
12309 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_grid_metadata): no metadata defined for grid " // trim(grid_name) // yac_grid_has_metadata_hint )
12310 metadata = yac_internal_cptr2char(c_metadata)
12311 end function yac_fget_grid_metadata
12312
12313 function yac_fget_grid_metadata_instance(yac_instance_id, grid_name) &
12314 result( metadata )
12315
12316 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12319 implicit none
12320
12321 interface
12322 function yac_cget_grid_metadata_instance_c(yac_instance_id, &
12323 grid_name) &
12324 result(metadata) &
12325 bind( c, name="yac_cget_grid_metadata_instance")
12326 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12327 integer(kind=c_int), intent(in), value :: yac_instance_id
12328 character(kind=c_char), dimension(*), intent(in) :: grid_name
12329 type(c_ptr) :: metadata
12330 end function yac_cget_grid_metadata_instance_c
12331 end interface
12332 integer, intent(in) :: yac_instance_id
12333 character(len=*), intent(in) :: grid_name
12334 character(len=:), allocatable :: metadata
12335 type(c_ptr) :: c_metadata
12336 c_metadata = &
12337 yac_cget_grid_metadata_instance_c( &
12338 yac_instance_id, trim(grid_name) // c_null_char)
12339 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_grid_metadata_instance): no metadata defined for grid " // trim(grid_name) // yac_grid_has_metadata_hint )
12340 metadata = yac_internal_cptr2char(c_metadata)
12342
12343 function yac_fget_field_metadata(comp_name, grid_name, field_name) &
12344 result( metadata )
12345 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12346 use yac, dummy => yac_fget_field_metadata
12348 implicit none
12349
12350 interface
12351 function yac_cget_field_metadata_c(comp_name, grid_name, field_name) &
12352 result(metadata) &
12353 bind( c, name="yac_cget_field_metadata")
12354 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
12355 character(kind=c_char), dimension(*), intent(in) :: comp_name
12356 character(kind=c_char), dimension(*), intent(in) :: grid_name
12357 character(kind=c_char), dimension(*), intent(in) :: field_name
12358 type(c_ptr) :: metadata
12359 end function yac_cget_field_metadata_c
12360 end interface
12361 character(len=*), intent(in) :: comp_name
12362 character(len=*), intent(in) :: grid_name
12363 character(len=*), intent(in) :: field_name
12364 character(len=:), allocatable :: metadata
12365 type(c_ptr) :: c_metadata
12366
12367 c_metadata = &
12368 yac_cget_field_metadata_c( &
12369 trim(comp_name) // c_null_char, &
12370 trim(grid_name) // c_null_char, &
12371 trim(field_name) // c_null_char)
12372 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_field_metadata): no metadata defined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name) // yac_field_has_metadata_hint )
12373 metadata = yac_internal_cptr2char(c_metadata)
12374
12375 end function yac_fget_field_metadata
12376
12377 function yac_fget_field_metadata_instance(yac_instance_id, comp_name, &
12378 grid_name, field_name) result( metadata )
12379
12380 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
12383 implicit none
12384
12385 interface
12386 function yac_cget_field_metadata_instance_c(yac_instance_id, &
12387 comp_name, &
12388 grid_name, &
12389 field_name) &
12390 result(metadata) &
12391 bind( c, name="yac_cget_field_metadata_instance")
12392 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
12393 integer(kind=c_int), intent(in), value :: yac_instance_id
12394 character(kind=c_char), dimension(*), intent(in) :: comp_name
12395 character(kind=c_char), dimension(*), intent(in) :: grid_name
12396 character(kind=c_char), dimension(*), intent(in) :: field_name
12397 type(c_ptr) :: metadata
12398 end function yac_cget_field_metadata_instance_c
12399 end interface
12400 integer, intent(in) :: yac_instance_id
12401 character(len=*), intent(in) :: comp_name
12402 character(len=*), intent(in) :: grid_name
12403 character(len=*), intent(in) :: field_name
12404 character(len=:), allocatable :: metadata
12405 type(c_ptr) :: c_metadata
12406
12407 c_metadata = &
12408 yac_cget_field_metadata_instance_c( &
12409 yac_instance_id, &
12410 trim(comp_name) // c_null_char, &
12411 trim(grid_name) // c_null_char, &
12412 trim(field_name) // c_null_char)
12413 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_field_metadata_instance): no metadata defined for field " // trim(comp_name) // "::" // trim(grid_name) // "::" // trim(field_name) // yac_field_has_metadata_hint )
12414 metadata = yac_internal_cptr2char(c_metadata)
12415
12417
12418 ! ---------------------------------------------------------------------
12419
12420function yac_fget_start_datetime () result (start_datetime_string)
12421
12422 use, intrinsic :: iso_c_binding, only : c_ptr
12424 use yac, dummy => yac_fget_start_datetime
12425
12426 implicit none
12427
12428 interface
12429 function yac_cget_start_datetime_c() &
12430 bind( c, name='yac_cget_start_datetime' )
12431
12432 use, intrinsic :: iso_c_binding, only : c_ptr
12433 type(c_ptr) :: yac_cget_start_datetime_c
12434
12435 end function yac_cget_start_datetime_c
12436
12437 subroutine free_c ( ptr ) bind ( c, NAME='free' )
12438
12439 use, intrinsic :: iso_c_binding, only : c_ptr
12440
12441 type ( c_ptr ), intent(in), value :: ptr
12442
12443 end subroutine free_c
12444 end interface
12445
12446 type (c_ptr) :: c_string_ptr
12447 character (len=:), allocatable :: start_datetime_string
12448
12449 c_string_ptr = yac_cget_start_datetime_c()
12450 start_datetime_string = yac_internal_cptr2char(c_string_ptr)
12451 CALL free_c(c_string_ptr)
12452
12453end function yac_fget_start_datetime
12454
12455function yac_fget_start_datetime_instance (yac_instance_id) &
12456 result(start_datetime_string)
12457
12458 use, intrinsic :: iso_c_binding, only : c_ptr
12461
12462 implicit none
12463
12464 interface
12465 function yac_cget_start_datetime_instance_c(yac_instance_id) &
12466 bind( c, name='yac_cget_start_datetime_instance' )
12467
12468 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
12469 integer ( kind=c_int ), value :: yac_instance_id
12470 type(c_ptr) :: yac_cget_start_datetime_instance_c
12471
12472 end function yac_cget_start_datetime_instance_c
12473
12474 subroutine free_c ( ptr ) bind ( c, NAME='free' )
12475
12476 use, intrinsic :: iso_c_binding, only : c_ptr
12477
12478 type ( c_ptr ), intent(in), value :: ptr
12479
12480 end subroutine free_c
12481 end interface
12482
12483 integer, intent(in) :: yac_instance_id
12484
12485 type (c_ptr) :: c_string_ptr
12486 character (len=:), allocatable :: start_datetime_string
12487
12488 c_string_ptr = yac_cget_start_datetime_instance_c(yac_instance_id)
12489 start_datetime_string = yac_internal_cptr2char(c_string_ptr)
12490 CALL free_c(c_string_ptr)
12491
12493
12494! ---------------------------------------------------------------------
12495
12496function yac_fget_end_datetime () result (end_datetime_string)
12497
12498 use, intrinsic :: iso_c_binding, only : c_ptr
12500 use yac, dummy => yac_fget_end_datetime
12501
12502 implicit none
12503
12504 interface
12505 function yac_cget_end_datetime_c() &
12506 bind( c, name='yac_cget_end_datetime' )
12507
12508 use, intrinsic :: iso_c_binding, only : c_ptr
12509 type(c_ptr) :: yac_cget_end_datetime_c
12510
12511 end function yac_cget_end_datetime_c
12512
12513 subroutine free_c ( ptr ) bind ( c, NAME='free' )
12514
12515 use, intrinsic :: iso_c_binding, only : c_ptr
12516
12517 type ( c_ptr ), intent(in), value :: ptr
12518
12519 end subroutine free_c
12520 end interface
12521
12522 type (c_ptr) :: c_string_ptr
12523 character (len=:), allocatable :: end_datetime_string
12524
12525 c_string_ptr = yac_cget_end_datetime_c()
12526 end_datetime_string = yac_internal_cptr2char(c_string_ptr)
12527 CALL free_c(c_string_ptr)
12528
12529end function yac_fget_end_datetime
12530
12531function yac_fget_end_datetime_instance (yac_instance_id) &
12532 result(end_datetime_string)
12533
12534 use, intrinsic :: iso_c_binding, only : c_ptr
12537
12538 implicit none
12539
12540 interface
12541 function yac_cget_end_datetime_instance_c(yac_instance_id) &
12542 bind( c, name='yac_cget_end_datetime_instance' )
12543
12544 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
12545 integer ( kind=c_int ), value :: yac_instance_id
12546 type(c_ptr) :: yac_cget_end_datetime_instance_c
12547
12548 end function yac_cget_end_datetime_instance_c
12549
12550 subroutine free_c ( ptr ) bind ( c, NAME='free' )
12551
12552 use, intrinsic :: iso_c_binding, only : c_ptr
12553
12554 type ( c_ptr ), intent(in), value :: ptr
12555
12556 end subroutine free_c
12557 end interface
12558
12559 integer, intent(in) :: yac_instance_id
12560
12561 type (c_ptr) :: c_string_ptr
12562 character (len=:), allocatable :: end_datetime_string
12563
12564 c_string_ptr = yac_cget_end_datetime_instance_c(yac_instance_id)
12565 end_datetime_string = yac_internal_cptr2char(c_string_ptr)
12566 CALL free_c(c_string_ptr)
12567
12569
12570! ---------------------------------------------------------------------
12571
12572subroutine yac_fget_interp_stack_config ( interp_stack_config_id )
12573
12574 use yac, dummy => yac_fget_interp_stack_config
12575
12576 implicit none
12577
12578 interface
12579
12580 subroutine yac_cget_interp_stack_config_c ( interp_stack_config_id ) &
12581 bind( c, name='yac_cget_interp_stack_config' )
12582 use, intrinsic :: iso_c_binding, only : c_int
12583
12584 integer ( kind=c_int ) :: interp_stack_config_id
12585
12586 end subroutine yac_cget_interp_stack_config_c
12587
12588 end interface
12589
12590 integer, intent(out) :: interp_stack_config_id
12591
12592 call yac_cget_interp_stack_config_c ( interp_stack_config_id )
12593
12594end subroutine yac_fget_interp_stack_config
12595
12596subroutine yac_ffree_interp_stack_config ( interp_stack_config_id )
12597
12599
12600 implicit none
12601
12602 interface
12603
12604 subroutine yac_cfree_interp_stack_config_c ( interp_stack_config_id ) &
12605 bind( c, name='yac_cfree_interp_stack_config' )
12606 use, intrinsic :: iso_c_binding, only : c_int
12607
12608 integer ( kind=c_int ), value :: interp_stack_config_id
12609
12610 end subroutine yac_cfree_interp_stack_config_c
12611
12612 end interface
12613
12614 integer, intent(in) :: interp_stack_config_id
12615
12616 call yac_cfree_interp_stack_config_c ( interp_stack_config_id )
12617
12618end subroutine yac_ffree_interp_stack_config
12619
12620subroutine yac_fadd_interp_stack_config_average ( interp_stack_config_id, &
12621 reduction_type, partial_coverage)
12622
12624
12625 implicit none
12626
12627 interface
12628
12629 subroutine yac_cadd_interp_stack_config_average_c ( &
12630 interp_stack_config_id, reduction_type, partial_coverage ) &
12631 bind( c, name='yac_cadd_interp_stack_config_average' )
12632 use, intrinsic :: iso_c_binding, only : c_int
12633
12634 integer ( kind=c_int ), value :: interp_stack_config_id
12635 integer ( kind=c_int ), value :: reduction_type
12636 integer ( kind=c_int ), value :: partial_coverage
12637
12638 end subroutine yac_cadd_interp_stack_config_average_c
12639
12640 end interface
12641
12642 integer, intent(in) :: interp_stack_config_id
12643 integer, intent(in) :: reduction_type
12644 integer, intent(in) :: partial_coverage
12645
12646 call yac_cadd_interp_stack_config_average_c ( &
12647 interp_stack_config_id, reduction_type, partial_coverage )
12648
12650
12651subroutine yac_fadd_interp_stack_config_ncc ( interp_stack_config_id, &
12652 weight_type, partial_coverage)
12653
12655
12656 implicit none
12657
12658 interface
12659
12660 subroutine yac_cadd_interp_stack_config_ncc_c ( &
12661 interp_stack_config_id, weight_type, partial_coverage ) &
12662 bind( c, name='yac_cadd_interp_stack_config_ncc' )
12663 use, intrinsic :: iso_c_binding, only : c_int
12664
12665 integer ( kind=c_int ), value :: interp_stack_config_id
12666 integer ( kind=c_int ), value :: weight_type
12667 integer ( kind=c_int ), value :: partial_coverage
12668
12669 end subroutine yac_cadd_interp_stack_config_ncc_c
12670
12671 end interface
12672
12673 integer, intent(in) :: interp_stack_config_id
12674 integer, intent(in) :: weight_type
12675 integer, intent(in) :: partial_coverage
12676
12677 call yac_cadd_interp_stack_config_ncc_c ( &
12678 interp_stack_config_id, weight_type, partial_coverage )
12679
12681
12682subroutine yac_fadd_interp_stack_config_nnn(interp_stack_config_id, &
12683 type, n, max_search_distance, scale)
12684
12686 use, intrinsic :: iso_c_binding, only : c_size_t
12687
12688 implicit none
12689
12690 interface
12691
12692 subroutine yac_cadd_interp_stack_config_nnn_c( &
12693 interp_stack_config_id, type, n, max_search_distance, scale) &
12694 bind( c, name='yac_cadd_interp_stack_config_nnn' )
12695 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_size_t
12696
12697 integer ( kind=c_int ), value :: interp_stack_config_id
12698 integer ( kind=c_int ), value :: type
12699 integer ( kind=c_size_t ), value :: n
12700 real ( kind=c_double ), value :: max_search_distance
12701 real ( kind=c_double ), value :: scale
12702
12703 end subroutine yac_cadd_interp_stack_config_nnn_c
12704
12705 end interface
12706
12707 integer, intent(in) :: interp_stack_config_id
12708 integer, intent(in) :: type
12709 integer, intent(in) :: n
12710 double precision, intent(in) :: max_search_distance
12711 double precision, intent(in) :: scale
12712
12713 call yac_cadd_interp_stack_config_nnn_c( &
12714 interp_stack_config_id, type, int(n, c_size_t), &
12715 max_search_distance, scale)
12716
12718
12719subroutine yac_fadd_interp_stack_config_dnn(interp_stack_config_id, &
12720 weight_type, search_distance_type, search_distance, scale)
12721
12723
12724 implicit none
12725
12726 interface
12727
12728 subroutine yac_cadd_interp_stack_config_dnn_c( &
12729 interp_stack_config_id, weight_type, search_distance_type, &
12730 search_distance, scale) &
12731 bind( c, name='yac_cadd_interp_stack_config_dnn' )
12732
12733 use, intrinsic :: iso_c_binding, only : c_int, c_double
12734
12735 integer ( kind=c_int ), value :: interp_stack_config_id
12736 integer ( kind=c_int ), value :: weight_type
12737 integer ( kind=c_int ), value :: search_distance_type
12738 real ( kind=c_double ), value :: search_distance
12739 real ( kind=c_double ), value :: scale
12740
12741 end subroutine yac_cadd_interp_stack_config_dnn_c
12742
12743 end interface
12744
12745 integer, intent(in) :: interp_stack_config_id
12746 integer, intent(in) :: weight_type
12747 integer, intent(in) :: search_distance_type
12748 double precision, intent(in) :: search_distance
12749 double precision, intent(in) :: scale
12750
12751 call yac_cadd_interp_stack_config_dnn_c( &
12752 interp_stack_config_id, weight_type, search_distance_type, &
12753 search_distance, scale)
12754
12756
12757subroutine yac_fadd_interp_stack_config_rbf(interp_stack_config_id, &
12758 n, max_search_distance, scale)
12759
12761 use, intrinsic :: iso_c_binding, only : c_size_t
12765
12766 implicit none
12767
12768 interface
12769
12770 subroutine yac_cadd_interp_stack_config_rbf_c( &
12771 interp_stack_config_id, n, max_search_distance, scale) &
12772 bind( c, name='yac_cadd_interp_stack_config_rbf' )
12773 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_size_t
12774
12775 integer ( kind=c_int ), value :: interp_stack_config_id
12776 integer ( kind=c_size_t ), value :: n
12777 real ( kind=c_double ), value :: max_search_distance
12778 real ( kind=c_double ), value :: scale
12779
12780 end subroutine yac_cadd_interp_stack_config_rbf_c
12781
12782 end interface
12783
12784 integer, intent(in) :: interp_stack_config_id
12785 integer, optional, intent(in) :: n
12786 double precision, optional, intent(in) :: max_search_distance
12787 double precision, optional, intent(in) :: scale
12788
12789 integer :: n_
12790 double precision :: max_search_distance_
12791 double precision :: scale_
12792
12793 if (present(n)) then
12794 n_ = n
12795 else
12797 endif
12798 if (present(max_search_distance)) then
12799 max_search_distance_ = max_search_distance
12800 else
12802 endif
12803 if (present(scale)) then
12804 scale_ = scale
12805 else
12807 endif
12808
12809 call yac_cadd_interp_stack_config_rbf_c( &
12810 interp_stack_config_id, int(n_, c_size_t), &
12811 max_search_distance_, scale_)
12812
12814
12816 interp_stack_config_id, order, enforced_conserv, &
12817 partial_coverage, normalization)
12818
12820
12821 implicit none
12822
12823 interface
12824
12825 subroutine yac_cadd_interp_stack_config_conservative_c( &
12826 interp_stack_config_id, order, enforced_conserv, &
12827 partial_coverage, normalization) &
12828 bind( c, name='yac_cadd_interp_stack_config_conservative' )
12829 use, intrinsic :: iso_c_binding, only : c_int
12830
12831 integer ( kind=c_int ), value :: interp_stack_config_id
12832 integer ( kind=c_int ), value :: order
12833 integer ( kind=c_int ), value :: enforced_conserv
12834 integer ( kind=c_int ), value :: partial_coverage
12835 integer ( kind=c_int ), value :: normalization
12836
12837 end subroutine yac_cadd_interp_stack_config_conservative_c
12838
12839 end interface
12840
12841 integer, intent(in) :: interp_stack_config_id
12842 integer, intent(in) :: order
12843 integer, intent(in) :: enforced_conserv
12844 integer, intent(in) :: partial_coverage
12845 integer, intent(in) :: normalization
12846
12847 call yac_cadd_interp_stack_config_conservative_c( &
12848 interp_stack_config_id, order, enforced_conserv, &
12849 partial_coverage, normalization)
12850
12852
12854 center_lon, center_lat, inc_angle, overwrite_config_id, &
12855 spread_distance, max_search_distance, weight_type)
12856
12858
12859 implicit none
12860
12861 interface
12862
12863 subroutine yac_cget_spmap_overwrite_config_c(overwrite_config_id) &
12864 bind( c, name='yac_cget_spmap_overwrite_config' )
12865 use, intrinsic :: iso_c_binding, only : c_int
12866
12867 integer ( kind=c_int ) :: overwrite_config_id
12868
12869 end subroutine yac_cget_spmap_overwrite_config_c
12870
12871 subroutine yac_cset_spmap_overwrite_config_src_point_selection_c( &
12872 overwrite_config_id, center_lon, center_lat, inc_angle) &
12873 bind( c, name='yac_cset_spmap_overwrite_config_src_point_selection_bnd_circle' )
12874 use, intrinsic :: iso_c_binding, only : c_int, c_double
12875
12876 integer ( kind=c_int ), value :: overwrite_config_id
12877 real ( kind=c_double ), value :: center_lon
12878 real ( kind=c_double ), value :: center_lat
12879 real ( kind=c_double ), value :: inc_angle
12880
12881 end subroutine yac_cset_spmap_overwrite_config_src_point_selection_c
12882
12883 subroutine yac_cset_spmap_overwrite_config_spread_distance_c( &
12884 overwrite_config_id, spread_distance) &
12885 bind( c, name='yac_cset_spmap_overwrite_config_spread_distance' )
12886 use, intrinsic :: iso_c_binding, only : c_int, c_double
12887
12888 integer ( kind=c_int ), value :: overwrite_config_id
12889 real ( kind=c_double ), value :: spread_distance
12890
12891 end subroutine yac_cset_spmap_overwrite_config_spread_distance_c
12892
12893 subroutine yac_cset_spmap_overwrite_config_max_search_distance_c( &
12894 overwrite_config_id, max_search_distance) &
12895 bind( c, name='yac_cset_spmap_overwrite_config_max_search_distance' )
12896 use, intrinsic :: iso_c_binding, only : c_int, c_double
12897
12898 integer ( kind=c_int ), value :: overwrite_config_id
12899 real ( kind=c_double ), value :: max_search_distance
12900
12901 end subroutine yac_cset_spmap_overwrite_config_max_search_distance_c
12902
12903 subroutine yac_cset_spmap_overwrite_config_weight_type_c( &
12904 overwrite_config_id, weight_type) &
12905 bind( c, name='yac_cset_spmap_overwrite_config_weight_type' )
12906 use, intrinsic :: iso_c_binding, only : c_int
12907
12908 integer ( kind=c_int ), value :: overwrite_config_id
12909 integer ( kind=c_int ), value :: weight_type
12910
12911 end subroutine yac_cset_spmap_overwrite_config_weight_type_c
12912
12913 end interface
12914
12915 double precision, intent(in) :: center_lon
12916 double precision, intent(in) :: center_lat
12917 double precision, intent(in) :: inc_angle
12918 integer, intent(out) :: overwrite_config_id
12919 double precision, intent(in), optional :: spread_distance
12920 double precision, intent(in), optional :: max_search_distance
12921 integer, intent(in), optional :: weight_type
12922
12923 integer ( kind = c_int ) :: c_overwrite_config_id
12924
12925 call yac_cget_spmap_overwrite_config_c(c_overwrite_config_id)
12926
12927 call yac_cset_spmap_overwrite_config_src_point_selection_c( &
12928 c_overwrite_config_id, center_lon, center_lat, inc_angle)
12929 if (present(spread_distance)) then
12930 call yac_cset_spmap_overwrite_config_spread_distance_c( &
12931 c_overwrite_config_id, spread_distance)
12932 end if
12933 if (present(max_search_distance)) then
12934 call yac_cset_spmap_overwrite_config_max_search_distance_c( &
12935 c_overwrite_config_id, max_search_distance)
12936 end if
12937 if (present(weight_type)) then
12938 call yac_cset_spmap_overwrite_config_weight_type_c( &
12939 c_overwrite_config_id, weight_type)
12940 end if
12941
12942 overwrite_config_id = int(c_overwrite_config_id)
12943
12945
12947 overwrite_config_id )
12948
12950
12951 implicit none
12952
12953 interface
12954
12955 subroutine yac_cfree_spmap_overwrite_config_c(overwrite_config_id) &
12956 bind( c, name='yac_cfree_spmap_overwrite_config' )
12957 use, intrinsic :: iso_c_binding, only : c_int
12958
12959 integer ( kind=c_int ), value :: overwrite_config_id
12960
12961 end subroutine yac_cfree_spmap_overwrite_config_c
12962
12963 end interface
12964
12965 integer, intent(in) :: overwrite_config_id
12966
12967 CALL yac_cfree_spmap_overwrite_config_c(overwrite_config_id)
12968
12970
12971subroutine yac_fadd_interp_stack_config_spmap(interp_stack_config_id, &
12972 spread_distance, max_search_distance, weight_type, scale_type, &
12973 src_sphere_radius, src_filename, src_varname, src_min_global_id, &
12974 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id, &
12975 overwrite_config_ids)
12976
12977 use, intrinsic :: iso_c_binding, only : c_ptr, c_null_ptr, c_loc
12979
12980 implicit none
12981
12982 interface
12983
12984 subroutine yac_cadd_interp_stack_config_spmap_c( &
12985 interp_stack_config_id, spread_distance, &
12986 max_search_distance, weight_type, scale_type, &
12987 src_sphere_radius, src_filename, src_varname, src_min_global_id, &
12988 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id, &
12989 overwrite_config_ids, overwrite_config_count) &
12990 bind( c, name='yac_cadd_interp_stack_config_spmap_f2c' )
12991 use, intrinsic :: iso_c_binding, only : c_int, c_double, c_char, c_ptr
12992
12993 integer ( kind=c_int ), value :: interp_stack_config_id
12994 real ( kind=c_double ), value :: spread_distance
12995 real ( kind=c_double ), value :: max_search_distance
12996 integer ( kind=c_int ), value :: weight_type
12997 integer ( kind=c_int ), value :: scale_type
12998 real ( kind=c_double ), value :: src_sphere_radius
12999 character (kind=c_char), dimension(*) :: src_filename
13000 character (kind=c_char), dimension(*) :: src_varname
13001 integer ( kind=c_int ), value :: src_min_global_id
13002 real ( kind=c_double ), value :: tgt_sphere_radius
13003 character (kind=c_char), dimension(*) :: tgt_filename
13004 character (kind=c_char), dimension(*) :: tgt_varname
13005 integer ( kind=c_int ), value :: tgt_min_global_id
13006 type ( c_ptr ), value :: overwrite_config_ids
13007 integer ( kind=c_int ), value :: overwrite_config_count
13008
13009 end subroutine yac_cadd_interp_stack_config_spmap_c
13010
13011 end interface
13012
13013 integer, intent(in) :: interp_stack_config_id
13014 double precision, intent(in) :: spread_distance
13015 double precision, intent(in) :: max_search_distance
13016 integer, intent(in) :: weight_type
13017 integer, intent(in) :: scale_type
13018 double precision, intent(in) :: src_sphere_radius
13019 character (len=*), intent(in) :: src_filename
13020 character (len=*), intent(in) :: src_varname
13021 integer, intent(in) :: src_min_global_id
13022 double precision, intent(in) :: tgt_sphere_radius
13023 character (len=*), intent(in) :: tgt_filename
13024 character (len=*), intent(in) :: tgt_varname
13025 integer, intent(in) :: tgt_min_global_id
13026 integer, optional, intent(in) :: overwrite_config_ids(:)
13027
13028 integer (kind=c_int), allocatable, target :: c_overwrite_config_ids(:)
13029 type ( c_ptr ) :: ptr_overwrite_config_ids
13030 integer :: overwrite_config_count
13031
13032 if (present(overwrite_config_ids)) then
13033 overwrite_config_count = SIZE(overwrite_config_ids)
13034 allocate(c_overwrite_config_ids(overwrite_config_count))
13035 c_overwrite_config_ids = int(overwrite_config_ids, c_int)
13036 else
13037 overwrite_config_count = 0;
13038 end if
13039
13040 if (overwrite_config_count > 0) then
13041 ptr_overwrite_config_ids = c_loc(c_overwrite_config_ids(1))
13042 else
13043 ptr_overwrite_config_ids = c_null_ptr
13044 end if
13045
13046 call yac_cadd_interp_stack_config_spmap_c( &
13047 interp_stack_config_id, spread_distance, &
13048 max_search_distance, weight_type, scale_type, &
13049 src_sphere_radius, src_filename, src_varname, src_min_global_id, &
13050 tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id, &
13051 ptr_overwrite_config_ids, overwrite_config_count)
13052
13054
13055subroutine yac_fadd_interp_stack_config_hcsbb(interp_stack_config_id)
13056
13058
13059 implicit none
13060
13061 interface
13062
13063 subroutine yac_cadd_interp_stack_config_hcsbb_c( &
13064 interp_stack_config_id) &
13065 bind( c, name='yac_cadd_interp_stack_config_hcsbb' )
13066 use, intrinsic :: iso_c_binding, only : c_int
13067
13068 integer ( kind=c_int ), value :: interp_stack_config_id
13069
13070 end subroutine yac_cadd_interp_stack_config_hcsbb_c
13071
13072 end interface
13073
13074 integer, intent(in) :: interp_stack_config_id
13075
13076 call yac_cadd_interp_stack_config_hcsbb_c(interp_stack_config_id)
13077
13079
13081 interp_stack_config_id, filename, on_missing_file, on_success)
13082
13084 use, intrinsic :: iso_c_binding, only : c_null_char
13085
13086 implicit none
13087
13088 interface
13089
13090 subroutine yac_cadd_interp_stack_config_user_file_2_c( &
13091 interp_stack_config_id, filename, on_missing_file, on_success) &
13092 bind( c, name='yac_cadd_interp_stack_config_user_file_2' )
13093 use, intrinsic :: iso_c_binding, only : c_int, c_char
13094
13095 integer ( kind=c_int ), value :: interp_stack_config_id
13096 character (kind=c_char), dimension(*) :: filename
13097 integer ( kind=c_int ), value :: on_missing_file
13098 integer ( kind=c_int ), value :: on_success
13099
13100 end subroutine yac_cadd_interp_stack_config_user_file_2_c
13101
13102 end interface
13103
13104 integer, intent(in) :: interp_stack_config_id
13105 character (len=*), intent(in) :: filename
13106 integer, optional, intent(in) :: on_missing_file
13107 integer, optional, intent(in) :: on_success
13108
13109 integer :: on_missing_file_cpy, on_success_cpy
13110
13111 if (present(on_missing_file)) then
13112 on_missing_file_cpy = on_missing_file
13113 else
13114 on_missing_file_cpy = yac_file_missing_error
13115 end if
13116
13117 if (present(on_success)) then
13118 on_success_cpy = on_success
13119 else
13120 on_success_cpy = yac_file_success_cont
13121 end if
13122
13123 call yac_cadd_interp_stack_config_user_file_2_c( &
13124 interp_stack_config_id, &
13125 trim(filename) // c_null_char, &
13126 on_missing_file_cpy, on_success_cpy)
13127
13129
13130subroutine yac_fadd_interp_stack_config_fixed(interp_stack_config_id, val)
13131
13133
13134 implicit none
13135
13136 interface
13137
13138 subroutine yac_cadd_interp_stack_config_fixed_c( &
13139 interp_stack_config_id, val) &
13140 bind( c, name='yac_cadd_interp_stack_config_fixed' )
13141 use, intrinsic :: iso_c_binding, only : c_int, c_double
13142
13143 integer ( kind=c_int ), value :: interp_stack_config_id
13144 real ( kind=c_double ), value :: val
13145
13146 end subroutine yac_cadd_interp_stack_config_fixed_c
13147
13148 end interface
13149
13150 integer, intent(in) :: interp_stack_config_id
13151 double precision, intent(in) :: val
13152
13153 call yac_cadd_interp_stack_config_fixed_c( &
13154 interp_stack_config_id, val)
13155
13157
13158subroutine yac_fadd_interp_stack_config_creep(interp_stack_config_id, &
13159 creep_distance)
13160
13162
13163 implicit none
13164
13165 interface
13166
13167 subroutine yac_cadd_interp_stack_config_creep_c( &
13168 interp_stack_config_id, creep_distance) &
13169 bind( c, name='yac_cadd_interp_stack_config_creep' )
13170 use, intrinsic :: iso_c_binding, only : c_int
13171
13172 integer ( kind=c_int ), value :: interp_stack_config_id
13173 integer ( kind=c_int ), value :: creep_distance
13174
13175 end subroutine yac_cadd_interp_stack_config_creep_c
13176
13177 end interface
13178
13179 integer, intent(in) :: interp_stack_config_id
13180 integer, intent(in) :: creep_distance
13181
13182 call yac_cadd_interp_stack_config_creep_c( &
13183 interp_stack_config_id, creep_distance)
13184
13186
13188 interp_stack_config, interp_stack_config_id )
13189
13190 use, intrinsic :: iso_c_binding, only : c_null_char
13192
13193 implicit none
13194
13195 interface
13196
13197 subroutine yac_cget_interp_stack_config_from_string_yaml_c ( &
13198 interp_stack_config, interp_stack_config_id ) &
13199 bind( c, name='yac_cget_interp_stack_config_from_string_yaml' )
13200 use, intrinsic :: iso_c_binding, only : c_char, c_int
13201
13202 character (kind=c_char), dimension(*) :: interp_stack_config
13203 integer ( kind=c_int ) :: interp_stack_config_id
13204
13205 end subroutine yac_cget_interp_stack_config_from_string_yaml_c
13206
13207 end interface
13208
13209 character ( len=* ), intent(in) :: interp_stack_config
13210 integer, intent(out) :: interp_stack_config_id
13211
13212 call yac_cget_interp_stack_config_from_string_yaml_c ( &
13213 trim(interp_stack_config) // c_null_char, &
13214 interp_stack_config_id )
13215
13217
13219 interp_stack_config, interp_stack_config_id )
13220
13221 use, intrinsic :: iso_c_binding, only : c_null_char
13223
13224 implicit none
13225
13226 interface
13227
13228 subroutine yac_cget_interp_stack_config_from_string_json_c ( &
13229 interp_stack_config, interp_stack_config_id ) &
13230 bind( c, name='yac_cget_interp_stack_config_from_string_json' )
13231 use, intrinsic :: iso_c_binding, only : c_char, c_int
13232
13233 character (kind=c_char), dimension(*) :: interp_stack_config
13234 integer ( kind=c_int ) :: interp_stack_config_id
13235
13236 end subroutine yac_cget_interp_stack_config_from_string_json_c
13237
13238 end interface
13239
13240 character ( len=* ), intent(in) :: interp_stack_config
13241 integer, intent(out) :: interp_stack_config_id
13242
13243 call yac_cget_interp_stack_config_from_string_json_c ( &
13244 trim(interp_stack_config) // c_null_char, &
13245 interp_stack_config_id )
13246
Fortran interface for checking the dimensions of a field.
Fortran interface for checking the source field buffer sizes.
Fortran interface for the coupler cleanup before restart.
Fortran interface for definition of a couple.
Fortran interface for the definition of time parameters.
Fortran interface for the definition of coupling fields using explicit masks.
Fortran interface for the definition of coupling fields using default masks.
Fortran interface for checking if default instance is defined.
Fortran interface for invoking the end of the definition phase.
Fortran interface for the coupler termination.
Fortran interface for getting back a local MPI communicator.
Fortran interface for getting back a MPI communicator for communication between components.
Fortran interface for getting default instance id.
Fortran interface for invoking query functions.
Fortran interfaces for the definition of an interpolation stack.
Fortran interface for getting mpi_handshake group name.
Get interpolation information for raw data exchange.
Fortran interface for getting interpolation information for raw data exchange.
Fortran interface for getting the start- and end datetime.
Fortran interface for getting the YAC version.
Fortran interface for the coupler initialisation.
Fortran2C interface for YAC collective routines.
Fortran interface for the component definition.
Fortran interface for the reading of configuration files.
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 setting of grid global ids.
Fortran interface for the writing of grid files.
Fortran interface for the writing of grid files for all grids.
Fortran interface for invoking the end of the definition phase.
Fortran interface for testing fields for active communicaitons.
static void merge(char *base_a, size_t num_a, int a_ascending, char *base_b, size_t num_b, int b_ascending, size_t size, int(*compar)(const void *, const void *), char *target)
Definition mergesort.c:56
character(len= *), parameter, public yac_grid_has_metadata_hint
character(len= *), parameter, public yac_field_has_metadata_hint
character(len=:) function, allocatable, public yac_internal_cptr2char(cptr)
Convertes a C-pointer to a C-string to a Fortran string.
type(c_ptr) function, public yac_dble2cptr(routine, ptr_name, dble_ptr)
character(len= *), parameter, public yac_component_has_metadata_hint
subroutine, public send_field_to_dble_single(field_id, nbr_hor_points, collection_size, send_field, send_field_dble, send_frac_mask, send_frac_mask_dble)
subroutine, public recv_field_from_dble_ptr(field_id, collection_size, recv_field_dble, recv_field)
subroutine, public recv_field_from_dble(field_id, nbr_hor_points, collection_size, recv_field_dble, recv_field)
subroutine, public recv_field_to_dble_ptr(field_id, collection_size, recv_field, recv_field_dble)
subroutine, public send_field_to_dble_ptr(field_id, nbr_pointsets, collection_size, send_field, send_field_dble, send_frac_mask, send_frac_mask_dble)
subroutine, public recv_field_to_dble(field_id, nbr_hor_points, collection_size, recv_field, recv_field_dble)
subroutine, public send_field_to_dble(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, send_field_dble, send_frac_mask, send_frac_mask_dble)
integer(kind=c_size_t), parameter yac_interp_rbf_n_default_f
Definition yac_core.F90:191
real(kind=c_double), parameter yac_interp_rbf_scale_default_f
Definition yac_core.F90:193
real(kind=c_double), parameter yac_interp_rbf_max_search_distance_default_f
Definition yac_core.F90:192
@ yac_location_cell
integer, parameter yac_max_charlen
Constants.
integer yac_yaml_emitter_default_f
Flag paramters for emitting of coupling configurations.
@ yac_file_missing_error
abort on missing file
@ yac_wgt_on_existing_overwrite
integer, parameter yac_int_kind
@ yac_file_success_cont
continue weight computation with following interpolation methods
integer, parameter yac_mpi_fint_kind
@ yac_exchange_type_target
@ yac_exchange_type_source
integer yac_yaml_emitter_json_f
pointer data types
subroutine yac_fcompute_grid_cell_areas_real(grid_id, nbr_cells, cell_areas)
subroutine yac_fset_grids_output_file_instance(yac_instance_id, filename)
subroutine yac_fadd_interp_stack_config_nnn(interp_stack_config_id, type, n, max_search_distance, scale)
subroutine yac_finit()
subroutine yac_fupdate(field_id)
subroutine yac_fset_grid_output_file_instance(yac_instance_id, gridname, filename)
subroutine yac_fexchange_raw_frac_dble(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, src_field_buffer_size, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
subroutine yac_fexchange_raw_frac_real_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
subroutine yac_fmpi_handshake(comm, group_names, group_comms)
subroutine yac_fadd_interp_stack_config_rbf(interp_stack_config_id, n, max_search_distance, scale)
subroutine yac_fget_comp_comm(comp_id, comp_comm)
subroutine yac_fset_grid_output_file(gridname, filename)
subroutine yac_fset_config_output_file(filename, fileformat, sync_location, include_definitions)
subroutine yac_fdef_points_curve2d_named_dble(grid_id, nbr_points, location, x_points, y_points, name, point_id)
subroutine yac_fsync_def_instance(yac_instance_id)
subroutine yac_fcompute_grid_cell_areas_dble(grid_id, nbr_cells, cell_areas)
integer function yac_fget_field_role(comp_name, grid_name, field_name)
subroutine yac_fset_config_output_file_instance(yac_instance_id, filename, fileformat, sync_location, include_definitions)
subroutine yac_fadd_interp_stack_config_average(interp_stack_config_id, reduction_type, partial_coverage)
character(len=:) function, allocatable yac_fget_field_metadata_instance(yac_instance_id, comp_name, grid_name, field_name)
subroutine yac_fdef_comp(comp_name, comp_id)
character(len=:) function, allocatable yac_fget_start_datetime()
subroutine yac_fexchange_frac_real_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_fget_interp_stack_config(interp_stack_config_id)
subroutine yac_fadd_interp_stack_config_user_file(interp_stack_config_id, filename, on_missing_file, on_success)
integer function yac_fget_field_role_instance(yac_instance_id, comp_name, grid_name, field_name)
subroutine yac_fset_coordinates_mismatch_is_fatal(is_fatal)
subroutine yac_fexchange_raw_single_pointset_real(send_field_id, recv_field_id, send_nbr_hor_points, src_field_buffer_size, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
logical function yac_fgrid_has_metadata_instance(yac_instance_id, grid_name)
subroutine yac_fget_raw_frac_real(field_id, src_field_buffer_size, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror)
subroutine yac_fenddef_and_emit_config_instance(yac_instance_id, emit_flags, config)
subroutine yac_ffree_spmap_overwrite_config(overwrite_config_id)
subroutine yac_fexchange_dble(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, recv_nbr_hor_points, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fget_raw_dble(field_id, src_field_buffer_size, collection_size, src_field_buffer, info, ierror)
subroutine yac_fdef_comp_dummy_instance(yac_instance_id)
subroutine yac_fexchange_raw_real(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, src_field_buffer_size, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
character(len=:) function, allocatable yac_fget_component_name_from_field_id(field_id)
subroutine yac_finit_dummy()
subroutine yac_fget_comps_comm_instance(yac_instance_id, comp_names, num_comps, comps_comm)
subroutine yac_fput_frac_single_pointset_real(field_id, nbr_hor_points, collection_size, send_field, send_frac_mask, info, ierror)
character(len=:) function, allocatable yac_fget_field_metadata(comp_name, grid_name, field_name)
subroutine yac_fdef_points_reg2d_rot_named_real(grid_id, nbr_points, location, x_points_real, y_points_real, x_north_pole_real, y_north_pole_real, name, point_id)
subroutine yac_fdef_grid_unstruct_dble(grid_name, nbr_vertices, nbr_cells, nbr_vertices_per_cell_in, x_vertices, y_vertices, cell_to_vertex_in, grid_id, use_ll_edges)
Definition of a uniform unstructured grid (all cells have the number of vertices)
subroutine yac_fdef_field(field_name, component_id, point_ids, num_pointsets, collection_size, timestep, time_unit, field_id)
subroutine yac_fread_config_yaml(yaml_filename)
subroutine yac_fget_interp_stack_config_from_string_yaml(interp_stack_config, interp_stack_config_id)
integer function yac_fget_default_instance_id()
subroutine yac_fput_single_pointset_dble(field_id, nbr_hor_points, collection_size, send_field, info, ierror)
subroutine yac_fset_coordinates_check_instance(yac_instance_id, apply_check)
subroutine yac_fdef_lmask_named(grid_id, nbr_points, location, is_valid, name, mask_id)
type(yac_string) function, dimension(:), allocatable yac_fget_comp_names_instance(yac_instance_id)
subroutine yac_fget_real_ptr(field_id, collection_size, recv_field, info, ierror)
integer function yac_fget_mask_id(grid_id, location, mask_name)
subroutine yac_fget_raw_real(field_id, src_field_buffer_size, collection_size, src_field_buffer, info, ierror)
type(yac_string) function, dimension(:), allocatable yac_fget_comp_names()
subroutine yac_fget_raw_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, info, ierror)
subroutine yac_fcleanup()
subroutine yac_fdef_couple_instance(instance_id, src_comp_name, src_grid_name, src_field_name, tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep, time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag, weight_file, weight_file_on_existing, mapping_side, scale_factor, scale_summand, src_mask_names, tgt_mask_name, yaxt_exchanger_name, collection_indices, use_raw_exchange)
subroutine yac_fdef_couple(src_comp_name, src_grid_name, src_field_name, tgt_comp_name, tgt_grid_name, tgt_field_name, coupling_timestep, time_unit, time_reduction, interp_stack_config_id, src_lag, tgt_lag, weight_file, weight_file_on_existing, mapping_side, scale_factor, scale_summand, src_mask_names, tgt_mask_name, yaxt_exchanger_name, collection_indices, use_raw_exchange)
character(len=:) function, allocatable yac_fget_grid_name_from_field_id(field_id)
subroutine yac_fenddef()
subroutine yac_fexchange_raw_dble_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
subroutine yac_fdef_grid_metadata(grid_name, metadata)
integer function yac_fget_field_collection_size(comp_name, grid_name, field_name)
integer function yac_fget_comp_id_instance(yac_id, comp_name)
logical function yac_fdefault_instance_defined()
subroutine yac_fexchange_raw_frac_real(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, src_field_buffer_size, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
subroutine yac_fexchange_frac_dble_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_finit_instance(yac_instance_id)
character(len=:) function, allocatable yac_fget_field_timestep_instance(yac_instance_id, comp_name, grid_name, field_name)
subroutine yac_fadd_interp_stack_config_ncc(interp_stack_config_id, weight_type, partial_coverage)
subroutine yac_fdef_datetime_instance(yac_instance_id, start_datetime, end_datetime)
subroutine yac_fget_raw_frac_real_ptr(field_id, num_src_fields, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror)
subroutine yac_fput_frac_dble(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
subroutine yac_fcheck_src_field_buffer_size(field_id, collection_size, src_field_buffer_size)
subroutine yac_fget_field_source(tgt_comp_name, tgt_grid_name, tgt_field_name, src_comp_name, src_grid_name, src_field_name)
logical function yac_fcomponent_has_metadata(comp_name)
subroutine yac_fput_frac_single_pointset_dble(field_id, nbr_hor_points, collection_size, send_field, send_frac_mask, info, ierror)
subroutine yac_finit_emitter_flags()
subroutine yac_fexchange_frac_real(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, recv_nbr_hor_points, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_fexchange_frac_dble(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, recv_nbr_hor_points, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_fdef_grid_metadata_instance(yac_instance_id, grid_name, metadata)
subroutine yac_fdef_field_mask(field_name, component_id, point_ids, mask_ids, num_pointsets, collection_size, timestep, time_unit, field_id)
subroutine yac_fput_dble_ptr(field_id, nbr_pointsets, collection_size, send_field, info, ierror)
subroutine yac_fexchange_single_pointset_dble(send_field_id, recv_field_id, send_nbr_hor_points, recv_nbr_hor_points, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fdef_grid_unstruct_real(grid_name, nbr_vertices, nbr_cells, nbr_vertices_per_cell_in, x_vertices_real, y_vertices_real, cell_to_vertex_in, grid_id, use_ll_edges)
Definition of a uniform unstructured grid (all cells have the number of vertices)
subroutine yac_fdef_points_curve2d_named_real(grid_id, nbr_points, location, x_points_real, y_points_real, name, point_id)
subroutine yac_fdef_grid_reg2d_rot_real(grid_name, nbr_vertices, cyclic, x_vertices_real, y_vertices_real, x_north_pole_real, y_north_pole_real, grid_id)
Definition of a 2d regular rotated grid.
subroutine yac_fdef_points_unstruct_named_real(grid_id, nbr_points, location, x_points_real, y_points_real, name, point_id)
subroutine yac_fcleanup_instance(yac_instance_id)
subroutine yac_fget_dble(field_id, nbr_hor_points, collection_size, recv_field, info, ierror)
subroutine yac_get_raw_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, info, ierror, use_async)
integer function yac_fget_field_id_instance(yac_id, comp_name, grid_name, field_name)
subroutine yac_fdef_points_curve2d_dble(grid_id, nbr_points, location, x_points, y_points, point_id)
subroutine yac_fdef_points_unstruct_named_dble(grid_id, nbr_points, location, x_points, y_points, name, point_id)
subroutine yac_fadd_interp_stack_config_conservative(interp_stack_config_id, order, enforced_conserv, partial_coverage, normalization)
subroutine yac_fexchange_raw_frac_single_pointset_dble(send_field_id, recv_field_id, send_nbr_hor_points, src_field_buffer_size, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
subroutine yac_fget_action(field_id, action)
subroutine yac_fset_grids_output_file(filename)
subroutine yac_fexchange_raw_frac_dble_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
logical function yac_fget_field_is_defined(comp_name, grid_name, field_name)
subroutine yac_fdef_grid_curve2d_dble(grid_name, nbr_vertices, cyclic, x_vertices, y_vertices, grid_id)
Definition of a 2d curvilinear grid.
type(yac_string) function, dimension(:), allocatable yac_fget_comp_grid_names_instance(yac_instance_id, comp_name)
subroutine yac_fdef_comps(comp_names, num_comps, comp_ids)
subroutine yac_fget_raw_frac_async_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror)
subroutine yac_fset_coordinates_mismatch_is_fatal_instance(yac_instance_id, is_fatal)
subroutine yac_finit_comm_dummy(world_comm)
type(yac_string) function, dimension(:), allocatable yac_fget_grid_names_instance(yac_instance_id)
subroutine yac_fdef_points_reg2d_named_real(grid_id, nbr_points, location, x_points_real, y_points_real, name, point_id)
subroutine yac_fdef_imask(grid_id, nbr_points, location, is_valid, mask_id)
subroutine yac_fdef_points_reg2d_real(grid_id, nbr_points, location, x_points_real, y_points_real, point_id)
character(len=:) function, allocatable yac_fget_timestep_from_field_id(field_id)
character(len=:) function, allocatable yac_fget_field_name_from_field_id(field_id)
subroutine yac_fput_dble(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, info, ierror)
subroutine yac_fput_single_pointset_real(field_id, nbr_hor_points, collection_size, send_field, info, ierror)
subroutine yac_finit_comm(comm)
subroutine yac_finit_comm_instance(comm, yac_instance_id)
logical function yac_fcomponent_has_metadata_instance(yac_instance_id, comp_name)
subroutine yac_ffinalize()
subroutine yac_fadd_interp_stack_config_spmap(interp_stack_config_id, spread_distance, max_search_distance, weight_type, scale_type, src_sphere_radius, src_filename, src_varname, src_min_global_id, tgt_sphere_radius, tgt_filename, tgt_varname, tgt_min_global_id, overwrite_config_ids)
subroutine yac_fset_lmask(is_valid, points_id)
subroutine yac_fdef_grid_unstruct_edge_real(grid_name, nbr_vertices, nbr_cells, nbr_edges, nbr_edges_per_cell_in, x_vertices_real, y_vertices_real, cell_to_edge_in, edge_to_vertex_in, grid_id, use_ll_edges)
Definition of a uniform unstructured grid (all cells have the number of vertices) with explicit edge ...
subroutine yac_fdef_imask_named(grid_id, nbr_points, location, is_valid, name, mask_id)
subroutine yac_fenable_field_frac_mask(comp_name, grid_name, field_name, frac_mask_fallback_value)
subroutine yac_fget_calendar(calendar)
subroutine yac_fset_coordinates_check(apply_check)
subroutine yac_fdef_grid_curve2d_real(grid_name, nbr_vertices, cyclic, x_vertices_real, y_vertices_real, grid_id)
Definition of a 2d curvilinear grid.
type(yac_string) function, dimension(:), allocatable yac_fget_field_names_instance(yac_instance_id, comp_name, grid_name)
subroutine yac_ffree_interp_stack_config(interp_stack_config_id)
subroutine yac_fget_spmap_overwrite_config_bnd_circle(center_lon, center_lat, inc_angle, overwrite_config_id, spread_distance, max_search_distance, weight_type)
character(len=:) function, allocatable yac_fget_version()
type(yac_string) function, dimension(:), allocatable yac_fget_field_names(comp_name, grid_name)
subroutine yac_fadd_interp_stack_config_fixed(interp_stack_config_id, val)
subroutine yac_fdef_comp_instance(yac_instance_id, comp_name, comp_id)
subroutine yac_fget_raw_async_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, info, ierror)
subroutine yac_fdef_grid_nonuniform_real(grid_name, nbr_vertices, nbr_cells, nbr_connections, nbr_vertices_per_cell, x_vertices_real, y_vertices_real, cell_to_vertex_in, grid_id, use_ll_edges)
Definition of a non-uniform unstructured grid (cells have varying numbers of vertices)
subroutine yac_fcheck_src_field_buffer_sizes(field_id, num_src_fields, collection_size, src_field_buffer_sizes)
character(len=:) function, allocatable yac_fget_component_metadata(comp_name)
integer function yac_fget_points_size(point_id)
subroutine yac_fdef_points_reg2d_rot_dble(grid_id, nbr_points, location, x_points, y_points, x_north_pole, y_north_pole, point_id)
subroutine yac_fset_global_index_yac_int(global_index, location, grid_id)
subroutine yac_fexchange_frac_single_pointset_dble(send_field_id, recv_field_id, send_nbr_hor_points, recv_nbr_hor_points, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_ftest_l(field_id, flag)
integer function yac_fget_grid_size(location, grid_id)
subroutine yac_fget_raw_interp_weights_data(field_id, frac_mask_fallback_value, scaling_factor, scaling_summand, num_fixed_values, fixed_values, num_tgt_per_fixed_value, tgt_idx_fixed, num_wgt_tgt, wgt_tgt_idx, num_src_per_tgt, weights, src_field_idx, src_idx, num_src_fields, src_field_buffer_size)
subroutine yac_fexchange_raw_single_pointset_dble(send_field_id, recv_field_id, send_nbr_hor_points, src_field_buffer_size, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
double precision function yac_fget_field_frac_mask_fallback_value_instance(yac_instance_id, comp_name, grid_name, field_name)
logical function yac_ffield_has_metadata_instance(yac_instance_id, comp_name, grid_name, field_name)
subroutine yac_fput_real_ptr(field_id, nbr_pointsets, collection_size, send_field, info, ierror)
subroutine yac_fdef_comp_dummy()
subroutine yac_fdef_calendar(calendar)
subroutine yac_fdef_component_metadata(comp_name, metadata)
subroutine yac_ffinalize_instance(yac_instance_id)
subroutine yac_fadd_interp_stack_config_hcsbb(interp_stack_config_id)
integer function yac_fget_points_id(grid_id, location, point_name)
integer function yac_fget_collection_size_from_field_id(field_id)
subroutine yac_fset_core_imask(is_core, location, grid_id)
subroutine yac_fdef_grid_reg2d_rot_dble(grid_name, nbr_vertices, cyclic, x_vertices, y_vertices, x_north_pole, y_north_pole, grid_id)
Definition of a 2d regular rotated grid.
integer function yac_fget_role_from_field_id(field_id)
subroutine yac_fenable_field_frac_mask_instance(yac_instance_id, comp_name, grid_name, field_name, frac_mask_fallback_value)
subroutine yac_fdef_points_reg2d_rot_real(grid_id, nbr_points, location, x_points_real, y_points_real, x_north_pole_real, y_north_pole_real, point_id)
logical function yac_fgrid_has_metadata(grid_name)
subroutine yac_fdef_datetime(start_datetime, end_datetime)
subroutine yac_fget_raw_frac_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror)
character(len=:) function, allocatable yac_fget_field_timestep(comp_name, grid_name, field_name)
subroutine yac_fget_async_dble_ptr(field_id, collection_size, recv_field, info, ierror)
character(len=:) function, allocatable yac_fget_end_datetime_instance(yac_instance_id)
subroutine yac_fget_raw_real_ptr(field_id, num_src_fields, collection_size, src_field_buffer, info, ierror)
subroutine yac_fexchange_raw_dble(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, src_field_buffer_size, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
subroutine yac_fread_config_yaml_instance(yac_instance_id, yaml_filename)
subroutine yac_get_raw_frac_dble_ptr(field_id, num_src_fields, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror, use_async)
subroutine yac_fput_frac_dble_ptr(field_id, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
integer function yac_fget_comp_id(comp_name)
subroutine yac_fexchange_real(send_field_id, recv_field_id, send_nbr_hor_points, send_nbr_pointsets, recv_nbr_hor_points, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fdef_points_reg2d_named_dble(grid_id, nbr_points, location, x_points, y_points, name, point_id)
subroutine yac_fput_frac_real(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
type(yac_string) function, dimension(:), allocatable yac_fget_comp_grid_names(comp_name)
subroutine yac_fexchange_real_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fsync_def_comps(comp_names, num_comp_names)
character(len=:) function, allocatable yac_fget_grid_metadata_instance(yac_instance_id, grid_name)
subroutine yac_ftest_i(field_id, flag)
subroutine yac_fset_core_lmask(is_core, location, grid_id)
subroutine yac_fdef_points_curve2d_real(grid_id, nbr_points, location, x_points_real, y_points_real, point_id)
subroutine yac_fget_real(field_id, nbr_hor_points, collection_size, recv_field, info, ierror)
subroutine yac_fdef_grid_unstruct_edge_dble(grid_name, nbr_vertices, nbr_cells, nbr_edges, nbr_edges_per_cell_in, x_vertices, y_vertices, cell_to_edge_in, edge_to_vertex_in, grid_id, use_ll_edges)
Definition of a uniform unstructured grid (all cells have the number of vertices) with explicit edge ...
subroutine yac_fget_field_source_instance(yac_instance_id, tgt_comp_name, tgt_grid_name, tgt_field_name, src_comp_name, src_grid_name, src_field_name)
subroutine yac_fenddef_and_emit_config(emit_flags, config)
integer function yac_fget_field_collection_size_instance(yac_instance_id, comp_name, grid_name, field_name)
character(len=:) function, allocatable yac_fget_mpi_handshake_group_name()
subroutine yac_fexchange_dble_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fsync_def()
subroutine yac_fget_comps_comm(comp_names, num_comps, comps_comm)
subroutine yac_fput_real(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, info, ierror)
subroutine yac_fdef_comps_instance(yac_instance_id, comp_names, num_comps, comp_ids)
logical function yac_fget_field_is_defined_instance(yac_id, comp_name, grid_name, field_name)
subroutine yac_fread_config_json(json_filename)
subroutine yac_fdef_grid_nonuniform_edge_dble(grid_name, nbr_vertices, nbr_cells, nbr_edges, nbr_connections, nbr_edges_per_cell, x_vertices, y_vertices, cell_to_edge_in, edge_to_vertex_in, grid_id, use_ll_edges)
Definition of a non-uniform unstructured grid (cells have varying numbers of vertices) with explicit ...
integer function yac_fget_field_id(comp_name, grid_name, field_name)
subroutine yac_fadd_interp_stack_config_creep(interp_stack_config_id, creep_distance)
subroutine yac_fsync_def_comps_instance(yac_instance_id, comp_names, num_comp_names)
character(len=:) function, allocatable yac_fget_grid_metadata(grid_name)
subroutine yac_fget_dble_ptr(field_id, collection_size, recv_field, info, ierror)
subroutine yac_fenddef_instance(yac_instance_id)
character(len=:) function, allocatable yac_fget_field_datetime(field_id)
subroutine yac_fdef_grid_cloud_real(grid_name, nbr_points, x_points_real, y_points_real, grid_id)
Definition of a grid consisting of a cloud of points.
character(len=:) function, allocatable yac_fget_component_metadata_instance(yac_instance_id, comp_name)
subroutine yac_fcheck_field_dimensions(field_id, collection_size, num_interp_fields, interp_field_sizes)
subroutine yac_fput_frac_real_ptr(field_id, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
subroutine yac_fdef_lmask(grid_id, nbr_points, location, is_valid, mask_id)
integer function yac_fget_grid_id(grid_name)
subroutine yac_fpredef_comp(comp_name, comp_id)
subroutine yac_fdef_component_metadata_instance(yac_instance_id, comp_name, metadata)
subroutine yac_fset_imask(is_valid, points_id)
subroutine yac_fpredef_comp_instance(yac_instance_id, comp_name, comp_id)
subroutine yac_fexchange_single_pointset_real(send_field_id, recv_field_id, send_nbr_hor_points, recv_nbr_hor_points, collection_size, send_field, recv_field, send_info, recv_info, ierror)
subroutine yac_fdef_points_reg2d_rot_named_dble(grid_id, nbr_points, location, x_points, y_points, x_north_pole, y_north_pole, name, point_id)
subroutine yac_fdef_grid_nonuniform_edge_real(grid_name, nbr_vertices, nbr_cells, nbr_edges, nbr_connections, nbr_edges_per_cell, x_vertices_real, y_vertices_real, cell_to_edge, edge_to_vertex, grid_id, use_ll_edges)
Definition of a non-uniform unstructured grid (cells have varying numbers of vertices) with explicit ...
subroutine yac_fexchange_frac_single_pointset_real(send_field_id, recv_field_id, send_nbr_hor_points, recv_nbr_hor_points, collection_size, send_field, send_frac_mask, recv_field, send_info, recv_info, ierror)
subroutine yac_fdef_grid_nonuniform_dble(grid_name, nbr_vertices, nbr_cells, nbr_connections, nbr_vertices_per_cell, x_vertices, y_vertices, cell_to_vertex_in, grid_id, use_ll_edges)
Definition of a non-uniform unstructured grid (cells have varying numbers of vertices)
logical function yac_ffield_has_metadata(comp_name, grid_name, field_name)
subroutine yac_fdef_field_metadata_instance(yac_instance_id, comp_name, grid_name, field_name, metadata)
subroutine yac_fexchange_raw_frac_single_pointset_real(send_field_id, recv_field_id, send_nbr_hor_points, src_field_buffer_size, collection_size, send_field, send_frac_mask, src_field_buffer, src_frac_mask_buffer, send_info, recv_info, ierror)
subroutine yac_fread_config_json_instance(yac_instance_id, json_filename)
subroutine yac_fset_global_index(global_index, location, grid_id)
subroutine yac_fexchange_raw_real_ptr(send_field_id, recv_field_id, send_nbr_pointsets, collection_size, send_field, src_field_buffer, send_info, recv_info, ierror)
subroutine yac_fdef_field_metadata(comp_name, grid_name, field_name, metadata)
subroutine yac_fget_interp_stack_config_from_string_json(interp_stack_config, interp_stack_config_id)
subroutine yac_fwait(field_id)
subroutine yac_fdef_grid_reg2d_dble(grid_name, nbr_vertices, cyclic, x_vertices, y_vertices, grid_id)
Definition of a 2d regular grid.
subroutine yac_fdef_grid_cloud_dble(grid_name, nbr_points, x_points, y_points, grid_id)
Definition of a grid consisting of a cloud of points.
subroutine yac_fdef_points_unstruct_real(grid_id, nbr_points, location, x_points_real, y_points_real, point_id)
subroutine yac_fdef_points_reg2d_dble(grid_id, nbr_points, location, x_points, y_points, point_id)
type(yac_string) function, dimension(:), allocatable yac_fget_grid_names()
subroutine yac_fdef_grid_reg2d_real(grid_name, nbr_vertices, cyclic, x_vertices_real, y_vertices_real, grid_id)
Definition of a 2d regular grid.
double precision function yac_fget_field_frac_mask_fallback_value(comp_name, grid_name, field_name)
subroutine yac_fget_raw_frac_dble(field_id, src_field_buffer_size, collection_size, src_field_buffer, src_frac_mask_buffer, info, ierror)
subroutine yac_fadd_interp_stack_config_dnn(interp_stack_config_id, weight_type, search_distance_type, search_distance, scale)
subroutine yac_fdef_points_unstruct_dble(grid_id, nbr_points, location, x_points, y_points, point_id)
character(len=:) function, allocatable yac_fget_start_datetime_instance(yac_instance_id)