Rave objectified the wrwp generator and added the first tests
[baltrad-wrwp.git] / lib / wrwp.h
1 /* --------------------------------------------------------------------
2 Copyright (C) 2011 Swedish Meteorological and Hydrological Institute, SMHI
3
4 This is free software: you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This software is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with HLHDF.  If not, see <http://www.gnu.org/licenses/>.
16 ------------------------------------------------------------------------*/
17
18 /** Header file for deriving weather radar wind and reflectivity profiles
19  * @file
20  * @author Gunther Haase, SMHI
21  * @date 2013-02-06
22  */
23 #ifndef WRWP_H
24 #define WRWP_H
25 #include <stdio.h>
26 #include <string.h>
27 #include <stdlib.h>
28 #include <math.h>
29 #include <float.h>
30 #include <lapacke.h>
31 #include <cblas.h>
32
33 #include "rave_io.h"
34 #include "cartesian.h"
35 #include "polarvolume.h"
36 #include "vertical_profile.h"
37 #include "projectionregistry.h"
38 #include "arearegistry.h"
39 #include "projection.h"
40 #include "area.h"
41 #include "rave_object.h"
42 #include "rave_types.h"
43 #include "rave_alloc.h"
44 #include "polarnav.h"
45 #include "raveutil.h"
46
47
48 /******************************************************************************/
49 /*Definition of standard parameters.                                          */
50 /******************************************************************************/
51
52 #define DEG2RAD    DEG_TO_RAD      /* Degrees to radians. From PROJ.4 */
53 #define RAD2DEG    RAD_TO_DEG      /* Radians to degrees. From PROJ.4 */
54 #define NOR        20000           /* Number of rows in matrix A used in the computation */
55 #define NOC        3               /* Number of columns in matrix A used in the computation */
56 #define NRHS       1               /* Number of right-hand sides; that is, the number of columns in matrix B used in the computation */
57 #define LDA        NOC             /* Leading dimension of the array specified for a */
58 #define LDB        NRHS            /* Leading dimension of the array specified for b */
59 #define DMIN       4000            /* Minimum distance for deriving a profile [m] */
60 #define DMAX       40000           /* Maximum distance for deriving a profile [m] */
61 #define NMIN       36              /* Minimum sample size */
62 #define EMIN       2.5             /* Minimum elevation angle [deg] */
63 #define VMIN       2.0             /* Radial velocity threshold [m/s] */
64 #define DZ         200             /* Height interval for deriving a profile [m] */
65 #define HMAX       12000           /* Maximum height of the profile [m] */
66
67 /**
68  * Defines a weather radar wind product generator
69  */
70 typedef struct _Wrwp_t Wrwp_t;
71
72 /**
73  * Type definition to use when creating a rave object.
74  */
75 extern RaveCoreObjectType Wrwp_TYPE;
76
77 /**
78  * Sets the height interval for deriving a profile [m]
79  * @param[in] self - self
80  * @param[in] dz - the height interval
81  */
82 void Wrwp_setDZ(Wrwp_t* self, int dz);
83
84 /**
85  * Returns the height interval for deriving a profile [m]
86  * @param[in] self - self
87  * @return the height interval (default value is DZ)
88  */
89 int Wrwp_getDZ(Wrwp_t* self);
90
91 /**
92  * Sets maximum height of the profile [m]
93  * @param[in] self - self
94  * @param[in] hmax - maximum height of the profile [m]
95  */
96 void Wrwp_setHMAX(Wrwp_t* self, int hmax);
97
98 /**
99  * Returns maximum height of the profile [m]
100  * @param[in] self - self
101  * @return maximum height of the profile (default is HMAX)
102  */
103 int Wrwp_getHMAX(Wrwp_t* self);
104
105 /**
106  * Sets minimum distance for deriving a profile [m]
107  * @param[in] self - self
108  * @param[in] dmin - minimum distance for deriving a profile [m]
109  */
110 void Wrwp_setDMIN(Wrwp_t* self, int dmin);
111
112 /**
113  * Returns minimum distance for deriving a profile [m]
114  * @param[in] self - self
115  * @return minimum distance for deriving a profile [m] (default DMIN)
116  */
117 int Wrwp_getDMIN(Wrwp_t* self);
118
119 /**
120  * Sets maximum distance for deriving a profile [m]
121  * @param[in] self - self
122  * @param[in] dmax - maximum distance for deriving a profile [m]
123  */
124 void Wrwp_setDMAX(Wrwp_t* self, int dmax);
125
126 /**
127  * Returns maximum distance for deriving a profile [m]
128  * @param[in] self - self
129  * @return maximum distance for deriving a profile [m] (default DMAX)
130  */
131 int Wrwp_getDMAX(Wrwp_t* self);
132
133 /**
134  * Sets minimum elevation angle [deg]
135  * @param[in] self - self
136  * @param[in] emin - minimum elevation angle [deg]
137  */
138 void Wrwp_setEMIN(Wrwp_t* self, double emin);
139
140 /**
141  * Returns minimum elevation angle [deg]
142  * @param[in] self - self
143  * @return Minimum elevation angle [deg] (default EMIN)
144  */
145 double Wrwp_getEMIN(Wrwp_t* self);
146
147 /**
148  * Sets radial velocity threshold [m/s]
149  * @param[in] self - self
150  * @param[in] vmin - radial velocity threshold [m/s]
151  */
152 void Wrwp_setVMIN(Wrwp_t* self, double vmin);
153
154 /**
155  * Returns radial velocity threshold [m/s]
156  * @param[in] self - self
157  * @return Radial velocity threshold [m/s] (default VMIN)
158  */
159 double Wrwp_getVMIN(Wrwp_t* self);
160
161 /**
162  * Function for deriving wind and reflectivity profiles from polar volume data
163  * @param[in] self - self
164  * @param[in] iobj - input volume
165  * @returns the wind profile
166  */
167 VerticalProfile_t* Wrwp_generate(Wrwp_t* self, PolarVolume_t* inobj);
168
169 #endif