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 00b0bcc0ce7b62086bba0817fa8201f7a0389a59
parent 5f9382debeff5c870d027d1d733d5c64b9bb8de5
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  7 Feb 2018 12:31:17 +0100

Reorder the per receiver results

Per receiver output are ordered according to the receivers order
as defined in the receiver file.

Diffstat:
Msrc/solstice.c | 31++++++++++++++++++++++---------
Msrc/solstice.h | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/solstice_entity.c | 12+++++++++---
Msrc/solstice_solve.c | 69++++++++++++++++++++++++++++++---------------------------------------
Myaml/beam_down.ref | 24++++++++++++------------
5 files changed, 151 insertions(+), 71 deletions(-)

diff --git a/src/solstice.c b/src/solstice.c @@ -429,18 +429,28 @@ error: static res_T setup_receivers(struct solstice* solstice, struct srcvl* srcvl) { - struct solstice_receiver receiver; - struct str name; size_t i, n; res_T res = RES_OK; ASSERT(solstice && srcvl); - str_init(solstice->allocator, &name); + htable_receiver_clear(&solstice->receivers); + darray_receiver_clear(&solstice->rcvs_list); n = srcvl_count(srcvl); + + res = darray_receiver_resize(&solstice->rcvs_list, n); + if(res != RES_OK) { + fprintf(stderr, "Could not reserve memory space for the receivers.\n"); + goto error; + } + FOR_EACH(i, 0, n) { + struct solstice_receiver* receiver; struct srcvl_receiver rcv; const struct solparser_entity* entity; + const char* name; + + receiver = darray_receiver_data_get(&solstice->rcvs_list) + i; srcvl_get(srcvl, i, &rcv); entity = solparser_find_entity(solstice->parser, rcv.name); @@ -458,17 +468,18 @@ setup_receivers(struct solstice* solstice, struct srcvl* srcvl) goto error; } - res = str_set(&name, rcv.name); + res = str_set(&receiver->name, rcv.name); if(res != RES_OK) { fprintf(stderr, "Could not copy the receiver name.\n"); goto error; } - receiver.node = NULL; - receiver.side = rcv.side; - receiver.per_primitive = rcv.per_primitive; + receiver->node = NULL; + receiver->side = rcv.side; + receiver->per_primitive = rcv.per_primitive; - res = htable_receiver_set(&solstice->receivers, &name, &receiver); + name = str_cget(&receiver->name); + res = htable_receiver_set(&solstice->receivers, &name, &i); if(res != RES_OK) { fprintf(stderr, "Could not register the receiver `%s' against Solstice.\n", @@ -478,10 +489,10 @@ setup_receivers(struct solstice* solstice, struct srcvl* srcvl) } exit: - str_release(&name); return res; error: htable_receiver_clear(&solstice->receivers); + darray_receiver_clear(&solstice->rcvs_list); goto exit; } @@ -588,6 +599,7 @@ solstice_init htable_primary_init(allocator, &solstice->primaries); darray_nodes_init(allocator, &solstice->roots); darray_nodes_init(allocator, &solstice->pivots); + darray_receiver_init(allocator, &solstice->rcvs_list); darray_double_init(allocator, &solstice->sun_dirs); darray_double_init(allocator, &solstice->sun_angles); @@ -710,6 +722,7 @@ solstice_release(struct solstice* solstice) htable_primary_release(&solstice->primaries); darray_nodes_release(&solstice->roots); darray_nodes_release(&solstice->pivots); + darray_receiver_release(&solstice->rcvs_list); darray_double_release(&solstice->sun_dirs); darray_double_release(&solstice->sun_angles); logger_release(&solstice->logger); diff --git a/src/solstice.h b/src/solstice.h @@ -34,11 +34,74 @@ struct ssol_object; struct sanim_node; struct solstice_receiver { + struct str name; struct solstice_node* node; enum srcvl_side side; int per_primitive; }; +static INLINE void +solstice_receiver_init + (struct mem_allocator* allocator, struct solstice_receiver* rcv) +{ + ASSERT(rcv); + str_init(allocator, &rcv->name); + rcv->node = NULL; + rcv->side = SRCVL_FRONT_AND_BACK; + rcv->per_primitive = 0; +} + +static INLINE void +solstice_receiver_release(struct solstice_receiver* rcv) +{ + ASSERT(rcv); + str_release(&rcv->name); +} + +static INLINE res_T +solstice_receiver_copy + (struct solstice_receiver* dst, + const struct solstice_receiver* src) +{ + ASSERT(dst && src); + dst->node = src->node; + dst->side = src->side; + dst->per_primitive = src->per_primitive; + return str_copy(&dst->name, &src->name); +} + +static INLINE res_T +solstice_receiver_copy_and_release + (struct solstice_receiver* dst, + struct solstice_receiver* src) +{ + res_T res = RES_OK; + ASSERT(dst && src); + dst->node = src->node; + dst->side = src->side; + dst->per_primitive = src->per_primitive; + res = str_copy_and_release(&dst->name, &src->name); + if(res != RES_OK) return res; + solstice_receiver_release(src); + return RES_OK; +} + +static INLINE size_t +cstr_hash(const char* const* key) +{ + const char* str; + ASSERT(key); + str = *key; + return hash_fnv64(str, strlen(str)); +} + +static INLINE char +cstr_eq(const char* const* a, const char* const* b) +{ + ASSERT(a && b); + return strcmp(*a, *b) == 0; +} + struct solstice_primary { struct solstice_node* node; }; @@ -63,15 +126,19 @@ struct solstice_primary { #define HTABLE_DATA struct solstice_node* #include <rsys/hash_table.h> +#define DARRAY_NAME receiver +#define DARRAY_DATA struct solstice_receiver +#define DARRAY_FUNCTOR_INIT solstice_receiver_init +#define DARRAY_FUNCTOR_RELEASE solstice_receiver_release +#define DARRAY_FUNCTOR_COPY solstice_receiver_copy +#define DARRAY_FUNCTOR_COPY_AND_RELEASE solstice_receiver_copy_and_release +#include <rsys/dynamic_array.h> + #define HTABLE_NAME receiver -#define HTABLE_KEY struct str -#define HTABLE_KEY_FUNCTOR_INIT str_init -#define HTABLE_KEY_FUNCTOR_RELEASE str_release -#define HTABLE_KEY_FUNCTOR_COPY str_copy -#define HTABLE_KEY_FUNCTOR_COPY_AND_RELEASE str_copy_and_release -#define HTABLE_KEY_FUNCTOR_EQ str_eq -#define HTABLE_KEY_FUNCTOR_HASH str_hash -#define HTABLE_DATA struct solstice_receiver +#define HTABLE_KEY const char* /* Pointer toward the name of the receiver */ +#define HTABLE_KEY_FUNCTOR_HASH cstr_hash +#define HTABLE_KEY_FUNCTOR_EQ cstr_eq +#define HTABLE_DATA size_t /* Index of the receiver */ #include <rsys/hash_table.h> #define HTABLE_NAME primary @@ -102,6 +169,9 @@ struct solstice { struct darray_nodes pivots; struct ssol_material* mtl_virtual; /* Shared virtual material */ + /* List of receivers ordered as submitted by the receiver file */ + struct darray_receiver rcvs_list; + /* Rendering */ struct ssol_camera* camera; struct ssol_image* framebuffer; diff --git a/src/solstice_entity.c b/src/solstice_entity.c @@ -290,6 +290,8 @@ create_node struct solstice_node* node = NULL; struct solstice_node* child = NULL; struct solstice_receiver* rcv = NULL; + const char* str = NULL; + size_t* pircv = NULL; struct str child_name; struct str anchor_name; double rotation[3]; @@ -349,11 +351,15 @@ create_node } /* Setup the entity receiver flags */ - rcv = htable_receiver_find(&solstice->receivers, name); - if(rcv) { - const int mask = srcvl_side_to_ssol_mask(rcv->side); + str = str_cget(name); + pircv = htable_receiver_find(&solstice->receivers, &str); + if(pircv) { + int mask; + rcv = darray_receiver_data_get(&solstice->rcvs_list) + *pircv; ASSERT(rcv->node == NULL); /* Receiver is not attached to a node */ + mask = srcvl_side_to_ssol_mask(rcv->side); + res = solstice_node_geometry_set_receiver(node, mask, rcv->per_primitive); if(res != RES_OK) { fprintf(stderr, "Could not define the entity `%s' as a receiver.\n", diff --git a/src/solstice_solve.c b/src/solstice_solve.c @@ -31,10 +31,10 @@ static void write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) { struct ssol_mc_global mc_global; - struct htable_receiver_iterator r_it, r_end; struct htable_primary_iterator p_it, p_end; const struct solparser_sun* solparser_sun = NULL; size_t nexperiments, nfailed, nprimary; + size_t ircv; double area, potential, irradiance_factor; ASSERT(solstice && estimator); @@ -51,7 +51,7 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) /* Counts */ fprintf(solstice->output, "%d %lu %lu %lu %lu\n", 7, /* #global results count */ - (unsigned long)htable_receiver_size_get(&solstice->receivers), + (unsigned long)darray_receiver_size_get(&solstice->rcvs_list), (unsigned long)nprimary, (unsigned long)nexperiments, (unsigned long)nfailed); @@ -69,11 +69,9 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) #undef PRINT_MC_GLOBAL /* Receivers' data */ - htable_receiver_begin(&solstice->receivers, &r_it); - htable_receiver_end(&solstice->receivers, &r_end); - while(!htable_receiver_iterator_eq(&r_it, &r_end)) { - const struct str* name = htable_receiver_iterator_key_get(&r_it); - struct solstice_receiver* rcv = htable_receiver_iterator_data_get(&r_it); + FOR_EACH(ircv, 0, darray_receiver_size_get(&solstice->rcvs_list)) { + struct solstice_receiver* rcv = darray_receiver_data_get + (&solstice->rcvs_list) + ircv; struct ssol_instance* inst = rcv->node->instance; struct ssol_mc_receiver front = MC_RCV_NONE__; struct ssol_mc_receiver back = MC_RCV_NONE__; @@ -81,7 +79,6 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) double b_eff_E = -1, b_eff_SE = -1; /* Back efficiency */ uint32_t id; - htable_receiver_iterator_next(&r_it); switch(rcv->side) { case SRCVL_FRONT: SSOL(estimator_get_mc_receiver(estimator, inst, SSOL_FRONT, &front)); @@ -111,7 +108,7 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) "%g %g %g %g %g %g %g %g %g %g " "%g %g %g %g %g %g %g %g %g %g %g %g " "%g %g %g %g %g %g %g %g %g %g\n", - str_cget(name), (unsigned)id, area, + str_cget(&rcv->name), (unsigned)id, area, front.incoming_flux.E, front.incoming_flux.SE, front.incoming_if_no_field_loss.E, front.incoming_if_no_field_loss.SE, front.incoming_if_no_atm_loss.E, front.incoming_if_no_atm_loss.SE, @@ -159,10 +156,9 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) } /* ReceiverXprimarys' data */ - htable_receiver_begin(&solstice->receivers, &r_it); - htable_receiver_end(&solstice->receivers, &r_end); - while (!htable_receiver_iterator_eq(&r_it, &r_end)) { - struct solstice_receiver* rcv = htable_receiver_iterator_data_get(&r_it); + FOR_EACH(ircv, 0, darray_receiver_size_get(&solstice->rcvs_list)) { + struct solstice_receiver* rcv = darray_receiver_data_get + (&solstice->rcvs_list) + ircv; struct ssol_instance* rcv_inst = rcv->node->instance; uint32_t rcv_id, prim_id; @@ -177,21 +173,21 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) SSOL(instance_get_id(prim_inst, &prim_id)); switch (rcv->side) { - case SRCVL_FRONT: - SSOL(estimator_get_mc_sampled_x_receiver - (estimator, prim_inst, rcv_inst, SSOL_FRONT, &front)); - break; - case SRCVL_BACK: - SSOL(estimator_get_mc_sampled_x_receiver - (estimator, prim_inst, rcv_inst, SSOL_BACK, &back)); - break; - case SRCVL_FRONT_AND_BACK: - SSOL(estimator_get_mc_sampled_x_receiver - (estimator, prim_inst, rcv_inst, SSOL_FRONT, &front)); - SSOL(estimator_get_mc_sampled_x_receiver - (estimator, prim_inst, rcv_inst, SSOL_BACK, &back)); - break; - default: FATAL("Unreachable code.\n"); break; + case SRCVL_FRONT: + SSOL(estimator_get_mc_sampled_x_receiver + (estimator, prim_inst, rcv_inst, SSOL_FRONT, &front)); + break; + case SRCVL_BACK: + SSOL(estimator_get_mc_sampled_x_receiver + (estimator, prim_inst, rcv_inst, SSOL_BACK, &back)); + break; + case SRCVL_FRONT_AND_BACK: + SSOL(estimator_get_mc_sampled_x_receiver + (estimator, prim_inst, rcv_inst, SSOL_FRONT, &front)); + SSOL(estimator_get_mc_sampled_x_receiver + (estimator, prim_inst, rcv_inst, SSOL_BACK, &back)); + break; + default: FATAL("Unreachable code.\n"); break; } fprintf(solstice->output, "%u %u " @@ -199,7 +195,7 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) "%g %g %g %g %g %g %g %g " "%g %g %g %g %g %g %g %g %g %g %g %g " "%g %g %g %g %g %g %g %g\n", - (unsigned) rcv_id, (unsigned) prim_id, + (unsigned)rcv_id, (unsigned) prim_id, front.incoming_flux.E, front.incoming_flux.SE, front.incoming_if_no_field_loss.E, front.incoming_if_no_field_loss.SE, front.incoming_if_no_atm_loss.E, front.incoming_if_no_atm_loss.SE, @@ -222,7 +218,6 @@ write_mc_global(struct solstice* solstice, struct ssol_estimator* estimator) back.absorbed_lost_in_atmosphere.E, back.absorbed_lost_in_atmosphere.SE); htable_primary_iterator_next(&p_it); } - htable_receiver_iterator_next(&r_it); } } @@ -319,23 +314,19 @@ static void write_per_receiver_mc_primitive (struct solstice* solstice, struct ssol_estimator* estimator) { - struct htable_receiver_iterator it, end; + size_t ircv; ASSERT(solstice && estimator); - htable_receiver_begin(&solstice->receivers, &it); - htable_receiver_end(&solstice->receivers, &end); - while(!htable_receiver_iterator_eq(&it, &end)) { + FOR_EACH(ircv, 0, darray_receiver_size_get(&solstice->rcvs_list)) { struct ssol_instantiated_shaded_shape inst_sshape; - const struct str* name = htable_receiver_iterator_key_get(&it); - struct solstice_receiver* rcv = htable_receiver_iterator_data_get(&it); + struct solstice_receiver* rcv = darray_receiver_data_get + (&solstice->rcvs_list) + ircv; struct ssol_instance* inst = rcv->node->instance; size_t ishape, nshapes; size_t nverts, ntris; size_t offset; int mask, prim; - htable_receiver_iterator_next(&it); - SSOL(instance_is_receiver(inst, &mask, &prim)); CHK(mask != 0); if(!prim) continue; @@ -344,7 +335,7 @@ write_per_receiver_mc_primitive /* Write the header */ fprintf(solstice->output, "# vtk DataFile Version 2.0\n"); - fprintf(solstice->output, "%s\n", str_cget(name)); + fprintf(solstice->output, "%s\n", str_cget(&rcv->name)); fprintf(solstice->output, "ASCII\n"); fprintf(solstice->output, "DATASET POLYDATA\n"); diff --git a/yaml/beam_down.ref b/yaml/beam_down.ref @@ -7,23 +7,23 @@ 0 0 0 0 0 0 -tower.secondary.hyperbol 10 421.957 465.484 0.0183212 465.484 0.0183212 465.484 0.0183212 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 tower.receptor 14 25 465.484 0.0183212 465.484 0.0183212 465.484 0.0183212 0 0 0 0 465.484 0.0183212 465.484 0.0183212 465.484 0.0183212 0 0 0 0 0.930888 3.66392e-05 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +tower.secondary.hyperbol 10 421.957 465.484 0.0183212 465.484 0.0183212 465.484 0.0183212 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 heliostat4.temp-heliostat150.pivot.reflector 6 100.009 1999 0.931645 7.76782e-05 0 0 heliostat5.temp-heliostat150.pivot.reflector 30 100.009 1986 0.929678 7.95031e-05 0 0 heliostat3.temp-heliostat150.pivot.reflector 22 100.009 1997 0.931827 7.8194e-05 0 0 heliostat2.temp-heliostat150.pivot.reflector 26 100.009 1994 0.931626 7.95559e-05 0 0 heliostat1.temp-heliostat150.pivot.reflector 34 100.009 2024 0.929675 7.9316e-05 0 0 -10 6 93.126 1.86312 93.126 1.86312 93.126 1.86312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 30 92.325 1.85463 92.325 1.85463 92.325 1.85463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 22 93.051 1.86278 93.051 1.86278 93.051 1.86278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 26 92.8912 1.86133 92.8912 1.86133 92.8912 1.86133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 34 94.0913 1.86784 94.0913 1.86784 94.0913 1.86784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 6 93.126 1.86312 93.126 1.86312 93.126 1.86312 0 0 0 0 93.126 1.86312 93.126 1.86312 93.126 1.86312 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 30 92.325 1.85463 92.325 1.85463 92.325 1.85463 0 0 0 0 92.325 1.85463 92.325 1.85463 92.325 1.85463 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 22 93.051 1.86278 93.051 1.86278 93.051 1.86278 0 0 0 0 93.051 1.86278 93.051 1.86278 93.051 1.86278 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 26 92.8912 1.86133 92.8912 1.86133 92.8912 1.86133 0 0 0 0 92.8912 1.86133 92.8912 1.86133 92.8912 1.86133 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 34 94.0913 1.86784 94.0913 1.86784 94.0913 1.86784 0 0 0 0 94.0913 1.86784 94.0913 1.86784 94.0913 1.86784 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +10 6 93.126 1.86312 93.126 1.86312 93.126 1.86312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 30 92.325 1.85463 92.325 1.85463 92.325 1.85463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 22 93.051 1.86278 93.051 1.86278 93.051 1.86278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 26 92.8912 1.86133 92.8912 1.86133 92.8912 1.86133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 34 94.0913 1.86784 94.0913 1.86784 94.0913 1.86784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #--- Sun direction: 50 50 (-0.413176 -0.492404 -0.766044) 7 2 5 10000 0 500.043 0 @@ -33,20 +33,20 @@ heliostat1.temp-heliostat150.pivot.reflector 34 100.009 2024 0.929675 7.9316e- 244.012 1.94769 19.6535 0.85974 0 0 -tower.secondary.hyperbol 10 421.957 400.227 0.111144 400.227 0.111144 400.227 0.111144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 tower.receptor 14 25 136.561 1.90791 136.561 1.90791 136.561 1.90791 0 0 0 0 136.561 1.90791 136.561 1.90791 136.561 1.90791 0 0 0 0 0.273098 0.0038155 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +tower.secondary.hyperbol 10 421.957 400.227 0.111144 400.227 0.111144 400.227 0.111144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 heliostat4.temp-heliostat150.pivot.reflector 6 100.009 2045 0.785215 0.000131988 0 0 heliostat5.temp-heliostat150.pivot.reflector 30 100.009 1956 0.769715 0.000138356 0 0 heliostat3.temp-heliostat150.pivot.reflector 22 100.009 1948 0.799928 0.000131691 0 0 heliostat2.temp-heliostat150.pivot.reflector 26 100.009 2049 0.815877 0.000121947 0 0 heliostat1.temp-heliostat150.pivot.reflector 34 100.009 2002 0.830429 0.000118476 0 0 -10 6 80.2952 1.58372 80.2952 1.58372 80.2952 1.58372 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 30 75.2847 1.52678 75.2847 1.52678 75.2847 1.52678 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 22 77.9198 1.58423 77.9198 1.58423 77.9198 1.58423 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 26 83.5939 1.64675 83.5939 1.64675 83.5939 1.64675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10 34 83.1332 1.66167 83.1332 1.66167 83.1332 1.66167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 6 22.2344 0.907756 22.2344 0.907756 22.2344 0.907756 0 0 0 0 22.2344 0.907756 22.2344 0.907756 22.2344 0.907756 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 30 18.29 0.819036 18.29 0.819036 18.29 0.819036 0 0 0 0 18.29 0.819036 18.29 0.819036 18.29 0.819036 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 22 24.7238 0.963323 24.7238 0.963323 24.7238 0.963323 0 0 0 0 24.7238 0.963323 24.7238 0.963323 24.7238 0.963323 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 26 33.4259 1.11916 33.4259 1.11916 33.4259 1.11916 0 0 0 0 33.4259 1.11916 33.4259 1.11916 33.4259 1.11916 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14 34 37.8866 1.19599 37.8866 1.19599 37.8866 1.19599 0 0 0 0 37.8866 1.19599 37.8866 1.19599 37.8866 1.19599 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +10 6 80.2952 1.58372 80.2952 1.58372 80.2952 1.58372 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 30 75.2847 1.52678 75.2847 1.52678 75.2847 1.52678 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 22 77.9198 1.58423 77.9198 1.58423 77.9198 1.58423 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 26 83.5939 1.64675 83.5939 1.64675 83.5939 1.64675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +10 34 83.1332 1.66167 83.1332 1.66167 83.1332 1.66167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0