solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

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:
Msrc/ssol.h | 10++++++++++
Msrc/ssol_sun.c | 18++++++++++++++++++
Msrc/test_ssol_sun.c | 32++++++++++++++++++++++++++++++++
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);