FV3-JEDI
fv3jedi_geom_iter_interface.F90
Go to the documentation of this file.
1 !
2 ! (C) Copyright 2019 UCAR
3 !
4 ! This software is licensed under the terms of the Apache Licence Version 2.0
5 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6 
8 
9  use iso_c_binding
10  use kinds
14 
15  implicit none
16 
17  private
18 
19 contains
20 
21  ! ------------------------------------------------------------------------------
22  !> Setup geometry iterator
23  subroutine fv3jedi_geom_iter_setup_c(c_key_self, c_key_geom, c_iindex, c_jindex) bind(c, name='fv3jedi_geom_iter_setup_f90')
24 
25  ! Passed variables
26  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
27  integer(c_int), intent( in) :: c_key_geom !< Geometry
28  integer(c_int), intent( in) :: c_iindex !< Index
29  integer(c_int), intent( in) :: c_jindex !< Index
30 
31  ! Local variables
32  type(fv3jedi_geom_iter), pointer :: self
33  type(fv3jedi_geom), pointer :: geom
34 
35  ! Interface
36  call fv3jedi_geom_iter_registry%init()
37  call fv3jedi_geom_iter_registry%add(c_key_self)
38  call fv3jedi_geom_iter_registry%get(c_key_self, self)
39  call fv3jedi_geom_registry%get(c_key_geom, geom)
40 
41  ! Call Fortran
42  call fv3jedi_geom_iter_setup(self, geom, c_iindex, c_jindex)
43 
44  end subroutine fv3jedi_geom_iter_setup_c
45 
46  ! ------------------------------------------------------------------------------
47  !> Clone geometry iterator
48  subroutine fv3jedi_geom_iter_clone_c(c_key_self, c_key_other) bind(c, name='fv3jedi_geom_iter_clone_f90')
49 
50  ! Passed variables
51  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
52  integer(c_int), intent( in) :: c_key_other !< Other geometry iterator
53 
54  ! Local variables
55  type(fv3jedi_geom_iter), pointer :: self, other
56 
57  ! Interface
58  call fv3jedi_geom_iter_registry%get(c_key_other, other)
59  call fv3jedi_geom_iter_registry%init()
60  call fv3jedi_geom_iter_registry%add(c_key_self)
61  call fv3jedi_geom_iter_registry%get(c_key_self, self)
62 
63  ! Call Fortran
64  call fv3jedi_geom_iter_clone(self, other)
65 
66  end subroutine fv3jedi_geom_iter_clone_c
67 
68  ! ------------------------------------------------------------------------------
69  !> Delete geometry iterator
70  subroutine fv3jedi_geom_iter_delete_c(c_key_self) bind(c, name='fv3jedi_geom_iter_delete_f90')
71 
72  ! Passed variables
73  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
74 
75  ! Clear interface
76  call fv3jedi_geom_iter_registry%remove(c_key_self)
77 
78  end subroutine fv3jedi_geom_iter_delete_c
79 
80  ! ------------------------------------------------------------------------------
81  !> Check geometry iterator equality
82  subroutine fv3jedi_geom_iter_equals_c(c_key_self, c_key_other, c_equals) bind(c, name='fv3jedi_geom_iter_equals_f90')
83 
84  ! Passed variables
85  integer(c_int), intent(inout) :: c_key_self !< Geometry iterator
86  integer(c_int), intent( in) :: c_key_other !< Other geometry iterator
87  integer(c_int), intent(inout) :: c_equals !< Equality flag
88 
89  ! Local variables
90  type(fv3jedi_geom_iter),pointer :: self,other
91 
92  ! Interface
93  call fv3jedi_geom_iter_registry%get(c_key_self, self)
94  call fv3jedi_geom_iter_registry%get(c_key_other, other)
95 
96  ! Call Fortran
97  call fv3jedi_geom_iter_equals(self, other, c_equals)
98 
99  end subroutine fv3jedi_geom_iter_equals_c
100 
101  ! ------------------------------------------------------------------------------
102  !> Get geometry iterator current lon/lat
103  subroutine fv3jedi_geom_iter_current_c(c_key_self, c_lon, c_lat) bind(c, name='fv3jedi_geom_iter_current_f90')
104 
105  ! Passed variables
106  integer(c_int), intent( in) :: c_key_self !< Geometry iterator
107  real(c_double), intent(inout) :: c_lat !< Latitude
108  real(c_double), intent(inout) :: c_lon !< Longitude
109 
110  ! Local variables
111  type(fv3jedi_geom_iter), pointer :: self
112 
113  ! Interface
114  call fv3jedi_geom_iter_registry%get(c_key_self, self)
115 
116  ! Call Fortran
117  call fv3jedi_geom_iter_current(self, c_lon, c_lat)
118 
119  end subroutine fv3jedi_geom_iter_current_c
120 
121  ! ------------------------------------------------------------------------------
122  !> Update geometry iterator to next point
123  subroutine fv3jedi_geom_iter_next_c(c_key_self) bind(c, name='fv3jedi_geom_iter_next_f90')
124 
125  ! Passed variables
126  integer(c_int), intent(in) :: c_key_self !< Geometry iterator
127 
128  ! Local variables
129  type(fv3jedi_geom_iter), pointer :: self
130 
131  ! Interface
132  call fv3jedi_geom_iter_registry%get(c_key_self, self)
133 
134  ! Call Fortran
135  call fv3jedi_geom_iter_next(self)
136 
137  end subroutine fv3jedi_geom_iter_next_c
138 
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_current_c
subroutine fv3jedi_geom_iter_current_c(c_key_self, c_lon, c_lat)
Get geometry iterator current lon/lat.
Definition: fv3jedi_geom_iter_interface.F90:104
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_next_c
subroutine fv3jedi_geom_iter_next_c(c_key_self)
Update geometry iterator to next point.
Definition: fv3jedi_geom_iter_interface.F90:124
fv3jedi_geom_iter_mod
Definition: fv3jedi_geom_iter_mod.F90:7
fv3jedi_geom_interface_mod::fv3jedi_geom_registry
type(registry_t), public fv3jedi_geom_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_geom_interface_mod.F90:34
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_current
subroutine, public fv3jedi_geom_iter_current(self, lon, lat)
Get geometry iterator current lat/lon.
Definition: fv3jedi_geom_iter_mod.F90:100
fv3jedi_geom_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_mod.f90:8
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_equals_c
subroutine fv3jedi_geom_iter_equals_c(c_key_self, c_key_other, c_equals)
Check geometry iterator equality.
Definition: fv3jedi_geom_iter_interface.F90:83
fv3jedi_geom_iter_mod::fv3jedi_geom_iter
Definition: fv3jedi_geom_iter_mod.F90:22
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_clone
subroutine, public fv3jedi_geom_iter_clone(self, other)
Clone for the geometry iterator.
Definition: fv3jedi_geom_iter_mod.F90:66
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_setup
subroutine, public fv3jedi_geom_iter_setup(self, geom, iind, jind)
Linked list implementation.
Definition: fv3jedi_geom_iter_mod.F90:48
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_delete_c
subroutine fv3jedi_geom_iter_delete_c(c_key_self)
Delete geometry iterator.
Definition: fv3jedi_geom_iter_interface.F90:71
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_clone_c
subroutine fv3jedi_geom_iter_clone_c(c_key_self, c_key_other)
Clone geometry iterator.
Definition: fv3jedi_geom_iter_interface.F90:49
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_geom_iter_interface
Definition: fv3jedi_geom_iter_interface.F90:7
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_next
subroutine, public fv3jedi_geom_iter_next(self)
Update geometry iterator to next point.
Definition: fv3jedi_geom_iter_mod.F90:130
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_equals
subroutine, public fv3jedi_geom_iter_equals(self, other, equals)
Check for the geometry iterator equality.
Definition: fv3jedi_geom_iter_mod.F90:83
fv3jedi_geom_iter_mod::fv3jedi_geom_iter_registry
type(registry_t), public fv3jedi_geom_iter_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_geom_iter_mod.F90:34
fv3jedi_geom_iter_interface::fv3jedi_geom_iter_setup_c
subroutine fv3jedi_geom_iter_setup_c(c_key_self, c_key_geom, c_iindex, c_jindex)
Setup geometry iterator.
Definition: fv3jedi_geom_iter_interface.F90:24