FV3-JEDI
fv3jedi_lvc_model2geovals.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 
7 
8 use iso_c_binding
9 
10 use datetime_mod
11 
12 use fckit_configuration_module, only: fckit_configuration
13 
21 
22 implicit none
23 
24 private
26 
27 ! --------------------------------------------------------------------------------------------------
28 
29 #define LISTED_TYPE fv3jedi_lvc_model2geovals
30 
31 !> Linked list interface - defines registry_t type
32 #include "oops/util/linkedList_i.f"
33 
34 !> Global registry
36 
37 ! --------------------------------------------------------------------------------------------------
38 
39 contains
40 
41 ! --------------------------------------------------------------------------------------------------
42 
43 !> Linked list implementation
44 #include "oops/util/linkedList_c.f"
45 
46 ! --------------------------------------------------------------------------------------------------
47 
48 subroutine c_fv3jedi_lvc_model2geovals_create(c_key_self, c_key_geom, c_key_bg, c_key_fg, c_conf) &
49  bind(c,name='fv3jedi_lvc_model2geovals_create_f90')
50 
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_lvc_model2geovals), 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 
63 ! Linked list
64 ! -----------
66 call fv3jedi_lvc_model2geovals_registry%add(c_key_self)
67 call fv3jedi_lvc_model2geovals_registry%get(c_key_self, self)
68 call fv3jedi_geom_registry%get(c_key_geom, geom)
69 call fv3jedi_state_registry%get(c_key_bg, bg)
70 call fv3jedi_state_registry%get(c_key_fg, fg)
71 
72 ! APIs
73 ! ----
74 conf = fckit_configuration(c_conf)
75 
76 ! Implementation
77 ! --------------
78 call self%create(geom, bg, fg, conf)
79 
81 
82 ! --------------------------------------------------------------------------------------------------
83 
84 subroutine c_fv3jedi_lvc_model2geovals_delete(c_key_self) &
85  bind(c,name='fv3jedi_lvc_model2geovals_delete_f90')
86 
87 integer(c_int), intent(inout) :: c_key_self
88 
89 type(fv3jedi_lvc_model2geovals), pointer :: self
90 
91 ! Linked list
92 ! -----------
93 call fv3jedi_lvc_model2geovals_registry%get(c_key_self, self)
94 
95 ! Implementation
96 ! --------------
97 call self%delete()
98 
99 ! Linked list
100 ! -----------
101 call fv3jedi_lvc_model2geovals_registry%remove(c_key_self)
102 
104 
105 ! --------------------------------------------------------------------------------------------------
106 
107 subroutine c_fv3jedi_lvc_model2geovals_multiply(c_key_self, c_key_geom, c_key_dxm, c_key_dxg) &
108  bind(c,name='fv3jedi_lvc_model2geovals_multiply_f90')
109 
110 integer(c_int), intent(in) :: c_key_self
111 integer(c_int), intent(in) :: c_key_geom
112 integer(c_int), intent(in) :: c_key_dxm
113 integer(c_int), intent(in) :: c_key_dxg
114 
115 type(fv3jedi_lvc_model2geovals), pointer :: self
116 type(fv3jedi_geom), pointer :: geom
117 type(fv3jedi_increment), pointer :: dxm
118 type(fv3jedi_increment), pointer :: dxg
119 
120 ! Linked list
121 ! -----------
122 call fv3jedi_lvc_model2geovals_registry%get(c_key_self,self)
123 call fv3jedi_geom_registry%get(c_key_geom,geom)
124 call fv3jedi_increment_registry%get(c_key_dxm,dxm)
125 call fv3jedi_increment_registry%get(c_key_dxg,dxg)
126 
127 ! Implementation
128 ! --------------
129 call self%multiply(geom, dxm, dxg)
130 
132 
133 ! --------------------------------------------------------------------------------------------------
134 
135 subroutine c_fv3jedi_lvc_model2geovals_multiplyadjoint(c_key_self, c_key_geom, c_key_dxg, &
136  c_key_dxm) &
137  bind(c,name='fv3jedi_lvc_model2geovals_multiplyadjoint_f90')
138 
139 integer(c_int), intent(in) :: c_key_self
140 integer(c_int), intent(in) :: c_key_geom
141 integer(c_int), intent(in) :: c_key_dxg
142 integer(c_int), intent(in) :: c_key_dxm
143 
144 type(fv3jedi_lvc_model2geovals), pointer :: self
145 type(fv3jedi_geom), pointer :: geom
146 type(fv3jedi_increment), pointer :: dxg
147 type(fv3jedi_increment), pointer :: dxm
148 
149 ! Linked list
150 ! -----------
151 call fv3jedi_lvc_model2geovals_registry%get(c_key_self, self)
152 call fv3jedi_geom_registry%get(c_key_geom, geom)
153 call fv3jedi_increment_registry%get(c_key_dxg, dxg)
154 call fv3jedi_increment_registry%get(c_key_dxm, dxm)
155 
156 ! Implementation
157 ! --------------
158 call self%multiplyadjoint(geom, dxg, dxm)
159 
161 
162 ! --------------------------------------------------------------------------------------------------
163 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_lvc_model2geovals_interface_mod
Definition: fv3jedi_lvc_model2geovals.interface.F90:6
fv3jedi_lvc_model2geovals_interface_mod::c_fv3jedi_lvc_model2geovals_delete
subroutine c_fv3jedi_lvc_model2geovals_delete(c_key_self)
Definition: fv3jedi_lvc_model2geovals.interface.F90:86
fv3jedi_lvc_model2geovals_interface_mod::fv3jedi_lvc_model2geovals_registry
type(registry_t), public fv3jedi_lvc_model2geovals_registry
Linked list interface - defines registry_t type.
Definition: fv3jedi_lvc_model2geovals.interface.F90:35
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_lvc_model2geovals_interface_mod::c_fv3jedi_lvc_model2geovals_multiplyadjoint
subroutine c_fv3jedi_lvc_model2geovals_multiplyadjoint(c_key_self, c_key_geom, c_key_dxg, c_key_dxm)
Definition: fv3jedi_lvc_model2geovals.interface.F90:138
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_lvc_model2geovals_mod::fv3jedi_lvc_model2geovals
Definition: fv3jedi_lvc_model2geovals_mod.f90:35
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_lvc_model2geovals_mod
Definition: fv3jedi_lvc_model2geovals_mod.f90:6
fv3jedi_lvc_model2geovals_interface_mod::c_fv3jedi_lvc_model2geovals_create
subroutine c_fv3jedi_lvc_model2geovals_create(c_key_self, c_key_geom, c_key_bg, c_key_fg, c_conf)
Linked list implementation.
Definition: fv3jedi_lvc_model2geovals.interface.F90:50
fv3jedi_lvc_model2geovals_interface_mod::c_fv3jedi_lvc_model2geovals_multiply
subroutine c_fv3jedi_lvc_model2geovals_multiply(c_key_self, c_key_geom, c_key_dxm, c_key_dxg)
Definition: fv3jedi_lvc_model2geovals.interface.F90:109
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