FV3 Bundle
FortranMarine.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #ifndef UFO_MARINE_FORTRANMARINE_H_
9 #define UFO_MARINE_FORTRANMARINE_H_
10 
11 #include "ioda/ObsSpace.h"
12 
13 #include "ufo/Fortran.h"
14 
15 namespace ufo {
16 
17 /// Interface to Fortran UFO routines
18 /*!
19  * The core of the UFO is coded in Fortran.
20  * Here we define the interfaces to the Fortran code.
21  */
22 
23 extern "C" {
24 
25 // -----------------------------------------------------------------------------
26 // Ice concentration observation operator and its tl/ad
27 // -----------------------------------------------------------------------------
28  void ufo_seaicefrac_setup_f90(F90hop &, const eckit::Configuration * const *);
30  void ufo_seaicefrac_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &,
31  const int &, const double &, const F90obias &);
32  void ufo_seaicefrac_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
34  void ufo_seaicefrac_tlad_settraj_f90(const F90hop &, const F90goms &);
35  void ufo_seaicefrac_simobs_tl_f90(const F90hop &, const F90goms &,
36  const int &, const double &);
37  void ufo_seaicefrac_simobs_ad_f90(const F90hop &, const F90goms &,
38  const int &, const double &);
39 
40 // -----------------------------------------------------------------------------
41 // Ice thickness observation operator and its tl/ad
42 // -----------------------------------------------------------------------------
43  void ufo_seaicethick_setup_f90(F90hop &, const eckit::Configuration * const *);
45  void ufo_seaicethick_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &,
46  const int &, const double &, const F90obias &);
47  void ufo_seaicethick_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
49  void ufo_seaicethick_tlad_settraj_f90(const F90hop &, const F90goms &);
50  void ufo_seaicethick_simobs_tl_f90(const F90hop &, const F90goms &,
51  const int &, const double &);
52  void ufo_seaicethick_simobs_ad_f90(const F90hop &, const F90goms &,
53  const int &, const double &);
54 
55 // -----------------------------------------------------------------------------
56 // Steric Height observation operator and its tl/ad
57 // -----------------------------------------------------------------------------
58  void ufo_stericheight_setup_f90(F90hop &, const eckit::Configuration * const *);
60  void ufo_stericheight_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &,
61  const int &, const double &, const F90obias &);
62  void ufo_stericheight_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
64  void ufo_stericheight_tlad_settraj_f90(const F90hop &, const F90goms &);
65  void ufo_stericheight_tlad_gettraj_f90(const F90hop &, const int &, const int &, F90goms &);
66  void ufo_stericheight_simobs_tl_f90(const F90hop &, const F90goms &,
67  const int &, const double &);
68  void ufo_stericheight_simobs_ad_f90(const F90hop &, const F90goms &,
69  const int &, const double &);
70 
71 // -----------------------------------------------------------------------------
72 // Ocean Insitu Temperature observation operator and its tl/ad
73 // -----------------------------------------------------------------------------
74  void ufo_insitutemperature_setup_f90(F90hop &, const eckit::Configuration * const *);
76  void ufo_insitutemperature_simobs_f90(const F90hop &, const F90goms &,
77  const ioda::ObsSpace &, const int &, const double &,
78  const F90obias &);
79  void ufo_insitutemperature_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
82  const ioda::ObsSpace &);
84  const ioda::ObsSpace &,
85  const int &, const double &);
87  const ioda::ObsSpace &,
88  const int &, const double &);
89 
90 // -----------------------------------------------------------------------------
91 // Ocean ADT observation operator and its tl/ad
92 // -----------------------------------------------------------------------------
93  void ufo_adt_setup_f90(F90hop &, const eckit::Configuration * const *);
94  void ufo_adt_delete_f90(F90hop &);
95  void ufo_adt_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &,
96  const int &, const double &, const F90obias &);
97  void ufo_adt_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
99  void ufo_adt_tlad_settraj_f90(const F90hop &, const F90goms &);
100  void ufo_adt_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &);
101  void ufo_adt_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &);
102 
103 // -----------------------------------------------------------------------------
104 // Ocean Sea-Surface Temperature observation operator and its tl/ad
105 // -----------------------------------------------------------------------------
106  void ufo_seasurfacetemp_setup_f90(F90hop &, const eckit::Configuration * const *);
108  void ufo_seasurfacetemp_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &,
109  const int &, const double &, const F90obias &);
110  void ufo_seasurfacetemp_tlad_setup_f90(F90hop &, const eckit::Configuration * const *);
112  void ufo_seasurfacetemp_tlad_settraj_f90(const F90hop &, const F90goms &);
113  void ufo_seasurfacetemp_simobs_tl_f90(const F90hop &, const F90goms &,
114  const int &, const double &);
115  void ufo_seasurfacetemp_simobs_ad_f90(const F90hop &, const F90goms &,
116  const int &, const double &);
117 
118 // -----------------------------------------------------------------------------
119 
120 } // extern C
121 
122 } // namespace ufo
123 #endif // UFO_MARINE_FORTRANMARINE_H_
void ufo_adt_delete_f90(F90hop &)
void ufo_seaicefrac_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_stericheight_tlad_settraj_f90(const F90hop &, const F90goms &)
void ufo_seaicethick_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_seasurfacetemp_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_stericheight_delete_f90(F90hop &)
void ufo_seasurfacetemp_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_insitutemperature_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_insitutemperature_simobs_tl_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &)
void ufo_adt_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_stericheight_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_insitutemperature_simobs_ad_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &)
void ufo_stericheight_tlad_delete_f90(F90hop &)
void ufo_insitutemperature_tlad_delete_f90(F90hop &)
void ufo_stericheight_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_seaicethick_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_seaicethick_delete_f90(F90hop &)
void ufo_insitutemperature_delete_f90(F90hop &)
void ufo_seasurfacetemp_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_stericheight_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_stericheight_tlad_gettraj_f90(const F90hop &, const int &, const int &, F90goms &)
Wrapper around ObsHelpQG, mostly to hide the factory.
void ufo_seasurfacetemp_tlad_delete_f90(F90hop &)
void ufo_adt_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_seaicethick_tlad_settraj_f90(const F90hop &, const F90goms &)
void ufo_seaicefrac_tlad_delete_f90(F90hop &)
void ufo_seaicefrac_delete_f90(F90hop &)
void ufo_seaicefrac_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_seaicethick_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_adt_tlad_delete_f90(F90hop &)
void ufo_seasurfacetemp_tlad_settraj_f90(const F90hop &, const F90goms &)
void ufo_stericheight_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_stericheight_simobs_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &, const int &, const double &, const F90obias &)
void ufo_seaicefrac_tlad_settraj_f90(const F90hop &, const F90goms &)
void ufo_seaicethick_tlad_delete_f90(F90hop &)
void ufo_seaicethick_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_insitutemperature_tlad_settraj_f90(const F90hop &, const F90goms &, const ioda::ObsSpace &)
void ufo_seasurfacetemp_delete_f90(F90hop &)
void ufo_insitutemperature_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_adt_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_adt_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_adt_simobs_tl_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_seaicefrac_setup_f90(F90hop &, const eckit::Configuration *const *)
Interface to Fortran UFO routines.
void ufo_seaicefrac_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_seaicethick_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_seasurfacetemp_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_seasurfacetemp_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_seaicefrac_simobs_ad_f90(const F90hop &, const F90goms &, const int &, const double &)
void ufo_insitutemperature_tlad_setup_f90(F90hop &, const eckit::Configuration *const *)
void ufo_adt_tlad_settraj_f90(const F90hop &, const F90goms &)