SOCA
soca_geom_iter.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2019-2021 UCAR
2 !
3 ! This software is licensed under the terms of the Apache Licence Version 2.0
4 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
5 
6 !> C++ interfaces for soca_geom_iter_mod::soca_geom_iter
8 
9 use iso_c_binding
10 use kinds
13 use soca_geom_mod, only: soca_geom
14 
15 implicit none
16 private
17 
18 #define LISTED_TYPE soca_geom_iter
19 
20 !> Linked list interface - defines registry_t type
21 #include "oops/util/linkedList_i.f"
22 
23 !> Global registry for soca_geom_iter instances
24 type(registry_t), public :: soca_geom_iter_registry
25 
26 
27 contains
28 
29 
30 !> Linked list implementation
31 #include "oops/util/linkedList_c.f"
32 
33 ! ------------------------------------------------------------------------------
34 !> C++ interface for soca_geom_iter_mod::soca_geom_iter::setup()
35 subroutine soca_geom_iter_setup_c(c_key_self, c_key_geom, c_iindex, c_jindex) bind(c, name='soca_geom_iter_setup_f90')
36  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
37  integer(c_int), intent( in) :: c_key_geom !< Geometry
38  integer(c_int), intent( in) :: c_iindex !< Index
39  integer(c_int), intent( in) :: c_jindex !< Index
40 
41  ! Local variables
42  type(soca_geom_iter), pointer :: self
43  type(soca_geom), pointer :: geom
44 
45  ! Interface
46  call soca_geom_iter_registry%init()
47  call soca_geom_iter_registry%add(c_key_self)
48  call soca_geom_iter_registry%get(c_key_self, self)
49  call soca_geom_registry%get(c_key_geom, geom)
50 
51  ! Call Fortran
52  call self%setup(geom, c_iindex, c_jindex)
53 
54 end subroutine soca_geom_iter_setup_c
55 
56 
57 ! ------------------------------------------------------------------------------
58 !> C++ interface for soca_geom_iter_mod::soca_geom_iter::clone()
59 subroutine soca_geom_iter_clone_c(c_key_self, c_key_other) bind(c, name='soca_geom_iter_clone_f90')
60  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
61  integer(c_int), intent( in) :: c_key_other !< Other geometry iterator
62 
63  ! Local variables
64  type(soca_geom_iter), pointer :: self, other
65 
66  ! Interface
67  call soca_geom_iter_registry%get(c_key_other, other)
68  call soca_geom_iter_registry%init()
69  call soca_geom_iter_registry%add(c_key_self)
70  call soca_geom_iter_registry%get(c_key_self, self)
71 
72  ! Call Fortran
73  call self%clone(other)
74 
75 end subroutine soca_geom_iter_clone_c
76 
77 
78 ! ------------------------------------------------------------------------------
79 !> !> C++ interface for deleting soca_geom_iter_mod::soca_geom_iter
80 subroutine soca_geom_iter_delete_c(c_key_self) bind(c, name='soca_geom_iter_delete_f90')
81  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
82 
83  ! Clear interface
84  call soca_geom_iter_registry%remove(c_key_self)
85 
86 end subroutine soca_geom_iter_delete_c
87 
88 
89 ! ------------------------------------------------------------------------------
90 !> C++ interface for soca_geom_iter_mod::soca_geom_iter::equals()
91 subroutine soca_geom_iter_equals_c(c_key_self, c_key_other, c_equals) bind(c, name='soca_geom_iter_equals_f90')
92  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
93  integer(c_int), intent( in) :: c_key_other !< Other geometry iterator
94  integer(c_int), intent(inout) :: c_equals !< Equality flag
95 
96  ! Local variables
97  type(soca_geom_iter),pointer :: self,other
98 
99  ! Interface
100  call soca_geom_iter_registry%get(c_key_self, self)
101  call soca_geom_iter_registry%get(c_key_other, other)
102 
103  ! Call Fortran
104  call self%equals(other, c_equals)
105 
106 end subroutine soca_geom_iter_equals_c
107 
108 
109 ! ------------------------------------------------------------------------------
110 !> C++ interface for soca_geom_iter_mod::soca_geom_iter::current()
111 subroutine soca_geom_iter_current_c(c_key_self, c_lon, c_lat) bind(c, name='soca_geom_iter_current_f90')
112  integer(c_int), intent( in) :: c_key_self !< Geometry iterator
113  real(c_double), intent(inout) :: c_lat !< Latitude
114  real(c_double), intent(inout) :: c_lon !< Longitude
115 
116  ! Local variables
117  type(soca_geom_iter), pointer :: self
118 
119  ! Interface
120  call soca_geom_iter_registry%get(c_key_self, self)
121 
122  ! Call Fortran
123  call self%current(c_lon, c_lat)
124 
125 end subroutine soca_geom_iter_current_c
126 
127 
128 ! ------------------------------------------------------------------------------
129 !> C++ interface for soca_geom_iter_mod::soca_geom_iter::next()
130 subroutine soca_geom_iter_next_c(c_key_self) bind(c, name='soca_geom_iter_next_f90')
131  integer(c_int), intent(in) :: c_key_self !< Geometry iterator
132 
133  ! Local variables
134  type(soca_geom_iter), pointer :: self
135 
136  ! Interface
137  call soca_geom_iter_registry%get(c_key_self, self)
138 
139  ! Call Fortran
140  call self%next()
141 
142 end subroutine soca_geom_iter_next_c
143 
144 end module soca_geom_iter_mod_c
C++ interfaces for soca_geom_iter_mod::soca_geom_iter.
subroutine soca_geom_iter_next_c(c_key_self)
C++ interface for soca_geom_iter_mod::soca_geom_iter::next()
subroutine soca_geom_iter_current_c(c_key_self, c_lon, c_lat)
C++ interface for soca_geom_iter_mod::soca_geom_iter::current()
subroutine soca_geom_iter_delete_c(c_key_self)
!> C++ interface for deleting soca_geom_iter_mod::soca_geom_iter
subroutine soca_geom_iter_setup_c(c_key_self, c_key_geom, c_iindex, c_jindex)
Linked list implementation.
subroutine soca_geom_iter_equals_c(c_key_self, c_key_other, c_equals)
C++ interface for soca_geom_iter_mod::soca_geom_iter::equals()
type(registry_t), public soca_geom_iter_registry
Linked list interface - defines registry_t type.
subroutine soca_geom_iter_clone_c(c_key_self, c_key_other)
C++ interface for soca_geom_iter_mod::soca_geom_iter::clone()
Geometry iterator.
C++ interfaces for soca_geom_mod::soca_geom.
type(registry_t), public soca_geom_registry
Linked list interface - defines registry_t type.
Geometry module.
Geometry data structure.