FV3-JEDI
fv3jedi_linvarcha_a2m.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2018-2019 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 use iso_c_binding
18 
19 implicit none
20 private
22 
23 ! ------------------------------------------------------------------------------
24 
25 #define LISTED_TYPE fv3jedi_linvarcha_a2m
26 
27 !> Linked list interface - defines registry_t type
28 #include "oops/util/linkedList_i.f"
29 
30 !> Global registry
31 type(registry_t) :: fv3jedi_linvarcha_a2m_registry
32 
33 ! ------------------------------------------------------------------------------
34 
35 contains
36 
37 ! ------------------------------------------------------------------------------
38 
39 !> Linked list implementation
40 #include "oops/util/linkedList_c.f"
41 
42 ! ------------------------------------------------------------------------------
43 
44 subroutine c_fv3jedi_linvarcha_a2m_create(c_key_self,c_key_geom,c_key_bg,c_key_fg,c_conf) &
45  bind(c,name='fv3jedi_linvarcha_a2m_create_f90')
46 
47 implicit none
48 integer(c_int), intent(inout) :: c_key_self
49 integer(c_int), intent(in) :: c_key_geom
50 integer(c_int), intent(in) :: c_key_bg
51 integer(c_int), intent(in) :: c_key_fg
52 type(c_ptr), intent(in) :: c_conf
53 
54 type(fv3jedi_linvarcha_a2m), pointer :: self
55 type(fv3jedi_geom), pointer :: geom
56 type(fv3jedi_state), pointer :: bg
57 type(fv3jedi_state), pointer :: fg
58 
60 call fv3jedi_linvarcha_a2m_registry%add(c_key_self)
61 call fv3jedi_linvarcha_a2m_registry%get(c_key_self, self)
62 
63 call fv3jedi_geom_registry%get(c_key_geom,geom)
64 call fv3jedi_state_registry%get(c_key_bg,bg)
65 call fv3jedi_state_registry%get(c_key_fg,fg)
66 
67 call create(self,geom,bg,fg,c_conf)
68 
69 end subroutine c_fv3jedi_linvarcha_a2m_create
70 
71 ! ------------------------------------------------------------------------------
72 
73 subroutine c_fv3jedi_linvarcha_a2m_delete(c_key_self) &
74  bind(c,name='fv3jedi_linvarcha_a2m_delete_f90')
75 
76 implicit none
77 integer(c_int), intent(inout) :: c_key_self !< Change variable structure
78 
79 type(fv3jedi_linvarcha_a2m), pointer :: self
80 
81 call fv3jedi_linvarcha_a2m_registry%get(c_key_self,self)
82 call delete(self)
83 call fv3jedi_linvarcha_a2m_registry%remove(c_key_self)
84 
85 end subroutine c_fv3jedi_linvarcha_a2m_delete
86 
87 ! ------------------------------------------------------------------------------
88 
89 subroutine c_fv3jedi_linvarcha_a2m_multiply(c_key_self,c_key_geom,c_key_xana,c_key_xmod) &
90  bind(c,name='fv3jedi_linvarcha_a2m_multiply_f90')
91 
92 implicit none
93 integer(c_int), intent(in) :: c_key_self
94 integer(c_int), intent(in) :: c_key_geom
95 integer(c_int), intent(in) :: c_key_xana
96 integer(c_int), intent(in) :: c_key_xmod
97 
98 type(fv3jedi_linvarcha_a2m), pointer :: self
99 type(fv3jedi_geom), pointer :: geom
100 type(fv3jedi_increment), pointer :: xana
101 type(fv3jedi_increment), pointer :: xmod
102 
103 call fv3jedi_linvarcha_a2m_registry%get(c_key_self,self)
104 call fv3jedi_geom_registry%get(c_key_geom,geom)
105 call fv3jedi_increment_registry%get(c_key_xana,xana)
106 call fv3jedi_increment_registry%get(c_key_xmod,xmod)
107 
108 call multiply(self,geom,xana,xmod)
109 
111 
112 ! ----------------------------------------------------------------------------
113 
114 subroutine c_fv3jedi_linvarcha_a2m_multiplyadjoint(c_key_self,c_key_geom,c_key_xmod,c_key_xana) &
115  bind(c,name='fv3jedi_linvarcha_a2m_multiplyadjoint_f90')
116 
117 implicit none
118 integer(c_int), intent(in) :: c_key_self
119 integer(c_int), intent(in) :: c_key_geom
120 integer(c_int), intent(in) :: c_key_xmod
121 integer(c_int), intent(in) :: c_key_xana
122 
123 type(fv3jedi_linvarcha_a2m), pointer :: self
124 type(fv3jedi_geom), pointer :: geom
125 type(fv3jedi_increment), pointer :: xmod
126 type(fv3jedi_increment), pointer :: xana
127 
128 call fv3jedi_linvarcha_a2m_registry%get(c_key_self,self)
129 call fv3jedi_geom_registry%get(c_key_geom,geom)
130 call fv3jedi_increment_registry%get(c_key_xmod,xmod)
131 call fv3jedi_increment_registry%get(c_key_xana,xana)
132 
133 call multiplyadjoint(self,geom,xmod,xana)
134 
136 
137 ! ----------------------------------------------------------------------------
138 
139 subroutine c_fv3jedi_linvarcha_a2m_multiplyinverse(c_key_self,c_key_geom,c_key_xmod,c_key_xana) &
140  bind(c,name='fv3jedi_linvarcha_a2m_multiplyinverse_f90')
141 
142 implicit none
143 integer(c_int), intent(in) :: c_key_self
144 integer(c_int), intent(in) :: c_key_geom
145 integer(c_int), intent(in) :: c_key_xmod
146 integer(c_int), intent(in) :: c_key_xana
147 
148 type(fv3jedi_linvarcha_a2m), pointer :: self
149 type(fv3jedi_geom), pointer :: geom
150 type(fv3jedi_increment), pointer :: xmod
151 type(fv3jedi_increment), pointer :: xana
152 
153 call fv3jedi_linvarcha_a2m_registry%get(c_key_self,self)
154 call fv3jedi_geom_registry%get(c_key_geom,geom)
155 call fv3jedi_increment_registry%get(c_key_xmod,xmod)
156 call fv3jedi_increment_registry%get(c_key_xana,xana)
157 
158 call multiplyinverse(self,geom,xmod,xana)
159 
161 
162 ! ----------------------------------------------------------------------------
163 
164 subroutine c_fv3jedi_linvarcha_a2m_multiplyinverseadjoint(c_key_self,c_key_geom,c_key_xana,c_key_xmod) &
165  bind(c,name='fv3jedi_linvarcha_a2m_multiplyinverseadjoint_f90')
166 
167 implicit none
168 integer(c_int), intent(in) :: c_key_self
169 integer(c_int), intent(in) :: c_key_geom
170 integer(c_int), intent(in) :: c_key_xana
171 integer(c_int), intent(in) :: c_key_xmod
172 
173 type(fv3jedi_linvarcha_a2m), pointer :: self
174 type(fv3jedi_geom), pointer :: geom
175 type(fv3jedi_increment), pointer :: xana
176 type(fv3jedi_increment), pointer :: xmod
177 
178 call fv3jedi_linvarcha_a2m_registry%get(c_key_self,self)
179 call fv3jedi_geom_registry%get(c_key_geom,geom)
180 call fv3jedi_increment_registry%get(c_key_xana,xana)
181 call fv3jedi_increment_registry%get(c_key_xmod,xmod)
182 
183 call multiplyinverseadjoint(self,geom,xana,xmod)
184 
186 
187 ! ----------------------------------------------------------------------------
188 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_multiplyinverse
subroutine c_fv3jedi_linvarcha_a2m_multiplyinverse(c_key_self, c_key_geom, c_key_xmod, c_key_xana)
Definition: fv3jedi_linvarcha_a2m.interface.F90:141
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_create
subroutine c_fv3jedi_linvarcha_a2m_create(c_key_self, c_key_geom, c_key_bg, c_key_fg, c_conf)
Linked list implementation.
Definition: fv3jedi_linvarcha_a2m.interface.F90:46
fv3jedi_linvarcha_a2m_mod::multiply
subroutine, public multiply(self, geom, xana, xmod)
Definition: fv3jedi_linvarcha_a2m_mod.f90:70
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_delete
subroutine c_fv3jedi_linvarcha_a2m_delete(c_key_self)
Definition: fv3jedi_linvarcha_a2m.interface.F90:75
fv3jedi_state_interface_mod
Definition: fv3jedi_state_interface_mod.F90:8
fv3jedi_linvarcha_a2m_mod::multiplyinverseadjoint
subroutine, public multiplyinverseadjoint(self, geom, xana, xmod)
Definition: fv3jedi_linvarcha_a2m_mod.f90:359
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_increment_mod
Definition: fv3jedi_increment_mod.F90:6
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_multiply
subroutine c_fv3jedi_linvarcha_a2m_multiply(c_key_self, c_key_geom, c_key_xana, c_key_xmod)
Definition: fv3jedi_linvarcha_a2m.interface.F90:91
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_linvarcha_a2m_interface_mod
Definition: fv3jedi_linvarcha_a2m.interface.F90:8
fv3jedi_linvarcha_a2m_mod
Definition: fv3jedi_linvarcha_a2m_mod.f90:6
fv3jedi_linvarcha_a2m_mod::multiplyadjoint
subroutine, public multiplyadjoint(self, geom, xmod, xana)
Definition: fv3jedi_linvarcha_a2m_mod.f90:167
fv3jedi_linvarcha_a2m_mod::delete
subroutine, public delete(self)
Definition: fv3jedi_linvarcha_a2m_mod.f90:61
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_multiplyinverseadjoint
subroutine c_fv3jedi_linvarcha_a2m_multiplyinverseadjoint(c_key_self, c_key_geom, c_key_xana, c_key_xmod)
Definition: fv3jedi_linvarcha_a2m.interface.F90:166
fv3jedi_linvarcha_a2m_interface_mod::c_fv3jedi_linvarcha_a2m_multiplyadjoint
subroutine c_fv3jedi_linvarcha_a2m_multiplyadjoint(c_key_self, c_key_geom, c_key_xmod, c_key_xana)
Definition: fv3jedi_linvarcha_a2m.interface.F90:116
fv3jedi_linvarcha_a2m_mod::fv3jedi_linvarcha_a2m
Definition: fv3jedi_linvarcha_a2m_mod.f90:31
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_linvarcha_a2m_mod::multiplyinverse
subroutine, public multiplyinverse(self, geom, xmod, xana)
Definition: fv3jedi_linvarcha_a2m_mod.f90:265
fv3jedi_increment_mod::fv3jedi_increment_registry
type(registry_t), public fv3jedi_increment_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_increment_mod.F90:60
fv3jedi_linvarcha_a2m_interface_mod::fv3jedi_linvarcha_a2m_registry
type(registry_t), public fv3jedi_linvarcha_a2m_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_linvarcha_a2m.interface.F90:31
fv3jedi_increment_mod::fv3jedi_increment
Definition: fv3jedi_increment_mod.F90:34
fv3jedi_linvarcha_a2m_mod::create
subroutine, public create(self, geom, bg, fg, c_conf)
Definition: fv3jedi_linvarcha_a2m_mod.f90:42