FV3-JEDI
GetValues.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
33 
34 implicit none
35 private
37 
38 ! --------------------------------------------------------------------------------------------------
39 
40 !> Linked list interface
41 #define LISTED_TYPE fv3jedi_getvalues
42 #include "oops/util/linkedList_i.f"
43 type(registry_t) :: fv3jedi_getvalues_registry
44 
45 ! --------------------------------------------------------------------------------------------------
46 
47 contains
48 
49 ! --------------------------------------------------------------------------------------------------
50 
51 !> Linked list implementation
52 #include "oops/util/linkedList_c.f"
53 
54 ! --------------------------------------------------------------------------------------------------
55 
56 subroutine fv3jedi_getvalues_create_c(c_key_self, c_key_geom, c_key_locs) &
57  bind(c, name='fv3jedi_getvalues_create_f90')
58 
59 integer(c_int), intent(inout) :: c_key_self !< Key to self
60 integer(c_int), intent(in) :: c_key_geom !< Key to geometry
61 integer(c_int), intent(in) :: c_key_locs !< Key to observation locations
62 
63 type(fv3jedi_getvalues), pointer :: self
64 type(fv3jedi_geom), pointer :: geom
65 type(ufo_locs), pointer :: locs
66 
67 ! Create object
69 call fv3jedi_getvalues_registry%add(c_key_self)
70 call fv3jedi_getvalues_registry%get(c_key_self, self)
71 
72 ! Others
73 call fv3jedi_geom_registry%get(c_key_geom, geom)
74 call ufo_locs_registry%get(c_key_locs, locs)
75 
76 ! Call method
77 call self%create(geom, locs)
78 
79 end subroutine fv3jedi_getvalues_create_c
80 
81 ! --------------------------------------------------------------------------------------------------
82 
83 subroutine fv3jedi_getvalues_delete_c(c_key_self) bind (c, name='fv3jedi_getvalues_delete_f90')
84 
85 integer(c_int), intent(inout) :: c_key_self !< Key to self
86 
87 type(fv3jedi_getvalues), pointer :: self
88 
89 ! Get object
90 call fv3jedi_getvalues_registry%get(c_key_self, self)
91 
92 ! Call method
93 call self%delete()
94 
95 ! Remove object
96 call fv3jedi_getvalues_registry%remove(c_key_self)
97 
98 end subroutine fv3jedi_getvalues_delete_c
99 
100 ! --------------------------------------------------------------------------------------------------
101 
102 subroutine fv3jedi_getvalues_fill_geovals_c(c_key_self, c_key_geom, c_key_state, c_t1, c_t2, &
103  c_key_locs, c_key_geovals) &
104  bind(c, name='fv3jedi_getvalues_fill_geovals_f90')
105 
106 integer(c_int), intent(in) :: c_key_self
107 integer(c_int), intent(in) :: c_key_geom
108 integer(c_int), intent(in) :: c_key_state
109 type(c_ptr), intent(in) :: c_t1
110 type(c_ptr), intent(in) :: c_t2
111 integer(c_int), intent(in) :: c_key_locs
112 integer(c_int), intent(in) :: c_key_geovals
113 
114 type(fv3jedi_getvalues), pointer :: self
115 type(fv3jedi_geom), pointer :: geom
116 type(fv3jedi_state), pointer :: state
117 type(datetime) :: t1
118 type(datetime) :: t2
119 type(ufo_locs), pointer :: locs
120 type(ufo_geovals), pointer :: geovals
121 
122 ! Get objects
123 call fv3jedi_getvalues_registry%get(c_key_self, self)
124 call fv3jedi_geom_registry%get(c_key_geom, geom)
125 call fv3jedi_state_registry%get(c_key_state, state)
126 call c_f_datetime(c_t1, t1)
127 call c_f_datetime(c_t2, t2)
128 call ufo_locs_registry%get(c_key_locs, locs)
129 call ufo_geovals_registry%get(c_key_geovals, geovals)
130 
131 ! Call method
132 call self%fill_geovals(geom, state%fields, t1, t2, locs, geovals)
133 
135 
136 ! --------------------------------------------------------------------------------------------------
137 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_getvalues_interface_mod::fv3jedi_getvalues_registry
type(registry_t), public fv3jedi_getvalues_registry
Linked list interface.
Definition: GetValues.interface.F90:43
fv3jedi_getvalues_interface_mod::fv3jedi_getvalues_create_c
subroutine fv3jedi_getvalues_create_c(c_key_self, c_key_geom, c_key_locs)
Linked list implementation.
Definition: GetValues.interface.F90:58
fv3jedi_getvalues_mod
Definition: fv3jedi_getvalues_mod.f90:6
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_getvalues_interface_mod::fv3jedi_getvalues_delete_c
subroutine fv3jedi_getvalues_delete_c(c_key_self)
Definition: GetValues.interface.F90:84
fv3jedi_geom_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_mod.f90:8
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_getvalues_interface_mod::fv3jedi_getvalues_fill_geovals_c
subroutine fv3jedi_getvalues_fill_geovals_c(c_key_self, c_key_geom, c_key_state, c_t1, c_t2, c_key_locs, c_key_geovals)
Definition: GetValues.interface.F90:105
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_kinds_mod::kind_real
integer, parameter, public kind_real
Definition: fv3jedi_kinds_mod.f90:14
fv3jedi_kinds_mod
Definition: fv3jedi_kinds_mod.f90:6
fv3jedi_getvalues_interface_mod
Definition: GetValues.interface.F90:8
fv3jedi_getvalues_mod::fv3jedi_getvalues
Definition: fv3jedi_getvalues_mod.f90:50