FV3-JEDI
fv3jedi_linvarcha_c2a.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2018 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
11 
12 use fckit_configuration_module, only: fckit_configuration
13 
21 
22 implicit none
23 private
25 
26 ! ------------------------------------------------------------------------------
27 
28 #define LISTED_TYPE fv3jedi_linvarcha_c2a
29 
30 !> Linked list interface - defines registry_t type
31 #include "oops/util/linkedList_i.f"
32 
33 !> Global registry
34 type(registry_t) :: fv3jedi_linvarcha_c2a_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_linvarcha_c2a_create(c_key_self,c_key_geom,c_key_bg,c_key_fg,c_conf) &
48  bind(c,name='fv3jedi_linvarcha_c2a_create_f90')
49 
50 implicit none
51 integer(c_int), intent(inout) :: c_key_self
52 integer(c_int), intent(in) :: c_key_geom
53 integer(c_int), intent(in) :: c_key_bg
54 integer(c_int), intent(in) :: c_key_fg
55 type(c_ptr), intent(in) :: c_conf
56 
57 type(fv3jedi_linvarcha_c2a), pointer :: self
58 type(fv3jedi_geom), pointer :: geom
59 type(fv3jedi_state), pointer :: bg
60 type(fv3jedi_state), pointer :: fg
61 type(fckit_configuration) :: conf
62 
64 call fv3jedi_linvarcha_c2a_registry%add(c_key_self)
65 call fv3jedi_linvarcha_c2a_registry%get(c_key_self, self)
66 
67 call fv3jedi_geom_registry%get(c_key_geom,geom)
68 call fv3jedi_state_registry%get(c_key_bg,bg)
69 call fv3jedi_state_registry%get(c_key_fg,fg)
70 
71 conf = fckit_configuration(c_conf)
72 
73 call create(self,geom,bg,fg,conf)
74 
75 end subroutine c_fv3jedi_linvarcha_c2a_create
76 
77 ! ------------------------------------------------------------------------------
78 
79 subroutine c_fv3jedi_linvarcha_c2a_delete(c_key_self) &
80  bind(c,name='fv3jedi_linvarcha_c2a_delete_f90')
81 
82 implicit none
83 integer(c_int), intent(inout) :: c_key_self !< Change variable structure
84 
85 type(fv3jedi_linvarcha_c2a), pointer :: self
86 
87 call fv3jedi_linvarcha_c2a_registry%get(c_key_self,self)
88 call delete(self)
89 call fv3jedi_linvarcha_c2a_registry%remove(c_key_self)
90 
91 end subroutine c_fv3jedi_linvarcha_c2a_delete
92 
93 ! ------------------------------------------------------------------------------
94 
95 subroutine c_fv3jedi_linvarcha_c2a_multiply(c_key_self,c_key_geom,c_key_xctl,c_key_xana) &
96  bind(c,name='fv3jedi_linvarcha_c2a_multiply_f90')
97 
98 implicit none
99 integer(c_int), intent(in) :: c_key_self
100 integer(c_int), intent(in) :: c_key_geom
101 integer(c_int), intent(in) :: c_key_xctl
102 integer(c_int), intent(in) :: c_key_xana
103 
104 type(fv3jedi_linvarcha_c2a), pointer :: self
105 type(fv3jedi_geom), pointer :: geom
106 type(fv3jedi_increment), pointer :: xctl
107 type(fv3jedi_increment), pointer :: xana
108 
109 call fv3jedi_linvarcha_c2a_registry%get(c_key_self,self)
110 call fv3jedi_geom_registry%get(c_key_geom,geom)
111 call fv3jedi_increment_registry%get(c_key_xctl,xctl)
112 call fv3jedi_increment_registry%get(c_key_xana,xana)
113 
114 call multiply(self,geom,xctl,xana)
115 
117 
118 ! ----------------------------------------------------------------------------
119 
120 subroutine c_fv3jedi_linvarcha_c2a_multiplyadjoint(c_key_self,c_key_geom,c_key_xana,c_key_xctl) &
121  bind(c,name='fv3jedi_linvarcha_c2a_multiplyadjoint_f90')
122 
123 implicit none
124 integer(c_int), intent(in) :: c_key_self
125 integer(c_int), intent(in) :: c_key_geom
126 integer(c_int), intent(in) :: c_key_xana
127 integer(c_int), intent(in) :: c_key_xctl
128 
129 type(fv3jedi_linvarcha_c2a), pointer :: self
130 type(fv3jedi_geom), pointer :: geom
131 type(fv3jedi_increment), pointer :: xana
132 type(fv3jedi_increment), pointer :: xctl
133 
134 call fv3jedi_linvarcha_c2a_registry%get(c_key_self,self)
135 call fv3jedi_geom_registry%get(c_key_geom,geom)
136 call fv3jedi_increment_registry%get(c_key_xana,xana)
137 call fv3jedi_increment_registry%get(c_key_xctl,xctl)
138 
139 call multiplyadjoint(self,geom,xana,xctl)
140 
142 
143 ! ----------------------------------------------------------------------------
144 
145 subroutine c_fv3jedi_linvarcha_c2a_multiplyinverse(c_key_self,c_key_geom,c_key_xana,c_key_xctl) &
146  bind(c,name='fv3jedi_linvarcha_c2a_multiplyinverse_f90')
147 
148 implicit none
149 integer(c_int), intent(in) :: c_key_self
150 integer(c_int), intent(in) :: c_key_geom
151 integer(c_int), intent(in) :: c_key_xana
152 integer(c_int), intent(in) :: c_key_xctl
153 
154 type(fv3jedi_linvarcha_c2a), pointer :: self
155 type(fv3jedi_geom), pointer :: geom
156 type(fv3jedi_increment), pointer :: xana
157 type(fv3jedi_increment), pointer :: xctl
158 
159 call fv3jedi_linvarcha_c2a_registry%get(c_key_self,self)
160 call fv3jedi_geom_registry%get(c_key_geom,geom)
161 call fv3jedi_increment_registry%get(c_key_xana,xana)
162 call fv3jedi_increment_registry%get(c_key_xctl,xctl)
163 
164 call multiplyinverse(self,geom,xana,xctl)
165 
167 
168 ! ----------------------------------------------------------------------------
169 
170 subroutine c_fv3jedi_linvarcha_c2a_multiplyinverseadjoint(c_key_self,c_key_geom,c_key_xctl,c_key_xana) &
171  bind(c,name='fv3jedi_linvarcha_c2a_multiplyinverseadjoint_f90')
172 
173 implicit none
174 integer(c_int), intent(in) :: c_key_self
175 integer(c_int), intent(in) :: c_key_geom
176 integer(c_int), intent(in) :: c_key_xctl
177 integer(c_int), intent(in) :: c_key_xana
178 
179 type(fv3jedi_linvarcha_c2a), pointer :: self
180 type(fv3jedi_geom), pointer :: geom
181 type(fv3jedi_increment), pointer :: xctl
182 type(fv3jedi_increment), pointer :: xana
183 
184 call fv3jedi_linvarcha_c2a_registry%get(c_key_self,self)
185 call fv3jedi_geom_registry%get(c_key_geom,geom)
186 call fv3jedi_increment_registry%get(c_key_xctl,xctl)
187 call fv3jedi_increment_registry%get(c_key_xana,xana)
188 
189 call multiplyinverseadjoint(self,geom,xctl,xana)
190 
192 
193 ! ----------------------------------------------------------------------------
194 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_create
subroutine c_fv3jedi_linvarcha_c2a_create(c_key_self, c_key_geom, c_key_bg, c_key_fg, c_conf)
Linked list implementation.
Definition: fv3jedi_linvarcha_c2a.interface.F90:49
fv3jedi_linvarcha_c2a_mod::delete
subroutine, public delete(self)
Definition: fv3jedi_linvarcha_c2a_mod.f90:90
fv3jedi_linvarcha_c2a_mod::multiply
subroutine, public multiply(self, geom, dxc, dxa)
Definition: fv3jedi_linvarcha_c2a_mod.f90:104
fv3jedi_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_multiplyadjoint
subroutine c_fv3jedi_linvarcha_c2a_multiplyadjoint(c_key_self, c_key_geom, c_key_xana, c_key_xctl)
Definition: fv3jedi_linvarcha_c2a.interface.F90:122
fv3jedi_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_multiply
subroutine c_fv3jedi_linvarcha_c2a_multiply(c_key_self, c_key_geom, c_key_xctl, c_key_xana)
Definition: fv3jedi_linvarcha_c2a.interface.F90:97
fv3jedi_state_interface_mod
Definition: fv3jedi_state_interface_mod.F90:8
fv3jedi_state_mod
Definition: fv3jedi_state_mod.F90:6
fv3jedi_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_multiplyinverseadjoint
subroutine c_fv3jedi_linvarcha_c2a_multiplyinverseadjoint(c_key_self, c_key_geom, c_key_xctl, c_key_xana)
Definition: fv3jedi_linvarcha_c2a.interface.F90:172
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_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_multiplyinverse
subroutine c_fv3jedi_linvarcha_c2a_multiplyinverse(c_key_self, c_key_geom, c_key_xana, c_key_xctl)
Definition: fv3jedi_linvarcha_c2a.interface.F90:147
fv3jedi_linvarcha_c2a_mod::multiplyadjoint
subroutine, public multiplyadjoint(self, geom, dxa, dxc)
Definition: fv3jedi_linvarcha_c2a_mod.f90:231
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_linvarcha_c2a_mod::fv3jedi_linvarcha_c2a
Fortran derived type to hold configuration data for the B mat variable change.
Definition: fv3jedi_linvarcha_c2a_mod.f90:36
fv3jedi_linvarcha_c2a_mod::create
subroutine, public create(self, geom, bg, fg, conf)
Definition: fv3jedi_linvarcha_c2a_mod.f90:50
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_linvarcha_c2a_interface_mod::fv3jedi_linvarcha_c2a_registry
type(registry_t), public fv3jedi_linvarcha_c2a_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_linvarcha_c2a.interface.F90:34
fv3jedi_linvarcha_c2a_interface_mod::c_fv3jedi_linvarcha_c2a_delete
subroutine c_fv3jedi_linvarcha_c2a_delete(c_key_self)
Definition: fv3jedi_linvarcha_c2a.interface.F90:81
fv3jedi_linvarcha_c2a_interface_mod
Definition: fv3jedi_linvarcha_c2a.interface.F90:8
fv3jedi_increment_interface_mod
Definition: fv3jedi_increment_interface_mod.F90:8
fv3jedi_linvarcha_c2a_mod::multiplyinverseadjoint
subroutine, public multiplyinverseadjoint(self, geom, dxc, dxa)
Definition: fv3jedi_linvarcha_c2a_mod.f90:380
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_linvarcha_c2a_mod::multiplyinverse
subroutine, public multiplyinverse(self, geom, dxa, dxc)
Definition: fv3jedi_linvarcha_c2a_mod.f90:355
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_increment_mod::fv3jedi_increment
Definition: fv3jedi_increment_mod.F90:34
fv3jedi_linvarcha_c2a_mod
Definition: fv3jedi_linvarcha_c2a_mod.f90:6