From: W. Trevor King Date: Tue, 14 Sep 2010 18:36:12 +0000 (-0400) Subject: Consolidated visit_writer source into src/visit_writer/. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=4f9a724acf7578cee5b5c53d6979b1c19bc324d7;p=parallel_computing.git Consolidated visit_writer source into src/visit_writer/. --- diff --git a/src/diffusion_2d/diffusion/diffusion_2d.c b/src/diffusion_2d/diffusion_2d.c similarity index 100% rename from src/diffusion_2d/diffusion/diffusion_2d.c rename to src/diffusion_2d/diffusion_2d.c diff --git a/src/diffusion_2d/source/visit_writer.c b/src/diffusion_2d/source/visit_writer.c deleted file mode 100644 index 23f6af8..0000000 --- a/src/diffusion_2d/source/visit_writer.c +++ /dev/null @@ -1,1061 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/* ************************************************************************* // -// visit_writer.c // -// ************************************************************************* */ - -#include -#include -#include - -#include "visit_writer.h" - - -/* - * Globals. - */ - -static FILE *fp = NULL; -static int useBinary = 0; -static int numInColumn = 0; - - -/* **************************************************************************** - * Function: end_line - * - * Purpose: - * If floats or ints have been written using the write_float or write_int - * functions, this will issue a newline (if necessary) so that a new - * heading can be placed. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void end_line(void) -{ - if (!useBinary) - { - char str2[8] = "\n"; - fprintf(fp, str2); - numInColumn = 0; - } -} - - -/* **************************************************************************** - * Function: open_file - * - * Purpose: - * Opens a file for writing and assigns the handle to the global variable - * "fp". - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void open_file(const char *filename) -{ - char full_filename[1024]; - if (strstr(filename, ".vtk") != NULL) - { - strcpy(full_filename, filename); - } - else - { - sprintf(full_filename, "%s.vtk", filename); - } - - fp = fopen(full_filename, "w+"); -} - - -/* **************************************************************************** - * Function: close_file - * - * Purpose: - * Closes the file with handle "fp" (a global variable). - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void close_file(void) -{ - end_line(); - fclose(fp); - fp = NULL; -} - - -/* **************************************************************************** - * Function: force_big_endian - * - * Purpose: - * Determines if the machine is little-endian. If so, then, for binary - * data, it will force the data to be big-endian. - * - * Note: This assumes that all inputs are 4 bytes long. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void force_big_endian(unsigned char *bytes) -{ - static int doneTest = 0; - static int shouldSwap = 0; - if (!doneTest) - { - int tmp1 = 1; - unsigned char *tmp2 = (unsigned char *) &tmp1; - if (*tmp2 != 0) - shouldSwap = 1; - doneTest = 1; - } - - if (shouldSwap & useBinary) - { - unsigned char tmp = bytes[0]; - bytes[0] = bytes[3]; - bytes[3] = tmp; - tmp = bytes[1]; - bytes[1] = bytes[2]; - bytes[2] = tmp; - } -} - - -/* **************************************************************************** - * Function: write_string - * - * Purpose: - * Writes a character to the open file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_string(const char *str) -{ - fprintf(fp, str); -} - - -/* **************************************************************************** - * Function: new_section - * - * Purpose: - * Adds a new line, provided we didn't already just do so and we are - * writing an ASCII file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void new_section(void) -{ - if (numInColumn != 0) - end_line(); - numInColumn = 0; -} - - -/* **************************************************************************** - * Function: write_int - * - * Purpose: - * Writes an integer to the currently open file. This routine takes - * care of ASCII vs binary issues. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_int(int val) -{ - if (useBinary) - { - force_big_endian((unsigned char *) &val); - fwrite(&val, sizeof(int), 1, fp); - } - else - { - char str[128]; - sprintf(str, "%d ", val); - fprintf(fp, str); - if (((numInColumn++) % 9) == 8) - { - char str2[8] = "\n"; - fprintf(fp, str2); - numInColumn = 0; - } - } -} - - -/* **************************************************************************** - * Function: write_float - * - * Purpose: - * Writes an float to the currently open file. This routine takes - * care of ASCII vs binary issues. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * Modifications: - * - * Hank Childs, Fri Apr 22 09:14:44 PDT 2005 - * Make precision changes suggested by Jeff McAninch - * - * ************************************************************************* */ - -static void write_float(float val) -{ - if (useBinary) - { - force_big_endian((unsigned char *) &val); - fwrite(&val, sizeof(float), 1, fp); - } - else - { - char str[128]; - sprintf(str, "%20.12e ", val); - fprintf(fp, str); - if (((numInColumn++) % 9) == 8) - { - end_line(); - } - } -} - - -/* **************************************************************************** - * Function: write_header - * - * Purpose: - * Writes the standard VTK header to the file. This should be the first - * thing written to the file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_header(void) -{ - fprintf(fp, "# vtk DataFile Version 2.0\n"); - fprintf(fp, "Written using VisIt writer\n"); - if (useBinary) - fprintf(fp, "BINARY\n"); - else - fprintf(fp, "ASCII\n"); -} - - -/* **************************************************************************** - * Function: write_variables - * - * Purpose: - * Writes the variables to the file. This can be a bit tricky. The - * cell data must be written first, followed by the point data. When - * writing the [point|cell] data, one variable must be declared the - * primary scalar and another the primary vector (provided scalars - * or vectors exist). The rest of the arrays are added through the - * "field data" mechanism. Field data should support groups of arrays - * with different numbers of components (ie a scalar and a vector), but - * there is a failure with the VTK reader. So the scalars are all written - * one group of field data and then the vectors as another. If you don't - * write it this way, the vectors do not show up. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -void write_variables(int nvars, int *vardim, int *centering, - const char * const * varname, float **vars, - int npts, int ncells) -{ - char str[1024]; - int i, j, first_scalar, first_vector; - int num_scalars, num_vectors; - int num_field = 0; - - new_section(); - sprintf(str, "CELL_DATA %d\n", ncells); - write_string(str); - - first_scalar = 0; - first_vector = 0; - num_scalars = 0; - num_vectors = 0; - /* The field data is where the non-primary scalars and vectors are - * stored. They must all be grouped together at the end of the point - * data. So write out the primary scalars and vectors first. - */ - for (i = 0 ; i < nvars ; i++) - { - if (centering[i] == 0) - { - int num_to_write = 0; - int should_write = 0; - - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - should_write = 1; - sprintf(str, "SCALARS %s float\n", varname[i]); - write_string(str); - write_string("LOOKUP_TABLE default\n"); - first_scalar = 1; - } - else - num_scalars++; - } - else if (vardim[i] == 3) - { - if (first_vector == 0) - { - should_write = 1; - sprintf(str, "VECTORS %s float\n", varname[i]); - write_string(str); - first_vector = 1; - } - else - num_vectors++; - } - else - { - printf("Only supported variable dimensions are 1 and 3.\n"); - printf("Ignoring variable %s.\n", varname[i]); - continue; - } - - if (should_write) - { - num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_scalar = 0; - if (num_scalars > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_scalars); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] == 0) - { - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - first_scalar = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 1 %d float\n", varname[i], ncells); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_vector = 0; - if (num_vectors > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_vectors); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] == 0) - { - int num_to_write = 0; - - if (vardim[i] == 3) - { - if (first_vector == 0) - { - first_vector = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 3 %d float\n", varname[i], ncells); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - new_section(); - sprintf(str, "POINT_DATA %d\n", npts); - write_string(str); - - first_scalar = 0; - first_vector = 0; - num_scalars = 0; - num_vectors = 0; - /* The field data is where the non-primary scalars and vectors are - * stored. They must all be grouped together at the end of the point - * data. So write out the primary scalars and vectors first. - */ - for (i = 0 ; i < nvars ; i++) - { - if (centering[i] != 0) - { - int num_to_write = 0; - int should_write = 0; - - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - should_write = 1; - sprintf(str, "SCALARS %s float\n", varname[i]); - write_string(str); - write_string("LOOKUP_TABLE default\n"); - first_scalar = 1; - } - else - num_scalars++; - } - else if (vardim[i] == 3) - { - if (first_vector == 0) - { - should_write = 1; - sprintf(str, "VECTORS %s float\n", varname[i]); - write_string(str); - first_vector = 1; - } - else - num_vectors++; - } - else - { - printf("Only supported variable dimensions are 1 and 3.\n"); - printf("Ignoring variable %s.\n", varname[i]); - continue; - } - - if (should_write) - { - num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_scalar = 0; - if (num_scalars > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_scalars); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] != 0) - { - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - first_scalar = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 1 %d float\n", varname[i], npts); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_vector = 0; - if (num_vectors > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_vectors); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] != 0) - { - int num_to_write = 0; - - if (vardim[i] == 3) - { - if (first_vector == 0) - { - first_vector = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 3 %d float\n", varname[i], npts); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } -} - - -/* **************************************************************************** -// Function: write_point_mesh -// -// Purpose: -// Writes out a point mesh. -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_point_mesh(const char *filename, int ub, int npts, float *pts, - int nvars, int *vardim, const char * const *varnames, - float **vars) -{ - int i; - char str[128]; - int *centering = NULL; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET UNSTRUCTURED_GRID\n"); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - new_section(); - sprintf(str, "CELLS %d %d\n", npts, 2*npts); - write_string(str); - for (i = 0 ; i < npts ; i++) - { - write_int(1); - write_int(i); - end_line(); - } - - new_section(); - sprintf(str, "CELL_TYPES %d\n", npts); - write_string(str); - for (i = 0 ; i < npts ; i++) - { - write_int(VISIT_VERTEX); - end_line(); - } - - centering = (int *) malloc(nvars*sizeof(int)); - for (i = 0 ; i < nvars ; i++) - centering[i] = 1; - write_variables(nvars, vardim, centering, varnames, vars, npts, npts); - free(centering); - - close_file(); -} - - -/* **************************************************************************** - * Function: num_points_for_cell - * - * Purpose: - * Determines the number of points for the type of cell. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static int num_points_for_cell(int celltype) -{ - int npts = 0; - switch (celltype) - { - case VISIT_VERTEX: - npts = 1; - break; - case VISIT_LINE: - npts = 2; - break; - case VISIT_TRIANGLE: - npts = 3; - break; - case VISIT_QUAD: - npts = 4; - break; - case VISIT_TETRA: - npts = 4; - break; - case VISIT_HEXAHEDRON: - npts = 8; - break; - case VISIT_WEDGE: - npts = 6; - break; - case VISIT_PYRAMID: - npts = 5; - break; - } - return npts; -} - - -/* **************************************************************************** -// Function: write_unstructured_mesh -// -// Purpose: -// Writes out a unstructured mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// ncells The number of cells. -// celltypes The type of each cell. -// conn The connectivity array. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_unstructured_mesh(const char *filename, int ub, int npts, - float *pts, int ncells, int *celltypes, int *conn, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int conn_size = 0; - int *curr_conn = conn; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET UNSTRUCTURED_GRID\n"); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - new_section(); - for (i = 0 ; i < ncells ; i++) - { - int npts = num_points_for_cell(celltypes[i]); - - conn_size += npts+1; - } - sprintf(str, "CELLS %d %d\n", ncells, conn_size); - write_string(str); - for (i = 0 ; i < ncells ; i++) - { - int npts = num_points_for_cell(celltypes[i]); - write_int(npts); - for (j = 0 ; j < npts ; j++) - write_int(*curr_conn++); - end_line(); - } - - new_section(); - sprintf(str, "CELL_TYPES %d\n", ncells); - write_string(str); - for (i = 0 ; i < ncells ; i++) - { - write_int(celltypes[i]); - end_line(); - } - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - -/* **************************************************************************** -// Function: write_rectilinear_mesh -// -// Purpose: -// Writes out a rectilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// x An array of size dims[0] that contains the x-coordinates. -// y An array of size dims[1] that contains the x-coordinates. -// z An array of size dims[2] that contains the x-coordinates. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// Modifications: -// -// Hank Childs, Wed Apr 6 16:22:57 PDT 2005 -// Fix problem with 2D structured meshes and assessing cell count. -// -// ***************************************************************************/ - -void write_rectilinear_mesh(const char *filename, int ub, int *dims, - float *x, float *y, float *z, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int npts = dims[0]*dims[1]*dims[2]; - int ncX = (dims[0] - 1 < 1 ? 1 : dims[0] - 1); - int ncY = (dims[1] - 1 < 1 ? 1 : dims[1] - 1); - int ncZ = (dims[2] - 1 < 1 ? 1 : dims[2] - 1); - int ncells = ncX*ncY*ncZ; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET RECTILINEAR_GRID\n"); - sprintf(str, "DIMENSIONS %d %d %d\n", dims[0], dims[1], dims[2]); - write_string(str); - sprintf(str, "X_COORDINATES %d float\n", dims[0]); - write_string(str); - for (i = 0 ; i < dims[0] ; i++) - write_float(x[i]); - new_section(); - sprintf(str, "Y_COORDINATES %d float\n", dims[1]); - write_string(str); - for (i = 0 ; i < dims[1] ; i++) - write_float(y[i]); - new_section(); - sprintf(str, "Z_COORDINATES %d float\n", dims[2]); - write_string(str); - for (i = 0 ; i < dims[2] ; i++) - write_float(z[i]); - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - -/* **************************************************************************** -// Function: write_regular_mesh -// -// Purpose: -// Writes out a regular mesh. A regular mesh is one where the data lies -// along regular intervals. "Brick of bytes/floats", -// "Block of bytes/floats", and MRI data all are examples of data that -// lie on regular meshes. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_regular_mesh(const char *filename, int ub, int *dims, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i; - - float *x = (float *) malloc(sizeof(float)*dims[0]); - float *y = (float *) malloc(sizeof(float)*dims[1]); - float *z = (float *) malloc(sizeof(float)*dims[2]); - - for (i = 0 ; i < dims[0] ; i++) - x[i] = (float) i; - for (i = 0 ; i < dims[1] ; i++) - y[i] = (float) i; - for (i = 0 ; i < dims[2] ; i++) - z[i] = (float) i; - - write_rectilinear_mesh(filename, ub, dims, x, y, z, nvars, vardim, - centering, varnames, vars); - - free(x); - free(y); - free(z); -} - - -/* **************************************************************************** -// Function: write_curvilinear_mesh -// -// Purpose: -// Writes out a curvilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nI, nJ, nK }, where nI is the -// number of points in the logical I dimension, etc. -// pts An array of size nI*nJ*nK*3. The array should be layed -// out as (pt(i=0,j=0,k=0), pt(i=1,j=0,k=0), ... -// pt(i=nI-1,j=0,k=0), pt(i=0,j=1,k=0), ...). -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// Modifications: -// -// Hank Childs, Wed Apr 6 16:22:57 PDT 2005 -// Fix problem with 2D structured meshes and assessing cell count. -// -// ***************************************************************************/ - -void write_curvilinear_mesh(const char *filename, int ub, int *dims,float *pts, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int npts = dims[0]*dims[1]*dims[2]; - int ncX = (dims[0] - 1 < 1 ? 1 : dims[0] - 1); - int ncY = (dims[1] - 1 < 1 ? 1 : dims[1] - 1); - int ncZ = (dims[2] - 1 < 1 ? 1 : dims[2] - 1); - int ncells = ncX*ncY*ncZ; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET STRUCTURED_GRID\n"); - sprintf(str, "DIMENSIONS %d %d %d\n", dims[0], dims[1], dims[2]); - write_string(str); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - diff --git a/src/diffusion_2d/source/visit_writer.h b/src/diffusion_2d/source/visit_writer.h deleted file mode 100644 index 1c77c09..0000000 --- a/src/diffusion_2d/source/visit_writer.h +++ /dev/null @@ -1,308 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/* ************************************************************************* // -// visit_writer.h // -// ************************************************************************* */ - -/* -// This file contains function prototypes for writing out point meshes, -// unstructured meshes, rectilinear meshes, regular meshes, and -// structured/curvilinear meshes into files that can later be read by VisIt. -// -// Each routine assumes that the data being written is three-dimensional. -// If the data is two-dimensional, you must still write out the data -// as three-dimensional (ie pad arrays so that they are the correct size, etc). -// However: the VisIt reader will determine that the data is truly two- -// dimensional and visualize it as a two-dimensional dataset. -// -// All writers have an ASCII vs Binary decision. The tradeoffs are the -// standard ones: ASCII is human readable, but slow. The -// binary is much faster, but not human readable. Note: the binary format -// is portable, since it converts all data to be big-endian (this was a -// design decision for the format the visit_writer writes to -- the VTK -// format). -// -// If you have multiple grids, you can write out one file for each grid. -// There are potential pitfalls in doing this, where extra geometry and -// interpolation problems appear along grid boundaries. For additional -// help with this issue, e-mail visit-help@llnl.gov -*/ - - -/* **************************************************************************** -// Function: write_point_mesh -// -// Purpose: -// Writes out a point mesh. -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_point_mesh(const char *filename, int useBinary, int npts, - float *pts, int nvars, int *vardim, - const char * const *varnames, float **vars); - - - -/* **************************************************************************** -// Function: write_unstructured_mesh -// -// Purpose: -// Writes out a unstructured mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// ncells The number of cells. -// celltypes The type of each cell. -// conn The connectivity array. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Example: -// You have two triangles. The first has points (0,0,0), (0,1,0), and -// (1,1,0). The second has points (0,0,0), (1,1,0), and (1,0,0). -// -// There are four unique points. -// -// float pts[12] = { 0,0,0, 0,1,0, 1,1,0, 1,0,0 }; -// -// It is important the points list contain only unique points, -// because VisIt is not able to correctly determine the connectivity of a -// dataset when points are duplicated. -// -// There are two triangles. -// int ncells = 2; -// -// The cells are both triangles. -// int celltypes[2] = { VISIT_TRIANGLE, VISIT_TRIANGLE }; -// -// The connectivity contains indices into the points list. The indexing -// assumes that each point has size 3 (x,y,z). -// -// int conn[6] = { 0, 1, 2, 0, 2, 3 }; -// -// Hint: -// When writing an unstructured mesh, it is easy to get the orientation -// of a cell backwards. VisIt typically does okay with this, but it -// can cause problems. To test if this is happening, bring up VisIt on -// your newly outputted dataset and make a Pseudocolor plot of -// "mesh_quality/volume" for 3D datasets or "mesh_quality/area" for 2D -// datasets. If the cells are inside-out, the volumes or areas will be -// negative. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -#define VISIT_VERTEX 1 -#define VISIT_LINE 3 -#define VISIT_TRIANGLE 5 -#define VISIT_QUAD 9 -#define VISIT_TETRA 10 -#define VISIT_HEXAHEDRON 12 -#define VISIT_WEDGE 13 -#define VISIT_PYRAMID 14 - -void write_unstructured_mesh(const char *filename, int useBinary, int npts, - float *pts, int ncells, int *celltypes, int *conn, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - -/* **************************************************************************** -// Function: write_regular_mesh -// -// Purpose: -// Writes out a regular mesh. A regular mesh is one where the data lies -// along regular intervals. "Brick of bytes/floats", -// "Block of bytes/floats", and MRI data all are examples of data that -// lie on regular meshes. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_regular_mesh(const char *filename, int useBinary, int *dims, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - - -/* **************************************************************************** -// Function: write_rectilinear_mesh -// -// Purpose: -// Writes out a rectilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// x An array of size dims[0] that contains the x-coordinates. -// y An array of size dims[1] that contains the x-coordinates. -// z An array of size dims[2] that contains the x-coordinates. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Example: -// You have a rectilinear mesh with x = { 0, 1, 2}, y = { 1, 1.5, 2, 3 }, -// and z = { 2.5, 3.5 }. -// -// Then dims = { 3, 4, 2 }. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_rectilinear_mesh(const char *filename, int useBinary, - int *dims, float *x, float *y, float *z, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - - -/* **************************************************************************** -// Function: write_curvilinear_mesh -// -// Purpose: -// Writes out a curvilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nI, nJ, nK }, where nI is the -// number of points in the logical I dimension, etc. -// pts An array of size nI*nJ*nK*3. The array should be layed -// out as (pt(i=0,j=0,k=0), pt(i=1,j=0,k=0), ... -// pt(i=nI-1,j=0,k=0), pt(i=0,j=1,k=0), ...). -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_curvilinear_mesh(const char *filename, int useBinary, - int *dims, float *pts, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - diff --git a/src/diffusion_2d/source/source_2d.c b/src/diffusion_2d/source_2d.c similarity index 100% rename from src/diffusion_2d/source/source_2d.c rename to src/diffusion_2d/source_2d.c diff --git a/src/diffusion_2d/source/source_2d_main.c b/src/diffusion_2d/source_2d_main.c similarity index 100% rename from src/diffusion_2d/source/source_2d_main.c rename to src/diffusion_2d/source_2d_main.c diff --git a/src/diffusion_2d/visit_writer b/src/diffusion_2d/visit_writer new file mode 120000 index 0000000..9b42483 --- /dev/null +++ b/src/diffusion_2d/visit_writer @@ -0,0 +1 @@ +../visit_writer/ \ No newline at end of file diff --git a/src/mandelbrot_VTK/visit_writer b/src/mandelbrot_VTK/visit_writer new file mode 120000 index 0000000..9b42483 --- /dev/null +++ b/src/mandelbrot_VTK/visit_writer @@ -0,0 +1 @@ +../visit_writer/ \ No newline at end of file diff --git a/src/mandelbrot_VTK/visit_writer.c b/src/mandelbrot_VTK/visit_writer.c deleted file mode 100644 index 23f6af8..0000000 --- a/src/mandelbrot_VTK/visit_writer.c +++ /dev/null @@ -1,1061 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/* ************************************************************************* // -// visit_writer.c // -// ************************************************************************* */ - -#include -#include -#include - -#include "visit_writer.h" - - -/* - * Globals. - */ - -static FILE *fp = NULL; -static int useBinary = 0; -static int numInColumn = 0; - - -/* **************************************************************************** - * Function: end_line - * - * Purpose: - * If floats or ints have been written using the write_float or write_int - * functions, this will issue a newline (if necessary) so that a new - * heading can be placed. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void end_line(void) -{ - if (!useBinary) - { - char str2[8] = "\n"; - fprintf(fp, str2); - numInColumn = 0; - } -} - - -/* **************************************************************************** - * Function: open_file - * - * Purpose: - * Opens a file for writing and assigns the handle to the global variable - * "fp". - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void open_file(const char *filename) -{ - char full_filename[1024]; - if (strstr(filename, ".vtk") != NULL) - { - strcpy(full_filename, filename); - } - else - { - sprintf(full_filename, "%s.vtk", filename); - } - - fp = fopen(full_filename, "w+"); -} - - -/* **************************************************************************** - * Function: close_file - * - * Purpose: - * Closes the file with handle "fp" (a global variable). - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void close_file(void) -{ - end_line(); - fclose(fp); - fp = NULL; -} - - -/* **************************************************************************** - * Function: force_big_endian - * - * Purpose: - * Determines if the machine is little-endian. If so, then, for binary - * data, it will force the data to be big-endian. - * - * Note: This assumes that all inputs are 4 bytes long. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void force_big_endian(unsigned char *bytes) -{ - static int doneTest = 0; - static int shouldSwap = 0; - if (!doneTest) - { - int tmp1 = 1; - unsigned char *tmp2 = (unsigned char *) &tmp1; - if (*tmp2 != 0) - shouldSwap = 1; - doneTest = 1; - } - - if (shouldSwap & useBinary) - { - unsigned char tmp = bytes[0]; - bytes[0] = bytes[3]; - bytes[3] = tmp; - tmp = bytes[1]; - bytes[1] = bytes[2]; - bytes[2] = tmp; - } -} - - -/* **************************************************************************** - * Function: write_string - * - * Purpose: - * Writes a character to the open file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_string(const char *str) -{ - fprintf(fp, str); -} - - -/* **************************************************************************** - * Function: new_section - * - * Purpose: - * Adds a new line, provided we didn't already just do so and we are - * writing an ASCII file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void new_section(void) -{ - if (numInColumn != 0) - end_line(); - numInColumn = 0; -} - - -/* **************************************************************************** - * Function: write_int - * - * Purpose: - * Writes an integer to the currently open file. This routine takes - * care of ASCII vs binary issues. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_int(int val) -{ - if (useBinary) - { - force_big_endian((unsigned char *) &val); - fwrite(&val, sizeof(int), 1, fp); - } - else - { - char str[128]; - sprintf(str, "%d ", val); - fprintf(fp, str); - if (((numInColumn++) % 9) == 8) - { - char str2[8] = "\n"; - fprintf(fp, str2); - numInColumn = 0; - } - } -} - - -/* **************************************************************************** - * Function: write_float - * - * Purpose: - * Writes an float to the currently open file. This routine takes - * care of ASCII vs binary issues. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * Modifications: - * - * Hank Childs, Fri Apr 22 09:14:44 PDT 2005 - * Make precision changes suggested by Jeff McAninch - * - * ************************************************************************* */ - -static void write_float(float val) -{ - if (useBinary) - { - force_big_endian((unsigned char *) &val); - fwrite(&val, sizeof(float), 1, fp); - } - else - { - char str[128]; - sprintf(str, "%20.12e ", val); - fprintf(fp, str); - if (((numInColumn++) % 9) == 8) - { - end_line(); - } - } -} - - -/* **************************************************************************** - * Function: write_header - * - * Purpose: - * Writes the standard VTK header to the file. This should be the first - * thing written to the file. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static void write_header(void) -{ - fprintf(fp, "# vtk DataFile Version 2.0\n"); - fprintf(fp, "Written using VisIt writer\n"); - if (useBinary) - fprintf(fp, "BINARY\n"); - else - fprintf(fp, "ASCII\n"); -} - - -/* **************************************************************************** - * Function: write_variables - * - * Purpose: - * Writes the variables to the file. This can be a bit tricky. The - * cell data must be written first, followed by the point data. When - * writing the [point|cell] data, one variable must be declared the - * primary scalar and another the primary vector (provided scalars - * or vectors exist). The rest of the arrays are added through the - * "field data" mechanism. Field data should support groups of arrays - * with different numbers of components (ie a scalar and a vector), but - * there is a failure with the VTK reader. So the scalars are all written - * one group of field data and then the vectors as another. If you don't - * write it this way, the vectors do not show up. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -void write_variables(int nvars, int *vardim, int *centering, - const char * const * varname, float **vars, - int npts, int ncells) -{ - char str[1024]; - int i, j, first_scalar, first_vector; - int num_scalars, num_vectors; - int num_field = 0; - - new_section(); - sprintf(str, "CELL_DATA %d\n", ncells); - write_string(str); - - first_scalar = 0; - first_vector = 0; - num_scalars = 0; - num_vectors = 0; - /* The field data is where the non-primary scalars and vectors are - * stored. They must all be grouped together at the end of the point - * data. So write out the primary scalars and vectors first. - */ - for (i = 0 ; i < nvars ; i++) - { - if (centering[i] == 0) - { - int num_to_write = 0; - int should_write = 0; - - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - should_write = 1; - sprintf(str, "SCALARS %s float\n", varname[i]); - write_string(str); - write_string("LOOKUP_TABLE default\n"); - first_scalar = 1; - } - else - num_scalars++; - } - else if (vardim[i] == 3) - { - if (first_vector == 0) - { - should_write = 1; - sprintf(str, "VECTORS %s float\n", varname[i]); - write_string(str); - first_vector = 1; - } - else - num_vectors++; - } - else - { - printf("Only supported variable dimensions are 1 and 3.\n"); - printf("Ignoring variable %s.\n", varname[i]); - continue; - } - - if (should_write) - { - num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_scalar = 0; - if (num_scalars > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_scalars); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] == 0) - { - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - first_scalar = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 1 %d float\n", varname[i], ncells); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_vector = 0; - if (num_vectors > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_vectors); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] == 0) - { - int num_to_write = 0; - - if (vardim[i] == 3) - { - if (first_vector == 0) - { - first_vector = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 3 %d float\n", varname[i], ncells); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = ncells*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - new_section(); - sprintf(str, "POINT_DATA %d\n", npts); - write_string(str); - - first_scalar = 0; - first_vector = 0; - num_scalars = 0; - num_vectors = 0; - /* The field data is where the non-primary scalars and vectors are - * stored. They must all be grouped together at the end of the point - * data. So write out the primary scalars and vectors first. - */ - for (i = 0 ; i < nvars ; i++) - { - if (centering[i] != 0) - { - int num_to_write = 0; - int should_write = 0; - - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - should_write = 1; - sprintf(str, "SCALARS %s float\n", varname[i]); - write_string(str); - write_string("LOOKUP_TABLE default\n"); - first_scalar = 1; - } - else - num_scalars++; - } - else if (vardim[i] == 3) - { - if (first_vector == 0) - { - should_write = 1; - sprintf(str, "VECTORS %s float\n", varname[i]); - write_string(str); - first_vector = 1; - } - else - num_vectors++; - } - else - { - printf("Only supported variable dimensions are 1 and 3.\n"); - printf("Ignoring variable %s.\n", varname[i]); - continue; - } - - if (should_write) - { - num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_scalar = 0; - if (num_scalars > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_scalars); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] != 0) - { - if (vardim[i] == 1) - { - if (first_scalar == 0) - { - first_scalar = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 1 %d float\n", varname[i], npts); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } - - first_vector = 0; - if (num_vectors > 0) - { - sprintf(str, "FIELD FieldData %d\n", num_vectors); - write_string(str); - for (i = 0 ; i < nvars ; i++) - { - int should_write = 0; - if (centering[i] != 0) - { - int num_to_write = 0; - - if (vardim[i] == 3) - { - if (first_vector == 0) - { - first_vector = 1; - } - else - { - should_write = 1; - sprintf(str, "%s 3 %d float\n", varname[i], npts); - write_string(str); - } - } - } - - if (should_write) - { - int num_to_write = npts*vardim[i]; - for (j = 0 ; j < num_to_write ; j++) - { - write_float(vars[i][j]); - } - end_line(); - } - } - } -} - - -/* **************************************************************************** -// Function: write_point_mesh -// -// Purpose: -// Writes out a point mesh. -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_point_mesh(const char *filename, int ub, int npts, float *pts, - int nvars, int *vardim, const char * const *varnames, - float **vars) -{ - int i; - char str[128]; - int *centering = NULL; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET UNSTRUCTURED_GRID\n"); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - new_section(); - sprintf(str, "CELLS %d %d\n", npts, 2*npts); - write_string(str); - for (i = 0 ; i < npts ; i++) - { - write_int(1); - write_int(i); - end_line(); - } - - new_section(); - sprintf(str, "CELL_TYPES %d\n", npts); - write_string(str); - for (i = 0 ; i < npts ; i++) - { - write_int(VISIT_VERTEX); - end_line(); - } - - centering = (int *) malloc(nvars*sizeof(int)); - for (i = 0 ; i < nvars ; i++) - centering[i] = 1; - write_variables(nvars, vardim, centering, varnames, vars, npts, npts); - free(centering); - - close_file(); -} - - -/* **************************************************************************** - * Function: num_points_for_cell - * - * Purpose: - * Determines the number of points for the type of cell. - * - * Programmer: Hank Childs - * Creation: September 3, 2004 - * - * ************************************************************************* */ - -static int num_points_for_cell(int celltype) -{ - int npts = 0; - switch (celltype) - { - case VISIT_VERTEX: - npts = 1; - break; - case VISIT_LINE: - npts = 2; - break; - case VISIT_TRIANGLE: - npts = 3; - break; - case VISIT_QUAD: - npts = 4; - break; - case VISIT_TETRA: - npts = 4; - break; - case VISIT_HEXAHEDRON: - npts = 8; - break; - case VISIT_WEDGE: - npts = 6; - break; - case VISIT_PYRAMID: - npts = 5; - break; - } - return npts; -} - - -/* **************************************************************************** -// Function: write_unstructured_mesh -// -// Purpose: -// Writes out a unstructured mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// ncells The number of cells. -// celltypes The type of each cell. -// conn The connectivity array. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_unstructured_mesh(const char *filename, int ub, int npts, - float *pts, int ncells, int *celltypes, int *conn, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int conn_size = 0; - int *curr_conn = conn; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET UNSTRUCTURED_GRID\n"); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - new_section(); - for (i = 0 ; i < ncells ; i++) - { - int npts = num_points_for_cell(celltypes[i]); - - conn_size += npts+1; - } - sprintf(str, "CELLS %d %d\n", ncells, conn_size); - write_string(str); - for (i = 0 ; i < ncells ; i++) - { - int npts = num_points_for_cell(celltypes[i]); - write_int(npts); - for (j = 0 ; j < npts ; j++) - write_int(*curr_conn++); - end_line(); - } - - new_section(); - sprintf(str, "CELL_TYPES %d\n", ncells); - write_string(str); - for (i = 0 ; i < ncells ; i++) - { - write_int(celltypes[i]); - end_line(); - } - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - -/* **************************************************************************** -// Function: write_rectilinear_mesh -// -// Purpose: -// Writes out a rectilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// x An array of size dims[0] that contains the x-coordinates. -// y An array of size dims[1] that contains the x-coordinates. -// z An array of size dims[2] that contains the x-coordinates. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// Modifications: -// -// Hank Childs, Wed Apr 6 16:22:57 PDT 2005 -// Fix problem with 2D structured meshes and assessing cell count. -// -// ***************************************************************************/ - -void write_rectilinear_mesh(const char *filename, int ub, int *dims, - float *x, float *y, float *z, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int npts = dims[0]*dims[1]*dims[2]; - int ncX = (dims[0] - 1 < 1 ? 1 : dims[0] - 1); - int ncY = (dims[1] - 1 < 1 ? 1 : dims[1] - 1); - int ncZ = (dims[2] - 1 < 1 ? 1 : dims[2] - 1); - int ncells = ncX*ncY*ncZ; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET RECTILINEAR_GRID\n"); - sprintf(str, "DIMENSIONS %d %d %d\n", dims[0], dims[1], dims[2]); - write_string(str); - sprintf(str, "X_COORDINATES %d float\n", dims[0]); - write_string(str); - for (i = 0 ; i < dims[0] ; i++) - write_float(x[i]); - new_section(); - sprintf(str, "Y_COORDINATES %d float\n", dims[1]); - write_string(str); - for (i = 0 ; i < dims[1] ; i++) - write_float(y[i]); - new_section(); - sprintf(str, "Z_COORDINATES %d float\n", dims[2]); - write_string(str); - for (i = 0 ; i < dims[2] ; i++) - write_float(z[i]); - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - -/* **************************************************************************** -// Function: write_regular_mesh -// -// Purpose: -// Writes out a regular mesh. A regular mesh is one where the data lies -// along regular intervals. "Brick of bytes/floats", -// "Block of bytes/floats", and MRI data all are examples of data that -// lie on regular meshes. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_regular_mesh(const char *filename, int ub, int *dims, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i; - - float *x = (float *) malloc(sizeof(float)*dims[0]); - float *y = (float *) malloc(sizeof(float)*dims[1]); - float *z = (float *) malloc(sizeof(float)*dims[2]); - - for (i = 0 ; i < dims[0] ; i++) - x[i] = (float) i; - for (i = 0 ; i < dims[1] ; i++) - y[i] = (float) i; - for (i = 0 ; i < dims[2] ; i++) - z[i] = (float) i; - - write_rectilinear_mesh(filename, ub, dims, x, y, z, nvars, vardim, - centering, varnames, vars); - - free(x); - free(y); - free(z); -} - - -/* **************************************************************************** -// Function: write_curvilinear_mesh -// -// Purpose: -// Writes out a curvilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nI, nJ, nK }, where nI is the -// number of points in the logical I dimension, etc. -// pts An array of size nI*nJ*nK*3. The array should be layed -// out as (pt(i=0,j=0,k=0), pt(i=1,j=0,k=0), ... -// pt(i=nI-1,j=0,k=0), pt(i=0,j=1,k=0), ...). -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// Modifications: -// -// Hank Childs, Wed Apr 6 16:22:57 PDT 2005 -// Fix problem with 2D structured meshes and assessing cell count. -// -// ***************************************************************************/ - -void write_curvilinear_mesh(const char *filename, int ub, int *dims,float *pts, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars) -{ - int i, j; - char str[128]; - int npts = dims[0]*dims[1]*dims[2]; - int ncX = (dims[0] - 1 < 1 ? 1 : dims[0] - 1); - int ncY = (dims[1] - 1 < 1 ? 1 : dims[1] - 1); - int ncZ = (dims[2] - 1 < 1 ? 1 : dims[2] - 1); - int ncells = ncX*ncY*ncZ; - - useBinary = ub; - open_file(filename); - write_header(); - - write_string("DATASET STRUCTURED_GRID\n"); - sprintf(str, "DIMENSIONS %d %d %d\n", dims[0], dims[1], dims[2]); - write_string(str); - sprintf(str, "POINTS %d float\n", npts); - write_string(str); - for (i = 0 ; i < 3*npts ; i++) - { - write_float(pts[i]); - } - - write_variables(nvars, vardim, centering, varnames, vars, npts, ncells); - - close_file(); -} - - diff --git a/src/mandelbrot_VTK/visit_writer.h b/src/mandelbrot_VTK/visit_writer.h deleted file mode 100644 index 1c77c09..0000000 --- a/src/mandelbrot_VTK/visit_writer.h +++ /dev/null @@ -1,308 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2000 - 2007, The Regents of the University of California -* Produced at the Lawrence Livermore National Laboratory -* All rights reserved. -* -* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The -* full copyright notice is contained in the file COPYRIGHT located at the root -* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the disclaimer below. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the disclaimer (as noted below) in the -* documentation and/or materials provided with the distribution. -* - Neither the name of the UC/LLNL nor the names of its contributors may be -* used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF -* CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -*****************************************************************************/ - -/* ************************************************************************* // -// visit_writer.h // -// ************************************************************************* */ - -/* -// This file contains function prototypes for writing out point meshes, -// unstructured meshes, rectilinear meshes, regular meshes, and -// structured/curvilinear meshes into files that can later be read by VisIt. -// -// Each routine assumes that the data being written is three-dimensional. -// If the data is two-dimensional, you must still write out the data -// as three-dimensional (ie pad arrays so that they are the correct size, etc). -// However: the VisIt reader will determine that the data is truly two- -// dimensional and visualize it as a two-dimensional dataset. -// -// All writers have an ASCII vs Binary decision. The tradeoffs are the -// standard ones: ASCII is human readable, but slow. The -// binary is much faster, but not human readable. Note: the binary format -// is portable, since it converts all data to be big-endian (this was a -// design decision for the format the visit_writer writes to -- the VTK -// format). -// -// If you have multiple grids, you can write out one file for each grid. -// There are potential pitfalls in doing this, where extra geometry and -// interpolation problems appear along grid boundaries. For additional -// help with this issue, e-mail visit-help@llnl.gov -*/ - - -/* **************************************************************************** -// Function: write_point_mesh -// -// Purpose: -// Writes out a point mesh. -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_point_mesh(const char *filename, int useBinary, int npts, - float *pts, int nvars, int *vardim, - const char * const *varnames, float **vars); - - - -/* **************************************************************************** -// Function: write_unstructured_mesh -// -// Purpose: -// Writes out a unstructured mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// npts The number of points in the mesh. -// pts The spatial locations of the points. This array should -// be size 3*npts. The points should be encoded as: -// -// ncells The number of cells. -// celltypes The type of each cell. -// conn The connectivity array. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// Example: -// You have two triangles. The first has points (0,0,0), (0,1,0), and -// (1,1,0). The second has points (0,0,0), (1,1,0), and (1,0,0). -// -// There are four unique points. -// -// float pts[12] = { 0,0,0, 0,1,0, 1,1,0, 1,0,0 }; -// -// It is important the points list contain only unique points, -// because VisIt is not able to correctly determine the connectivity of a -// dataset when points are duplicated. -// -// There are two triangles. -// int ncells = 2; -// -// The cells are both triangles. -// int celltypes[2] = { VISIT_TRIANGLE, VISIT_TRIANGLE }; -// -// The connectivity contains indices into the points list. The indexing -// assumes that each point has size 3 (x,y,z). -// -// int conn[6] = { 0, 1, 2, 0, 2, 3 }; -// -// Hint: -// When writing an unstructured mesh, it is easy to get the orientation -// of a cell backwards. VisIt typically does okay with this, but it -// can cause problems. To test if this is happening, bring up VisIt on -// your newly outputted dataset and make a Pseudocolor plot of -// "mesh_quality/volume" for 3D datasets or "mesh_quality/area" for 2D -// datasets. If the cells are inside-out, the volumes or areas will be -// negative. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -#define VISIT_VERTEX 1 -#define VISIT_LINE 3 -#define VISIT_TRIANGLE 5 -#define VISIT_QUAD 9 -#define VISIT_TETRA 10 -#define VISIT_HEXAHEDRON 12 -#define VISIT_WEDGE 13 -#define VISIT_PYRAMID 14 - -void write_unstructured_mesh(const char *filename, int useBinary, int npts, - float *pts, int ncells, int *celltypes, int *conn, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - -/* **************************************************************************** -// Function: write_regular_mesh -// -// Purpose: -// Writes out a regular mesh. A regular mesh is one where the data lies -// along regular intervals. "Brick of bytes/floats", -// "Block of bytes/floats", and MRI data all are examples of data that -// lie on regular meshes. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_regular_mesh(const char *filename, int useBinary, int *dims, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - - -/* **************************************************************************** -// Function: write_rectilinear_mesh -// -// Purpose: -// Writes out a rectilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nX, nY, nZ }, where nX is the -// number of points in the X-dimension, etc. -// x An array of size dims[0] that contains the x-coordinates. -// y An array of size dims[1] that contains the x-coordinates. -// z An array of size dims[2] that contains the x-coordinates. -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Example: -// You have a rectilinear mesh with x = { 0, 1, 2}, y = { 1, 1.5, 2, 3 }, -// and z = { 2.5, 3.5 }. -// -// Then dims = { 3, 4, 2 }. -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_rectilinear_mesh(const char *filename, int useBinary, - int *dims, float *x, float *y, float *z, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - - -/* **************************************************************************** -// Function: write_curvilinear_mesh -// -// Purpose: -// Writes out a curvilinear mesh. -// -// -// Arguments: -// filename The name of the file to write. If the extension ".vtk" is -// not present, it will be added. -// useBinary '0' to write ASCII, !0 to write binary -// dims An array of size 3 = { nI, nJ, nK }, where nI is the -// number of points in the logical I dimension, etc. -// pts An array of size nI*nJ*nK*3. The array should be layed -// out as (pt(i=0,j=0,k=0), pt(i=1,j=0,k=0), ... -// pt(i=nI-1,j=0,k=0), pt(i=0,j=1,k=0), ...). -// nvars The number of variables. -// vardim The dimension of each variable. The size of vardim should -// be nvars. If var i is a scalar, then vardim[i] = 1. -// If var i is a vector, then vardim[i] = 3. -// centering The centering of each variable. The size of centering -// should be nvars. If centering[i] == 0, then the variable -// is cell-based. If centering[i] != 0, then the variable -// is point-based. -// vars An array of variables. The size of vars should be nvars. -// The size of vars[i] should be npts*vardim[i]. -// -// -// Programmer: Hank Childs -// Creation: September 2, 2004 -// -// ***************************************************************************/ - -void write_curvilinear_mesh(const char *filename, int useBinary, - int *dims, float *pts, - int nvars, int *vardim, int *centering, - const char * const *varnames, float **vars); - - - diff --git a/src/diffusion_2d/diffusion/visit_writer.c b/src/visit_writer/visit_writer.c similarity index 100% rename from src/diffusion_2d/diffusion/visit_writer.c rename to src/visit_writer/visit_writer.c diff --git a/src/diffusion_2d/diffusion/visit_writer.h b/src/visit_writer/visit_writer.h similarity index 100% rename from src/diffusion_2d/diffusion/visit_writer.h rename to src/visit_writer/visit_writer.h