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 5c6bd66c4a17699b1a99a76722262791cb992182
parent 6a827eb234e440647b70fe00d7fbdc74c8a8cbe6
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 13 Mar 2017 17:11:46 +0100

Change receiver output formatting; add integrated absorbed irradiance.

Diffstat:
Msrc/solstice_solve.c | 13+++++++++----
Msrc/test_solstice_simulation.c | 78++++++++++++++++++++++++++++++++++++++++++------------------------------------
Myaml/beam_down.ref | 8++++----
Myaml/test01.ref | 2+-
Myaml/test02.ref | 2+-
Myaml/test03.ref | 2+-
Myaml/test04.ref | 3+--
Myaml/test05.ref | 2+-
8 files changed, 60 insertions(+), 50 deletions(-)

diff --git a/src/solstice_solve.c b/src/solstice_solve.c @@ -93,15 +93,20 @@ write_global_mc(struct solstice* solstice, struct ssol_estimator* estimator) } SSOL(instance_get_id(inst, &id)); fprintf(solstice->output, - "%s %u %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g\n", + "%s %u " + "FRONT: %g %g %g %g %g %g %g %g %g %g " + "BACK: %g %g %g %g %g %g %g %g %g %g\n", str_cget(name), (unsigned) id, + front.integrated_absorbed_irradiance.E, front.integrated_absorbed_irradiance.SE, front.integrated_irradiance.E, front.integrated_irradiance.SE, - back.integrated_irradiance.E, back.integrated_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, + f_eff_E, f_eff_SE, + back.integrated_absorbed_irradiance.E, back.integrated_absorbed_irradiance.SE, + back.integrated_irradiance.E, back.integrated_irradiance.SE, + back.reflectivity_loss.E, back.reflectivity_loss.SE, back.absorptivity_loss.E, back.absorptivity_loss.SE, - f_eff_E, f_eff_SE, b_eff_E, b_eff_SE); + b_eff_E, b_eff_SE); } } diff --git a/src/test_solstice_simulation.c b/src/test_solstice_simulation.c @@ -138,13 +138,15 @@ enum side { }; enum result_type { + FRONT_INTEGRATED_ABSORBED_IRRADIANCE, FRONT_INTEGRATED_IRRADIANCE, - BACK_INTEGRATED_IRRADIANCE, FRONT_REFLECTIVITY_LOSS, - BACK_REFLECTIVITY_LOSS, FRONT_ABSORPTIVITY_LOSS, - BACK_ABSORPTIVITY_LOSS, FRONT_EFFICIENCY, + BACK_INTEGRATED_ABSORBED_IRRADIANCE, + BACK_INTEGRATED_IRRADIANCE, + BACK_REFLECTIVITY_LOSS, + BACK_ABSORPTIVITY_LOSS, BACK_EFFICIENCY, MAX_RESULTS_COUNT__ }; @@ -204,15 +206,19 @@ read_recv(const char* line, char name[], double E[], double SE[]) NCHECK(SE, NULL); n = sscanf(line, - "%s%*u%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg%lg", + "%s %*lu " + "FRONT: %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg " + " BACK: %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg", name, + &E[FRONT_INTEGRATED_ABSORBED_IRRADIANCE], &SE[FRONT_INTEGRATED_ABSORBED_IRRADIANCE], &E[FRONT_INTEGRATED_IRRADIANCE], &SE[FRONT_INTEGRATED_IRRADIANCE], - &E[BACK_INTEGRATED_IRRADIANCE], &SE[BACK_INTEGRATED_IRRADIANCE], &E[FRONT_REFLECTIVITY_LOSS], &SE[FRONT_REFLECTIVITY_LOSS], - &E[BACK_REFLECTIVITY_LOSS], &SE[BACK_REFLECTIVITY_LOSS], &E[FRONT_ABSORPTIVITY_LOSS], &SE[FRONT_ABSORPTIVITY_LOSS], - &E[BACK_ABSORPTIVITY_LOSS], &SE[BACK_ABSORPTIVITY_LOSS], &E[FRONT_EFFICIENCY], &SE[FRONT_EFFICIENCY], + &E[BACK_INTEGRATED_ABSORBED_IRRADIANCE], &SE[BACK_INTEGRATED_ABSORBED_IRRADIANCE], + &E[BACK_INTEGRATED_IRRADIANCE], &SE[BACK_INTEGRATED_IRRADIANCE], + &E[BACK_REFLECTIVITY_LOSS], &SE[BACK_REFLECTIVITY_LOSS], + &E[BACK_ABSORPTIVITY_LOSS], &SE[BACK_ABSORPTIVITY_LOSS], &E[BACK_EFFICIENCY], &SE[BACK_EFFICIENCY]); CHECK(n, 2*MAX_RESULTS_COUNT__+1); @@ -246,7 +252,7 @@ is_compatible_with static void check_1_receiver - (FILE* tested_file, + (FILE* test_file, const char* rcv_name, const double* reference_E, const double* reference_SE) @@ -255,33 +261,33 @@ check_1_receiver unsigned long c1, c2; int found = 0; - NCHECK(tested_file, NULL); + NCHECK(test_file, NULL); NCHECK(rcv_name, NULL); NCHECK(reference_E, NULL); NCHECK(reference_SE, NULL); - get_angles_and_counts(tested_file, a, &c1, &c2); /* Skip headers */ + get_angles_and_counts(test_file, a, &c1, &c2); /* Skip headers */ - while(!feof(tested_file) && !found) { + while(!feof(test_file) && !found) { char line[MAX_LINE_LEN]; - char tested_rcv_name[MAX_LINE_LEN]; - double tested_E[MAX_RESULTS_COUNT__], tested_SE[MAX_RESULTS_COUNT__]; + char test_rcv_name[MAX_LINE_LEN]; + double test_E[MAX_RESULTS_COUNT__], test_SE[MAX_RESULTS_COUNT__]; double v, s; size_t nb; enum result_type r; - CHECK(read_line(line, sizeof(line), tested_file), 1); + CHECK(read_line(line, sizeof(line), test_file), 1); - nb = sscanf(line, "%lg %lg # %s", &v, &s, tested_rcv_name); + nb = sscanf(line, "%lg %lg # %s", &v, &s, test_rcv_name); CHECK(nb == 0 || nb == 3, 1); if(nb == 3) continue; /* skip global */ - read_recv(line, tested_rcv_name, tested_E, tested_SE); - if(strcmp(rcv_name, tested_rcv_name)) continue; + read_recv(line, test_rcv_name, test_E, test_SE); + if(strcmp(rcv_name, test_rcv_name)) continue; FOR_EACH(r, FRONT_INTEGRATED_IRRADIANCE, MAX_RESULTS_COUNT__) { CHECK(is_compatible_with - (reference_E[r], reference_SE[r], tested_E[r], tested_SE[r]), 1); + (reference_E[r], reference_SE[r], test_E[r], test_SE[r]), 1); } found = 1; } @@ -290,37 +296,37 @@ check_1_receiver static void check_1_global - (FILE* tested_file, + (FILE* test_file, const double reference_E, const double reference_SE, const char* ref_name) { - char line[MAX_LINE_LEN], tested_name[MAX_LINE_LEN]; + char line[MAX_LINE_LEN], test_name[MAX_LINE_LEN]; double a[2]; unsigned long r1, r2; int nb; - double tested_E, tested_SE; + double test_E, test_SE; - get_angles_and_counts(tested_file, a, &r1, &r2); + get_angles_and_counts(test_file, a, &r1, &r2); do { - CHECK(read_line(line, sizeof(line), tested_file), 1); - nb = sscanf(line, "%lg %lg # %s", &tested_E, &tested_SE, tested_name); - } while (nb != 3 || strcmp(ref_name, tested_name)); + CHECK(read_line(line, sizeof(line), test_file), 1); + nb = sscanf(line, "%lg %lg # %s", &test_E, &test_SE, test_name); + } while (nb != 3 || strcmp(ref_name, test_name)); - CHECK(strcmp(ref_name, tested_name), 0); - CHECK(is_compatible_with(reference_E, reference_SE, tested_E, tested_SE), 1); + CHECK(strcmp(ref_name, test_name), 0); + CHECK(is_compatible_with(reference_E, reference_SE, test_E, test_SE), 1); } static void -check_references(FILE* ref_file, FILE* tested_file) +check_references(FILE* ref_file, FILE* test_file) { char line[MAX_LINE_LEN], g_name[MAX_LINE_LEN]; unsigned nb_global = 0; fpos_t pos; NCHECK(ref_file, NULL); - NCHECK(tested_file, NULL); + NCHECK(test_file, NULL); CHECK(fgetpos(ref_file, &pos), 0); while(read_line(line, sizeof(line), ref_file)) { @@ -336,16 +342,16 @@ check_references(FILE* ref_file, FILE* tested_file) nb = sscanf(line, "%lg %lg # %s", &val, &std, g_name); CHECK(nb == 0 || nb == 3, 1); - rewind(tested_file); + rewind(test_file); if(nb != 0) { - check_1_global(tested_file, val, std, g_name); + check_1_global(test_file, val, std, g_name); nb_global++; } else { char ref_name[MAX_LINE_LEN]; double reference_E[MAX_RESULTS_COUNT__]; double reference_SE[MAX_RESULTS_COUNT__]; read_recv(line, ref_name, reference_E, reference_SE); - check_1_receiver(tested_file, ref_name, reference_E, reference_SE); + check_1_receiver(test_file, ref_name, reference_E, reference_SE); } CHECK(fgetpos(ref_file, &pos), 0); @@ -382,20 +388,20 @@ do_check(const char* binary, const char* dir, const char* base_name) while(!feof(ref_file)) { char cmd[512]; - char tested_file_name[128]; + char test_file_name[128]; double sun_angles[2]; FILE* fp = NULL; int fd = -1; get_angles_and_counts(ref_file, sun_angles, &c1, &realisation_count); - fd = create_tmp_file(tested_file_name, sizeof(tested_file_name)); + fd = create_tmp_file(test_file_name, sizeof(test_file_name)); fp = fdopen(fd, "r"); NCHECK(fp, NULL); n = snprintf(cmd, sizeof(cmd), "%s -o %s -f -D %g,%g -n %lu -R %s%s_receiver.yaml %s%s.yaml", - binary, tested_file_name, SPLIT2(sun_angles), realisation_count, + binary, test_file_name, SPLIT2(sun_angles), realisation_count, dir, base_name, dir, base_name); CHECK((unsigned)n < sizeof(cmd), 1); @@ -404,7 +410,7 @@ do_check(const char* binary, const char* dir, const char* base_name) check_references(ref_file, fp); fclose(fp); - remove(tested_file_name); + remove(test_file_name); } } diff --git a/yaml/beam_down.ref b/yaml/beam_down.ref @@ -3,12 +3,12 @@ 0 0 # Shadowing 0 0 # Missing 0.92387953251128675612818318939679 0.1 # Cos -tower.secondary.hyperbol 10 465.464 0.00509812 0 0 0 0 0 0 0 0 0 0 0.930847 1.01954e-05 0 0 -tower.receptor 14 465.464 0.00509812 -1 -1 0 0 -1 -1 0 0 -1 -1 0.930847 1.01954e-05 -1 -1 +tower.secondary.hyperbol 10 FRONT: 465.464 0.00509812 465.464 0.00509812 0 0 0 0 0.930847 1.01954e-05 BACK: 0 0 0 0 0 0 0 0 0 0 +tower.receptor 14 FRONT: 465.464 0.00509812 465.464 0.00509812 0 0 0 0 0.930847 1.01954e-05 BACK: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 #--- Sun direction: 50 50 (-0.413176 -0.492404 -0.766044) 2 10000 0 0 # Shadowing 0 0 # Missing 0.8 0.1 # Cos -tower.secondary.hyperbol 10 400.231 0.107226 0 0 0 0 0 0 0 0 0 0 0.800393 0.000214433 0 0 -tower.receptor 14 136.51 1.90718 -1 -1 0 0 -1 -1 0 0 -1 -1 0.272997 0.00381404 -1 -1 +tower.secondary.hyperbol 10 FRONT: 400.231 0.107226 400.231 0.107226 0 0 0 0 0.800393 0.000214433 BACK: 0 0 0 0 0 0 0 0 0 0 +tower.receptor 14 FRONT: 136.51 1.90718 136.51 1.90718 0 0 0 0 0.272997 0.00381404 BACK: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 diff --git a/yaml/test01.ref b/yaml/test01.ref @@ -3,4 +3,4 @@ 0 0 # Shadowing 0 0 # Missing 1 0 # Cos -square_receiver 2 -1 -1 1 0 -1 -1 0 0 -1 -1 0 0 -1 -1 1 0 +square_receiver 2 FRONT: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 BACK: 0 0 1 0 0 0 0 0 1 0 diff --git a/yaml/test02.ref b/yaml/test02.ref @@ -3,4 +3,4 @@ 0 0 # Shadowing 99 0.0313065 # Missing 1 0 # Cos -square_receiver 2 -1 -1 1 0.0313065 -1 -1 0 0 -1 -1 0 0 -1 -1 0.01003 0.000315109 +square_receiver 2 FRONT: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 BACK: 0 0 1 0.0313065 0 0 0 0 0.01003 0.000315109 diff --git a/yaml/test03.ref b/yaml/test03.ref @@ -3,4 +3,4 @@ 0 0 # Shadowing 0 0 # Missing 0.707107 0 # Cos -square_receiver 2 -1 -1 0.707107 0 -1 -1 0 0 -1 -1 0 0 -1 -1 0.707107 0 +square_receiver 2 FRONT: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 BACK: 0 0 0.707107 0 0 0 0 0 0.707107 0 diff --git a/yaml/test04.ref b/yaml/test04.ref @@ -3,4 +3,4 @@ 0 0 # Shadowing 0 0 # Missing 0.707107 0 # Cos -square_receiver 2 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 -\ No newline at end of file +square_receiver 2 FRONT: 0 0 0 0 0 0 0 0 0 0 BACK: 0 0 0.707107 0 0 0 0 0 0.707107 0 diff --git a/yaml/test05.ref b/yaml/test05.ref @@ -3,4 +3,4 @@ 0 0 # Shadowing 0 0 # Missing 1 0 # Cos -spherical_receiver 2 -1 -1 1 0 -1 -1 0 0 -1 -1 0 0 -1 -1 1 0 +spherical_receiver 2 FRONT: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 BACK: 0 0 1 0 0 0 0 0 1 0