F5coordinates.h

00001 
00002 #ifndef __F5Bcoordinates_H
00003 #define __F5Bcoordinates_H
00004 
00005 #include <F5/F5types.h>
00006 #include <F5/F5Bchart.h>
00007 
00008 #include "F5WinDLLApi.h"
00009 
00010 #ifdef  __cplusplus
00011 extern "C"
00012 {
00013 #endif
00014 
00018 /************* 4D charts ************************/
00019 
00020 ChartDomain_IDs*F5B_new_global_cartesian_chart4D();
00021 ChartDomain_IDs*F5B_new_global_polar_chart4D();
00022 
00023 typedef struct  { F5_float_t   t,x,y,z; } F5_vec4f_t;
00024 typedef struct  { F5_double_t  t,x,y,z; } F5_vec4d_t;
00025 
00026 typedef struct  { F5_float_t   t,x,y,z; } F5_point4f_t;
00027 typedef struct  { F5_double_t  t,x,y,z; } F5_point4d_t;
00028 
00029 typedef struct  { F5_float_t t,r,phi,theta; } F5_point_polar4f_t;
00030 typedef struct  { F5_double_t t,r,phi,theta; } F5_point_double4f_t;
00031         
00032         
00037 typedef struct  { F5_float_t  gtt, gtx, gxx, gty, gxy, gyy, gtz, gxz, gyz, gzz; }  F5_metric4f_t;
00038 typedef struct  { F5_double_t  gtt, gtx, gxx, gty, gxy, gyy, gtz, gxz, gyz, gzz; } F5_metric4d_t;
00039 
00040 #define F5T_COORD4_FLOAT        F5B_standard_cartesian_chart4D()->SinglePrecision.Point_hid_t
00041 #define F5T_COORD4_DOUBLE       F5B_standard_cartesian_chart4D()->DoublePrecision.Point_hid_t
00042 #define F5T_VEC4_FLOAT          F5B_standard_cartesian_chart4D()->SinglePrecision.Vector_hid_t
00043 #define F5T_VEC4_DOUBLE         F5B_standard_cartesian_chart4D()->DoublePrecision.Vector_hid_t
00044 #define F5T_BIVEC4_FLOAT        F5B_standard_cartesian_chart4D()->SinglePrecision.Vector_hid_t
00045 #define F5T_BIVEC4_DOUBLE       F5B_standard_cartesian_chart4D()->DoublePrecision.Vector_hid_t
00046 #define F5T_METRIC44_FLOAT      F5B_standard_cartesian_chart4D()->SinglePrecision.Metric_hid_t
00047 #define F5T_METRIC44_DOUBLE     F5B_standard_cartesian_chart4D()->DoublePrecision.Metric_hid_t
00048 
00049 #define F5T_COORD4_POLAR_FLOAT  F5B_standard_polar_chart4D()->SinglePrecision.Point_hid_t
00050 #define F5T_COORD4_POLAR_DOUBLE F5B_standard_polar_chart4D()->DoublePrecision.Point_hid_t
00051         
00052 //#define       F5T_METRIC33_DOUBLE     F5B_standard_cartesian_chart3D()->DoublePrecision.Metric_hid_t
00053         
00054         
00055 /************* 3D charts ************************/
00056 
00057 typedef struct  { F5_float_t  x,y,z; } F5_vec3_float_t;
00058 typedef struct  { F5_float_t  x,y,z; } F5_vec3_point_t;
00059 
00060 typedef struct  { F5_double_t x,y,z; } F5_vec3_double_t;
00061         
00062 typedef F5_vec3_float_t F5_vec3f_t;
00063 typedef F5_vec3_point_t F5_point3f_t;
00064 
00065 
00066         
00071 typedef struct  { F5_float_t  gxx, gxy, gyy, gxz, gyz, gzz; } F5_metric3_float_t;
00072 typedef F5_metric3_float_t F5_metric3f_t;
00073         
00077 F5_API ChartDomain_IDs*F5B_new_global_cartesian_chart3D();
00078 
00084 F5_API ChartDomain_IDs*F5B_standard_cartesian_chart3D();
00085 
00086 #define F5T_COORD3_FLOAT        F5B_standard_cartesian_chart3D()->SinglePrecision.Point_hid_t
00087 #define F5T_VEC3_FLOAT          F5B_standard_cartesian_chart3D()->SinglePrecision.Vector_hid_t
00088 #define F5T_BIVEC3_FLOAT        F5B_standard_cartesian_chart3D()->SinglePrecision.Bivector_hid_t
00089 
00090 #define F5T_COORD3_DOUBLE       F5B_standard_cartesian_chart3D()->DoublePrecision.Point_hid_t
00091 #define F5T_VEC3_DOUBLE         F5B_standard_cartesian_chart3D()->DoublePrecision.Vector_hid_t
00092 #define F5T_BIVEC3_DOUBLE       F5B_standard_cartesian_chart3D()->DoublePrecision.Bivector_hid_t
00093         
00098 #define F5T_METRIC33_FLOAT      F5B_standard_cartesian_chart3D()->SinglePrecision.Metric_hid_t
00099 
00100 #define F5T_METRIC33_DOUBLE     F5B_standard_cartesian_chart3D()->DoublePrecision.Metric_hid_t
00101 
00102         
00106 typedef  struct
00107 {
00108         F5_uint32_t  num, denom;
00109         
00110 }       IntegerFraction32;
00111 
00112 typedef  struct
00113 {
00114         F5_uint64_t  num, denom;
00115         
00116 }       IntegerFraction64;
00117 
00118 F5_API hid_t    F5T_IntegerFraction32();
00119 #define F5T_INT_FRACTION32      F5T_IntegerFraction32()
00120 
00121 F5_API hid_t    F5T_IntegerFraction64();
00122 #define F5T_INT_FRACTION64      F5T_IntegerFraction64()
00123 
00124 typedef struct  { int  ix, iy, iz; } F5_integer_refinement_point_t;
00125 
00133 F5_API ChartDomain_IDs*F5B_new_integer_regular_domain3D();
00134 
00135 typedef struct
00136 {
00137         IntegerFraction32 x, y, z;
00138 }
00139    IntegerFraction3D;
00140         
00141         
00142 typedef union
00143 {
00144         IntegerFraction3D  crd;
00145         IntegerFraction32  d[3];
00146 }
00155         F5_refinement3D_point_t;
00156 
00162 F5_API ChartDomain_IDs*F5B_new_rational_regular_domain3D();
00163 
00168 typedef struct  { F5_float_t  r,theta,phi; } F5_polar_point3_float_t;
00169 
00170 F5_API ChartDomain_IDs*F5B_new_global_polar_chart3D();
00171 F5_API ChartDomain_IDs*F5B_standard_polar_chart3D();
00172 
00173 F5_API ChartDomain_IDs*F5B_new_global_cylindrical_chart3D();
00174 
00175 F5_API ChartDomain_IDs*F5B_new_global_texture_chart3D();
00176 
00177 /************* mixed time and 2D polar **********/
00178 // not sure if this is the way how it should be
00179 F5_API ChartDomain_IDs*F5B_new_global_t_polar2_chart3D();
00180 
00181 typedef struct  { F5_float_t   t,r,phi; } F5_t_polar2_float_t;
00182 typedef struct  { F5_double_t  t,r,phi; } F5_t_polar2_double_t;
00183 
00184 #define F5T_T_POLAR2_FLOAT  F5B_new_global_t_polar2_chart3D()->SinglePrecision.Point_hid_t
00185 #define F5T_T_POLAR2_DOUBLE F5B_new_global_t_polar2_chart3D()->DoublePrecision.Point_hid_t
00186         
00187         
00188         
00189 /************* 2D charts ************************/
00190 
00191 F5_API ChartDomain_IDs*F5B_new_global_cartesian_chart2D();
00192 F5_API ChartDomain_IDs*F5B_new_global_polar_chart2D();
00193 F5_API ChartDomain_IDs*F5B_new_global_spherical_chart2D();
00194 F5_API ChartDomain_IDs*F5B_new_global_axial_chart2D();
00195 
00196 #define F5T_POLAR2  F5B_standard_edge_cells()->SinglePrecision.Point_hid_t      
00197         
00198 typedef struct  { F5_float_t  u,v; } F5_texture_point_t;
00199 
00200 F5_API ChartDomain_IDs*F5B_new_global_texture_chart2D();
00201 
00203 F5_API ChartDomain_IDs*F5B_standard_texture_chart2D();
00204 
00205 /************* 1D charts ************************/
00206 
00207 F5_API ChartDomain_IDs*F5B_new_global_cartesian_chart1D();
00208 F5_API ChartDomain_IDs*F5B_new_global_spherical_chart1D();
00209 
00210 F5_API ChartDomain_IDs*F5B_new_global_time_chart1D();
00211         
00212 
00213 /**********   CELL TYPES  ******************************/
00217         typedef struct { F5_uint16_t waveform[WAVEFORMSIZE]; } F5_waveform_t;
00218         
00219         typedef struct { char name[8]; } F5_fragname8_t;
00220 F5_API ChartDomain_IDs*F5B_new_global_fragname();
00221 
00222 #define F5_FRAGMENT_NEIGHBOUR_CELL_DOMAIN "fragment_neighbor"
00223 #define F5_FRAGMENT_NEIGHBOUR F5B_new_global_fragname()->SinglePrecision.Point_hid_t
00224         
00225 //      typedef F5T_WAVEFORM 
00226         
00230 typedef struct  { F5_uint32_t  i,j; }   F5_edge32_t;
00231 typedef struct  { F5_uint64_t  i,j; }   F5_edge64_t;
00232 
00233 F5_API ChartDomain_IDs*F5B_new_global_edge_cells();
00234 F5_API ChartDomain_IDs*F5B_standard_edge_cells();
00235 #define F5T_EDGE32              F5B_standard_edge_cells()->SinglePrecision.Point_hid_t
00236 #define F5T_EDGE64              F5B_standard_edge_cells()->DoublePrecision.Point_hid_t
00237 #define F5_EDGE_CELL_DOMAIN "edge"
00238 
00242 typedef struct  { F5_uint32_t  i,j,k; }   F5_triangle32_t;
00243 typedef struct  { F5_uint64_t  i,j,k; }   F5_triangle64_t;
00244 
00248 typedef F5_triangle32_t F5_triangle_t;
00249         
00250 F5_API ChartDomain_IDs*F5B_new_global_triangle_cells();
00251 F5_API ChartDomain_IDs*F5B_standard_triangle_cells();
00252 #define F5T_TRIANGLE32 F5B_standard_triangle_cells()->SinglePrecision.Point_hid_t
00253 #define F5T_TRIANGLE64 F5B_standard_triangle_cells()->DoublePrecision.Point_hid_t
00254 
00255 #define F5_TRIANGLE_CELL_DOMAIN "triangular"
00256 
00260 typedef struct  { F5_uint32_t  i[2][2]; }   F5_quad_t;
00261 typedef struct  { F5_uint32_t  i[4];    }   F5_quadL_t;
00262 
00263 F5_API ChartDomain_IDs*F5B_new_global_quad_cells();
00264 F5_API ChartDomain_IDs*F5B_standard_quad_cells();
00265 #define F5T_QUAD32              F5B_standard_quad_cells()->SinglePrecision.Point_hid_t
00266 #define F5_QUAD_CELL_DOMAIN "quad"
00267 
00268 #if 0 
00269 /*
00270    Faces with three vertices.
00271   */
00272 typedef struct  { F5_int_t  i,j,k; }   F5_faces_t;
00273 
00274 F5_API ChartDomain_IDs*F5B_new_global_faces_cells();
00275 F5_API ChartDomain_IDs*F5B_standard_faces_cells();
00276 #define F5T_FACES       F5B_standard_faces_cells()->Point_hid_t
00277 #define F5_FACE_CELL_DOMAIN "faces"
00278 #endif
00279 
00280 
00284 typedef struct  { F5_uint32_t  i,j,k,l; }   F5_tetra32_t;
00285 typedef struct  { F5_uint64_t  i,j,k,l; }   F5_tetra64_t;
00286 
00287 F5_API ChartDomain_IDs*F5B_new_global_tetrahedral_cells();
00288 F5_API ChartDomain_IDs*F5B_standard_tetrahedral_cells();
00289 #define F5T_TETRAHEDRON32       F5B_standard_tetrahedral_cells()->SinglePrecision.Point_hid_t
00290 #define F5T_TETRAHEDRON64       F5B_standard_tetrahedral_cells()->DoublePrecision.Point_hid_t
00291 #define F5_TETRAHEDRON_CELL_DOMAIN "tetrahedral"
00292 
00296 typedef struct  { F5_uint32_t  i[2][2][2]; }   F5_hexahedron32_t;
00297 typedef struct  { F5_uint32_t  i[8]; }         F5_hexahedronL32_t;
00298 
00299 F5_API ChartDomain_IDs*F5B_new_global_hexahedral_cells();
00300 F5_API ChartDomain_IDs*F5B_standard_hexahedral_cells();
00301 #define F5T_HEXAHEDRON32        F5B_standard_hexahedral_cells()->SinglePrecision.Point_hid_t
00302 #define F5_HEXAHEDRON_CELL_DOMAIN "hexahedral"
00303 
00304 /************************************************************/
00305 F5_API void F5Bcoordinate_cleanup();
00306 
00307 
00308 
00309 #ifdef  __cplusplus
00310 }    /* extern "C"  */
00311 #endif
00312 
00313 #endif  /* __F5B_coordinates_H */
00314