FV3-JEDI
Tlm.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2017-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 
7 
8 ! fckit
9 use fckit_configuration_module, only: fckit_configuration
10 
11 ! oops
12 use duration_mod
13 use iso_c_binding
14 use oops_variables_mod
15 
16 ! fv3-jedi
18 use fv3jedi_traj_mod, only: fv3jedi_traj
23 use fv3jedi_increment_interface_mod, only: fv3jedi_increment_registry
24 
25 implicit none
26 private
27 public :: fv3jedi_tlm_registry
28 
29 ! --------------------------------------------------------------------------------------------------
30 
31 !> Linked list interface - defines registry_t type
32 #define LISTED_TYPE fv3jedi_tlm
33 #include "oops/util/linkedList_i.f"
34 type(registry_t) :: fv3jedi_tlm_registry
35 
36 ! --------------------------------------------------------------------------------------------------
37 
38 contains
39 
40 ! --------------------------------------------------------------------------------------------------
41 
42 !> Linked list implementation
43 #include "oops/util/linkedList_c.f"
44 
45 ! --------------------------------------------------------------------------------------------------
46 
47 subroutine c_fv3jedi_tlm_create(c_key_self, c_key_geom, c_conf) &
48  bind(c,name='fv3jedi_tlm_create_f90')
49 
50 implicit none
51 integer(c_int), intent(inout) :: c_key_self !< Key to tlm data
52 integer(c_int), intent(in) :: c_key_geom !< Geometry
53 type(c_ptr), intent(in) :: c_conf !< pointer to object of class Config
54 
55 type(fv3jedi_tlm), pointer :: self
56 type(fv3jedi_geom), pointer :: geom
57 type(fckit_configuration) :: f_conf
58 
59 ! Linked list
60 call fv3jedi_geom_registry%get(c_key_geom, geom)
61 call fv3jedi_tlm_registry%init()
62 call fv3jedi_tlm_registry%add(c_key_self)
63 call fv3jedi_tlm_registry%get(c_key_self, self)
64 
65 ! Fortran configuration
66 f_conf = fckit_configuration(c_conf)
67 
68 ! Implementation
69 call self%create(geom, f_conf)
70 
71 end subroutine c_fv3jedi_tlm_create
72 
73 ! --------------------------------------------------------------------------------------------------
74 
75 subroutine c_fv3jedi_tlm_delete(c_key_self) bind (c,name='fv3jedi_tlm_delete_f90')
76 
77 implicit none
78 integer(c_int), intent(inout) :: c_key_self
79 
80 type(fv3jedi_tlm), pointer :: self
81 
82 ! Linked list
83 call fv3jedi_tlm_registry%get(c_key_self, self)
84 
85 ! Implementation
86 call self%delete()
87 
88 ! Linked list
89 call fv3jedi_tlm_registry%remove(c_key_self)
90 
91 end subroutine c_fv3jedi_tlm_delete
92 
93 ! --------------------------------------------------------------------------------------------------
94 
95 subroutine c_fv3jedi_tlm_initialize_tl(c_key_self, c_key_incr) &
96  bind(c,name='fv3jedi_tlm_initialize_tl_f90')
97 
98 implicit none
99 integer(c_int), intent(in) :: c_key_self !< TLM
100 integer(c_int), intent(in) :: c_key_incr !< Increment
101 
102 type(fv3jedi_tlm), pointer :: self
103 type(fv3jedi_increment), pointer :: incr
104 
105 ! Linked list
106 call fv3jedi_increment_registry%get(c_key_incr,incr)
107 call fv3jedi_tlm_registry%get(c_key_self, self)
108 
109 ! Implementation
110 call self%initialize_tl(incr)
111 
112 end subroutine c_fv3jedi_tlm_initialize_tl
113 
114 ! --------------------------------------------------------------------------------------------------
115 
116 subroutine c_fv3jedi_tlm_step_tl(c_key_self, c_key_incr, c_key_traj) &
117  bind(c,name='fv3jedi_tlm_step_tl_f90')
118 
119 implicit none
120 integer(c_int), intent(in) :: c_key_self !< TLM
121 integer(c_int), intent(in) :: c_key_incr !< Increment
122 integer(c_int), intent(in) :: c_key_traj !< Trajectory
123 
124 type(fv3jedi_tlm), pointer :: self
125 type(fv3jedi_increment), pointer :: incr
126 type(fv3jedi_traj), pointer :: traj
127 
128 ! Linked list
129 call fv3jedi_tlm_registry%get(c_key_self, self)
130 call fv3jedi_increment_registry%get(c_key_incr,incr)
131 call fv3jedi_traj_registry%get(c_key_traj,traj)
132 
133 ! Implementation
134 call self%step_tl(incr, traj)
135 
136 end subroutine c_fv3jedi_tlm_step_tl
137 
138 ! --------------------------------------------------------------------------------------------------
139 
140 subroutine c_fv3jedi_tlm_finalize_tl(c_key_self, c_key_incr) &
141  bind(c,name='fv3jedi_tlm_finalize_tl_f90')
142 
143 implicit none
144 integer(c_int), intent(in) :: c_key_self !< TLM
145 integer(c_int), intent(in) :: c_key_incr !< Increment
146 
147 type(fv3jedi_tlm), pointer :: self
148 type(fv3jedi_increment), pointer :: incr
149 
150 ! Linked list
151 call fv3jedi_increment_registry%get(c_key_incr,incr)
152 call fv3jedi_tlm_registry%get(c_key_self, self)
153 
154 ! Implementation
155 call self%finalize_tl(incr)
156 
157 end subroutine c_fv3jedi_tlm_finalize_tl
158 
159 ! --------------------------------------------------------------------------------------------------
160 
161 subroutine c_fv3jedi_tlm_initialize_ad(c_key_self, c_key_incr) &
162  bind(c,name='fv3jedi_tlm_initialize_ad_f90')
163 
164 implicit none
165 integer(c_int), intent(in) :: c_key_self !< TLM
166 integer(c_int), intent(in) :: c_key_incr !< Increment
167 
168 type(fv3jedi_tlm), pointer :: self
169 type(fv3jedi_increment), pointer :: incr
170 
171 ! Linked list
172 call fv3jedi_increment_registry%get(c_key_incr,incr)
173 call fv3jedi_tlm_registry%get(c_key_self, self)
174 
175 ! Implementation
176 call self%initialize_ad(incr)
177 
178 end subroutine c_fv3jedi_tlm_initialize_ad
179 
180 ! --------------------------------------------------------------------------------------------------
181 
182 subroutine c_fv3jedi_tlm_step_ad(c_key_self, c_key_incr, c_key_traj) &
183  bind(c,name='fv3jedi_tlm_step_ad_f90')
184 
185 implicit none
186 integer(c_int), intent(in) :: c_key_self !< TLM
187 integer(c_int), intent(in) :: c_key_incr !< Increment
188 integer(c_int), intent(in) :: c_key_traj !< Trajectory
189 
190 type(fv3jedi_tlm), pointer :: self
191 type(fv3jedi_increment), pointer :: incr
192 type(fv3jedi_traj), pointer :: traj
193 
194 ! Linked list
195 call fv3jedi_tlm_registry%get(c_key_self, self)
196 call fv3jedi_increment_registry%get(c_key_incr,incr)
197 call fv3jedi_traj_registry%get(c_key_traj,traj)
198 
199 ! Implementation
200 call self%step_ad(incr, traj)
201 
202 end subroutine c_fv3jedi_tlm_step_ad
203 
204 ! --------------------------------------------------------------------------------------------------
205 
206 subroutine c_fv3jedi_tlm_finalize_ad(c_key_self, c_key_incr) &
207  bind(c,name='fv3jedi_tlm_finalize_ad_f90')
208 
209 implicit none
210 integer(c_int), intent(in) :: c_key_self !< TLM
211 integer(c_int), intent(in) :: c_key_incr !< Increment
212 
213 type(fv3jedi_tlm), pointer :: self
214 type(fv3jedi_increment), pointer :: incr
215 
216 ! Linked list
217 call fv3jedi_increment_registry%get(c_key_incr,incr)
218 call fv3jedi_tlm_registry%get(c_key_self, self)
219 
220 ! Implementation
221 call self%finalize_ad(incr)
222 
223 end subroutine c_fv3jedi_tlm_finalize_ad
224 
225 ! --------------------------------------------------------------------------------------------------
226 
227 end module fv3jedi_tlm_interface_mod
fv3jedi_tlm_mod
Definition: fv3jedi_tlm_mod.f90:6
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_delete
subroutine c_fv3jedi_tlm_delete(c_key_self)
Definition: Tlm.interface.F90:76
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_step_tl
subroutine c_fv3jedi_tlm_step_tl(c_key_self, c_key_incr, c_key_traj)
Definition: Tlm.interface.F90:118
fv3jedi_traj_mod
Definition: fv3jedi_traj_mod.f90:6
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_create
subroutine c_fv3jedi_tlm_create(c_key_self, c_key_geom, c_conf)
Linked list implementation.
Definition: Tlm.interface.F90:49
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_tlm_mod::fv3jedi_tlm
Fortran derived type to hold tlm definition.
Definition: fv3jedi_tlm_mod.f90:35
fv3jedi_geom_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_mod.f90:8
fv3jedi_increment_mod
Definition: fv3jedi_increment_mod.F90:6
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_initialize_tl
subroutine c_fv3jedi_tlm_initialize_tl(c_key_self, c_key_incr)
Definition: Tlm.interface.F90:97
fv3jedi_tlm_interface_mod
Definition: Tlm.interface.F90:6
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_initialize_ad
subroutine c_fv3jedi_tlm_initialize_ad(c_key_self, c_key_incr)
Definition: Tlm.interface.F90:163
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_step_ad
subroutine c_fv3jedi_tlm_step_ad(c_key_self, c_key_incr, c_key_traj)
Definition: Tlm.interface.F90:184
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_tlm_interface_mod::c_fv3jedi_tlm_finalize_ad
subroutine c_fv3jedi_tlm_finalize_ad(c_key_self, c_key_incr)
Definition: Tlm.interface.F90:208
fv3jedi_traj_interface_mod::fv3jedi_traj_registry
type(registry_t), public fv3jedi_traj_registry
Linked list interface - defines registry_t type.
Definition: Traj.interface.F90:24
fv3jedi_traj_interface_mod
Definition: Traj.interface.F90:6
fv3jedi_tlm_interface_mod::fv3jedi_tlm_registry
type(registry_t), public fv3jedi_tlm_registry
Linked list interface - defines registry_t type.
Definition: Tlm.interface.F90:34
fv3jedi_increment_mod::fv3jedi_increment
Definition: fv3jedi_increment_mod.F90:34
fv3jedi_tlm_interface_mod::c_fv3jedi_tlm_finalize_tl
subroutine c_fv3jedi_tlm_finalize_tl(c_key_self, c_key_incr)
Definition: Tlm.interface.F90:142