FV3-JEDI
fv3jedi_geos_interface_mod.F90
Go to the documentation of this file.
1 ! (C) Copyright 2017-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 
7 
9 use datetime_mod
10 use duration_mod
11 use iso_c_binding
12 
13 use fckit_configuration_module, only: fckit_configuration
14 
20 
21 implicit none
22 private
23 
24 public :: fv3jedi_geos_registry
25 
26 !> Linked list interface
27 #define LISTED_TYPE geos_model
28 #include "oops/util/linkedList_i.f"
29 type(registry_t) :: fv3jedi_geos_registry
30 
31 ! ------------------------------------------------------------------------------
32 
33 contains
34 
35 ! ------------------------------------------------------------------------------
36 
37 !> Linked list implementation
38 #include "oops/util/linkedList_c.f"
39 
40 ! ------------------------------------------------------------------------------
41 
42 subroutine c_fv3jedi_geos_create(c_conf, c_key_geom, c_key_self) bind (c,name='fv3jedi_geos_create_f90')
43 
44 implicit none
45 integer(c_int), intent(inout) :: c_key_self !< Key to model data
46 integer(c_int), intent(in) :: c_key_geom !< Geometry
47 type(c_ptr), intent(in) :: c_conf !< pointer to object of class Config
48 
49 type(geos_model), pointer :: self
50 type(fv3jedi_geom), pointer :: geom
51 type(fckit_configuration) :: f_conf
52 
53 call fv3jedi_geom_registry%get(c_key_geom, geom)
54 call fv3jedi_geos_registry%init()
55 call fv3jedi_geos_registry%add(c_key_self)
56 call fv3jedi_geos_registry%get(c_key_self, self)
57 
58 f_conf = fckit_configuration(c_conf)
59 
60 call geos_create(self, geom, f_conf)
61 
62 end subroutine c_fv3jedi_geos_create
63 
64 ! ------------------------------------------------------------------------------
65 
66 subroutine c_fv3jedi_geos_delete(c_key_self) bind (c,name='fv3jedi_geos_delete_f90')
67 
68 implicit none
69 integer(c_int), intent(inout) :: c_key_self
70 type(geos_model), pointer :: self
71 
72 call fv3jedi_geos_registry%get(c_key_self, self)
73 
74 call geos_delete(self)
75 
76 call fv3jedi_geos_registry%remove(c_key_self)
77 
78 end subroutine c_fv3jedi_geos_delete
79 
80 ! ------------------------------------------------------------------------------
81 
82 subroutine c_fv3jedi_geos_initialize(c_key_self, c_key_state) bind(c,name='fv3jedi_geos_initialize_f90')
83 
84 implicit none
85 integer(c_int), intent(in) :: c_key_self !< Model
86 integer(c_int), intent(in) :: c_key_state !< Model state
87 
88 type(geos_model), pointer :: self
89 type(fv3jedi_state), pointer :: state
90 
91 call fv3jedi_state_registry%get(c_key_state,state)
92 call fv3jedi_geos_registry%get(c_key_self, self)
93 
94 call geos_initialize(self, state)
95 
96 end subroutine c_fv3jedi_geos_initialize
97 
98 ! ------------------------------------------------------------------------------
99 
100 subroutine c_fv3jedi_geos_step(c_key_self, c_key_state, c_dt) bind(c,name='fv3jedi_geos_step_f90')
101 
102 implicit none
103 integer(c_int), intent(in) :: c_key_self !< Model
104 integer(c_int), intent(in) :: c_key_state !< Model state
105 type(c_ptr), intent(inout) :: c_dt !< DateTime
106 
107 type(geos_model), pointer :: self
108 type(fv3jedi_state), pointer :: state
109 
110 type(datetime) :: fdate
111 
112 call fv3jedi_geos_registry%get(c_key_self, self)
113 call fv3jedi_state_registry%get(c_key_state,state)
114 
115 call c_f_datetime(c_dt, fdate)
116 
117 call geos_step(self, state, fdate)
118 
119 end subroutine c_fv3jedi_geos_step
120 
121 ! ------------------------------------------------------------------------------
122 
123 subroutine c_fv3jedi_geos_finalize(c_key_self, c_key_state) bind(c,name='fv3jedi_geos_finalize_f90')
124 
125 implicit none
126 integer(c_int), intent(in) :: c_key_self !< Model
127 integer(c_int), intent(in) :: c_key_state !< Model state
128 
129 type(geos_model), pointer :: self
130 type(fv3jedi_state), pointer :: state
131 
132 call fv3jedi_state_registry%get(c_key_state,state)
133 call fv3jedi_geos_registry%get(c_key_self, self)
134 
135 call geos_finalize(self, state)
136 
137 end subroutine c_fv3jedi_geos_finalize
138 
139 ! ------------------------------------------------------------------------------
140 
fv3jedi_geos_mod
Definition: fv3jedi_geos_mod.F90:10
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_geos_interface_mod::c_fv3jedi_geos_step
subroutine c_fv3jedi_geos_step(c_key_self, c_key_state, c_dt)
Definition: fv3jedi_geos_interface_mod.F90:101
fv3jedi_geos_interface_mod::c_fv3jedi_geos_finalize
subroutine c_fv3jedi_geos_finalize(c_key_self, c_key_state)
Definition: fv3jedi_geos_interface_mod.F90:124
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_geos_mod::geos_initialize
subroutine, public geos_initialize(self, state)
Definition: fv3jedi_geos_mod.F90:213
fv3jedi_geos_interface_mod
Definition: fv3jedi_geos_interface_mod.F90:6
fv3jedi_geos_interface_mod::c_fv3jedi_geos_create
subroutine c_fv3jedi_geos_create(c_conf, c_key_geom, c_key_self)
Linked list implementation.
Definition: fv3jedi_geos_interface_mod.F90:43
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_geos_mod::geos_create
subroutine, public geos_create(self, geom, conf)
Definition: fv3jedi_geos_mod.F90:70
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_geos_mod::geos_finalize
subroutine, public geos_finalize(self, state)
Definition: fv3jedi_geos_mod.F90:263
fv3jedi_geos_interface_mod::c_fv3jedi_geos_delete
subroutine c_fv3jedi_geos_delete(c_key_self)
Definition: fv3jedi_geos_interface_mod.F90:67
fv3jedi_geos_interface_mod::fv3jedi_geos_registry
type(registry_t), public fv3jedi_geos_registry
Linked list interface.
Definition: fv3jedi_geos_interface_mod.F90:29
fv3jedi_kinds_mod
Definition: fv3jedi_kinds_mod.f90:6
fv3jedi_geos_mod::geos_step
subroutine, public geos_step(self, state, vdate)
Definition: fv3jedi_geos_mod.F90:237
fv3jedi_geos_mod::geos_model
Fortran derived type to hold model definition.
Definition: fv3jedi_geos_mod.F90:48
fv3jedi_geos_interface_mod::c_fv3jedi_geos_initialize
subroutine c_fv3jedi_geos_initialize(c_key_self, c_key_state)
Definition: fv3jedi_geos_interface_mod.F90:83
fv3jedi_geos_mod::geos_delete
subroutine, public geos_delete(self)
Definition: fv3jedi_geos_mod.F90:190