FV3-JEDI
LinearGetValues.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2020 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 ! --------------------------------------------------------------------------------------------------
7 
9 
10 ! Intrinsic
11 use iso_c_binding
12 
13 ! oops dependencies
14 use datetime_mod
15 use duration_mod
16 use oops_variables_mod
17 
18 ! ufo dependencies
19 use ufo_locs_mod
20 use ufo_locs_mod_c, only: ufo_locs_registry
21 use ufo_geovals_mod
22 use ufo_geovals_mod_c, only: ufo_geovals_registry
23 
24 ! self dependency
26 
27 ! fv3jedi dependencies
31 use fv3jedi_increment_interface_mod, only: fv3jedi_increment_registry
34 
35 implicit none
36 private
38 
39 ! --------------------------------------------------------------------------------------------------
40 
41 !> Linked list interface
42 #define LISTED_TYPE fv3jedi_lineargetvalues
43 #include "oops/util/linkedList_i.f"
45 
46 ! --------------------------------------------------------------------------------------------------
47 
48 contains
49 
50 ! --------------------------------------------------------------------------------------------------
51 
52 !> Linked list implementation
53 #include "oops/util/linkedList_c.f"
54 
55 ! --------------------------------------------------------------------------------------------------
56 
57 subroutine fv3jedi_lineargetvalues_create_c(c_key_self, c_key_geom, c_key_locs) &
58  bind(c,name='fv3jedi_lineargetvalues_create_f90')
59 
60 integer(c_int), intent(inout) :: c_key_self !< Key to self
61 integer(c_int), intent(in) :: c_key_geom !< Key to geometry
62 integer(c_int), intent(in) :: c_key_locs !< Key to observation locations
63 
64 type(fv3jedi_lineargetvalues), pointer :: self
65 type(fv3jedi_geom), pointer :: geom
66 type(ufo_locs), pointer :: locs
67 
68 ! Create object
70 call fv3jedi_lineargetvalues_registry%add(c_key_self)
71 call fv3jedi_lineargetvalues_registry%get(c_key_self, self)
72 
73 ! Others
74 call fv3jedi_geom_registry%get(c_key_geom, geom)
75 call ufo_locs_registry%get(c_key_locs, locs)
76 
77 ! Call method
78 call self%create(geom, locs)
79 
81 
82 ! --------------------------------------------------------------------------------------------------
83 
84 subroutine fv3jedi_lineargetvalues_delete_c(c_key_self) &
85  bind(c,name='fv3jedi_lineargetvalues_delete_f90')
86 
87 integer(c_int), intent(inout) :: c_key_self !< Key to self
88 
89 type(fv3jedi_lineargetvalues), pointer :: self
90 
91 ! Get object
92 call fv3jedi_lineargetvalues_registry%get(c_key_self, self)
93 
94 ! Call method
95 call self%delete()
96 
97 ! Remove object
98 call fv3jedi_lineargetvalues_registry%remove(c_key_self)
99 
101 
102 ! --------------------------------------------------------------------------------------------------
103 
104 subroutine fv3jedi_lineargetvalues_set_trajectory_c(c_key_self, c_key_geom, c_key_state, c_t1, &
105  c_t2, c_key_locs, c_key_geovals) &
106  bind(c,name='fv3jedi_lineargetvalues_set_trajectory_f90')
107 
108 integer(c_int), intent(in) :: c_key_self
109 integer(c_int), intent(in) :: c_key_geom
110 integer(c_int), intent(in) :: c_key_state
111 type(c_ptr), intent(in) :: c_t1
112 type(c_ptr), intent(in) :: c_t2
113 integer(c_int), intent(in) :: c_key_locs
114 integer(c_int), intent(in) :: c_key_geovals
115 
116 type(fv3jedi_lineargetvalues), pointer :: self
117 type(fv3jedi_geom), pointer :: geom
118 type(fv3jedi_state), pointer :: state
119 type(datetime) :: t1
120 type(datetime) :: t2
121 type(ufo_locs), pointer :: locs
122 type(ufo_geovals), pointer :: geovals
123 
124 ! Get objects
125 call fv3jedi_lineargetvalues_registry%get(c_key_self, self)
126 call fv3jedi_geom_registry%get(c_key_geom, geom)
127 call fv3jedi_state_registry%get(c_key_state, state)
128 call c_f_datetime(c_t1, t1)
129 call c_f_datetime(c_t2, t2)
130 call ufo_locs_registry%get(c_key_locs, locs)
131 call ufo_geovals_registry%get(c_key_geovals, geovals)
132 
133 ! Call method
134 call self%set_trajectory(geom, state%fields, t1, t2, locs, geovals)
135 
137 
138 
139 ! --------------------------------------------------------------------------------------------------
140 
141 subroutine fv3jedi_lineargetvalues_fill_geovals_tl_c(c_key_self, c_key_geom, c_key_inc, c_t1, &
142  c_t2, c_key_locs, c_key_geovals) &
143  bind(c,name='fv3jedi_lineargetvalues_fill_geovals_tl_f90')
144 
145 integer(c_int), intent(in) :: c_key_self
146 integer(c_int), intent(in) :: c_key_geom
147 integer(c_int), intent(in) :: c_key_inc
148 type(c_ptr), intent(in) :: c_t1
149 type(c_ptr), intent(in) :: c_t2
150 integer(c_int), intent(in) :: c_key_locs
151 integer(c_int), intent(in) :: c_key_geovals
152 
153 type(fv3jedi_lineargetvalues), pointer :: self
154 type(fv3jedi_geom), pointer :: geom
155 type(fv3jedi_increment), pointer :: inc
156 type(datetime) :: t1
157 type(datetime) :: t2
158 type(ufo_locs), pointer :: locs
159 type(ufo_geovals), pointer :: geovals
160 
161 ! Get objects
162 call fv3jedi_lineargetvalues_registry%get(c_key_self, self)
163 call fv3jedi_geom_registry%get(c_key_geom, geom)
164 call fv3jedi_increment_registry%get(c_key_inc, inc)
165 call c_f_datetime(c_t1, t1)
166 call c_f_datetime(c_t2, t2)
167 call ufo_locs_registry%get(c_key_locs, locs)
168 call ufo_geovals_registry%get(c_key_geovals, geovals)
169 
170 ! Call method
171 call self%fill_geovals_tl(geom, inc%fields, t1, t2, locs, geovals)
172 
174 
175 ! --------------------------------------------------------------------------------------------------
176 
177 subroutine fv3jedi_lineargetvalues_fill_geovals_ad_c(c_key_self, c_key_geom, c_key_inc, c_t1, &
178  c_t2, c_key_locs, c_key_geovals) &
179  bind(c,name='fv3jedi_lineargetvalues_fill_geovals_ad_f90')
180 
181 integer(c_int), intent(in) :: c_key_self
182 integer(c_int), intent(in) :: c_key_geom
183 integer(c_int), intent(in) :: c_key_inc
184 type(c_ptr), intent(in) :: c_t1
185 type(c_ptr), intent(in) :: c_t2
186 integer(c_int), intent(in) :: c_key_locs
187 integer(c_int), intent(in) :: c_key_geovals
188 
189 type(fv3jedi_lineargetvalues), pointer :: self
190 type(fv3jedi_geom), pointer :: geom
191 type(fv3jedi_increment), pointer :: inc
192 type(datetime) :: t1
193 type(datetime) :: t2
194 type(ufo_locs), pointer :: locs
195 type(ufo_geovals), pointer :: geovals
196 
197 ! Get objects
198 call fv3jedi_lineargetvalues_registry%get(c_key_self, self)
199 call fv3jedi_geom_registry%get(c_key_geom, geom)
200 call fv3jedi_increment_registry%get(c_key_inc, inc)
201 call c_f_datetime(c_t1, t1)
202 call c_f_datetime(c_t2, t2)
203 call ufo_locs_registry%get(c_key_locs, locs)
204 call ufo_geovals_registry%get(c_key_geovals, geovals)
205 
206 ! Call method
207 call self%fill_geovals_ad(geom, inc%fields, t1, t2, locs, geovals)
208 
210 
211 ! --------------------------------------------------------------------------------------------------
212 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_registry
type(registry_t), public fv3jedi_lineargetvalues_registry
Linked list interface.
Definition: LinearGetValues.interface.F90:44
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_delete_c
subroutine fv3jedi_lineargetvalues_delete_c(c_key_self)
Definition: LinearGetValues.interface.F90:86
fv3jedi_state_interface_mod
Definition: fv3jedi_state_interface_mod.F90:8
fv3jedi_state_mod
Definition: fv3jedi_state_mod.F90:6
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_state_interface_mod::fv3jedi_state_registry
type(registry_t), public fv3jedi_state_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_state_interface_mod.F90:40
fv3jedi_geom_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_mod.f90:8
fv3jedi_lineargetvalues_mod
Definition: fv3jedi_lineargetvalues_mod.f90:6
fv3jedi_increment_mod
Definition: fv3jedi_increment_mod.F90:6
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_fill_geovals_tl_c
subroutine fv3jedi_lineargetvalues_fill_geovals_tl_c(c_key_self, c_key_geom, c_key_inc, c_t1, c_t2, c_key_locs, c_key_geovals)
Definition: LinearGetValues.interface.F90:144
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_create_c
subroutine fv3jedi_lineargetvalues_create_c(c_key_self, c_key_geom, c_key_locs)
Linked list implementation.
Definition: LinearGetValues.interface.F90:59
fv3jedi_increment_interface_mod
Definition: fv3jedi_increment_interface_mod.F90:8
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_set_trajectory_c
subroutine fv3jedi_lineargetvalues_set_trajectory_c(c_key_self, c_key_geom, c_key_state, c_t1, c_t2, c_key_locs, c_key_geovals)
Definition: LinearGetValues.interface.F90:107
fv3jedi_lineargetvalues_interface_mod
Definition: LinearGetValues.interface.F90:8
fv3jedi_lineargetvalues_mod::fv3jedi_lineargetvalues
Definition: fv3jedi_lineargetvalues_mod.f90:32
fv3jedi_lineargetvalues_interface_mod::fv3jedi_lineargetvalues_fill_geovals_ad_c
subroutine fv3jedi_lineargetvalues_fill_geovals_ad_c(c_key_self, c_key_geom, c_key_inc, c_t1, c_t2, c_key_locs, c_key_geovals)
Definition: LinearGetValues.interface.F90:180
fv3jedi_increment_mod::fv3jedi_increment
Definition: fv3jedi_increment_mod.F90:34