#ifndef Refine_H #define Refine_H /* Last edited on 2007-02-01 21:40:00 by stolfi */ /* Tools for refinement of tetrahedra. */ #include #include #include typedef struct ThreePlaces_t { Place_t p[3]; } ThreePlaces_t; vec_typedef(ThreePlaces_vec_t,ThreePlaces_vec,ThreePlaces_t); typedef struct Free { Place_vec_t *tetra; Place_vec_t *octah; } Free; typedef struct Side { Place_vec_t upper; Place_vec_t lower; } Side; typedef struct Corner { Place_vec_t right; Place_vec_t left; Place_vec_t front; Place_vec_t back; } Corner; typedef struct Pack { Side side; Corner corner; } Pack; Place_t MakeBaryTetra(uint order1, uint order2); /* Creates a subdivided tetrahedron, Initializes {self} hangs on the edge component from it a new unglued topological tetrahedron of the given order: {order1 x order2}. [!!! Removed from {Bary.h} !!!] */ Corner MakeTetra(uint order, bool_t net /* DF FALSE */); /* This procedure implements the order-refinement of a topological tetrahedra. See: Relatorio FAPESP numero 5, secao 4.1. The number of new tetrahedra can be compute by the following formula: T(order) == 5/3 order**{3} - 2/3 order, order>= 1. */ ThreePlaces_vec_t *MakeTriang(uint order); Pack MakeLevTe(uint order); Free MakeRowTe(uint order); ThreePlaces_vec_t *MakeRowTriang(uint order); Place_t MakeGluea(uint order); /* Realizes the gluing ca.right <----> cb.left */ Place_t MakeGlueb(uint order); /* Realizes the gluing ca.left <----> cb.right */ Place_t MakeGluec(uint order); /* Realizes the gluing ca.front <----> cb.back */ Place_t MakeGlued(uint order); /* Realizes the gluing ca.back <----> cb.front */ Place_vec_t *PlacesOnFrontier(Corner *co, uint cnum, uint order); #define Pov_H_copyright \ "Copyright © 2000 Universidade Estadual de Campinas (UNICAMP)" #define Pov_H_author \ "Created by L. P. Lozada, UNICAMP, 2000.\n" \ "Based on tools by R.M.Rosi and J.Stolfi, UNICAMP, 199???\n" \ " 2007-02-01 Moved {MakeMaximalGlue} to {Sphere.c} as {MakeSphere2Sub}" #endif