YetAnotherCoupler 3.2.0_a
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
8
9 contains
10
11#define YAC_FASSERT(exp, msg) IF (.NOT. exp) call yac_abort_message(msg, __FILE__, __LINE__)
12#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")
13
17 function yac_internal_cptr2char( cptr ) result (string)
18
19 use, intrinsic :: iso_c_binding, only: c_ptr, c_char, &
20 c_f_pointer,c_size_t
21
22 implicit none
23
24 TYPE(c_ptr), intent(in) :: cptr
25 CHARACTER(len=:), allocatable :: string
26 CHARACTER(kind=c_char), dimension(:), pointer :: chars
27 INTEGER(kind=c_size_t) :: i, strlen
28
29 interface
30 function strlen_c(str_ptr) bind ( C, name = "strlen" ) result(len)
31 use, intrinsic :: iso_c_binding
32 type(c_ptr), value :: str_ptr
33 integer(kind=c_size_t) :: len
34 end function strlen_c
35 end interface
36
37 strlen = strlen_c(cptr)
38 CALL c_f_pointer(cptr, chars, [ strlen ])
39 ALLOCATE(character(len=strlen) :: string)
40 DO i=1,strlen
41 string(i:i) = chars(i)
42 END DO
43 end function yac_internal_cptr2char
44
45 function yac_dble2cptr(routine, ptr_name, dble_ptr)
46
47 use yac
48 use iso_c_binding, only: c_ptr, c_loc, c_null_ptr
49
50 character(len=*), intent(in) :: routine
51 character(len=*), intent(in) :: ptr_name
52 type(yac_dble_ptr), intent(in) :: dble_ptr
53 type(c_ptr) :: yac_dble2cptr
54
55 if (SIZE(dble_ptr%p) > 0) then
56 yac_fassert(is_contiguous(dble_ptr%p), "ERROR(" // trim(routine) // "): " // trim(ptr_name) // " is not contiguous")
57 yac_dble2cptr = c_loc(dble_ptr%p(1))
58 else
59 yac_dble2cptr = c_null_ptr
60 endif
61 end function yac_dble2cptr
62
63end module mo_yac_iso_c_helpers
64
66
67 public :: send_field_to_dble, &
74
75contains
76
77 subroutine send_field_to_dble(field_id, &
78 nbr_hor_points, &
79 nbr_pointsets, &
80 collection_size, &
81 send_field, &
82 send_field_dble, &
83 send_frac_mask, &
84 send_frac_mask_dble)
85
86 use yac
87 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
88
89 implicit none
90
91 interface
92
93 function yac_get_field_put_mask_c2f_c ( field_id ) &
94 bind( c, name='yac_get_field_put_mask_c2f' )
95
96 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
97
98 integer ( kind=c_int ), value :: field_id
99 type(c_ptr) :: yac_get_field_put_mask_c2f_c
100
101 end function yac_get_field_put_mask_c2f_c
102
103 end interface
104
105 integer, intent (in) :: field_id
106 integer, intent (in) :: nbr_hor_points
107 integer, intent (in) :: nbr_pointsets
108 integer, intent (in) :: collection_size
109 real, intent (in) :: send_field(nbr_hor_points, &
110 nbr_pointsets, &
111 collection_size)
112 double precision, intent (out) :: send_field_dble(nbr_hor_points, &
113 nbr_pointsets, &
114 collection_size)
115 real, optional, intent (in) :: send_frac_mask(nbr_hor_points, &
116 nbr_pointsets, &
117 collection_size)
118 double precision, optional, intent (out) :: send_frac_mask_dble(nbr_hor_points, &
119 nbr_pointsets, &
120 collection_size)
121
122 integer :: i, j, k
123 type(c_ptr) :: put_mask_
124 type(c_ptr), pointer :: put_mask(:)
125 integer(kind=c_int), pointer :: pointset_put_mask(:)
126
128
129 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
130 if (c_associated(put_mask_)) then
131 call c_f_pointer(put_mask_, put_mask, shape=[nbr_pointsets])
132 do i = 1, collection_size
133 do j = 1, nbr_pointsets
134 call c_f_pointer( &
135 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
136 do k = 1, nbr_hor_points
137 if (pointset_put_mask(k) /= 0) then
138 send_field_dble(k, j, i) = dble(send_field(k, j, i))
139 else
140 send_field_dble(k, j, i) = 0d0
141 end if
142 end do
143 end do
144 end do
145 if (present(send_frac_mask)) then
146 do i = 1, collection_size
147 do j = 1, nbr_pointsets
148 call c_f_pointer( &
149 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
150 do k = 1, nbr_hor_points
151 if (pointset_put_mask(k) /= 0) then
152 send_frac_mask_dble(k, j, i) = dble(send_frac_mask(k, j, i))
153 else
154 send_frac_mask_dble(k, j, i) = 0d0
155 end if
156 end do
157 end do
158 end do
159 end if
160 else
161 send_field_dble = dble(send_field)
162 if (present(send_frac_mask)) then
163 send_frac_mask_dble = dble(send_frac_mask)
164 end if
165 end if
166 else
167 send_field_dble = 0d0
168 if (present(send_frac_mask)) then
169 send_frac_mask_dble = 0d0
170 end if
171 end if
172 end subroutine send_field_to_dble
173
174 subroutine send_field_to_dble_single(field_id, &
175 nbr_hor_points, &
176 collection_size, &
177 send_field, &
178 send_field_dble, &
179 send_frac_mask, &
180 send_frac_mask_dble)
181
182 use yac
183 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
184
185 implicit none
186
187 interface
188
189 function yac_get_field_put_mask_c2f_c ( field_id ) &
190 bind( c, name='yac_get_field_put_mask_c2f' )
191
192 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
193
194 integer ( kind=c_int ), value :: field_id
195 type(c_ptr) :: yac_get_field_put_mask_c2f_c
196
197 end function yac_get_field_put_mask_c2f_c
198
199 end interface
200
201 integer, intent (in) :: field_id
202 integer, intent (in) :: nbr_hor_points
203 integer, intent (in) :: collection_size
204 real, intent (in) :: send_field(nbr_hor_points, &
205 collection_size)
206 double precision, intent (out) :: send_field_dble(nbr_hor_points, &
207 collection_size)
208 real, optional, intent (in) :: send_frac_mask(nbr_hor_points, &
209 collection_size)
210 double precision, optional, intent (out) :: send_frac_mask_dble(nbr_hor_points, &
211 collection_size)
212
213 integer :: i, j
214 type(c_ptr) :: put_mask_
215 type(c_ptr), pointer :: put_mask(:)
216 integer(kind=c_int), pointer :: pointset_put_mask(:)
217
219
220 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
221 if (c_associated(put_mask_)) then
222 call c_f_pointer(put_mask_, put_mask, shape=[1])
223 do i = 1, collection_size
224 call c_f_pointer( &
225 put_mask(1), pointset_put_mask, shape=[nbr_hor_points])
226 do j = 1, nbr_hor_points
227 if (pointset_put_mask(j) /= 0) then
228 send_field_dble(j, i) = dble(send_field(j, i))
229 else
230 send_field_dble(j, i) = 0d0
231 end if
232 end do
233 end do
234 if (present(send_frac_mask)) then
235 do i = 1, collection_size
236 call c_f_pointer( &
237 put_mask(1), pointset_put_mask, shape=[nbr_hor_points])
238 do j = 1, nbr_hor_points
239 if (pointset_put_mask(j) /= 0) then
240 send_frac_mask_dble(j, i) = dble(send_frac_mask(j, i))
241 else
242 send_frac_mask_dble(j, i) = 0d0
243 end if
244 end do
245 end do
246 end if
247 else
248 send_field_dble = dble(send_field)
249 if (present(send_frac_mask)) then
250 send_frac_mask_dble = dble(send_frac_mask)
251 end if
252 end if
253 else
254 send_field_dble = 0d0
255 if (present(send_frac_mask)) then
256 send_frac_mask_dble = 0d0
257 end if
258 end if
259 end subroutine send_field_to_dble_single
260
261 subroutine send_field_to_dble_ptr(field_id, &
262 nbr_pointsets, &
263 collection_size, &
264 send_field, &
265 send_field_dble, &
266 send_frac_mask, &
267 send_frac_mask_dble)
268
269 use yac
270 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
271
272 implicit none
273
274 interface
275
276 function yac_get_field_put_mask_c2f_c ( field_id ) &
277 bind( c, name='yac_get_field_put_mask_c2f' )
278
279 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
280
281 integer ( kind=c_int ), value :: field_id
282 type(c_ptr) :: yac_get_field_put_mask_c2f_c
283
284 end function yac_get_field_put_mask_c2f_c
285
286 end interface
287
288 integer, intent (in) :: field_id
289 integer, intent (in) :: nbr_pointsets
290 integer, intent (in) :: collection_size
291 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
292 collection_size)
293 type(yac_dble_ptr), intent (out) :: send_field_dble(nbr_pointsets, &
294 collection_size)
295 type(yac_real_ptr), optional, intent (in) :: send_frac_mask(nbr_pointsets, &
296 collection_size)
297 type(yac_dble_ptr), optional, intent (out) :: send_frac_mask_dble(nbr_pointsets, &
298 collection_size)
299
300 integer :: i, j, k, nbr_hor_points
301 type(c_ptr) :: put_mask_
302 type(c_ptr), pointer :: put_mask(:)
303 integer(kind=c_int), pointer :: pointset_put_mask(:)
304
306
307 put_mask_ = yac_get_field_put_mask_c2f_c(field_id)
308 if (c_associated(put_mask_)) then
309 call c_f_pointer(put_mask_, put_mask, shape=[nbr_pointsets])
310 do i = 1, collection_size
311 do j = 1, nbr_pointsets
312 nbr_hor_points = size(send_field(j,i)%p)
313 allocate(send_field_dble(j,i)%p(nbr_hor_points))
314 call c_f_pointer( &
315 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
316 do k = 1, nbr_hor_points
317 if (pointset_put_mask(k) /= 0) then
318 send_field_dble(j, i)%p(k) = dble(send_field(j, i)%p(k))
319 else
320 send_field_dble(j, i)%p(k) = 0d0
321 end if
322 end do
323 end do
324 end do
325 if (present(send_frac_mask)) then
326 do i = 1, collection_size
327 do j = 1, nbr_pointsets
328 nbr_hor_points = size(send_frac_mask(j,i)%p)
329 allocate(send_frac_mask_dble(j,i)%p(nbr_hor_points))
330 call c_f_pointer( &
331 put_mask(j), pointset_put_mask, shape=[nbr_hor_points])
332 do k = 1, nbr_hor_points
333 if (pointset_put_mask(k) /= 0) then
334 send_frac_mask_dble(j, i)%p(k) = dble(send_frac_mask(j, i)%p(k))
335 else
336 send_frac_mask_dble(j, i)%p(k) = 0d0
337 end if
338 end do
339 end do
340 end do
341 end if
342 else
343 do i = 1, collection_size
344 do j = 1, nbr_pointsets
345 nbr_hor_points = size(send_field(j,i)%p)
346 allocate(send_field_dble(j,i)%p(nbr_hor_points))
347 send_field_dble(j,i)%p = dble(send_field(j,i)%p)
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 send_frac_mask_dble(j,i)%p = dble(send_frac_mask(j,i)%p)
356 end do
357 end do
358 end if
359 end if
360 else
361 do i = 1, collection_size
362 do j = 1, nbr_pointsets
363 nbr_hor_points = size(send_field(j,i)%p)
364 allocate(send_field_dble(j,i)%p(nbr_hor_points))
365 send_field_dble(j,i)%p = 0d0
366 end do
367 end do
368 if (present(send_frac_mask)) then
369 do i = 1, collection_size
370 do j = 1, nbr_pointsets
371 nbr_hor_points = size(send_frac_mask(j,i)%p)
372 allocate(send_frac_mask_dble(j,i)%p(nbr_hor_points))
373 send_frac_mask_dble(j,i)%p = 0d0
374 end do
375 end do
376 end if
377 end if
378 end subroutine send_field_to_dble_ptr
379
380 ! -----------------------------------------------------------------------
381
382 subroutine recv_field_to_dble(field_id, &
383 nbr_hor_points, &
384 collection_size, &
385 recv_field, &
386 recv_field_dble)
387
388 use yac
389 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
390
391 implicit none
392
393 interface
394
395 function yac_get_field_get_mask_c2f_c ( field_id ) &
396 bind( c, name='yac_get_field_get_mask_c2f' )
397
398 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
399
400 integer ( kind=c_int ), value :: field_id
401 type(c_ptr) :: yac_get_field_get_mask_c2f_c
402
403 end function yac_get_field_get_mask_c2f_c
404
405 end interface
406
407 integer, intent (in) :: field_id
408 integer, intent (in) :: nbr_hor_points
409 integer, intent (in) :: collection_size
410 real, intent (in) :: recv_field(nbr_hor_points, &
411 collection_size)
412 double precision, intent (out) :: recv_field_dble(nbr_hor_points, &
413 collection_size)
414
415 integer :: i, j
416 type(c_ptr) :: get_mask_
417 integer(kind=c_int), pointer :: get_mask(:)
418
420
421 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
422 if (c_associated(get_mask_)) then
423 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
424 do i = 1, collection_size
425 do j = 1, nbr_hor_points
426 if (get_mask(j) /= 0) then
427 recv_field_dble(j, i) = dble(recv_field(j, i))
428 else
429 recv_field_dble(j, i) = 0d0
430 end if
431 end do
432 end do
433 else
434 recv_field_dble = dble(recv_field)
435 end if
436 else
437 recv_field_dble = 0d0
438 end if
439 end subroutine recv_field_to_dble
440
441 subroutine recv_field_to_dble_ptr(field_id, &
442 collection_size, &
443 recv_field, &
444 recv_field_dble)
445
446 use yac
447 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
448
449 implicit none
450
451 interface
452
453 function yac_get_field_get_mask_c2f_c ( field_id ) &
454 bind( c, name='yac_get_field_get_mask_c2f' )
455
456 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
457
458 integer ( kind=c_int ), value :: field_id
459 type(c_ptr) :: yac_get_field_get_mask_c2f_c
460
461 end function yac_get_field_get_mask_c2f_c
462
463 end interface
464
465 integer, intent (in) :: field_id
466 integer, intent (in) :: collection_size
467 type(yac_real_ptr), intent (in) :: recv_field(collection_size)
468 type(yac_dble_ptr), intent (out) :: recv_field_dble(collection_size)
469
470 integer :: i, j, nbr_hor_points
471 type(c_ptr) :: get_mask_
472 integer(kind=c_int), pointer :: get_mask(:)
473
475
476 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
477 if (c_associated(get_mask_) .and. (collection_size > 0)) then
478 nbr_hor_points = size(recv_field(1)%p)
479 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
480 do i = 1, collection_size
481 nbr_hor_points = size(recv_field(i)%p)
482 allocate(recv_field_dble(i)%p(nbr_hor_points))
483 do j = 1, nbr_hor_points
484 if (get_mask(j) /= 0) then
485 recv_field_dble(i)%p(j) = dble(recv_field(i)%p(j))
486 else
487 recv_field_dble(i)%p(j) = 0d0
488 end if
489 end do
490 end do
491 else
492 do i = 1, collection_size
493 nbr_hor_points = size(recv_field(i)%p)
494 allocate(recv_field_dble(i)%p(nbr_hor_points))
495 recv_field_dble(i)%p = dble(recv_field(i)%p)
496 end do
497 end if
498 else
499 do i = 1, collection_size
500 nbr_hor_points = size(recv_field(i)%p)
501 allocate(recv_field_dble(i)%p(nbr_hor_points))
502 recv_field_dble(i)%p = 0d0
503 end do
504 end if
505 end subroutine recv_field_to_dble_ptr
506
507 ! -----------------------------------------------------------------------
508
509 subroutine recv_field_from_dble(field_id, &
510 nbr_hor_points, &
511 collection_size, &
512 recv_field_dble, &
513 recv_field)
514
515 use yac
516 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
517
518 implicit none
519
520 interface
521
522 function yac_get_field_get_mask_c2f_c ( field_id ) &
523 bind( c, name='yac_get_field_get_mask_c2f' )
524
525 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
526
527 integer ( kind=c_int ), value :: field_id
528 type(c_ptr) :: yac_get_field_get_mask_c2f_c
529
530 end function yac_get_field_get_mask_c2f_c
531
532 end interface
533
534 integer, intent (in) :: field_id
535 integer, intent (in) :: nbr_hor_points
536 integer, intent (in) :: collection_size
537 double precision, intent (in) :: recv_field_dble(nbr_hor_points, &
538 collection_size)
539 real, intent (inout) :: recv_field(nbr_hor_points, &
540 collection_size)
541
542 integer :: i, j
543 type(c_ptr) :: get_mask_
544 integer(kind=c_int), pointer :: get_mask(:)
545
547
548 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
549 if (c_associated(get_mask_)) then
550 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
551 do i = 1, collection_size
552 do j = 1, nbr_hor_points
553 if (get_mask(j) /= 0) then
554 recv_field(j, i) = real(recv_field_dble(j, i))
555 end if
556 end do
557 end do
558 else
559 recv_field = real(recv_field_dble)
560 end if
561 end if
562 end subroutine recv_field_from_dble
563
564 subroutine recv_field_from_dble_ptr(field_id, &
565 collection_size, &
566 recv_field_dble, &
567 recv_field)
568
569 use yac
570 use iso_c_binding, only: c_ptr, c_f_pointer, c_int, c_associated
571
572 implicit none
573
574 interface
575
576 function yac_get_field_get_mask_c2f_c ( field_id ) &
577 bind( c, name='yac_get_field_get_mask_c2f' )
578
579 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
580
581 integer ( kind=c_int ), value :: field_id
582 type(c_ptr) :: yac_get_field_get_mask_c2f_c
583
584 end function yac_get_field_get_mask_c2f_c
585
586 end interface
587
588 integer, intent (in) :: field_id
589 integer, intent (in) :: collection_size
590 type(yac_dble_ptr), intent (inout) :: recv_field_dble(collection_size)
591 type(yac_real_ptr), intent (inout) :: recv_field(collection_size)
592
593 integer :: i, j, nbr_hor_points
594 type(c_ptr) :: get_mask_
595 integer(kind=c_int), pointer :: get_mask(:)
596
598
599 get_mask_ = yac_get_field_get_mask_c2f_c(field_id)
600 if (c_associated(get_mask_) .and. (collection_size > 0)) then
601 nbr_hor_points = size(recv_field(1)%p)
602 call c_f_pointer(get_mask_, get_mask, shape=[nbr_hor_points])
603 do i = 1, collection_size
604 nbr_hor_points = size(recv_field(i)%p)
605 do j = 1, nbr_hor_points
606 if (get_mask(j) /= 0) then
607 recv_field(i)%p(j) = real(recv_field_dble(i)%p(j))
608 end if
609 end do
610 deallocate(recv_field_dble(i)%p)
611 end do
612 else
613 do i = 1, collection_size
614 recv_field(i)%p = real(recv_field_dble(i)%p)
615 deallocate(recv_field_dble(i)%p)
616 end do
617 end if
618 end if
619 end subroutine recv_field_from_dble_ptr
620
622
623! -------------------------- init -------------------------------------
624
625subroutine yac_fmpi_handshake ( comm, group_names, group_comms )
626 use, intrinsic :: iso_c_binding, only : c_ptr, c_null_char, c_loc
627 use yac, dummy => yac_fmpi_handshake
628
629 implicit none
630
631 interface
632 subroutine yac_cmpi_handshake_c (comm, n, group_names, group_comms) &
633 bind( c, name='yac_cmpi_handshake_f2c')
634 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
635 use yac, only : yac_mpi_fint_kind
636 integer (kind = YAC_MPI_FINT_KIND ), intent(in), value :: comm
637 integer(c_int), intent(in), value :: n
638 type (c_ptr) , intent(in) :: group_names(n)
639 integer (kind = YAC_MPI_FINT_KIND ), intent(out) :: group_comms(n)
640 end subroutine yac_cmpi_handshake_c
641 end interface
642
643 integer, intent(in) :: comm
644 character(len=YAC_MAX_CHARLEN), intent(in) :: group_names(:)
645 integer, intent(out) :: group_comms(SIZE(group_names))
646
647 CHARACTER (kind=c_char, len=YAC_MAX_CHARLEN+1), TARGET :: &
648 group_names_cpy(SIZE(group_names))
649 type( c_ptr ) :: group_name_ptr(SIZE(group_names))
650 integer :: i
651 DO i=1,SIZE(group_names)
652 group_names_cpy(i) = trim(group_names(i)) // c_null_char
653 group_name_ptr(i) = c_loc(group_names_cpy(i))
654 END DO
655
656 call yac_cmpi_handshake_c( &
657 comm, SIZE(group_names), group_name_ptr, group_comms)
658
659end subroutine yac_fmpi_handshake
660
662
663 use yac, only : yac_yaml_emitter_default_f, &
665
666 implicit none
667
668 interface
669
670 function yac_cyaml_get_emitter_flag_default () &
671 bind( c, name='yac_cyaml_get_emitter_flag_default_c2f' )
672
673 use, intrinsic :: iso_c_binding, only : c_int
674
675 integer ( kind=c_int) :: yac_cyaml_get_emitter_flag_default
676
677 end function yac_cyaml_get_emitter_flag_default
678
679 function yac_cyaml_get_emitter_flag_json () &
680 bind( c, name='yac_cyaml_get_emitter_flag_json_c2f' )
681
682 use, intrinsic :: iso_c_binding, only : c_int
683
684 integer ( kind=c_int) :: yac_cyaml_get_emitter_flag_json
685
686 end function yac_cyaml_get_emitter_flag_json
687
688 end interface
689
690 yac_yaml_emitter_default_f = yac_cyaml_get_emitter_flag_default()
691 yac_yaml_emitter_json_f = yac_cyaml_get_emitter_flag_json()
692
693end subroutine
694
695subroutine yac_finit_comm ( comm )
696
697 use yac, dummy => yac_finit_comm
698
699 implicit none
700
701 interface
702
703 subroutine yac_cinit_comm_c ( comm ) &
704 bind( c, name='yac_cinit_comm_f2c' )
705
706 use yac, only : yac_mpi_fint_kind
707
708 integer ( kind=YAC_MPI_FINT_KIND ), value :: comm
709
710 end subroutine yac_cinit_comm_c
711
712 subroutine yac_finit_emitter_flags()
713 end subroutine yac_finit_emitter_flags
714
715 end interface
716
717 integer, intent(in) :: comm
718
720 call yac_cinit_comm_c ( comm )
721
722end subroutine yac_finit_comm
723
724subroutine yac_finit_comm_instance( comm, yac_instance_id)
725
726 use yac, dummy => yac_finit_comm_instance
727
728 implicit none
729
730 interface
731
732 subroutine yac_cinit_comm_instance_c ( comm, yac_instance_id) &
733 bind( c, name='yac_cinit_comm_instance_f2c' )
734
735 use, intrinsic :: iso_c_binding, only : c_int
736 use yac, only : yac_mpi_fint_kind
737
738 integer ( kind=YAC_MPI_FINT_KIND ), value :: comm
739 integer (kind=c_int) :: yac_instance_id
740
741 end subroutine yac_cinit_comm_instance_c
742
743 subroutine yac_finit_emitter_flags()
744 end subroutine yac_finit_emitter_flags
745
746 end interface
747
748 integer, intent(in) :: comm
749 integer, intent(out) :: yac_instance_id
750
752 call yac_cinit_comm_instance_c ( comm, yac_instance_id )
753
754end subroutine yac_finit_comm_instance
755
756subroutine yac_finit ( )
757
758 use yac, dummy => yac_finit
759
760 implicit none
761
762 interface
763
764 subroutine yac_cinit_c ( ) &
765 bind( c, name='yac_cinit' )
766
767 end subroutine yac_cinit_c
768
769 subroutine yac_finit_emitter_flags()
770 end subroutine yac_finit_emitter_flags
771
772 end interface
773
775 call yac_cinit_c ( )
776
777end subroutine yac_finit
778
779subroutine yac_finit_instance ( yac_instance_id )
780
781 use yac, dummy => yac_finit_instance
782
783 implicit none
784
785 interface
786
787 subroutine yac_cinit_instance_c ( yac_instance_id ) &
788 bind( c, name='yac_cinit_instance' )
789
790 use, intrinsic :: iso_c_binding, only : c_int
791
792 integer (kind=c_int) :: yac_instance_id
793
794 end subroutine yac_cinit_instance_c
795
796 subroutine yac_finit_emitter_flags()
797 end subroutine yac_finit_emitter_flags
798
799 end interface
800
801 integer, intent(out) :: yac_instance_id
802
804 call yac_cinit_instance_c ( yac_instance_id )
805
806end subroutine yac_finit_instance
807
808subroutine yac_finit_comm_dummy ( world_comm )
809
810 use yac, dummy => yac_finit_comm_dummy
811
812 implicit none
813
814 interface
815
816 subroutine yac_cinit_comm_dummy_c ( world_comm ) &
817 bind( c, name='yac_cinit_comm_dummy_f2c' )
818
819 use yac, only : yac_mpi_fint_kind
820
821 integer ( kind=YAC_MPI_FINT_KIND ), value :: world_comm
822
823 end subroutine yac_cinit_comm_dummy_c
824
825 subroutine yac_finit_emitter_flags()
826 end subroutine yac_finit_emitter_flags
827
828 end interface
829
830 integer, intent(in) :: world_comm
831
833 call yac_cinit_comm_dummy_c ( world_comm )
834
835end subroutine yac_finit_comm_dummy
836
837subroutine yac_finit_dummy ( )
838
839 use yac, dummy => yac_finit_dummy
840
841 implicit none
842
843 interface
844
845 subroutine yac_cinit_dummy_c ( ) &
846 bind( c, name='yac_cinit_dummy' )
847
848 end subroutine yac_cinit_dummy_c
849
850 subroutine yac_finit_emitter_flags()
851 end subroutine yac_finit_emitter_flags
852
853 end interface
854
856 call yac_cinit_dummy_c ( )
857
858end subroutine yac_finit_dummy
859
860! ----------------------- getting default instance id ------------------------
861
863
865
866 implicit none
867
868 interface
869
870 function yac_cget_default_instance_id_c ( ) &
871 bind( c, name='yac_cget_default_instance_id' )
872 use, intrinsic :: iso_c_binding, only : c_int
873
874 integer(kind=c_int) :: yac_cget_default_instance_id_c
875
876 end function yac_cget_default_instance_id_c
877
878 end interface
879
881
882 yac_fget_default_instance_id = yac_cget_default_instance_id_c( )
883
885
886! -------------------------- reading config file ---------------------------
887
888subroutine yac_fread_config_yaml (yaml_filename)
889 use yac, dummy => yac_fread_config_yaml
890 use, intrinsic :: iso_c_binding, only : c_null_char
892
893 implicit none
894
895 interface
896 subroutine yac_cread_config_yaml_c(yaml_filename) &
897 bind( c, name='yac_cread_config_yaml' )
898 use, intrinsic :: iso_c_binding, only : c_char
899 character (kind=c_char), dimension(*) :: yaml_filename
900 end subroutine yac_cread_config_yaml_c
901 end interface
902
903 character(len=*), intent(in) :: yaml_filename
904
905 call yac_cread_config_yaml_c(trim(yaml_filename) // c_null_char)
906
907end subroutine yac_fread_config_yaml
908
909subroutine yac_fread_config_yaml_instance(yac_instance_id, yaml_filename)
911 use, intrinsic :: iso_c_binding, only : c_null_char
913
914 implicit none
915
916 interface
917 subroutine yac_cread_config_yaml_instance_c( &
918 yac_instance_id, yaml_filename) &
919 bind( c, name='yac_cread_config_yaml_instance' )
920 use, intrinsic :: iso_c_binding, only : c_char, c_int
921 integer (kind=c_int), value :: yac_instance_id
922 character (kind=c_char), dimension(*) :: yaml_filename
923 end subroutine yac_cread_config_yaml_instance_c
924 end interface
925
926 integer, intent(in) :: yac_instance_id
927 character(len=*), intent(in) :: yaml_filename
928
929 call yac_cread_config_yaml_instance_c(yac_instance_id, &
930 & trim(yaml_filename) // c_null_char)
931
933
934subroutine yac_fread_config_json (json_filename)
935 use yac, dummy => yac_fread_config_json
936 use, intrinsic :: iso_c_binding, only : c_null_char
938
939 implicit none
940
941 interface
942 subroutine yac_cread_config_json_c(json_filename) &
943 bind( c, name='yac_cread_config_json' )
944 use, intrinsic :: iso_c_binding, only : c_char
945 character (kind=c_char), dimension(*) :: json_filename
946 end subroutine yac_cread_config_json_c
947 end interface
948
949 character(len=*), intent(in) :: json_filename
950
951 call yac_cread_config_json_c(trim(json_filename) // c_null_char)
952
953end subroutine yac_fread_config_json
954
955subroutine yac_fread_config_json_instance(yac_instance_id, json_filename)
957 use, intrinsic :: iso_c_binding, only : c_null_char
959
960 implicit none
961
962 interface
963 subroutine yac_cread_config_json_instance_c( &
964 yac_instance_id, json_filename) &
965 bind( c, name='yac_cread_config_json_instance' )
966 use, intrinsic :: iso_c_binding, only : c_char, c_int
967 integer (kind=c_int), value :: yac_instance_id
968 character (kind=c_char), dimension(*) :: json_filename
969 end subroutine yac_cread_config_json_instance_c
970 end interface
971
972 integer, intent(in) :: yac_instance_id
973 character(len=*), intent(in) :: json_filename
974
975 call yac_cread_config_json_instance_c(yac_instance_id, &
976 & trim(json_filename) // c_null_char)
977
979
980! -------------------------- cleanup -----------------------------------
981
982subroutine yac_fcleanup ( )
983
984 use yac, dummy => yac_fcleanup
985
986 implicit none
987
988 interface
989
990 subroutine yac_ccleanup_c () bind ( c, name='yac_ccleanup' )
991 end subroutine yac_ccleanup_c
992
993 end interface
994
995 call yac_ccleanup_c ( )
996
997end subroutine yac_fcleanup
998
999subroutine yac_fcleanup_instance ( yac_instance_id )
1000
1001 use yac, dummy => yac_fcleanup_instance
1002
1003 implicit none
1004
1005 interface
1006
1007 subroutine yac_ccleanup_instance_c ( yac_instance_id ) &
1008 bind( c, name='yac_ccleanup_instance' )
1009
1010 use, intrinsic :: iso_c_binding, only : c_int
1011
1012 integer (kind=c_int), value :: yac_instance_id
1013
1014 end subroutine yac_ccleanup_instance_c
1015
1016 end interface
1017
1018 integer, intent(in) :: yac_instance_id
1019
1020 call yac_ccleanup_instance_c ( yac_instance_id )
1021
1022end subroutine yac_fcleanup_instance
1023
1024! -------------------------- final -------------------------------------
1025
1026subroutine yac_ffinalize ( )
1027
1028 use yac, dummy => yac_ffinalize
1029
1030 implicit none
1031
1032 interface
1033 subroutine yac_cfinalize_c () bind ( c, name='yac_cfinalize' )
1034 end subroutine yac_cfinalize_c
1035 end interface
1036
1037 call yac_cfinalize_c ( )
1038
1039end subroutine yac_ffinalize
1040
1041subroutine yac_ffinalize_instance ( yac_instance_id )
1042
1043 use yac, dummy => yac_ffinalize_instance
1044
1045 implicit none
1046
1047 interface
1048 subroutine yac_cfinalize_instance_c ( yac_instance_id ) &
1049 bind( c, name='yac_cfinalize_instance' )
1050
1051 use, intrinsic :: iso_c_binding, only : c_int
1052
1053 integer (kind=c_int), value :: yac_instance_id
1054
1055 end subroutine yac_cfinalize_instance_c
1056 end interface
1057
1058 integer, intent(in) :: yac_instance_id
1059
1060 call yac_cfinalize_instance_c ( yac_instance_id )
1061
1062end subroutine yac_ffinalize_instance
1063
1064! -------------------------- version ----------------------------------
1065
1066function yac_fget_version () result (version_string)
1067
1068 use, intrinsic :: iso_c_binding, only : c_ptr
1069 use yac, dummy => yac_fget_version
1071
1072 implicit none
1073
1074 interface
1075 function yac_cget_version_c () bind ( c, name='yac_cget_version' )
1076
1077 use, intrinsic :: iso_c_binding, only : c_ptr
1078 type(c_ptr) :: yac_cget_version_c
1079
1080 end function yac_cget_version_c
1081 end interface
1082
1083 type (c_ptr) :: c_string_ptr
1084 character (len=:), ALLOCATABLE :: version_string
1085
1086 c_string_ptr = yac_cget_version_c()
1087 version_string = yac_internal_cptr2char(c_string_ptr)
1088
1089end function yac_fget_version
1090
1091! -------------------------- dates ------------------------------------
1092
1093subroutine yac_fdef_datetime ( start_datetime, end_datetime )
1094
1095 use, intrinsic :: iso_c_binding, only : c_null_char
1096 use yac, dummy => yac_fdef_datetime
1098
1099 implicit none
1100
1101 interface
1102
1103 subroutine yac_cdef_datetime_c ( start_datetime, end_datetime ) &
1104 & bind( c, name='yac_cdef_datetime' )
1105
1106 use, intrinsic :: iso_c_binding, only : c_char
1107
1108 character ( kind=c_char), dimension(*) :: start_datetime
1109 character ( kind=c_char), dimension(*) :: end_datetime
1110
1111 end subroutine yac_cdef_datetime_c
1112
1113 end interface
1114
1115 character(len=*), intent(in), optional :: start_datetime
1116 character(len=*), intent(in), optional :: end_datetime
1117
1118 integer :: index
1119
1120 index = 0
1121
1122
1123 if (present(start_datetime)) then
1124 yac_check_string_len( "yac_fdef_datetime", start_datetime )
1125 index = index + 1
1126 end if
1127
1128 if (present(end_datetime)) then
1129 yac_check_string_len( "yac_fdef_datetime", end_datetime )
1130 index = index + 2
1131 end if
1132
1133 select case ( index )
1134
1135 case ( 3 )
1136 call yac_cdef_datetime_c ( trim(start_datetime) // c_null_char, &
1137 trim(end_datetime) // c_null_char )
1138 case ( 2 )
1139 call yac_cdef_datetime_c ( c_null_char, &
1140 trim(end_datetime) // c_null_char )
1141 case ( 1 )
1142 call yac_cdef_datetime_c ( trim(start_datetime) // c_null_char, &
1143 c_null_char )
1144 end select
1145
1146end subroutine yac_fdef_datetime
1147
1149 yac_instance_id, start_datetime, end_datetime )
1150
1151 use, intrinsic :: iso_c_binding, only : c_null_char
1152 use yac, dummy => yac_fdef_datetime_instance
1154
1155 implicit none
1156
1157 interface
1158
1159 subroutine yac_cdef_datetime_instance_c ( yac_instance_id, &
1160 start_datetime, &
1161 end_datetime ) &
1162 bind( c, name='yac_cdef_datetime_instance' )
1163
1164 use, intrinsic :: iso_c_binding, only : c_char, c_int
1165
1166 integer (kind=c_int), value :: yac_instance_id
1167 character ( kind=c_char), dimension(*) :: start_datetime
1168 character ( kind=c_char), dimension(*) :: end_datetime
1169
1170 end subroutine yac_cdef_datetime_instance_c
1171
1172 end interface
1173
1174 integer, intent(in) :: yac_instance_id
1175 character(len=*), intent(in), optional :: start_datetime
1176 character(len=*), intent(in), optional :: end_datetime
1177
1178 integer :: index
1179
1180 index = 0
1181
1182
1183 if (present(start_datetime)) then
1184 yac_check_string_len( "yac_fdef_datetime_instance", start_datetime )
1185 index = index + 1
1186 end if
1187
1188 if (present(end_datetime)) then
1189 yac_check_string_len( "yac_fdef_datetime_instance", end_datetime )
1190 index = index + 2
1191 end if
1192
1193 select case ( index )
1194
1195 case ( 3 )
1196 call yac_cdef_datetime_instance_c ( yac_instance_id, &
1197 trim(start_datetime) // c_null_char, &
1198 trim(end_datetime) // c_null_char )
1199 case ( 2 )
1200 call yac_cdef_datetime_instance_c ( yac_instance_id, &
1201 c_null_char, &
1202 trim(end_datetime) // c_null_char )
1203 case ( 1 )
1204 call yac_cdef_datetime_instance_c ( yac_instance_id, &
1205 trim(start_datetime) // c_null_char, &
1206 c_null_char )
1207 end select
1208
1209end subroutine yac_fdef_datetime_instance
1210
1211subroutine yac_fdef_calendar ( calendar )
1212
1213 use yac, dummy => yac_fdef_calendar
1214
1215 implicit none
1216
1217 interface
1218
1219 subroutine yac_cdef_calendar_c ( calendar ) &
1220 bind( c, name='yac_cdef_calendar' )
1221 use, intrinsic :: iso_c_binding, only : c_int
1222
1223 integer ( kind=c_int ), value :: calendar
1224
1225 end subroutine yac_cdef_calendar_c
1226
1227 end interface
1228
1229 integer, intent(in) :: calendar
1230
1231 call yac_cdef_calendar_c ( calendar )
1232
1233end subroutine yac_fdef_calendar
1234
1235! ------------------------ predef_comp ------------------------------------
1236
1237SUBROUTINE yac_fpredef_comp ( comp_name, comp_id )
1238
1239 use, intrinsic :: iso_c_binding, only : c_null_char
1240 use yac, dummy => yac_fpredef_comp
1242
1243 implicit none
1244
1245 INTERFACE
1246
1247 SUBROUTINE yac_cpredef_comp_c ( comp_name, comp_id ) &
1248 bind( c, name='yac_cpredef_comp' )
1249
1250 use, intrinsic :: iso_c_binding, only : c_int, c_char
1251
1252 character ( kind=c_char), dimension(*) :: comp_name
1253 integer ( kind=c_int ) :: comp_id
1254
1255 END SUBROUTINE yac_cpredef_comp_c
1256
1257 END INTERFACE
1258
1259 character(len=*), intent(in) :: comp_name
1260 integer, intent(out) :: comp_id
1261
1262 yac_check_string_len( "yac_fpredef_comp", comp_name )
1263
1264 call yac_cpredef_comp_c ( trim(comp_name) // c_null_char, comp_id )
1265
1266END SUBROUTINE yac_fpredef_comp
1267
1268SUBROUTINE yac_fpredef_comp_instance ( yac_instance_id, comp_name, comp_id )
1269
1270 use, intrinsic :: iso_c_binding, only : c_null_char
1271 use yac, dummy => yac_fpredef_comp_instance
1273
1274 implicit none
1275
1276 INTERFACE
1277
1278 SUBROUTINE yac_cpredef_comp_instance_c ( yac_instance_id, &
1279 comp_name, &
1280 comp_id ) &
1281 bind( c, name='yac_cpredef_comp_instance' )
1282
1283 use, intrinsic :: iso_c_binding, only : c_int, c_char
1284
1285 integer (kind=c_int), value :: yac_instance_id
1286 character ( kind=c_char), dimension(*) :: comp_name
1287 integer ( kind=c_int ) :: comp_id
1288
1289 END SUBROUTINE yac_cpredef_comp_instance_c
1290
1291 END INTERFACE
1292
1293 integer, intent(in) :: yac_instance_id
1294 character(len=*), intent(in) :: comp_name
1295 integer, intent(out) :: comp_id
1296
1297 yac_check_string_len( "yac_fpredef_comp_instance", comp_name )
1298
1299 call yac_cpredef_comp_instance_c( yac_instance_id, &
1300 trim(comp_name) // c_null_char, &
1301 comp_id )
1302
1303END SUBROUTINE yac_fpredef_comp_instance
1304
1305! ------------------------ def_comp ------------------------------------
1306
1307subroutine yac_fdef_comp ( comp_name, comp_id )
1308
1309 use, intrinsic :: iso_c_binding, only : c_null_char
1310 use yac, dummy => yac_fdef_comp
1312
1313 implicit none
1314
1315 interface
1316
1317 subroutine yac_cdef_comp_c ( comp_name, comp_id ) &
1318 bind( c, name='yac_cdef_comp' )
1319
1320 use, intrinsic :: iso_c_binding, only : c_int, c_char
1321
1322 character ( kind=c_char), dimension(*) :: comp_name
1323 integer ( kind=c_int ) :: comp_id
1324
1325 end subroutine yac_cdef_comp_c
1326
1327 end interface
1328
1329 character(len=*), intent(in) :: comp_name
1330 integer, intent(out) :: comp_id
1331
1332 yac_check_string_len( "yac_fdef_comp", comp_name )
1333
1334 call yac_cdef_comp_c ( trim(comp_name) // c_null_char, comp_id )
1335
1336end subroutine yac_fdef_comp
1337
1338subroutine yac_fdef_comp_instance ( yac_instance_id, comp_name, comp_id )
1339
1340 use, intrinsic :: iso_c_binding, only : c_null_char
1341 use yac, dummy => yac_fdef_comp_instance
1343
1344 implicit none
1345
1346 interface
1347
1348 subroutine yac_cdef_comp_instance_c ( yac_instance_id, &
1349 comp_name, &
1350 comp_id ) &
1351 bind( c, name='yac_cdef_comp_instance' )
1352
1353 use, intrinsic :: iso_c_binding, only : c_int, c_char
1354
1355 integer (kind=c_int), value :: yac_instance_id
1356 character ( kind=c_char), dimension(*) :: comp_name
1357 integer ( kind=c_int ) :: comp_id
1358
1359 end subroutine yac_cdef_comp_instance_c
1360
1361 end interface
1362
1363 integer, intent(in) :: yac_instance_id
1364 character(len=*), intent(in) :: comp_name
1365 integer, intent(out) :: comp_id
1366
1367 yac_check_string_len( "yac_fdef_comp_instance", comp_name )
1368
1369 call yac_cdef_comp_instance_c( yac_instance_id, &
1370 trim(comp_name) // c_null_char, &
1371 comp_id )
1372
1373end subroutine yac_fdef_comp_instance
1374
1375! ------------------------ def_comps ------------------------------------
1376
1377subroutine yac_fdef_comps ( comp_names, num_comps, comp_ids )
1378
1379 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
1380 use yac, dummy => yac_fdef_comps
1382
1383 implicit none
1384
1385 interface
1386
1387 subroutine yac_cdef_comps_c ( comp_names, num_comps, comp_ids ) &
1388 bind( c, name='yac_cdef_comps' )
1389
1390 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1391
1392 type ( c_ptr ), value :: comp_names
1393 integer ( kind=c_int ), value :: num_comps
1394 integer ( kind=c_int ) :: comp_ids(*)
1395
1396 end subroutine yac_cdef_comps_c
1397
1398 end interface
1399
1400 integer, intent(in) :: num_comps
1401 character(kind=c_char, len=*), intent(in) :: &
1402 comp_names(num_comps)
1403 integer, intent(out) :: comp_ids(num_comps)
1404
1405 integer :: i, j
1406 character(kind=c_char), target :: comp_names_cpy(YAC_MAX_CHARLEN+1, num_comps)
1407 type(c_ptr), target :: comp_name_ptrs(num_comps)
1408
1409 comp_names_cpy = c_null_char
1410
1411 do i = 1, num_comps
1412 yac_check_string_len( "yac_fdef_comps", comp_names(i))
1413 do j = 1, len_trim(comp_names(i))
1414 comp_names_cpy(j,i) = comp_names(i)(j:j)
1415 end do
1416 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
1417 end do
1418
1419 call yac_cdef_comps_c ( c_loc(comp_name_ptrs), num_comps, comp_ids )
1420
1421end subroutine yac_fdef_comps
1422
1423subroutine yac_fdef_comps_instance ( yac_instance_id, &
1424 comp_names, &
1425 num_comps, &
1426 comp_ids )
1427
1428 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
1429 use yac, dummy => yac_fdef_comps_instance
1431
1432 implicit none
1433
1434 interface
1435
1436 subroutine yac_cdef_comps_instance_c ( yac_instance_id, &
1437 comp_names, &
1438 num_comps, &
1439 comp_ids ) &
1440 bind( c, name='yac_cdef_comps_instance' )
1441
1442 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1443
1444 integer (kind=c_int), value :: yac_instance_id
1445 type ( c_ptr ), value :: comp_names
1446 integer ( kind=c_int ), value :: num_comps
1447 integer ( kind=c_int ) :: comp_ids(*)
1448
1449 end subroutine yac_cdef_comps_instance_c
1450
1451 end interface
1452
1453 integer, intent(in) :: yac_instance_id
1454 integer, intent(in) :: num_comps
1455 character(kind=c_char, len=*), intent(in) :: &
1456 comp_names(num_comps)
1457 integer, intent(out) :: comp_ids(num_comps)
1458
1459 integer :: i, j
1460 character(kind=c_char), target :: comp_names_cpy(YAC_MAX_CHARLEN+1, num_comps)
1461 type(c_ptr), target :: comp_name_ptrs(num_comps)
1462
1463 comp_names_cpy = c_null_char
1464
1465 do i = 1, num_comps
1466 yac_check_string_len( "yac_fdef_comps_instance", comp_names(i))
1467 do j = 1, len_trim(comp_names(i))
1468 comp_names_cpy(j,i) = comp_names(i)(j:j)
1469 end do
1470 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
1471 end do
1472
1473 call yac_cdef_comps_instance_c ( yac_instance_id, &
1474 c_loc(comp_name_ptrs), &
1475 num_comps, &
1476 comp_ids )
1477
1478end subroutine yac_fdef_comps_instance
1479
1480
1481! ------------------------- def_comp_dummy ------------------------------
1482
1484
1485 use, intrinsic :: iso_c_binding, only : c_null_ptr, c_int
1486 use yac, dummy => yac_fdef_comp_dummy
1487
1488 implicit none
1489
1490 interface
1491
1492 subroutine yac_cdef_comps_dummy_c ( comp_names, num_comps, comp_ids ) &
1493 bind( c, name='yac_cdef_comps' )
1494
1495 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1496
1497 type ( c_ptr ), value :: comp_names
1498 integer ( kind=c_int ), value :: num_comps
1499 integer ( kind=c_int ) :: comp_ids(*)
1500
1501 end subroutine yac_cdef_comps_dummy_c
1502
1503 end interface
1504
1505 call yac_cdef_comps_dummy_c ( c_null_ptr, 0_c_int, [ integer( kind=c_int ) :: ] )
1506
1507end subroutine yac_fdef_comp_dummy
1508
1509subroutine yac_fdef_comp_dummy_instance ( yac_instance_id )
1510
1511 use, intrinsic :: iso_c_binding, only : c_null_ptr, c_int
1512 use yac, dummy => yac_fdef_comp_dummy_instance
1514
1515 implicit none
1516
1517 interface
1518 subroutine yac_cdef_comps_dummy_instance_c ( &
1519 yac_instance_id, comp_names, num_comps, comp_ids ) &
1520 bind( c, name='yac_cdef_comps_instance' )
1521
1522 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
1523
1524 integer (kind=c_int), value :: yac_instance_id
1525 type ( c_ptr ), value :: comp_names
1526 integer ( kind=c_int ), value :: num_comps
1527 integer ( kind=c_int ) :: comp_ids(*)
1528
1529 end subroutine yac_cdef_comps_dummy_instance_c
1530
1531 end interface
1532
1533 integer, intent(in) :: yac_instance_id
1534
1535 call yac_cdef_comps_dummy_instance_c( yac_instance_id, &
1536 c_null_ptr, &
1537 0_c_int, &
1538 [ integer( kind=c_int ) :: ] )
1539
1540end subroutine yac_fdef_comp_dummy_instance
1541
1542! ------------------------- def_points ----------------------------------
1543
1544subroutine yac_fdef_points_reg2d_real ( grid_id, &
1545 nbr_points, &
1546 location, &
1547 x_points_real, &
1548 y_points_real, &
1549 point_id )
1550
1551 use yac, dummy => yac_fdef_points_reg2d_real
1552
1553 implicit none
1554
1555 integer, intent(in) :: grid_id
1556 integer, intent(in) :: nbr_points(2)
1557 integer, intent(in) :: location
1558 real, intent(in) :: x_points_real(nbr_points(1))
1559 real, intent(in) :: y_points_real(nbr_points(2))
1560 integer, intent(out) :: point_id
1561
1562 double precision :: x_points(nbr_points(1))
1563 double precision :: y_points(nbr_points(2))
1564
1565 x_points(:) = dble(x_points_real(:))
1566 y_points(:) = dble(y_points_real(:))
1567
1568 call yac_fdef_points_reg2d_dble ( grid_id, &
1569 nbr_points, &
1570 location, &
1571 x_points, &
1572 y_points, &
1573 point_id )
1574
1575end subroutine yac_fdef_points_reg2d_real
1576
1577subroutine yac_fdef_points_reg2d_dble ( grid_id, &
1578 nbr_points, &
1579 location, &
1580 x_points, &
1581 y_points, &
1582 point_id )
1583
1584 use yac, dummy => yac_fdef_points_reg2d_dble
1585
1586 implicit none
1587
1588 interface
1589
1590 subroutine yac_cdef_points_reg2d_c ( grid_id, &
1591 nbr_points, &
1592 location, &
1593 x_points, &
1594 y_points, &
1595 point_id ) &
1596 & bind( c, name='yac_cdef_points_reg2d' )
1597
1598 use, intrinsic :: iso_c_binding, only : c_int, c_double
1599
1600 integer ( kind=c_int ), value :: grid_id
1601 integer ( kind=c_int ) :: nbr_points(2)
1602 integer ( kind=c_int ), value :: location
1603
1604 real ( kind=c_double ) :: x_points(nbr_points(1))
1605 real ( kind=c_double ) :: y_points(nbr_points(2))
1606
1607 integer ( kind=c_int ) :: point_id
1608
1609 end subroutine yac_cdef_points_reg2d_c
1610
1611 end interface
1612
1613 integer, intent(in) :: grid_id
1614 integer, intent(in) :: nbr_points(2)
1615 integer, intent(in) :: location
1616
1617 double precision, intent(in) :: x_points(nbr_points(1))
1618 double precision, intent(in) :: y_points(nbr_points(2))
1619
1620 integer, intent(out) :: point_id
1621
1622 call yac_cdef_points_reg2d_c ( grid_id, &
1623 nbr_points, &
1624 location, &
1625 x_points, &
1626 y_points, &
1627 point_id )
1628
1629end subroutine yac_fdef_points_reg2d_dble
1630
1631subroutine yac_fdef_points_curve2d_real ( grid_id, &
1632 nbr_points, &
1633 location, &
1634 x_points_real, &
1635 y_points_real, &
1636 point_id )
1637
1638 use yac, dummy => yac_fdef_points_curve2d_real
1639
1640 implicit none
1641
1642 integer, intent(in) :: grid_id
1643 integer, intent(in) :: nbr_points(2)
1644 integer, intent(in) :: location
1645 real, intent(in) :: &
1646 x_points_real(nbr_points(1),nbr_points(2))
1647 real, intent(in) :: &
1648 y_points_real(nbr_points(1),nbr_points(2))
1649 integer, intent(out) :: point_id
1650
1651 double precision :: x_points(nbr_points(1),nbr_points(2))
1652 double precision :: y_points(nbr_points(1),nbr_points(2))
1653
1654 x_points(:,:) = dble(x_points_real(:,:))
1655 y_points(:,:) = dble(y_points_real(:,:))
1656
1657 call yac_fdef_points_curve2d_dble ( grid_id, &
1658 nbr_points, &
1659 location, &
1660 x_points, &
1661 y_points, &
1662 point_id )
1663
1664end subroutine yac_fdef_points_curve2d_real
1665
1666subroutine yac_fdef_points_curve2d_dble ( grid_id, &
1667 nbr_points, &
1668 location, &
1669 x_points, &
1670 y_points, &
1671 point_id )
1672
1673 use yac, dummy => yac_fdef_points_curve2d_dble
1674
1675 implicit none
1676
1677 interface
1678
1679 subroutine yac_cdef_points_curve2d_c ( grid_id, &
1680 nbr_points, &
1681 location, &
1682 x_points, &
1683 y_points, &
1684 point_id ) &
1685 bind( c, name='yac_cdef_points_curve2d' )
1686
1687 use, intrinsic :: iso_c_binding, only : c_int, c_double
1688
1689 integer ( kind=c_int ), value :: grid_id
1690 integer ( kind=c_int ) :: nbr_points(2)
1691 integer ( kind=c_int ), value :: location
1692
1693 real ( kind=c_double ) :: x_points(nbr_points(1),nbr_points(2))
1694 real ( kind=c_double ) :: y_points(nbr_points(1),nbr_points(2))
1695
1696 integer ( kind=c_int ) :: point_id
1697
1698 end subroutine yac_cdef_points_curve2d_c
1699
1700 end interface
1701
1702 integer, intent(in) :: grid_id
1703 integer, intent(in) :: nbr_points(2)
1704 integer, intent(in) :: location
1705
1706 double precision, intent(in) :: &
1707 x_points(nbr_points(1),nbr_points(2))
1708 double precision, intent(in) :: &
1709 y_points(nbr_points(1),nbr_points(2))
1710
1711 integer, intent(out) :: point_id
1712
1713 call yac_cdef_points_curve2d_c ( grid_id, &
1714 nbr_points, &
1715 location, &
1716 x_points, &
1717 y_points, &
1718 point_id )
1719
1720end subroutine yac_fdef_points_curve2d_dble
1721
1722subroutine yac_fdef_points_unstruct_real ( grid_id, &
1723 nbr_points, &
1724 location, &
1725 x_points_real, &
1726 y_points_real, &
1727 point_id )
1728
1730
1731 implicit none
1732
1733 integer, intent(in) :: grid_id
1734 integer, intent(in) :: nbr_points
1735 integer, intent(in) :: location
1736
1737 real, intent(in) :: x_points_real(nbr_points)
1738 real, intent(in) :: y_points_real(nbr_points)
1739
1740 integer, intent(out) :: point_id
1741
1742 double precision :: x_points(nbr_points)
1743 double precision :: y_points(nbr_points)
1744
1745 x_points(:) = dble(x_points_real(:))
1746 y_points(:) = dble(y_points_real(:))
1747
1748 call yac_fdef_points_unstruct_dble ( grid_id, &
1749 nbr_points, &
1750 location, &
1751 x_points, &
1752 y_points, &
1753 point_id )
1754
1755end subroutine yac_fdef_points_unstruct_real
1756
1757subroutine yac_fdef_points_unstruct_dble ( grid_id, &
1758 nbr_points, &
1759 location, &
1760 x_points, &
1761 y_points, &
1762 point_id )
1763
1765
1766 implicit none
1767
1768 interface
1769
1770 subroutine yac_cdef_points_unstruct_c ( grid_id, &
1771 nbr_points, &
1772 location, &
1773 x_points, &
1774 y_points, &
1775 point_id ) &
1776 bind( c, name='yac_cdef_points_unstruct' )
1777
1778 use, intrinsic :: iso_c_binding, only : c_int, c_double
1779
1780 integer (kind=c_int), value :: grid_id
1781 integer (kind=c_int), value :: nbr_points
1782 integer (kind=c_int), value :: location
1783
1784 real (kind=c_double) :: x_points(nbr_points)
1785 real (kind=c_double) :: y_points(nbr_points)
1786
1787 integer (kind=c_int) :: point_id
1788
1789 end subroutine yac_cdef_points_unstruct_c
1790
1791 end interface
1792
1793 integer, intent(in) :: grid_id
1794 integer, intent(in) :: nbr_points
1795 integer, intent(in) :: location
1796
1797 double precision, intent(in) :: x_points(nbr_points)
1798 double precision, intent(in) :: y_points(nbr_points)
1799
1800 integer, intent(out) :: point_id
1801
1802 call yac_cdef_points_unstruct_c ( grid_id, &
1803 nbr_points, &
1804 location, &
1805 x_points, &
1806 y_points, &
1807 point_id )
1808
1809end subroutine yac_fdef_points_unstruct_dble
1810
1811! ------------------------- def_grid -------------------------------
1812
1832subroutine yac_fdef_grid_nonuniform_real ( grid_name, &
1833 nbr_vertices, &
1834 nbr_cells, &
1835 nbr_connections, &
1836 nbr_vertices_per_cell, &
1837 x_vertices_real, &
1838 y_vertices_real, &
1839 cell_to_vertex_in, &
1840 grid_id, &
1841 use_ll_edges)
1842
1844
1845 implicit none
1846
1847 character(len=*), intent(in) :: grid_name
1848 integer, intent(in) :: nbr_vertices
1849 integer, intent(in) :: nbr_cells
1850 integer, intent(in) :: nbr_connections
1851 integer, intent(in) :: nbr_vertices_per_cell(nbr_cells)
1852
1853 real, intent(in) :: x_vertices_real(nbr_vertices)
1854 real, intent(in) :: y_vertices_real(nbr_vertices)
1855
1856 integer, intent(in) :: cell_to_vertex_in(nbr_connections)
1857
1858 integer, intent(out) :: grid_id
1859
1860 logical, optional, intent(in) :: use_ll_edges
1861
1862 double precision :: x_vertices(nbr_vertices)
1863 double precision :: y_vertices(nbr_vertices)
1864
1865 x_vertices(:) = dble(x_vertices_real(:))
1866 y_vertices(:) = dble(y_vertices_real(:))
1867
1868 call yac_fdef_grid_nonuniform_dble ( grid_name, &
1869 nbr_vertices, &
1870 nbr_cells, &
1871 nbr_connections, &
1872 nbr_vertices_per_cell, &
1873 x_vertices, &
1874 y_vertices, &
1875 cell_to_vertex_in, &
1876 grid_id, &
1877 use_ll_edges )
1878
1879end subroutine yac_fdef_grid_nonuniform_real
1880
1900subroutine yac_fdef_grid_nonuniform_dble ( grid_name, &
1901 nbr_vertices, &
1902 nbr_cells, &
1903 nbr_connections, &
1904 nbr_vertices_per_cell, &
1905 x_vertices, &
1906 y_vertices, &
1907 cell_to_vertex_in, &
1908 grid_id, &
1909 use_ll_edges )
1910
1911 use, intrinsic :: iso_c_binding, only : c_null_char
1913
1914 implicit none
1915
1916 interface
1917
1918 subroutine yac_cdef_grid_unstruct_c ( grid_name, &
1919 nbr_vertices, &
1920 nbr_cells, &
1921 nbr_vertices_per_cell, &
1922 x_vertices, &
1923 y_vertices, &
1924 cell_to_vertex, &
1925 grid_id ) &
1926 bind( c, name='yac_cdef_grid_unstruct' )
1927
1928 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
1929
1930 character ( kind=c_char ), dimension(*) :: grid_name
1931 integer ( kind=c_int ), value :: nbr_vertices
1932 integer ( kind=c_int ), value :: nbr_cells
1933 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
1934 real ( kind=c_double ) :: x_vertices(nbr_vertices)
1935 real ( kind=c_double ) :: y_vertices(nbr_vertices)
1936 integer ( kind=c_int ) :: cell_to_vertex(nbr_cells,nbr_vertices)
1937 integer ( kind=c_int ) :: grid_id
1938
1939 end subroutine yac_cdef_grid_unstruct_c
1940
1941 subroutine yac_cdef_grid_unstruct_ll_c ( grid_name, &
1942 nbr_vertices, &
1943 nbr_cells, &
1944 nbr_vertices_per_cell, &
1945 x_vertices, &
1946 y_vertices, &
1947 cell_to_vertex, &
1948 grid_id ) &
1949 bind( c, name='yac_cdef_grid_unstruct_ll' )
1950
1951 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
1952
1953 character ( kind=c_char ), dimension(*) :: grid_name
1954 integer ( kind=c_int ), value :: nbr_vertices
1955 integer ( kind=c_int ), value :: nbr_cells
1956 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
1957 real ( kind=c_double ) :: x_vertices(nbr_vertices)
1958 real ( kind=c_double ) :: y_vertices(nbr_vertices)
1959 integer ( kind=c_int ) :: cell_to_vertex(nbr_cells,nbr_vertices)
1960 integer ( kind=c_int ) :: grid_id
1961
1962 end subroutine yac_cdef_grid_unstruct_ll_c
1963
1964 end interface
1965
1966 character(len=*), intent(in) :: grid_name
1967 integer, intent(in) :: nbr_vertices
1968 integer, intent(in) :: nbr_cells
1969 integer, intent(in) :: nbr_connections
1970 integer, intent(in) :: nbr_vertices_per_cell(nbr_cells)
1971
1972 double precision, intent(in) :: x_vertices(nbr_vertices)
1973 double precision, intent(in) :: y_vertices(nbr_vertices)
1974
1975 integer, intent(in) :: cell_to_vertex_in(nbr_connections)
1976
1977 integer, intent(out) :: grid_id
1978
1979 logical, optional, intent(in) :: use_ll_edges
1980
1981
1982 integer :: cell_to_vertex(nbr_connections)
1983
1984 logical :: use_ll_edges_
1985
1986 yac_fassert(all(cell_to_vertex_in > 0), "ERROR(yac_fdef_grid_nonuniform_dble): all entries of cell_to_vertex have to be > 0")
1987
1988 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")
1989
1990 cell_to_vertex(:) = cell_to_vertex_in(:) - 1
1991
1992 if (present(use_ll_edges)) then
1993 use_ll_edges_ = use_ll_edges
1994 else
1995 use_ll_edges_ = .false.
1996 end if
1997
1998 if (use_ll_edges_) then
1999 call yac_cdef_grid_unstruct_ll_c ( trim(grid_name) // c_null_char, &
2000 nbr_vertices, &
2001 nbr_cells, &
2002 nbr_vertices_per_cell, &
2003 x_vertices, &
2004 y_vertices, &
2005 cell_to_vertex, &
2006 grid_id )
2007 else
2008 call yac_cdef_grid_unstruct_c ( trim(grid_name) // c_null_char, &
2009 nbr_vertices, &
2010 nbr_cells, &
2011 nbr_vertices_per_cell, &
2012 x_vertices, &
2013 y_vertices, &
2014 cell_to_vertex, &
2015 grid_id )
2016 end if
2017
2018end subroutine yac_fdef_grid_nonuniform_dble
2019
2038subroutine yac_fdef_grid_unstruct_real ( grid_name, &
2039 nbr_vertices, &
2040 nbr_cells, &
2041 nbr_vertices_per_cell_in, &
2042 x_vertices_real, &
2043 y_vertices_real, &
2044 cell_to_vertex_in, &
2045 grid_id, &
2046 use_ll_edges )
2047
2048 use yac, dummy => yac_fdef_grid_unstruct_real
2049
2050 implicit none
2051
2052 character(len=*), intent(in) :: grid_name
2053 integer, intent(in) :: nbr_vertices
2054 integer, intent(in) :: nbr_cells
2055 integer, intent(in) :: nbr_vertices_per_cell_in
2056
2057 real, intent(in) :: x_vertices_real(nbr_vertices)
2058 real, intent(in) :: y_vertices_real(nbr_vertices)
2059
2060 integer, intent(in) :: cell_to_vertex_in(nbr_vertices_per_cell_in,nbr_cells)
2061
2062 integer, intent(out) :: grid_id
2063
2064 logical, optional, intent(in) :: use_ll_edges
2065
2066 double precision :: x_vertices(nbr_vertices)
2067 double precision :: y_vertices(nbr_vertices)
2068
2069 x_vertices(:) = dble(x_vertices_real(:))
2070 y_vertices(:) = dble(y_vertices_real(:))
2071
2072 call yac_fdef_grid_unstruct_dble ( grid_name, &
2073 nbr_vertices, &
2074 nbr_cells, &
2075 nbr_vertices_per_cell_in, &
2076 x_vertices, &
2077 y_vertices, &
2078 cell_to_vertex_in, &
2079 grid_id, &
2080 use_ll_edges )
2081
2082end subroutine yac_fdef_grid_unstruct_real
2083
2102subroutine yac_fdef_grid_unstruct_dble ( grid_name, &
2103 nbr_vertices, &
2104 nbr_cells, &
2105 nbr_vertices_per_cell_in, &
2106 x_vertices, &
2107 y_vertices, &
2108 cell_to_vertex_in, &
2109 grid_id, &
2110 use_ll_edges )
2111
2112 use, intrinsic :: iso_c_binding, only : c_null_char
2113 use yac, dummy => yac_fdef_grid_unstruct_dble
2114
2115 implicit none
2116
2117 interface
2118
2119 subroutine yac_cdef_grid_unstruct_c ( grid_name, &
2120 nbr_vertices, &
2121 nbr_cells, &
2122 nbr_vertices_per_cell, &
2123 x_vertices, &
2124 y_vertices, &
2125 cell_to_vertex, &
2126 grid_id ) &
2127 bind( c, name='yac_cdef_grid_unstruct' )
2128
2129 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2130
2131 character ( kind=c_char ), dimension(*) :: grid_name
2132 integer ( kind=c_int ), value :: nbr_vertices
2133 integer ( kind=c_int ), value :: nbr_cells
2134 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
2135 real ( kind=c_double ) :: x_vertices(nbr_vertices)
2136 real ( kind=c_double ) :: y_vertices(nbr_vertices)
2137 integer ( kind=c_int ) :: cell_to_vertex(nbr_cells,nbr_vertices)
2138 integer ( kind=c_int ) :: grid_id
2139
2140 end subroutine yac_cdef_grid_unstruct_c
2141
2142 subroutine yac_cdef_grid_unstruct_ll_c ( grid_name, &
2143 nbr_vertices, &
2144 nbr_cells, &
2145 nbr_vertices_per_cell, &
2146 x_vertices, &
2147 y_vertices, &
2148 cell_to_vertex, &
2149 grid_id ) &
2150 bind( c, name='yac_cdef_grid_unstruct_ll' )
2151
2152 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2153
2154 character ( kind=c_char ), dimension(*) :: grid_name
2155 integer ( kind=c_int ), value :: nbr_vertices
2156 integer ( kind=c_int ), value :: nbr_cells
2157 integer ( kind=c_int ) :: nbr_vertices_per_cell(nbr_cells)
2158 real ( kind=c_double ) :: x_vertices(nbr_vertices)
2159 real ( kind=c_double ) :: y_vertices(nbr_vertices)
2160 integer ( kind=c_int ) :: cell_to_vertex(nbr_cells,nbr_vertices)
2161 integer ( kind=c_int ) :: grid_id
2162
2163 end subroutine yac_cdef_grid_unstruct_ll_c
2164
2165 end interface
2166
2167 character(len=*), intent(in) :: grid_name
2168 integer, intent(in) :: nbr_vertices
2169 integer, intent(in) :: nbr_cells
2170 integer, intent(in) :: nbr_vertices_per_cell_in
2171
2172 double precision, intent(in) :: x_vertices(nbr_vertices)
2173 double precision, intent(in) :: y_vertices(nbr_vertices)
2174
2175 integer, intent(in) :: cell_to_vertex_in( &
2176 nbr_vertices_per_cell_in, &
2177 nbr_cells)
2178
2179 integer, intent(out) :: grid_id
2180
2181 logical, optional, intent(in) :: use_ll_edges
2182
2183 integer :: nbr_vertices_per_cell(nbr_cells)
2184 integer :: cell_to_vertex(nbr_vertices_per_cell_in,nbr_cells)
2185 logical :: use_ll_edges_
2186
2187 nbr_vertices_per_cell(:) = nbr_vertices_per_cell_in
2188
2189 yac_fassert(all(cell_to_vertex_in > 0), "ERROR(yac_fdef_grid_unstruct_dble): all entries of cell_to_vertex have to be > 0")
2190
2191 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")
2192
2193 cell_to_vertex(:,:) = cell_to_vertex_in(:,:) - 1
2194
2195 if (present(use_ll_edges)) then
2196 use_ll_edges_ = use_ll_edges
2197 else
2198 use_ll_edges_ = .false.
2199 end if
2200
2201 if (use_ll_edges_) then
2202 call yac_cdef_grid_unstruct_ll_c ( trim(grid_name) // c_null_char, &
2203 nbr_vertices, &
2204 nbr_cells, &
2205 nbr_vertices_per_cell, &
2206 x_vertices, &
2207 y_vertices, &
2208 cell_to_vertex, &
2209 grid_id )
2210 else
2211 call yac_cdef_grid_unstruct_c ( trim(grid_name) // c_null_char, &
2212 nbr_vertices, &
2213 nbr_cells, &
2214 nbr_vertices_per_cell, &
2215 x_vertices, &
2216 y_vertices, &
2217 cell_to_vertex, &
2218 grid_id )
2219 end if
2220
2221end subroutine yac_fdef_grid_unstruct_dble
2222
2230subroutine yac_fdef_grid_curve2d_real ( grid_name, &
2231 nbr_vertices, &
2232 cyclic, &
2233 x_vertices_real, &
2234 y_vertices_real, &
2235 grid_id )
2236
2237 use yac, dummy => yac_fdef_grid_curve2d_real
2238
2239 implicit none
2240
2241 character(len=*), intent(in) :: grid_name
2242 integer, intent(in) :: nbr_vertices(2)
2243 integer, intent(in) :: cyclic(2)
2244 real, intent(in) :: &
2245 x_vertices_real(nbr_vertices(1),nbr_vertices(2))
2246 real, intent(in) :: &
2247 y_vertices_real(nbr_vertices(1),nbr_vertices(2))
2248 integer, intent(out) :: grid_id
2249
2250 double precision :: x_vertices(nbr_vertices(1),nbr_vertices(2))
2251 double precision :: y_vertices(nbr_vertices(1),nbr_vertices(2))
2252
2253 x_vertices(:,:) = dble(x_vertices_real(:,:))
2254 y_vertices(:,:) = dble(y_vertices_real(:,:))
2255
2256 call yac_fdef_grid_curve2d_dble ( grid_name, &
2257 nbr_vertices, &
2258 cyclic, &
2259 x_vertices, &
2260 y_vertices, &
2261 grid_id )
2262
2263end subroutine yac_fdef_grid_curve2d_real
2264
2272subroutine yac_fdef_grid_curve2d_dble ( grid_name, &
2273 nbr_vertices, &
2274 cyclic, &
2275 x_vertices, &
2276 y_vertices, &
2277 grid_id )
2278
2279 use, intrinsic :: iso_c_binding, only : c_null_char
2280 use yac, dummy => yac_fdef_grid_curve2d_dble
2281
2282 implicit none
2283
2284 interface
2285
2286 subroutine yac_cdef_grid_curve2d_c ( grid_name, &
2287 nbr_vertices, &
2288 cyclic, &
2289 x_vertices, &
2290 y_vertices, &
2291 grid_id ) &
2292 bind( c, name='yac_cdef_grid_curve2d' )
2293
2294 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2295
2296 character ( kind=c_char ), dimension(*) :: grid_name
2297 integer ( kind=c_int ) :: nbr_vertices(2)
2298 integer ( kind=c_int ) :: cyclic(2)
2299 real ( kind=c_double ) :: x_vertices(nbr_vertices(1),nbr_vertices(2))
2300 real ( kind=c_double ) :: y_vertices(nbr_vertices(1),nbr_vertices(2))
2301 integer ( kind=c_int ) :: grid_id
2302
2303 end subroutine yac_cdef_grid_curve2d_c
2304
2305 end interface
2306
2307 character(len=*), intent(in) :: grid_name
2308 integer, intent(in) :: nbr_vertices(2)
2309 integer, intent(in) :: cyclic(2)
2310 double precision, intent(in) :: &
2311 x_vertices(nbr_vertices(1),nbr_vertices(2))
2312 double precision, intent(in) :: &
2313 y_vertices(nbr_vertices(1),nbr_vertices(2))
2314 integer, intent(out) :: grid_id
2315
2316 call yac_cdef_grid_curve2d_c ( trim(grid_name) // c_null_char, &
2317 nbr_vertices, &
2318 cyclic, &
2319 x_vertices, &
2320 y_vertices, &
2321 grid_id )
2322
2323end subroutine yac_fdef_grid_curve2d_dble
2324
2332subroutine yac_fdef_grid_reg2d_real ( grid_name, &
2333 nbr_vertices, &
2334 cyclic, &
2335 x_vertices_real, &
2336 y_vertices_real, &
2337 grid_id )
2338
2339 use yac, dummy => yac_fdef_grid_reg2d_real
2340
2341 implicit none
2342
2343 character(len=*), intent(in) :: grid_name
2344 integer, intent(in) :: nbr_vertices(2)
2345 integer, intent(in) :: cyclic(2)
2346 real, intent(in) :: x_vertices_real(nbr_vertices(1))
2347 real, intent(in) :: y_vertices_real(nbr_vertices(2))
2348 integer, intent(out) :: grid_id
2349
2350 double precision :: x_vertices(nbr_vertices(1))
2351 double precision :: y_vertices(nbr_vertices(2))
2352
2353 x_vertices(:) = dble(x_vertices_real(:))
2354 y_vertices(:) = dble(y_vertices_real(:))
2355
2356 call yac_fdef_grid_reg2d_dble ( grid_name, &
2357 nbr_vertices, &
2358 cyclic, &
2359 x_vertices, &
2360 y_vertices, &
2361 grid_id )
2362
2363end subroutine yac_fdef_grid_reg2d_real
2364
2372subroutine yac_fdef_grid_reg2d_dble ( grid_name, &
2373 nbr_vertices, &
2374 cyclic, &
2375 x_vertices, &
2376 y_vertices, &
2377 grid_id )
2378
2379 use, intrinsic :: iso_c_binding, only : c_null_char
2380 use yac, dummy => yac_fdef_grid_reg2d_dble
2381
2382 implicit none
2383
2384 interface
2385
2386 subroutine yac_cdef_grid_reg2d_c ( grid_name, &
2387 nbr_vertices, &
2388 cyclic, &
2389 x_vertices, &
2390 y_vertices, &
2391 grid_id ) &
2392 bind( c, name='yac_cdef_grid_reg2d' )
2393
2394 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
2395
2396 character ( kind=c_char ), dimension(*) :: grid_name
2397 integer ( kind=c_int ) :: nbr_vertices(2)
2398 integer ( kind=c_int ) :: cyclic(2)
2399 real ( kind=c_double ) :: x_vertices(nbr_vertices(1))
2400 real ( kind=c_double ) :: y_vertices(nbr_vertices(2))
2401 integer ( kind=c_int ) :: grid_id
2402
2403 end subroutine yac_cdef_grid_reg2d_c
2404
2405 end interface
2406
2407 character(len=*), intent(in) :: grid_name
2408 integer, intent(in) :: nbr_vertices(2)
2409 integer, intent(in) :: cyclic(2)
2410 double precision, intent(in) :: x_vertices(nbr_vertices(1))
2411 double precision, intent(in) :: y_vertices(nbr_vertices(2))
2412 integer, intent(out) :: grid_id
2413
2414 call yac_cdef_grid_reg2d_c ( trim(grid_name) // c_null_char, &
2415 nbr_vertices, &
2416 cyclic, &
2417 x_vertices, &
2418 y_vertices, &
2419 grid_id )
2420
2421end subroutine yac_fdef_grid_reg2d_dble
2422
2423! ------------------------- set global_index ------------------------------
2424
2425subroutine yac_fset_global_index ( global_index, &
2426 location, &
2427 grid_id )
2428
2429 use yac, dummy => yac_fset_global_index
2430
2431 implicit none
2432
2433 interface
2434
2435 subroutine yac_cset_global_index_c ( global_index, &
2436 location, &
2437 grid_id ) &
2438 bind( c, name='yac_cset_global_index' )
2439
2440 use, intrinsic :: iso_c_binding, only : c_int
2441
2442 integer ( kind=c_int ) :: global_index(*)
2443 integer ( kind=c_int ), value :: location
2444 integer ( kind=c_int ), value :: grid_id
2445
2446 end subroutine yac_cset_global_index_c
2447
2448 end interface
2449
2450 integer, intent(in) :: global_index(*)
2451 integer, intent(in) :: location
2452 integer, intent(in) :: grid_id
2453
2454 call yac_cset_global_index_c ( global_index, &
2455 location, &
2456 grid_id )
2457
2458end subroutine yac_fset_global_index
2459
2460! ------------------------- set core_mask ------------------------------
2461
2462subroutine yac_fset_core_lmask ( is_core, &
2463 location, &
2464 grid_id )
2465
2466 use yac, dummy => yac_fset_core_lmask
2467 use, intrinsic :: iso_c_binding, only : c_size_t
2468
2469 implicit none
2470
2471 logical, intent(in) :: is_core(*)
2474 integer, intent(in) :: location
2475 integer, intent(in) :: grid_id
2476
2477 integer (kind=c_size_t) :: i, count
2478 integer, allocatable :: int_is_core(:)
2479
2480 interface
2481
2482 function yac_cget_grid_size_c ( location, &
2483 grid_id ) &
2484 result( grid_size ) &
2485 bind( c, name='yac_cget_grid_size' )
2486
2487 use, intrinsic :: iso_c_binding, only : c_int, c_size_t
2488
2489 integer ( kind=c_int ), value :: location
2490 integer ( kind=c_int ), value :: grid_id
2491 integer ( kind=c_size_t) :: grid_size
2492
2493 end function yac_cget_grid_size_c
2494
2495 end interface
2496
2497 count = yac_cget_grid_size_c(location, grid_id)
2498 allocate(int_is_core(count))
2499
2500 do i = 1, count
2501 if ( is_core(i) ) then
2502 int_is_core(i) = 1
2503 else
2504 int_is_core(i) = 0
2505 endif
2506 enddo
2507
2508 call yac_fset_core_imask ( int_is_core, &
2509 location, &
2510 grid_id )
2511
2512end subroutine yac_fset_core_lmask
2513
2514subroutine yac_fset_core_imask ( is_core, &
2515 location, &
2516 grid_id )
2517
2518 use yac, dummy => yac_fset_core_imask
2519
2520 implicit none
2521
2522 interface
2523
2524 subroutine yac_cset_core_mask_c ( mask, &
2525 location, &
2526 grid_id ) &
2527 bind( c, name='yac_cset_core_mask' )
2528
2529 use, intrinsic :: iso_c_binding, only : c_int
2530
2531 integer ( kind=c_int ) :: mask(*)
2532 integer ( kind=c_int ), value :: location
2533 integer ( kind=c_int ), value :: grid_id
2534
2535 end subroutine yac_cset_core_mask_c
2536
2537 end interface
2538
2539
2540 integer, intent(in) :: is_core(*)
2543 integer, intent(in) :: location
2544 integer, intent(in) :: grid_id
2545
2546 call yac_cset_core_mask_c ( is_core, &
2547 location, &
2548 grid_id )
2549
2550end subroutine yac_fset_core_imask
2551
2552! ------------------------- set_mask ------------------------------
2553
2554subroutine yac_fset_lmask ( is_valid, &
2555 points_id )
2556
2557 use yac, dummy => yac_fset_lmask
2558 use, intrinsic :: iso_c_binding, only : c_size_t
2559
2560 implicit none
2561
2562 logical, intent(in) :: is_valid(*)
2565 integer, intent(in) :: points_id
2566
2567 integer ( kind=c_size_t) :: i, count
2568 integer, allocatable :: int_is_valid(:)
2569
2570 interface
2571
2572 function yac_cget_points_size_c ( points_id ) &
2573 result( points_size ) &
2574 bind( c, name='yac_cget_points_size' )
2575
2576 use, intrinsic :: iso_c_binding, only : c_int, c_size_t
2577
2578 integer ( kind=c_int ), value :: points_id
2579 integer ( kind=c_size_t) :: points_size
2580
2581 end function yac_cget_points_size_c
2582
2583 end interface
2584
2585 count = yac_cget_points_size_c(points_id)
2586 allocate(int_is_valid(count))
2587
2588 do i = 1, count
2589 int_is_valid(i) = merge(1,0,is_valid(i))
2590 enddo
2591
2592 call yac_fset_imask ( int_is_valid, points_id )
2593
2594end subroutine yac_fset_lmask
2595
2596subroutine yac_fset_imask ( is_valid, &
2597 points_id )
2598
2599 use yac, dummy => yac_fset_imask
2600
2601 implicit none
2602
2603 interface
2604
2605 subroutine yac_cset_mask_c ( is_valid, &
2606 points_id ) &
2607 bind( c, name='yac_cset_mask' )
2608
2609 use, intrinsic :: iso_c_binding, only : c_int
2610
2611 integer ( kind=c_int ) :: is_valid(*)
2612 integer ( kind=c_int ), value :: points_id
2613
2614 end subroutine yac_cset_mask_c
2615
2616 end interface
2617
2618 integer, intent(in) :: is_valid(*)
2621 integer, intent(in) :: points_id
2622
2623 call yac_cset_mask_c ( is_valid, points_id )
2624
2625end subroutine yac_fset_imask
2626
2627! ------------------------- def_mask ------------------------------
2628
2629subroutine yac_fdef_lmask ( grid_id, &
2630 nbr_points, &
2631 location, &
2632 is_valid, &
2633 mask_id )
2634
2635 use yac, dummy => yac_fdef_lmask
2636
2637 implicit none
2638
2639 integer, intent(in) :: grid_id
2640 integer, intent(in) :: nbr_points
2641 integer, intent(in) :: location
2642 logical, intent(in) :: is_valid(*)
2645 integer, intent(out) :: mask_id
2646
2647 integer :: i
2648 integer, allocatable :: int_is_valid(:)
2649
2650 allocate(int_is_valid(nbr_points))
2651
2652 do i = 1, nbr_points
2653 int_is_valid(i) = merge(1,0,is_valid(i))
2654 enddo
2655
2656 call yac_fdef_imask ( grid_id, &
2657 nbr_points, &
2658 location, &
2659 int_is_valid, &
2660 mask_id )
2661
2662end subroutine yac_fdef_lmask
2663
2664subroutine yac_fdef_imask ( grid_id, &
2665 nbr_points, &
2666 location, &
2667 is_valid, &
2668 mask_id )
2669
2670 use yac, dummy => yac_fdef_imask
2671
2672 implicit none
2673
2674 interface
2675
2676 subroutine yac_cdef_mask_c ( grid_id, &
2677 nbr_points, &
2678 location, &
2679 is_valid, &
2680 mask_id ) &
2681 bind( c, name='yac_cdef_mask' )
2682
2683 use, intrinsic :: iso_c_binding, only : c_int
2684
2685 integer ( kind=c_int ), value :: grid_id
2686 integer ( kind=c_int ), value :: nbr_points
2687 integer ( kind=c_int ), value :: location
2688 integer ( kind=c_int ) :: is_valid(*)
2689 integer ( kind=c_int ) :: mask_id
2690
2691 end subroutine yac_cdef_mask_c
2692
2693 end interface
2694
2695 integer, intent(in) :: grid_id
2696 integer, intent(in) :: nbr_points
2697 integer, intent(in) :: location
2698 integer, intent(in) :: is_valid(*)
2701 integer, intent(out) :: mask_id
2702
2703 call yac_cdef_mask_c ( grid_id, &
2704 nbr_points, &
2705 location, &
2706 is_valid, &
2707 mask_id )
2708
2709end subroutine yac_fdef_imask
2710
2711! ------------------------- def_mask_named ------------------------
2712
2713subroutine yac_fdef_lmask_named ( grid_id, &
2714 nbr_points, &
2715 location, &
2716 is_valid, &
2717 name, &
2718 mask_id )
2719
2720 use yac, dummy => yac_fdef_lmask_named
2721
2722 implicit none
2723
2724 integer, intent(in) :: grid_id
2725 integer, intent(in) :: nbr_points
2726 integer, intent(in) :: location
2727 logical, intent(in) :: is_valid(*)
2730 character(len=*), intent(in) :: name
2731 integer, intent(out) :: mask_id
2732
2733 integer :: i
2734 integer, allocatable :: int_is_valid(:)
2735
2736 allocate(int_is_valid(nbr_points))
2737
2738 do i = 1, nbr_points
2739 int_is_valid(i) = merge(1,0,is_valid(i))
2740 enddo
2741
2742 call yac_fdef_imask_named ( grid_id, &
2743 nbr_points, &
2744 location, &
2745 int_is_valid, &
2746 name, &
2747 mask_id )
2748
2749end subroutine yac_fdef_lmask_named
2750
2751subroutine yac_fdef_imask_named ( grid_id, &
2752 nbr_points, &
2753 location, &
2754 is_valid, &
2755 name, &
2756 mask_id )
2757
2758 use, intrinsic :: iso_c_binding, only : c_null_char
2759 use yac, dummy => yac_fdef_imask_named
2761
2762 implicit none
2763
2764 interface
2765
2766 subroutine yac_cdef_mask_named_c ( grid_id, &
2767 nbr_points, &
2768 location, &
2769 is_valid, &
2770 name, &
2771 mask_id ) &
2772 bind( c, name='yac_cdef_mask_named' )
2773
2774 use, intrinsic :: iso_c_binding, only : c_int, c_char
2775
2776 integer ( kind=c_int ), value :: grid_id
2777 integer ( kind=c_int ), value :: nbr_points
2778 integer ( kind=c_int ), value :: location
2779 integer ( kind=c_int ) :: is_valid(*)
2780 character ( kind=c_char ), dimension(*) :: name
2781 integer ( kind=c_int ) :: mask_id
2782
2783 end subroutine yac_cdef_mask_named_c
2784
2785 end interface
2786
2787 integer, intent(in) :: grid_id
2788 integer, intent(in) :: nbr_points
2789 integer, intent(in) :: location
2790 integer, intent(in) :: is_valid(*)
2793 character(len=*), intent(in) :: name
2794 integer, intent(out) :: mask_id
2795
2796 yac_check_string_len( "yac_fdef_imask_named", name )
2797
2798 call yac_cdef_mask_named_c ( grid_id, &
2799 nbr_points, &
2800 location, &
2801 is_valid, &
2802 trim(name) // c_null_char, &
2803 mask_id )
2804
2805end subroutine yac_fdef_imask_named
2806
2807! ----------------------------- def_field -------------------------------
2808
2809subroutine yac_fdef_field ( field_name, &
2810 component_id, &
2811 point_ids, &
2812 num_pointsets, &
2813 collection_size, &
2814 timestep, &
2815 time_unit, &
2816 field_id )
2817
2818 use, intrinsic :: iso_c_binding, only : c_null_char
2819 use yac, dummy => yac_fdef_field
2821
2822 implicit none
2823
2824 interface
2825
2826 subroutine yac_cdef_field_c ( field_name, &
2827 component_id, &
2828 point_ids, &
2829 num_pointsets, &
2830 collection_size, &
2831 timestep, &
2832 time_unit, &
2833 field_id ) &
2834 bind( c, name='yac_cdef_field' )
2835
2836 use, intrinsic :: iso_c_binding, only : c_int, c_char
2837
2838 character ( kind=c_char ), dimension(*) :: field_name
2839 integer ( kind=c_int ), value :: component_id
2840 integer ( kind=c_int ) :: point_ids(*)
2841 integer ( kind=c_int ), value :: num_pointsets
2842 integer ( kind=c_int ), value :: collection_size
2843 character ( kind=c_char ), dimension(*) :: timestep
2844 integer ( kind=c_int ), value :: time_unit
2845 integer ( kind=c_int ) :: field_id
2846
2847 end subroutine yac_cdef_field_c
2848
2849 end interface
2850
2851 !
2852 ! Definition of coupling fields
2853 !
2854 character(len=*), intent (in) :: field_name
2855 integer, intent (in) :: component_id
2856 integer, intent (in) :: point_ids(*)
2857 integer, intent (in) :: num_pointsets
2858 integer, intent (in) :: collection_size
2859 character(len=*), intent (in) :: timestep
2860 integer, intent (in) :: time_unit
2861 integer, intent (out) :: field_id
2862
2863 yac_check_string_len( "yac_fdef_field", field_name )
2864 yac_check_string_len( "yac_fdef_field", timestep )
2865
2866
2867 call yac_cdef_field_c ( trim(field_name) // c_null_char, &
2868 component_id, &
2869 point_ids, &
2870 num_pointsets, &
2871 collection_size, &
2872 trim(timestep) // c_null_char, &
2873 time_unit, &
2874 field_id )
2875
2876end subroutine yac_fdef_field
2877
2878! ----------------------------- def_field_mask---------------------------
2879
2880subroutine yac_fdef_field_mask ( field_name, &
2881 component_id, &
2882 point_ids, &
2883 mask_ids, &
2884 num_pointsets, &
2885 collection_size, &
2886 timestep, &
2887 time_unit, &
2888 field_id )
2889
2890 use, intrinsic :: iso_c_binding, only : c_null_char
2891 use yac, dummy => yac_fdef_field_mask
2893
2894 implicit none
2895
2896 interface
2897
2898 subroutine yac_cdef_field_mask_c ( field_name, &
2899 component_id, &
2900 point_ids, &
2901 mask_ids, &
2902 num_pointsets, &
2903 collection_size, &
2904 timestep, &
2905 time_unit, &
2906 field_id ) &
2907 bind( c, name='yac_cdef_field_mask' )
2908
2909 use, intrinsic :: iso_c_binding, only : c_int, c_char
2910
2911 character ( kind=c_char ), dimension(*) :: field_name
2912 integer ( kind=c_int ), value :: component_id
2913 integer ( kind=c_int ) :: point_ids(*)
2914 integer ( kind=c_int ) :: mask_ids(*)
2915 integer ( kind=c_int ), value :: num_pointsets
2916 integer ( kind=c_int ), value :: collection_size
2917 character ( kind=c_char ), dimension(*) :: timestep
2918 integer ( kind=c_int ), value :: time_unit
2919 integer ( kind=c_int ) :: field_id
2920
2921 end subroutine yac_cdef_field_mask_c
2922
2923 end interface
2924
2925
2926 !
2927 ! Definition of coupling fields
2928 !
2929 character(len=*), intent (in) :: field_name
2930 integer, intent (in) :: component_id
2931 integer, intent (in) :: point_ids(*)
2932 integer, intent (in) :: mask_ids(*)
2933 integer, intent (in) :: num_pointsets
2934 integer, intent (in) :: collection_size
2935 character(len=*), intent (in) :: timestep
2936 integer, intent (in) :: time_unit
2937 integer, intent (out) :: field_id
2938
2939 yac_check_string_len( "yac_fdef_field_mask", field_name )
2940 yac_check_string_len( "yac_fdef_field_mask", timestep )
2941
2942 call yac_cdef_field_mask_c ( trim(field_name) // c_null_char, &
2943 component_id, &
2944 point_ids, &
2945 mask_ids, &
2946 num_pointsets, &
2947 collection_size, &
2948 trim(timestep) // c_null_char, &
2949 time_unit, &
2950 field_id )
2951
2952end subroutine yac_fdef_field_mask
2953
2954! -----------------------------------------------------------------------
2955
2956subroutine yac_fcheck_field_dimensions( field_id, &
2957 collection_size, &
2958 num_interp_fields, &
2959 interp_field_sizes )
2960
2961 use yac, dummy => yac_fcheck_field_dimensions
2962
2963 implicit none
2964
2965 interface
2966
2967 subroutine yac_ccheck_field_dimensions_c ( field_id, &
2968 collection_size, &
2969 num_interp_fields, &
2970 interp_field_sizes ) &
2971 bind( c, name='yac_ccheck_field_dimensions' )
2972
2973 use, intrinsic :: iso_c_binding, only : c_int
2974
2975 integer ( kind=c_int ), value :: field_id
2976 integer ( kind=c_int ), value :: collection_size
2977 integer ( kind=c_int ), value :: num_interp_fields
2978 integer ( kind=c_int ), dimension(*) :: interp_field_sizes
2979
2980 end subroutine yac_ccheck_field_dimensions_c
2981
2982 end interface
2983
2984 integer, intent (in) :: field_id
2985 integer, intent (in) :: collection_size
2986 integer, intent (in) :: num_interp_fields
2988 integer, intent (in) :: interp_field_sizes(num_interp_fields)
2990
2991 call yac_ccheck_field_dimensions_c(field_id, &
2992 collection_size, &
2993 num_interp_fields, &
2994 interp_field_sizes)
2995
2996end subroutine yac_fcheck_field_dimensions
2997
2998! ---------------------------------- put --------------------------------
3007subroutine yac_fput_real ( field_id, &
3008 nbr_hor_points, &
3009 nbr_pointsets, &
3010 collection_size, &
3011 send_field, &
3012 info, &
3013 ierror )
3014
3015 use yac, dummy => yac_fput_real
3017
3018 implicit none
3019
3020 integer, intent (in) :: field_id
3021 integer, intent (in) :: nbr_hor_points
3022 integer, intent (in) :: nbr_pointsets
3023 integer, intent (in) :: collection_size
3024 real, intent (in) :: send_field(nbr_hor_points, &
3025 nbr_pointsets, &
3026 collection_size)
3027 integer, intent (out) :: info
3028 integer, intent (out) :: ierror
3029
3030 double precision :: send_field_dble(nbr_hor_points, &
3031 nbr_pointsets, &
3032 collection_size)
3033 integer :: i
3034
3036 field_id, collection_size, nbr_pointsets, &
3037 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
3038
3039 call send_field_to_dble(field_id, &
3040 nbr_hor_points, &
3041 nbr_pointsets, &
3042 collection_size, &
3043 send_field, &
3044 send_field_dble)
3045
3046 call yac_fput_dble ( field_id, &
3047 nbr_hor_points, &
3048 nbr_pointsets, &
3049 collection_size, &
3050 send_field_dble, &
3051 info, &
3052 ierror )
3053
3054end subroutine yac_fput_real
3055
3065subroutine yac_fput_frac_real ( field_id, &
3066 nbr_hor_points, &
3067 nbr_pointsets, &
3068 collection_size, &
3069 send_field, &
3070 send_frac_mask, &
3071 info, &
3072 ierror )
3073
3074 use yac, dummy => yac_fput_frac_real
3076
3077 implicit none
3078
3079 integer, intent (in) :: field_id
3080 integer, intent (in) :: nbr_hor_points
3081 integer, intent (in) :: nbr_pointsets
3082 integer, intent (in) :: collection_size
3083 real, intent (in) :: send_field(nbr_hor_points, &
3084 nbr_pointsets, &
3085 collection_size)
3086 real, intent (in) :: send_frac_mask(nbr_hor_points, &
3087 nbr_pointsets, &
3088 collection_size)
3089 integer, intent (out) :: info
3090 integer, intent (out) :: ierror
3091
3092 double precision :: send_field_dble(nbr_hor_points, &
3093 nbr_pointsets, &
3094 collection_size)
3095 double precision :: send_frac_mask_dble(nbr_hor_points, &
3096 nbr_pointsets, &
3097 collection_size)
3098 integer :: i
3099
3101 field_id, collection_size, nbr_pointsets, &
3102 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
3103
3104 call send_field_to_dble(field_id, &
3105 nbr_hor_points, &
3106 nbr_pointsets, &
3107 collection_size, &
3108 send_field, &
3109 send_field_dble, &
3110 send_frac_mask, &
3111 send_frac_mask_dble)
3112
3113 call yac_fput_frac_dble ( field_id, &
3114 nbr_hor_points, &
3115 nbr_pointsets, &
3116 collection_size, &
3117 send_field_dble, &
3118 send_frac_mask_dble, &
3119 info, &
3120 ierror )
3121
3122end subroutine yac_fput_frac_real
3123
3131subroutine yac_fput_real_ptr ( field_id, &
3132 nbr_pointsets, &
3133 collection_size, &
3134 send_field, &
3135 info, &
3136 ierror )
3137
3138 use yac, dummy => yac_fput_real_ptr
3140
3141 implicit none
3142
3143 integer, intent (in) :: field_id
3144 integer, intent (in) :: nbr_pointsets
3145 integer, intent (in) :: collection_size
3146 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
3147 collection_size)
3148 integer, intent (out) :: info
3149 integer, intent (out) :: ierror
3150
3151 integer :: i, j
3152 type(yac_dble_ptr) :: send_field_dble(nbr_pointsets, &
3153 collection_size)
3154
3156 field_id, collection_size, nbr_pointsets, &
3157 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
3158
3159 call send_field_to_dble_ptr(field_id, &
3160 nbr_pointsets, &
3161 collection_size, &
3162 send_field, &
3163 send_field_dble)
3164
3165 call yac_fput_dble_ptr ( field_id, &
3166 nbr_pointsets, &
3167 collection_size, &
3168 send_field_dble, &
3169 info, &
3170 ierror )
3171
3172 do i = 1, collection_size
3173 do j = 1, nbr_pointsets
3174 deallocate(send_field_dble(j, i)%p)
3175 end do
3176 end do
3177
3178end subroutine yac_fput_real_ptr
3179
3188subroutine yac_fput_frac_real_ptr ( field_id, &
3189 nbr_pointsets, &
3190 collection_size, &
3191 send_field, &
3192 send_frac_mask, &
3193 info, &
3194 ierror )
3195
3196 use yac, dummy => yac_fput_frac_real_ptr
3198
3199 implicit none
3200
3201 integer, intent (in) :: field_id
3202 integer, intent (in) :: nbr_pointsets
3203 integer, intent (in) :: collection_size
3204 type(yac_real_ptr), intent (in) :: send_field(nbr_pointsets, &
3205 collection_size)
3206 type(yac_real_ptr), intent (in) :: send_frac_mask(nbr_pointsets, &
3207 collection_size)
3208 integer, intent (out) :: info
3209 integer, intent (out) :: ierror
3210
3211 integer :: i, j
3212 type(yac_dble_ptr) :: send_field_dble(nbr_pointsets, &
3213 collection_size)
3214 type(yac_dble_ptr) :: send_frac_mask_dble(nbr_pointsets, &
3215 collection_size)
3216
3218 field_id, collection_size, nbr_pointsets, &
3219 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
3220
3221 call send_field_to_dble_ptr(field_id, &
3222 nbr_pointsets, &
3223 collection_size, &
3224 send_field, &
3225 send_field_dble, &
3226 send_frac_mask, &
3227 send_frac_mask_dble)
3228
3229 call yac_fput_frac_dble_ptr ( field_id, &
3230 nbr_pointsets, &
3231 collection_size, &
3232 send_field_dble, &
3233 send_frac_mask_dble, &
3234 info, &
3235 ierror )
3236
3237 do i = 1, collection_size
3238 do j = 1, nbr_pointsets
3239 deallocate(send_field_dble(j, i)%p)
3240 deallocate(send_frac_mask_dble(j, i)%p)
3241 end do
3242 end do
3243
3244end subroutine yac_fput_frac_real_ptr
3245
3253subroutine yac_fput_single_pointset_real ( field_id, &
3254 nbr_hor_points, &
3255 collection_size, &
3256 send_field, &
3257 info, &
3258 ierror )
3259
3262
3263 implicit none
3264
3265 integer, intent (in) :: field_id
3266 integer, intent (in) :: nbr_hor_points
3267 integer, intent (in) :: collection_size
3268 real, intent (in) :: send_field(nbr_hor_points, &
3269 collection_size)
3270 integer, intent (out) :: info
3271 integer, intent (out) :: ierror
3272
3273 double precision :: send_field_dble(nbr_hor_points, &
3274 collection_size)
3275
3277 field_id, collection_size, 1, (/nbr_hor_points/) )
3278
3279 call send_field_to_dble_single(field_id, &
3280 nbr_hor_points, &
3281 collection_size, &
3282 send_field, &
3283 send_field_dble)
3284
3285 call yac_fput_single_pointset_dble ( field_id, &
3286 nbr_hor_points, &
3287 collection_size, &
3288 send_field_dble, &
3289 info, &
3290 ierror )
3291
3292end subroutine yac_fput_single_pointset_real
3293
3303 nbr_hor_points, &
3304 collection_size, &
3305 send_field, &
3306 send_frac_mask, &
3307 info, &
3308 ierror )
3309
3312
3313 implicit none
3314
3315 integer, intent (in) :: field_id
3316 integer, intent (in) :: nbr_hor_points
3317 integer, intent (in) :: collection_size
3318 real, intent (in) :: send_field(nbr_hor_points, &
3319 collection_size)
3320 real, intent (in) :: send_frac_mask(nbr_hor_points, &
3321 collection_size)
3322 integer, intent (out) :: info
3323 integer, intent (out) :: ierror
3324
3325 double precision :: send_field_dble(nbr_hor_points, &
3326 collection_size)
3327 double precision :: send_frac_mask_dble(nbr_hor_points, &
3328 collection_size)
3330 field_id, collection_size, 1, (/nbr_hor_points/) )
3331
3332 call send_field_to_dble_single(field_id, &
3333 nbr_hor_points, &
3334 collection_size, &
3335 send_field, &
3336 send_field_dble, &
3337 send_frac_mask, &
3338 send_frac_mask_dble)
3339
3340 call yac_fput_frac_single_pointset_dble ( field_id, &
3341 nbr_hor_points, &
3342 collection_size, &
3343 send_field_dble, &
3344 send_frac_mask_dble, &
3345 info, &
3346 ierror )
3347
3349
3358subroutine yac_fput_dble ( field_id, &
3359 nbr_hor_points, &
3360 nbr_pointsets, &
3361 collection_size, &
3362 send_field, &
3363 info, &
3364 ierror )
3365
3366 use yac, dummy => yac_fput_dble
3367
3368 implicit none
3369
3370 interface
3371
3372 subroutine yac_cput__c ( field_id, &
3373 collection_size, &
3374 send_field, &
3375 info, &
3376 ierror ) bind ( c, name='yac_cput_' )
3377
3378 use, intrinsic :: iso_c_binding, only : c_int, c_double
3379
3380 integer ( kind=c_int ), value :: field_id
3381 integer ( kind=c_int ), value :: collection_size
3382 real ( kind=c_double ) :: send_field(*)
3383 integer ( kind=c_int ) :: info
3384 integer ( kind=c_int ) :: ierror
3385
3386 end subroutine yac_cput__c
3387
3388 end interface
3389
3390 integer, intent (in) :: field_id
3391 integer, intent (in) :: nbr_hor_points
3392 integer, intent (in) :: nbr_pointsets
3393 integer, intent (in) :: collection_size
3394 double precision, intent (in) :: send_field(nbr_hor_points, &
3395 nbr_pointsets, &
3396 collection_size)
3397 integer, intent (out) :: info
3398 integer, intent (out) :: ierror
3399
3400 integer :: i
3401
3403 field_id, collection_size, nbr_pointsets, &
3404 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
3405
3406 call yac_cput__c ( field_id, &
3407 collection_size, &
3408 send_field, &
3409 info, &
3410 ierror )
3411
3412end subroutine yac_fput_dble
3413
3423subroutine yac_fput_frac_dble ( field_id, &
3424 nbr_hor_points, &
3425 nbr_pointsets, &
3426 collection_size, &
3427 send_field, &
3428 send_frac_mask, &
3429 info, &
3430 ierror )
3431
3432 use yac, dummy => yac_fput_frac_dble
3433
3434 implicit none
3435
3436 interface
3437
3438 subroutine yac_cput_frac__c ( field_id, &
3439 collection_size, &
3440 send_field, &
3441 send_frac_mask, &
3442 info, &
3443 ierror ) &
3444 bind( c, name='yac_cput_frac_' )
3445
3446 use, intrinsic :: iso_c_binding, only : c_int, c_double
3447
3448 integer ( kind=c_int ), value :: field_id
3449 integer ( kind=c_int ), value :: collection_size
3450 real ( kind=c_double ) :: send_field(*)
3451 real ( kind=c_double ) :: send_frac_mask(*)
3452 integer ( kind=c_int ) :: info
3453 integer ( kind=c_int ) :: ierror
3454
3455 end subroutine yac_cput_frac__c
3456
3457 end interface
3458
3459 integer, intent (in) :: field_id
3460 integer, intent (in) :: nbr_hor_points
3461 integer, intent (in) :: nbr_pointsets
3462 integer, intent (in) :: collection_size
3463 double precision, intent (in) :: send_field(nbr_hor_points, &
3464 nbr_pointsets, &
3465 collection_size)
3466 double precision, intent (in) :: send_frac_mask(nbr_hor_points, &
3467 nbr_pointsets, &
3468 collection_size)
3469 integer, intent (out) :: info
3470 integer, intent (out) :: ierror
3471
3472 integer :: i
3473
3475 field_id, collection_size, nbr_pointsets, &
3476 (/(nbr_hor_points,i=1,nbr_pointsets)/) )
3477
3478 call yac_cput_frac__c ( field_id, &
3479 collection_size, &
3480 send_field, &
3481 send_frac_mask, &
3482 info, &
3483 ierror )
3484
3485end subroutine yac_fput_frac_dble
3486
3494subroutine yac_fput_dble_ptr ( field_id, &
3495 nbr_pointsets, &
3496 collection_size, &
3497 send_field, &
3498 info, &
3499 ierror )
3500
3501 use yac, dummy => yac_fput_dble_ptr
3503 use iso_c_binding, only: c_ptr
3504
3505 implicit none
3506
3507 interface
3508
3509 subroutine yac_cput_ptr__c ( field_id, &
3510 collection_size, &
3511 send_field, &
3512 info, &
3513 ierror ) &
3514 bind( c, name='yac_cput_ptr_' )
3515
3516 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
3517
3518 integer ( kind=c_int ), value :: field_id
3519 integer ( kind=c_int ), value :: collection_size
3520 type(c_ptr) :: send_field(*)
3521 integer ( kind=c_int ) :: info
3522 integer ( kind=c_int ) :: ierror
3523
3524 end subroutine yac_cput_ptr__c
3525
3526 end interface
3527
3528 integer, intent (in) :: field_id
3529 integer, intent (in) :: nbr_pointsets
3530 integer, intent (in) :: collection_size
3531 type(yac_dble_ptr), intent (in) :: send_field(nbr_pointsets, collection_size)
3532 integer, intent (out) :: info
3533 integer, intent (out) :: ierror
3534
3535 integer :: i, j
3536 type(c_ptr) :: send_field_(nbr_pointsets, collection_size)
3537
3539 field_id, collection_size, nbr_pointsets, &
3540 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
3541
3542 do i = 1, collection_size
3543 do j = 1, nbr_pointsets
3544 send_field_(j, i) = &
3545 yac_dble2cptr("yac_fput_dble_ptr", "send_field", send_field(j, i))
3546 end do
3547 end do
3548
3549 call yac_cput_ptr__c ( field_id, &
3550 collection_size, &
3551 send_field_, &
3552 info, &
3553 ierror )
3554
3555end subroutine yac_fput_dble_ptr
3556
3565subroutine yac_fput_frac_dble_ptr ( field_id, &
3566 nbr_pointsets, &
3567 collection_size, &
3568 send_field, &
3569 send_frac_mask, &
3570 info, &
3571 ierror )
3572
3574 use yac, dummy => yac_fput_frac_dble_ptr
3575 use iso_c_binding, only: c_ptr
3576
3577 implicit none
3578
3579 interface
3580
3581 subroutine yac_cput_frac_ptr__c ( field_id, &
3582 collection_size, &
3583 send_field, &
3584 send_frac_mask, &
3585 info, &
3586 ierror ) &
3587 bind( c, name='yac_cput_frac_ptr_' )
3588
3589 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
3590
3591 integer ( kind=c_int ), value :: field_id
3592 integer ( kind=c_int ), value :: collection_size
3593 type(c_ptr) :: send_field(*)
3594 type(c_ptr) :: send_frac_mask(*)
3595 integer ( kind=c_int ) :: info
3596 integer ( kind=c_int ) :: ierror
3597
3598 end subroutine yac_cput_frac_ptr__c
3599
3600 end interface
3601
3602 integer, intent (in) :: field_id
3603 integer, intent (in) :: nbr_pointsets
3604 integer, intent (in) :: collection_size
3605 type(yac_dble_ptr), intent (in) :: send_field(nbr_pointsets, collection_size)
3606 type(yac_dble_ptr), intent (in) :: send_frac_mask(nbr_pointsets, collection_size)
3607 integer, intent (out) :: info
3608 integer, intent (out) :: ierror
3609
3610 integer :: i, j
3611 type(c_ptr) :: send_field_(nbr_pointsets, collection_size)
3612 type(c_ptr) :: send_frac_mask_(nbr_pointsets, collection_size)
3613
3615 field_id, collection_size, nbr_pointsets, &
3616 (/(SIZE(send_field(i, 1)%p),i=1,nbr_pointsets)/) )
3617
3618 do i = 1, collection_size
3619 do j = 1, nbr_pointsets
3620 send_field_(j, i) = &
3621 yac_dble2cptr( &
3622 "yac_fput_frac_dble_ptr", "send_field", send_field(j, i))
3623 send_frac_mask_(j, i) = &
3624 yac_dble2cptr( &
3625 "yac_fput_frac_dble_ptr", "send_frac_mask", send_frac_mask(j, i))
3626 end do
3627 end do
3628
3629 call yac_cput_frac_ptr__c ( field_id, &
3630 collection_size, &
3631 send_field_, &
3632 send_frac_mask_, &
3633 info, &
3634 ierror )
3635
3636end subroutine yac_fput_frac_dble_ptr
3637
3645subroutine yac_fput_single_pointset_dble ( field_id, &
3646 nbr_hor_points, &
3647 collection_size, &
3648 send_field, &
3649 info, &
3650 ierror )
3651
3653
3654 implicit none
3655
3656 interface
3657
3658 subroutine yac_cput__c ( field_id, &
3659 collection_size, &
3660 send_field, &
3661 info, &
3662 ierror ) bind ( c, name='yac_cput_' )
3663
3664 use, intrinsic :: iso_c_binding, only : c_int, c_double
3665
3666 integer ( kind=c_int ), value :: field_id
3667 integer ( kind=c_int ), value :: collection_size
3668 real ( kind=c_double ) :: send_field(*)
3669 integer ( kind=c_int ) :: info
3670 integer ( kind=c_int ) :: ierror
3671
3672 end subroutine yac_cput__c
3673
3674 end interface
3675
3676 integer, intent (in) :: field_id
3677 integer, intent (in) :: nbr_hor_points
3678 integer, intent (in) :: collection_size
3679 double precision, intent (in) :: send_field(nbr_hor_points, &
3680 collection_size)
3681 integer, intent (out) :: info
3682 integer, intent (out) :: ierror
3683
3685 field_id, collection_size, 1, (/nbr_hor_points/) )
3686
3687 call yac_cput__c ( field_id, &
3688 collection_size, &
3689 send_field, &
3690 info, &
3691 ierror )
3692
3693end subroutine yac_fput_single_pointset_dble
3694
3704 nbr_hor_points, &
3705 collection_size, &
3706 send_field, &
3707 send_frac_mask, &
3708 info, &
3709 ierror )
3710
3712
3713 implicit none
3714
3715 interface
3716
3717 subroutine yac_cput_frac__c ( field_id, &
3718 collection_size, &
3719 send_field, &
3720 send_frac_mask, &
3721 info, &
3722 ierror ) &
3723 bind( c, name='yac_cput_frac_' )
3724
3725 use, intrinsic :: iso_c_binding, only : c_int, c_double
3726
3727 integer ( kind=c_int ), value :: field_id
3728 integer ( kind=c_int ), value :: collection_size
3729 real ( kind=c_double ) :: send_field(*)
3730 real ( kind=c_double ) :: send_frac_mask(*)
3731 integer ( kind=c_int ) :: info
3732 integer ( kind=c_int ) :: ierror
3733
3734 end subroutine yac_cput_frac__c
3735
3736 end interface
3737
3738 integer, intent (in) :: field_id
3739 integer, intent (in) :: nbr_hor_points
3740 integer, intent (in) :: collection_size
3741 double precision, intent (in) :: send_field(nbr_hor_points, &
3742 collection_size)
3743 double precision, intent (in) :: send_frac_mask(nbr_hor_points, &
3744 collection_size)
3745 integer, intent (out) :: info
3746 integer, intent (out) :: ierror
3747
3749 field_id, collection_size, 1, (/nbr_hor_points/) )
3750
3751 call yac_cput_frac__c ( field_id, &
3752 collection_size, &
3753 send_field, &
3754 send_frac_mask, &
3755 info, &
3756 ierror )
3757
3759
3760! ---------------------------------- get -------------------------------
3761
3762subroutine yac_fget_real ( field_id, &
3763 nbr_hor_points, &
3764 collection_size, &
3765 recv_field, &
3766 info, &
3767 ierror )
3768
3769 use yac, dummy => yac_fget_real
3771
3772 implicit none
3773
3774 integer, intent (in) :: field_id
3775 integer, intent (in) :: nbr_hor_points
3776 integer, intent (in) :: collection_size
3777 real, intent (inout) :: recv_field(nbr_hor_points, collection_size)
3778
3779 integer, intent (out) :: info
3780 integer, intent (out) :: ierror
3781
3782 double precision :: recv_field_dble(nbr_hor_points, collection_size)
3783
3785 field_id, collection_size, 1, (/nbr_hor_points/) )
3786
3787 call recv_field_to_dble(field_id, &
3788 nbr_hor_points, &
3789 collection_size, &
3790 recv_field, &
3791 recv_field_dble)
3792
3793 call yac_fget_dble ( field_id, &
3794 nbr_hor_points, &
3795 collection_size, &
3796 recv_field_dble, &
3797 info, &
3798 ierror )
3799
3800 call recv_field_from_dble(field_id, &
3801 nbr_hor_points, &
3802 collection_size, &
3803 recv_field_dble, &
3804 recv_field)
3805
3806end subroutine yac_fget_real
3807
3808subroutine yac_fget_real_ptr ( field_id, &
3809 collection_size, &
3810 recv_field, &
3811 info, &
3812 ierror )
3813
3814 use yac, dummy => yac_fget_real_ptr
3816
3817 implicit none
3818
3819 integer, intent (in) :: field_id
3820 integer, intent (in) :: collection_size
3821 type(yac_real_ptr) :: recv_field(collection_size)
3822 integer, intent (out) :: info
3823 integer, intent (out) :: ierror
3824
3825 type(yac_dble_ptr) :: recv_field_dble(collection_size)
3826
3828 field_id, collection_size, 1, (/SIZE(recv_field(1)%p, 1)/) )
3829
3830 call recv_field_to_dble_ptr(field_id, &
3831 collection_size, &
3832 recv_field, &
3833 recv_field_dble)
3834
3835 call yac_fget_dble_ptr ( field_id, &
3836 collection_size, &
3837 recv_field_dble, &
3838 info, &
3839 ierror )
3840
3841 call recv_field_from_dble_ptr(field_id, &
3842 collection_size, &
3843 recv_field_dble, &
3844 recv_field)
3845
3846end subroutine yac_fget_real_ptr
3847
3848subroutine yac_fget_dble ( field_id, &
3849 nbr_hor_points, &
3850 collection_size, &
3851 recv_field, &
3852 info, &
3853 ierror )
3854
3855 use yac, dummy => yac_fget_dble
3856
3857 implicit none
3858
3859 interface
3860
3861 subroutine yac_cget__c ( field_id, &
3862 collection_size, &
3863 recv_field, &
3864 info, &
3865 ierror ) bind ( c, name='yac_cget_' )
3866
3867 use, intrinsic :: iso_c_binding, only : c_int, c_double
3868
3869 integer ( kind=c_int ), value :: field_id
3870 integer ( kind=c_int ), value :: collection_size
3871 real ( kind=c_double ) :: recv_field(*)
3872 integer ( kind=c_int ) :: info
3873 integer ( kind=c_int ) :: ierror
3874
3875 end subroutine yac_cget__c
3876
3877 end interface
3878
3879 integer, intent (in) :: field_id
3880 integer, intent (in) :: nbr_hor_points
3881 integer, intent (in) :: collection_size
3882 double precision, intent (inout):: recv_field(nbr_hor_points, collection_size)
3883
3884 integer, intent (out) :: info
3885 integer, intent (out) :: ierror
3886
3888 field_id, collection_size, 1, (/nbr_hor_points/) )
3889
3890 call yac_cget__c ( field_id, &
3891 collection_size, &
3892 recv_field, &
3893 info, &
3894 ierror )
3895
3896end subroutine yac_fget_dble
3897
3898subroutine yac_fget_dble_ptr ( field_id, &
3899 collection_size, &
3900 recv_field, &
3901 info, &
3902 ierror )
3903
3905 use yac, dummy => yac_fget_dble_ptr
3906 use iso_c_binding, only: c_ptr
3907
3908 implicit none
3909
3910 interface
3911
3912 subroutine yac_cget_c ( field_id, &
3913 collection_size, &
3914 recv_field, &
3915 info, &
3916 ierror ) bind ( c, name='yac_cget' )
3917
3918 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
3919
3920 integer ( kind=c_int ), value :: field_id
3921 integer ( kind=c_int ), value :: collection_size
3922 type(c_ptr) :: recv_field(*)
3923 integer ( kind=c_int ) :: info
3924 integer ( kind=c_int ) :: ierror
3925
3926 end subroutine yac_cget_c
3927
3928 end interface
3929
3930 integer, intent (in) :: field_id
3931 integer, intent (in) :: collection_size
3932 type(yac_dble_ptr) :: recv_field(collection_size)
3933 integer, intent (out) :: info
3934 integer, intent (out) :: ierror
3935
3936 integer :: i
3937 type(c_ptr) :: recv_field_(collection_size)
3938
3940 field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
3941
3942 do i = 1, collection_size
3943 recv_field_(i) = yac_dble2cptr("yac_fget_dble_ptr", "recv_field", recv_field(i))
3944 end do
3945
3946 call yac_cget_c ( field_id, &
3947 collection_size, &
3948 recv_field_, &
3949 info, &
3950 ierror )
3951
3952end subroutine yac_fget_dble_ptr
3953
3954! ---------------------------------- get_async -------------------------------
3955
3956subroutine yac_fget_async_dble_ptr ( field_id, &
3957 collection_size, &
3958 recv_field, &
3959 info, &
3960 ierror )
3961
3963 use yac, dummy => yac_fget_async_dble_ptr
3964 use iso_c_binding, only: c_ptr
3965
3966 implicit none
3967
3968 interface
3969
3970 subroutine yac_cget_async_c ( field_id, &
3971 collection_size, &
3972 recv_field, &
3973 info, &
3974 ierror ) bind ( c, name='yac_cget_async' )
3975
3976 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
3977
3978 integer ( kind=c_int ), value :: field_id
3979 integer ( kind=c_int ), value :: collection_size
3980 type(c_ptr) :: recv_field(*)
3981 integer ( kind=c_int ) :: info
3982 integer ( kind=c_int ) :: ierror
3983
3984 end subroutine yac_cget_async_c
3985
3986 end interface
3987
3988 integer, intent (in) :: field_id
3989 integer, intent (in) :: collection_size
3990 type(yac_dble_ptr) :: recv_field(collection_size)
3991 integer, intent (out) :: info
3992 integer, intent (out) :: ierror
3993
3994 integer :: i
3995 type(c_ptr) :: recv_field_(collection_size)
3996
3998 field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
3999
4000 do i = 1, collection_size
4001 recv_field_(i) = yac_dble2cptr("yac_fget_async_dble_ptr", "recv_field", recv_field(i))
4002 end do
4003
4004 call yac_cget_async_c ( field_id, &
4005 collection_size, &
4006 recv_field_, &
4007 info, &
4008 ierror )
4009
4010end subroutine yac_fget_async_dble_ptr
4011
4012! ---------------------------------- exchange --------------------------------
4013
4014subroutine yac_fexchange_real ( send_field_id, &
4015 recv_field_id, &
4016 send_nbr_hor_points, &
4017 send_nbr_pointsets, &
4018 recv_nbr_hor_points, &
4019 collection_size, &
4020 send_field, &
4021 recv_field, &
4022 send_info, &
4023 recv_info, &
4024 ierror )
4025
4026 use yac, dummy => yac_fexchange_real
4028
4029 implicit none
4030
4031 integer, intent (in) :: send_field_id
4032 integer, intent (in) :: recv_field_id
4033 integer, intent (in) :: send_nbr_hor_points
4034 integer, intent (in) :: send_nbr_pointsets
4035 integer, intent (in) :: recv_nbr_hor_points
4036 integer, intent (in) :: collection_size
4037 real, intent (in) :: send_field(send_nbr_hor_points, &
4038 send_nbr_pointsets, &
4039 collection_size)
4040
4041 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
4042 collection_size)
4043
4044 integer, intent (out) :: send_info
4045 integer, intent (out) :: recv_info
4046 integer, intent (out) :: ierror
4047
4048 double precision :: send_buffer(send_nbr_hor_points, &
4049 send_nbr_pointsets, &
4050 collection_size)
4051 double precision :: recv_buffer(recv_nbr_hor_points, &
4052 collection_size)
4053
4054 integer :: i
4055
4057 send_field_id, collection_size, send_nbr_pointsets, &
4058 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
4060 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4061
4062 call send_field_to_dble(send_field_id, &
4063 send_nbr_hor_points, &
4064 send_nbr_pointsets, &
4065 collection_size, &
4066 send_field, &
4067 send_buffer)
4068 call recv_field_to_dble(recv_field_id, &
4069 recv_nbr_hor_points, &
4070 collection_size, &
4071 recv_field, &
4072 recv_buffer)
4073
4074 call yac_fexchange_dble ( send_field_id, &
4075 recv_field_id, &
4076 send_nbr_hor_points, &
4077 send_nbr_pointsets, &
4078 recv_nbr_hor_points, &
4079 collection_size, &
4080 send_buffer, &
4081 recv_buffer, &
4082 send_info, &
4083 recv_info, &
4084 ierror )
4085
4086 call recv_field_from_dble(recv_field_id, &
4087 recv_nbr_hor_points, &
4088 collection_size, &
4089 recv_buffer, &
4090 recv_field)
4091
4092end subroutine yac_fexchange_real
4093
4094subroutine yac_fexchange_frac_real ( send_field_id, &
4095 recv_field_id, &
4096 send_nbr_hor_points, &
4097 send_nbr_pointsets, &
4098 recv_nbr_hor_points, &
4099 collection_size, &
4100 send_field, &
4101 send_frac_mask, &
4102 recv_field, &
4103 send_info, &
4104 recv_info, &
4105 ierror )
4106
4107 use yac, dummy => yac_fexchange_frac_real
4109
4110 implicit none
4111
4112 integer, intent (in) :: send_field_id
4113 integer, intent (in) :: recv_field_id
4114 integer, intent (in) :: send_nbr_hor_points
4115 integer, intent (in) :: send_nbr_pointsets
4116 integer, intent (in) :: recv_nbr_hor_points
4117 integer, intent (in) :: collection_size
4118 real, intent (in) :: send_field(send_nbr_hor_points, &
4119 send_nbr_pointsets, &
4120 collection_size)
4121
4122 real, intent (in) :: send_frac_mask(send_nbr_hor_points, &
4123 send_nbr_pointsets, &
4124 collection_size)
4125
4126 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
4127 collection_size)
4128
4129 integer, intent (out) :: send_info
4130 integer, intent (out) :: recv_info
4131 integer, intent (out) :: ierror
4132
4133 double precision :: send_buffer(send_nbr_hor_points, &
4134 send_nbr_pointsets, &
4135 collection_size)
4136 double precision :: send_frac_mask_buffer(send_nbr_hor_points, &
4137 send_nbr_pointsets, &
4138 collection_size)
4139 double precision :: recv_buffer(recv_nbr_hor_points, &
4140 collection_size)
4141
4142 integer :: i
4143
4145 send_field_id, collection_size, send_nbr_pointsets, &
4146 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
4148 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4149
4150 call send_field_to_dble(send_field_id, &
4151 send_nbr_hor_points, &
4152 send_nbr_pointsets, &
4153 collection_size, &
4154 send_field, &
4155 send_buffer, &
4156 send_frac_mask, &
4157 send_frac_mask_buffer)
4158 call recv_field_to_dble(recv_field_id, &
4159 recv_nbr_hor_points, &
4160 collection_size, &
4161 recv_field, &
4162 recv_buffer)
4163
4164 call yac_fexchange_frac_dble ( send_field_id, &
4165 recv_field_id, &
4166 send_nbr_hor_points, &
4167 send_nbr_pointsets, &
4168 recv_nbr_hor_points, &
4169 collection_size, &
4170 send_buffer, &
4171 send_frac_mask_buffer, &
4172 recv_buffer, &
4173 send_info, &
4174 recv_info, &
4175 ierror )
4176
4177 call recv_field_from_dble(recv_field_id, &
4178 recv_nbr_hor_points, &
4179 collection_size, &
4180 recv_buffer, &
4181 recv_field)
4182
4183end subroutine yac_fexchange_frac_real
4184
4185subroutine yac_fexchange_real_ptr ( send_field_id, &
4186 recv_field_id, &
4187 send_nbr_pointsets, &
4188 collection_size, &
4189 send_field, &
4190 recv_field, &
4191 send_info, &
4192 recv_info, &
4193 ierror )
4194
4195 use yac, dummy => yac_fexchange_real_ptr
4197
4198 implicit none
4199
4200 integer, intent (in) :: send_field_id
4201 integer, intent (in) :: recv_field_id
4202 integer, intent (in) :: send_nbr_pointsets
4203 integer, intent (in) :: collection_size
4204 type(yac_real_ptr), intent (in) :: &
4205 send_field(send_nbr_pointsets, &
4206 collection_size)
4207
4208 type(yac_real_ptr) :: recv_field(collection_size)
4209
4210 integer, intent (out) :: send_info
4211 integer, intent (out) :: recv_info
4212 integer, intent (out) :: ierror
4213
4214 integer :: i, j
4215 type(yac_dble_ptr) :: send_field_dble(send_nbr_pointsets, collection_size)
4216 type(yac_dble_ptr) :: recv_field_dble(collection_size)
4217
4219 send_field_id, collection_size, send_nbr_pointsets, &
4220 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
4222 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
4223
4224 call send_field_to_dble_ptr(send_field_id, &
4225 send_nbr_pointsets, &
4226 collection_size, &
4227 send_field, &
4228 send_field_dble)
4229 call recv_field_to_dble_ptr(recv_field_id, &
4230 collection_size, &
4231 recv_field, &
4232 recv_field_dble)
4233
4234 call yac_fexchange_dble_ptr ( send_field_id, &
4235 recv_field_id, &
4236 send_nbr_pointsets, &
4237 collection_size, &
4238 send_field_dble, &
4239 recv_field_dble, &
4240 send_info, &
4241 recv_info, &
4242 ierror )
4243
4244 call recv_field_from_dble_ptr(recv_field_id, &
4245 collection_size, &
4246 recv_field_dble, &
4247 recv_field)
4248 do i = 1, collection_size
4249 do j = 1, send_nbr_pointsets
4250 deallocate(send_field_dble(j, i)%p)
4251 end do
4252 end do
4253
4254end subroutine yac_fexchange_real_ptr
4255
4256subroutine yac_fexchange_frac_real_ptr ( send_field_id, &
4257 recv_field_id, &
4258 send_nbr_pointsets, &
4259 collection_size, &
4260 send_field, &
4261 send_frac_mask, &
4262 recv_field, &
4263 send_info, &
4264 recv_info, &
4265 ierror )
4266
4267 use yac, dummy => yac_fexchange_frac_real_ptr
4269
4270 implicit none
4271
4272 integer, intent (in) :: send_field_id
4273 integer, intent (in) :: recv_field_id
4274 integer, intent (in) :: send_nbr_pointsets
4275 integer, intent (in) :: collection_size
4276 type(yac_real_ptr), intent (in) :: &
4277 send_field(send_nbr_pointsets, &
4278 collection_size)
4279
4280 type(yac_real_ptr), intent (in) :: &
4281 send_frac_mask(send_nbr_pointsets, &
4282 collection_size)
4283
4284 type(yac_real_ptr) :: recv_field(collection_size)
4285
4286 integer, intent (out) :: send_info
4287 integer, intent (out) :: recv_info
4288 integer, intent (out) :: ierror
4289
4290 integer :: i, j
4291 type(yac_dble_ptr) :: send_field_dble(send_nbr_pointsets, collection_size)
4292 type(yac_dble_ptr) :: send_frac_mask_dble(send_nbr_pointsets, collection_size)
4293 type(yac_dble_ptr) :: recv_field_dble(collection_size)
4294
4296 send_field_id, collection_size, send_nbr_pointsets, &
4297 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
4299 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
4300
4301 call send_field_to_dble_ptr(send_field_id, &
4302 send_nbr_pointsets, &
4303 collection_size, &
4304 send_field, &
4305 send_field_dble, &
4306 send_frac_mask, &
4307 send_frac_mask_dble)
4308 call recv_field_to_dble_ptr(recv_field_id, &
4309 collection_size, &
4310 recv_field, &
4311 recv_field_dble)
4312
4313 call yac_fexchange_frac_dble_ptr ( send_field_id, &
4314 recv_field_id, &
4315 send_nbr_pointsets, &
4316 collection_size, &
4317 send_field_dble, &
4318 send_frac_mask_dble, &
4319 recv_field_dble, &
4320 send_info, &
4321 recv_info, &
4322 ierror )
4323
4324 call recv_field_from_dble_ptr(recv_field_id, &
4325 collection_size, &
4326 recv_field_dble, &
4327 recv_field)
4328 do i = 1, collection_size
4329 do j = 1, send_nbr_pointsets
4330 deallocate(send_field_dble(j, i)%p)
4331 deallocate(send_frac_mask_dble(j, i)%p)
4332 end do
4333 end do
4334
4335end subroutine yac_fexchange_frac_real_ptr
4336
4337subroutine yac_fexchange_single_pointset_real ( send_field_id, &
4338 recv_field_id, &
4339 send_nbr_hor_points, &
4340 recv_nbr_hor_points, &
4341 collection_size, &
4342 send_field, &
4343 recv_field, &
4344 send_info, &
4345 recv_info, &
4346 ierror )
4347
4350
4351 implicit none
4352
4353 integer, intent (in) :: send_field_id
4354 integer, intent (in) :: recv_field_id
4355 integer, intent (in) :: send_nbr_hor_points
4356 integer, intent (in) :: recv_nbr_hor_points
4357 integer, intent (in) :: collection_size
4358 real, intent (in) :: send_field(send_nbr_hor_points, &
4359 collection_size)
4360
4361 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
4362 collection_size)
4363
4364 integer, intent (out) :: send_info
4365 integer, intent (out) :: recv_info
4366 integer, intent (out) :: ierror
4367
4368 double precision :: send_buffer(send_nbr_hor_points, collection_size)
4369 double precision :: recv_buffer(recv_nbr_hor_points, collection_size)
4370
4372 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
4374 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4375
4376 call send_field_to_dble_single(send_field_id, &
4377 send_nbr_hor_points, &
4378 collection_size, &
4379 send_field, &
4380 send_buffer)
4381
4382 call recv_field_to_dble(recv_field_id, &
4383 recv_nbr_hor_points, &
4384 collection_size, &
4385 recv_field, &
4386 recv_buffer)
4387
4388 call yac_fexchange_single_pointset_dble ( send_field_id, &
4389 recv_field_id, &
4390 send_nbr_hor_points, &
4391 recv_nbr_hor_points, &
4392 collection_size, &
4393 send_buffer, &
4394 recv_buffer, &
4395 send_info, &
4396 recv_info, &
4397 ierror )
4398
4399 call recv_field_from_dble(recv_field_id, &
4400 recv_nbr_hor_points, &
4401 collection_size, &
4402 recv_buffer, &
4403 recv_field)
4404
4406
4407subroutine yac_fexchange_frac_single_pointset_real ( send_field_id, &
4408 recv_field_id, &
4409 send_nbr_hor_points, &
4410 recv_nbr_hor_points, &
4411 collection_size, &
4412 send_field, &
4413 send_frac_mask, &
4414 recv_field, &
4415 send_info, &
4416 recv_info, &
4417 ierror )
4418
4421
4422 implicit none
4423
4424 integer, intent (in) :: send_field_id
4425 integer, intent (in) :: recv_field_id
4426 integer, intent (in) :: send_nbr_hor_points
4427 integer, intent (in) :: recv_nbr_hor_points
4428 integer, intent (in) :: collection_size
4429 real, intent (in) :: send_field(send_nbr_hor_points, &
4430 collection_size)
4431
4432 real, intent (in) :: send_frac_mask(send_nbr_hor_points, &
4433 collection_size)
4434
4435 real, intent (inout) :: recv_field(recv_nbr_hor_points, &
4436 collection_size)
4437
4438 integer, intent (out) :: send_info
4439 integer, intent (out) :: recv_info
4440 integer, intent (out) :: ierror
4441
4442 double precision :: send_buffer(send_nbr_hor_points, collection_size)
4443 double precision :: send_frac_mask_buffer(send_nbr_hor_points, collection_size)
4444 double precision :: recv_buffer(recv_nbr_hor_points, collection_size)
4445
4447 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
4449 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4450
4451 call send_field_to_dble_single(send_field_id, &
4452 send_nbr_hor_points, &
4453 collection_size, &
4454 send_field, &
4455 send_buffer, &
4456 send_frac_mask, &
4457 send_frac_mask_buffer)
4458
4459 call recv_field_to_dble(recv_field_id, &
4460 recv_nbr_hor_points, &
4461 collection_size, &
4462 recv_field, &
4463 recv_buffer)
4464
4465 call yac_fexchange_frac_single_pointset_dble ( send_field_id, &
4466 recv_field_id, &
4467 send_nbr_hor_points, &
4468 recv_nbr_hor_points, &
4469 collection_size, &
4470 send_buffer, &
4471 send_frac_mask_buffer, &
4472 recv_buffer, &
4473 send_info, &
4474 recv_info, &
4475 ierror )
4476
4477 call recv_field_from_dble(recv_field_id, &
4478 recv_nbr_hor_points, &
4479 collection_size, &
4480 recv_buffer, &
4481 recv_field)
4482
4484
4497subroutine yac_fexchange_dble ( send_field_id, &
4498 recv_field_id, &
4499 send_nbr_hor_points, &
4500 send_nbr_pointsets, &
4501 recv_nbr_hor_points, &
4502 collection_size, &
4503 send_field, &
4504 recv_field, &
4505 send_info, &
4506 recv_info, &
4507 ierror )
4508
4509 use yac, dummy => yac_fexchange_dble
4510
4511 implicit none
4512
4513 interface
4514
4515 subroutine yac_cexchange__c ( send_field_id, &
4516 recv_field_id, &
4517 collection_size, &
4518 send_field, &
4519 recv_field, &
4520 send_info, &
4521 recv_info, &
4522 ierror ) &
4523 bind( c, name='yac_cexchange_' )
4524
4525 use, intrinsic :: iso_c_binding, only : c_int, c_double
4526
4527 integer ( kind=c_int ), value :: send_field_id
4528 integer ( kind=c_int ), value :: recv_field_id
4529 integer ( kind=c_int ), value :: collection_size
4530 real ( kind=c_double ) :: send_field(*)
4531 real ( kind=c_double ) :: recv_field(*)
4532 integer ( kind=c_int ) :: send_info
4533 integer ( kind=c_int ) :: recv_info
4534 integer ( kind=c_int ) :: ierror
4535
4536 end subroutine yac_cexchange__c
4537
4538 end interface
4539
4540 integer, intent (in) :: send_field_id
4541 integer, intent (in) :: recv_field_id
4542 integer, intent (in) :: send_nbr_hor_points
4543 integer, intent (in) :: send_nbr_pointsets
4544 integer, intent (in) :: recv_nbr_hor_points
4545 integer, intent (in) :: collection_size
4546 double precision, intent (in) :: &
4547 send_field( &
4548 send_nbr_hor_points, &
4549 send_nbr_pointsets, &
4550 collection_size)
4551 double precision, intent (inout):: &
4552 recv_field( &
4553 recv_nbr_hor_points, &
4554 collection_size)
4555 integer, intent (out) :: send_info
4556 integer, intent (out) :: recv_info
4557 integer, intent (out) :: ierror
4558
4559 integer :: i
4560
4562 send_field_id, collection_size, send_nbr_pointsets, &
4563 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
4565 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4566
4567 call yac_cexchange__c ( send_field_id, &
4568 recv_field_id, &
4569 collection_size, &
4570 send_field, &
4571 recv_field, &
4572 send_info, &
4573 recv_info, &
4574 ierror )
4575
4576end subroutine yac_fexchange_dble
4577
4591subroutine yac_fexchange_frac_dble ( send_field_id, &
4592 recv_field_id, &
4593 send_nbr_hor_points, &
4594 send_nbr_pointsets, &
4595 recv_nbr_hor_points, &
4596 collection_size, &
4597 send_field, &
4598 send_frac_mask, &
4599 recv_field, &
4600 send_info, &
4601 recv_info, &
4602 ierror )
4603
4604 use yac, dummy => yac_fexchange_frac_dble
4605
4606 implicit none
4607
4608 interface
4609
4610 subroutine yac_cexchange_frac__c ( send_field_id, &
4611 recv_field_id, &
4612 collection_size, &
4613 send_field, &
4614 send_frac_mask, &
4615 recv_field, &
4616 send_info, &
4617 recv_info, &
4618 ierror ) &
4619 bind( c, name='yac_cexchange_frac_' )
4620
4621 use, intrinsic :: iso_c_binding, only : c_int, c_double
4622
4623 integer ( kind=c_int ), value :: send_field_id
4624 integer ( kind=c_int ), value :: recv_field_id
4625 integer ( kind=c_int ), value :: collection_size
4626 real ( kind=c_double ) :: send_field(*)
4627 real ( kind=c_double ) :: send_frac_mask(*)
4628 real ( kind=c_double ) :: recv_field(*)
4629 integer ( kind=c_int ) :: send_info
4630 integer ( kind=c_int ) :: recv_info
4631 integer ( kind=c_int ) :: ierror
4632
4633 end subroutine yac_cexchange_frac__c
4634
4635 end interface
4636
4637 integer, intent (in) :: send_field_id
4638 integer, intent (in) :: recv_field_id
4639 integer, intent (in) :: send_nbr_hor_points
4640 integer, intent (in) :: send_nbr_pointsets
4641 integer, intent (in) :: recv_nbr_hor_points
4642 integer, intent (in) :: collection_size
4643 double precision, intent (in) :: &
4644 send_field( &
4645 send_nbr_hor_points, &
4646 send_nbr_pointsets, &
4647 collection_size)
4648 double precision, intent (in) :: &
4649 send_frac_mask( &
4650 send_nbr_hor_points, &
4651 send_nbr_pointsets, &
4652 collection_size)
4653 double precision, intent (inout):: &
4654 recv_field( &
4655 recv_nbr_hor_points, &
4656 collection_size)
4657 integer, intent (out) :: send_info
4658 integer, intent (out) :: recv_info
4659 integer, intent (out) :: ierror
4660
4661 integer :: i
4662
4664 send_field_id, collection_size, send_nbr_pointsets, &
4665 (/(send_nbr_hor_points,i=1,send_nbr_pointsets)/) )
4667 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4668
4669 call yac_cexchange_frac__c ( send_field_id, &
4670 recv_field_id, &
4671 collection_size, &
4672 send_field, &
4673 send_frac_mask, &
4674 recv_field, &
4675 send_info, &
4676 recv_info, &
4677 ierror )
4678
4679end subroutine yac_fexchange_frac_dble
4680
4691subroutine yac_fexchange_dble_ptr ( send_field_id, &
4692 recv_field_id, &
4693 send_nbr_pointsets, &
4694 collection_size, &
4695 send_field, &
4696 recv_field, &
4697 send_info, &
4698 recv_info, &
4699 ierror )
4700
4702 use yac, dummy => yac_fexchange_dble_ptr
4703 use iso_c_binding, only: c_ptr
4704
4705 implicit none
4706
4707 interface
4708
4709 subroutine yac_cexchange_ptr__c ( send_field_id, &
4710 recv_field_id, &
4711 collection_size, &
4712 send_field, &
4713 recv_field, &
4714 send_info, &
4715 recv_info, &
4716 ierror ) &
4717 bind( c, name='yac_cexchange_ptr_' )
4718
4719 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
4720
4721 integer ( kind=c_int ), value :: send_field_id
4722 integer ( kind=c_int ), value :: recv_field_id
4723 integer ( kind=c_int ), value :: collection_size
4724 type(c_ptr) :: send_field(*)
4725 type(c_ptr) :: recv_field(*)
4726 integer ( kind=c_int ) :: send_info
4727 integer ( kind=c_int ) :: recv_info
4728 integer ( kind=c_int ) :: ierror
4729
4730 end subroutine yac_cexchange_ptr__c
4731
4732 end interface
4733
4734 integer, intent (in) :: send_field_id
4735 integer, intent (in) :: recv_field_id
4736 integer, intent (in) :: send_nbr_pointsets
4737 integer, intent (in) :: collection_size
4738 type(yac_dble_ptr), intent (in) :: &
4739 send_field(send_nbr_pointsets, &
4740 collection_size)
4741 type(yac_dble_ptr) :: recv_field(collection_size)
4742 integer, intent (out) :: send_info
4743 integer, intent (out) :: recv_info
4744 integer, intent (out) :: ierror
4745
4746 integer :: i, j
4747 type(c_ptr) :: send_field_(send_nbr_pointsets, collection_size)
4748 type(c_ptr) :: recv_field_(collection_size)
4749
4751 send_field_id, collection_size, send_nbr_pointsets, &
4752 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
4754 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
4755
4756 do i = 1, collection_size
4757 do j = 1, send_nbr_pointsets
4758 send_field_(j, i) = yac_dble2cptr("yac_fexchange_dble_ptr", "send_field", send_field(j, i))
4759 end do
4760 end do
4761 do i = 1, collection_size
4762 recv_field_(i) = yac_dble2cptr("yac_fexchange_dble_ptr", "recv_field", recv_field(i))
4763 end do
4764
4765 call yac_cexchange_ptr__c ( send_field_id, &
4766 recv_field_id, &
4767 collection_size, &
4768 send_field_, &
4769 recv_field_, &
4770 send_info, &
4771 recv_info, &
4772 ierror )
4773
4774end subroutine yac_fexchange_dble_ptr
4775
4787subroutine yac_fexchange_frac_dble_ptr ( send_field_id, &
4788 recv_field_id, &
4789 send_nbr_pointsets, &
4790 collection_size, &
4791 send_field, &
4792 send_frac_mask, &
4793 recv_field, &
4794 send_info, &
4795 recv_info, &
4796 ierror )
4797
4799 use yac, dummy => yac_fexchange_frac_dble_ptr
4800 use iso_c_binding, only: c_ptr
4801
4802 implicit none
4803
4804 interface
4805
4806 subroutine yac_cexchange_frac_ptr__c ( send_field_id, &
4807 recv_field_id, &
4808 collection_size, &
4809 send_field, &
4810 send_frac_mask, &
4811 recv_field, &
4812 send_info, &
4813 recv_info, &
4814 ierror ) &
4815 bind( c, name='yac_cexchange_frac_ptr_' )
4816
4817 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
4818
4819 integer ( kind=c_int ), value :: send_field_id
4820 integer ( kind=c_int ), value :: recv_field_id
4821 integer ( kind=c_int ), value :: collection_size
4822 type(c_ptr) :: send_field(*)
4823 type(c_ptr) :: send_frac_mask(*)
4824 type(c_ptr) :: recv_field(*)
4825 integer ( kind=c_int ) :: send_info
4826 integer ( kind=c_int ) :: recv_info
4827 integer ( kind=c_int ) :: ierror
4828
4829 end subroutine yac_cexchange_frac_ptr__c
4830
4831 end interface
4832
4833 integer, intent (in) :: send_field_id
4834 integer, intent (in) :: recv_field_id
4835 integer, intent (in) :: send_nbr_pointsets
4836 integer, intent (in) :: collection_size
4837 type(yac_dble_ptr), intent (in) :: &
4838 send_field(send_nbr_pointsets, &
4839 collection_size)
4840 type(yac_dble_ptr), intent (in) :: &
4841 send_frac_mask(send_nbr_pointsets, &
4842 collection_size)
4843 type(yac_dble_ptr) :: recv_field(collection_size)
4844 integer, intent (out) :: send_info
4845 integer, intent (out) :: recv_info
4846 integer, intent (out) :: ierror
4847
4848 integer :: i, j
4849 type(c_ptr) :: send_field_(send_nbr_pointsets, collection_size)
4850 type(c_ptr) :: send_frac_mask_(send_nbr_pointsets, collection_size)
4851 type(c_ptr) :: recv_field_(collection_size)
4852
4854 send_field_id, collection_size, send_nbr_pointsets, &
4855 (/(SIZE(send_field(i,1)%p),i=1,send_nbr_pointsets)/) )
4857 send_field_id, collection_size, send_nbr_pointsets, &
4858 (/(SIZE(send_frac_mask(i,1)%p),i=1,send_nbr_pointsets)/) )
4860 recv_field_id, collection_size, 1, (/SIZE(recv_field(1)%p)/) )
4861
4862 do i = 1, collection_size
4863 do j = 1, send_nbr_pointsets
4864 send_field_(j, i) = &
4865 yac_dble2cptr( &
4866 "yac_fexchange_frac_dble_ptr", "send_field", send_field(j, i))
4867 send_frac_mask_(j, i) = &
4868 yac_dble2cptr( &
4869 "yac_fexchange_frac_dble_ptr", "send_frac_mask", send_frac_mask(j, i))
4870 end do
4871 end do
4872 do i = 1, collection_size
4873 recv_field_(i) = yac_dble2cptr("yac_fexchange_frac_dble_ptr", "recv_field", recv_field(i))
4874 end do
4875
4876 call yac_cexchange_frac_ptr__c ( send_field_id, &
4877 recv_field_id, &
4878 collection_size, &
4879 send_field_, &
4880 send_frac_mask_, &
4881 recv_field_, &
4882 send_info, &
4883 recv_info, &
4884 ierror )
4885
4886end subroutine yac_fexchange_frac_dble_ptr
4887
4899subroutine yac_fexchange_single_pointset_dble ( send_field_id, &
4900 recv_field_id, &
4901 send_nbr_hor_points, &
4902 recv_nbr_hor_points, &
4903 collection_size, &
4904 send_field, &
4905 recv_field, &
4906 send_info, &
4907 recv_info, &
4908 ierror )
4909
4911
4912 implicit none
4913
4914 interface
4915
4916 subroutine yac_cexchange__c ( send_field_id, &
4917 recv_field_id, &
4918 collection_size, &
4919 send_field, &
4920 recv_field, &
4921 send_info, &
4922 recv_info, &
4923 ierror ) &
4924 bind( c, name='yac_cexchange_' )
4925
4926 use, intrinsic :: iso_c_binding, only : c_int, c_double
4927
4928 integer ( kind=c_int ), value :: send_field_id
4929 integer ( kind=c_int ), value :: recv_field_id
4930 integer ( kind=c_int ), value :: collection_size
4931 real ( kind=c_double ) :: send_field(*)
4932 real ( kind=c_double ) :: recv_field(*)
4933 integer ( kind=c_int ) :: send_info
4934 integer ( kind=c_int ) :: recv_info
4935 integer ( kind=c_int ) :: ierror
4936
4937 end subroutine yac_cexchange__c
4938
4939 end interface
4940
4941 integer, intent (in) :: send_field_id
4942 integer, intent (in) :: recv_field_id
4943 integer, intent (in) :: send_nbr_hor_points
4944 integer, intent (in) :: recv_nbr_hor_points
4945 integer, intent (in) :: collection_size
4946 double precision, intent (in) :: &
4947 send_field(send_nbr_hor_points, &
4948 collection_size)
4949 double precision, intent (inout):: &
4950 recv_field(recv_nbr_hor_points, &
4951 collection_size)
4952 integer, intent (out) :: send_info
4953 integer, intent (out) :: recv_info
4954 integer, intent (out) :: ierror
4955
4957 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
4959 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
4960
4961 call yac_cexchange__c ( send_field_id, &
4962 recv_field_id, &
4963 collection_size, &
4964 send_field, &
4965 recv_field, &
4966 send_info, &
4967 recv_info, &
4968 ierror )
4969
4971
4984subroutine yac_fexchange_frac_single_pointset_dble ( send_field_id, &
4985 recv_field_id, &
4986 send_nbr_hor_points, &
4987 recv_nbr_hor_points, &
4988 collection_size, &
4989 send_field, &
4990 send_frac_mask, &
4991 recv_field, &
4992 send_info, &
4993 recv_info, &
4994 ierror )
4995
4997
4998 implicit none
4999
5000 interface
5001
5002 subroutine yac_cexchange_frac__c ( send_field_id, &
5003 recv_field_id, &
5004 collection_size, &
5005 send_field, &
5006 send_frac_mask, &
5007 recv_field, &
5008 send_info, &
5009 recv_info, &
5010 ierror ) &
5011 bind( c, name='yac_cexchange_frac_' )
5012
5013 use, intrinsic :: iso_c_binding, only : c_int, c_double
5014
5015 integer ( kind=c_int ), value :: send_field_id
5016 integer ( kind=c_int ), value :: recv_field_id
5017 integer ( kind=c_int ), value :: collection_size
5018 real ( kind=c_double ) :: send_field(*)
5019 real ( kind=c_double ) :: send_frac_mask(*)
5020 real ( kind=c_double ) :: recv_field(*)
5021 integer ( kind=c_int ) :: send_info
5022 integer ( kind=c_int ) :: recv_info
5023 integer ( kind=c_int ) :: ierror
5024
5025 end subroutine yac_cexchange_frac__c
5026
5027 end interface
5028
5029 integer, intent (in) :: send_field_id
5030 integer, intent (in) :: recv_field_id
5031 integer, intent (in) :: send_nbr_hor_points
5032 integer, intent (in) :: recv_nbr_hor_points
5033 integer, intent (in) :: collection_size
5034 double precision, intent (in) :: &
5035 send_field(send_nbr_hor_points, &
5036 collection_size)
5037 double precision, intent (in) :: &
5038 send_frac_mask(send_nbr_hor_points, &
5039 collection_size)
5040 double precision, intent (inout):: &
5041 recv_field(recv_nbr_hor_points, &
5042 collection_size)
5043 integer, intent (out) :: send_info
5044 integer, intent (out) :: recv_info
5045 integer, intent (out) :: ierror
5046
5048 send_field_id, collection_size, 1, (/send_nbr_hor_points/) )
5050 recv_field_id, collection_size, 1, (/recv_nbr_hor_points/) )
5051
5052 call yac_cexchange_frac__c ( send_field_id, &
5053 recv_field_id, &
5054 collection_size, &
5055 send_field, &
5056 send_frac_mask, &
5057 recv_field, &
5058 send_info, &
5059 recv_info, &
5060 ierror )
5061
5063
5064! ----------------------------------------------------------------------
5065
5066subroutine yac_ftest_i ( field_id, flag )
5067
5068 use yac, dummy => yac_ftest_i
5069
5070 implicit none
5071
5072 interface
5073
5074 subroutine yac_ctest_c ( field_id, flag ) &
5075 bind( c, name='yac_ctest' )
5076
5077 use, intrinsic :: iso_c_binding, only : c_int
5078
5079 integer ( kind=c_int ), value :: field_id
5080 integer ( kind=c_int ) :: flag
5081
5082 end subroutine yac_ctest_c
5083
5084 end interface
5085
5086 integer, intent (in) :: field_id
5087 integer, intent (out) :: flag
5088
5089 call yac_ctest_c ( field_id, flag )
5090
5091end subroutine yac_ftest_i
5092
5093subroutine yac_ftest_l ( field_id, flag )
5094
5095 use yac, dummy => yac_ftest_l
5096
5097 implicit none
5098
5099 interface
5100
5101 subroutine yac_ctest_c ( field_id, flag ) &
5102 bind( c, name='yac_ctest' )
5103
5104 use, intrinsic :: iso_c_binding, only : c_int
5105
5106 integer ( kind=c_int ), value :: field_id
5107 integer ( kind=c_int ) :: flag
5108
5109 end subroutine yac_ctest_c
5110
5111 end interface
5112
5113 integer, intent (in) :: field_id
5114 logical, intent (out) :: flag
5115
5116 integer :: iflag
5117
5118 call yac_ctest_c ( field_id, iflag )
5119
5120 flag = iflag /= 0
5121
5122end subroutine yac_ftest_l
5123
5124! ----------------------------------------------------------------------
5125
5126subroutine yac_fwait ( field_id )
5127
5128 use yac, dummy => yac_fwait
5129
5130 implicit none
5131
5132 interface
5133
5134 subroutine yac_cwait_c ( field_id ) &
5135 bind( c, name='yac_cwait' )
5136
5137 use, intrinsic :: iso_c_binding, only : c_int
5138
5139 integer ( kind=c_int ), value :: field_id
5140
5141 end subroutine yac_cwait_c
5142
5143 end interface
5144
5145 integer, intent (in) :: field_id
5146
5147 call yac_cwait_c ( field_id )
5148
5149end subroutine yac_fwait
5150
5151! ----------------------------------------------------------------------
5152
5153subroutine yac_fget_comp_comm ( comp_id, comp_comm )
5154
5155 use yac, dummy => yac_fget_comp_comm
5156
5157 implicit none
5158
5159 interface
5160
5161 subroutine yac_get_comp_comm_c ( comp_id, comp_comm ) &
5162 bind( c, name='yac_get_comp_comm_f2c' )
5163
5164 use, intrinsic :: iso_c_binding, only : c_int
5165 use yac, only : yac_mpi_fint_kind
5166
5167 integer ( kind=c_int ), value :: comp_id
5168 integer ( kind=YAC_MPI_FINT_KIND ) :: comp_comm
5169
5170 end subroutine yac_get_comp_comm_c
5171
5172 end interface
5173
5174 integer, intent (in) :: comp_id
5175 integer, intent (out) :: comp_comm
5176
5177 call yac_get_comp_comm_c ( comp_id, comp_comm )
5178
5179end subroutine yac_fget_comp_comm
5180
5181! ----------------------------------------------------------------------
5182
5183subroutine yac_fget_comps_comm ( comp_names, num_comps, comps_comm )
5184
5185 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
5186 use yac, dummy => yac_fget_comps_comm
5188
5189 implicit none
5190
5191 interface
5192
5193 subroutine yac_cget_comps_comm_c ( comp_names, &
5194 num_comps, &
5195 comps_comm) &
5196 bind( c, name='yac_cget_comps_comm_f2c' )
5197
5198 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5199 use yac, only : yac_mpi_fint_kind
5200
5201 type ( c_ptr ) :: comp_names(*)
5202 integer ( kind=c_int ), value :: num_comps
5203 integer ( kind=YAC_MPI_FINT_KIND ) :: comps_comm
5204
5205 end subroutine yac_cget_comps_comm_c
5206
5207 end interface
5208
5209 integer, intent(in) :: num_comps
5210 character(kind=c_char, len=*), intent(in) :: &
5211 comp_names(num_comps)
5212 integer, intent (out) :: comps_comm
5213
5214 integer :: i, j
5215 character(kind=c_char), target :: comp_names_cpy(YAC_MAX_CHARLEN+1, num_comps)
5216 type(c_ptr) :: comp_name_ptrs(num_comps)
5217
5218 comp_names_cpy = c_null_char
5219
5220 do i = 1, num_comps
5221 yac_check_string_len( "yac_fget_comps_comm", comp_names(i))
5222 do j = 1, len_trim(comp_names(i))
5223 comp_names_cpy(j,i) = comp_names(i)(j:j)
5224 end do
5225 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
5226 end do
5227
5228 call yac_cget_comps_comm_c ( comp_name_ptrs, &
5229 num_comps, &
5230 comps_comm )
5231
5232end subroutine yac_fget_comps_comm
5233
5234subroutine yac_fget_comps_comm_instance ( yac_instance_id, &
5235 comp_names, &
5236 num_comps, &
5237 comps_comm )
5238
5239 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_loc, c_char
5240 use yac, dummy => yac_fget_comps_comm_instance
5242
5243 implicit none
5244
5245 interface
5246
5247 subroutine yac_cget_comps_comm_instance_c ( yac_instance_id, &
5248 comp_names, &
5249 num_comps, &
5250 comps_comm) &
5251 bind( c, name='yac_cget_comps_comm_instance_f2c' )
5252
5253 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5254 use yac, only : yac_mpi_fint_kind
5255
5256 integer ( kind=c_int ), value :: yac_instance_id
5257 type ( c_ptr ) :: comp_names(*)
5258 integer ( kind=c_int ), value :: num_comps
5259 integer ( kind=YAC_MPI_FINT_KIND ) :: comps_comm
5260
5261 end subroutine yac_cget_comps_comm_instance_c
5262
5263 end interface
5264
5265 integer, intent(in) :: yac_instance_id
5266 integer, intent(in) :: num_comps
5267 character(kind=c_char, len=*), intent(in) :: &
5268 comp_names(num_comps)
5269 integer, intent (out) :: comps_comm
5270
5271 integer :: i, j
5272 character(kind=c_char), target :: comp_names_cpy(YAC_MAX_CHARLEN+1, num_comps)
5273 type(c_ptr) :: comp_name_ptrs(num_comps)
5274
5275 comp_names_cpy = c_null_char
5276
5277 do i = 1, num_comps
5278 yac_check_string_len( "yac_fget_comps_comm_instance", comp_names(i))
5279 do j = 1, len_trim(comp_names(i))
5280 comp_names_cpy(j,i) = comp_names(i)(j:j)
5281 end do
5282 comp_name_ptrs(i) = c_loc(comp_names_cpy(1,i))
5283 end do
5284
5285 call yac_cget_comps_comm_instance_c ( yac_instance_id, &
5286 comp_name_ptrs, &
5287 num_comps, &
5288 comps_comm )
5289
5290end subroutine yac_fget_comps_comm_instance
5291
5292! ------------------- search/end of definition -------------------------
5293
5294subroutine yac_fsync_def ( )
5295
5296 use yac, dummy => yac_fsync_def
5297
5298 implicit none
5299
5300 interface
5301
5302 subroutine yac_csync_def_c ( ) bind ( c, name='yac_csync_def' )
5303
5304 end subroutine yac_csync_def_c
5305
5306 end interface
5307
5308 call yac_csync_def_c ( )
5309
5310end subroutine yac_fsync_def
5311
5312subroutine yac_fsync_def_instance ( yac_instance_id )
5313
5314 use yac, dummy => yac_fsync_def_instance
5315
5316 implicit none
5317
5318 interface
5319
5320 subroutine yac_csync_def_instance_c ( yac_instance_id ) &
5321 bind( c, name='yac_csync_def_instance' )
5322
5323 use, intrinsic :: iso_c_binding, only : c_int
5324
5325 integer ( kind=c_int ), value :: yac_instance_id
5326
5327 end subroutine yac_csync_def_instance_c
5328
5329 end interface
5330
5331 integer, intent(in) :: yac_instance_id
5332
5333 call yac_csync_def_instance_c ( yac_instance_id )
5334
5335end subroutine yac_fsync_def_instance
5336
5337
5338subroutine yac_fenddef ( )
5339
5340 use yac, dummy => yac_fenddef
5341
5342 implicit none
5343
5344 interface
5345
5346 subroutine yac_cenddef_c ( ) bind ( c, name='yac_cenddef' )
5347
5348 end subroutine yac_cenddef_c
5349
5350 end interface
5351
5352 call yac_cenddef_c ( )
5353
5354end subroutine yac_fenddef
5355
5356subroutine yac_fenddef_instance ( yac_instance_id )
5357
5358 use yac, dummy => yac_fenddef_instance
5359
5360 implicit none
5361
5362 interface
5363
5364 subroutine yac_cenddef_instance_c ( yac_instance_id ) &
5365 bind( c, name='yac_cenddef_instance' )
5366
5367 use, intrinsic :: iso_c_binding, only : c_int
5368
5369 integer ( kind=c_int ), value :: yac_instance_id
5370
5371 end subroutine yac_cenddef_instance_c
5372
5373 end interface
5374
5375 integer, intent(in) :: yac_instance_id
5376
5377 call yac_cenddef_instance_c ( yac_instance_id )
5378
5379end subroutine yac_fenddef_instance
5380
5381subroutine yac_fenddef_and_emit_config(emit_flags, config)
5382
5383 use, intrinsic :: iso_c_binding, only : c_ptr
5384 use yac, dummy => yac_fenddef_and_emit_config
5386
5387 implicit none
5388
5389 interface
5390 subroutine yac_fenddef_and_emit_config_c ( &
5391 emit_flags, config) &
5392 bind( c, name='yac_cenddef_and_emit_config' )
5393
5394 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5395 integer ( kind=c_int ), value :: emit_flags
5396 type(c_ptr) :: config
5397
5398 end subroutine yac_fenddef_and_emit_config_c
5399
5400 subroutine free_c ( ptr ) bind ( c, NAME='free' )
5401
5402 use, intrinsic :: iso_c_binding, only : c_ptr
5403
5404 type ( c_ptr ), intent(in), value :: ptr
5405
5406 end subroutine free_c
5407 end interface
5408
5409 integer, intent (in) :: emit_flags
5410 character (len=:), ALLOCATABLE :: config
5411
5412 type (c_ptr) :: c_string_ptr
5413
5414 call yac_fenddef_and_emit_config_c(emit_flags, c_string_ptr)
5415 config = yac_internal_cptr2char(c_string_ptr)
5416 call free_c(c_string_ptr)
5417
5418end subroutine yac_fenddef_and_emit_config
5419
5421 yac_instance_id, emit_flags, config)
5422
5423 use, intrinsic :: iso_c_binding, only : c_ptr
5426
5427 implicit none
5428
5429 interface
5430 subroutine yac_fenddef_and_emit_config_instance_c ( &
5431 yac_instance_id, emit_flags, config) &
5432 bind( c, name='yac_cenddef_and_emit_config_instance' )
5433
5434 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
5435 integer ( kind=c_int ), value :: yac_instance_id
5436 integer ( kind=c_int ), value :: emit_flags
5437 type(c_ptr) :: config
5438
5439 end subroutine yac_fenddef_and_emit_config_instance_c
5440
5441 subroutine free_c ( ptr ) bind ( c, NAME='free' )
5442
5443 use, intrinsic :: iso_c_binding, only : c_ptr
5444
5445 type ( c_ptr ), intent(in), value :: ptr
5446
5447 end subroutine free_c
5448 end interface
5449
5450 integer, intent (in) :: yac_instance_id
5451 integer, intent (in) :: emit_flags
5452 character (len=:), ALLOCATABLE :: config
5453
5454 type (c_ptr) :: c_string_ptr
5455
5456 call yac_fenddef_and_emit_config_instance_c( &
5457 yac_instance_id, emit_flags, c_string_ptr)
5458 config = yac_internal_cptr2char(c_string_ptr)
5459 call free_c(c_string_ptr)
5460
5462
5463! ------------------------ query routines -----------------------------
5464
5465function yac_fget_grid_size( location, grid_id ) result (grid_size)
5466
5467 use yac, dummy => yac_fget_grid_size
5468
5469 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
5470 implicit none
5471
5472 interface
5473 function yac_cget_grid_size_c(location, grid_id) result (grid_size) &
5474 bind(c, name='yac_cget_grid_size')
5475 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
5476 integer(kind=c_int), value :: location
5477 integer(kind=c_int), value :: grid_id
5478 integer(kind=c_size_t) :: grid_size
5479 end function yac_cget_grid_size_c
5480 end interface
5481
5482 integer, intent(in) :: location
5483 integer, intent(in) :: grid_id
5484 integer :: grid_size
5485
5486 integer(kind=c_size_t) :: c_grid_size
5487
5488 c_grid_size = &
5489 yac_cget_grid_size_c(int(location, c_int), int(grid_id, c_int))
5490
5491 yac_fassert(int(huge(grid_size), c_size_t) >= c_grid_size, "ERROR(yac_fget_grid_size): grid size exceeds HUGE(grid_size)")
5492
5493 grid_size = int(c_grid_size)
5494
5495end function yac_fget_grid_size
5496
5497! ---------------------------------------------------------------------
5498
5499function yac_fget_points_size( point_id ) result (points_size)
5500
5501 use yac, dummy => yac_fget_points_size
5502
5503 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
5504 implicit none
5505
5506 interface
5507 function yac_cget_points_size_c(point_id) result (points_size) &
5508 bind(c, name='yac_cget_points_size')
5509 use, intrinsic :: iso_c_binding, only: c_size_t, c_int
5510 integer(kind=c_int), value :: point_id
5511 integer(kind=c_size_t) :: points_size
5512 end function yac_cget_points_size_c
5513 end interface
5514
5515 integer, intent(in) :: point_id
5516 integer :: points_size
5517
5518 integer(kind=c_size_t) :: c_points_size
5519
5520 c_points_size = yac_cget_points_size_c(int(point_id, c_int))
5521
5522 yac_fassert(int(huge(points_size), c_size_t) >= c_points_size, "ERROR(yac_fget_point_size): point size exceeds HUGE(point_size)")
5523
5524 points_size = int(c_points_size)
5525
5526end function yac_fget_points_size
5527
5528! ---------------------------------------------------------------------
5529
5530 function yac_fget_comp_names ( ) result( comp_names )
5531
5532 use yac, dummy => yac_fget_comp_names
5534
5535 use, intrinsic :: iso_c_binding, only: c_ptr
5536 implicit none
5537
5538 interface
5539 function yac_cget_nbr_comps_c() result( nbr_comps ) &
5540 bind(c, name='yac_cget_nbr_comps')
5541 use, intrinsic :: iso_c_binding, only: c_int
5542 integer(kind=c_int) :: nbr_comps
5543
5544 end function yac_cget_nbr_comps_c
5545
5546 subroutine yac_cget_comp_names_c( nbr_comps, comp_names ) &
5547 bind(c, name='yac_cget_comp_names')
5548 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
5549 integer(kind=c_int), intent(in), value :: nbr_comps
5550 TYPE(c_ptr), intent(out) :: comp_names(nbr_comps)
5551 end subroutine yac_cget_comp_names_c
5552 end interface
5553
5554 type(yac_string), allocatable :: comp_names(:)
5555 integer :: nbr_comps
5556 INTEGER :: i
5557 TYPE(c_ptr), allocatable :: comp_ptr(:)
5558
5559 nbr_comps = yac_cget_nbr_comps_c()
5560 allocate(comp_ptr(nbr_comps))
5561 allocate(comp_names(nbr_comps))
5562 CALL yac_cget_comp_names_c(nbr_comps, comp_ptr)
5563 DO i=1,nbr_comps
5564 comp_names(i)%string = yac_internal_cptr2char(comp_ptr(i))
5565 END DO
5566 end function yac_fget_comp_names
5567
5568 function yac_fget_comp_names_instance ( yac_instance_id ) result ( comp_names )
5569
5570 use yac, dummy => yac_fget_comp_names_instance
5572 use, intrinsic :: iso_c_binding, only: c_ptr
5573 implicit none
5574
5575 interface
5576 function yac_cget_nbr_comps_instance_c( yac_instance_id ) &
5577 result( nbr_comps ) &
5578 bind(c, name='yac_cget_nbr_comps_instance')
5579 use, intrinsic :: iso_c_binding, only: c_int
5580 integer(kind=c_int), value, intent(in) :: yac_instance_id
5581 integer(kind=c_int) :: nbr_comps
5582 end function yac_cget_nbr_comps_instance_c
5583
5584 subroutine yac_cget_comp_names_instance_c( yac_instance_id, &
5585 nbr_comps, &
5586 comp_names ) &
5587 bind(c, name='yac_cget_comp_names_instance')
5588 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
5589 integer(kind=c_int), intent(in), value :: yac_instance_id
5590 integer(kind=c_int), intent(in), value :: nbr_comps
5591 TYPE(c_ptr), intent(out) :: comp_names(nbr_comps)
5592 end subroutine yac_cget_comp_names_instance_c
5593 end interface
5594
5595 integer, intent(in) :: yac_instance_id
5596 type(yac_string), allocatable :: comp_names(:)
5597 integer :: nbr_comps
5598 INTEGER :: i
5599 TYPE(c_ptr), allocatable :: comp_ptr(:)
5600
5601 nbr_comps = yac_cget_nbr_comps_instance_c(yac_instance_id)
5602 allocate(comp_names(nbr_comps))
5603 allocate(comp_ptr(nbr_comps))
5604 CALL yac_cget_comp_names_instance_c(yac_instance_id, &
5605 nbr_comps, &
5606 comp_ptr)
5607 DO i=1,nbr_comps
5608 comp_names(i)%string = yac_internal_cptr2char(comp_ptr(i))
5609 END DO
5610 end function yac_fget_comp_names_instance
5611
5612! ---------------------------------------------------------------------
5613
5614 function yac_fget_grid_names ( ) result ( grid_names )
5615
5616 use yac, dummy => yac_fget_grid_names
5618 use, intrinsic :: iso_c_binding, only: c_ptr
5619
5620 implicit none
5621
5622 interface
5623 function yac_cget_nbr_grids_c() result( nbr_grids ) &
5624 bind(c, name='yac_cget_nbr_grids')
5625 use, intrinsic :: iso_c_binding, only: c_int
5626 integer(kind=c_int) :: nbr_grids
5627 end function yac_cget_nbr_grids_c
5628
5629 subroutine yac_cget_grid_names_c( nbr_grids, grid_names ) &
5630 bind(c, name='yac_cget_grid_names')
5631 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
5632 integer(kind=c_int), intent(in), value :: nbr_grids
5633 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
5634 end subroutine yac_cget_grid_names_c
5635 end interface
5636
5637 type(yac_string), allocatable :: grid_names(:)
5638 integer :: nbr_grids
5639 INTEGER :: i
5640 TYPE(c_ptr), allocatable :: grid_ptr(:)
5641
5642 nbr_grids = yac_cget_nbr_grids_c()
5643 allocate(grid_ptr(nbr_grids))
5644 CALL yac_cget_grid_names_c(nbr_grids, grid_ptr)
5645 allocate(grid_names(nbr_grids))
5646 DO i=1,nbr_grids
5647 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
5648 END DO
5649 end function yac_fget_grid_names
5650
5651 function yac_fget_grid_names_instance ( yac_instance_id ) result ( grid_names )
5652
5653 use yac, dummy => yac_fget_grid_names_instance
5655 use, intrinsic :: iso_c_binding, only: c_ptr
5656
5657 implicit none
5658
5659 interface
5660 function yac_cget_nbr_grids_instance_c( yac_instance_id ) &
5661 result( nbr_grids ) &
5662 bind(c, name='yac_cget_nbr_grids_instance')
5663 use, intrinsic :: iso_c_binding, only: c_int
5664 integer(kind=c_int), value, intent(in) :: yac_instance_id
5665 integer(kind=c_int) :: nbr_grids
5666
5667 end function yac_cget_nbr_grids_instance_c
5668
5669 subroutine yac_cget_grid_names_instance_c( yac_instance_id, &
5670 nbr_grids, &
5671 grid_names ) &
5672 bind(c, name='yac_cget_grid_names_instance')
5673 use, intrinsic :: iso_c_binding, only: c_int, c_ptr
5674 integer(kind=c_int), intent(in), value :: yac_instance_id
5675 integer(kind=c_int), intent(in), value :: nbr_grids
5676 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
5677 end subroutine yac_cget_grid_names_instance_c
5678 end interface
5679
5680 integer, intent(in) :: yac_instance_id
5681 type(yac_string), allocatable :: grid_names(:)
5682 integer :: nbr_grids
5683 INTEGER :: i
5684 TYPE(c_ptr), allocatable :: grid_ptr(:)
5685
5686 nbr_grids = yac_cget_nbr_grids_instance_c(yac_instance_id)
5687 allocate(grid_ptr(nbr_grids))
5688 CALL yac_cget_grid_names_instance_c(yac_instance_id, &
5689 nbr_grids, &
5690 grid_ptr)
5691 allocate(grid_names(nbr_grids))
5692 DO i=1,nbr_grids
5693 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
5694 END DO
5695 end function yac_fget_grid_names_instance
5696
5697 ! ---------------------------------------------------------------------
5698
5699 function yac_fget_comp_grid_names ( comp_name ) result ( grid_names )
5700
5701 use yac, dummy => yac_fget_comp_grid_names
5703 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
5704
5705 implicit none
5706
5707 interface
5708 function yac_cget_comp_nbr_grids_c( comp_name ) result( nbr_grids ) &
5709 bind(c, name='yac_cget_comp_nbr_grids')
5710 use, intrinsic :: iso_c_binding, only: c_int, c_char
5711 character(kind=c_char), dimension(*), intent(in) :: comp_name
5712 integer(kind=c_int) :: nbr_grids
5713
5714 end function yac_cget_comp_nbr_grids_c
5715
5716 subroutine yac_cget_comp_grid_names_c( comp_name, &
5717 nbr_grids, &
5718 grid_names ) &
5719 bind(c, name='yac_cget_comp_grid_names')
5720 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
5721 character(kind=c_char), dimension(*), intent(in) :: comp_name
5722 integer(kind=c_int), intent(in), value :: nbr_grids
5723 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
5724 end subroutine yac_cget_comp_grid_names_c
5725 end interface
5726
5727 type(yac_string), allocatable :: grid_names(:)
5728 CHARACTER(len=*), intent(in) :: comp_name
5729 integer :: nbr_grids
5730 INTEGER :: i
5731 TYPE(c_ptr), allocatable :: grid_ptr(:)
5732
5733 nbr_grids = yac_cget_comp_nbr_grids_c(trim(comp_name) // c_null_char)
5734 allocate(grid_ptr(nbr_grids))
5735 CALL yac_cget_comp_grid_names_c(trim(comp_name) // c_null_char, &
5736 nbr_grids, &
5737 grid_ptr)
5738 allocate(grid_names(nbr_grids))
5739 DO i=1,nbr_grids
5740 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
5741 END DO
5742 end function yac_fget_comp_grid_names
5743
5744 function yac_fget_comp_grid_names_instance ( yac_instance_id, comp_name) result ( grid_names )
5745
5748 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
5749
5750 implicit none
5751
5752 interface
5753 function yac_cget_comp_nbr_grids_instance_c( yac_instance_id, &
5754 comp_name ) &
5755 result( nbr_grids ) &
5756 bind(c, name='yac_cget_comp_nbr_grids_instance')
5757 use, intrinsic :: iso_c_binding, only: c_int, c_char
5758 character(kind=c_char), dimension(*), intent(in) :: comp_name
5759 integer(kind=c_int), value, intent(in) :: yac_instance_id
5760 integer(kind=c_int) :: nbr_grids
5761 end function yac_cget_comp_nbr_grids_instance_c
5762
5763 subroutine yac_cget_comp_grid_names_instance_c( yac_instance_id, &
5764 comp_name, &
5765 nbr_grids, &
5766 grid_names ) &
5767 bind(c, name='yac_cget_comp_grid_names_instance')
5768 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
5769 character(kind=c_char), dimension(*), intent(in) :: comp_name
5770 integer(kind=c_int), intent(in), value :: yac_instance_id
5771 integer(kind=c_int), intent(in), value :: nbr_grids
5772 TYPE(c_ptr), intent(out) :: grid_names(nbr_grids)
5773 end subroutine yac_cget_comp_grid_names_instance_c
5774 end interface
5775
5776 integer, intent(in) :: yac_instance_id
5777 character(len=*), intent(in) :: comp_name
5778 type(yac_string), allocatable :: grid_names(:)
5779 integer :: nbr_grids
5780 INTEGER :: i
5781 TYPE(c_ptr), allocatable :: grid_ptr(:)
5782
5783 nbr_grids = &
5784 yac_cget_comp_nbr_grids_instance_c(yac_instance_id, &
5785 trim(comp_name) // c_null_char)
5786 allocate(grid_ptr(nbr_grids))
5787 CALL yac_cget_comp_grid_names_instance_c(yac_instance_id, &
5788 trim(comp_name) // c_null_char, &
5789 nbr_grids, &
5790 grid_ptr)
5791 allocate(grid_names(nbr_grids))
5792 DO i=1,nbr_grids
5793 grid_names(i)%string = yac_internal_cptr2char(grid_ptr(i))
5794 END DO
5796
5797 ! ---------------------------------------------------------------------
5798
5799 function yac_fget_field_names ( comp_name, grid_name ) result( field_names )
5800
5801 use yac, dummy => yac_fget_field_names
5803 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
5804
5805 implicit none
5806
5807 interface
5808 function yac_cget_nbr_fields_c(comp_name, grid_name) &
5809 result( nbr_fields ) &
5810 bind(c, name='yac_cget_nbr_fields')
5811 use, intrinsic :: iso_c_binding, only: c_int, c_char
5812 character(kind=c_char), dimension(*), intent(in) :: comp_name
5813 character(kind=c_char), dimension(*), intent(in) :: grid_name
5814 integer(kind=c_int) :: nbr_fields
5815 end function yac_cget_nbr_fields_c
5816
5817 subroutine yac_cget_field_names_c( comp_name, &
5818 grid_name, &
5819 nbr_fields, &
5820 field_names ) &
5821 bind(c, name='yac_cget_field_names')
5822 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
5823 character(kind=c_char), dimension(*), intent(in) :: comp_name
5824 character(kind=c_char), dimension(*), intent(in) :: grid_name
5825 integer(kind=c_int), intent(in), value :: nbr_fields
5826 TYPE(c_ptr), intent(out) :: field_names(nbr_fields)
5827 end subroutine yac_cget_field_names_c
5828 end interface
5829
5830 character(len=*), intent(in) :: comp_name
5831 character(len=*), intent(in) :: grid_name
5832 type(yac_string), allocatable :: field_names(:)
5833 integer :: nbr_fields
5834 INTEGER :: i
5835 TYPE(c_ptr), allocatable :: field_ptr(:)
5836
5837 nbr_fields = yac_cget_nbr_fields_c(trim(comp_name)//c_null_char, &
5838 trim(grid_name)//c_null_char)
5839 allocate(field_ptr(nbr_fields))
5840 CALL yac_cget_field_names_c(trim(comp_name)//c_null_char, &
5841 trim(grid_name)//c_null_char, &
5842 nbr_fields, &
5843 field_ptr)
5844 allocate(field_names(nbr_fields))
5845 DO i=1,nbr_fields
5846 field_names(i)%string = yac_internal_cptr2char(field_ptr(i))
5847 END DO
5848 end function yac_fget_field_names
5849
5850 function yac_fget_field_names_instance ( yac_instance_id, &
5851 comp_name, &
5852 grid_name ) &
5853 result( field_names )
5854
5857 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
5858
5859 implicit none
5860
5861 interface
5862 function yac_cget_nbr_fields_instance_c( yac_instance_id, &
5863 comp_name, &
5864 grid_name ) &
5865 result( nbr_fields ) bind(c, name='yac_cget_nbr_fields_instance')
5866 use, intrinsic :: iso_c_binding, only: c_int, c_char
5867 integer(kind=c_int), value, intent(in) :: yac_instance_id
5868 character(kind=c_char), dimension(*), intent(in) :: comp_name
5869 character(kind=c_char), dimension(*), intent(in) :: grid_name
5870 integer(kind=c_int) :: nbr_fields
5871 end function yac_cget_nbr_fields_instance_c
5872
5873 subroutine yac_cget_field_names_instance_c( yac_instance_id, &
5874 comp_name, &
5875 grid_name, &
5876 nbr_fields, &
5877 field_names ) &
5878 bind(c, name='yac_cget_field_names_instance')
5879 use, intrinsic :: iso_c_binding, only: c_int, c_ptr, c_char
5880 integer(kind=c_int), intent(in), value :: yac_instance_id
5881 character(kind=c_char), dimension(*), intent(in) :: comp_name
5882 character(kind=c_char), dimension(*), intent(in) :: grid_name
5883 integer(kind=c_int), intent(in), value :: nbr_fields
5884 TYPE(c_ptr), intent(out) :: field_names(nbr_fields)
5885 end subroutine yac_cget_field_names_instance_c
5886 end interface
5887
5888 integer, intent(in) :: yac_instance_id
5889 character(len=*), intent(in) :: comp_name
5890 character(len=*), intent(in) :: grid_name
5891 type(yac_string), allocatable :: field_names(:)
5892 integer :: nbr_fields
5893 INTEGER :: i
5894 TYPE(c_ptr), allocatable :: field_ptr(:)
5895
5896 nbr_fields = &
5897 yac_cget_nbr_fields_instance_c(yac_instance_id, &
5898 trim(comp_name)//c_null_char, &
5899 trim(grid_name)//c_null_char)
5900 allocate(field_ptr(nbr_fields))
5901 CALL yac_cget_field_names_instance_c(yac_instance_id, &
5902 trim(comp_name)//c_null_char, &
5903 trim(grid_name)//c_null_char, &
5904 nbr_fields, &
5905 field_ptr)
5906 allocate(field_names(nbr_fields))
5907 DO i=1,nbr_fields
5908 field_names(i)%string = yac_internal_cptr2char(field_ptr(i))
5909 END DO
5911
5912! ---------------------------------------------------------------------
5913
5914function yac_fget_field_id ( comp_name, grid_name, field_name ) &
5915 result(field_id)
5916
5917 use yac, dummy => yac_fget_field_id
5918 use, intrinsic :: iso_c_binding, only : c_null_char
5919
5920 implicit none
5921
5922 interface
5923
5924 function yac_cget_field_id_c ( comp_name, grid_name, field_name ) &
5925 result(field_id) &
5926 bind( c, name='yac_cget_field_id' )
5927
5928 use, intrinsic :: iso_c_binding, only : c_int, c_char
5929
5930 character ( kind=c_char ), dimension(*) :: comp_name
5931 character ( kind=c_char ), dimension(*) :: grid_name
5932 character ( kind=c_char ), dimension(*) :: field_name
5933 integer ( kind=c_int ) :: field_id
5934
5935 end function yac_cget_field_id_c
5936
5937 end interface
5938
5939 character(len=*), intent (in) :: comp_name
5940 character(len=*), intent (in) :: grid_name
5941 character(len=*), intent (in) :: field_name
5942 integer :: field_id
5943
5944 field_id = yac_cget_field_id_c( trim(comp_name)//c_null_char, &
5945 trim(grid_name)//c_null_char, &
5946 trim(field_name)//c_null_char )
5947
5948end function yac_fget_field_id
5949
5950function yac_fget_field_id_instance ( yac_id, &
5951 comp_name, &
5952 grid_name, &
5953 field_name ) &
5954 result(field_id)
5955
5956 use yac, dummy => yac_fget_field_id_instance
5957 use, intrinsic :: iso_c_binding, only : c_null_char
5958
5959 implicit none
5960
5961 interface
5962
5963 function yac_cget_field_id_instance_c ( yac_id, &
5964 comp_name, &
5965 grid_name, &
5966 field_name ) &
5967 result(field_id) &
5968 bind( c, name='yac_cget_field_id_instance' )
5969
5970 use, intrinsic :: iso_c_binding, only : c_int, c_char
5971
5972 integer( kind=c_int ), value, intent(in) :: yac_id
5973 character ( kind=c_char ), dimension(*) :: comp_name
5974 character ( kind=c_char ), dimension(*) :: grid_name
5975 character ( kind=c_char ), dimension(*) :: field_name
5976 integer ( kind=c_int ) :: field_id
5977
5978 end function yac_cget_field_id_instance_c
5979
5980 end interface
5981
5982 integer, intent(in) :: yac_id
5983 character(len=*), intent (in) :: comp_name
5984 character(len=*), intent (in) :: grid_name
5985 character(len=*), intent (in) :: field_name
5986 integer :: field_id
5987
5988 field_id = &
5989 yac_cget_field_id_instance_c( yac_id, &
5990 trim(comp_name)//c_null_char, &
5991 trim(grid_name)//c_null_char, &
5992 trim(field_name)//c_null_char )
5993
5994end function yac_fget_field_id_instance
5995
5996! ---------------------------------------------------------------------
5997
5998subroutine yac_fget_action ( field_id, action )
5999
6000 use yac, dummy => yac_fget_action
6001
6002 implicit none
6003
6004 interface
6005
6006 subroutine yac_cget_action_c ( field_id, action ) &
6007 bind( c, name='yac_cget_action' )
6008
6009 use, intrinsic :: iso_c_binding, only : c_int
6010
6011 integer ( kind=c_int ), value :: field_id
6012 integer ( kind=c_int) :: action
6013
6014 end subroutine yac_cget_action_c
6015
6016 end interface
6017
6018 integer, intent (in) :: field_id
6019 integer, intent (out) :: action
6025
6026 call yac_cget_action_c(field_id, action)
6027
6028end subroutine yac_fget_action
6029
6030! ---------------------------------------------------------------------
6031
6032subroutine yac_fupdate ( field_id )
6033
6034 use yac, dummy => yac_fupdate
6035
6036 implicit none
6037
6038 interface
6039
6040 subroutine yac_cupdate_c ( field_id ) &
6041 bind( c, name='yac_cupdate' )
6042
6043 use, intrinsic :: iso_c_binding, only : c_int
6044
6045 integer ( kind=c_int ), value :: field_id
6046
6047 end subroutine yac_cupdate_c
6048
6049 end interface
6050
6051 integer, intent (in) :: field_id
6052
6053 call yac_cupdate_c(field_id)
6054
6055end subroutine yac_fupdate
6056
6057subroutine yac_fdef_couple( src_comp_name, src_grid_name, src_field_name, &
6058 tgt_comp_name, tgt_grid_name, tgt_field_name, &
6059 coupling_timestep, time_unit, time_reduction, interp_stack_config_id, &
6060 src_lag, tgt_lag, weight_file, mapping_side, scale_factor, scale_summand, &
6061 src_mask_names, tgt_mask_name)
6062
6063 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_null_ptr, c_loc
6064 use yac, dummy => yac_fdef_couple
6066
6067 implicit none
6068
6069 interface
6070
6071 subroutine yac_cdef_couple__c( src_comp_name, &
6072 src_grid_name, &
6073 src_field_name, &
6074 tgt_comp_name, &
6075 tgt_grid_name, &
6076 tgt_field_name, &
6077 coupling_timestep, &
6078 time_unit, &
6079 time_reduction, &
6080 interp_stack_config_id, &
6081 src_lag, &
6082 tgt_lag, &
6083 weight_file, &
6084 mapping_side, &
6085 scale_factor, &
6086 scale_summand, &
6087 num_src_mask_names, &
6088 src_mask_names, &
6089 tgt_mask_name) &
6090 bind( c, name='yac_cdef_couple_' )
6091
6092 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr, c_double
6093
6094 character ( kind=c_char ), dimension(*) :: src_comp_name
6095 character ( kind=c_char ), dimension(*) :: src_grid_name
6096 character ( kind=c_char ), dimension(*) :: src_field_name
6097 character ( kind=c_char ), dimension(*) :: tgt_comp_name
6098 character ( kind=c_char ), dimension(*) :: tgt_grid_name
6099 character ( kind=c_char ), dimension(*) :: tgt_field_name
6100 character ( kind=c_char ), dimension(*) :: coupling_timestep
6101 integer ( kind=c_int ), value :: time_unit
6102 integer ( kind=c_int ), value :: time_reduction
6103 integer ( kind=c_int ), value :: interp_stack_config_id
6104 integer ( kind=c_int ), value :: src_lag
6105 integer ( kind=c_int ), value :: tgt_lag
6106 type ( c_ptr ), value :: weight_file
6107 integer ( kind=c_int ), value :: mapping_side
6108 real ( kind=c_double ), value :: scale_factor
6109 real ( kind=c_double ), value :: scale_summand
6110 integer ( kind=c_int ), value :: num_src_mask_names
6111 type ( c_ptr ) :: src_mask_names(*)
6112 type ( c_ptr ), value :: tgt_mask_name
6113 end subroutine yac_cdef_couple__c
6114
6115 end interface
6116
6117 character ( len=* ), intent(in) :: src_comp_name
6118 character ( len=* ), intent(in) :: src_grid_name
6119 character ( len=* ), intent(in) :: src_field_name
6120 character ( len=* ), intent(in) :: tgt_comp_name
6121 character ( len=* ), intent(in) :: tgt_grid_name
6122 character ( len=* ), intent(in) :: tgt_field_name
6123 character ( len=* ), intent(in) :: coupling_timestep
6124 integer, intent(in) :: time_unit
6125 integer, intent(in) :: time_reduction
6126 integer, intent(in) :: interp_stack_config_id
6127 integer, intent(in), optional :: src_lag
6128 integer, intent(in), optional :: tgt_lag
6129 character ( len=* ), intent(in), optional :: weight_file
6130 integer, intent(in), optional :: mapping_side
6131 double precision, intent(in), optional :: scale_factor
6132 double precision, intent(in), optional :: scale_summand
6133 type(yac_string), intent(in), optional :: src_mask_names(:)
6134 character ( len=* ), intent(in), optional :: tgt_mask_name
6135
6136 integer :: i, j
6137 integer :: src_lag_cpy, tgt_lag_cpy, mapping_side_cpy
6138 character(kind=c_char), target :: weight_file_cpy(YAC_MAX_CHARLEN+1)
6139 type(c_ptr) :: weight_file_ptr
6140 double precision :: scale_factor_cpy, scale_summand_cpy
6141 integer :: num_src_mask_names
6142 character(kind=c_char), allocatable, target :: src_mask_names_cpy(:,:)
6143 type(c_ptr), allocatable :: src_mask_names_ptr(:)
6144 character(kind=c_char), target :: tgt_mask_name_cpy(YAC_MAX_CHARLEN+1)
6145 type(c_ptr) :: tgt_mask_name_ptr
6146
6147 yac_check_string_len( "yac_fdef_couple", src_comp_name )
6148 yac_check_string_len( "yac_fdef_couple", src_grid_name )
6149 yac_check_string_len( "yac_fdef_couple", src_field_name )
6150 yac_check_string_len( "yac_fdef_couple", tgt_comp_name )
6151 yac_check_string_len( "yac_fdef_couple", tgt_grid_name )
6152 yac_check_string_len( "yac_fdef_couple", tgt_field_name )
6153 yac_check_string_len( "yac_fdef_couple", coupling_timestep )
6154 if ( present(src_lag) ) then
6155 src_lag_cpy = src_lag
6156 else
6157 src_lag_cpy = 0
6158 end if
6159 if ( present(tgt_lag) ) then
6160 tgt_lag_cpy = tgt_lag
6161 else
6162 tgt_lag_cpy = 0
6163 end if
6164 if ( present(weight_file) ) then
6165 yac_check_string_len( "yac_fdef_couple", weight_file )
6166 weight_file_cpy = c_null_char
6167 do i = 1, len_trim(weight_file)
6168 weight_file_cpy(i) = weight_file(i:i)
6169 end do
6170 weight_file_ptr = c_loc(weight_file_cpy(1))
6171 else
6172 weight_file_ptr = c_null_ptr
6173 end if
6174 if ( present(mapping_side) ) then
6175 mapping_side_cpy = mapping_side
6176 else
6177 mapping_side_cpy = 1
6178 end if
6179 if ( present(scale_factor) ) then
6180 scale_factor_cpy = scale_factor
6181 else
6182 scale_factor_cpy = 1.0
6183 end if
6184 if ( present(scale_summand) ) then
6185 scale_summand_cpy = scale_summand
6186 else
6187 scale_summand_cpy = 0.0
6188 end if
6189 if ( present(src_mask_names) ) then
6190 num_src_mask_names = size(src_mask_names)
6191 allocate(src_mask_names_ptr(num_src_mask_names))
6192 allocate(src_mask_names_cpy(yac_max_charlen+1,num_src_mask_names))
6193 src_mask_names_cpy = c_null_char
6194 do i = 1, num_src_mask_names
6195 yac_fassert(allocated(src_mask_names(i)%string), "ERROR(yac_fdef_couple): source mask name not allocated")
6196 yac_check_string_len( "yac_fdef_couple", src_mask_names(i)%string )
6197 do j = 1, len_trim(src_mask_names(i)%string)
6198 src_mask_names_cpy(j, i) = src_mask_names(i)%string(j:j)
6199 end do
6200 src_mask_names_ptr(i) = c_loc(src_mask_names_cpy(1,i))
6201 end do
6202 else
6203 num_src_mask_names = 0
6204 allocate(src_mask_names_ptr(0))
6205 end if
6206 if ( present(tgt_mask_name) ) then
6207 yac_check_string_len( "yac_fdef_couple", tgt_mask_name )
6208 tgt_mask_name_cpy = c_null_char
6209 do i = 1, len_trim(tgt_mask_name)
6210 tgt_mask_name_cpy(i) = tgt_mask_name(i:i)
6211 end do
6212 tgt_mask_name_ptr = c_loc(tgt_mask_name_cpy(1))
6213 else
6214 tgt_mask_name_ptr = c_null_ptr
6215 end if
6216
6217 call yac_cdef_couple__c( trim(src_comp_name) // c_null_char, &
6218 trim(src_grid_name) // c_null_char, &
6219 trim(src_field_name) // c_null_char, &
6220 trim(tgt_comp_name) // c_null_char, &
6221 trim(tgt_grid_name) // c_null_char, &
6222 trim(tgt_field_name) // c_null_char, &
6223 trim(coupling_timestep) // c_null_char, &
6224 time_unit, &
6225 time_reduction, &
6226 interp_stack_config_id, &
6227 src_lag_cpy, &
6228 tgt_lag_cpy, &
6229 weight_file_ptr, &
6230 mapping_side_cpy, &
6231 scale_factor_cpy, &
6232 scale_summand_cpy, &
6233 num_src_mask_names, &
6234 src_mask_names_ptr, &
6235 tgt_mask_name_ptr)
6236
6237end subroutine yac_fdef_couple
6238
6239subroutine yac_fdef_couple_instance( instance_id, &
6240 src_comp_name, src_grid_name, src_field_name, &
6241 tgt_comp_name, tgt_grid_name, tgt_field_name, &
6242 coupling_timestep, time_unit, time_reduction, &
6243 interp_stack_config_id, src_lag, tgt_lag, &
6244 weight_file, mapping_side, scale_factor, &
6245 scale_summand, src_mask_names, tgt_mask_name )
6246
6247 use, intrinsic :: iso_c_binding, only : c_null_char, c_ptr, c_null_ptr, c_loc
6248 use yac, dummy => yac_fdef_couple_instance
6250
6251 implicit none
6252
6253 interface
6254
6255 subroutine yac_cdef_couple_instance__c( instance_id, &
6256 src_comp_name, &
6257 src_grid_name, &
6258 src_field_name, &
6259 tgt_comp_name, &
6260 tgt_grid_name, &
6261 tgt_field_name, &
6262 coupling_timestep, &
6263 time_unit, &
6264 time_reduction, &
6265 interp_stack_config_id, &
6266 src_lag, &
6267 tgt_lag, &
6268 weight_file, &
6269 mapping_side, &
6270 scale_factor, &
6271 scale_summand, &
6272 num_src_mask_names, &
6273 src_mask_names, &
6274 tgt_mask_name) &
6275 bind( c, name='yac_cdef_couple_instance_' )
6276
6277 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr, c_double
6278
6279 integer ( kind=c_int ), value :: instance_id
6280 character ( kind=c_char ), dimension(*) :: src_comp_name
6281 character ( kind=c_char ), dimension(*) :: src_grid_name
6282 character ( kind=c_char ), dimension(*) :: src_field_name
6283 character ( kind=c_char ), dimension(*) :: tgt_comp_name
6284 character ( kind=c_char ), dimension(*) :: tgt_grid_name
6285 character ( kind=c_char ), dimension(*) :: tgt_field_name
6286 character ( kind=c_char ), dimension(*) :: coupling_timestep
6287 integer ( kind=c_int ), value :: time_unit
6288 integer ( kind=c_int ), value :: time_reduction
6289 integer ( kind=c_int ), value :: interp_stack_config_id
6290 integer ( kind=c_int ), value :: src_lag
6291 integer ( kind=c_int ), value :: tgt_lag
6292 type ( c_ptr ), value :: weight_file
6293 integer ( kind=c_int ), value :: mapping_side
6294 real ( kind=c_double ), value :: scale_factor
6295 real ( kind=c_double ), value :: scale_summand
6296 integer ( kind=c_int ), value :: num_src_mask_names
6297 type ( c_ptr ) :: src_mask_names(*)
6298 type ( c_ptr ), value :: tgt_mask_name
6299 end subroutine yac_cdef_couple_instance__c
6300
6301 end interface
6302
6303 integer, intent(in) :: instance_id
6304 character ( len=* ), intent(in) :: src_comp_name
6305 character ( len=* ), intent(in) :: src_grid_name
6306 character ( len=* ), intent(in) :: src_field_name
6307 character ( len=* ), intent(in) :: tgt_comp_name
6308 character ( len=* ), intent(in) :: tgt_grid_name
6309 character ( len=* ), intent(in) :: tgt_field_name
6310 character ( len=* ), intent(in) :: coupling_timestep
6311 integer, intent(in) :: time_unit
6312 integer, intent(in) :: time_reduction
6313 integer, intent(in) :: interp_stack_config_id
6314 integer, intent(in), optional :: src_lag
6315 integer, intent(in), optional :: tgt_lag
6316 character ( len=* ), intent(in), optional :: weight_file
6317 integer, intent(in), optional :: mapping_side
6318 double precision, intent(in), optional :: scale_factor
6319 double precision, intent(in), optional :: scale_summand
6320 type(yac_string), intent(in), optional :: src_mask_names(:)
6321 character ( len=* ), intent(in), optional :: tgt_mask_name
6322
6323 integer :: i, j
6324 integer :: src_lag_cpy, tgt_lag_cpy, mapping_side_cpy
6325 character(kind=c_char), target :: weight_file_cpy(YAC_MAX_CHARLEN+1)
6326 type(c_ptr) :: weight_file_ptr
6327 double precision :: scale_factor_cpy, scale_summand_cpy
6328 integer :: num_src_mask_names
6329 character(kind=c_char), allocatable, target :: src_mask_names_cpy(:,:)
6330 type(c_ptr), allocatable :: src_mask_names_ptr(:)
6331 character(kind=c_char), target :: tgt_mask_name_cpy(YAC_MAX_CHARLEN+1)
6332 type(c_ptr) :: tgt_mask_name_ptr
6333
6334 yac_check_string_len( "yac_fdef_couple_instance", src_comp_name )
6335 yac_check_string_len( "yac_fdef_couple_instance", src_grid_name )
6336 yac_check_string_len( "yac_fdef_couple_instance", src_field_name )
6337 yac_check_string_len( "yac_fdef_couple_instance", tgt_comp_name )
6338 yac_check_string_len( "yac_fdef_couple_instance", tgt_grid_name )
6339 yac_check_string_len( "yac_fdef_couple_instance", tgt_field_name )
6340 yac_check_string_len( "yac_fdef_couple_instance", coupling_timestep )
6341 if ( present(src_lag) ) then
6342 src_lag_cpy = src_lag
6343 else
6344 src_lag_cpy = 0
6345 end if
6346 if ( present(tgt_lag) ) then
6347 tgt_lag_cpy = tgt_lag
6348 else
6349 tgt_lag_cpy = 0
6350 end if
6351 if ( present(weight_file) ) then
6352 yac_check_string_len( "yac_fdef_couple_instance", weight_file )
6353 weight_file_cpy = c_null_char
6354 do i = 1, len_trim(weight_file)
6355 weight_file_cpy(i) = weight_file(i:i)
6356 end do
6357 weight_file_ptr = c_loc(weight_file_cpy(1))
6358 else
6359 weight_file_ptr = c_null_ptr
6360 end if
6361 if ( present(mapping_side) ) then
6362 mapping_side_cpy = mapping_side
6363 else
6364 mapping_side_cpy = 1
6365 end if
6366 if ( present(scale_factor) ) then
6367 scale_factor_cpy = scale_factor
6368 else
6369 scale_factor_cpy = 1.0
6370 end if
6371 if ( present(scale_summand) ) then
6372 scale_summand_cpy = scale_summand
6373 else
6374 scale_summand_cpy = 0.0
6375 end if
6376 if ( present(src_mask_names) ) then
6377 num_src_mask_names = size(src_mask_names)
6378 allocate(src_mask_names_ptr(num_src_mask_names))
6379 allocate(src_mask_names_cpy(yac_max_charlen+1,num_src_mask_names))
6380 src_mask_names_cpy = c_null_char
6381 do i = 1, num_src_mask_names
6382 yac_fassert(allocated(src_mask_names(i)%string), "ERROR(yac_fdef_couple): source mask name not allocated")
6383 yac_check_string_len( "yac_fdef_couple_instance", src_mask_names(i)%string )
6384 do j = 1, len_trim(src_mask_names(i)%string)
6385 src_mask_names_cpy(j, i) = src_mask_names(i)%string(j:j)
6386 end do
6387 src_mask_names_ptr(i) = c_loc(src_mask_names_cpy(1,i))
6388 end do
6389 else
6390 num_src_mask_names = 0
6391 allocate(src_mask_names_ptr(0))
6392 end if
6393 if ( present(tgt_mask_name) ) then
6394 yac_check_string_len( "yac_fdef_couple_instance", tgt_mask_name )
6395 tgt_mask_name_cpy = c_null_char
6396 do i = 1, len_trim(tgt_mask_name)
6397 tgt_mask_name_cpy(i) = tgt_mask_name(i:i)
6398 end do
6399 tgt_mask_name_ptr = c_loc(tgt_mask_name_cpy(1))
6400 else
6401 tgt_mask_name_ptr = c_null_ptr
6402 end if
6403
6404 call yac_cdef_couple_instance__c( instance_id, &
6405 trim(src_comp_name) // c_null_char, &
6406 trim(src_grid_name) // c_null_char, &
6407 trim(src_field_name) // c_null_char, &
6408 trim(tgt_comp_name) // c_null_char, &
6409 trim(tgt_grid_name) // c_null_char, &
6410 trim(tgt_field_name) // c_null_char, &
6411 trim(coupling_timestep) // c_null_char, &
6412 time_unit, &
6413 time_reduction, &
6414 interp_stack_config_id, &
6415 src_lag_cpy, &
6416 tgt_lag_cpy, &
6417 weight_file_ptr, &
6418 mapping_side_cpy, &
6419 scale_factor_cpy, &
6420 scale_summand_cpy, &
6421 num_src_mask_names, &
6422 src_mask_names_ptr, &
6423 tgt_mask_name_ptr )
6424
6425end subroutine yac_fdef_couple_instance
6426
6427! ---------------------------------------------------------------------
6428
6430 result(comp_name)
6431
6434
6435 implicit none
6436
6437 interface
6438
6439 function yac_cget_component_name_from_field_id_c ( field_id ) &
6440 result(comp_name) &
6441 bind( c, name='yac_cget_component_name_from_field_id' )
6442
6443 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6444
6445 integer ( kind=c_int ), value :: field_id
6446 TYPE(c_ptr) :: comp_name
6447
6448 end function yac_cget_component_name_from_field_id_c
6449
6450 end interface
6451
6452 integer, intent (in) :: field_id
6453 character (len=:), allocatable :: comp_name
6454
6455 comp_name = yac_internal_cptr2char( &
6456 yac_cget_component_name_from_field_id_c( field_id ))
6457
6459
6460 ! ---------------------------------------------------------------------
6461
6463 result(grid_name)
6464
6467
6468 implicit none
6469
6470 interface
6471
6472 function yac_cget_grid_name_from_field_id_c ( field_id ) &
6473 result(grid_name) &
6474 bind( c, name='yac_cget_grid_name_from_field_id' )
6475
6476 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6477
6478 integer ( kind=c_int ), value :: field_id
6479 TYPE(c_ptr) :: grid_name
6480
6481 end function yac_cget_grid_name_from_field_id_c
6482
6483 end interface
6484
6485 integer, intent (in) :: field_id
6486 character (len=:), ALLOCATABLE :: grid_name
6487
6488 grid_name = yac_internal_cptr2char( &
6489 yac_cget_grid_name_from_field_id_c( field_id ))
6490
6492
6493! ---------------------------------------------------------------------
6494
6496 result(field_name)
6497
6500
6501 implicit none
6502
6503 interface
6504
6505 function yac_cget_field_name_from_field_id_c ( field_id ) &
6506 result(field_name) &
6507 bind( c, name='yac_cget_field_name_from_field_id' )
6508
6509 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6510
6511 integer ( kind=c_int ), value :: field_id
6512 TYPE(c_ptr) :: field_name
6513
6514 end function yac_cget_field_name_from_field_id_c
6515
6516 end interface
6517
6518 integer, intent (in) :: field_id
6519 character (len=:), ALLOCATABLE :: field_name
6520
6521 field_name = yac_internal_cptr2char( &
6522 yac_cget_field_name_from_field_id_c( field_id ))
6523
6525
6526! ---------------------------------------------------------------------
6527
6528 function yac_fget_role_from_field_id ( field_id )
6529
6530 use yac, dummy => yac_fget_role_from_field_id
6531
6532 implicit none
6533
6534 interface
6535
6536 function yac_cget_role_from_field_id_c ( field_id ) &
6537 bind( c, name='yac_cget_role_from_field_id' )
6538
6539 use, intrinsic :: iso_c_binding, only : c_int
6540
6541 integer ( kind=c_int ), value :: field_id
6542 integer ( kind=c_int ) :: yac_cget_role_from_field_id_c
6543
6544 end function yac_cget_role_from_field_id_c
6545
6546 end interface
6547
6548 integer, intent (in) :: field_id
6550
6552 yac_cget_role_from_field_id_c( field_id )
6553
6554 end function yac_fget_role_from_field_id
6555
6556 ! Note that in contrast to most of the other functions in this file, we have to
6557 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
6558 ! the file due to the fact that the name of the function is also a name of the
6559 ! interface in the yac module.
6560 function yac_fget_field_role ( comp_name, grid_name, field_name ) result( res )
6561
6562 use yac, dummy => yac_fget_field_role
6563 use, intrinsic :: iso_c_binding, only: c_null_char
6564
6565 implicit none
6566
6567 interface
6568
6569 function yac_cget_field_role_c ( comp_name, grid_name, field_name ) &
6570 bind( c, name='yac_cget_field_role' )
6571
6572 use, intrinsic :: iso_c_binding, only : c_int, c_char
6573
6574 character( kind=c_char), dimension(*), intent(in) :: comp_name
6575 character( kind=c_char), dimension(*), intent(in) :: grid_name
6576 character( kind=c_char), dimension(*), intent(in) :: field_name
6577 integer ( kind=c_int ) :: yac_cget_field_role_c
6578
6579 end function yac_cget_field_role_c
6580
6581 end interface
6582
6583 character(len=*), intent(in) :: comp_name
6584 character(len=*), intent(in) :: grid_name
6585 character(len=*), intent(in) :: field_name
6586 integer :: res
6587
6588 res = yac_cget_field_role_c( &
6589 trim(comp_name) // c_null_char, &
6590 trim(grid_name) // c_null_char, &
6591 trim(field_name) // c_null_char )
6592
6593 end function yac_fget_field_role
6594
6595 function yac_fget_field_role_instance ( yac_instance_id, comp_name, grid_name, field_name )
6596
6597 use yac, dummy => yac_fget_field_role_instance
6598 use, intrinsic :: iso_c_binding, only: c_null_char
6599
6600 implicit none
6601
6602 interface
6603
6604 function yac_cget_field_role_instance_c ( yac_instance_id, &
6605 comp_name, &
6606 grid_name, &
6607 field_name ) &
6608 bind( c, name='yac_cget_field_role_instance' )
6609
6610 use, intrinsic :: iso_c_binding, only : c_int, c_char
6611
6612 integer( kind=c_int ), intent(in), value :: yac_instance_id
6613 character( kind=c_char), dimension(*), intent(in) :: comp_name
6614 character( kind=c_char), dimension(*), intent(in) :: grid_name
6615 character( kind=c_char), dimension(*), intent(in) :: field_name
6616 integer ( kind=c_int ) :: yac_cget_field_role_instance_c
6617
6618 end function yac_cget_field_role_instance_c
6619
6620 end interface
6621
6622 integer, intent(in) :: yac_instance_id
6623 character(len=*), intent(in) :: comp_name
6624 character(len=*), intent(in) :: grid_name
6625 character(len=*), intent(in) :: field_name
6627
6629 yac_cget_field_role_instance_c( &
6630 yac_instance_id, &
6631 trim(comp_name) // c_null_char, &
6632 trim(grid_name) // c_null_char, &
6633 trim(field_name) // c_null_char )
6634
6635 end function yac_fget_field_role_instance
6636
6637! ---------------------------------------------------------------------
6638
6639function yac_fget_timestep_from_field_id ( field_id ) result(string)
6640
6643
6644 implicit none
6645
6646 interface
6647
6648 function yac_cget_timestep_from_field_id_c ( field_id ) &
6649 result(string) &
6650 bind( c, name='yac_cget_timestep_from_field_id' )
6651
6652 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6653
6654 integer ( kind=c_int ), value :: field_id
6655 type(c_ptr) :: string
6656
6657 end function yac_cget_timestep_from_field_id_c
6658
6659 end interface
6660
6661 integer, intent (in) :: field_id
6662 character (len=:), ALLOCATABLE :: string
6663
6664 string = &
6666 yac_cget_timestep_from_field_id_c(field_id))
6667
6669
6670 function yac_fget_field_timestep ( comp_name, grid_name, field_name ) &
6671 result( timestep )
6672
6673 use yac, dummy => yac_fget_field_timestep
6675 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
6676
6677 implicit none
6678
6679 interface
6680
6681 function yac_cget_field_timestep_c ( comp_name, grid_name, field_name) &
6682 result( timestep ) &
6683 bind( c, name='yac_cget_field_timestep' )
6684
6685 use, intrinsic :: iso_c_binding, only : c_char, c_ptr
6686
6687 character( kind=c_char), dimension(*), intent(in) :: comp_name
6688 character( kind=c_char), dimension(*), intent(in) :: grid_name
6689 character( kind=c_char), dimension(*), intent(in) :: field_name
6690 type(c_ptr) :: timestep
6691 end function yac_cget_field_timestep_c
6692
6693 end interface
6694
6695 character(len=*), intent(in) :: comp_name
6696 character(len=*), intent(in) :: grid_name
6697 character(len=*), intent(in) :: field_name
6698 character(len=:), ALLOCATABLE :: timestep
6699 TYPE(c_ptr) :: c_char_ptr
6700
6701 c_char_ptr = &
6702 yac_cget_field_timestep_c( &
6703 trim(comp_name) // c_null_char, &
6704 trim(grid_name) // c_null_char, &
6705 trim(field_name) // c_null_char)
6706
6707 timestep = yac_internal_cptr2char(c_char_ptr)
6708 end function yac_fget_field_timestep
6709
6710 function yac_fget_field_timestep_instance ( yac_instance_id, comp_name, grid_name, field_name ) &
6711 result( timestep )
6712
6715 use, intrinsic :: iso_c_binding, only: c_ptr, c_null_char
6716
6717 implicit none
6718
6719 interface
6720
6721 function yac_cget_field_timestep_instance_c ( yac_instance_id, &
6722 comp_name, &
6723 grid_name, &
6724 field_name ) &
6725 result( timestep ) &
6726 bind( c, name='yac_cget_field_timestep_instance' )
6727
6728 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_ptr
6729
6730 integer( kind=c_int ), intent(in), value :: yac_instance_id
6731 character( kind=c_char), dimension(*), intent(in) :: comp_name
6732 character( kind=c_char), dimension(*), intent(in) :: grid_name
6733 character( kind=c_char), dimension(*), intent(in) :: field_name
6734 type(c_ptr) :: timestep
6735
6736 end function yac_cget_field_timestep_instance_c
6737
6738 end interface
6739
6740 integer, intent(in) :: yac_instance_id
6741 character(len=*), intent(in) :: comp_name
6742 character(len=*), intent(in) :: grid_name
6743 character(len=*), intent(in) :: field_name
6744 character(len=:), ALLOCATABLE :: timestep
6745 type(c_ptr) :: c_char_ptr
6746
6747 c_char_ptr = &
6748 yac_cget_field_timestep_instance_c( &
6749 yac_instance_id, &
6750 trim(comp_name) // c_null_char, &
6751 trim(grid_name) // c_null_char, &
6752 trim(field_name) // c_null_char)
6753
6754 timestep = yac_internal_cptr2char(c_char_ptr)
6755
6757
6758! ---------------------------------------------------------------------
6759
6760function yac_fget_field_datetime(field_id) &
6761 result(datetime)
6762
6763 use yac, dummy => yac_fget_field_datetime
6765
6766 implicit none
6767
6768 interface
6769 function yac_cget_field_datetime_c( field_id ) &
6770 result(datetime) &
6771 bind ( c, name="yac_cget_field_datetime" )
6772 use, intrinsic :: iso_c_binding, only : c_int, c_ptr
6773 integer (kind=c_int ), intent(in), value :: field_id
6774 type(c_ptr) :: datetime
6775 end function yac_cget_field_datetime_c
6776 end interface
6777
6778 integer, intent(in) :: field_id
6779 character(len=:), allocatable :: datetime
6780 datetime = yac_internal_cptr2char(yac_cget_field_datetime_c(field_id))
6781end function yac_fget_field_datetime
6782
6783! ---------------------------------------------------------------------
6784
6786 comp_name, grid_name, field_name, frac_mask_fallback_value)
6787
6788 use, intrinsic :: iso_c_binding, only: c_null_char
6789 use yac, dummy => yac_fenable_field_frac_mask
6790
6791 implicit none
6792
6793 interface
6794 subroutine yac_cenable_field_frac_mask_c (comp_name, &
6795 grid_name, &
6796 field_name, &
6797 frac_mask_fallback_value) &
6798 bind( c, name="yac_cenable_field_frac_mask" )
6799 use, intrinsic :: iso_c_binding, only: c_char, c_double
6800 character(kind=c_char), dimension(*), intent(in) :: comp_name
6801 character(kind=c_char), dimension(*), intent(in) :: grid_name
6802 character(kind=c_char), dimension(*), intent(in) :: field_name
6803 real(kind=c_double), value :: frac_mask_fallback_value
6804 end subroutine yac_cenable_field_frac_mask_c
6805 end interface
6806
6807 character(len=*), intent(in) :: comp_name
6808 character(len=*), intent(in) :: grid_name
6809 character(len=*), intent(in) :: field_name
6810 double precision, intent(in) :: frac_mask_fallback_value
6811
6812 CALL yac_cenable_field_frac_mask_c ( &
6813 trim(comp_name) // c_null_char, &
6814 trim(grid_name) // c_null_char, &
6815 trim(field_name) // c_null_char, &
6816 frac_mask_fallback_value)
6817 end subroutine yac_fenable_field_frac_mask
6818
6819 subroutine yac_fenable_field_frac_mask_instance(yac_instance_id, comp_name, &
6820 grid_name, field_name, frac_mask_fallback_value)
6821
6822 use, intrinsic :: iso_c_binding, only: c_null_char
6824
6825 implicit none
6826
6827 interface
6828 subroutine yac_cenable_field_frac_mask_instance_c ( &
6829 yac_instance_id, comp_name, grid_name, field_name, &
6830 frac_mask_fallback_value) &
6831 bind( c, name="yac_cenable_field_frac_mask_instance" )
6832 use, intrinsic :: iso_c_binding, only: c_char, c_double, c_int
6833 integer(kind=c_int), intent(in), value :: yac_instance_id
6834 character(kind=c_char), dimension(*), intent(in) :: comp_name
6835 character(kind=c_char), dimension(*), intent(in) :: grid_name
6836 character(kind=c_char), dimension(*), intent(in) :: field_name
6837 real(kind=c_double), value :: frac_mask_fallback_value
6838 end subroutine yac_cenable_field_frac_mask_instance_c
6839 end interface
6840
6841 integer, intent(in) :: yac_instance_id
6842 character(len=*), intent(in) :: comp_name
6843 character(len=*), intent(in) :: grid_name
6844 character(len=*), intent(in) :: field_name
6845 double precision, intent(in) :: frac_mask_fallback_value
6846
6847 CALL yac_cenable_field_frac_mask_instance_c ( &
6848 yac_instance_id, &
6849 trim(comp_name) // c_null_char, &
6850 trim(grid_name) // c_null_char, &
6851 trim(field_name) // c_null_char, &
6852 frac_mask_fallback_value)
6854
6855! ---------------------------------------------------------------------
6856
6857 ! Note that in contrast to most of the other functions in this file, we have to
6858 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
6859 ! the file due to the fact that the name of the function is also a name of the
6860 ! interface in the yac module.
6862 comp_name, grid_name, field_name ) result( res )
6863
6865 use, intrinsic :: iso_c_binding, only: c_null_char
6866
6867 implicit none
6868
6869 interface
6870
6871 function yac_cget_field_frac_mask_fallback_value_c ( &
6872 comp_name, grid_name, field_name ) &
6873 bind( c, name='yac_cget_field_frac_mask_fallback_value' )
6874
6875 use, intrinsic :: iso_c_binding, only : c_double, c_char
6876
6877 character( kind=c_char), dimension(*), intent(in) :: comp_name
6878 character( kind=c_char), dimension(*), intent(in) :: grid_name
6879 character( kind=c_char), dimension(*), intent(in) :: field_name
6880 real ( kind=c_double ) :: yac_cget_field_frac_mask_fallback_value_c
6881
6882 end function yac_cget_field_frac_mask_fallback_value_c
6883
6884 end interface
6885
6886 character(len=*), intent(in) :: comp_name
6887 character(len=*), intent(in) :: grid_name
6888 character(len=*), intent(in) :: field_name
6889 double precision :: res
6890
6891 res = yac_cget_field_frac_mask_fallback_value_c( &
6892 trim(comp_name) // c_null_char, &
6893 trim(grid_name) // c_null_char, &
6894 trim(field_name) // c_null_char )
6895
6897
6899 yac_instance_id, comp_name, grid_name, field_name )
6900
6902 use, intrinsic :: iso_c_binding, only: c_null_char
6903
6904 implicit none
6905
6906 interface
6907
6908 function yac_cget_field_frac_mask_fallback_value_instance_c ( &
6909 yac_instance_id, comp_name, grid_name, field_name ) &
6910 bind( c, name='yac_cget_field_frac_mask_fallback_value_instance' )
6911
6912 use, intrinsic :: iso_c_binding, only : c_int, c_char, c_double
6913
6914 integer( kind=c_int ), intent(in), value :: yac_instance_id
6915 character( kind=c_char), dimension(*), intent(in) :: comp_name
6916 character( kind=c_char), dimension(*), intent(in) :: grid_name
6917 character( kind=c_char), dimension(*), intent(in) :: field_name
6918 real ( kind=c_double ) :: yac_cget_field_frac_mask_fallback_value_instance_c
6919
6920 end function yac_cget_field_frac_mask_fallback_value_instance_c
6921
6922 end interface
6923
6924 integer, intent(in) :: yac_instance_id
6925 character(len=*), intent(in) :: comp_name
6926 character(len=*), intent(in) :: grid_name
6927 character(len=*), intent(in) :: field_name
6929
6931 yac_cget_field_frac_mask_fallback_value_instance_c( &
6932 yac_instance_id, &
6933 trim(comp_name) // c_null_char, &
6934 trim(grid_name) // c_null_char, &
6935 trim(field_name) // c_null_char )
6936
6938
6939 ! ---------------------------------------------------------------------
6940
6942 result(collection_size)
6943
6946
6947 implicit none
6948
6949 interface
6950
6951 function yac_cget_collection_size_from_field_id_c ( field_id ) &
6952 result(collection_size) &
6953 bind( c, name='yac_cget_collection_size_from_field_id' )
6954
6955 use, intrinsic :: iso_c_binding, only : c_int
6956
6957 integer ( kind=c_int ), value :: field_id
6958 integer ( kind=c_int ) :: collection_size
6959
6960 end function yac_cget_collection_size_from_field_id_c
6961
6962 end interface
6963
6964 integer, intent (in) :: field_id
6965 integer :: collection_size
6966
6967 collection_size = &
6968 yac_cget_collection_size_from_field_id_c( field_id )
6969
6971
6972 ! Note that in contrast to most of the other functions in this file, we have to
6973 ! introduce a separate result variable below. Otherwise, NVHPC fails to compile
6974 ! the file due to the fact that the name of the function is also a name of the
6975 ! interface in the yac module.
6976 function yac_fget_field_collection_size ( comp_name, grid_name, field_name ) result( res )
6977
6979 use, intrinsic :: iso_c_binding, only: c_null_char
6980
6981 implicit none
6982
6983 interface
6984
6985 function yac_cget_field_collection_size_c ( comp_name, &
6986 grid_name, &
6987 field_name ) &
6988 bind( c, name='yac_cget_field_collection_size' )
6989
6990 use, intrinsic :: iso_c_binding, only : c_int, c_char
6991
6992 character( kind=c_char), dimension(*), intent(in) :: comp_name
6993 character( kind=c_char), dimension(*), intent(in) :: grid_name
6994 character( kind=c_char), dimension(*), intent(in) :: field_name
6995 integer ( kind=c_int ) :: yac_cget_field_collection_size_c
6996
6997 end function yac_cget_field_collection_size_c
6998
6999 end interface
7000
7001 character(len=*), intent(in) :: comp_name
7002 character(len=*), intent(in) :: grid_name
7003 character(len=*), intent(in) :: field_name
7004 integer :: res
7005
7006 res = yac_cget_field_collection_size_c( &
7007 trim(comp_name) // c_null_char, &
7008 trim(grid_name) // c_null_char, &
7009 trim(field_name) // c_null_char )
7010
7012
7013 function yac_fget_field_collection_size_instance ( yac_instance_id, comp_name, grid_name, field_name )
7014
7016 use, intrinsic :: iso_c_binding, only: c_null_char
7017
7018 implicit none
7019
7020 interface
7021
7022 function yac_cget_field_collection_size_instance_c ( yac_instance_id, &
7023 comp_name, &
7024 grid_name, &
7025 field_name ) &
7026 bind( c, name='yac_cget_field_collection_size_instance' )
7027
7028 use, intrinsic :: iso_c_binding, only : c_int, c_char
7029
7030 integer( kind=c_int ), intent(in), value :: yac_instance_id
7031 character( kind=c_char), dimension(*), intent(in) :: comp_name
7032 character( kind=c_char), dimension(*), intent(in) :: grid_name
7033 character( kind=c_char), dimension(*), intent(in) :: field_name
7034 integer ( kind=c_int ) :: yac_cget_field_collection_size_instance_c
7035
7036 end function yac_cget_field_collection_size_instance_c
7037
7038 end interface
7039
7040 integer, intent(in) :: yac_instance_id
7041 character(len=*), intent(in) :: comp_name
7042 character(len=*), intent(in) :: grid_name
7043 character(len=*), intent(in) :: field_name
7045
7047 yac_cget_field_collection_size_instance_c( &
7048 yac_instance_id, &
7049 trim(comp_name) // c_null_char, &
7050 trim(grid_name) // c_null_char, &
7051 trim(field_name) // c_null_char )
7052
7054
7055 ! ---------------------------------------------------------------------
7056
7057 subroutine yac_fdef_component_metadata(comp_name, metadata)
7058
7059 use, intrinsic :: iso_c_binding, only: c_null_char
7060 use yac, dummy => yac_fdef_component_metadata
7061
7062 implicit none
7063
7064 interface
7065 subroutine yac_cdef_component_metadata_c (comp_name, metadata) &
7066 bind( c, name="yac_cdef_component_metadata" )
7067 use, intrinsic :: iso_c_binding, only: c_char
7068 character(kind=c_char), dimension(*), intent(in) :: comp_name
7069 character(kind=c_char), dimension(*), intent(in) :: metadata
7070 end subroutine yac_cdef_component_metadata_c
7071 end interface
7072
7073 character(len=*), intent(in) :: comp_name
7074 character(len=*), intent(in) :: metadata
7075 CALL yac_cdef_component_metadata_c (trim(comp_name) // c_null_char, &
7076 trim(metadata) // c_null_char)
7077 end subroutine yac_fdef_component_metadata
7078
7079 subroutine yac_fdef_component_metadata_instance(yac_instance_id, comp_name, &
7080 metadata)
7081
7082 use, intrinsic :: iso_c_binding, only: c_null_char
7084
7085 implicit none
7086
7087 interface
7088 subroutine yac_cdef_component_metadata_instance_c (yac_instance_id, &
7089 comp_name, &
7090 metadata) &
7091 bind( c, name="yac_cdef_component_metadata_instance" )
7092 use, intrinsic :: iso_c_binding, only: c_char, c_int
7093 integer(kind=c_int), intent(in), value :: yac_instance_id
7094 character(kind=c_char), dimension(*), intent(in) :: comp_name
7095 character(kind=c_char), dimension(*), intent(in) :: metadata
7096 end subroutine yac_cdef_component_metadata_instance_c
7097 end interface
7098
7099 integer, intent(in) :: yac_instance_id
7100 character(len=*), intent(in) :: comp_name
7101 character(len=*), intent(in) :: metadata
7102 CALL yac_cdef_component_metadata_instance_c ( &
7103 yac_instance_id, &
7104 trim(comp_name) // c_null_char, &
7105 trim(metadata) // c_null_char)
7107
7108 subroutine yac_fdef_grid_metadata(grid_name, metadata)
7109
7110 use, intrinsic :: iso_c_binding, only: c_null_char
7111 use yac, dummy => yac_fdef_grid_metadata
7112
7113 implicit none
7114
7115 interface
7116 subroutine yac_cdef_grid_metadata_c (grid_name, metadata) &
7117 bind( c, name="yac_cdef_grid_metadata" )
7118 use, intrinsic :: iso_c_binding, only: c_char
7119 character(kind=c_char), dimension(*), intent(in) :: grid_name
7120 character(kind=c_char), dimension(*), intent(in) :: metadata
7121 end subroutine yac_cdef_grid_metadata_c
7122 end interface
7123
7124 character(len=*), intent(in) :: grid_name
7125 character(len=*), intent(in) :: metadata
7126 CALL yac_cdef_grid_metadata_c ( trim(grid_name) // c_null_char, &
7127 trim(metadata) // c_null_char)
7128 end subroutine yac_fdef_grid_metadata
7129
7130 subroutine yac_fdef_grid_metadata_instance(yac_instance_id, grid_name, metadata)
7131
7132 use, intrinsic :: iso_c_binding, only: c_null_char
7134
7135 implicit none
7136
7137 interface
7138 subroutine yac_cdef_grid_metadata_instance_c (yac_instance_id, &
7139 grid_name, &
7140 metadata) &
7141 bind( c, name="yac_cdef_grid_metadata_instance" )
7142 use, intrinsic :: iso_c_binding, only: c_char, c_int
7143 integer(kind=c_int), intent(in), value :: yac_instance_id
7144 character(kind=c_char), dimension(*), intent(in) :: grid_name
7145 character(kind=c_char), dimension(*), intent(in) :: metadata
7146 end subroutine yac_cdef_grid_metadata_instance_c
7147 end interface
7148
7149 integer, intent(in) :: yac_instance_id
7150 character(len=*), intent(in) :: grid_name
7151 character(len=*), intent(in) :: metadata
7152 CALL yac_cdef_grid_metadata_instance_c ( &
7153 yac_instance_id, &
7154 trim(grid_name) // c_null_char, &
7155 trim(metadata) // c_null_char)
7156 end subroutine yac_fdef_grid_metadata_instance
7157
7158 subroutine yac_fdef_field_metadata(comp_name, grid_name, field_name, metadata)
7159
7160 use, intrinsic :: iso_c_binding, only: c_null_char
7161 use yac, dummy => yac_fdef_field_metadata
7162
7163 implicit none
7164
7165 interface
7166 subroutine yac_cdef_field_metadata_c (comp_name, &
7167 grid_name, &
7168 field_name, &
7169 metadata) &
7170 bind( c, name="yac_cdef_field_metadata" )
7171 use, intrinsic :: iso_c_binding, only: c_char
7172 character(kind=c_char), dimension(*), intent(in) :: comp_name
7173 character(kind=c_char), dimension(*), intent(in) :: grid_name
7174 character(kind=c_char), dimension(*), intent(in) :: field_name
7175 character(kind=c_char), dimension(*), intent(in) :: metadata
7176 end subroutine yac_cdef_field_metadata_c
7177 end interface
7178
7179 character(len=*), intent(in) :: comp_name
7180 character(len=*), intent(in) :: grid_name
7181 character(len=*), intent(in) :: field_name
7182 character(len=*), intent(in) :: metadata
7183 CALL yac_cdef_field_metadata_c ( &
7184 trim(comp_name) // c_null_char, &
7185 trim(grid_name) // c_null_char, &
7186 trim(field_name) // c_null_char, &
7187 trim(metadata) // c_null_char)
7188 end subroutine yac_fdef_field_metadata
7189
7190 subroutine yac_fdef_field_metadata_instance(yac_instance_id, comp_name, &
7191 grid_name, field_name, metadata)
7192
7193 use, intrinsic :: iso_c_binding, only: c_null_char
7195
7196 implicit none
7197
7198 interface
7199 subroutine yac_cdef_field_metadata_instance_c (yac_instance_id, &
7200 comp_name, &
7201 grid_name, &
7202 field_name, &
7203 metadata) &
7204 bind( c, name="yac_cdef_field_metadata_instance" )
7205 use, intrinsic :: iso_c_binding, only: c_char, c_int
7206 integer(kind=c_int), intent(in), value :: yac_instance_id
7207 character(kind=c_char), dimension(*), intent(in) :: comp_name
7208 character(kind=c_char), dimension(*), intent(in) :: grid_name
7209 character(kind=c_char), dimension(*), intent(in) :: field_name
7210 character(kind=c_char), dimension(*), intent(in) :: metadata
7211 end subroutine yac_cdef_field_metadata_instance_c
7212 end interface
7213
7214 integer, intent(in) :: yac_instance_id
7215 character(len=*), intent(in) :: comp_name
7216 character(len=*), intent(in) :: grid_name
7217 character(len=*), intent(in) :: field_name
7218 character(len=*), intent(in) :: metadata
7219 CALL yac_cdef_field_metadata_instance_c ( &
7220 yac_instance_id, &
7221 trim(comp_name) // c_null_char, &
7222 trim(grid_name) // c_null_char, &
7223 trim(field_name) // c_null_char, &
7224 trim(metadata) // c_null_char)
7226
7227 function yac_fcomponent_has_metadata(comp_name) result( has_metadata )
7228 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7229 use yac, dummy => yac_fcomponent_has_metadata
7231 implicit none
7232
7233 interface
7234 function yac_cget_component_metadata_c (comp_name) &
7235 result(metadata) &
7236 bind( c, name="yac_cget_component_metadata")
7237 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7238 character(kind=c_char), dimension(*), intent(in) :: comp_name
7239 type(c_ptr) :: metadata
7240 end function yac_cget_component_metadata_c
7241 end interface
7242 character(len=*), intent(in) :: comp_name
7243 logical :: has_metadata
7244 has_metadata = &
7245 c_associated( &
7246 yac_cget_component_metadata_c(trim(comp_name) // c_null_char))
7247 end function yac_fcomponent_has_metadata
7248
7249 function yac_fcomponent_has_metadata_instance(yac_instance_id, comp_name) &
7250 result( has_metadata )
7251 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7254 implicit none
7255
7256 interface
7257 function yac_cget_component_metadata_instance_c(yac_instance_id, &
7258 comp_name) &
7259 result(metadata) &
7260 bind( c, name="yac_cget_component_metadata_instance")
7261 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7262 integer(kind=c_int), intent(in), value :: yac_instance_id
7263 character(kind=c_char), dimension(*), intent(in) :: comp_name
7264 type(c_ptr) :: metadata
7265 end function yac_cget_component_metadata_instance_c
7266 end interface
7267 integer, intent(in) :: yac_instance_id
7268 character(len=*), intent(in) :: comp_name
7269 logical :: has_metadata
7270 has_metadata = &
7271 c_associated( &
7272 yac_cget_component_metadata_instance_c( &
7273 yac_instance_id, trim(comp_name) // c_null_char))
7275
7276 function yac_fgrid_has_metadata(grid_name) result( has_metadata )
7277 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7278 use yac, dummy => yac_fgrid_has_metadata
7280 implicit none
7281
7282 interface
7283 function yac_cget_grid_metadata_c(grid_name) result(metadata) &
7284 bind( c, name="yac_cget_grid_metadata")
7285 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7286 character(kind=c_char), dimension(*), intent(in) :: grid_name
7287 type(c_ptr) :: metadata
7288 end function yac_cget_grid_metadata_c
7289 end interface
7290 character(len=*), intent(in) :: grid_name
7291 logical :: has_metadata
7292 has_metadata = &
7293 c_associated(yac_cget_grid_metadata_c(trim(grid_name) // c_null_char))
7294 end function yac_fgrid_has_metadata
7295
7296 function yac_fgrid_has_metadata_instance(yac_instance_id, grid_name) &
7297 result( has_metadata )
7298 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7301 implicit none
7302
7303 interface
7304 function yac_cget_grid_metadata_instance_c(yac_instance_id, grid_name) &
7305 result(metadata) &
7306 bind( c, name="yac_cget_grid_metadata_instance")
7307 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7308 integer(kind=c_int), intent(in), value :: yac_instance_id
7309 character(kind=c_char), dimension(*), intent(in) :: grid_name
7310 type(c_ptr) :: metadata
7311 end function yac_cget_grid_metadata_instance_c
7312 end interface
7313 integer, intent(in) :: yac_instance_id
7314 character(len=*), intent(in) :: grid_name
7315 logical :: has_metadata
7316 has_metadata = &
7317 c_associated( &
7318 yac_cget_grid_metadata_instance_c( &
7319 yac_instance_id, trim(grid_name) // c_null_char))
7321
7322 function yac_ffield_has_metadata(comp_name, grid_name, field_name) &
7323 result( has_metadata )
7324 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7325 use yac, dummy => yac_ffield_has_metadata
7327 implicit none
7328
7329 interface
7330 function yac_cget_field_metadata_c(comp_name, grid_name, field_name) &
7331 result(metadata) &
7332 bind( c, name="yac_cget_field_metadata")
7333 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7334 character(kind=c_char), dimension(*), intent(in) :: comp_name
7335 character(kind=c_char), dimension(*), intent(in) :: grid_name
7336 character(kind=c_char), dimension(*), intent(in) :: field_name
7337 type(c_ptr) :: metadata
7338 end function yac_cget_field_metadata_c
7339 end interface
7340 character(len=*), intent(in) :: comp_name
7341 character(len=*), intent(in) :: grid_name
7342 character(len=*), intent(in) :: field_name
7343 logical :: has_metadata
7344 has_metadata = &
7345 c_associated( &
7346 yac_cget_field_metadata_c( &
7347 trim(comp_name) // c_null_char, &
7348 trim(grid_name) // c_null_char, &
7349 trim(field_name) // c_null_char))
7350 end function yac_ffield_has_metadata
7351
7353 yac_instance_id, comp_name, grid_name, field_name) &
7354 result( has_metadata )
7355 use, intrinsic :: iso_c_binding, only: c_null_char, c_associated
7358 implicit none
7359
7360 interface
7361 function yac_cget_field_metadata_instance_c(yac_instance_id, &
7362 comp_name, &
7363 grid_name, &
7364 field_name) &
7365 result(metadata) &
7366 bind( c, name="yac_cget_field_metadata_instance")
7367 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7368 integer(kind=c_int), intent(in), value :: yac_instance_id
7369 character(kind=c_char), dimension(*), intent(in) :: comp_name
7370 character(kind=c_char), dimension(*), intent(in) :: grid_name
7371 character(kind=c_char), dimension(*), intent(in) :: field_name
7372 type(c_ptr) :: metadata
7373 end function yac_cget_field_metadata_instance_c
7374 end interface
7375 integer, intent(in) :: yac_instance_id
7376 character(len=*), intent(in) :: comp_name
7377 character(len=*), intent(in) :: grid_name
7378 character(len=*), intent(in) :: field_name
7379 logical :: has_metadata
7380 has_metadata = &
7381 c_associated( &
7382 yac_cget_field_metadata_instance_c( &
7383 yac_instance_id, &
7384 trim(comp_name) // c_null_char, &
7385 trim(grid_name) // c_null_char, &
7386 trim(field_name) // c_null_char))
7388
7389 function yac_fget_component_metadata(comp_name) result( metadata )
7390 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7391 use yac, dummy => yac_fget_component_metadata
7393 implicit none
7394
7395 interface
7396 function yac_cget_component_metadata_c(comp_name) result(metadata) &
7397 bind( c, name="yac_cget_component_metadata")
7398 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7399 character(kind=c_char), dimension(*), intent(in) :: comp_name
7400 type(c_ptr) :: metadata
7401 end function yac_cget_component_metadata_c
7402 end interface
7403 character(len=*), intent(in) :: comp_name
7404 character(len=:), allocatable :: metadata
7405 type(c_ptr) :: c_metadata
7406 c_metadata = yac_cget_component_metadata_c(trim(comp_name) // c_null_char)
7407 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_component_metadata): no metadata defined for component " // trim(comp_name))
7408 metadata = yac_internal_cptr2char(c_metadata)
7409 end function yac_fget_component_metadata
7410
7411 function yac_fget_component_metadata_instance(yac_instance_id, comp_name) &
7412 result( metadata )
7413
7414 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7417 implicit none
7418
7419 interface
7420 function yac_cget_component_metadata_instance_c(yac_instance_id, &
7421 comp_name) &
7422 result(metadata) &
7423 bind( c, name="yac_cget_component_metadata_instance")
7424 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7425 integer(kind=c_int), intent(in), value :: yac_instance_id
7426 character(kind=c_char), dimension(*), intent(in) :: comp_name
7427 type(c_ptr) :: metadata
7428 end function yac_cget_component_metadata_instance_c
7429 end interface
7430 integer, intent(in) :: yac_instance_id
7431 character(len=*), intent(in) :: comp_name
7432 character(len=:), allocatable :: metadata
7433 type(c_ptr) :: c_metadata
7434 c_metadata = &
7435 yac_cget_component_metadata_instance_c( &
7436 yac_instance_id, trim(comp_name) // c_null_char)
7437 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_component_metadata_instance): no metadata defined for component " // trim(comp_name))
7438 metadata = yac_internal_cptr2char(c_metadata)
7440
7441 function yac_fget_grid_metadata(grid_name) result( metadata )
7442 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7443 use yac, dummy => yac_fget_grid_metadata
7445 implicit none
7446
7447 interface
7448 function yac_cget_grid_metadata_c(grid_name) result(metadata) &
7449 bind( c, name="yac_cget_grid_metadata")
7450 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7451 character(kind=c_char), dimension(*), intent(in) :: grid_name
7452 type(c_ptr) :: metadata
7453 end function yac_cget_grid_metadata_c
7454 end interface
7455 character(len=*), intent(in) :: grid_name
7456 character(len=:), allocatable :: metadata
7457 type(c_ptr) :: c_metadata
7458 c_metadata = yac_cget_grid_metadata_c(trim(grid_name) // c_null_char)
7459 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_grid_metadata): no metadata defined for grid " // trim(grid_name))
7460 metadata = yac_internal_cptr2char(c_metadata)
7461 end function yac_fget_grid_metadata
7462
7463 function yac_fget_grid_metadata_instance(yac_instance_id, grid_name) &
7464 result( metadata )
7465
7466 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7469 implicit none
7470
7471 interface
7472 function yac_cget_grid_metadata_instance_c(yac_instance_id, &
7473 grid_name) &
7474 result(metadata) &
7475 bind( c, name="yac_cget_grid_metadata_instance")
7476 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7477 integer(kind=c_int), intent(in), value :: yac_instance_id
7478 character(kind=c_char), dimension(*), intent(in) :: grid_name
7479 type(c_ptr) :: metadata
7480 end function yac_cget_grid_metadata_instance_c
7481 end interface
7482 integer, intent(in) :: yac_instance_id
7483 character(len=*), intent(in) :: grid_name
7484 character(len=:), allocatable :: metadata
7485 type(c_ptr) :: c_metadata
7486 c_metadata = &
7487 yac_cget_grid_metadata_instance_c( &
7488 yac_instance_id, trim(grid_name) // c_null_char)
7489 yac_fassert(c_associated(c_metadata), "ERROR(yac_fget_grid_metadata_instance): no metadata defined for grid " // trim(grid_name))
7490 metadata = yac_internal_cptr2char(c_metadata)
7492
7493 function yac_fget_field_metadata(comp_name, grid_name, field_name) &
7494 result( metadata )
7495 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7496 use yac, dummy => yac_fget_field_metadata
7498 implicit none
7499
7500 interface
7501 function yac_cget_field_metadata_c(comp_name, grid_name, field_name) &
7502 result(metadata) &
7503 bind( c, name="yac_cget_field_metadata")
7504 use, intrinsic :: iso_c_binding, only: c_char, c_ptr
7505 character(kind=c_char), dimension(*), intent(in) :: comp_name
7506 character(kind=c_char), dimension(*), intent(in) :: grid_name
7507 character(kind=c_char), dimension(*), intent(in) :: field_name
7508 type(c_ptr) :: metadata
7509 end function yac_cget_field_metadata_c
7510 end interface
7511 character(len=*), intent(in) :: comp_name
7512 character(len=*), intent(in) :: grid_name
7513 character(len=*), intent(in) :: field_name
7514 character(len=:), allocatable :: metadata
7515 type(c_ptr) :: c_metadata
7516 c_metadata = &
7517 yac_cget_field_metadata_c( &
7518 trim(comp_name) // c_null_char, &
7519 trim(grid_name) // c_null_char, &
7520 trim(field_name) // c_null_char)
7521 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))
7522 metadata = yac_internal_cptr2char(c_metadata)
7523 end function yac_fget_field_metadata
7524
7525 function yac_fget_field_metadata_instance(yac_instance_id, comp_name, &
7526 grid_name, field_name) result( metadata )
7527
7528 use, intrinsic :: iso_c_binding, only: c_null_char, c_ptr, c_associated
7531 implicit none
7532
7533 interface
7534 function yac_cget_field_metadata_instance_c(yac_instance_id, &
7535 comp_name, &
7536 grid_name, &
7537 field_name) &
7538 result(metadata) &
7539 bind( c, name="yac_cget_field_metadata_instance")
7540 use, intrinsic :: iso_c_binding, only: c_char, c_ptr, c_int
7541 integer(kind=c_int), intent(in), value :: yac_instance_id
7542 character(kind=c_char), dimension(*), intent(in) :: comp_name
7543 character(kind=c_char), dimension(*), intent(in) :: grid_name
7544 character(kind=c_char), dimension(*), intent(in) :: field_name
7545 type(c_ptr) :: metadata
7546 end function yac_cget_field_metadata_instance_c
7547 end interface
7548 integer, intent(in) :: yac_instance_id
7549 character(len=*), intent(in) :: comp_name
7550 character(len=*), intent(in) :: grid_name
7551 character(len=*), intent(in) :: field_name
7552 character(len=:), allocatable :: metadata
7553 type(c_ptr) :: c_metadata
7554 c_metadata = &
7555 yac_cget_field_metadata_instance_c( &
7556 yac_instance_id, &
7557 trim(comp_name) // c_null_char, &
7558 trim(grid_name) // c_null_char, &
7559 trim(field_name) // c_null_char)
7560 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))
7561 metadata = yac_internal_cptr2char(c_metadata)
7563
7564 ! ---------------------------------------------------------------------
7565
7566function yac_fget_start_datetime () result (start_datetime_string)
7567
7568 use, intrinsic :: iso_c_binding, only : c_ptr
7570 use yac, dummy => yac_fget_start_datetime
7571
7572 implicit none
7573
7574 interface
7575 function yac_cget_start_datetime_c() &
7576 bind( c, name='yac_cget_start_datetime' )
7577
7578 use, intrinsic :: iso_c_binding, only : c_ptr
7579 type(c_ptr) :: yac_cget_start_datetime_c
7580
7581 end function yac_cget_start_datetime_c
7582 end interface
7583
7584 type (c_ptr) :: c_string_ptr
7585 character (len=:), ALLOCATABLE :: start_datetime_string
7586
7587 c_string_ptr = yac_cget_start_datetime_c()
7588 start_datetime_string = yac_internal_cptr2char(c_string_ptr)
7589
7590end function yac_fget_start_datetime
7591
7592function yac_fget_start_datetime_instance (yac_instance_id) &
7593 result(start_datetime_string)
7594
7595 use, intrinsic :: iso_c_binding, only : c_ptr
7598
7599 implicit none
7600
7601 interface
7602 function yac_cget_start_datetime_instance_c(yac_instance_id) &
7603 bind( c, name='yac_cget_start_datetime_instance' )
7604
7605 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
7606 integer ( kind=c_int ), value :: yac_instance_id
7607 type(c_ptr) :: yac_cget_start_datetime_instance_c
7608
7609 end function yac_cget_start_datetime_instance_c
7610 end interface
7611
7612 integer, intent(in) :: yac_instance_id
7613
7614 type (c_ptr) :: c_string_ptr
7615 character (len=:), ALLOCATABLE :: start_datetime_string
7616
7617 c_string_ptr = yac_cget_start_datetime_instance_c(yac_instance_id)
7618 start_datetime_string = yac_internal_cptr2char(c_string_ptr)
7619
7621
7622! ---------------------------------------------------------------------
7623
7624function yac_fget_end_datetime () result (end_datetime_string)
7625
7626 use, intrinsic :: iso_c_binding, only : c_ptr
7628 use yac, dummy => yac_fget_end_datetime
7629
7630 implicit none
7631
7632 interface
7633 function yac_cget_end_datetime_c() &
7634 bind( c, name='yac_cget_end_datetime' )
7635
7636 use, intrinsic :: iso_c_binding, only : c_ptr
7637 type(c_ptr) :: yac_cget_end_datetime_c
7638
7639 end function yac_cget_end_datetime_c
7640 end interface
7641
7642 type (c_ptr) :: c_string_ptr
7643 character (len=:), ALLOCATABLE :: end_datetime_string
7644
7645 c_string_ptr = yac_cget_end_datetime_c()
7646 end_datetime_string = yac_internal_cptr2char(c_string_ptr)
7647
7648end function yac_fget_end_datetime
7649
7650function yac_fget_end_datetime_instance (yac_instance_id) &
7651 result(end_datetime_string)
7652
7653 use, intrinsic :: iso_c_binding, only : c_ptr
7656
7657 implicit none
7658
7659 interface
7660 function yac_cget_end_datetime_instance_c(yac_instance_id) &
7661 bind( c, name='yac_cget_end_datetime_instance' )
7662
7663 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
7664 integer ( kind=c_int ), value :: yac_instance_id
7665 type(c_ptr) :: yac_cget_end_datetime_instance_c
7666
7667 end function yac_cget_end_datetime_instance_c
7668 end interface
7669
7670 integer, intent(in) :: yac_instance_id
7671
7672 type (c_ptr) :: c_string_ptr
7673 character (len=:), ALLOCATABLE :: end_datetime_string
7674
7675 c_string_ptr = yac_cget_end_datetime_instance_c(yac_instance_id)
7676 end_datetime_string = yac_internal_cptr2char(c_string_ptr)
7677
7679
7680! ---------------------------------------------------------------------
7681
7682subroutine yac_fget_interp_stack_config ( interp_stack_config_id )
7683
7684 use yac, dummy => yac_fget_interp_stack_config
7685
7686 implicit none
7687
7688 interface
7689
7690 subroutine yac_cget_interp_stack_config_c ( interp_stack_config_id ) &
7691 bind( c, name='yac_cget_interp_stack_config' )
7692 use, intrinsic :: iso_c_binding, only : c_int
7693
7694 integer ( kind=c_int ) :: interp_stack_config_id
7695
7696 end subroutine yac_cget_interp_stack_config_c
7697
7698 end interface
7699
7700 integer, intent(out) :: interp_stack_config_id
7701
7702 call yac_cget_interp_stack_config_c ( interp_stack_config_id )
7703
7704end subroutine yac_fget_interp_stack_config
7705
7706subroutine yac_ffree_interp_stack_config ( interp_stack_config_id )
7707
7709
7710 implicit none
7711
7712 interface
7713
7714 subroutine yac_cfree_interp_stack_config_c ( interp_stack_config_id ) &
7715 bind( c, name='yac_cfree_interp_stack_config' )
7716 use, intrinsic :: iso_c_binding, only : c_int
7717
7718 integer ( kind=c_int ), value :: interp_stack_config_id
7719
7720 end subroutine yac_cfree_interp_stack_config_c
7721
7722 end interface
7723
7724 integer, intent(in) :: interp_stack_config_id
7725
7726 call yac_cfree_interp_stack_config_c ( interp_stack_config_id )
7727
7728end subroutine yac_ffree_interp_stack_config
7729
7730subroutine yac_fadd_interp_stack_config_average ( interp_stack_config_id, &
7731 reduction_type, partial_coverage)
7732
7734
7735 implicit none
7736
7737 interface
7738
7739 subroutine yac_cadd_interp_stack_config_average_c ( &
7740 interp_stack_config_id, reduction_type, partial_coverage ) &
7741 bind( c, name='yac_cadd_interp_stack_config_average' )
7742 use, intrinsic :: iso_c_binding, only : c_int
7743
7744 integer ( kind=c_int ), value :: interp_stack_config_id
7745 integer ( kind=c_int ), value :: reduction_type
7746 integer ( kind=c_int ), value :: partial_coverage
7747
7748 end subroutine yac_cadd_interp_stack_config_average_c
7749
7750 end interface
7751
7752 integer, intent(in) :: interp_stack_config_id
7753 integer, intent(in) :: reduction_type
7754 integer, intent(in) :: partial_coverage
7755
7756 call yac_cadd_interp_stack_config_average_c ( &
7757 interp_stack_config_id, reduction_type, partial_coverage )
7758
7760
7761subroutine yac_fadd_interp_stack_config_ncc ( interp_stack_config_id, &
7762 weight_type, partial_coverage)
7763
7765
7766 implicit none
7767
7768 interface
7769
7770 subroutine yac_cadd_interp_stack_config_ncc_c ( &
7771 interp_stack_config_id, weight_type, partial_coverage ) &
7772 bind( c, name='yac_cadd_interp_stack_config_ncc' )
7773 use, intrinsic :: iso_c_binding, only : c_int
7774
7775 integer ( kind=c_int ), value :: interp_stack_config_id
7776 integer ( kind=c_int ), value :: weight_type
7777 integer ( kind=c_int ), value :: partial_coverage
7778
7779 end subroutine yac_cadd_interp_stack_config_ncc_c
7780
7781 end interface
7782
7783 integer, intent(in) :: interp_stack_config_id
7784 integer, intent(in) :: weight_type
7785 integer, intent(in) :: partial_coverage
7786
7787 call yac_cadd_interp_stack_config_ncc_c ( &
7788 interp_stack_config_id, weight_type, partial_coverage )
7789
7791
7792subroutine yac_fadd_interp_stack_config_nnn(interp_stack_config_id, &
7793 type, n, scale)
7794
7796
7797 implicit none
7798
7799 interface
7800
7801 subroutine yac_cadd_interp_stack_config_nnn_c( &
7802 interp_stack_config_id, type, n, scale) &
7803 bind( c, name='yac_cadd_interp_stack_config_nnn' )
7804 use, intrinsic :: iso_c_binding, only : c_int, c_double
7805
7806 integer ( kind=c_int ), value :: interp_stack_config_id
7807 integer ( kind=c_int ), value :: type
7808 integer ( kind=c_int ), value :: n
7809 real ( kind=c_double ), value :: scale
7810
7811 end subroutine yac_cadd_interp_stack_config_nnn_c
7812
7813 end interface
7814
7815 integer, intent(in) :: interp_stack_config_id
7816 integer, intent(in) :: type
7817 integer, intent(in) :: n
7818 double precision, intent(in) :: scale
7819
7820 call yac_cadd_interp_stack_config_nnn_c( &
7821 interp_stack_config_id, type, n, scale)
7822
7824
7826 interp_stack_config_id, order, enforced_conserv, &
7827 partial_coverage, normalization)
7828
7830
7831 implicit none
7832
7833 interface
7834
7835 subroutine yac_cadd_interp_stack_config_conservative_c( &
7836 interp_stack_config_id, order, enforced_conserv, &
7837 partial_coverage, normalization) &
7838 bind( c, name='yac_cadd_interp_stack_config_conservative' )
7839 use, intrinsic :: iso_c_binding, only : c_int
7840
7841 integer ( kind=c_int ), value :: interp_stack_config_id
7842 integer ( kind=c_int ), value :: order
7843 integer ( kind=c_int ), value :: enforced_conserv
7844 integer ( kind=c_int ), value :: partial_coverage
7845 integer ( kind=c_int ), value :: normalization
7846
7847 end subroutine yac_cadd_interp_stack_config_conservative_c
7848
7849 end interface
7850
7851 integer, intent(in) :: interp_stack_config_id
7852 integer, intent(in) :: order
7853 integer, intent(in) :: enforced_conserv
7854 integer, intent(in) :: partial_coverage
7855 integer, intent(in) :: normalization
7856
7857 call yac_cadd_interp_stack_config_conservative_c( &
7858 interp_stack_config_id, order, enforced_conserv, &
7859 partial_coverage, normalization)
7860
7862
7863subroutine yac_fadd_interp_stack_config_spmap(interp_stack_config_id, &
7864 spread_distance, max_search_distance, weight_type, scale_type, &
7865 src_sphere_radius, tgt_sphere_radius)
7866
7868
7869 implicit none
7870
7871 interface
7872
7873 subroutine yac_cadd_interp_stack_config_spmap_c( &
7874 interp_stack_config_id, spread_distance, &
7875 max_search_distance, weight_type, &
7876 scale_type, src_sphere_radius, &
7877 tgt_sphere_radius) &
7878 bind( c, name='yac_cadd_interp_stack_config_spmap' )
7879 use, intrinsic :: iso_c_binding, only : c_int, c_double
7880
7881 integer ( kind=c_int ), value :: interp_stack_config_id
7882 real ( kind=c_double ), value :: spread_distance
7883 real ( kind=c_double ), value :: max_search_distance
7884 integer ( kind=c_int ), value :: weight_type
7885 integer ( kind=c_int ), value :: scale_type
7886 real ( kind=c_double ), value :: src_sphere_radius
7887 real ( kind=c_double ), value :: tgt_sphere_radius
7888
7889 end subroutine yac_cadd_interp_stack_config_spmap_c
7890
7891 end interface
7892
7893 integer, intent(in) :: interp_stack_config_id
7894 double precision, intent(in) :: spread_distance
7895 double precision, intent(in) :: max_search_distance
7896 integer, intent(in) :: weight_type
7897 integer, intent(in) :: scale_type
7898 double precision, intent(in) :: src_sphere_radius
7899 double precision, intent(in) :: tgt_sphere_radius
7900
7901 call yac_cadd_interp_stack_config_spmap_c( &
7902 interp_stack_config_id, spread_distance, &
7903 max_search_distance, weight_type, &
7904 scale_type, src_sphere_radius, &
7905 tgt_sphere_radius)
7906
7908
7909subroutine yac_fadd_interp_stack_config_hcsbb(interp_stack_config_id)
7910
7912
7913 implicit none
7914
7915 interface
7916
7917 subroutine yac_cadd_interp_stack_config_hcsbb_c( &
7918 interp_stack_config_id) &
7919 bind( c, name='yac_cadd_interp_stack_config_hcsbb' )
7920 use, intrinsic :: iso_c_binding, only : c_int
7921
7922 integer ( kind=c_int ), value :: interp_stack_config_id
7923
7924 end subroutine yac_cadd_interp_stack_config_hcsbb_c
7925
7926 end interface
7927
7928 integer, intent(in) :: interp_stack_config_id
7929
7930 call yac_cadd_interp_stack_config_hcsbb_c(interp_stack_config_id)
7931
7933
7934subroutine yac_fadd_interp_stack_config_user_file(interp_stack_config_id, &
7935 filename, src_grid_name, tgt_grid_name)
7936
7938 use, intrinsic :: iso_c_binding, only : c_null_char
7939
7940 implicit none
7941
7942 interface
7943
7944 subroutine yac_cadd_interp_stack_config_user_file_c( &
7945 interp_stack_config_id, filename, src_grid_name, &
7946 tgt_grid_name) &
7947 bind( c, name='yac_cadd_interp_stack_config_user_file' )
7948 use, intrinsic :: iso_c_binding, only : c_int, c_char
7949
7950 integer ( kind=c_int ), value :: interp_stack_config_id
7951 character (kind=c_char), dimension(*) :: filename
7952 character (kind=c_char), dimension(*) :: src_grid_name
7953 character (kind=c_char), dimension(*) :: tgt_grid_name
7954
7955 end subroutine yac_cadd_interp_stack_config_user_file_c
7956
7957 end interface
7958
7959 integer, intent(in) :: interp_stack_config_id
7960 character (len=*), intent(in) :: filename
7961 character (len=*), intent(in) :: src_grid_name
7962 character (len=*), intent(in) :: tgt_grid_name
7963
7964 call yac_cadd_interp_stack_config_user_file_c( &
7965 interp_stack_config_id, &
7966 trim(filename) // c_null_char, &
7967 trim(src_grid_name) // c_null_char, &
7968 trim(tgt_grid_name) // c_null_char)
7969
7971
7972subroutine yac_fadd_interp_stack_config_fixed(interp_stack_config_id, &
7973 val)
7974
7976
7977 implicit none
7978
7979 interface
7980
7981 subroutine yac_cadd_interp_stack_config_fixed_c( &
7982 interp_stack_config_id, val) &
7983 bind( c, name='yac_cadd_interp_stack_config_fixed' )
7984 use, intrinsic :: iso_c_binding, only : c_int, c_double
7985
7986 integer ( kind=c_int ), value :: interp_stack_config_id
7987 real ( kind=c_double ), value :: val
7988
7989 end subroutine yac_cadd_interp_stack_config_fixed_c
7990
7991 end interface
7992
7993 integer, intent(in) :: interp_stack_config_id
7994 double precision, intent(in) :: val
7995
7996 call yac_cadd_interp_stack_config_fixed_c( &
7997 interp_stack_config_id, val)
7998
8000
8001subroutine yac_fadd_interp_stack_config_creep(interp_stack_config_id, &
8002 creep_distance)
8003
8005
8006 implicit none
8007
8008 interface
8009
8010 subroutine yac_cadd_interp_stack_config_creep_c( &
8011 interp_stack_config_id, creep_distance) &
8012 bind( c, name='yac_cadd_interp_stack_config_creep' )
8013 use, intrinsic :: iso_c_binding, only : c_int
8014
8015 integer ( kind=c_int ), value :: interp_stack_config_id
8016 integer ( kind=c_int ), value :: creep_distance
8017
8018 end subroutine yac_cadd_interp_stack_config_creep_c
8019
8020 end interface
8021
8022 integer, intent(in) :: interp_stack_config_id
8023 integer, intent(in) :: creep_distance
8024
8025 call yac_cadd_interp_stack_config_creep_c( &
8026 interp_stack_config_id, creep_distance)
8027
Fortran interface for checking the dimensions of a field.
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 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 the start- and end datetime.
Fortran interface for the component definition.
Fortran interface for the reading of configuration files.
Fortran interface for the setting of grid global ids.
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=:) function, allocatable, public yac_internal_cptr2char(cptr)
Convertes a C-pointer to a C-string to a Fortran string.
type(c_ptr) function yac_dble2cptr(routine, ptr_name, dble_ptr)
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 yac_yaml_emitter_default_f
Flag paramters for emitting of coupling configurations.
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_finit()
subroutine yac_fupdate(field_id)
subroutine yac_fmpi_handshake(comm, group_names, group_comms)
subroutine yac_fget_comp_comm(comp_id, comp_comm)
subroutine yac_fsync_def_instance(yac_instance_id)
integer function yac_fget_field_role(comp_name, grid_name, field_name)
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)
integer function yac_fget_field_role_instance(yac_instance_id, comp_name, grid_name, field_name)
subroutine yac_fadd_interp_stack_config_nnn(interp_stack_config_id, type, n, scale)
logical function yac_fgrid_has_metadata_instance(yac_instance_id, grid_name)
subroutine yac_fenddef_and_emit_config_instance(yac_instance_id, emit_flags, config)
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_fdef_comp_dummy_instance(yac_instance_id)
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_fadd_interp_stack_config_user_file(interp_stack_config_id, filename, src_grid_name, tgt_grid_name)
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)
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_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)
type(yac_string) function, dimension(:), allocatable yac_fget_comp_names()
subroutine yac_fcleanup()
character(len=:) function, allocatable yac_fget_grid_name_from_field_id(field_id)
subroutine yac_fenddef()
subroutine yac_fdef_grid_metadata(grid_name, metadata)
integer function yac_fget_field_collection_size(comp_name, grid_name, field_name)
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_fput_frac_dble(field_id, nbr_hor_points, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
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_fcleanup_instance(yac_instance_id)
subroutine yac_fget_dble(field_id, nbr_hor_points, collection_size, recv_field, info, ierror)
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_fadd_interp_stack_config_conservative(interp_stack_config_id, order, enforced_conserv, partial_coverage, normalization)
subroutine yac_fget_action(field_id, action)
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_fadd_interp_stack_config_spmap(interp_stack_config_id, spread_distance, max_search_distance, weight_type, scale_type, src_sphere_radius, tgt_sphere_radius)
subroutine yac_fdef_comps(comp_names, num_comps, comp_ids)
subroutine yac_finit_comm_dummy(world_comm)
type(yac_string) function, dimension(:), allocatable yac_fget_grid_names_instance(yac_instance_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_end_datetime()
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_fset_lmask(is_valid, points_id)
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_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_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, mapping_side, scale_factor, scale_summand, src_mask_names, tgt_mask_name)
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_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)
character(len=:) function, allocatable yac_fget_component_metadata(comp_name)
integer function yac_fget_points_size(point_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)
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_collection_size_from_field_id(field_id)
subroutine yac_fset_core_imask(is_core, location, grid_id)
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)
logical function yac_fgrid_has_metadata(grid_name)
subroutine yac_fdef_datetime(start_datetime, end_datetime)
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_fread_config_yaml_instance(yac_instance_id, yaml_filename)
subroutine yac_fput_frac_dble_ptr(field_id, nbr_pointsets, collection_size, send_field, send_frac_mask, info, ierror)
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_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)
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_fenddef_and_emit_config(emit_flags, config)
integer function yac_fget_field_collection_size_instance(yac_instance_id, comp_name, grid_name, field_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_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, mapping_side, scale_factor, scale_summand, src_mask_names, tgt_mask_name)
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)
subroutine yac_fread_config_json(json_filename)
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)
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)
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)
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_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_fread_config_json_instance(yac_instance_id, json_filename)
subroutine yac_fset_global_index(global_index, location, grid_id)
subroutine yac_fdef_field_metadata(comp_name, grid_name, field_name, metadata)
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_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_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)