OOPS
qg_error_covariance_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 fckit_configuration_module, only: fckit_configuration
12 use fckit_log_module, only: fckit_log
13 use iso_c_binding
14 use kinds
16 use qg_fields_mod
17 use qg_geom_mod
18 
19 implicit none
20 
21 public
22 ! ------------------------------------------------------------------------------
23 contains
24 ! ------------------------------------------------------------------------------
25 !> Setup error covariance matrix
26 subroutine qg_error_covariance_setup_c(c_key_self,c_conf,c_key_geom) bind (c,name='qg_error_covariance_setup_f90')
27 
28 implicit none
29 
30 ! Passed variables
31 integer(c_int),intent(inout) :: c_key_self !< Error covariance configuration
32 type(c_ptr),value,intent(in) :: c_conf !< Configuration
33 integer(c_int),intent(in) :: c_key_geom !< Geometry
34 
35 ! Local variables
36 type(fckit_configuration) :: f_conf
37 type(qg_error_covariance_config),pointer :: self
38 type(qg_geom),pointer :: geom
39 
40 ! Interface
41 f_conf = fckit_configuration(c_conf)
42 call qg_geom_registry%get(c_key_geom,geom)
44 call qg_error_covariance_registry%add(c_key_self)
45 call qg_error_covariance_registry%get(c_key_self,self)
46 
47 ! Call Fortran
48 call qg_error_covariance_setup(self,f_conf,geom)
49 
50 end subroutine qg_error_covariance_setup_c
51 ! ------------------------------------------------------------------------------
52 !> Delete error covariance matrix
53 subroutine qg_error_covariance_delete_c(c_key_self) bind (c,name='qg_error_covariance_delete_f90')
54 
55 implicit none
56 
57 ! Passed variables
58 integer(c_int),intent(inout) :: c_key_self !< Error covariance configuration
59 
60 ! Local variables
61 type(qg_error_covariance_config),pointer :: self
62 
63 ! Interface
64 call qg_error_covariance_registry%get(c_key_self,self)
65 
66 ! Call Fortran
68 
69 ! Clear interface
70 call qg_error_covariance_registry%remove(c_key_self)
71 
72 end subroutine qg_error_covariance_delete_c
73 ! ------------------------------------------------------------------------------
74 !> Multiply by error covariance matrix
75 subroutine qg_error_covariance_mult_c(c_key_conf,c_key_in,c_key_out) bind(c,name='qg_error_covariance_mult_f90')
76 
77 implicit none
78 
79 ! Passed variables
80 integer(c_int),intent(in) :: c_key_conf !< Error covariance configuration
81 integer(c_int),intent(in) :: c_key_in !< Input field
82 integer(c_int),intent(in) :: c_key_out !< Output field
83 
84 ! Local variables
85 type(qg_error_covariance_config),pointer :: conf
86 type(qg_fields),pointer :: fld_in,fld_out
87 
88 ! Interface
89 call qg_error_covariance_registry%get(c_key_conf,conf)
90 call qg_fields_registry%get(c_key_in,fld_in)
91 call qg_fields_registry%get(c_key_out,fld_out)
92 
93 ! Call Fortran
94 call qg_error_covariance_mult(conf,fld_in,fld_out)
95 
96 end subroutine qg_error_covariance_mult_c
97 ! ------------------------------------------------------------------------------
98 !> Randomize error covariance
99 subroutine qg_error_covariance_randomize_c(c_key_conf,c_key_out) bind(c,name='qg_error_covariance_randomize_f90')
100 
101 implicit none
102 
103 ! Passed variables
104 integer(c_int),intent(in) :: c_key_conf !< Error covariance configuration
105 integer(c_int),intent(in) :: c_key_out !< Output field
106 
107 ! Local variables
108 type(qg_error_covariance_config),pointer :: conf
109 type(qg_fields),pointer :: fld_out
110 
111 ! Interface
112 call qg_error_covariance_registry%get(c_key_conf,conf)
113 call qg_fields_registry%get(c_key_out,fld_out)
114 
115 ! Call Fortran
116 call qg_error_covariance_randomize(conf,fld_out)
117 
118 end subroutine qg_error_covariance_randomize_c
119 ! ------------------------------------------------------------------------------
qg_fields_mod
Definition: qg_fields_mod.F90:9
qg_error_covariance_mod
Definition: qg_error_covariance_mod.F90:9
qg_fields_mod::qg_fields
Definition: qg_fields_mod.F90:51
qg_geom_mod
Definition: qg_geom_mod.F90:9
qg_error_covariance_interface
Definition: qg_error_covariance_interface.F90:9
qg_error_covariance_mod::qg_error_covariance_setup
subroutine, public qg_error_covariance_setup(self, f_conf, geom)
Linked list implementation.
Definition: qg_error_covariance_mod.F90:58
qg_error_covariance_interface::qg_error_covariance_delete_c
subroutine qg_error_covariance_delete_c(c_key_self)
Delete error covariance matrix.
Definition: qg_error_covariance_interface.F90:54
qg_error_covariance_interface::qg_error_covariance_setup_c
subroutine qg_error_covariance_setup_c(c_key_self, c_conf, c_key_geom)
Setup error covariance matrix.
Definition: qg_error_covariance_interface.F90:27
qg_error_covariance_mod::qg_error_covariance_registry
type(registry_t), public qg_error_covariance_registry
Linked list interface - defines registry_t type.
Definition: qg_error_covariance_mod.F90:47
qg_error_covariance_mod::qg_error_covariance_config
Definition: qg_error_covariance_mod.F90:31
qg_error_covariance_mod::qg_error_covariance_delete
subroutine, public qg_error_covariance_delete(self)
Delete error covariance matrix.
Definition: qg_error_covariance_mod.F90:223
qg_geom_mod::qg_geom
Definition: qg_geom_mod.F90:26
qg_geom_mod::qg_geom_registry
type(registry_t), public qg_geom_registry
Linked list interface - defines registry_t type.
Definition: qg_geom_mod.F90:53
qg_error_covariance_interface::qg_error_covariance_mult_c
subroutine qg_error_covariance_mult_c(c_key_conf, c_key_in, c_key_out)
Multiply by error covariance matrix.
Definition: qg_error_covariance_interface.F90:76
qg_error_covariance_mod::qg_error_covariance_randomize
subroutine, public qg_error_covariance_randomize(conf, fld_out)
Randomize error covariance.
Definition: qg_error_covariance_mod.F90:263
qg_error_covariance_interface::qg_error_covariance_randomize_c
subroutine qg_error_covariance_randomize_c(c_key_conf, c_key_out)
Randomize error covariance.
Definition: qg_error_covariance_interface.F90:100
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_error_covariance_mod::qg_error_covariance_mult
subroutine, public qg_error_covariance_mult(conf, fld_in, fld_out)
Multiply by error covariance matrix.
Definition: qg_error_covariance_mod.F90:239