SOCA
soca_bkgerrfilt.interface.F90
Go to the documentation of this file.
1 ! (C) Copyright 2017-2021 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 
6 !< C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt
8 
9 use fckit_configuration_module, only: fckit_configuration
10 use iso_c_binding
11 
12 ! soca modules
15 use soca_geom_mod, only: soca_geom
18 use soca_state_mod, only: soca_state
20 
21 implicit none
22 private
23 
24 
25 #define LISTED_TYPE soca_bkgerrfilt
26 
27 !> Linked list interface - defines registry_t type
28 #include "oops/util/linkedList_i.f"
29 
30 !> Global registry for soca_bkgerrfilt
31 type(registry_t), public :: soca_bkgerrfilt_registry
32 
33 
34 ! ------------------------------------------------------------------------------
35 contains
36 ! ------------------------------------------------------------------------------
37 
38 
39 !> Linked list implementation
40 #include "oops/util/linkedList_c.f"
41 
42 ! ------------------------------------------------------------------------------
43 !> C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt::setup()
44 !!
45 !! Constructor for D (standard deviation of background error)
46 subroutine soca_bkgerrfilt_setup_c(c_key_self, c_conf, c_key_bkg, c_key_geom) &
47  bind(c,name='soca_bkgerrfilt_setup_f90')
48 
49  integer(c_int), intent(inout) :: c_key_self !< The D structure
50  type(c_ptr), intent(in) :: c_conf !< The configuration
51  integer(c_int), intent(in) :: c_key_bkg !< Background field
52  integer(c_int), intent(in) :: c_key_geom !< Geometry
53 
54  type(soca_state), pointer :: bkg
55  type(soca_geom), pointer :: geom
56  type(soca_bkgerrfilt), pointer :: self
57 
58  call soca_bkgerrfilt_registry%init()
59  call soca_bkgerrfilt_registry%add(c_key_self)
60  call soca_bkgerrfilt_registry%get(c_key_self, self)
61  call soca_state_registry%get(c_key_bkg, bkg)
62  call soca_geom_registry%get(c_key_geom, geom)
63 
64  call self%setup(fckit_configuration(c_conf), bkg, geom)
65 end subroutine soca_bkgerrfilt_setup_c
66 
67 
68 ! ------------------------------------------------------------------------------
69 !> C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt destuctor
70 subroutine soca_bkgerrfilt_delete_c(c_key_self) &
71  bind(c,name='soca_bkgerrfilt_delete_f90')
72 
73  integer(c_int), intent(inout) :: c_key_self
74  type(soca_bkgerrfilt), pointer :: self
75 
76  call soca_bkgerrfilt_registry%get(c_key_self, self)
77  if (associated(self%geom)) nullify(self%geom)
78  call self%filt%delete()
79 
80  call soca_bkgerrfilt_registry%remove(c_key_self)
81 end subroutine soca_bkgerrfilt_delete_c
82 
83 
84 ! ------------------------------------------------------------------------------
85 !> C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt::mult()
86 !!
87 !! Multiplication forward and adjoint
88 subroutine soca_bkgerrfilt_mult_c(c_key_self, c_key_a, c_key_m)&
89  bind(c,name='soca_bkgerrfilt_mult_f90')
90 
91  integer(c_int), intent(in) :: c_key_a !< " to Increment in
92  integer(c_int), intent(in) :: c_key_m !< " to Increment out
93  integer(c_int), intent(in) :: c_key_self
94 
95  type(soca_increment), pointer :: dxa
96  type(soca_increment), pointer :: dxm
97  type(soca_bkgerrfilt), pointer :: self
98 
99  call soca_increment_registry%get(c_key_a,dxa)
100  call soca_increment_registry%get(c_key_m,dxm)
101  call soca_bkgerrfilt_registry%get(c_key_self,self)
102 
103  !< Computes dxm = D dxa
104  call dxm%copy(dxa)
105  call self%mult(dxa, dxm)
106 end subroutine soca_bkgerrfilt_mult_c
107 
108 
109 end module soca_bkgerrfilt_mod_c
subroutine soca_bkgerrfilt_mult_c(c_key_self, c_key_a, c_key_m)
C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt::mult()
subroutine soca_bkgerrfilt_setup_c(c_key_self, c_conf, c_key_bkg, c_key_geom)
Linked list implementation.
subroutine soca_bkgerrfilt_delete_c(c_key_self)
C++ interface for soca_bkgerrfilt_mod::soca_bkgerrfilt destuctor.
type(registry_t), public soca_bkgerrfilt_registry
Linked list interface - defines registry_t type.
variable transform: background error filtering
C++ interfaces for soca_geom_mod::soca_geom.
type(registry_t), public soca_geom_registry
Linked list interface - defines registry_t type.
Geometry module.
Increment fields.
registry for soca_increment_mod::soca_increment instances for use in Fortran/C++ interface of soca_in...
type(registry_t), public soca_increment_registry
Linked list interface - defines registry_t type.
State fields.
registry for soca_state_mod::soca_state instances for use in Fortran/C++ interfaces of soca_state_mod...
type(registry_t), public soca_state_registry
Linked list interface - defines registry_t type.
Variable transform for background error filtering.
Geometry data structure.