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