/*************************************************************************\ * Copyright (c) 2002 The University of Chicago, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. * This file is distributed subject to a Software License Agreement found * in the file LICENSE that is included with this distribution. \*************************************************************************/ /* program: sdds3dconvert * * This program is for converting 3d vorpal output, which has * Ex_1, Ex_2, ... Ex_ny columns for Ex (similar for other quantity, such as Ey, Ez, Rho, Jx, Jx, Jz ect) * , nz pages, and nx rows, where * each page has the same z coordinates, and each column has the same y coordinates, * each row has the same x coordniates. The input data can be plot * with sddscontour for Ex versus xy plane with columnMatch option. * after the conversion, the output file can be ploted with sddscontour with quantity option for yz, and xz plane. * the input file also has following parameters: * origin1, origin2, origin3, max_ext1, max_ext2, max_ext3, delta1, delta2, delta3, numPhysCells1, * numPhysCells12, numPhysCells3, i.e, the minimum, maximum, interval and dimension size of x, y, z * * $Log: sdds3dconvert.c,v $ * Revision 1.1 2007/04/17 21:15:10 shang * first version, specically convert the vorpal output to sddscontour quantity format for xz and yz plane. * */ #include "mdb.h" #include "SDDS.h" #include "scan.h" char *USAGE = "sdds3dconvert []\n"; void SetupOutputFile(SDDS_DATASET *SDDS_out, char *output, long yz, long outputColumns, char **outputColumn); void free_data_memory(double ****data, long outputColumns, long pages, long ydim); int main(int argc, char **argv) { SDDS_DATASET SDDS_orig, SDDS_out1, SDDS_out2; int32_t i, j, k, row, str_len; SCANNED_ARG *s_arg; char *inputFile, *outputRoot, output1[1024], output2[1024], tmpcol[256]; double xmin, xmax, ymin, ymax, zmin, zmax, xinterval, yinterval, zinterval; int32_t xdim, ydim, zdim, columnNames, outputColumns, page=0; char **columnName, **outputColumn; double ****data; inputFile = outputRoot = NULL; SDDS_RegisterProgramName(argv[0]); argc = scanargs(&s_arg, argc, argv); if (argc<2) bomb(NULL, USAGE); columnNames = outputColumns = 0; columnName = outputColumn = NULL; inputFile = s_arg[1].list[0]; if (argc==3) outputRoot = s_arg[2].list[0]; else outputRoot = inputFile; sprintf(output1, "%s.yz", outputRoot); sprintf(output2, "%s.xz", outputRoot); data = NULL; if (!SDDS_InitializeInput(&SDDS_orig, inputFile)) { SDDS_PrintErrors(stderr, SDDS_VERBOSE_PrintErrors); exit(1); } columnName = (char**)SDDS_GetColumnNames(&SDDS_orig, &columnNames); for (i=0; i0) { if (page==0) { if (!SDDS_GetParameterAsDouble(&SDDS_orig, "origin1", &xmin) || !SDDS_GetParameterAsDouble(&SDDS_orig, "max_ext1", &xmax) || !SDDS_GetParameterAsDouble(&SDDS_orig, "delta1", &xinterval) || !SDDS_GetParameterAsLong(&SDDS_orig, "numPhysCells1", &xdim) || !SDDS_GetParameterAsDouble(&SDDS_orig, "origin2", &ymin) || !SDDS_GetParameterAsDouble(&SDDS_orig, "max_ext2", &ymax) || !SDDS_GetParameterAsDouble(&SDDS_orig, "delta2", &yinterval) || !SDDS_GetParameterAsLong(&SDDS_orig, "numPhysCells2", &ydim) || !SDDS_GetParameterAsDouble(&SDDS_orig, "origin3", &zmin) || !SDDS_GetParameterAsDouble(&SDDS_orig, "max_ext3", &zmax) || !SDDS_GetParameterAsDouble(&SDDS_orig, "delta3", &zinterval) || !SDDS_GetParameterAsLong(&SDDS_orig, "numPhysCells3", &zdim)) { SDDS_PrintErrors(stderr, SDDS_VERBOSE_PrintErrors); exit(1); } SetupOutputFile(&SDDS_out1, output1, 1, outputColumns, outputColumn); SetupOutputFile(&SDDS_out2, output2, 0, outputColumns, outputColumn); for (i=0; i