/* init.C */
#include "../Coords.h"
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------
initialize the object, storage freed if repeat call
created -- 95dec17, cca
---------------------------------------------------
*/
void
Coords_init (
Coords *coords,
int type,
int ndim,
int ncoor
) {
/*
---------------
check the input
---------------
*/
if ( coords == NULL
|| !(type == COORDS_BY_TUPLE || type == COORDS_BY_COORD)
|| ndim < 1 || ncoor <= 0 ) {
fprintf(stderr, "\n fatal error in Coords_init(%p,%d,%d,%d)"
"\n bad input\n", coords, type, ndim, ncoor) ;
exit(-1) ;
}
/*
--------------
clear the data
--------------
*/
Coords_clearData(coords) ;
/*
-------------------
set the data fields
-------------------
*/
coords->type = type ;
coords->ndim = ndim ;
coords->ncoor = ncoor ;
coords->coors = FVinit(ndim*ncoor, 0.0) ;
return ; }
/*--------------------------------------------------------------------*/
/*
----------------------------------------------------------
purpose -- initialize a 9-point operator on a n1 x n2 grid
input --
bbox -- bounding box
bbox[0] -- x southwest
bbox[1] -- y southwest
bbox[2] -- x northeast
bbox[3] -- y northeast
Type -- type of object
n1 -- # of grid points in first direction
n2 -- # of grid points in second direction
ncomp -- # of components per grid point
created -- 95dec17, cca
----------------------------------------------------------
*/
void
Coords_init9P (
Coords *coords,
float bbox[],
int type,
int n1,
int n2,
int ncomp
) {
int i, idof, j, k ;
float deltax, deltay ;
float *x, *y ;
/*
---------------
check the input
---------------
*/
if ( coords == NULL || bbox == NULL
|| !(type == COORDS_BY_TUPLE || type == COORDS_BY_COORD)
|| n1 <= 0 || n2 <= 0 || ncomp <= 0 ) {
fprintf(stderr, "\n fatal error in Coords_init9P(%p,%p,%d,%d,%d,%d)"
"\n bad input\n", coords, bbox, type, n1, n2, ncomp) ;
exit(-1) ;
}
/*
---------------------
initialize the object
---------------------
*/
Coords_init(coords, type, 2, n1*n2) ;
/*
--------------------
fill the coordinates
--------------------
*/
deltax = (bbox[2] - bbox[0]) / (n1-1) ;
deltay = (bbox[3] - bbox[1]) / (n2-1) ;
switch ( type ) {
case COORDS_BY_TUPLE :
x = coords->coors ;
y = coords->coors + 1 ;
for ( j = 0, idof = 0 ; j < n2 ; j++ ) {
for ( i = 0 ; i < n1 ; i++ ) {
for ( k = 0 ; k < ncomp ; k++, idof += 2 ) {
x[idof] = bbox[0] + deltax*i ;
y[idof] = bbox[1] + deltay*j ;
}
}
}
break ;
case COORDS_BY_COORD :
x = coords->coors ;
y = coords->coors + n1*n2 ;
for ( j = 0, idof = 0 ; j < n2 ; j++ ) {
for ( i = 0 ; i < n1 ; i++ ) {
for ( k = 0 ; k < ncomp ; k++, idof++ ) {
x[idof] = bbox[0] + deltax*i ;
y[idof] = bbox[1] + deltay*j ;
}
}
}
break ;
}
return ; }
/*--------------------------------------------------------------------*/
/*
----------------------------------------------------------------
purpose -- initialize a 27-point operator on a n1 x n2 x n3 grid
input --
bbox -- bounding box
bbox[0] -- x southwest bottom
bbox[1] -- y southwest bottom
bbox[2] -- z southwest bottom
bbox[3] -- x northeast top
bbox[4] -- y northeast top
bbox[5] -- z northeast top
Type -- type of object
n1 -- # of grid points in first direction
n2 -- # of grid points in second direction
n3 -- # of grid points in third direction
ncomp -- # of components per grid point
created -- 95dec17, cca
----------------------------------------------------------------
*/
void
Coords_init27P (
Coords *coords,
float bbox[],
int type,
int n1,
int n2,
int n3,
int ncomp
) {
int i, idof, j, k, l ;
float deltax, deltay, deltaz ;
float *x, *y, *z ;
/*
---------------
check the input
---------------
*/
if ( coords == NULL || bbox == NULL
|| !(type == COORDS_BY_TUPLE || type == COORDS_BY_COORD)
|| n1 <= 0 || n2 <= 0 || n3 <= 0 || ncomp <= 0 ) {
fprintf(stderr,
"\n fatal error in Coords_init27P(%p,%p,%d,%d,%d,%d,%d)"
"\n bad input\n", coords, bbox, type, n1, n2, n3, ncomp) ;
exit(-1) ;
}
/*
---------------------
initialize the object
---------------------
*/
Coords_init(coords, type, 3, n1*n2*n3) ;
/*
--------------------
fill the coordinates
--------------------
*/
deltax = (bbox[3] - bbox[0]) / (n1-1) ;
deltay = (bbox[4] - bbox[1]) / (n2-1) ;
deltaz = (bbox[5] - bbox[2]) / (n3-1) ;
switch ( type ) {
case COORDS_BY_TUPLE :
x = coords->coors ;
y = coords->coors + 1 ;
z = coords->coors + 2 ;
for ( k = 0, idof = 0 ; k < n3 ; k++ ) {
for ( j = 0 ; j < n2 ; j++ ) {
for ( i = 0 ; i < n1 ; i++ ) {
for ( l = 0 ; l < ncomp ; l++, idof += 3 ) {
x[idof] = bbox[0] + deltax*i ;
y[idof] = bbox[1] + deltay*j ;
z[idof] = bbox[2] + deltaz*k ;
}
}
}
}
break ;
case COORDS_BY_COORD :
x = coords->coors ;
y = coords->coors + coords->ncoor ;
z = coords->coors + 2*coords->ncoor ;
for ( k = 0, idof = 0 ; k < n3 ; k++ ) {
for ( j = 0 ; j < n2 ; j++ ) {
for ( i = 0 ; i < n1 ; i++ ) {
for ( l = 0 ; l < ncomp ; l++, idof++ ) {
x[idof] = bbox[0] + deltax*i ;
y[idof] = bbox[1] + deltay*j ;
z[idof] = bbox[2] + deltaz*k ;
}
}
}
}
break ;
}
return ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1