UFO
GeoVaLs.interface.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_GEOVALS_INTERFACE_H_
9 #define UFO_GEOVALS_INTERFACE_H_
10 
11 #include "Fortran.h"
12 
13 // Forward declarations
14 namespace eckit {
15  class Configuration;
16 }
17 
18 namespace ioda {
19  class ObsSpace;
20 }
21 
22 namespace oops {
23  class Variables;
24 }
25 
26 
27 namespace ufo {
28  class Locations;
29 
30 /// Interface to Fortran UFO GeoVals routines
31 /*!
32  * The core of the UFO GeoVals is coded in Fortran.
33  * Here we define the interfaces to the Fortran code.
34  */
35 
36 extern "C" {
38  /// Deprecated, use ufo_geovals_setup_f90 instead.
39  /// Creates Fortran GeoVaLs with key \p key, \p nlocs number of locations
40  /// for \p vars variables. Does not allocate internal structures.
41  void ufo_geovals_partial_setup_f90(F90goms & key, const size_t & nlocs,
42  const oops::Variables & vars);
43  /// Creates and allocates Fortran GeoVaLs with key \p key, \p nlocs number of
44  /// locations for \p vars variables. \p nlevs is a pointer to the first element
45  /// of array size \p nvars that contains number of values to allocate for each of
46  /// the variables.
47  void ufo_geovals_setup_f90(F90goms & key, const size_t & nlocs,
48  const oops::Variables & vars,
49  const size_t & nvars, const size_t & nlevs);
50  /// Deprecated, rely on ufo_geovals_setup_f90 to allocate GeoVaLs instead.
51  /// Allocates GeoVaLs for \p vars variables with \p nlevels number of levels.
52  /// If the GeoVaLs for this variable were allocated before with different size,
53  /// aborts.
54  void ufo_geovals_allocate_f90(const F90goms &, const size_t & nlevels,
55  const oops::Variables & vars);
58  void ufo_geovals_copy_one_f90(F90goms &, const F90goms &, const int &);
60  void ufo_geovals_reorderzdir_f90(const F90goms &, const int &, const char *,
61  const int &, const char *);
63  void ufo_geovals_rms_f90(const F90goms &, double &);
65  const eckit::Configuration &);
67  void ufo_geovals_scalmult_f90(const F90goms &, const double &);
68  void ufo_geovals_profmult_f90(const F90goms &, const int &, const float &);
69  void ufo_geovals_assign_f90(const F90goms &, const F90goms &);
70  void ufo_geovals_add_f90(const F90goms &, const F90goms &);
71  void ufo_geovals_diff_f90(const F90goms &, const F90goms &);
72  void ufo_geovals_schurmult_f90(const F90goms &, const F90goms &);
73  void ufo_geovals_normalize_f90(const F90goms &, const F90goms &);
74  void ufo_geovals_split_f90(const F90goms &, const F90goms &, const F90goms &);
75  void ufo_geovals_merge_f90(const F90goms &, const F90goms &, const F90goms &);
76  void ufo_geovals_minmaxavg_f90(const F90goms &, int &, int &, double &, double &, double &);
77  void ufo_geovals_maxloc_f90(const F90goms &, double &, int &, int &);
78  void ufo_geovals_nlocs_f90(const F90goms &, size_t &);
79  void ufo_geovals_nlevs_f90(const F90goms &, const int &, const char *, int &);
80  void ufo_geovals_get2d_f90(const F90goms &, const int &, const char *, const int &,
81  double &);
82  void ufo_geovals_get_f90(const F90goms &, const int &, const char *, const int &,
83  const int &, float &);
84  void ufo_geovals_get_loc_f90(const F90goms &, const int &, const char *, const int &,
85  const int &, double &);
86  void ufo_geovals_getdouble_f90(const F90goms &, const int &, const char *, const int &,
87  const int &, double &);
88  void ufo_geovals_putdouble_f90(const F90goms &, const int &, const char *, const int &,
89  const int &, const double &);
90  void ufo_geovals_put_loc_f90(const F90goms &, const int &, const char *, const int &,
91  const int &, const double &);
93  const eckit::Configuration &,
94  const ioda::ObsSpace &, const oops::Variables &);
95  void ufo_geovals_write_file_f90(const F90goms &, const eckit::Configuration &, const size_t &);
96 } // extern C
97 
98 } // namespace ufo
99 #endif // UFO_GEOVALS_INTERFACE_H_
Locations class to handle simple lat-lon-time locations.
Forward declarations.
Definition: ObsAodExt.h:21
Forward declarations.
Definition: ObsAodExt.h:25
integer function nlocs(this)
Return the number of observational locations in this Locations object.
Definition: RunCRTM.h:27
void ufo_geovals_rms_f90(const F90goms &, double &)
void ufo_geovals_copy_one_f90(F90goms &, const F90goms &, const int &)
void ufo_geovals_get_loc_f90(const F90goms &, const int &, const char *, const int &, const int &, double &)
void ufo_geovals_read_file_f90(const F90goms &, const eckit::Configuration &, const ioda::ObsSpace &, const oops::Variables &)
void ufo_geovals_split_f90(const F90goms &, const F90goms &, const F90goms &)
void ufo_geovals_profmult_f90(const F90goms &, const int &, const float &)
int F90goms
Definition: Fortran.h:16
void ufo_geovals_delete_f90(F90goms &)
void ufo_geovals_analytic_init_f90(F90goms &, const Locations &, const eckit::Configuration &)
void ufo_geovals_partial_setup_f90(F90goms &key, const size_t &nlocs, const oops::Variables &vars)
void ufo_geovals_copy_f90(const F90goms &, F90goms &)
void ufo_geovals_nlocs_f90(const F90goms &, size_t &)
void ufo_geovals_put_loc_f90(const F90goms &, const int &, const char *, const int &, const int &, const double &)
void ufo_geovals_scalmult_f90(const F90goms &, const double &)
void ufo_geovals_nlevs_f90(const F90goms &, const int &, const char *, int &)
void ufo_geovals_maxloc_f90(const F90goms &, double &, int &, int &)
void ufo_geovals_zero_f90(const F90goms &)
void ufo_geovals_default_constr_f90(F90goms &)
Interface to Fortran UFO GeoVals routines.
void ufo_geovals_random_f90(const F90goms &)
void ufo_geovals_getdouble_f90(const F90goms &, const int &, const char *, const int &, const int &, double &)
void ufo_geovals_assign_f90(const F90goms &, const F90goms &)
void ufo_geovals_setup_f90(F90goms &key, const size_t &nlocs, const oops::Variables &vars, const size_t &nvars, const size_t &nlevs)
void ufo_geovals_abs_f90(const F90goms &)
void ufo_geovals_normalize_f90(const F90goms &, const F90goms &)
void ufo_geovals_write_file_f90(const F90goms &, const eckit::Configuration &, const size_t &)
void ufo_geovals_merge_f90(const F90goms &, const F90goms &, const F90goms &)
void ufo_geovals_get_f90(const F90goms &, const int &, const char *, const int &, const int &, float &)
void ufo_geovals_diff_f90(const F90goms &, const F90goms &)
void ufo_geovals_schurmult_f90(const F90goms &, const F90goms &)
void ufo_geovals_putdouble_f90(const F90goms &, const int &, const char *, const int &, const int &, const double &)
void ufo_geovals_allocate_f90(const F90goms &, const size_t &nlevels, const oops::Variables &vars)
void ufo_geovals_reorderzdir_f90(const F90goms &, const int &, const char *, const int &, const char *)
void ufo_geovals_get2d_f90(const F90goms &, const int &, const char *, const int &, double &)
void ufo_geovals_minmaxavg_f90(const F90goms &, int &, int &, double &, double &, double &)
void ufo_geovals_add_f90(const F90goms &, const F90goms &)