commit 1f5c67fbb5de7179c1fe31f0f393835ab2dd29ca
parent 71f160fd196d497b883737f91245c8c4d37f913c
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Wed, 9 Nov 2016 16:32:52 +0100
Add accessors for sun direction and DNI.
Diffstat:
3 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/src/ssol.h b/src/ssol.h
@@ -567,10 +567,20 @@ ssol_sun_set_direction
const double direction[3]);
SSOL_API res_T
+ssol_sun_get_direction
+ (const struct ssol_sun* sun,
+ double direction[3]);
+
+SSOL_API res_T
ssol_sun_set_dni
(struct ssol_sun* sun,
const double dni);
+SSOL_API res_T
+ssol_sun_get_dni
+ (const struct ssol_sun* sun,
+ double* dni);
+
/* List of per wavelength power of the sun */
SSOL_API res_T
ssol_sun_set_spectrum
diff --git a/src/ssol_sun.c b/src/ssol_sun.c
@@ -129,6 +129,15 @@ ssol_sun_set_direction(struct ssol_sun* sun, const double direction[3])
}
res_T
+ssol_sun_get_direction(const struct ssol_sun* sun, double direction[3])
+{
+ if (!sun || !direction)
+ return RES_BAD_ARG;
+ d3_set(direction, sun->direction);
+ return RES_OK;
+}
+
+res_T
ssol_sun_set_dni(struct ssol_sun* sun, const double dni)
{
if (!sun || dni <= 0)
@@ -138,6 +147,15 @@ ssol_sun_set_dni(struct ssol_sun* sun, const double dni)
}
res_T
+ssol_sun_get_dni(const struct ssol_sun* sun, double* dni)
+{
+ if (!sun || dni <= 0)
+ return RES_BAD_ARG;
+ *dni = sun->dni;
+ return RES_OK;
+}
+
+res_T
ssol_sun_set_spectrum(struct ssol_sun* sun, struct ssol_spectrum* spectrum)
{
if (!sun || !spectrum)
diff --git a/src/test_ssol_sun.c b/src/test_ssol_sun.c
@@ -17,6 +17,7 @@
#include "test_ssol_utils.h"
#include <rsys/logger.h>
+#include <rsys/double3.h>
int
main(int argc, char** argv)
@@ -29,6 +30,7 @@ main(int argc, char** argv)
struct ssol_sun* sun;
double dir0[3] = { 0, 0, 0 };
double dir[3] = { 1, 0, 0 };
+ double dni;
(void) argc, (void) argv;
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
@@ -65,11 +67,21 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
+ CHECK(ssol_sun_get_direction(NULL, dir0), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, dir0), RES_OK);
+ CHECK(d3_eq(dir, dir0), 1);
+
CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
+ CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, &dni), RES_OK);
+ CHECK(dni, 1000);
+
CHECK(ssol_sun_set_pillbox_aperture(NULL, 0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, -0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, 999), RES_BAD_ARG);
@@ -104,11 +116,21 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
+ CHECK(ssol_sun_get_direction(NULL, dir0), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, dir0), RES_OK);
+ CHECK(d3_eq(dir, dir0), 1);
+
CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
+ CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, &dni), RES_OK);
+ CHECK(dni, 1000);
+
CHECK(ssol_sun_set_pillbox_aperture(NULL, 0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, -0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, 999), RES_BAD_ARG);
@@ -143,11 +165,21 @@ main(int argc, char** argv)
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
CHECK(ssol_sun_set_direction(sun, dir), RES_OK);
+ CHECK(ssol_sun_get_direction(NULL, dir0), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_direction(sun, dir0), RES_OK);
+ CHECK(d3_eq(dir, dir0), 1);
+
CHECK(ssol_sun_set_dni(NULL, 1000), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 0), RES_BAD_ARG);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
CHECK(ssol_sun_set_dni(sun, 1000), RES_OK);
+ CHECK(ssol_sun_get_dni(NULL, &dni), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, NULL), RES_BAD_ARG);
+ CHECK(ssol_sun_get_dni(sun, &dni), RES_OK);
+ CHECK(dni, 1000);
+
CHECK(ssol_sun_set_pillbox_aperture(NULL, 0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, -0.1), RES_BAD_ARG);
CHECK(ssol_sun_set_pillbox_aperture(sun, 999), RES_BAD_ARG);