FV3-JEDI
fv3jedi_nuopc_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 
18 
19 implicit none
20 private
21 
22 public :: fv3jedi_nuopc_registry
23 
24 !> Linked list interface
25 #define LISTED_TYPE model_nuopc_type
26 #include "oops/util/linkedList_i.f"
27 type(registry_t) :: fv3jedi_nuopc_registry
28 
29 ! ------------------------------------------------------------------------------
30 
31 contains
32 
33 ! ------------------------------------------------------------------------------
34 
35 !> Linked list implementation
36 #include "oops/util/linkedList_c.f"
37 
38 ! ------------------------------------------------------------------------------
39 
40 subroutine c_fv3jedi_nuopc_create(c_conf, c_key_geom, c_key_self) bind (c,name='fv3jedi_nuopc_create_f90')
41 
42 implicit none
43 integer(c_int), intent(inout) :: c_key_self !< Key to model data
44 integer(c_int), intent(in) :: c_key_geom !< Geometry
45 type(c_ptr), intent(in) :: c_conf !< pointer to object of class Config
46 
47 type(model_nuopc_type), pointer :: self
48 type(fv3jedi_geom), pointer :: geom
49 
50 call fv3jedi_geom_registry%get(c_key_geom, geom)
51 call fv3jedi_nuopc_registry%init()
52 call fv3jedi_nuopc_registry%add(c_key_self)
53 call fv3jedi_nuopc_registry%get(c_key_self, self)
54 
55 call model_nuopc_create(self, geom, c_conf)
56 
57 end subroutine c_fv3jedi_nuopc_create
58 
59 ! ------------------------------------------------------------------------------
60 
61 subroutine c_fv3jedi_nuopc_delete(c_key_self) bind (c,name='fv3jedi_nuopc_delete_f90')
62 
63 implicit none
64 integer(c_int), intent(inout) :: c_key_self
65 type(model_nuopc_type), pointer :: self
66 
67 call fv3jedi_nuopc_registry%get(c_key_self, self)
68 
69 call model_nuopc_delete(self)
70 
71 call fv3jedi_nuopc_registry%remove(c_key_self)
72 
73 end subroutine c_fv3jedi_nuopc_delete
74 
75 ! ------------------------------------------------------------------------------
76 
77 subroutine c_fv3jedi_nuopc_initialize(c_key_self, c_key_state, c_dt) bind(c,name='fv3jedi_nuopc_initialize_f90')
78 
79 implicit none
80 integer(c_int), intent(in) :: c_key_self !< Model
81 integer(c_int), intent(in) :: c_key_state !< Model state
82 
83 type(model_nuopc_type), pointer :: self
84 type(fv3jedi_state), pointer :: state
85 type(c_ptr), intent(inout) :: c_dt !< DateTime
86 
87 type(datetime) :: fdate
88 
89 call fv3jedi_state_registry%get(c_key_state,state)
90 call fv3jedi_nuopc_registry%get(c_key_self, self)
91 
92 call c_f_datetime(c_dt, fdate)
93 
94 call model_nuopc_initialize(self, state, fdate)
95 
96 end subroutine c_fv3jedi_nuopc_initialize
97 
98 ! ------------------------------------------------------------------------------
99 
100 subroutine c_fv3jedi_nuopc_step(c_key_self, c_key_state, c_dt1, c_dt2) bind(c,name='fv3jedi_nuopc_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_dt1 !< DateTime
106 type(c_ptr), intent(inout) :: c_dt2 !< DateTime
107 
108 type(model_nuopc_type), pointer :: self
109 type(fv3jedi_state), pointer :: state
110 
111 type(datetime) :: fdate1
112 type(datetime) :: fdate2
113 
114 call fv3jedi_nuopc_registry%get(c_key_self, self)
115 call fv3jedi_state_registry%get(c_key_state,state)
116 
117 call c_f_datetime(c_dt1, fdate1)
118 call c_f_datetime(c_dt2, fdate2)
119 
120 call model_nuopc_step(self, state, fdate1, fdate2)
121 
122 end subroutine c_fv3jedi_nuopc_step
123 
124 ! ------------------------------------------------------------------------------
125 
126 subroutine c_fv3jedi_nuopc_finalize(c_key_self, c_key_state, c_dt) bind(c,name='fv3jedi_nuopc_finalize_f90')
127 
128 implicit none
129 integer(c_int), intent(in) :: c_key_self !< Model
130 integer(c_int), intent(in) :: c_key_state !< Model state
131 type(c_ptr), intent(inout) :: c_dt !< DateTime
132 
133 type(model_nuopc_type), pointer :: self
134 type(fv3jedi_state), pointer :: state
135 
136 type(datetime) :: fdate
137 
138 call fv3jedi_state_registry%get(c_key_state,state)
139 call fv3jedi_nuopc_registry%get(c_key_self, self)
140 
141 call c_f_datetime(c_dt, fdate)
142 
143 call model_nuopc_finalize(self, state, fdate)
144 
145 end subroutine c_fv3jedi_nuopc_finalize
146 
147 ! ------------------------------------------------------------------------------
148 
fv3jedi_state_mod::fv3jedi_state
Fortran derived type to hold FV3JEDI state.
Definition: fv3jedi_state_mod.F90:30
fv3jedi_nuopc_mod::model_nuopc_finalize
subroutine, public model_nuopc_finalize(self, state, vdate)
Definition: fv3jedi_nuopc_mod.F90:235
fv3jedi_nuopc_mod::model_nuopc_initialize
subroutine, public model_nuopc_initialize(self, state, vdate)
Definition: fv3jedi_nuopc_mod.F90:180
fv3jedi_state_interface_mod
Definition: fv3jedi_state_interface_mod.F90:8
fv3jedi_nuopc_mod::model_nuopc_type
Fortran derived type to hold model definition.
Definition: fv3jedi_nuopc_mod.F90:40
fv3jedi_state_mod
Definition: fv3jedi_state_mod.F90:6
fv3jedi_nuopc_mod
Definition: fv3jedi_nuopc_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_nuopc_interface_mod::c_fv3jedi_nuopc_finalize
subroutine c_fv3jedi_nuopc_finalize(c_key_self, c_key_state, c_dt)
Definition: fv3jedi_nuopc_interface_mod.F90:127
fv3jedi_nuopc_interface_mod
Definition: fv3jedi_nuopc_interface_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_nuopc_interface_mod::c_fv3jedi_nuopc_step
subroutine c_fv3jedi_nuopc_step(c_key_self, c_key_state, c_dt1, c_dt2)
Definition: fv3jedi_nuopc_interface_mod.F90:101
fv3jedi_nuopc_interface_mod::c_fv3jedi_nuopc_initialize
subroutine c_fv3jedi_nuopc_initialize(c_key_self, c_key_state, c_dt)
Definition: fv3jedi_nuopc_interface_mod.F90:78
fv3jedi_geom_interface_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_interface_mod.F90:8
fv3jedi_nuopc_mod::model_nuopc_step
subroutine, public model_nuopc_step(self, state, vdate1, vdate2)
Definition: fv3jedi_nuopc_mod.F90:196
fv3jedi_nuopc_mod::model_nuopc_create
subroutine, public model_nuopc_create(self, geom, c_conf)
Definition: fv3jedi_nuopc_mod.F90:53
fv3jedi_nuopc_mod::model_nuopc_delete
subroutine, public model_nuopc_delete(self)
Definition: fv3jedi_nuopc_mod.F90:142
fv3jedi_nuopc_interface_mod::fv3jedi_nuopc_registry
type(registry_t), public fv3jedi_nuopc_registry
Linked list interface.
Definition: fv3jedi_nuopc_interface_mod.F90:27
fv3jedi_nuopc_interface_mod::c_fv3jedi_nuopc_delete
subroutine c_fv3jedi_nuopc_delete(c_key_self)
Definition: fv3jedi_nuopc_interface_mod.F90:62
fv3jedi_kinds_mod
Definition: fv3jedi_kinds_mod.f90:6
fv3jedi_nuopc_interface_mod::c_fv3jedi_nuopc_create
subroutine c_fv3jedi_nuopc_create(c_conf, c_key_geom, c_key_self)
Linked list implementation.
Definition: fv3jedi_nuopc_interface_mod.F90:41