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:
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