OOPS
qg_change_var_interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2009-2016 ECMWF.
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 ! In applying this licence, ECMWF does not waive the privileges and immunities
6 ! granted to it by virtue of its status as an intergovernmental organisation nor
7 ! does it submit to any jurisdiction.
8 
10 
11 use iso_c_binding
13 use qg_fields_mod
14 use qg_geom_mod
16 
17 implicit none
18 
19 private
20 ! ------------------------------------------------------------------------------
21 contains
22 ! ------------------------------------------------------------------------------
23 !> Setup change of variable
24 subroutine qg_change_var_setup_c(c_key_self,c_vars_in,c_vars_out) bind (c,name='qg_change_var_setup_f90')
25 
26 implicit none
27 
28 ! Passed variables
29 integer(c_int),intent(inout) :: c_key_self !< Variable change
30 type(c_ptr),value,intent(in) :: c_vars_in !< Input variables
31 type(c_ptr),value,intent(in) :: c_vars_out !< Output variables
32 
33 ! Local variable
34 type(qg_change_var_config),pointer :: self
35 type(oops_variables) :: vars_in,vars_out
36 
37 ! Interface
38 call qg_change_var_registry%init()
39 call qg_change_var_registry%add(c_key_self)
40 call qg_change_var_registry%get(c_key_self,self)
41 vars_in = oops_variables(c_vars_in)
42 vars_out = oops_variables(c_vars_out)
43 
44 ! Call Fortran
45 call qg_change_var_setup(self,vars_in,vars_out)
46 
47 end subroutine qg_change_var_setup_c
48 ! ------------------------------------------------------------------------------
49 !> Delete error covariance matrix
50 subroutine qg_change_var_delete_c(c_key_self) bind (c,name='qg_change_var_delete_f90')
51 
52 implicit none
53 
54 ! Passed variables
55 integer(c_int),intent(inout) :: c_key_self !< Error covariance configuration
56 
57 ! Clear interface
58 call qg_change_var_registry%remove(c_key_self)
59 
60 end subroutine qg_change_var_delete_c
61 ! ------------------------------------------------------------------------------
62 !> Change of variable
63 subroutine qg_change_var_c(c_key_conf,c_key_fld_in,c_key_fld_out) bind (c,name='qg_change_var_f90')
64 
65 implicit none
66 
67 ! Passed variables
68 integer(c_int),intent(in) :: c_key_conf !< Variable change
69 integer(c_int),intent(in) :: c_key_fld_in !< Input field
70 integer(c_int),intent(in) :: c_key_fld_out !< Output field
71 
72 ! Local variables
73 type(qg_change_var_config),pointer :: conf
74 type(qg_fields),pointer :: fld_in,fld_out
75 
76 ! Interface
77 call qg_change_var_registry%get(c_key_conf,conf)
78 call qg_fields_registry%get(c_key_fld_in,fld_in)
79 call qg_fields_registry%get(c_key_fld_out,fld_out)
80 
81 ! Call Fortran
82 call qg_change_var(conf,fld_in,fld_out)
83 
84 end subroutine qg_change_var_c
85 ! ------------------------------------------------------------------------------
86 !> Change of variable - inverse
87 subroutine qg_change_var_inv_c(c_key_conf,c_key_fld_in,c_key_fld_out) bind (c,name='qg_change_var_inv_f90')
88 
89 implicit none
90 
91 ! Passed variables
92 integer(c_int),intent(in) :: c_key_conf !< Configuration
93 integer(c_int),intent(in) :: c_key_fld_in !< Input field
94 integer(c_int),intent(in) :: c_key_fld_out !< Output field
95 
96 ! Local variables
97 type(qg_change_var_config),pointer :: conf
98 type(qg_fields),pointer :: fld_in,fld_out
99 
100 ! Interface
101 call qg_change_var_registry%get(c_key_conf,conf)
102 call qg_fields_registry%get(c_key_fld_in,fld_in)
103 call qg_fields_registry%get(c_key_fld_out,fld_out)
104 
105 ! Call Fortran
106 call qg_change_var_inv(conf,fld_in,fld_out)
107 
108 end subroutine qg_change_var_inv_c
109 ! ------------------------------------------------------------------------------
110 !> Change of variable - adjoint
111 subroutine qg_change_var_ad_c(c_key_conf,c_key_fld_in,c_key_fld_out) bind (c,name='qg_change_var_ad_f90')
112 
113 implicit none
114 
115 ! Passed variables
116 integer(c_int),intent(in) :: c_key_conf !< Configuration
117 integer(c_int),intent(in) :: c_key_fld_in !< Input field
118 integer(c_int),intent(in) :: c_key_fld_out !< Output field
119 
120 ! Local variables
121 type(qg_change_var_config),pointer :: conf
122 type(qg_fields),pointer :: fld_in,fld_out
123 
124 ! Interface
125 call qg_change_var_registry%get(c_key_conf,conf)
126 call qg_fields_registry%get(c_key_fld_in,fld_in)
127 call qg_fields_registry%get(c_key_fld_out,fld_out)
128 
129 ! Call Fortran
130 call qg_change_var_ad(conf,fld_in,fld_out)
131 
132 end subroutine qg_change_var_ad_c
133 ! ------------------------------------------------------------------------------
134 !> Change of variable - inverse adjoint
135 subroutine qg_change_var_inv_ad_c(c_key_conf,c_key_fld_in,c_key_fld_out) bind (c,name='qg_change_var_inv_ad_f90')
136 
137 implicit none
138 
139 ! Passed variables
140 integer(c_int),intent(in) :: c_key_conf !< Configuration
141 integer(c_int),intent(in) :: c_key_fld_in !< Input field
142 integer(c_int),intent(in) :: c_key_fld_out !< Output field
143 
144 ! Local variables
145 type(qg_change_var_config),pointer :: conf
146 type(qg_fields),pointer :: fld_in,fld_out
147 
148 ! Interface
149 call qg_change_var_registry%get(c_key_conf,conf)
150 call qg_fields_registry%get(c_key_fld_in,fld_in)
151 call qg_fields_registry%get(c_key_fld_out,fld_out)
152 
153 ! Call Fortran
154 call qg_change_var_inv_ad(conf,fld_in,fld_out)
155 
156 end subroutine qg_change_var_inv_ad_c
157 ! ------------------------------------------------------------------------------
158 end module qg_change_var_interface
qg_fields_mod
Definition: qg_fields_mod.F90:9
qg_change_var_interface::qg_change_var_delete_c
subroutine qg_change_var_delete_c(c_key_self)
Delete error covariance matrix.
Definition: qg_change_var_interface.F90:51
qg_fields_mod::qg_fields
Definition: qg_fields_mod.F90:51
qg_geom_mod
Definition: qg_geom_mod.F90:9
qg_change_var_mod::qg_change_var_ad
subroutine, public qg_change_var_ad(conf, fld_in, fld_out)
Change of variable - adjoint.
Definition: qg_change_var_mod.F90:156
qg_change_var_mod
Definition: qg_change_var_mod.F90:9
qg_change_var_interface::qg_change_var_ad_c
subroutine qg_change_var_ad_c(c_key_conf, c_key_fld_in, c_key_fld_out)
Change of variable - adjoint.
Definition: qg_change_var_interface.F90:112
qg_change_var_mod::qg_change_var
subroutine, public qg_change_var(conf, fld_in, fld_out)
Change of variable.
Definition: qg_change_var_mod.F90:70
qg_change_var_interface::qg_change_var_setup_c
subroutine qg_change_var_setup_c(c_key_self, c_vars_in, c_vars_out)
Setup change of variable.
Definition: qg_change_var_interface.F90:25
qg_change_var_interface::qg_change_var_c
subroutine qg_change_var_c(c_key_conf, c_key_fld_in, c_key_fld_out)
Change of variable.
Definition: qg_change_var_interface.F90:64
oops_variables_mod
Fortran interface to Variables.
Definition: variables_mod.F90:9
qg_change_var_mod::qg_change_var_inv
subroutine, public qg_change_var_inv(conf, fld_in, fld_out)
Change of variable - inverse.
Definition: qg_change_var_mod.F90:113
qg_change_var_mod::qg_change_var_config
Definition: qg_change_var_mod.F90:23
qg_change_var_mod::qg_change_var_setup
subroutine, public qg_change_var_setup(self, vars_in, vars_out)
Linked list implementation.
Definition: qg_change_var_mod.F90:44
qg_change_var_interface::qg_change_var_inv_c
subroutine qg_change_var_inv_c(c_key_conf, c_key_fld_in, c_key_fld_out)
Change of variable - inverse.
Definition: qg_change_var_interface.F90:88
qg_change_var_mod::qg_change_var_registry
type(registry_t), public qg_change_var_registry
Linked list interface - defines registry_t type.
Definition: qg_change_var_mod.F90:33
qg_change_var_mod::qg_change_var_inv_ad
subroutine, public qg_change_var_inv_ad(conf, fld_in, fld_out)
Change of variable - inverse adjoint.
Definition: qg_change_var_mod.F90:199
oops_variables_mod::oops_variables
Definition: variables_mod.F90:16
qg_change_var_interface::qg_change_var_inv_ad_c
subroutine qg_change_var_inv_ad_c(c_key_conf, c_key_fld_in, c_key_fld_out)
Change of variable - inverse adjoint.
Definition: qg_change_var_interface.F90:136
qg_fields_mod::qg_fields_registry
type(registry_t), public qg_fields_registry
Linked list interface - defines registry_t type.
Definition: qg_fields_mod.F90:68
qg_change_var_interface
Definition: qg_change_var_interface.F90:9