FV3-JEDI
fv3jedi_pseudo_interface_mod.F90
Go to the documentation of this file.
1 ! (C) Copyright 2019-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 ! iso
9 use iso_c_binding
10 
11 ! fckit
12 use fckit_configuration_module, only: fckit_configuration
13 
14 ! oops
15 use datetime_mod
16 use duration_mod
17 use oops_variables_mod
18 
19 ! fv3-jedi
25 
26 implicit none
27 private
28 
30 
31 !> Linked list interface
32 #define LISTED_TYPE pseudo_model
33 #include "oops/util/linkedList_i.f"
34 type(registry_t) :: fv3jedi_pseudo_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_pseudo_create(c_conf, c_key_geom, c_key_self) &
48  bind(c,name='fv3jedi_pseudo_create_f90')
49 
50 implicit none
51 integer(c_int), intent(inout) :: c_key_self !< Key to model data
52 integer(c_int), intent(in) :: c_key_geom !< Geometry
53 type(c_ptr), intent(in) :: c_conf !< pointer to object of class Config
54 
55 type(pseudo_model), pointer :: self
56 type(fv3jedi_geom), pointer :: geom
57 type(fckit_configuration) :: conf
58 
59 call fv3jedi_geom_registry%get(c_key_geom, geom)
60 call fv3jedi_pseudo_registry%init()
61 call fv3jedi_pseudo_registry%add(c_key_self)
62 call fv3jedi_pseudo_registry%get(c_key_self, self)
63 
64 ! Fortran configuration
65 ! ---------------------
66 conf = fckit_configuration(c_conf)
67 
68 call self%create(geom, conf)
69 
70 end subroutine c_fv3jedi_pseudo_create
71 
72 ! --------------------------------------------------------------------------------------------------
73 
74 subroutine c_fv3jedi_pseudo_delete(c_key_self) bind (c,name='fv3jedi_pseudo_delete_f90')
75 
76 implicit none
77 integer(c_int), intent(inout) :: c_key_self
78 type(pseudo_model), pointer :: self
79 
80 call fv3jedi_pseudo_registry%get(c_key_self, self)
81 
82 call self%delete()
83 
84 call fv3jedi_pseudo_registry%remove(c_key_self)
85 
86 end subroutine c_fv3jedi_pseudo_delete
87 
88 ! --------------------------------------------------------------------------------------------------
89 
90 subroutine c_fv3jedi_pseudo_initialize(c_key_self, c_key_state) &
91  bind(c,name='fv3jedi_pseudo_initialize_f90')
92 
93 implicit none
94 integer(c_int), intent(in) :: c_key_self !< Model
95 integer(c_int), intent(in) :: c_key_state !< Model state
96 
97 type(pseudo_model), pointer :: self
98 type(fv3jedi_state), pointer :: state
99 
100 call fv3jedi_state_registry%get(c_key_state,state)
101 call fv3jedi_pseudo_registry%get(c_key_self, self)
102 
103 call self%initialize(state)
104 
105 end subroutine c_fv3jedi_pseudo_initialize
106 
107 ! --------------------------------------------------------------------------------------------------
108 
109 subroutine c_fv3jedi_pseudo_step(c_key_self, c_key_state, c_key_geom, c_dt) &
110  bind(c,name='fv3jedi_pseudo_step_f90')
111 
112 implicit none
113 integer(c_int), intent(in) :: c_key_self !< Model
114 integer(c_int), intent(in) :: c_key_state !< Model state
115 integer(c_int), intent(in) :: c_key_geom !< Geometry
116 type(c_ptr), intent(inout) :: c_dt !< DateTime
117 
118 type(pseudo_model), pointer :: self
119 type(fv3jedi_state), pointer :: state
120 type(fv3jedi_geom), pointer :: geom
121 type(datetime) :: fdate
122 
123 call fv3jedi_pseudo_registry%get(c_key_self, self)
124 call fv3jedi_state_registry%get(c_key_state,state)
125 call fv3jedi_geom_registry%get(c_key_geom, geom)
126 call c_f_datetime(c_dt, fdate)
127 
128 call self%step(state, geom, fdate)
129 
130 end subroutine c_fv3jedi_pseudo_step
131 
132 ! --------------------------------------------------------------------------------------------------
133 
134 subroutine c_fv3jedi_pseudo_finalize(c_key_self, c_key_state) &
135  bind(c,name='fv3jedi_pseudo_finalize_f90')
136 
137 implicit none
138 integer(c_int), intent(in) :: c_key_self !< Model
139 integer(c_int), intent(in) :: c_key_state !< Model state
140 
141 type(pseudo_model), pointer :: self
142 type(fv3jedi_state), pointer :: state
143 
144 call fv3jedi_state_registry%get(c_key_state,state)
145 call fv3jedi_pseudo_registry%get(c_key_self, self)
146 
147 call self%finalize(state)
148 
149 end subroutine c_fv3jedi_pseudo_finalize
150 
151 ! --------------------------------------------------------------------------------------------------
152 
fv3jedi_pseudo_interface_mod::c_fv3jedi_pseudo_create
subroutine c_fv3jedi_pseudo_create(c_conf, c_key_geom, c_key_self)
Linked list implementation.
Definition: fv3jedi_pseudo_interface_mod.F90:49
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_pseudo_interface_mod::c_fv3jedi_pseudo_initialize
subroutine c_fv3jedi_pseudo_initialize(c_key_self, c_key_state)
Definition: fv3jedi_pseudo_interface_mod.F90:92
fv3jedi_pseudo_interface_mod::fv3jedi_pseudo_registry
type(registry_t), public fv3jedi_pseudo_registry
Linked list interface.
Definition: fv3jedi_pseudo_interface_mod.F90:34
fv3jedi_state_interface_mod
Definition: fv3jedi_state_interface_mod.F90:8
fv3jedi_state_mod
Definition: fv3jedi_state_mod.F90:6
fv3jedi_pseudo_mod
Definition: fv3jedi_pseudo_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_pseudo_interface_mod
Definition: fv3jedi_pseudo_interface_mod.F90:6
fv3jedi_pseudo_interface_mod::c_fv3jedi_pseudo_step
subroutine c_fv3jedi_pseudo_step(c_key_self, c_key_state, c_key_geom, c_dt)
Definition: fv3jedi_pseudo_interface_mod.F90:111
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_pseudo_mod::pseudo_model
Fortran derived type to hold model definition.
Definition: fv3jedi_pseudo_mod.f90:32
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_pseudo_interface_mod::c_fv3jedi_pseudo_finalize
subroutine c_fv3jedi_pseudo_finalize(c_key_self, c_key_state)
Definition: fv3jedi_pseudo_interface_mod.F90:136
fv3jedi_pseudo_interface_mod::c_fv3jedi_pseudo_delete
subroutine c_fv3jedi_pseudo_delete(c_key_self)
Definition: fv3jedi_pseudo_interface_mod.F90:75