FV3-JEDI
fv3jedi_fv3lm_interface_mod.F90
Go to the documentation of this file.
1 ! (C) Copyright 2017-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 ! oops uses
11 use datetime_mod
12 use duration_mod
13 
14 ! fckit uses
15 use fckit_configuration_module, only: fckit_configuration
16 
17 ! fv3-jedi uses
23 
24 implicit none
25 private
26 public :: fv3jedi_fv3lm_registry
27 
28 !> Linked list interface
29 #define LISTED_TYPE fv3lm_model
30 #include "oops/util/linkedList_i.f"
31 type(registry_t) :: fv3jedi_fv3lm_registry
32 
33 ! --------------------------------------------------------------------------------------------------
34 
35 contains
36 
37 ! --------------------------------------------------------------------------------------------------
38 
39 !> Linked list implementation
40 #include "oops/util/linkedList_c.f"
41 
42 ! --------------------------------------------------------------------------------------------------
43 
44 subroutine c_fv3jedi_fv3lm_create(c_conf, c_key_geom, c_key_self) &
45  bind(c,name='fv3jedi_fv3lm_create_f90')
46 
47 implicit none
48 integer(c_int), intent(inout) :: c_key_self !< Key to model data
49 integer(c_int), intent(in) :: c_key_geom !< Geometry
50 type(c_ptr), intent(in) :: c_conf !< pointer to object of class Config
51 
52 type(fv3lm_model), pointer :: self
53 type(fv3jedi_geom), pointer :: geom
54 type(fckit_configuration) :: f_conf
55 
56 ! Linked lists
57 call fv3jedi_geom_registry%get(c_key_geom, geom)
58 call fv3jedi_fv3lm_registry%init()
59 call fv3jedi_fv3lm_registry%add(c_key_self)
60 call fv3jedi_fv3lm_registry%get(c_key_self, self)
61 
62 ! Fortran configuration
63 f_conf = fckit_configuration(c_conf)
64 
65 ! Implementation
66 call self%create(geom, f_conf)
67 
68 end subroutine c_fv3jedi_fv3lm_create
69 
70 ! --------------------------------------------------------------------------------------------------
71 
72 subroutine c_fv3jedi_fv3lm_delete(c_key_self) bind (c,name='fv3jedi_fv3lm_delete_f90')
73 
74 implicit none
75 integer(c_int), intent(inout) :: c_key_self
76 
77 type(fv3lm_model), pointer :: self
78 
79 ! Linked lists
80 call fv3jedi_fv3lm_registry%get(c_key_self, self)
81 
82 ! Implementation
83 call self%delete()
84 
85 ! Linked lists
86 call fv3jedi_fv3lm_registry%remove(c_key_self)
87 
88 end subroutine c_fv3jedi_fv3lm_delete
89 
90 ! --------------------------------------------------------------------------------------------------
91 
92 subroutine c_fv3jedi_fv3lm_initialize(c_key_self, c_key_state) &
93  bind(c,name='fv3jedi_fv3lm_initialize_f90')
94 
95 implicit none
96 integer(c_int), intent(in) :: c_key_self !< Model
97 integer(c_int), intent(in) :: c_key_state !< Model state
98 
99 type(fv3lm_model), pointer :: self
100 type(fv3jedi_state), pointer :: state
101 
102 ! Linked lists
103 call fv3jedi_state_registry%get(c_key_state,state)
104 call fv3jedi_fv3lm_registry%get(c_key_self, self)
105 
106 ! Implementation
107 call self%initialize(state)
108 
109 end subroutine c_fv3jedi_fv3lm_initialize
110 
111 ! --------------------------------------------------------------------------------------------------
112 
113 subroutine c_fv3jedi_fv3lm_step(c_key_self, c_key_state, c_key_geom, c_dt) &
114  bind(c,name='fv3jedi_fv3lm_step_f90')
115 
116 implicit none
117 integer(c_int), intent(in) :: c_key_self !< Model
118 integer(c_int), intent(in) :: c_key_state !< Model state
119 integer(c_int), intent(in) :: c_key_geom !< Geometry
120 type(c_ptr), intent(inout) :: c_dt !< DateTime
121 
122 type(fv3lm_model), pointer :: self
123 type(fv3jedi_state), pointer :: state
124 type(fv3jedi_geom), pointer :: geom
125 type(datetime) :: fdate
126 
127 ! Linked lists
128 call fv3jedi_fv3lm_registry%get(c_key_self, self)
129 call fv3jedi_state_registry%get(c_key_state,state)
130 call fv3jedi_geom_registry%get(c_key_geom, geom)
131 call c_f_datetime(c_dt, fdate)
132 
133 ! Implementation
134 call self%step(state, geom, fdate)
135 
136 end subroutine c_fv3jedi_fv3lm_step
137 
138 ! --------------------------------------------------------------------------------------------------
139 
140 subroutine c_fv3jedi_fv3lm_finalize(c_key_self, c_key_state) &
141  bind(c,name='fv3jedi_fv3lm_finalize_f90')
142 
143 implicit none
144 integer(c_int), intent(in) :: c_key_self !< Model
145 integer(c_int), intent(in) :: c_key_state !< Model state
146 
147 type(fv3lm_model), pointer :: self
148 type(fv3jedi_state), pointer :: state
149 
150 ! Linked lists
151 call fv3jedi_state_registry%get(c_key_state,state)
152 call fv3jedi_fv3lm_registry%get(c_key_self, self)
153 
154 ! Implementation
155 call self%finalize(state)
156 
157 end subroutine c_fv3jedi_fv3lm_finalize
158 
159 ! --------------------------------------------------------------------------------------------------
160 
fv3jedi_fv3lm_mod::fv3lm_model
Definition: fv3jedi_fv3lm_mod.f90:29
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_fv3lm_interface_mod::c_fv3jedi_fv3lm_create
subroutine c_fv3jedi_fv3lm_create(c_conf, c_key_geom, c_key_self)
Linked list implementation.
Definition: fv3jedi_fv3lm_interface_mod.F90:46
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_fv3lm_interface_mod::c_fv3jedi_fv3lm_initialize
subroutine c_fv3jedi_fv3lm_initialize(c_key_self, c_key_state)
Definition: fv3jedi_fv3lm_interface_mod.F90:94
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_fv3lm_interface_mod::c_fv3jedi_fv3lm_finalize
subroutine c_fv3jedi_fv3lm_finalize(c_key_self, c_key_state)
Definition: fv3jedi_fv3lm_interface_mod.F90:142
fv3jedi_fv3lm_interface_mod
Definition: fv3jedi_fv3lm_interface_mod.F90:6
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_fv3lm_interface_mod::fv3jedi_fv3lm_registry
type(registry_t), public fv3jedi_fv3lm_registry
Linked list interface.
Definition: fv3jedi_fv3lm_interface_mod.F90:31
fv3jedi_fv3lm_mod
Definition: fv3jedi_fv3lm_mod.f90:6
fv3jedi_fv3lm_interface_mod::c_fv3jedi_fv3lm_step
subroutine c_fv3jedi_fv3lm_step(c_key_self, c_key_state, c_key_geom, c_dt)
Definition: fv3jedi_fv3lm_interface_mod.F90:115
fv3jedi_fv3lm_interface_mod::c_fv3jedi_fv3lm_delete
subroutine c_fv3jedi_fv3lm_delete(c_key_self)
Definition: fv3jedi_fv3lm_interface_mod.F90:73