solstice-solver

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

commit 799de6b9a1db3fc84c915fd685bf246bce4b2a8d
parent c88b6bf5d17cafdbc5367c369358c8fb9c47c134
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri, 23 Sep 2016 16:20:14 +0200

Modify test solver #2: primary mirror is split in 2 halves

This test will be used as a base for test solver #2b.

Diffstat:
Msrc/test_ssol_solver2.c | 40+++++++++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/test_ssol_solver2.c b/src/test_ssol_solver2.c @@ -23,6 +23,11 @@ #define HALF_Y 1 #include "test_ssol_rect_geometry.h" +#define PLANE_NAME RECT +#define HALF_X 0.5 +#define HALF_Y 1 +#include "test_ssol_rect_geometry.h" + #define POLYGON_NAME POLY #define HALF_X 1 #define HALF_Y 1 @@ -47,6 +52,7 @@ main(int argc, char** argv) struct ssol_device* dev; struct ssp_rng* rng; struct ssol_scene* scene; + struct ssol_shape* rect; struct ssol_shape* square; struct ssol_vertex_data attribs[1]; struct ssol_shape* quad_square; @@ -59,7 +65,8 @@ main(int argc, char** argv) struct ssol_object* m_object; struct ssol_object* s_object; struct ssol_object* t_object; - struct ssol_instance* heliostat; + struct ssol_instance* heliostat1; + struct ssol_instance* heliostat2; struct ssol_instance* secondary; struct ssol_instance* target; struct ssol_sun* sun; @@ -69,6 +76,7 @@ main(int argc, char** argv) double intensities[3] = { 1, 0.8, 1 }; double transform1[12]; /* 3x4 column major matrix */ double transform2[12]; /* 3x4 column major matrix */ + double transform3[12]; /* 3x4 column major matrix */ FILE* tmp; double m, std; @@ -84,6 +92,9 @@ main(int argc, char** argv) d3_splat(transform2 + 9, 0); transform2[9] = 4; /* +4 offset along X axis */ + d33_set_identity(transform3); + d3_splat(transform3 + 9, 0); + mem_init_proxy_allocator(&allocator, &mem_default_allocator); CHECK(logger_init(&allocator, &logger), RES_OK); @@ -112,6 +123,12 @@ main(int argc, char** argv) CHECK(ssol_mesh_setup(square, SQUARE_NTRIS__, get_ids, SQUARE_NVERTS__, attribs, 1, (void*) &SQUARE_DESC__), RES_OK); + CHECK(ssol_shape_create_mesh(dev, &rect), RES_OK); + attribs[0].usage = SSOL_POSITION; + attribs[0].get = get_position; + CHECK(ssol_mesh_setup(rect, RECT_NTRIS__, get_ids, + RECT_NVERTS__, attribs, 1, (void*) &RECT_DESC__), RES_OK); + CHECK(ssol_shape_create_punched_surface(dev, &quad_square), RES_OK); carving.get = get_polygon_vertices; carving.operation = SSOL_AND; @@ -130,10 +147,17 @@ main(int argc, char** argv) CHECK(ssol_mirror_set_shader(m_mtl, &shader), RES_OK); CHECK(ssol_material_create_virtual(dev, &v_mtl), RES_OK); - CHECK(ssol_object_create(dev, square, m_mtl, m_mtl, &m_object), RES_OK); - CHECK(ssol_object_instantiate(m_object, &heliostat), RES_OK); - CHECK(ssol_instance_set_receiver(heliostat, "miroir", NULL), RES_OK); - CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); + CHECK(ssol_object_create(dev, rect, m_mtl, m_mtl, &m_object), RES_OK); + CHECK(ssol_object_instantiate(m_object, &heliostat1), RES_OK); + CHECK(ssol_object_instantiate(m_object, &heliostat2), RES_OK); + CHECK(ssol_instance_set_receiver(heliostat1, "miroir", NULL), RES_OK); + CHECK(ssol_instance_set_receiver(heliostat2, "miroir", NULL), RES_OK); + transform3[9] = -0.5; /* -0.5 offset along X axis */ + CHECK(ssol_instance_set_transform(heliostat1, transform3), RES_OK); + transform3[9] = +0.5; /* +0.5 offset along X axis */ + CHECK(ssol_instance_set_transform(heliostat2, transform3), RES_OK); + CHECK(ssol_scene_attach_instance(scene, heliostat1), RES_OK); + CHECK(ssol_scene_attach_instance(scene, heliostat2), RES_OK); CHECK(ssol_object_create(dev, quad_square, m_mtl, m_mtl, &s_object), RES_OK); CHECK(ssol_object_instantiate(s_object, &secondary), RES_OK); @@ -160,16 +184,18 @@ main(int argc, char** argv) #define DNI_cos (1000 * cos(PI / 4)) CHECK(eq_eps(m, 4 * DNI_cos, 4 * DNI_cos * 1e-4), 1); #define SQR(x) ((x)*(x)) - CHECK(eq_eps(std, sqrt((SQR(4 * DNI_cos) - SQR(4 * DNI_cos)) / N), 1e-4), 1); + CHECK(eq_eps(std, 0, 1e-4), 1); /* free data */ - CHECK(ssol_instance_ref_put(heliostat), RES_OK); + CHECK(ssol_instance_ref_put(heliostat1), RES_OK); + CHECK(ssol_instance_ref_put(heliostat2), RES_OK); CHECK(ssol_instance_ref_put(secondary), RES_OK); CHECK(ssol_instance_ref_put(target), RES_OK); CHECK(ssol_object_ref_put(m_object), RES_OK); CHECK(ssol_object_ref_put(s_object), RES_OK); CHECK(ssol_object_ref_put(t_object), RES_OK); CHECK(ssol_shape_ref_put(square), RES_OK); + CHECK(ssol_shape_ref_put(rect), RES_OK); CHECK(ssol_shape_ref_put(quad_square), RES_OK); CHECK(ssol_material_ref_put(m_mtl), RES_OK); CHECK(ssol_material_ref_put(v_mtl), RES_OK);