solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit f4fe1fb69f40123f84da80f072bc0d12d9f2c030
parent 484ab8de6e60b985350d2081ac9c06dc63675edb
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri, 10 Feb 2017 16:44:10 +0100

Add global efficiency per-receiver output.

Diffstat:
Msrc/solstice_solve.c | 32+++++++++++++++++++++++++-------
1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/solstice_solve.c b/src/solstice_solve.c @@ -15,6 +15,7 @@ #include "solstice.h" #include "solstice_c.h" +#include "parser/solparser_sun.h" #include <solstice/ssol.h> #include <star/ssp.h> @@ -26,10 +27,15 @@ write_global_mc(struct solstice* solstice, struct ssol_estimator* estimator) { struct ssol_estimator_status status; struct htable_receiver_iterator it, end; + const struct solparser_sun* solparser_sun = NULL; + double irradiance_factor; ASSERT(solstice && estimator); - /* get realization count */ + /* get global information */ SSOL(estimator_get_status(estimator, SSOL_STATUS_SHADOW, &status)); + SSOL(estimator_get_primary_area(estimator, &irradiance_factor)); + solparser_sun = solparser_get_sun(solstice->parser); + irradiance_factor = 1 / (solparser_sun->dni * irradiance_factor); fprintf(solstice->output, "%lu %lu %lu\n", (unsigned long)htable_receiver_size_get(&solstice->receivers), @@ -45,6 +51,7 @@ write_global_mc(struct solstice* solstice, struct ssol_estimator* estimator) struct ssol_estimator_status front; struct ssol_estimator_status back; uint32_t id; + double f_eff_E, f_eff_SE, b_eff_E, b_eff_SE; htable_receiver_iterator_next(&it); switch(rcv->side) { @@ -53,29 +60,40 @@ write_global_mc(struct solstice* solstice, struct ssol_estimator* estimator) back.irradiance.E = back.irradiance.SE = -1; back.reflectivity_loss.E = back.reflectivity_loss.SE = -1; back.absorptivity_loss.E = back.absorptivity_loss.SE = -1; + f_eff_E = front.irradiance.E * irradiance_factor; + f_eff_SE = front.irradiance.SE * irradiance_factor; + b_eff_E = b_eff_SE = -1; break; case SRCVL_BACK: SSOL(estimator_get_receiver_status(estimator, inst, SSOL_BACK, &back)); front.irradiance.E = front.irradiance.SE = -1; front.reflectivity_loss.E = front.reflectivity_loss.SE = -1; front.absorptivity_loss.E = front.absorptivity_loss.SE = -1; + f_eff_E = f_eff_SE = -1; + b_eff_E = back.irradiance.E * irradiance_factor; + b_eff_SE = back.irradiance.SE * irradiance_factor; break; case SRCVL_FRONT_AND_BACK: SSOL(estimator_get_receiver_status(estimator, inst, SSOL_FRONT, &front)); SSOL(estimator_get_receiver_status(estimator, inst, SSOL_BACK, &back)); + f_eff_E = front.irradiance.E * irradiance_factor; + f_eff_SE = front.irradiance.SE * irradiance_factor; + b_eff_E = back.irradiance.E * irradiance_factor; + b_eff_SE = back.irradiance.SE * irradiance_factor; break; default: FATAL("Unreachable code.\n"); break; } SSOL(instance_get_id(inst, &id)); - fprintf(solstice->output, "%s %u %g %g %g %g %g %g %g %g %g %g %g %g\n", - str_cget(name), (unsigned)id, - front.irradiance.E, front.irradiance.SE, + fprintf(solstice->output, "%s %u %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g\n", + str_cget(name), (unsigned) id, + front.irradiance.E, front.irradiance.SE, back.irradiance.E, back.irradiance.SE, front.reflectivity_loss.E, front.reflectivity_loss.SE, back.reflectivity_loss.E, back.reflectivity_loss.SE, - front.absorptivity_loss.E, front.absorptivity_loss.SE, - back.absorptivity_loss.E, back.absorptivity_loss.SE - ); + front.absorptivity_loss.E, front.absorptivity_loss.SE, + back.absorptivity_loss.E, back.absorptivity_loss.SE, + /* global efficiency */ + f_eff_E, f_eff_SE, b_eff_E, b_eff_SE); } SSOL(estimator_get_status(estimator, SSOL_STATUS_SHADOW, &status));