diff --git a/.gitlab/issue_templates/bug.md b/.gitlab/issue_templates/bug.md new file mode 100644 index 0000000000000000000000000000000000000000..1423a4aa00846121070997778dca4f30766bb216 --- /dev/null +++ b/.gitlab/issue_templates/bug.md @@ -0,0 +1,71 @@ +<!-- + *** Please read this first! *** + + Before opening a new issue, make sure to search for keywords in the issues + filtered by the "bug" label and check to see if it has already been reported +--> + +<!-- + All text between these markers are comments and will not be present in the + report +--> + +### Summary + +<!-- Summarize the bug encountered concisely --> + + +### Steps to reproduce + +<!-- How one can reproduce the issue - this is very important --> + + +### Example case + +<!-- + If possible, please create a SMALL example and attach it to your report + + If you are using an older version of OpenFOAM this will also determine + whether the bug has been fixed in a more recent version +--> + + +### What is the current *bug* behaviour? + +<!-- What actually happens --> + + +### What is the expected *correct* behavior? + +<!-- What you should see instead --> + + +### Relevant logs and/or images + +<!-- + Paste any relevant logs - please use code blocks (```) to format console + output, logs, and code as it's very hard to read otherwise. +--> + + +### Environment information + +<!-- + Providing details of your set-up can help us identify any issues, e.g. + OpenFOAM version : v1806|v1812|v1906 etc + Operating system : ubuntu|openSUSE|centos etc + Hardware info : any info that may help? + Compiler : gcc|intel|clang etc + --> +OpenFOAM version : +Operating system : +Compiler : + +### Possible fixes + +<!-- + If you can, link to the line of code that might be responsible for the + problem +--> + +/label ~bug diff --git a/.gitlab/issue_templates/feature-request.md b/.gitlab/issue_templates/feature-request.md new file mode 100644 index 0000000000000000000000000000000000000000..c318838e73523c265af40f9c433c3bf0cdf77b57 --- /dev/null +++ b/.gitlab/issue_templates/feature-request.md @@ -0,0 +1,31 @@ +### Functionality to add/problem to solve + +(Brief scope) + + +### Target audience + +(Who will benefit from the changes?) +(What type of cases?) + + +### Proposal + +(How are we going to solve the problem?) + + +### What does success look like, and how can we measure that? + +(What are the success factors and acceptance criteria? e.g. test cases, error margins) + + +### Links / references + +(Links to literature, supporting information) + + +### Funding + +(Does the functionality already exist/is sponsorship available?) + +/label ~feature diff --git a/.gitlab/merge_request_templates/new-features.md b/.gitlab/merge_request_templates/new-features.md new file mode 100644 index 0000000000000000000000000000000000000000..0d2144bb35da15b67b4c3783cc562ca3deab66c7 --- /dev/null +++ b/.gitlab/merge_request_templates/new-features.md @@ -0,0 +1,20 @@ +### Summary + +(Summarize the changes concisely) + + +### Resolved bugs (If applicable) + +(Links to issues) + + +### Details of new models (If applicable) + +(New options, user inputs etc) +(Images are nice :)) + + +### Risks + +(Possible regressions?) +(Changes to user inputs?) diff --git a/META-INFO/api-info b/META-INFO/api-info index 5891e7c19c68027265e70e483ec5fd948f09d40e..0bbf85a510d4abcf93ca19c4761ca4cb0eeb2d4b 100644 --- a/META-INFO/api-info +++ b/META-INFO/api-info @@ -1,2 +1,2 @@ api=1812 -patch=0 +patch=190403 diff --git a/applications/solvers/combustion/XiFoam/XiEngineFoam/logSummary.H b/applications/solvers/combustion/XiFoam/XiEngineFoam/logSummary.H index 1946f38da892cc357f5a5b1fd7abe78e2dfa553c..d18024e65d96f3133a5e306361193a8d059e6d3e 100644 --- a/applications/solvers/combustion/XiFoam/XiEngineFoam/logSummary.H +++ b/applications/solvers/combustion/XiFoam/XiEngineFoam/logSummary.H @@ -1,15 +1,22 @@ -Info<< "Mean pressure:" << p.weightedAverage(mesh.V()).value() << endl; -Info<< "Mean temperature:" << thermo.T().weightedAverage(mesh.V()).value() - << endl; -Info<< "Mean u':" - << (sqrt((2.0/3.0)*turbulence->k()))().weightedAverage(mesh.V()).value() - << endl; +{ + const scalar meanP = p.weightedAverage(mesh.V()).value(); + const scalar meanT = thermo.T().weightedAverage(mesh.V()).value(); + const scalar meanUp = + (sqrt((2.0/3.0)*turbulence->k()))().weightedAverage(mesh.V()).value(); + const scalar meanB = b.weightedAverage(mesh.V()).value(); -logSummaryFile() - << runTime.theta() << tab - << p.weightedAverage(mesh.V()).value() << tab - << thermo.T().weightedAverage(mesh.V()).value() << tab - << (sqrt((2.0/3.0)*turbulence->k()))().weightedAverage(mesh.V()).value() - << tab - << 1 - b.weightedAverage(mesh.V()).value() - << endl; + Info<< "Mean pressure:" << meanP << nl + << "Mean temperature:" << meanT << nl + << "Mean u':" << meanUp << endl; + + if (Pstream::master()) + { + logSummaryFile() + << runTime.theta() << tab + << meanP << tab + << meanT << tab + << meanUp << tab + << 1 - meanB + << endl; + } +} diff --git a/applications/test/dictionary/testDictAPI b/applications/test/dictionary/testDictAPI new file mode 100644 index 0000000000000000000000000000000000000000..e6091cb9d0b4aff850b3d63b0261f35ab9af5384 --- /dev/null +++ b/applications/test/dictionary/testDictAPI @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1812 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object testDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +_FOAM_API $FOAM_API; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/test/ensightFoamReader/Make/files b/applications/test/ensightFoamReader/Make/files deleted file mode 100644 index c8089bfc493d9bc3ce7c2ea21c6f8f4bf2749393..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -udr_checker.c - -EXE = $(FOAM_USER_APPBIN)/ensightFoamReader-udr_checker diff --git a/applications/test/ensightFoamReader/Make/options b/applications/test/ensightFoamReader/Make/options deleted file mode 100644 index 750aeb0d14b80b8765826093a49b74506c45aa6c..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/Make/options +++ /dev/null @@ -1,5 +0,0 @@ -EXE_INC = \ - -DUSERD_API_203 - -EXE_LIBS = \ - -luserd-foam diff --git a/applications/test/ensightFoamReader/README b/applications/test/ensightFoamReader/README deleted file mode 100644 index f12e6fd40fc4f10452c5caad8b4529e6576057df..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/README +++ /dev/null @@ -1,116 +0,0 @@ -udr_checker ------------ - -udr_checker.c is a routine that can be used to debug EnSight User-defined -readers. It exists because of the difficulty of debugging dynamic shared -libraries when you don't have the source for the calling program (EnSight). - -If udr_checker.c is compiled and linked with your reader source code (including -access to any libraries needed, and the global_extern.h file), it will exercise -most options of you reader, giving feedback as it goes. The resulting -executable can be debugged using your favorite debugger. And if you have -memory/bounds checking software (such as purify), you can (and should) run it -with this executable to make sure that you are not overwriting things. Readers -that bash memory will cause problems when run with EnSight! - -You will note that the Makefile provided with the readers in the EnSight -distribution have a "checker" object. If you do a "make checker" instead of -just a "make", the "checker"executable will be produced. You may need to -modify these makefiles slightly if the locations of your reader files are -different than the normal. - - --------------------------------------- -Once the "checker" executable exists, you can run the checker program by simply -invoking it: - -> checker - -And you will be prompted for the type of information that you provide in the -EnSight Data Reader dialog, namely: - -The path -filename_1 -[filename_2] Only if your reader uses two fields -swapbytes flag -<toggle flags> Only if your reader implements extra GUI -<pulldown flags> one flag value per line -<field contents> one field string per line - -There are certain command line options that you can use to control some aspects -of the checker program. One of the more useful is the ability to provide the -input just described in a file. This is done in this fashion: - -> checker -p <playfile> - -And <playfile> would be a simple ascii file with 3 [0r 4] lines: -line 1: the path -line 2: filename_1 -line 3: [filename_2] (if two_fields is TRUE) -line 3 or 4: 0 or 1, for swapbytes (0 is FALSE, 1 is TRUE) -remaining lines 0 or 1 for toggle disable enabled - one line for each toggle - 0 - num_pulldown_values for pulldown choice - one line for each pulldown - strings - one line for each field - -example playfile for an EnSight Gold reader casefile (entitled cube.play) -could look something like the following: (Note: two_fields is FALSE) -------------------- - -/usr/local/bin/data/ens -cube.case -0 - - -And you would invoke checker as: - -> checker -p check.play - -Another example playfile -with swapbytes 0, -two enabled toggles, -three pulldowns with the value 0 chosen -and a single field "sample field value" - -could look something like the following:: ----------------------- - -/mydirectory/subdir/ -myfile -0 -1 -1 -0 -0 -0 -sample field value - - -Other command line arguments are: ---------------------------------- --server_number For checking server number routines. If you use this - option, you will be prompted for the total number of - servers and the current server number. These will then be - used in the calls to the server number routines. - --gts # For specifying the geometry timestep to test. The default - is step 0. - The # is the (zero based) time step to read for geometry. - --vts # For specifying the variable timestep to test. The default - is step 0. - The # is the (zero based) time step to read for variables. - - - -Testing optional routines using #defines ------------------------------------------ -For optional routines, such as the extra_gui, or var_extract_gui routines, you -must uncomment the proper #define in udr_checker.c - -Currently the ones available are: - -#define _EGS for extra gui routines -#define _VES for var extract gui routines diff --git a/applications/test/ensightFoamReader/ensightFoamReaderTest b/applications/test/ensightFoamReader/ensightFoamReaderTest deleted file mode 100755 index 55ed682d7fa099dfe0e9211f74686a97bc3403d3..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/ensightFoamReaderTest +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/sh -#------------------------------------------------------------------------------ -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation -# \\/ M anipulation | -#------------------------------------------------------------------------------- -# License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. -# -# Script -# ensightFoamReaderTest -# -# Description -# start ensightFoamReader-udr_checker -# -#------------------------------------------------------------------------------ -usage() { - while [ "$#" -ge 1 ]; do echo "$1"; shift; done - cat<<USAGE - -usage: ${0##*/} [OPTION] -options: - -case dir specify alternative case directory - -* start ensightFoamReader-udr_checker - -USAGE - exit 1 -} - -# parse options -while [ "$#" -gt 0 ] -do - case "$1" in - -h | -help) - usage - ;; - -case) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" - shift 2 - ;; - *) - usage "unknown option/argument: '$*'" - ;; - esac -done - - -# check existence of essential files -for check in system/controlDict system/fvSchemes system/fvSolution -do - [ -s "$check" ] || usage "file does not exist: '$check'" -done - - -# export values that might be needed -export FOAM_CASE=$PWD -export FOAM_CASENAME=${PWD##*/} - -pathName=${PWD%/*} - -playFile=/tmp/ensightFoamReader.$$ -trap "rm -f $playFile 2>/dev/null; exit 0" EXIT TERM INT - -cat << PLAY_FILE > $playFile -$pathName -$FOAM_CASENAME -0 -PLAY_FILE - -echo "ensightFoamReader-udr_checker -p $playFile" - -ensightFoamReader-udr_checker -p $playFile - -#------------------------------------------------------------------------------ diff --git a/applications/test/ensightFoamReader/global_extern.h b/applications/test/ensightFoamReader/global_extern.h deleted file mode 120000 index 09b4ffb70c9948c3249252b265823f2ddc256fdd..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/global_extern.h +++ /dev/null @@ -1 +0,0 @@ -../../utilities/postProcessing/graphics/ensightFoamReader/global_extern.h \ No newline at end of file diff --git a/applications/test/ensightFoamReader/global_extern_proto.h b/applications/test/ensightFoamReader/global_extern_proto.h deleted file mode 120000 index 7c23ba48d9b5db4cdc5c968f94cd974981026d00..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/global_extern_proto.h +++ /dev/null @@ -1 +0,0 @@ -../../utilities/postProcessing/graphics/ensightFoamReader/global_extern_proto.h \ No newline at end of file diff --git a/applications/test/ensightFoamReader/udr_checker-80.c b/applications/test/ensightFoamReader/udr_checker-80.c deleted file mode 100644 index 22fb6feb5386cd86ae8c9d77f5320d55e1a2e159..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/udr_checker-80.c +++ /dev/null @@ -1,5396 +0,0 @@ -/*---------------------------------- - * User Defined Reader - checker - *----------------------------------*/ - -/******************************************************************** - * - * **************************************** - * Copyright 2004 Computational Engineering International, Inc. - * All Rights Reserved. - * - * Restricted Rights Legend - * - * Use, duplication, or disclosure of this - * software and its documentation by the - * Government is subject to restrictions as - * set forth in subdivision [(b)(3)(ii)] of - * the Rights in Technical Data and Computer - * Software clause at 52.227-7013. - *******************************************************************/ - -/*---------------------------------------------------------------------- - * MAJOR ROUTINES ACCESS: (VERSION 2.00) Gold_Userd API - * - * Get the name of the reader - * ========================== - * USERD_get_name_of_reader - * USERD_get_extra_gui_numbers (optional) - * USERD_get_extra_gui_defaults (optional) - * - * Get the reader version - * ====================== - * USERD_get_reader_version - * - * Set the filenames, gather timeset and time info - * =============================================== - * USERD_set_extra_gui_data (optional) - * USERD_set_server_number - * USERD_set_filenames - * USERD_get_number_of_timesets - * USERD_get_geom_timeset_number - * - * for each timeset: - * USERD_get_timeset_description - * USERD_get_num_of_time_steps - * USERD_get_sol_times - * - * USERD_set_time_set_and_step - * - * - * Gather variable and time info - * ============================= - * USERD_get_number_of_variables - * USERD_get_gold_variable_info - * - * - * Get initial part building info - * ============================== - * USERD_set_time_set_and_step - * USERD_get_changing_geometry_status - * USERD_get_node_label_status - * USERD_get_element_label_status - * USERD_get_number_of_files_in_dataset - * USERD_get_dataset_query_file_info - * USERD_get_descrip_lines (geometry) - * USERD_get_number_of_model_parts - * USERD_get_gold_part_build_info - * USERD_get_ghosts_in_model_flag - * USERD_get_maxsize_info - * USERD_get_ghosts_in_block_flag (if any ghost cells in model) - * USERD_get_model_extents **OR** - * USERD_get_part_coords **AND/OR** - * USERD_get_block_coords_by_component - * - * - * - * Part Builder - * ============ - * - * both unstructured and structured - * -------------------------------- - * USERD_set_time_set_and_step - * - * if unstructured - * --------------- - * USERD_get_part_element_ids_by_type - * USERD_get_part_elements_by_type - * - * if any nsided elements: - * USERD_get_nsided_conn - * - * if any nfaced elements: - * USERD_get_nfaced_nodes_per_face - * USERD_get_nfaced_conn - * - * USERD_get_part_coords - * USERD_get_part_node_ids - * - * else if structured - * ------------------ - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * USERD_get_block_ghost_flags - * USERD_get_part_node_ids (If node ids given) - * USERD_get_part_element_ids_by_type (If element ids given) - * - * both again - * ---------- - * USERD_get_border_availability (If border representation - * USERD_get_border_elements_by_type is selected) - * - * USERD_stop_part_building - * - * - * Changing geometry - * ================= - * - * changing coords only - * -------------------- - * USERD_set_time_set_and_step - * USERD_get_descrip_lines - * USERD_get_part_coords - * USERD_get_block_coords_by_component - * - * changing connectivity - * --------------------- - * USERD_set_time_set_and_step - * USERD_get_descrip_lines - * USERD_get_number_of_model_parts - * USERD_get_gold_part_build_info - * USERD_get_ghosts_in_model_flag - * USERD_get_ghosts_in_block_flag (If any ghost cells in model) - * USERD_get_model_extents **OR** - * USERD_get_part_coords **AND/OR** - * USERD_get_block_coords_by_component - * USERD_get_part_element_ids_by_type - * USERD_get_part_elements_by_type - * USERD_get_part_coords - * USERD_get_part_node_ids - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * USERD_get_block_ghost_flags (If ghost cells in part) - * USERD_get_part_node_ids (If node ids given) - * USERD_get_part_element_ids_by_type (If element ids given) - * - * USERD_get_border_availability (If border representation - * USERD_get_border_elements_by_type is selected) - * - * - * Loading Variables - * ================== - * - * constants - * --------- - * USERD_set_time_set_and_step - * USERD_get_constant_val - * - * scalars/vectors/tensors - * ----------------------- - * USERD_get_description_lines - * USERD_set_time_set_and_step - * USERD_get_var_by_component - * - * - * Node or Element queries over time - * ================================= - * USERD_get_var_value_at_specific - * - * - * At 2.03, added: - * --------------- - * - * Materials - * ========= - * USERD_get_number_of_material_sets - * USERD_get_matf_set_info - * - * If any material sets in the model (calls once per material set) - * USERD_get_number_of_materials - * USERD_get_matf_var_info - * - * For each element type of each part containing material ids - * USERD_size_matf_data - * USERD_load_matf_data - * - * - * At 2.04, added: - * --------------- - * USERD_get_uns_failed_params - Sets params used in element failure - * - * - *----------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------- - * MAJOR ROUTINES ACCESS: (Version 1.00) original API - * - * Get the name of the reader - * ========================== - * USERD_get_name_of_reader - * USERD_get_extra_gui_numbers (optional #define _EGS) - * USERD_get_extra_gui_defaults (optional #define _EGS) - * - * Set the filenames - * ================= - * USERD_set_extra_gui_data (optional #define _EGS) - * USERD_set_filenames - * USERD_get_number_of_time_steps - * USERD_get_solution_times - * USERD_set_time_step - * - * - * Gather variable and time info - * ============================= - * USERD_get_number_of_variables - * USERD_get_variable_info - * - * - * Get initial part building info - * ============================== - * USERD_set_time_step - * USERD_get_changing_geometry_status - * USERD_get_node_label_status - * USERD_get_element_label_status - * USERD_get_number_of_files_in_dataset - * USERD_get_dataset_query_file_info - * USERD_get_description_lines (geometry) - * USERD_get_number_of_model_parts - * USERD_get_part_build_info - * USERD_get_number_global_nodes - * USERD_get_global_coords - * USERD_get_block_coords_by_component - * - * Failure Info - * ============ - * USERD_get_uns_failed_params - * - * - * Part Builder - * ============ - * USERD_set_time_step - * USERD_get_global_coords - * USERD_get_global_node_ids - * USERD_get_element_connectivities_for_part - * USERD_get_element_ids_for_part - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * - * USERD_stop_part_building - * - * - * Changing geometry - * ================= - * - * changing coords only - * -------------------- - * USERD_set_time_step - * USERD_get_global_coords - * USERD_get_block_coords_by_component - * - * changing connectivity - * --------------------- - * USERD_set_time_step - * USERD_get_number_of_model_parts - * USERD_get_part_build_info - * USERD_get_number_global_nodes - * USERD_get_global_coords - * USERD_get_global_node_ids - * USERD_get_element_connectivities_for_part - * USERD_get_element_ids_for_part - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * - * Loading Variables - * ================= - * - * constants: - * ---------- - * USERD_set_time_step - * USERD_get_constant_value - * - * scalars: - * -------- - * USERD_get_description_lines - * USERD_set_time_step - * USERD_get_scalar_values - * USERD_get_block_scalar_values - * - * vectors: - * -------- - * USERD_get_description_lines - * USERD_set_time_step - * USERD_get_vector_values - * USERD_get_block_vector_values_by_component - * - * - * Node or Element queries over time - * ================================= - * USERD_get_variable_value_at_specific - * - *----------------------------------------------------------------------*/ -#include <stdio.h> -#include <stdlib.h> -#ifndef WIN32 -#include <unistd.h> -#endif -#include <string.h> -#include <ctype.h> -#include <sys/types.h> -#ifndef CONVEX -#include <malloc.h> -#endif -#include <math.h> - -#include "global_extern.h" - -/* ----------------------------------------------- - * If you wish to test out the Extra GUI stuff - * you need to uncomment this section - * - * #define _EGS - * - * ----------------------------------------------- */ - -#if (!defined USERD_API_100) -#define GT_USERD_API_100 -#endif - -#if (!defined USERD_API_100 && !defined USERD_API_200) -#define GT_USERD_API_200 -#endif - -#if (!defined USERD_API_100 && !defined USERD_API_200 && !defined USERD_API_201 && !defined USERD_API_202) -#define GT_USERD_API_202 -#endif - -#if (!defined USERD_API_100 && !defined USERD_API_200 && !defined USERD_API_201 && !defined USERD_API_202 && !defined USERD_API_203) -#define GT_USERD_API_203 -#endif - - -#define EOS '\0' - -typedef struct { - int id; /* part_id */ - char desc[Z_BUFL]; /* description given in the file */ - int type; /* Z_UNSTRUCTURED, Z_STRUCTURED, Z_IBLANKED */ - int ne[Z_MAXTYPE]; /* Number of elements per type (Z_UNSTRUCTURED) */ - /* or ne[0] = I dimension (Z_STRUCTURED) */ - /* ne[1] = J dimension */ - /* ne[2] = K dimension */ - int nn; /* Num of unstructured nodes (All_Local only) */ - int ghosts; /* TRUE if ghost cells, FALSE otherwise */ -}BUILDINFO; - -typedef struct { - char description[Z_BUFL]; /* description */ - char filename[Z_BUFL]; /* real filename */ - char ifilename[Z_BUFL]; /* imaginary filename */ - int type; - int classify; - int complex; - float freq; - int contran; - int timeset; -}VARINFO; - - -typedef struct { - char name[12]; /* Z_POINT, Z_G_POINT, Z_BAR02, ... */ - int con_len; /* Number of nodes per element */ -}EINFO; - - -/* Global variables - *-----------------*/ -int Geom_status; -int Node_labels; -int Element_labels; -int Ghosts_in_model; -int Num_parts; -int Num_vars; -int Num_materials_sets; -BUILDINFO *Pbuild; -VARINFO *Varinfo; -char Version_number[Z_MAX_USERD_NAME]; -int Num_time_sets; -int Num_time_steps; - -/* ------------------ - * Extra GUI stuff - * ------------------ */ -int Num_toggles = 0; -int Num_pulldowns = 0; -int Num_fields = 0; -char **Toggle_title; -int *Toggle_default_status; -char **Pulldown_title; -int *Pulldown_number_in_list; -int *Pulldown_default_selection; -char ***Pulldown_item_strings; -char **Field_title; -char **Field_user_string; -int *Toggle_choice; /* user choice */ -int *Pulldown_choice; /* user choice */ - -/* --------------------------- - * Failed elements (API 2.04) - * --------------------------- */ -int Any_uns_failed_model_elems = FALSE; - - -#if (defined USERD_API_100 || defined USERD_API_200) -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT",1, - "Z_BAR02",2, - "Z_BAR03",3, - "Z_TRI03",3, - "Z_TRI06",6, - "Z_QUA04",4, - "Z_QUA08",8, - "Z_TET04",4, - "Z_TET10",10, - "Z_PYR05",5, - "Z_PYR13",13, - "Z_PEN06",6, - "Z_PEN15",15, - "Z_HEX08",8, - "Z_HEX20",20}; -#elif defined USERD_API_201 -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT", 1, - "Z_G_POINT",1, - "Z_BAR02", 2, - "Z_G_BAR02",2, - "Z_BAR03", 3, - "Z_G_BAR03",3, - "Z_TRI03", 3, - "Z_G_TRI03",3, - "Z_TRI06", 6, - "Z_G_TRI06",6, - "Z_QUA04", 4, - "Z_G_QUA04",4, - "Z_QUA08", 8, - "Z_G_QUA08",8, - "Z_TET04", 4, - "Z_G_TET04",4, - "Z_TET10", 10, - "Z_G_TET10",10, - "Z_PYR05", 5, - "Z_G_PYR05",5, - "Z_PYR13", 13, - "Z_G_PYR13",13, - "Z_PEN06", 6, - "Z_G_PEN06",6, - "Z_PEN15", 15, - "Z_G_PEN15",15, - "Z_HEX08", 8, - "Z_G_HEX08",8, - "Z_HEX20", 20, - "Z_G_HEX20",20}; -#else -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT", 1, - "Z_G_POINT",1, - "Z_BAR02", 2, - "Z_G_BAR02",2, - "Z_BAR03", 3, - "Z_G_BAR03",3, - "Z_TRI03", 3, - "Z_G_TRI03",3, - "Z_TRI06", 6, - "Z_G_TRI06",6, - "Z_QUA04", 4, - "Z_G_QUA04",4, - "Z_QUA08", 8, - "Z_G_QUA08",8, - "Z_TET04", 4, - "Z_G_TET04",4, - "Z_TET10", 10, - "Z_G_TET10",10, - "Z_PYR05", 5, - "Z_G_PYR05",5, - "Z_PYR13", 13, - "Z_G_PYR13",13, - "Z_PEN06", 6, - "Z_G_PEN06",6, - "Z_PEN15", 15, - "Z_G_PEN15",15, - "Z_HEX08", 8, - "Z_G_HEX08",8, - "Z_HEX20", 20, - "Z_G_HEX20",20, - "Z_NSIDED", 1, /* Not yet implemented */ - "Z_G_NSIDED",1, /* Not yet implemented */ - "Z_NFACED", 1, /* Not yet implemented */ - "Z_G_NFACED",1}; /* Not yet implemented */ -#endif - - -/* Prototypes - *-----------*/ -static int load_fail_defaults(void); -static int prelim_info(int *two_fields, int *any_extra_gui); -static int get_input(int set_server_number, - int use_playfile, - char playfile[Z_MAXFILENP], - int two_fields, - int any_extra_gui, - int *swapbytes); -static int time_info( void ); -static int part_build_info(int geom_time_step); -static int variable_info( void ); - -#if (defined GT_USERD_API_100) -static int gold_part_builder(int geom_time_step); -static int gold_var_loader(int var_time_step); -#else -static int part_builder(int geom_time_step); -static int var_loader(int var_time_step); -#endif - -#if (defined GT_USERD_API_100) -static int materials_info( void ); -static int gold_materials_loader(int geom_time_step); -#endif - -static int entity_querys(int var_time_step); -static int exercise_bkup( void ); -static void usage( void ); - - -/*============= - * Main Routine - *=============*/ -#ifdef WIN32 -int main(int argc, char *argv[]) -#else -int main(int argc, char *argv[]) -#endif -{ - /* Command line option variables - *------------------------------*/ - int set_server_number = FALSE; - int use_playfile = FALSE; - char playfile[Z_MAXFILENP]; - FILE *fplay; - int geom_time_step = 0; - int var_time_step = 0; - - /* Other local variables - *----------------------*/ - int i, j; - int err; - int two_fields; - int any_extra_gui = FALSE; - int swapbytes; - int indx; - - /*---------------------------- - * Command argument processing - *----------------------------*/ - fprintf(stderr,"\n"); - fprintf(stderr,"\n"); - fprintf(stderr,"********************************************\n"); - fprintf(stderr,"* EnSight User Defined Reader Debug Tool *\n"); - fprintf(stderr,"********************************************\n"); - fprintf(stderr,"\n"); - - indx = 1; - while(indx < argc) { - - if(!strcmp("-h",argv[indx])) { - usage(); - } - else if(!strcmp("-help",argv[indx])) { - usage(); - } - - /* if you want to test the server number routines - * - * Use: - * > checker -server_number - * - * You will then be prompted for the current and total - * number of servers - *-----------------------------------------------*/ - else if(!strcmp("-server_number",argv[indx])) { - set_server_number = TRUE; - } - - - /* if you want to use a "playfile" instead of being prompted - * for the data loader information - * - * Use: - * > checker -p <playfile> - * - * This playfile should have 3 [or 4] lines: - * line 1: the path - * line 2: filename_1 - * line 3: [filename_2] (if two_fields is TRUE) - * line 4: 0 or 1, for swapytes (0 is FALSE, 1 is TRUE) - * - * example (two_fields is FALSE, so only 3 lines): - * - * /usr/scratch/stealth/bjn/dat/sp_gold/binary - * simple.case - * 1 - * - *------------------------------------------------------*/ - else if(!strcmp("-p",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - use_playfile = TRUE; - memset(playfile,EOS,Z_MAXFILENP); - strcpy(playfile,argv[indx]); - } - else { - usage(); - } - } - - /* if you want to specify the geometry timestep to test (default is step 0) - * - * Use: - * > checker -gts # - * - * Where # is the step number (zero based) - *-------------------------------------------------------------------------*/ - else if(!strcmp("-gts",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - geom_time_step = atoi(argv[indx]); - } - else { - usage(); - } - } - - /* if you want to specify the variable timestep to test (default is step 0) - * (will use this step for the appropriate timeset of each variable) - * - * Use: - * > checker -vts # - * - * Where # is the step number (zero based) - *-------------------------------------------------------------------------*/ - else if(!strcmp("-vts",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - var_time_step = atoi(argv[indx]); - } - else { - usage(); - } - } - else { - usage(); - } - - indx++; - } - - - /*------------------------------------------------------------- - * - * Now start exercising EnSight - * - *--------------------------------------------------------------*/ - - /*----------------- - * Preliminary info - *-----------------*/ - err = prelim_info(&two_fields,&any_extra_gui); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in prelim_info\n"); - exit(1); - } - - - /*------------------ - * User input needed - *------------------*/ - err = get_input(set_server_number, - use_playfile, - playfile, - two_fields, - any_extra_gui, - &swapbytes); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in get_input\n"); - exit(1); - } - - - /*---------- - * Time info - *----------*/ - err = time_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in time_info\n"); - exit(1); - } - - - /*---------------- - * Part build info - *----------------*/ - err = part_build_info(geom_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in part_build_info\n"); - exit(1); - } - - - /*------------------ - * Get Variable Info - *------------------*/ - err = variable_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in variable_info\n"); - exit(1); - } - - -#if (defined GT_USERD_API_202) - /*------------------- - * Get Materials Info - *-------------------*/ - err = materials_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in materials_info\n"); - exit(1); - } -#endif - -#if (defined GT_USERD_API_203) - if (Z_ERR == load_fail_defaults()) { - fprintf(stderr,"Stopping due to error in failed element flag routine\n"); - exit(1); - } -#endif - - /*------------------------ - * Act like building parts - *------------------------*/ - if(Num_parts > 0) { - -#if (defined GT_USERD_API_100) - err = gold_part_builder(geom_time_step); -#else - err = part_builder(geom_time_step); -#endif - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in part_builder\n"); - exit(1); - } - else { - USERD_stop_part_building(); - } - } - - - /*--------------------------- - * Act like loading variables - *---------------------------*/ - if(Num_vars > 0) { - -#if (defined GT_USERD_API_100) - err = gold_var_loader(var_time_step); -#else - err = var_loader(var_time_step); -#endif - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in var_loader\n"); - exit(1); - } - } - -#if (defined GT_USERD_API_202) - /*--------------------------- - * Act like loading materials - *---------------------------*/ - if(Num_materials_sets > 0) { - err = gold_materials_loader(geom_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in materials_loader\n"); - exit(1); - } - } -#endif - - - - /*---------------------------------------------------- - * See if can do node and/or element queries over time - *----------------------------------------------------*/ - if(Num_parts > 0 && - Num_vars > 0) { - err = entity_querys(var_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in entity_querys\n"); - exit(1); - } - } - - /*---------------------------------------- - * Call the bkup file once in save mode, - * then again in restore mode - so someone - * could debug if desired - *----------------------------------------*/ - err = exercise_bkup(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping due to error in saving and/or restoring archive\n"); - exit(1); - } - - /*------------- - * Exit Routine - *-------------*/ - fprintf(stderr,"\n----------------- exiting ---------------\n"); - -#if (defined GT_USERD_API_100) - USERD_exit_routine(); -#endif - - fprintf(stderr,"\n\n"); -} - -/*-------------- - * Usage routine - *--------------*/ -static void -usage( void ) -{ - fprintf(stderr,"------------------------------------------------------------\n"); - fprintf(stderr,"USAGE: checker [-p pfile] [-server_number] [-gts #] [-vts #]\n"); - fprintf(stderr,"------------------------------------------------------------\n"); - fprintf(stderr," -h, -help Prints out this USAGE text.\n"); - fprintf(stderr," -gts # Specify the geometry times step to use.)\n"); - fprintf(stderr," -p pfile Plays the checker playfile (pfile).\n"); - fprintf(stderr," -server_number Cause servers numbers to be prompted for.\n"); - fprintf(stderr," -vts # Specify the variable times step to use.)\n"); - fprintf(stderr,"\n"); - exit(1); -} - - - - -/*------------ - * prelim_info - *------------*/ -static int -prelim_info(int *two_fields, int *any_extra_gui) -{ - int err; - char reader_name[Z_MAX_USERD_NAME]; - char release_number[Z_MAX_USERD_NAME]; - char description[Z_MAXFILENP]; - int i,j; - - *any_extra_gui = FALSE; - - /* Get the reader name - *--------------------*/ - err = USERD_get_name_of_reader(reader_name,two_fields); - if(err == Z_OK) { - fprintf(stderr," Name of reader: %s\n",reader_name); - if(*two_fields==1) { - fprintf(stderr," two_fields: TRUE\n"); - } - else if(*two_fields==0){ - fprintf(stderr," two_fields: FALSE\n"); - } - else if(*two_fields < 0) { - fprintf(stderr," two_fields: -1 (optional string) \n"); - } - } - else { - fprintf(stderr,"Error: Could not get name of reader\n"); - return(Z_ERR); - } - - /* Get the Extra GUI stuff (optional) - * ---------------------------------------------------------- */ -#ifdef _EGS - - /* Get the Extra GUI numbers of toggles, pulldowns, & fields - * ---------------------------------------------------------- */ - - USERD_get_extra_gui_numbers( &Num_toggles, - &Num_pulldowns, - &Num_fields ); - - if ( Num_toggles > 0 || Num_pulldowns > 0 || Num_fields > 0 ) { - - - *any_extra_gui = TRUE; - - if (Num_toggles>0) { - Toggle_title = (char **) calloc(Num_toggles,sizeof(char*)); - if (Toggle_title == (char **)NULL) return(Z_ERR); - for (i=0; i<Num_toggles; i++) { - Toggle_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Toggle_title[i] == (char *)NULL ) return(Z_ERR); - } - Toggle_default_status = (int *) calloc(Num_toggles,sizeof(int)); - Toggle_choice = (int *) calloc(Num_toggles,sizeof(int)); - } - - if (Num_pulldowns > 0) { - Pulldown_title = (char **) calloc( Num_pulldowns , sizeof(char*) ); - if (Pulldown_title == (char **)NULL) return(Z_ERR); - - Pulldown_item_strings = (char ***) calloc( Num_pulldowns , sizeof(char**) ); - if (Pulldown_item_strings == (char ***)NULL) return(Z_ERR); - - for (i=0; i<Num_pulldowns; i++) { - Pulldown_title[i] = (char *) calloc( Z_LEN_GUI_TITLE_STR , sizeof(char) ); - if ( Pulldown_title[i] == (char *)NULL ) return(Z_ERR); - - Pulldown_item_strings[i] = (char **) calloc( Z_MAX_NUM_GUI_PULL_ITEMS , sizeof(char *) ); - if (Pulldown_item_strings[i] == (char **)NULL) return(Z_ERR); - - for(j = 0; j < Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - Pulldown_item_strings[i][j] = (char *) calloc( Z_LEN_GUI_PULL_STR , sizeof(char) ); - if ( Pulldown_item_strings[i][j] == (char *)NULL ) return(Z_ERR); - } - } - Pulldown_number_in_list = (int *) calloc(Num_pulldowns,sizeof(int)); - Pulldown_default_selection = (int *) calloc(Num_pulldowns,sizeof(int)); - Pulldown_choice = (int *) calloc(Num_pulldowns,sizeof(int)); - } - - if (Num_fields > 0) { - Field_title = (char **) calloc(Num_fields,sizeof(char*)); - Field_user_string = (char **) calloc(Num_fields,sizeof(char*)); - if (Field_title == (char **) NULL) return(Z_ERR); - for (i=0; i<Num_fields; i++) { - Field_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Field_title[i] == (char *)NULL) return(Z_ERR); - Field_user_string[i] = (char *) calloc(Z_LEN_GUI_FIELD_STR,sizeof(char)); - if ( Field_user_string[i] == (char *)NULL) return(Z_ERR); - } - } - - - err = USERD_get_extra_gui_defaults( - Toggle_title, /* [num_toggles][Z_LEN_GUI_TITLE_STR] */ - Toggle_default_status, /* [num_toggles] */ - Pulldown_title, /* [num_pulldowns][Z_LEN_GUI_TITLE_STR] */ - Pulldown_number_in_list, /* [num_pulldowns] */ - Pulldown_default_selection, /* [num_pulldowns] */ - Pulldown_item_strings, /* [num_pulldowns][Z_MAX_NUM_GUI_PULL_ITEMS][Z_LEN_GUI_PULL_STR] */ - Field_title, /* [num_fields][Z_LEN_GUI_TITLE_STR] */ - Field_user_string /* [num_fields][Z_LEN_GUI_FIELD_STR] */ - ); - if (Z_ERR == err) return(Z_ERR); - - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Extra GUI Information ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr,"\nTOGGLE INFO: %d active toggles\n",Num_toggles); - for (i=0; i<Num_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_title[i]); - fprintf(stderr,"Default status = %d \n",Toggle_default_status[i]); - } - - fprintf(stderr,"\nPULLDOWN INFO: %d active pulldowns\n",Num_pulldowns); - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_title[i] ); - for (j=0; j<Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - fprintf(stderr,"Pulldown_item %d : %s\n",j,Pulldown_item_strings[i][j]); - if (strlen(Pulldown_item_strings[i][j]) == 0) { - Pulldown_number_in_list[i] = j; - break; - } - } - fprintf(stderr,"Number of items in list: %d\n",Pulldown_number_in_list[i]); - fprintf(stderr,"Default selection: %d\n\n",Pulldown_default_selection[i]); - } - fprintf(stderr,"\n"); - - fprintf(stderr,"\nFIELDINFO: %d active fields\n",Num_fields); - for (i=0; i<Num_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_user_string[i]); - } - fprintf(stderr,"\n\n\n"); - } - -#endif - - -#if (defined GT_USERD_API_100) - - /* Get the reader api used - *------------------------*/ - err = USERD_get_reader_version(Version_number); - if(err == Z_OK) { - fprintf(stderr," API version: %s\n",Version_number); - } - else { - fprintf(stderr,"Error: Could not get reader api version\n"); - return(Z_ERR); - } - - /* Get the reader release - *-----------------------*/ - err = USERD_get_reader_release(release_number); - if(err == Z_OK) { - fprintf(stderr," Release: %s\n",release_number); - } - else { - fprintf(stderr,"Error: Could not get reader release\n"); - return(Z_ERR); - } -#else - fprintf(stderr," API version: 1.00\n"); -#endif - - -#if 0 - /* Get the reader description - *---------------------------*/ - err = USERD_get_reader_descrip(description); - if(err == Z_OK) { - fprintf(stderr," Description:\n\n"); - fprintf(stderr,"%s\n\n",description); - } - else { - fprintf(stderr,"Error: Could not get reader description\n"); - return(Z_ERR); - } -#else - fprintf(stderr," Note: Not currently calling USERD_get_reader_descrip\n"); - fprintf(stderr," because it is optional.\n"); -#endif - - return(Z_OK); -} - - -/*---------- - * get_input - *----------*/ -static int -get_input(int set_server_number, - int use_playfile, - char playfile[Z_MAXFILENP], - int two_fields, - int any_extra_gui, - int *swapbytes) -{ - FILE *fplay; - - int i, j; - int err; - int tot_servers; - int cur_server; - char the_path[Z_MAXFILENP]; - char file1[Z_MAXFILENP]; - char file2[Z_MAXFILENP]; - char filename_1[Z_MAXFILENP]; - char filename_2[Z_MAXFILENP]; - - - fprintf(stderr,"\n-------------- get_input ----------------\n"); - - /*----------------------------------------------------- - * Prompt for the two input values, as the client would - * And set this info for the reader - *-----------------------------------------------------*/ - -#if (defined GT_USERD_API_100) - - /* Set the server number - if command line option to do so - *--------------------------------------------------------*/ - if(set_server_number) { - fprintf(stderr," Enter total number of servers: "); - scanf("%d",&tot_servers); - - fprintf(stderr," Enter current server number: "); - scanf("%d",&cur_server); - - fprintf(stderr," Setting %d of %d for server number\n",cur_server,tot_servers); - USERD_set_server_number(cur_server,tot_servers); - } -#endif - - /* Set the filenames - *------------------*/ - memset(the_path,EOS,Z_MAXFILENP); - memset(file1,EOS,Z_MAXFILENP); - memset(file2,EOS,Z_MAXFILENP); - memset(filename_1,EOS,Z_MAXFILENP); - memset(filename_2,EOS,Z_MAXFILENP); - - - if(!use_playfile) { - fprintf(stderr," Enter the path: "); - scanf("%s",the_path); - - - fprintf(stderr," Enter filename_1: "); - scanf("%s",file1); - - if(two_fields == TRUE) { - fprintf(stderr," Enter filename_2: "); - scanf("%s",file2); - } - - fprintf(stderr," Enter Swapbytes (0 if FALSE, 1 if TRUE): "); - scanf("%d",swapbytes); - - if (TRUE == any_extra_gui ) { - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Extra GUI INPUT ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr, "\n TOGGLE INPUT \n"); - for (i=0; i<Num_toggles; i++) { - fprintf(stderr, " Enter Toggle Value for '%s' (1=toggle on, 0=toggle off)\n",Toggle_title[i]); - scanf("%d",&Toggle_choice[i]); - } - fprintf(stderr, "\n PULLDOWN INPUT \n"); - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr, "\n PULLDOWN # %d \n",i); - for (j = 0; j<Pulldown_number_in_list[i]; j++) { - fprintf(stderr, " %d %s\n",j,Pulldown_item_strings[i][j]); - } - fprintf(stderr, " Enter Pulldown Value for '%s' (0 to %d)\n",Pulldown_title[i],Pulldown_number_in_list[i]-1); - scanf("%d",&Pulldown_choice[i]); - } - fprintf(stderr, "\n FIELD INPUT \n"); - for (i=0; i<Num_fields; i++) { - fprintf(stderr, "Enter string for field %d '%s'\n",i,Field_title[i]); - scanf("%s",Field_user_string[i]); - } - - } /* end if there is any extra gui stuff */ - } /* end if not using playfile */ - else { - fplay = fopen(playfile,"rb"); - if(fplay == (FILE *)NULL) { - fprintf(stderr,"Error: Opening the playfile %s\n",playfile); - return(Z_ERR); - } - else { - fscanf(fplay,"%s",the_path); - fscanf(fplay,"%s",file1); - if(two_fields == TRUE) { - fscanf(fplay,"%s",file2); - } - fscanf(fplay,"%d",swapbytes); - - /* --------------------- - * Extra GUI stuff - * --------------------- */ - if (TRUE == any_extra_gui) { - - for (i=0; i<Num_toggles; i++) { - fscanf(fplay,"%d",&Toggle_choice[i]); - } - - for (i=0; i<Num_pulldowns; i++) { - fscanf(fplay,"%d",&Pulldown_choice[i]); - } - - for (i=0; i<Num_fields; i++) { - fscanf(fplay,"%s",Field_user_string[i]); - } - } - fclose(fplay); - } - } - -#ifdef _EGS - /* ------------------------------------------- - * set the user choices here and run the code - * ------------------------------------------- */ - - /* set your choices here - Toggle_choice[0..Num_toggles] - Pulldown_choice[0..Num_pulldowns] - Field_user_string[Num_fields][0..Numfields] - amd then send your choices into this routine */ - - USERD_set_extra_gui_data( - Toggle_choice, /* [num_toggle] */ - Pulldown_choice, /* [num_pulldown] */ - Field_user_string ); /* [num_fields][Z_LEN_GUI_FIELD_STR] */ - - for (i=0; i<Num_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_title[i]); - fprintf(stderr,"User selection = %d \n",Toggle_choice[i]); - } - fprintf(stderr,"\n\n"); - - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_title[i] ); - fprintf(stderr,"Pulldown selection is # %d : %s\n",Pulldown_choice[i],Pulldown_item_strings[i][Pulldown_choice[i]]); - } - - for (i=0; i<Num_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_user_string[i]); - - } - - -#endif - - if(strncmp(file1,"/",1)) { - strcpy(filename_1,the_path); - strcat(filename_1,"/"); - strcat(filename_1,file1); - } - if(two_fields == TRUE) { - if(strncmp(file2,"/",1)) { - strcpy(filename_2,the_path); - strcat(filename_2,"/"); - strcat(filename_2,file2); - } - } - if(*swapbytes == 0) { - *swapbytes = FALSE; - } - else { - *swapbytes = TRUE; - } - - /* Feedback - *---------*/ - fprintf(stderr," path: %s\n",the_path); - fprintf(stderr," filename_1: %s\n",filename_1); - fprintf(stderr," filename_2: %s\n",filename_2); - if(*swapbytes) { - fprintf(stderr," Swapbytes: TRUE\n"); - } - else { - fprintf(stderr," Swapbytes: FALSE\n"); - } - - err = USERD_set_filenames(filename_1,filename_2,the_path,*swapbytes); - if(err == Z_ERR) { - fprintf(stderr,"Error: Trouble setting the filenames\n"); - return(Z_ERR); - } - - return(Z_OK); -} - - -/*---------- - * time_info - *----------*/ -static int -time_info( void ) -{ - int i; - int err; - int geom_time_set; - int ts; - float *sol_times; - char ts_desc[Z_BUFL]; - - fprintf(stderr,"\n-------------- time_info ----------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the number of timesets - *---------------------------*/ - Num_time_sets = USERD_get_number_of_timesets(); - fprintf(stderr," number of timesets: %d\n",Num_time_sets); - if(Num_time_sets == 0) { - fprintf(stderr," So, static geometry and variables\n"); - return(Z_OK); - } - - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_time_set = USERD_get_geom_timeset_number(); - - fprintf(stderr," geom timeset number: %d\n",geom_time_set); - if(geom_time_set < 1 && Num_time_sets > 0) { - fprintf(stderr,"Error: timeset numbers must be 1 or greater\n"); - fprintf(stderr," (unless Num_time_sets is zero also)\n"); - } - - - /* For each timeset - *-----------------*/ - for(ts=1; ts<=Num_time_sets; ++ts) { - - fprintf(stderr," Timeset %d:\n",ts); - - /* Get the timeset descriptions - *-----------------------------*/ - err = USERD_get_timeset_description(ts,ts_desc); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting timeset description\n"); - return(Z_ERR); - } - else { - fprintf(stderr," description: %s\n",ts_desc); - } - - /* Get the number of time steps - *-----------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(ts); - fprintf(stderr," number of time steps: %d\n",Num_time_steps); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - - - /* Get the solution times - *-----------------------*/ - if(Num_time_steps > 0) { - sol_times = (float *) calloc(Num_time_steps,sizeof(float)); - if(sol_times == (float *)NULL) { - fprintf(stderr,"Error: allocating for solution times\n"); - return(Z_ERR); - } - else { - err = USERD_get_sol_times(ts,sol_times); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting solution times\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_time_steps; ++i) { - fprintf(stderr," At step %d, time = %f\n",i,sol_times[i]); - } - } - } - free(sol_times); - } - } - -#else - - - /* Get the number of time steps - *-----------------------------*/ - Num_time_steps = USERD_get_number_of_time_steps(); - fprintf(stderr," Nnumber of time steps: %d\n",Num_time_steps); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - - - /* Get the solution times - *-----------------------*/ - if(Num_time_steps > 0) { - sol_times = (float *) calloc(Num_time_steps,sizeof(float)); - if(sol_times == (float *)NULL) { - fprintf(stderr,"Error: allocating for solution times\n"); - return(Z_ERR); - } - else { - err = USERD_get_solution_times(sol_times); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting solution times\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_time_steps; ++i) { - fprintf(stderr," At step %d, time = %f\n",i,sol_times[i]); - } - } - } - free(sol_times); - } - -#endif - - return(Z_OK); -} - - - -/*---------------- - * part_build_info - *----------------*/ -static int -part_build_info(int geom_time_step) -{ - int i, j; - int fn; - int err; - int num_dataset_files; - int geom_time_set; - Z_QFILES *qfiles; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - - int *part_ids; - int *part_types; - int *number_of_nodes; - int **num_elems; - int **ijk_dimensions; - int **iblanking_options; - char **part_descriptions; - - int ghosts_in_block; - - int *max_num_nodes; - int **max_num_elems; - int **max_ijk_dimensions; - float extents[6]; - - - fprintf(stderr,"\n------------ part_build_info ------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_time_set = USERD_get_geom_timeset_number(); - - /* Set the timeset and step - to first step - *-----------------------------------------*/ - - USERD_set_time_set_and_step(geom_time_set,geom_time_step); - -#else - - /* Set the time step - to first step - *----------------------------------*/ - USERD_set_time_step(geom_time_step); - -#endif - - /* Get the changing geometry status - *---------------------------------*/ - Geom_status = USERD_get_changing_geometry_status(); - if(Geom_status == Z_STATIC) { - fprintf(stderr," Geom changing status: Z_STATIC\n"); - } - else if(Geom_status == Z_CHANGE_COORDS) { - fprintf(stderr," Geom changing status: Z_CHANGE_COORDS\n"); - } - else if(Geom_status == Z_CHANGE_CONN) { - fprintf(stderr," Geom changing status: Z_CHANGE_CONN\n"); - } - else { - fprintf(stderr," Invalid Geom changing status!!\n"); - } - - - /* Get the node label status - *--------------------------*/ - Node_labels = USERD_get_node_label_status(); - if(Node_labels) { - fprintf(stderr," Node labels will be provided\n"); - } - else { - fprintf(stderr," Node labels will NOT be provided\n"); - } - - /* Get the element label status - *-----------------------------*/ - Element_labels = USERD_get_element_label_status(); - if(Element_labels) { - fprintf(stderr," Element labels will be provided\n"); - } - else { - fprintf(stderr," Element labels will NOT be provided\n"); - } - - fprintf(stderr,"\n"); - - /* Get the number of files in the dataset - *---------------------------------------*/ - num_dataset_files = USERD_get_number_of_files_in_dataset(); - fprintf(stderr," Number of files in dataset: %d\n",num_dataset_files); - - - /* Get the dataset query file info - *--------------------------------*/ - if(num_dataset_files > 0) { - - qfiles = (Z_QFILES *) calloc(num_dataset_files,sizeof(Z_QFILES)); - if(qfiles == (Z_QFILES *)NULL) { - fprintf(stderr,"Error: allocating for dataset query files\n"); - return(Z_ERR); - } - else { - - for(i=0; i<num_dataset_files; ++i) { - qfiles[i].f_desc = (char **) calloc(10,sizeof(char *)); - if(qfiles[i].f_desc == (char **)NULL) { - fprintf(stderr,"Error: allocating for dataset query descrip lines\n"); - return(Z_ERR); - } - else { - for(j=0; j<10; ++j) { - qfiles[i].f_desc[j] = (char *) calloc(Z_MAXFILENP,sizeof(char)); - if(qfiles[i].f_desc[j] == (char *)NULL) { - fprintf(stderr,"Error: allocating for dataset query descrip lines\n"); - return(Z_ERR); - } - } - } - } - - err = USERD_get_dataset_query_file_info(qfiles); - if(err == Z_OK) { - for(fn=0; fn<num_dataset_files; ++fn) { - fprintf(stderr," For dataset file %d:\n",fn); - - fprintf(stderr," name: %s\n",qfiles[fn].name); - fprintf(stderr," size: %d\n",qfiles[fn].sizeb); - fprintf(stderr," time: %s\n",qfiles[fn].timemod); - fprintf(stderr," num desc lines: %d\n",qfiles[fn].num_d_lines); - for(i=0; i<qfiles[fn].num_d_lines; ++i) { - fprintf(stderr," desc line %d: %s\n",i,qfiles[fn].f_desc[i]); - } - } - } - else { - fprintf(stderr,"Error: getting dataset query info\n"); - return(Z_ERR); - } - } - - /* Free allocated memory - *----------------------*/ - for(i=0; i<num_dataset_files; ++i) { - for(j=0; j<10; ++j) { - free(qfiles[i].f_desc[j]); - } - free(qfiles[i].f_desc); - } - free(qfiles); - } - - fprintf(stderr,"\n-----------------------------------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the geometry description lines - *-----------------------------------*/ - err = USERD_get_descrip_lines(Z_GEOM,0,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Geom Desc line1: %s\n",line1); - fprintf(stderr," Geom Desc line2: %s\n",line2); - } - else { - fprintf(stderr,"Error: getting geom description lines\n"); - return(Z_ERR); - } - -#else - - /* Get the geometry description lines - *-----------------------------------*/ - err = USERD_get_description_lines(Z_GEOM,0,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Geom Desc line1: %s\n",line1); - fprintf(stderr," Geom Desc line2: %s\n",line2); - } - else { - fprintf(stderr,"Error: getting geom description lines\n"); - return(Z_ERR); - } - -#endif - - /* Get the number of model parts - *------------------------------*/ - Num_parts = USERD_get_number_of_model_parts(); - if(Num_parts > 0) { - fprintf(stderr," Number of parts: %d\n",Num_parts); - } - else { - fprintf(stderr," Problems getting number of parts\n"); - return(Z_ERR); - } - - - - /* Get the gold part build info - *-----------------------------*/ - Pbuild = (BUILDINFO *) calloc(Num_parts,sizeof(BUILDINFO)); - if(Pbuild == (BUILDINFO *)NULL) { - fprintf(stderr," Problems allocating for Pbuild structure\n"); - return(Z_ERR); - } - - - part_ids = (int *) calloc(Num_parts,sizeof(int)); - if(part_ids == (int *)NULL) { - fprintf(stderr," Problems allocating for part ids\n"); - return(Z_ERR); - } - - part_types = (int *) calloc(Num_parts,sizeof(int)); - if(part_types == (int *)NULL) { - fprintf(stderr," Problems allocating for part types\n"); - return(Z_ERR); - } - - part_descriptions = (char **) calloc(Num_parts,sizeof(char *)); - if(part_descriptions == (char **)NULL) { - fprintf(stderr," Problems allocating for part descriptions\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - part_descriptions[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(part_descriptions[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for part descriptions\n"); - return(Z_ERR); - } - } - } - - number_of_nodes = (int *) calloc(Num_parts,sizeof(int)); - if(number_of_nodes == (int *)NULL) { - fprintf(stderr," Problems allocating for part number of nodes\n"); - return(Z_ERR); - } - - num_elems = (int **) calloc(Num_parts,sizeof(int *)); - if(num_elems == (int **)NULL) { - fprintf(stderr," Problems allocating for part number of elements\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - num_elems[i] = (int *) calloc(Z_MAXTYPE,sizeof(int)); - if(num_elems[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part number of elements\n"); - return(Z_ERR); - } - } - } - - ijk_dimensions = (int **) calloc(Num_parts,sizeof(int *)); - if(ijk_dimensions == (int **)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - else { - -#if (defined GT_USERD_API_202) - for(i=0; i<Num_parts; ++i) { - ijk_dimensions[i] = (int *) calloc(9,sizeof(int)); - if(ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - else { - for(j=0; j<9; ++j) { - ijk_dimensions[i][j] = -1; - } - } - } -#else - for(i=0; i<Num_parts; ++i) { - ijk_dimensions[i] = (int *) calloc(3,sizeof(int)); - if(ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - } -#endif - } - - iblanking_options = (int **) calloc(Num_parts,sizeof(int *)); - if(iblanking_options == (int **)NULL) { - fprintf(stderr," Problems allocating for part iblanking options\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - iblanking_options[i] = (int *) calloc(6,sizeof(int)); - if(iblanking_options[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part iblanking options\n"); - return(Z_ERR); - } - } - } - - -#if (defined GT_USERD_API_100) - - err = USERD_get_gold_part_build_info(part_ids, - part_types, - part_descriptions, - number_of_nodes, - num_elems, - ijk_dimensions, - iblanking_options); -#else - - err = USERD_get_part_build_info(part_ids, - part_types, - part_descriptions, - num_elems, - ijk_dimensions, - iblanking_options); - -#endif - - if(err == Z_ERR) { - fprintf(stderr," Problems getting part build info\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - fprintf(stderr," For part %d:\n",i+1); - - fprintf(stderr," part id: %d\n",part_ids[i]); - Pbuild[i].id = part_ids[i]; - - if(part_types[i] == Z_UNSTRUCTURED) { - fprintf(stderr," part type: Z_UNSTRUCTURED\n"); - } - else if(part_types[i] == Z_STRUCTURED) { - fprintf(stderr," part type: Z_STRUCTURED\n"); - } - else if(part_types[i] == Z_IBLANKED) { - fprintf(stderr," part type: Z_IBLANKED\n"); - } - else { - fprintf(stderr," Invalid part type\n"); - return(Z_ERR); - } - Pbuild[i].type = part_types[i]; - - fprintf(stderr," part desc: %s\n",part_descriptions[i]); - strncpy(Pbuild[i].desc,part_descriptions[i],Z_BUFL); - -#if (defined GT_USERD_API_100) - fprintf(stderr," number of nodes : %d\n",number_of_nodes[i]); - Pbuild[i].nn = number_of_nodes[i]; -#else - Pbuild[i].nn = USERD_get_number_of_global_nodes(); -#endif - - for(j=0; j<Z_MAXTYPE; ++j) { - if(num_elems[i][j] > 0) { - fprintf(stderr," # %s elements: %d\n", - Elem_info[j].name,num_elems[i][j]); - Pbuild[i].ne[j] = num_elems[i][j]; - } - } - - if(part_types[i] != Z_UNSTRUCTURED) { - - /* For this checker, we will place the following in the - * Pbuild[].ne[] structure: - * - * Note this is can be used for block size whether ranges or not - * ------------------------------------------------------------- - * Pbuild[].ne[0] = i dim of current block (to the range selected) - * Pbuild[].ne[1] = j dim of current block (to the range selected) - * Pbuild[].ne[2] = k dim of current block (to the range selected) - * - * Thus if ranges: - * --------------- - * Pbuild[].ne[3] = i min range (-1 indicates no ranges) - * Pbuild[].ne[4] = i max range - * Pbuild[].ne[5] = i min range - * Pbuild[].ne[6] = i max range - * Pbuild[].ne[7] = i min range - * Pbuild[].ne[8] = i max range - * - * Pbuild[].ne[9] = i dim of total block (if ranges) - * Pbuild[].ne[10] = j dim of total block (if ranges) - * Pbuild[].ne[11] = k dim of total block (if ranges) - * - * What comes back from the api is: - * -------------------------------- - * before 2.03 (no ranges) - * ----------------------- - * ijk_dimensions[][0] = i dim of block - * ijk_dimensions[][1] = j dim of block - * ijk_dimensions[][2] = k dim of block - * - * at 2.03 (if no ranges) - * ------- - * ijk_dimensions[][0] = i dim of block - * ijk_dimensions[][1] = j dim of block - * ijk_dimensions[][2] = k dim of block - * ijk_dimensions[][3] = -1 - * - * at 2.03 (if ranges) - * ------- - * ijk_dimensions[][0] = i dim of total block - * ijk_dimensions[][1] = j dim of total block - * ijk_dimensions[][2] = k dim of total block - * ijk_dimensions[][3] = i min range - * ijk_dimensions[][4] = i max range - * ijk_dimensions[][5] = j min range - * ijk_dimensions[][6] = j max range - * ijk_dimensions[][7] = k min range - * ijk_dimensions[][8] = k max range - *--------------------------------------------------------------*/ - -#if (defined GT_USERD_API_202) - if(ijk_dimensions[i][3] == -1) { - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = ijk_dimensions[i][3]; - } - else { - - /* If empty part - *--------------*/ - if(ijk_dimensions[i][0] == 0 && - ijk_dimensions[i][1] == 0 && - ijk_dimensions[i][2] == 0) { - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = -1; - } - - /* range part - *-----------*/ - else { - Pbuild[i].ne[0] = ijk_dimensions[i][4] - ijk_dimensions[i][3] + 1; - Pbuild[i].ne[1] = ijk_dimensions[i][6] - ijk_dimensions[i][5] + 1; - Pbuild[i].ne[2] = ijk_dimensions[i][8] - ijk_dimensions[i][7] + 1; - - Pbuild[i].ne[3] = ijk_dimensions[i][3]; - Pbuild[i].ne[4] = ijk_dimensions[i][4]; - Pbuild[i].ne[5] = ijk_dimensions[i][5]; - Pbuild[i].ne[6] = ijk_dimensions[i][6]; - Pbuild[i].ne[7] = ijk_dimensions[i][7]; - Pbuild[i].ne[8] = ijk_dimensions[i][8]; - - Pbuild[i].ne[9] = ijk_dimensions[i][0]; - Pbuild[i].ne[10] = ijk_dimensions[i][1]; - Pbuild[i].ne[11] = ijk_dimensions[i][2]; - - fprintf(stderr," Part has ranges:\n"); - fprintf(stderr," ijk dimensions of total block: %d %d %d\n", - Pbuild[i].ne[9], - Pbuild[i].ne[10], - Pbuild[i].ne[11]); - fprintf(stderr," i range: %d to %d\n", - Pbuild[i].ne[3], - Pbuild[i].ne[4]); - fprintf(stderr," j range: %d to %d\n", - Pbuild[i].ne[5], - Pbuild[i].ne[6]); - fprintf(stderr," k range: %d to %d\n", - Pbuild[i].ne[7], - Pbuild[i].ne[8]); - fprintf(stderr," ijk dimensions of range portion: %d %d %d\n", - Pbuild[i].ne[0], - Pbuild[i].ne[1], - Pbuild[i].ne[2]); - } - } -#else - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = -1; -#endif - if(part_types[i] == Z_IBLANKED) { - fprintf(stderr," Ibanking options on:\n"); - if(iblanking_options[i][Z_EXT]) { - fprintf(stderr," Z_EXT\n"); - } - if(iblanking_options[i][Z_INT]) { - fprintf(stderr," Z_INT\n"); - } - if(iblanking_options[i][Z_BND]) { - fprintf(stderr," Z_BND\n"); - } - if(iblanking_options[i][Z_INTBND]) { - fprintf(stderr," Z_INTBND\n"); - } - if(iblanking_options[i][Z_SYM]) { - fprintf(stderr," Z_SYM\n"); - } - } - } - } - } - - -#if (defined GT_USERD_API_200) - - /* Get ghosts in model flag - *-------------------------*/ - Ghosts_in_model = USERD_get_ghosts_in_model_flag(); - if(Ghosts_in_model) { - fprintf(stderr," Ghosts in Model: TRUE\n"); - } - else { - fprintf(stderr," Ghosts in Model: FALSE\n"); - } - - /* Get ghosts in block flag - if needed - *-------------------------------------*/ - for(i=1; i<=Num_parts; ++i) { - if(part_types[i-1] != Z_UNSTRUCTURED && Ghosts_in_model) { - ghosts_in_block = USERD_get_ghosts_in_block_flag(i); - Pbuild[i-1].ghosts = ghosts_in_block; - if(ghosts_in_block) { - fprintf(stderr," Ghosts in block part %d: TRUE\n",i); - } - else { - fprintf(stderr," Ghosts in block part %d: FALSE\n",i); - } - } - } - -#endif - - -#if (defined GT_USERD_API_100) - - /* Get maxsize info - *-----------------*/ - max_num_nodes = (int *) calloc(Num_parts,sizeof(int)); - if(max_num_nodes == (int *)NULL) { - fprintf(stderr," Problems allocating for part max num of nodes\n"); - return(Z_ERR); - } - - max_num_elems = (int **) calloc(Num_parts,sizeof(int *)); - if(max_num_elems == (int **)NULL) { - fprintf(stderr," Problems allocating for part max num of elements\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - max_num_elems[i] = (int *) calloc(Z_MAXTYPE,sizeof(int)); - if(max_num_elems[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part max_num of elements\n"); - return(Z_ERR); - } - } - } - - max_ijk_dimensions = (int **) calloc(Num_parts,sizeof(int *)); - if(max_ijk_dimensions == (int **)NULL) { - fprintf(stderr," Problems allocating for part max ijk dimensions\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - max_ijk_dimensions[i] = (int *) calloc(3,sizeof(int)); - if(max_ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part max ijk dimensions\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_maxsize_info(max_num_nodes, - max_num_elems, - max_ijk_dimensions); - if(err == Z_ERR) { - fprintf(stderr," No maxsize info provided (or error getting them)\n"); - } - else { - - for(i=0; i<Num_parts; ++i) { - fprintf(stderr," For part %d:\n",i+1); - - fprintf(stderr," max number of nodes : %d\n",max_num_nodes[i]); - - for(j=0; j<Z_MAXTYPE; ++j) { - if(max_num_elems[i][j] > 0) { - fprintf(stderr," max # %s elems: %d\n", - Elem_info[j].name,max_num_elems[i][j]); - } - } - - if(part_types[i] != Z_UNSTRUCTURED) { - fprintf(stderr," max_ijk_dimensions: %d %d %d\n", - max_ijk_dimensions[i][0], - max_ijk_dimensions[i][1], - max_ijk_dimensions[i][2]); - } - } - } - - /* Get model extents - if given - *-----------------------------*/ - err = USERD_get_model_extents(extents); - if(err == Z_ERR) { - fprintf(stderr," No extents given\n"); - } - else { - fprintf(stderr," Min x: %g\n",extents[0]); - fprintf(stderr," Max x: %g\n",extents[1]); - fprintf(stderr," Min y: %g\n",extents[2]); - fprintf(stderr," Max y: %g\n",extents[3]); - fprintf(stderr," Min z: %g\n",extents[4]); - fprintf(stderr," Max z: %g\n",extents[5]); - } - -#endif - - /* Free the allocated memory - *--------------------------*/ - free(part_ids); - free(part_types); - free(number_of_nodes); - - for(i=0; i<Num_parts; ++i) { - free(ijk_dimensions[i]); - free(num_elems[i]); - free(part_descriptions[i]); - } - free(ijk_dimensions); - free(num_elems); - free(iblanking_options); - free(part_descriptions); - -#if (defined GT_USERD_API_100) - for(i=0; i<Num_parts; ++i) { - free(max_ijk_dimensions[i]); - free(max_num_elems[i]); - } - free(max_num_nodes); - free(max_num_elems); - free(max_ijk_dimensions); - -#endif - - return(Z_OK); -} - - -/*-------------- - * variable_info - *--------------*/ -static int -variable_info( void ) -{ - int i,j; - int err; - - char **var_description; - char **var_filename; - int *var_type; - int *var_classify; - int *var_complex; - char **var_ifilename; - float *var_freq; - int *var_contran; - int *var_timeset; - - - fprintf(stderr,"\n------------ variable_info --------------\n"); - - /* Get the number of variables - *----------------------------*/ - Num_vars = USERD_get_number_of_variables(); - if(Num_vars < 0) { - fprintf(stderr,"Error: getting the number of variables\n"); - } - else { - fprintf(stderr," Number of variables: %d\n",Num_vars); - } - - - /* Get the gold variable info - *---------------------------*/ - Varinfo = (VARINFO *) calloc(Num_vars,sizeof(VARINFO)); - if(Varinfo == (VARINFO *)NULL) { - fprintf(stderr," Problems allocating for Varinfo structure\n"); - return(Z_ERR); - } - - - var_description = (char **) calloc(Num_vars,sizeof(char *)); - if(var_description == (char **)NULL) { - fprintf(stderr," Problems allocating for var description\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_description[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_description[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var description\n"); - return(Z_ERR); - } - } - } - - var_filename = (char **) calloc(Num_vars,sizeof(char *)); - if(var_filename == (char **)NULL) { - fprintf(stderr," Problems allocating for var filename\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_filename[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_filename[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var filename\n"); - return(Z_ERR); - } - } - } - - var_type = (int *) calloc(Num_vars,sizeof(int)); - if(var_type == (int *)NULL) { - fprintf(stderr," Problems allocating for var type\n"); - return(Z_ERR); - } - - var_classify = (int *) calloc(Num_vars,sizeof(int)); - if(var_classify == (int *)NULL) { - fprintf(stderr," Problems allocating for var classify\n"); - return(Z_ERR); - } - - var_complex = (int *) calloc(Num_vars,sizeof(int)); - if(var_complex == (int *)NULL) { - fprintf(stderr," Problems allocating for var complex\n"); - return(Z_ERR); - } - - - var_ifilename = (char **) calloc(Num_vars,sizeof(char *)); - if(var_ifilename == (char **)NULL) { - fprintf(stderr," Problems allocating for var ifilename\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_ifilename[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_ifilename[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var ifilename\n"); - return(Z_ERR); - } - } - } - - var_freq = (float *) calloc(Num_vars,sizeof(float)); - if(var_freq == (float *)NULL) { - fprintf(stderr," Problems allocating for var freq\n"); - return(Z_ERR); - } - - var_contran = (int *) calloc(Num_vars,sizeof(int)); - if(var_contran == (int *)NULL) { - fprintf(stderr," Problems allocating for var contran\n"); - return(Z_ERR); - } - - var_timeset = (int *) calloc(Num_vars,sizeof(int)); - if(var_timeset == (int *)NULL) { - fprintf(stderr," Problems allocating for var timeset\n"); - return(Z_ERR); - } - -#if (defined GT_USERD_API_100) - - err = USERD_get_gold_variable_info(var_description, - var_filename, - var_type, - var_classify, - var_complex, - var_ifilename, - var_freq, - var_contran, - var_timeset); -#else - - err = USERD_get_variable_info(var_description, - var_filename, - var_type, - var_classify); - -#endif - - if(err == Z_ERR) { - fprintf(stderr,"Error: getting variable info\n"); - } - else { - for(i=0; i<Num_vars; ++i) { - - /* Loading the global - * (for use in other routines) - *----------------------------*/ - strncpy(Varinfo[i].description,var_description[i],Z_BUFL); - strncpy(Varinfo[i].filename,var_filename[i],Z_BUFL); - strncpy(Varinfo[i].ifilename,var_ifilename[i],Z_BUFL); - Varinfo[i].type = var_type[i]; - Varinfo[i].classify = var_classify[i]; - Varinfo[i].complex = var_complex[i]; - Varinfo[i].freq = var_freq[i]; - Varinfo[i].contran = var_contran[i]; - Varinfo[i].timeset = var_timeset[i]; - - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Variable %d:\n",i+1); - - fprintf(stderr," var desc: %s\n",var_description[i]); - fprintf(stderr," var filename: %s\n",var_filename[i]); - -#if (defined GT_USERD_API_100) - if(var_complex[i]) { - fprintf(stderr," var complex: TRUE\n"); - fprintf(stderr," var ifilename: %s\n",var_ifilename[i]); - fprintf(stderr," var freq: %g\n",var_freq[i]); - } - else { - fprintf(stderr," var complex: FALSE\n"); - } -#endif - - if(var_type[i] == Z_CONSTANT) { - fprintf(stderr," var type: Z_CONSTANT\n"); - -#if (defined GT_USERD_API_100) - if(var_contran[i]) { - fprintf(stderr," var contran: TRUE\n"); - } - else { - fprintf(stderr," var contran: FALSE\n"); - } -#endif - - } - else if(var_type[i] == Z_SCALAR) { - fprintf(stderr," var type: Z_SCALAR\n"); - } - else if(var_type[i] == Z_VECTOR) { - fprintf(stderr," var type: Z_VECTOR\n"); - } - else if(var_type[i] == Z_TENSOR) { - fprintf(stderr," var type: Z_TENSOR\n"); - } - else if(var_type[i] == Z_TENSOR9) { - fprintf(stderr," var type: Z_TENSOR9\n"); - } - else { - fprintf(stderr," Invalid var type\n"); - return(Z_ERR); - } - - if(var_classify[i] == Z_PER_NODE) { - fprintf(stderr," var classify: Z_PER_NODE\n"); - } - else if(var_classify[i] == Z_PER_ELEM) { - fprintf(stderr," var classify: Z_PER_ELEM\n"); - } - else if(var_classify[i] != Z_CONSTANT) { - fprintf(stderr," Invalid var classify\n"); - return(Z_ERR); - } - -#if (defined GT_USERD_API_100) - fprintf(stderr," var timeset: %d\n",var_timeset[i]); -#endif - } - } - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<Num_vars; ++i) { - free(var_description[i]); - free(var_filename[i]); - free(var_ifilename[i]); - } - free(var_description); - free(var_filename); - free(var_ifilename); - free(var_type); - free(var_classify); - free(var_complex); - free(var_freq); - free(var_contran); - free(var_timeset); - - return(Z_OK); -} - - -#if (defined GT_USERD_API_100) -/*------------------ - * gold_part_builder - *------------------*/ -static int -gold_part_builder(int geom_time_step) -{ - int i, j, k, jj, kk; - int err; - int geom_timeset; - int p, pn; - int et, ne; - int *elemids; - int **conns; - int nn; - int comp; - int bdim[3]; - int ib[5]; - int num_ghosts; - int num_dims; - int cell_type; - float mm[6]; - float **coords; - int *nodeids; - int *iblanking; - int *ghost_flag; - short *parent_type; - int *parent_num; - int num_elems[Z_MAXTYPE]; - CRD *crds; - int bd1,bd2,bd3; - int empty_part; - int *pdata; - int nsid_len; - int *nsid_con; - int nface_len; - int *nface_con; - int npf_len; - int *npf_con; - int maxcheck; - int num_failed = 0; - int *fail_flags = (int *) NULL; - - fprintf(stderr,"\n------------- part_builder --------------\n"); - - if(Num_time_sets > 0) { - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_timeset = USERD_get_geom_timeset_number(); - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(geom_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(geom_timeset,geom_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - geom_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",geom_time_step); - } - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n\n----------------------------------------"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - pdata = (int *)calloc(ne*Elem_info[et].con_len,sizeof(int)); - if(pdata == (int *) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - else { - conns = (int **) calloc(ne,sizeof(int *)); - if(conns == (int **) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - for(i=0; i<ne; ++i) { - conns[i] = pdata; - pdata += Elem_info[et].con_len; - } - } - - - /* Get the elements - *-----------------*/ - err = USERD_get_part_elements_by_type(pn,et,conns); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element connectivities\n"); - return(Z_ERR); - } - - if(Element_labels) { - elemids = (int *) calloc(ne,sizeof(int)); - if(elemids == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - err = USERD_get_part_element_ids_by_type(pn,et,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - -#if (defined GT_USERD_API_202) - - maxcheck = Z_NSIDED; - - /* Nsided elements, if any - *------------------------*/ - if(et == Z_NSIDED || - et == Z_G_NSIDED) { - - nsid_len = 0; - for(i=0; i<ne; ++i) { - nsid_len += conns[i][0]; - } - - nsid_con = (int *) calloc(nsid_len,sizeof(int)); - if(nsid_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nsided conn array\n"); - return(Z_ERR); - } - - err = USERD_get_nsided_conn(pn,nsid_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nsided conn array\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<conns[i][0]; ++j) { - fprintf(stderr," %d",nsid_con[j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - - for(j=nsid_len-conns[i][0]; j<nsid_len; ++j) { - fprintf(stderr," %d",nsid_con[j]); - } - fprintf(stderr,"\n"); - } - } - - /* Nfaced elements if any - *-----------------------*/ - if(et == Z_NFACED || - et == Z_G_NFACED) { - - nface_len = 0; - for(i=0; i<ne; ++i) { - nface_len += conns[i][0]; - } - - nface_con = (int *) calloc(nface_len,sizeof(int)); - if(nface_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nfaced face array\n"); - return(Z_ERR); - } - - err = USERD_get_nfaced_nodes_per_face(pn,nface_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nfaced face array array\n"); - return(Z_ERR); - } - - npf_len = 0; - for(i=0; i<nface_len; ++i) { - npf_len += nface_con[i]; - } - - npf_con = (int *) calloc(npf_len,sizeof(int)); - if(npf_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nfaced npf array\n"); - return(Z_ERR); - } - - err = USERD_get_nfaced_conn(pn,npf_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nfaced conn array\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - jj = 0; - kk = 0; - for(i=0; i<ne; ++i) { - - if(i == 0 || - i == ne-1) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name, - i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - for(j=0; j<conns[i][0]; ++j) { - fprintf(stderr," face %d connectivity:",j+1); - for(k=0; k<nface_con[jj]; ++k) { - fprintf(stderr," %d",npf_con[kk]); - ++kk; - } - fprintf(stderr,"\n"); - ++jj; - } - } - else { - for(j=0; j<conns[i][0]; ++j) { - for(k=0; k<nface_con[jj]; ++k) { - ++kk; - } - ++jj; - } - } - } - } -#else - - maxcheck = Z_MAXTYPE; - -#endif - - /* Regular elements - *-----------------*/ - if(et < maxcheck) { - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - - /* check the connectivity for negative numbers - * -------------------------------------------*/ -#if defined GT_USERD_API_100 - for (i=0;i<ne;i++){ - for(j=0; j<Elem_info[et].con_len; ++j) { - /* ---------- uncomment to print out connectivity values ---------- */ -/* fprintf(stderr," %d",conns[i][j]); */ - if (conns[i][j] <= 0 || conns[i][j] > Pbuild[p].nn ) { - fprintf(stderr,"\n****************************\n"); - fprintf(stderr,"Connectivity value out of bounds: \n"); - fprintf(stderr,"Either less than zero or greater than \n"); - fprintf(stderr," number of nodes in part!! \n"); - fprintf(stderr,"i = %d j = %d conns[i][j] = %d \n",i,j,conns[i][j]); - fprintf(stderr,"****************************\n"); - } - } - /* ---------- uncomment to print out connectivity values ---------- */ -/* fprintf(stderr,"\n"); */ - } -#endif - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - } - } - - /* Free the allocated memory - *--------------------------*/ - if(NULL != conns) { - if(NULL != *conns) { - free(*conns); - *conns = NULL; - } - free(conns); - conns = NULL; - } - - if(Element_labels) { - free(elemids); - } - } - } - - /* Get the coords - *---------------*/ - nn = Pbuild[p].nn; - - if(nn > 0) { - - coords = (float **) calloc(3,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<3; ++i) { - coords[i] = (float *) calloc((nn+1),sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - if(Node_labels) { - nodeids = (int *) calloc((nn+1),sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - - - err = USERD_get_part_coords(pn,coords); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting unstructured coords\n"); - return(Z_ERR); - } - - if(Node_labels) { - err = USERD_get_part_node_ids(pn,nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - i = 1; - fprintf(stderr," Node %d of %d:\n",i,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - - - /* Last node - *----------*/ - i = nn; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=2; i<=nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<3; ++i) { - free(coords[i]); - } - free(coords); - if(Node_labels) { - free(nodeids); - } - } - } - - - /*--------------------- - * For structured parts - *---------------------*/ - else { - - empty_part = FALSE; - if(Pbuild[p].ne[0] == 0 && - Pbuild[p].ne[1] == 0 && - Pbuild[p].ne[2] == 0) { - empty_part = TRUE; - } - - if(!empty_part) { - - /* Get the block coords - *---------------------*/ - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - coords = (float **) calloc(num_dims,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<num_dims; ++i) { - coords[i] = (float *) calloc(nn,sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - /* Get the coords - *---------------*/ - for(comp=0; comp<num_dims; ++comp) { - err = USERD_get_block_coords_by_component(pn,comp,coords[comp]); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block coords\n"); - return(Z_ERR); - } - } - - -#if (defined GT_USERD_API_200) - - if(Node_labels) { - nodeids = (int *) calloc(nn,sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - /* Get the node ids - if any - *--------------------------*/ - if(Node_labels) { - err = USERD_get_part_node_ids(pn,nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } -#endif - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - if(nn > 0) { - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - -#if (defined GT_USERD_API_200) - - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } -#endif - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - mm[0] = mm[1] = coords[0][i]; - } - - - /* Last node - *----------*/ - i = nn-1; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - -#if (defined GT_USERD_API_200) - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } -#endif - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - } - } - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=1; i<nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(num_dims > 1) { - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - } - if(num_dims > 2) { - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - if(num_dims > 1) { - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - } - if(num_dims > 2) { - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - } - - /* Free the allocated memory - so far - *-----------------------------------*/ - for(i=0; i<num_dims; ++i) { - free(coords[i]); - } - free(coords); - -#if (defined GT_USERD_API_200) - if(Node_labels) { - free(nodeids); - } -#endif - - /* Get the block iblanking - if any - *---------------------------------*/ - if(Pbuild[p].type == Z_IBLANKED) { - - iblanking = (int *) calloc(nn,sizeof(int)); - if(iblanking == (int *) NULL) { - fprintf(stderr,"Error: allocating iblanking array\n"); - return(Z_ERR); - } - - err = USERD_get_block_iblanking(pn,iblanking); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block iblanking\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - ib[Z_EXT] = 0; - ib[Z_INT] = 0; - ib[Z_BND] = 0; - ib[Z_INTBND] = 0; - ib[Z_SYM] = 0; - - for(i=0; i<nn; ++i) { - ++ib[iblanking[i]]; - } - - fprintf(stderr," Iblanking breakdown:\n"); - fprintf(stderr," Number of Z_EXT: %d\n",ib[Z_EXT]); - fprintf(stderr," Number of Z_INT: %d\n",ib[Z_INT]); - fprintf(stderr," Number of Z_BND: %d\n",ib[Z_BND]); - fprintf(stderr," Number of Z_INTBND: %d\n",ib[Z_INTBND]); - fprintf(stderr," Number of Z_SYM: %d\n",ib[Z_SYM]); - - free(iblanking); - } - -#if (defined GT_USERD_API_200) - - /* Get the ghost flags - if any - *-----------------------------*/ - if(Pbuild[p].ghosts) { - - ghost_flag = (int *) calloc(ne,sizeof(int)); - if(ghost_flag == (int *) NULL) { - fprintf(stderr,"Error: allocating ghost_flag array\n"); - return(Z_ERR); - } - - err = USERD_get_block_ghost_flags(pn,ghost_flag); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block ghost flags\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - num_ghosts = 0; - - for(i=0; i<ne; ++i) { - if(ghost_flag[i] > 0) { - ++num_ghosts; - } - } - - fprintf(stderr," Block Ghost flag breakdown:\n"); - fprintf(stderr," %d ghost cells out of %d total cells\n", - num_ghosts,ne); - - free(ghost_flag); - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - - elemids = (int *) calloc(ne,sizeof(int)); - if(elemids == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - - - et = cell_type; - err = USERD_get_part_element_ids_by_type(pn,et,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - fprintf(stderr," id: %d\n",elemids[i]); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - fprintf(stderr," id: %d\n",elemids[i]); - } - - free(elemids); - } -#endif - } - else { - fprintf(stderr," Empty structured part\n"); - } - } - - /* Get border availability - *------------------------*/ - err = USERD_get_border_availability(pn,num_elems); - if(err == Z_OK) { - - /* Get border elements - if any - *-----------------------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = num_elems[et]; - if(ne > 0) { - - conns = (int **) calloc(ne,sizeof(int *)); - if(conns == (int **) NULL) { - fprintf(stderr,"Error: allocating border conns array\n"); - return(Z_ERR); - } - else { - for(i=0; i<ne; ++i) { - conns[i] = (int *) calloc(Elem_info[et].con_len,sizeof(int)); - if(conns[i] == (int *) NULL) { - fprintf(stderr,"Error: allocating border conns array\n"); - return(Z_ERR); - } - } - } - - parent_type = (short *) calloc(ne,sizeof(short)); - if(parent_type == (short *) NULL) { - fprintf(stderr,"Error: allocating border parent_type array\n"); - return(Z_ERR); - } - - parent_num = (int *) calloc(ne,sizeof(int)); - if(parent_num == (int *) NULL) { - fprintf(stderr,"Error: allocating border parent_num array\n"); - return(Z_ERR); - } - - - err = USERD_get_border_elements_by_type(pn, - et, - conns, - parent_type, - parent_num); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting border elements\n"); - return(Z_ERR); - } - - - /* Echo "some" info - *-----------------*/ - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s border element %d of %d:\n", - Elem_info[et].name,i+1,ne); - fprintf(stderr," Parent type: %s\n", - Elem_info[parent_type[i]].name); - fprintf(stderr," Parent num: %d\n",parent_num[i]); - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s border element %d of %d:\n", - Elem_info[et].name,i+1,ne); - fprintf(stderr," Parent type: %s\n", - Elem_info[parent_type[i]].name); - fprintf(stderr," Parent num: %d\n",parent_num[i]); - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - } - - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<ne; ++i) { - free(conns[i]); - } - free(conns); - free(parent_type); - free(parent_num); - } - } - } - } /* end for p = 0 to Num_parts */ - - return(Z_OK); -} - - -/*---------------- - * gold_var_loader - *----------------*/ -static int -gold_var_loader(int var_time_step) -{ - int i, j; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - float constant_val; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float *values; - float minv,maxv; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n--------------- var_loader --------------\n"); - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - if(v > 0) { - fprintf(stderr,"\n"); - } - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - - - if(Num_time_sets > 0) { - /* Get the timeset used for the variable - *---------------------------------------*/ - var_timeset = Varinfo[v].timeset; - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(var_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n", - Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(var_timeset,var_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - var_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",var_time_step); - } - - - /* Constants - *----------*/ - if(Varinfo[v].type == Z_CONSTANT) { - - constant_val = USERD_get_constant_val(vn,FALSE); - fprintf(stderr," Constant (%s):\n",Varinfo[v].description); - fprintf(stderr," value: %g\n",constant_val); - - if(Varinfo[v].complex) { - constant_val = USERD_get_constant_val(vn,TRUE); - fprintf(stderr," value (imag): %g\n",constant_val); - } - } - - /* Scalars, Vectors, Tensors - *--------------------------*/ - else { - - /* Get the var description line - *-----------------------------*/ - err = USERD_get_descrip_lines(Z_VARI,vn,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - if(Varinfo[v].complex) { - err = USERD_get_descrip_lines(Z_VARI,vn,TRUE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line (imag): %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line (imag)\n"); - return(Z_ERR); - } - } - - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - else if(Varinfo[v].type == Z_TENSOR) { - num_comps = 6; - } - else if(Varinfo[v].type == Z_TENSOR9) { - num_comps = 9; - } - - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - } - - - fprintf(stderr," For part %d, with %d nodes:\n",pn,nsize); - - if(nsize > 0) { - values = (float *) calloc((nsize+1),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - for(comp=0; comp<num_comps; ++comp) { - - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - 0, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d: \n",comp); - fprintf(stderr," node %10d value: %g\n",1,values[1]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - if(Varinfo[v].complex) { - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - 0, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d (imag): \n",comp); - fprintf(stderr," node %10d value: %g\n",1,values[1]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - } - } - free(values); - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - fprintf(stderr," For part %d, with %d elems of type %s:\n", - pn,nsize,Elem_info[et].name); - - - values = (float *) calloc((nsize+1),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - for(comp=0; comp<num_comps; ++comp) { - - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - et, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st elem, last elem, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d: \n",comp); - fprintf(stderr," elem %10d value: %g\n",1,values[1]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - if(Varinfo[v].complex) { - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - et, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st elem, last elem, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d (imag): \n",comp); - fprintf(stderr," elem %10d value: %g\n",1,values[1]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - } - } - free(values); - } - } - } - } - } - } - - return(Z_OK); -} - -#else - -/*------------- - * part_builder - *-------------*/ -static int -part_builder(int geom_time_step) -{ - int i, j; - int err; - int p, pn; - int et, ne; - int *elemids[Z_MAXTYPE]; - int **conns[Z_MAXTYPE]; - int nn; - int comp; - int bdim[3]; - int ib[5]; - int num_dims; - int cell_type; - float mm[6]; - float **coords; - int *nodeids; - int *iblanking; - CRD *crds; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n------------- part_builder --------------\n"); - - - if(Num_time_steps > 1) { - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------*/ - USERD_set_time_step(geom_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d\n", - geom_time_step,0,Num_time_steps-1); - } - - - /* Get the global coords - *----------------------*/ - nn = USERD_get_number_of_global_nodes(); - - if(nn > 0) { - - crds = (CRD *) calloc(nn,sizeof(CRD)); - if(crds == (CRD *) NULL) { - fprintf(stderr,"Error: allocating crds array\n"); - return(Z_ERR); - } - - if(Node_labels) { - nodeids = (int *) calloc(nn,sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - - - err = USERD_get_global_coords(crds); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting unstructured coords\n"); - return(Z_ERR); - } - - if(Node_labels) { - err = USERD_get_global_node_ids(nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - crds[i].xyz[0], crds[i].xyz[1], crds[i].xyz[2]); - mm[0] = mm[1] = crds[i].xyz[0]; - mm[2] = mm[3] = crds[i].xyz[1]; - mm[4] = mm[5] = crds[i].xyz[2]; - - - /* Last node - *----------*/ - i = nn-1; - if(i > 0) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - crds[i].xyz[0], crds[i].xyz[1], crds[i].xyz[2]); - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=1; i<nn; ++i) { - if(crds[i].xyz[0] < mm[0]) { - mm[0] = crds[i].xyz[0]; - } - if(crds[i].xyz[0] > mm[1]) { - mm[1] = crds[i].xyz[0]; - } - if(crds[i].xyz[1] < mm[2]) { - mm[2] = crds[i].xyz[1]; - } - if(crds[i].xyz[1] > mm[3]) { - mm[3] = crds[i].xyz[1]; - } - if(crds[i].xyz[2] < mm[4]) { - mm[4] = crds[i].xyz[2]; - } - if(crds[i].xyz[2] > mm[5]) { - mm[5] = crds[i].xyz[2]; - } - } - - fprintf(stderr," Global coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - - - /* Free the allocated memory - *--------------------------*/ - free(crds); - if(Node_labels) { - free(nodeids); - } - } - - - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - conns[et] = (int **) calloc(ne,sizeof(int *)); - if(conns[et] == (int **) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - else { - for(i=0; i<ne; ++i) { - conns[et][i] = (int *) calloc(Elem_info[et].con_len,sizeof(int)); - if(conns[et][i] == (int *) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - } - } - - if(Element_labels) { - elemids[et] = (int *) calloc(ne,sizeof(int)); - if(elemids[et] == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - } - } - } - - /* Get the elements - *-----------------*/ - err = USERD_get_element_connectivities_for_part(pn,conns); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element connectivities\n"); - return(Z_ERR); - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - err = USERD_get_element_ids_for_part(pn,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[et][i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[et][i][j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[et][i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[et][i][j]); - } - fprintf(stderr,"\n"); - } - } - } - - /* Free the allocated memory - *--------------------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - for(i=0; i<ne; ++i) { - free(conns[et][i]); - } - free(conns[et]); - - if(Element_labels) { - free(elemids[et]); - } - } - } - } - - - /*--------------------- - * For structured parts - *---------------------*/ - else { - - /* Get the block coords - *---------------------*/ - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - coords = (float **) calloc(num_dims,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<num_dims; ++i) { - coords[i] = (float *) calloc(nn,sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - /* Get the coords - *---------------*/ - for(comp=0; comp<num_dims; ++comp) { - err = USERD_get_block_coords_by_component(pn,comp,coords[comp]); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block coords\n"); - return(Z_ERR); - } - } - - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - if(nn > 0) { - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - mm[0] = mm[1] = coords[0][i]; - } - - - /* Last node - *----------*/ - i = nn-1; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - } - } - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=2; i<=nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(num_dims > 1) { - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - } - if(num_dims > 2) { - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - if(num_dims > 1) { - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - } - if(num_dims > 2) { - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - } - - /* Free the allocated memory - so far - *-----------------------------------*/ - for(i=0; i<num_dims; ++i) { - free(coords[i]); - } - free(coords); - - - /* Get the block iblanking - if any - *---------------------------------*/ - if(Pbuild[p].type == Z_IBLANKED) { - - iblanking = (int *) calloc(nn,sizeof(int)); - if(iblanking == (int *) NULL) { - fprintf(stderr,"Error: allocating iblanking array\n"); - return(Z_ERR); - } - - err = USERD_get_block_iblanking(pn,iblanking); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block iblanking\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - ib[Z_EXT] = 0; - ib[Z_INT] = 0; - ib[Z_BND] = 0; - ib[Z_INTBND] = 0; - ib[Z_SYM] = 0; - - for(i=0; i<nn; ++i) { - ++ib[iblanking[i]]; - } - - fprintf(stderr," Iblanking breakdown:\n"); - fprintf(stderr," Number of Z_EXT: %d\n",ib[Z_EXT]); - fprintf(stderr," Number of Z_INT: %d\n",ib[Z_INT]); - fprintf(stderr," Number of Z_BND: %d\n",ib[Z_BND]); - fprintf(stderr," Number of Z_INTBND: %d\n",ib[Z_INTBND]); - fprintf(stderr," Number of Z_SYM: %d\n",ib[Z_SYM]); - - free(iblanking); - } - } - } - - return(Z_OK); -} - - -/*----------- - * var_loader - *-----------*/ -static int -var_loader(int var_time_step) -{ - int i, j, k; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - float constant_val; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float *values; - float *tvalues; - float minv[3],maxv[3]; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n--------------- var_loader --------------\n"); - - if(Num_time_steps > 1 && v == 0) { - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_step(var_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d)\n\n", - var_time_step,0,Num_time_steps-1); - } - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - if(v > 0) { - fprintf(stderr,"\n"); - } - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - - /* Constants - *----------*/ - if(Varinfo[v].type == Z_CONSTANT) { - - constant_val = USERD_get_constant_value(vn); - fprintf(stderr," Constant (%s):\n",Varinfo[v].description); - fprintf(stderr," value: %g\n",constant_val); - } - - - /* Scalars, Vectors, Tensors - *--------------------------*/ - else { - - /* Get the var description line - *-----------------------------*/ - err = USERD_get_description_lines(Z_VARI,vn,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - else if(Varinfo[v].type == Z_TENSOR) { - num_comps = 6; - } - else if(Varinfo[v].type == Z_TENSOR9) { - num_comps = 9; - } - - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - } - - - fprintf(stderr," For part %d, with %d nodes:\n",pn,nsize); - - if(nsize > 0) { - values = (float *) calloc((num_comps * nsize),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - if(num_comps == 1) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_scalar_values(vn, - pn, - 0, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting scalar values\n"); - return(Z_ERR); - } - } - else { - err = USERD_get_block_scalar_values(pn, - vn, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block scalar values\n"); - return(Z_ERR); - } - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - for(i=0; i<nsize; ++i) { - if(values[i] < minv[0]) { - minv[0] = values[i]; - } - if(values[i] > maxv[0]) { - maxv[0] = values[i]; - } - } - - fprintf(stderr," node %10d value: %g\n",1,values[0]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize-1]); - fprintf(stderr," min value: %g\n",minv[0]); - fprintf(stderr," max value: %g\n",maxv[0]); - - } - - else if(num_comps == 3) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_vector_values(vn, - pn, - 0, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - } - else { - - tvalues = (float *) calloc(nsize,sizeof(float)); - if(tvalues == (float *) NULL) { - fprintf(stderr,"Error: alocating tvalues array\n"); - return(Z_ERR); - } - - for(i=0; i<3; ++i) { - err = USERD_get_block_vector_values_by_component(pn, - vn, - i, - tvalues); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - for(j=0; j<nsize; ++j) { - k = j*3 + i; - values[k] = tvalues[j]; - } - } - free(tvalues); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - minv[1] = maxv[1] = values[1]; - minv[2] = maxv[2] = values[2]; - for(i=0; i<nsize; ++i) { - j = i*3; - for(k=0; k<3; ++k) { - if(values[j+k] < minv[k]) { - minv[k] = values[j+k]; - } - if(values[j+k] > maxv[k]) { - maxv[k] = values[j+k]; - } - } - } - - fprintf(stderr," node %10d values: %g %g %g\n",1, - values[0],values[1],values[2]); - fprintf(stderr," node %10d values: %g %g %g\n",nsize, - values[3*nsize-3],values[3*nsize-2],values[3*nsize-1]); - fprintf(stderr," min values: %g %g %g\n", - minv[0],minv[1],minv[2]); - fprintf(stderr," max values: %g %g %g\n", - maxv[0],maxv[1],maxv[2]); - - } - free(values); - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - fprintf(stderr," For part %d, with %d elems of type %s:\n", - pn,nsize,Elem_info[et].name); - - values = (float *) calloc((num_comps * nsize),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - if(num_comps == 1) { - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_scalar_values(vn, - pn, - et, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting scalar values\n"); - return(Z_ERR); - } - } - else { - err = USERD_get_block_scalar_values(pn, - vn, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block scalar values\n"); - return(Z_ERR); - } - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - for(i=1; i<nsize; ++i) { - if(values[i] < minv[0]) { - minv[0] = values[i]; - } - if(values[i] > maxv[0]) { - maxv[0] = values[i]; - } - } - - fprintf(stderr," elem %10d value: %g\n",1,values[0]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize-1]); - fprintf(stderr," min value: %g\n",minv[0]); - fprintf(stderr," max value: %g\n",maxv[0]); - - } - - else if(num_comps == 3) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_vector_values(vn, - pn, - et, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - } - else { - - tvalues = (float *) calloc(nsize,sizeof(float)); - if(tvalues == (float *) NULL) { - fprintf(stderr,"Error: alocating tvalues array\n"); - return(Z_ERR); - } - - for(i=0; i<3; ++i) { - err = USERD_get_block_vector_values_by_component(pn, - vn, - i, - tvalues); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - for(j=0; j<nsize; ++j) { - k = j*3 + i; - values[k] = tvalues[j]; - } - } - free(tvalues); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - minv[1] = maxv[1] = values[1]; - minv[2] = maxv[2] = values[2]; - for(i=1; i<=nsize; ++i) { - j = i*3; - for(k=0; k<3; ++k) { - if(values[j+k] < minv[k]) { - minv[k] = values[j+k]; - } - if(values[j+k] > maxv[k]) { - maxv[k] = values[j+k]; - } - } - } - - fprintf(stderr," elem %10d values: %g %g %g\n",1, - values[0],values[1],values[2]); - fprintf(stderr," elem %10d values: %g %g %g\n",nsize, - values[3*nsize-3],values[3*nsize-2],values[3*nsize-1]); - fprintf(stderr," min values: %g %g %g\n", - minv[0],minv[1],minv[2]); - fprintf(stderr," max values: %g %g %g\n", - maxv[0],maxv[1],maxv[2]); - - } - free(values); - } - } - } - } - } - } - - return(Z_OK); -} - -#endif - - -#if (defined GT_USERD_API_202) - - -/*--------------- - * materials_info - *---------------*/ -static int -materials_info( void ) -{ - int i,j; - int err; - int *num_materials; - int *msids; - char **msname; - int *mids; - char **mdesc; - - - fprintf(stderr,"\n------------ materials_info --------------\n"); - - /* Get the number of variables - *----------------------------*/ - Num_materials_sets = USERD_get_number_of_material_sets(); - if(Num_materials_sets < 0) { - fprintf(stderr,"Error: getting the number of material sets\n"); - return(Z_ERR); - } - else { - if(Num_materials_sets == 0) { - fprintf(stderr," No materials sets in the model\n"); - return (Z_OK); - } - else if(Num_materials_sets > 1) { - fprintf(stderr," Number of materials sets: %d\n",Num_materials_sets); - fprintf(stderr," Currently, EnSight 7.6 only supports 1 material set\n"); - return(Z_ERR); - } - else { - fprintf(stderr," Number of materials sets: %d\n",Num_materials_sets); - } - } - - /* Get the material set index list and names - *------------------------------------------*/ - msids = (int *) calloc(Num_materials_sets,sizeof(int)); - if(msids == (int *)NULL) { - fprintf(stderr," Problems allocating for material set ids\n"); - return(Z_ERR); - } - - num_materials = (int *) calloc(Num_materials_sets,sizeof(int)); - if(num_materials == (int *)NULL) { - fprintf(stderr," Problems allocating for material set num materials\n"); - return(Z_ERR); - } - - msname = (char **) calloc(Num_materials_sets,sizeof(char *)); - if(msname == (char **)NULL) { - fprintf(stderr," Problems allocating for material set names\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_materials_sets; ++i) { - msname[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(msname[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for material set names\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_matf_set_info(msids,msname); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting material set info\n"); - } - else { - for(i=0; i<Num_materials_sets; ++i) { - - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Material set %d:\n",i+1); - - fprintf(stderr," id: %d\n",msids[i]); - fprintf(stderr," name: %s\n",msname[i]); - - num_materials[i] = USERD_get_number_of_materials(i); - if(num_materials[i] < 0) { - fprintf(stderr,"Error: getting the number of materials in set %d\n",i); - return (Z_ERR); - } - else if(num_materials[i] == 0) { - fprintf(stderr," No materials in Materials set %d\n",i); - return (Z_OK); - } - else { - mids = (int *) calloc(num_materials[i],sizeof(int)); - if(mids == (int *)NULL) { - fprintf(stderr," Problems allocating for material ids\n"); - return(Z_ERR); - } - - mdesc = (char **) calloc(num_materials[i],sizeof(char *)); - if(mdesc == (char **)NULL) { - fprintf(stderr," Problems allocating for material desc\n"); - return(Z_ERR); - } - else { - for(j=0; j<num_materials[i]; ++j) { - mdesc[j] = (char *) calloc(Z_BUFL,sizeof(char)); - if(mdesc[j] == (char *)NULL) { - fprintf(stderr," Problems allocating for material desc\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_matf_var_info(i,mids,mdesc); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting material info\n"); - } - else { - - for(j=0; j<num_materials[i]; ++j) { - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Material %d:\n",j+1); - - fprintf(stderr," index: %d\n",mids[j]); - fprintf(stderr," description: %s\n",mdesc[j]); - } - } - } - } - } - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<Num_materials_sets; ++i) { - free(msname[i]); - - for(j=0; j<num_materials[i]; ++j) { - free(mdesc[j]); - } - } - free(msname); - free(msids); - free(num_materials); - free(mdesc); - free(mids); - - return(Z_OK); -} - - -/*---------------------- - * gold_materials_loader - *----------------------*/ -static int -gold_materials_loader(int geom_time_step) -{ - int i, j, k, ms, nn; - int err, err1, err2; - int geom_timeset; - int p, pn; - int et, e1, e2; - int num_dims; - int comp; - int bdim[3]; - int ne; - int cell_type; - int bd1,bd2,bd3; - int *ivals; - float *fvals; - int do_num; - int mixed_present; - int matf_size, matfv_size; - - - fprintf(stderr,"\n-------------- materials_loader --------------\n"); - - if(Num_time_sets > 0) { - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_timeset = USERD_get_geom_timeset_number(); - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(geom_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Num time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(geom_timeset,geom_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - geom_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",geom_time_step); - } - - for(ms=0; ms<Num_materials_sets; ++ms) { - fprintf(stderr,"\n"); - fprintf(stderr," Materials Set %d:\n",ms+1); - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - e1 = 0; - e2 = Z_MAXTYPE; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - e1 = cell_type; - e2 = cell_type + 1; - } - - - for(et=e1; et<e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - ne = Pbuild[p].ne[et]; - } - - if(ne > 0) { - - /* Get the material ids, if any - *-----------------------------*/ - err = USERD_size_matf_data(ms, - pn, - et, - Z_MAT_INDEX, - &matf_size); - if(err == Z_OK && matf_size > 0) { - - - /* Go get the material ids - *------------------------*/ - ivals = (int *) calloc(matf_size,sizeof(int)); - if(ivals == (int *)NULL) { - fprintf(stderr," Problems allocating for material ids\n"); - return(Z_ERR); - } - err = USERD_load_matf_data(ms, - pn, - et, - Z_MAT_INDEX, - ivals, - fvals); - if(err == Z_OK) { - if(matf_size < 20) { - fprintf(stderr," Printing all mat ids for %s elements\n", - Elem_info[et].name); - do_num = matf_size; - } - else { - fprintf(stderr," Printing first 20 mat ids for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - - /* See if any mixed materials - *---------------------------*/ - mixed_present = FALSE; - for(k=0; k<matf_size; ++k) { - if(ivals[k] < 0) { - mixed_present = TRUE; - break; - } - } - - /* Feedback - *---------*/ - for(k=0; k<do_num; ++k) { - fprintf(stderr," mat id[%d] = %d\n",k,ivals[k]); - } - free(ivals); - } - else { - fprintf(stderr," Trouble getting mat ids for %s elements\n", - Elem_info[et].name); - free(ivals); - return(Z_ERR); - } - } - else { - fprintf(stderr," %s elements have no material ids\n", - Elem_info[et].name); - } - - - /* Get the mixed material ids, if any - *-----------------------------------*/ - if(mixed_present) { - err1 = USERD_size_matf_data(ms, - pn, - et, - Z_MIX_INDEX, - &matf_size); - err2 = USERD_size_matf_data(ms, - pn, - et, - Z_MIX_VALUE, - &matfv_size); - - if(err1 == Z_OK && - err2 == Z_OK && - matf_size > 0 && - matfv_size > 0) { - - /* Go get the material ids - *------------------------*/ - ivals = (int *) calloc(matf_size,sizeof(int)); - if(ivals == (int *)NULL) { - fprintf(stderr," Problems allocating for mixed material ids\n"); - return(Z_ERR); - } - fvals = (float *) calloc(matfv_size,sizeof(float)); - if(fvals == (float *)NULL) { - fprintf(stderr," Problems allocating for mixed material values\n"); - return(Z_ERR); - } - - err1 = USERD_load_matf_data(ms, - pn, - et, - Z_MIX_INDEX, - ivals, - fvals); - - err2 = USERD_load_matf_data(ms, - pn, - et, - Z_MIX_VALUE, - ivals, - fvals); - if(err1 == Z_OK && - err2 == Z_OK) { - if(matf_size < 20) { - fprintf(stderr," Printing all mixed mat ids for %s elements\n", - Elem_info[et].name); - do_num = matf_size; - } - else { - fprintf(stderr," Printing first 20 mixed mat ids for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - for(k=0; k<do_num; ++k) { - fprintf(stderr," mixed mat id[%d] = %d\n",k,ivals[k]); - } - free(ivals); - - if(matfv_size < 20) { - fprintf(stderr," Printing all mixed mat values for %s elements\n", - Elem_info[et].name); - do_num = matfv_size; - } - else { - fprintf(stderr," Printing first 20 mixed mat values for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - for(k=0; k<do_num; ++k) { - fprintf(stderr," mixed mat val[%d] = %f\n",k,fvals[k]); - } - free(fvals); - } - else { - fprintf(stderr," Trouble getting mixed mat ids or vals for %s elements\n", - Elem_info[et].name); - free(ivals); - free(fvals); - return(Z_ERR); - } - } - else { - fprintf(stderr," Trouble getting mixed mat sizes for %s elements\n", - Elem_info[et].name); - return(Z_ERR); - } - } - else { - fprintf(stderr," (%s elements have no mixed material ids)\n", - Elem_info[et].name); - } - } - } - } - } - return(Z_OK); -} - -#endif - -/*-------------- - * entity_querys - *--------------*/ -static int -entity_querys(int var_time_step) -{ - int i, j; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float qvals[3]; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n-------------- entity_querys ------------\n"); - fprintf(stderr," (scalar & vector variables only) \n"); - fprintf(stderr,"\n"); - -#if (defined USERD_API_100) - - if(Num_time_steps > 1) { - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_step(var_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d)\n\n", - var_time_step,0,Num_time_steps-1); - } -#endif - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - /* Scalar or vectors only - *-----------------------*/ - if(Varinfo[v].type == Z_SCALAR || Varinfo[v].type == Z_VECTOR) { - - - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - -#if (defined GT_USERD_API_100) - - if(Num_time_sets > 0) { - /* Get the timeset used for the variable - *---------------------------------------*/ - var_timeset = Varinfo[v].timeset; - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(var_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n", - Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(var_timeset,var_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - var_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",var_time_step); - } -#endif - - - /* Get the var description line - *-----------------------------*/ -#if (defined GT_USERD_API_100) - err = USERD_get_descrip_lines(Z_VARI,vn,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - if(Varinfo[v].complex) { - err = USERD_get_descrip_lines(Z_VARI,vn,TRUE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line (imag): %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line (imag)\n"); - return(Z_ERR); - } - } -#else - - err = USERD_get_description_lines(Z_VARI,vn,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - -#endif - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - } - - - - if(nsize > 0) { - - fprintf(stderr," For part %d, using node %d:\n",pn,nsize); - -#if (defined GT_USERD_API_100) - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals, - FALSE); -#else - err = USERD_get_variable_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals); -#endif - if(err == Z_NOT_IMPLEMENTED) { - fprintf(stderr," Node and element queries not implemented\n"); - return(Z_OK); - } - else if(err == Z_ERR) { - fprintf(stderr," Could not get value\n"); - } - else { - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - -#if (defined GT_USERD_API_100) - if(Varinfo[v].complex) { - - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals, - TRUE); - - if(err == Z_ERR) { - fprintf(stderr," Could not get imag value\n"); - } - else { - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value (imag) is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values (imag) are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - } - } -#endif - - } - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - - fprintf(stderr," For part %d, using elem %d of type %s:\n", - pn,nsize,Elem_info[et].name); - - -#if (defined GT_USERD_API_100) - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals, - FALSE); -#else - err = USERD_get_variable_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals); -#endif - - if(err == Z_NOT_IMPLEMENTED) { - fprintf(stderr," Node and element queries not implemented\n"); - return(Z_OK); - } - else if(err == Z_ERR) { - fprintf(stderr," Could not get value\n"); - } - else { - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - -#if (defined GT_USERD_API_100) - if(Varinfo[v].complex) { - - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals, - TRUE); - if(err == Z_ERR) { - fprintf(stderr," Could not get imag value\n"); - } - else { - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value (imag) is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values (imag) are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - } - } -#endif - } - } - } - } - } - } - } - - return(Z_OK); -} - - -/*-------------- - * exercise_bkup - *--------------*/ -static int -exercise_bkup( void ) -{ - int err; - FILE *arcfile; - - fprintf(stderr,"\n------------ exercise_archive -----------\n"); - - arcfile = fopen("test.arc","wb"); - if(arcfile == (FILE *)NULL) { - fprintf(stderr,"Error: opening test archive file\n"); - return(Z_ERR); - } - err = USERD_bkup(arcfile,Z_SAVE_ARCHIVE); - if(err == Z_ERR) { - fprintf(stderr,"Error: saving to test archive file\n"); - return(Z_ERR); - } - fclose(arcfile); - - arcfile = fopen("test.arc","rb"); - err = USERD_bkup(arcfile,Z_REST_ARCHIVE); - if(err == Z_ERR) { - fprintf(stderr,"Error: restoring from test archive file\n"); - return(Z_ERR); - } - - fprintf(stderr," Archive test completed\n"); - - fclose(arcfile); - - return(Z_OK); -} - -/* ------------------------------------------------------- - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ------------------------------------------------------ */ -int load_fail_defaults(void) -{ - int check_for_failed = FALSE; - int cri1 = 0; /* Criteria1 ELE_FAILED_GREATER, etc */ - int cri2 = 0; - int logic_cri2 = 0; /* Logic for criteria 2 ELE_FAILED_LOGIC_NONE, AND, etc */ - float val1 = 0.0; /* failure threshold 1 */ - float val2= 0.0; /* failure threshold 2 */ - char failed_var_name[Z_MXVARIABLEDESC]={EOS}; - - check_for_failed = USERD_get_uns_failed_params( failed_var_name, - &val1, &val2, &cri1, &cri2, - &logic_cri2 ); - if (check_for_failed == TRUE) { - fprintf(stderr,"Failed element criteria info \n"); - fprintf(stderr,"Variable name = %s\n",failed_var_name); - fprintf(stderr,"Criteria 1 = %d\n",cri1); - fprintf(stderr,"Criteria 2 = %d\n",cri1); - fprintf(stderr,"Logic criteria = %d\n",logic_cri2); - fprintf(stderr,"Value 1 = %f\n",val1); - fprintf(stderr,"Value 2 = %f\n",val2); - } else { - fprintf(stderr,"No Failed elements\n"); - } - return(Z_OK); -} - - -/* End of File */ diff --git a/applications/test/ensightFoamReader/udr_checker-90.c b/applications/test/ensightFoamReader/udr_checker-90.c deleted file mode 100644 index c3197bf8e9a810a3f02d7c120b8512db96336671..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/udr_checker-90.c +++ /dev/null @@ -1,5884 +0,0 @@ -/*---------------------------------- - * User Defined Reader - checker - *----------------------------------*/ - -/******************************************************************** - * - * **************************************** - * Copyright 2004 Computational Engineering International, Inc. - * All Rights Reserved. - * - * Restricted Rights Legend - * - * Use, duplication, or disclosure of this - * software and its documentation by the - * Government is subject to restrictions as - * set forth in subdivision [(b)(3)(ii)] of - * the Rights in Technical Data and Computer - * Software clause at 52.227-7013. - *******************************************************************/ - -/*---------------------------------------------------------------------- - * MAJOR ROUTINES ACCESS: (VERSION 2.00) Gold_Userd API - * - * Get the name of the reader - * ========================== - * USERD_get_name_of_reader - * USERD_get_extra_gui_numbers (optional) - * USERD_get_extra_gui_defaults (optional) - * - * Get the reader version - * ====================== - * USERD_get_reader_version - * - * Set the filenames, gather timeset and time info - * =============================================== - * USERD_set_extra_gui_data (optional) - * USERD_set_server_number - * USERD_set_filenames - * USERD_get_number_of_timesets - * USERD_get_geom_timeset_number - * - * for each timeset: - * USERD_get_timeset_description - * USERD_get_num_of_time_steps - * USERD_get_sol_times - * - * USERD_set_time_set_and_step - * - * - * Gather variable and time info - * ============================= - * USERD_get_number_of_variables - * USERD_get_gold_variable_info - * - * - * Get initial part building info - * ============================== - * USERD_set_time_set_and_step - * USERD_get_changing_geometry_status - * USERD_get_node_label_status - * USERD_get_element_label_status - * USERD_get_number_of_files_in_dataset - * USERD_get_dataset_query_file_info - * USERD_get_descrip_lines (geometry) - * USERD_get_number_of_model_parts - * USERD_get_gold_part_build_info - * USERD_get_ghosts_in_model_flag - * USERD_get_maxsize_info - * USERD_get_ghosts_in_block_flag (if any ghost cells in model) - * USERD_get_model_extents **OR** - * USERD_get_part_coords **AND/OR** - * USERD_get_block_coords_by_component - * - * - * - * Part Builder - * ============ - * - * both unstructured and structured - * -------------------------------- - * USERD_set_time_set_and_step - * - * if unstructured - * --------------- - * USERD_get_part_element_ids_by_type - * USERD_get_part_elements_by_type - * - * if any nsided elements: - * USERD_get_nsided_conn - * - * if any nfaced elements: - * USERD_get_nfaced_nodes_per_face - * USERD_get_nfaced_conn - * - * USERD_get_part_coords - * USERD_get_part_node_ids - * - * else if structured - * ------------------ - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * USERD_get_block_ghost_flags - * USERD_get_part_node_ids (If node ids given) - * USERD_get_part_element_ids_by_type (If element ids given) - * - * both again - * ---------- - * USERD_get_border_availability (If border representation - * USERD_get_border_elements_by_type is selected) - * - * USERD_stop_part_building - * - * - * Changing geometry - * ================= - * - * changing coords only - * -------------------- - * USERD_set_time_set_and_step - * USERD_get_descrip_lines - * USERD_get_part_coords - * USERD_get_block_coords_by_component - * - * changing connectivity - * --------------------- - * USERD_set_time_set_and_step - * USERD_get_descrip_lines - * USERD_get_number_of_model_parts - * USERD_get_gold_part_build_info - * USERD_get_ghosts_in_model_flag - * USERD_get_ghosts_in_block_flag (If any ghost cells in model) - * USERD_get_model_extents **OR** - * USERD_get_part_coords **AND/OR** - * USERD_get_block_coords_by_component - * USERD_get_part_element_ids_by_type - * USERD_get_part_elements_by_type - * USERD_get_part_coords - * USERD_get_part_node_ids - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * USERD_get_block_ghost_flags (If ghost cells in part) - * USERD_get_part_node_ids (If node ids given) - * USERD_get_part_element_ids_by_type (If element ids given) - * - * USERD_get_border_availability (If border representation - * USERD_get_border_elements_by_type is selected) - * - * - * Loading Variables - * ================== - * - * constants - * --------- - * USERD_set_time_set_and_step - * USERD_get_constant_val - * - * scalars/vectors/tensors - * ----------------------- - * USERD_get_description_lines - * USERD_set_time_set_and_step - * USERD_get_var_by_component - * - * - * Node or Element queries over time - * ================================= - * USERD_get_var_value_at_specific - * - * - * At 2.03, added: - * --------------- - * - * Materials - * ========= - * USERD_get_number_of_material_sets - * USERD_get_matf_set_info - * - * If any material sets in the model (calls once per material set) - * USERD_get_number_of_materials - * USERD_get_matf_var_info - * - * For each element type of each part containing material ids - * USERD_size_matf_data - * USERD_load_matf_data - * - * - * At 2.04, added: - * --------------- - * USERD_get_uns_failed_params - Sets params used in element failure - * - * - *----------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------- - * MAJOR ROUTINES ACCESS: (Version 1.00) original API - * - * Get the name of the reader - * ========================== - * USERD_get_name_of_reader - * USERD_get_extra_gui_numbers (optional -extra_gui on command line) - * USERD_get_extra_gui_defaults (optional -extra_gui on command line) - * - * Set the filenames - * ================= - * USERD_set_extra_gui_data (optional -extra_gui on command line) - * USERD_set_filenames - * USERD_get_number_of_time_steps - * USERD_get_solution_times - * USERD_set_time_step - * - * - * Gather variable and time info - * ============================= - * USERD_get_number_of_variables - * USERD_get_variable_info - * - * - * Get initial part building info - * ============================== - * USERD_set_time_step - * USERD_get_changing_geometry_status - * USERD_get_node_label_status - * USERD_get_element_label_status - * USERD_get_number_of_files_in_dataset - * USERD_get_dataset_query_file_info - * USERD_get_description_lines (geometry) - * USERD_get_number_of_model_parts - * USERD_get_part_build_info - * USERD_get_number_global_nodes - * USERD_get_global_coords - * USERD_get_block_coords_by_component - * - * Failure Info - * ============ - * USERD_get_uns_failed_params - * - * - * Part Builder - * ============ - * USERD_set_time_step - * USERD_get_global_coords - * USERD_get_global_node_ids - * USERD_get_element_connectivities_for_part - * USERD_get_element_ids_for_part - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * - * USERD_stop_part_building - * - * - * Changing geometry - * ================= - * - * changing coords only - * -------------------- - * USERD_set_time_step - * USERD_get_global_coords - * USERD_get_block_coords_by_component - * - * changing connectivity - * --------------------- - * USERD_set_time_step - * USERD_get_number_of_model_parts - * USERD_get_part_build_info - * USERD_get_number_global_nodes - * USERD_get_global_coords - * USERD_get_global_node_ids - * USERD_get_element_connectivities_for_part - * USERD_get_element_ids_for_part - * USERD_get_block_iblanking - * USERD_get_block_coords_by_component - * - * Loading Variables - * ================= - * - * constants: - * ---------- - * USERD_set_time_step - * USERD_get_constant_value - * - * scalars: - * -------- - * USERD_get_description_lines - * USERD_set_time_step - * USERD_get_scalar_values - * USERD_get_block_scalar_values - * - * vectors: - * -------- - * USERD_get_description_lines - * USERD_set_time_step - * USERD_get_vector_values - * USERD_get_block_vector_values_by_component - * - * - * Node or Element queries over time - * ================================= - * USERD_get_variable_value_at_specific - * - *----------------------------------------------------------------------*/ -#include <stdio.h> -#include <stdlib.h> -#ifndef WIN32 -#include <unistd.h> -#endif -#include <string.h> -#include <ctype.h> -#include <sys/types.h> -#ifndef CONVEX -#include <malloc.h> -#endif -#include <math.h> - -#include "global_extern.h" - -/* ----------------------------------------------- - * If you wish to test out various optional routines - * you must uncomment the proper #define below - * - * #define _EGS is for extra_gui routines - * #define _VES is for var_extract_gui routines - *---------------------------------------------------*/ -/* #define _EGS */ -/* #define _VES */ - - -#if (defined USERD_API_209) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 -#define GT_USERD_API_204 -#define GT_USERD_API_205 -#define GT_USERD_API_206 -#define GT_USERD_API_207 -#define GT_USERD_API_208 - -#elif (defined USERD_API_208) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 -#define GT_USERD_API_204 -#define GT_USERD_API_205 -#define GT_USERD_API_206 -#define GT_USERD_API_207 - -#elif (defined USERD_API_207) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 -#define GT_USERD_API_204 -#define GT_USERD_API_205 -#define GT_USERD_API_206 - -#elif (defined USERD_API_206) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 -#define GT_USERD_API_204 -#define GT_USERD_API_205 - -#elif (defined USERD_API_205) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 -#define GT_USERD_API_204 - -#elif (defined USERD_API_204) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 -#define GT_USERD_API_203 - -#elif (defined USERD_API_203) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 -#define GT_USERD_API_202 - -#elif (defined USERD_API_202) -#define GT_USERD_API_100 -#define GT_USERD_API_200 -#define GT_USERD_API_201 - -#elif (defined USERD_API_201) -#define GT_USERD_API_100 -#define GT_USERD_API_200 - -#elif (defined USERD_API_200) -#define GT_USERD_API_100 -#endif - - -#define EOS '\0' - -typedef struct { - int id; /* part_id */ - char desc[Z_BUFL]; /* description given in the file */ - int type; /* Z_UNSTRUCTURED, Z_STRUCTURED, Z_IBLANKED */ - int ne[Z_MAXTYPE]; /* Number of elements per type (Z_UNSTRUCTURED) */ - /* or ne[0] = I dimension (Z_STRUCTURED) */ - /* ne[1] = J dimension */ - /* ne[2] = K dimension */ - int nn; /* Num of unstructured nodes (All_Local only) */ - int ghosts; /* TRUE if ghost cells, FALSE otherwise */ -}BUILDINFO; - -typedef struct { - char description[Z_BUFL]; /* description */ - char filename[Z_BUFL]; /* real filename */ - char ifilename[Z_BUFL]; /* imaginary filename */ - int type; - int classify; - int complex; - float freq; - int contran; - int timeset; -}VARINFO; - - -typedef struct { - char name[12]; /* Z_POINT, Z_G_POINT, Z_BAR02, ... */ - int con_len; /* Number of nodes per element */ -}EINFO; - - -/* Global variables - *-----------------*/ -int Geom_status; -int Node_labels; -int Element_labels; -int Ghosts_in_model; -int Num_parts; -int Num_vars; -int Num_materials_sets; -BUILDINFO *Pbuild; -VARINFO *Varinfo; -char Version_number[Z_MAX_USERD_NAME]; -int Num_time_sets; -int Num_time_steps; - -/* ------------------ - * Extra GUI stuff - * ------------------ */ -int Num_toggles = 0; -int Num_pulldowns = 0; -int Num_fields = 0; -char **Toggle_title; -int *Toggle_default_status; -char **Pulldown_title; -int *Pulldown_number_in_list; -int *Pulldown_default_selection; -char ***Pulldown_item_strings; -char **Field_title; -char **Field_user_string; -int *Toggle_choice; /* user choice */ -int *Pulldown_choice; /* user choice */ - -/* ------------------ - * Var Extract stuff - * ------------------ */ -int Num_ve_toggles = 0; -int Num_ve_pulldowns = 0; -int Num_ve_fields = 0; -char **Toggle_ve_title; -int *Toggle_ve_default_status; -char **Pulldown_ve_title; -int *Pulldown_ve_number_in_list; -int *Pulldown_ve_default_selection; -char ***Pulldown_ve_item_strings; -char **Field_ve_title; -char **Field_ve_user_string; -int *Toggle_ve_choice; /* user choice */ -int *Pulldown_ve_choice; /* user choice */ - -/* --------------------------- - * Failed elements (API 2.04) - * --------------------------- */ -int Any_uns_failed_model_elems = FALSE; - -/* --------------------------- - * Rigidbody (API 2.05) - * --------------------------- */ -int Any_Rigid_Body_Present = FALSE; - -/* --------------------------- - * Structured Reader Cinching (API 2.06) - * --------------------------- */ -int Doing_Structured_Cinching = FALSE; - - - -#if (defined USERD_API_100 || defined USERD_API_200) -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT",1, - "Z_BAR02",2, - "Z_BAR03",3, - "Z_TRI03",3, - "Z_TRI06",6, - "Z_QUA04",4, - "Z_QUA08",8, - "Z_TET04",4, - "Z_TET10",10, - "Z_PYR05",5, - "Z_PYR13",13, - "Z_PEN06",6, - "Z_PEN15",15, - "Z_HEX08",8, - "Z_HEX20",20}; -#elif defined USERD_API_201 -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT", 1, - "Z_G_POINT",1, - "Z_BAR02", 2, - "Z_G_BAR02",2, - "Z_BAR03", 3, - "Z_G_BAR03",3, - "Z_TRI03", 3, - "Z_G_TRI03",3, - "Z_TRI06", 6, - "Z_G_TRI06",6, - "Z_QUA04", 4, - "Z_G_QUA04",4, - "Z_QUA08", 8, - "Z_G_QUA08",8, - "Z_TET04", 4, - "Z_G_TET04",4, - "Z_TET10", 10, - "Z_G_TET10",10, - "Z_PYR05", 5, - "Z_G_PYR05",5, - "Z_PYR13", 13, - "Z_G_PYR13",13, - "Z_PEN06", 6, - "Z_G_PEN06",6, - "Z_PEN15", 15, - "Z_G_PEN15",15, - "Z_HEX08", 8, - "Z_G_HEX08",8, - "Z_HEX20", 20, - "Z_G_HEX20",20}; -#else -EINFO Elem_info[Z_MAXTYPE] = {"Z_POINT", 1, - "Z_G_POINT",1, - "Z_BAR02", 2, - "Z_G_BAR02",2, - "Z_BAR03", 3, - "Z_G_BAR03",3, - "Z_TRI03", 3, - "Z_G_TRI03",3, - "Z_TRI06", 6, - "Z_G_TRI06",6, - "Z_QUA04", 4, - "Z_G_QUA04",4, - "Z_QUA08", 8, - "Z_G_QUA08",8, - "Z_TET04", 4, - "Z_G_TET04",4, - "Z_TET10", 10, - "Z_G_TET10",10, - "Z_PYR05", 5, - "Z_G_PYR05",5, - "Z_PYR13", 13, - "Z_G_PYR13",13, - "Z_PEN06", 6, - "Z_G_PEN06",6, - "Z_PEN15", 15, - "Z_G_PEN15",15, - "Z_HEX08", 8, - "Z_G_HEX08",8, - "Z_HEX20", 20, - "Z_G_HEX20",20, - "Z_NSIDED", 1, /* Not yet implemented */ - "Z_G_NSIDED",1, /* Not yet implemented */ - "Z_NFACED", 1, /* Not yet implemented */ - "Z_G_NFACED",1}; /* Not yet implemented */ -#endif - - -/* Prototypes - *-----------*/ -static int load_fail_defaults(void); -static int prelim_info(int *two_fields, - int *any_extra_gui, - int *any_var_extract); -static int get_input(int set_server_number, - int use_playfile, - char playfile[Z_MAXFILENP], - int two_fields, - int any_extra_gui, - int any_var_extract, - int *swapbytes); -static int time_info( void ); -static int part_build_info(int geom_time_step); -static int variable_info( void ); - -#if (defined GT_USERD_API_100) -static int gold_part_builder(int geom_time_step); -static int gold_var_loader(int var_time_step); -#else -static int part_builder(int geom_time_step); -static int var_loader(int var_time_step); -#endif - -#if (defined GT_USERD_API_100) -static int materials_info( void ); -static int gold_materials_loader(int geom_time_step); -#endif - -static int entity_querys(int var_time_step); -static int exercise_bkup( void ); -static void usage( void ); - - -/*============= - * Main Routine - *=============*/ -#ifdef WIN32 -int main(int argc, char *argv[]) -#else -int main(int argc, char *argv[]) -#endif -{ - /* Command line option variables - *------------------------------*/ - int set_server_number = FALSE; - int use_playfile = FALSE; - char playfile[Z_MAXFILENP]; - FILE *fplay; - int geom_time_step = 0; - int var_time_step = 0; - - /* Other local variables - *----------------------*/ - int i, j; - int err; - int two_fields; - int any_extra_gui = FALSE; - int any_var_extract = FALSE; - int swapbytes; - int indx; - - /*---------------------------- - * Command argument processing - *----------------------------*/ - fprintf(stderr,"\n"); - fprintf(stderr,"\n"); - fprintf(stderr,"********************************************\n"); - fprintf(stderr,"* EnSight User Defined Reader Debug Tool *\n"); - fprintf(stderr,"********************************************\n"); - fprintf(stderr,"\n"); - - indx = 1; - while(indx < argc) { - - if(!strcmp("-h",argv[indx])) { - usage(); - } - else if(!strcmp("-help",argv[indx])) { - usage(); - } - - /* if you want to test the server number routines - * - * Use: - * > checker -server_number - * - * You will then be prompted for the current and total - * number of servers - *-----------------------------------------------*/ - else if(!strcmp("-server_number",argv[indx])) { - set_server_number = TRUE; - } - - /* if you want to use a "playfile" instead of being prompted - * for the data loader information - * - * Use: - * > checker -p <playfile> - * - * This playfile should have 3 [or 4] lines: - * line 1: the path - * line 2: filename_1 - * line 3: [filename_2] (if two_fields is TRUE) - * line 4: 0 or 1, for swapytes (0 is FALSE, 1 is TRUE) - * - * example (two_fields is FALSE, so only 3 lines): - * - * /usr/scratch/stealth/bjn/dat/sp_gold/binary - * simple.case - * 1 - * - *------------------------------------------------------*/ - else if(!strcmp("-p",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - use_playfile = TRUE; - memset(playfile,EOS,Z_MAXFILENP); - strcpy(playfile,argv[indx]); - } - else { - usage(); - } - } - - /* if you want to specify the geometry timestep to test (default is step 0) - * - * Use: - * > checker -gts # - * - * Where # is the step number (zero based) - *-------------------------------------------------------------------------*/ - else if(!strcmp("-gts",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - geom_time_step = atoi(argv[indx]); - } - else { - usage(); - } - } - - /* if you want to specify the variable timestep to test (default is step 0) - * (will use this step for the appropriate timeset of each variable) - * - * Use: - * > checker -vts # - * - * Where # is the step number (zero based) - *-------------------------------------------------------------------------*/ - else if(!strcmp("-vts",argv[indx])) { - indx++; - if((indx < argc) && (argv[indx][0] != '-')) { - var_time_step = atoi(argv[indx]); - } - else { - usage(); - } - } - else { - usage(); - } - - indx++; - } - - - /*------------------------------------------------------------- - * - * Now start exercising EnSight - * - *--------------------------------------------------------------*/ - - /*----------------- - * Preliminary info - *-----------------*/ - err = prelim_info(&two_fields,&any_extra_gui,&any_var_extract); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in prelim_info\n"); - exit(1); - } - - - /*------------------ - * User input needed - *------------------*/ - err = get_input(set_server_number, - use_playfile, - playfile, - two_fields, - any_extra_gui, - any_var_extract, - &swapbytes); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in get_input\n"); - exit(1); - } - - - /*---------- - * Time info - *----------*/ - err = time_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in time_info\n"); - exit(1); - } - - - /*---------------- - * Part build info - *----------------*/ - err = part_build_info(geom_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in part_build_info\n"); - exit(1); - } - - - /*------------------ - * Get Variable Info - *------------------*/ - err = variable_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in variable_info\n"); - exit(1); - } - - -#if (defined GT_USERD_API_202) - /*------------------- - * Get Materials Info - *-------------------*/ - err = materials_info(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in materials_info\n"); - exit(1); - } -#endif - -#if (defined GT_USERD_API_203) - if (Z_ERR == load_fail_defaults()) { - fprintf(stderr,"Stopping due to error in failed element flag routine\n"); - exit(1); - } -#endif - -#if (defined GT_USERD_API_204) - - /*----------------------------------------------- - * Mel needs to do these species routines yet!!! - *----------------------------------------------*/ - /* USERD_get_matsp_info - USERD_get_number_of_species */ - - - /* See if any rigid body in model - *-------------------------------*/ - fprintf(stderr,"\n------------- rigid body existence -------------\n"); - if(USERD_rigidbody_existence() == Z_OK) { - fprintf(stderr," Rigid Body values exist in the model\n"); - Any_Rigid_Body_Present = TRUE; - } - else { - fprintf(stderr," N0 Rigid Body values exist in the model\n"); - } - -#endif - - -#if (defined GT_USERD_API_205) - - /* See if doing structured cinching - *---------------------------------*/ - fprintf(stderr,"\n------------- structured reader cinching existence -------------\n"); - if(USERD_get_structured_reader_cinching() == Z_OK) { - fprintf(stderr," Doing structured reader cinching\n"); - fprintf(stderr," for each of the i,j,k directions,\n"); - fprintf(stderr," will send in min and max unchanged, but\n"); - fprintf(stderr," will send in stride as 2\n"); - Doing_Structured_Cinching = TRUE; - } - else { - fprintf(stderr," NOT doing structured reader cinching\n"); - } -#endif - -#if (defined GT_USERD_API_206) - - /* Probably won't do either of these - trivial - *--------------------------------------------*/ - /* USERD_prefer_auto_distribute <optional> */ - /* USERD_set_filename_button_labels <optional> */ -#endif - - -#if (defined GT_USERD_API_207) - - /* If we choose to do these, Bruce should implement them - *------------------------------------------------------*/ - /* All the _buffer routines! <optional> */ - - /* If we choose to do these, Bill should implement them - *-----------------------------------------------------*/ - /* USERD_get_num_xy_queries <optional> - USERD_get_xy_query_data <optional> - USERD_get_xy_query_info <optional> */ - -#endif - -#if (defined GT_USERD_API_208) - - /* If we choose to do these, Bruce should implement them - *------------------------------------------------------*/ - /* VGLYPH routines <optional> */ -#endif - - /*------------------------ - * Act like building parts - *------------------------*/ - if(Num_parts > 0) { - -#if (defined GT_USERD_API_100) - err = gold_part_builder(geom_time_step); -#else - err = part_builder(geom_time_step); -#endif - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in part_builder\n"); - exit(1); - } - else { - USERD_stop_part_building(); - } - } - - - /*--------------------------- - * Act like loading variables - *---------------------------*/ - if(Num_vars > 0) { - -#if (defined GT_USERD_API_100) - err = gold_var_loader(var_time_step); -#else - err = var_loader(var_time_step); -#endif - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in var_loader\n"); - exit(1); - } - } - -#if (defined GT_USERD_API_202) - /*--------------------------- - * Act like loading materials - *---------------------------*/ - if(Num_materials_sets > 0) { - err = gold_materials_loader(geom_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in materials_loader\n"); - exit(1); - } - } -#endif - - - - /*---------------------------------------------------- - * See if can do node and/or element queries over time - *----------------------------------------------------*/ - if(Num_parts > 0 && - Num_vars > 0) { - err = entity_querys(var_time_step); - if(err == Z_ERR) { - fprintf(stderr,"Stopping because of error in entity_querys\n"); - exit(1); - } - } - - /*---------------------------------------- - * Call the bkup file once in save mode, - * then again in restore mode - so someone - * could debug if desired - *----------------------------------------*/ - err = exercise_bkup(); - if(err == Z_ERR) { - fprintf(stderr,"Stopping due to error in saving and/or restoring archive\n"); - exit(1); - } - - /*------------- - * Exit Routine - *-------------*/ - fprintf(stderr,"\n----------------- exiting ---------------\n"); - -#if (defined GT_USERD_API_100) - USERD_exit_routine(); -#endif - - fprintf(stderr,"\n\n"); - - return(0); -} - -/*-------------- - * Usage routine - *--------------*/ -static void -usage( void ) -{ - fprintf(stderr,"------------------------------------------------------------\n"); - fprintf(stderr,"USAGE: checker [-p pfile] [-server_number] [-gts #] [-vts #]\n"); - fprintf(stderr,"------------------------------------------------------------\n"); - fprintf(stderr," -h, -help Prints out this USAGE text.\n"); - fprintf(stderr," -gts # Specify the geometry time step to use.)\n"); - fprintf(stderr," -p pfile Plays the checker playfile (pfile).\n"); - fprintf(stderr," -server_number Cause servers numbers to be prompted for.\n"); - fprintf(stderr," -vts # Specify the variable time step to use.)\n"); - fprintf(stderr,"\n"); - exit(1); -} - - - - -/*------------ - * prelim_info - *------------*/ -static int -prelim_info(int *two_fields, int *any_extra_gui, int *any_var_extract) -{ - int err; - char reader_name[Z_MAX_USERD_NAME]; - char release_number[Z_MAX_USERD_NAME]; - char description[Z_MAXFILENP]; - int i,j; - - *any_extra_gui = FALSE; - *any_var_extract = FALSE; - - /* Get the reader name - *--------------------*/ - err = USERD_get_name_of_reader(reader_name,two_fields); - if(err == Z_OK) { - fprintf(stderr," Name of reader: %s\n",reader_name); - if(*two_fields==1) { - fprintf(stderr," two_fields: TRUE\n"); - } - else if(*two_fields==0){ - fprintf(stderr," two_fields: FALSE\n"); - } - else if(*two_fields < 0) { - fprintf(stderr," two_fields: -1 (optional string) \n"); - } - } - else { - fprintf(stderr,"Error: Could not get name of reader\n"); - return(Z_ERR); - } - - /* Get the Extra GUI stuff (optional) - * ---------------------------------------------------------- */ -#ifdef _EGS - - /* Get the Extra GUI numbers of toggles, pulldowns, & fields - * ---------------------------------------------------------- */ - - USERD_get_extra_gui_numbers( &Num_toggles, - &Num_pulldowns, - &Num_fields ); - - if ( Num_toggles > 0 || Num_pulldowns > 0 || Num_fields > 0 ) { - - *any_extra_gui = TRUE; - - if (Num_toggles>0) { - Toggle_title = (char **) calloc(Num_toggles,sizeof(char*)); - if (Toggle_title == (char **)NULL) return(Z_ERR); - for (i=0; i<Num_toggles; i++) { - Toggle_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Toggle_title[i] == (char *)NULL ) return(Z_ERR); - } - Toggle_default_status = (int *) calloc(Num_toggles,sizeof(int)); - Toggle_choice = (int *) calloc(Num_toggles,sizeof(int)); - } - - if (Num_pulldowns > 0) { - Pulldown_title = (char **) calloc( Num_pulldowns , sizeof(char*) ); - if (Pulldown_title == (char **)NULL) return(Z_ERR); - - Pulldown_item_strings = (char ***) calloc( Num_pulldowns , sizeof(char**) ); - if (Pulldown_item_strings == (char ***)NULL) return(Z_ERR); - - for (i=0; i<Num_pulldowns; i++) { - Pulldown_title[i] = (char *) calloc( Z_LEN_GUI_TITLE_STR , sizeof(char) ); - if ( Pulldown_title[i] == (char *)NULL ) return(Z_ERR); - - Pulldown_item_strings[i] = (char **) calloc( Z_MAX_NUM_GUI_PULL_ITEMS , sizeof(char *) ); - if (Pulldown_item_strings[i] == (char **)NULL) return(Z_ERR); - - for(j = 0; j < Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - Pulldown_item_strings[i][j] = (char *) calloc( Z_LEN_GUI_PULL_STR , sizeof(char) ); - if ( Pulldown_item_strings[i][j] == (char *)NULL ) return(Z_ERR); - } - } - Pulldown_number_in_list = (int *) calloc(Num_pulldowns,sizeof(int)); - Pulldown_default_selection = (int *) calloc(Num_pulldowns,sizeof(int)); - Pulldown_choice = (int *) calloc(Num_pulldowns,sizeof(int)); - } - - if (Num_fields > 0) { - Field_title = (char **) calloc(Num_fields,sizeof(char*)); - Field_user_string = (char **) calloc(Num_fields,sizeof(char*)); - if (Field_title == (char **) NULL) return(Z_ERR); - for (i=0; i<Num_fields; i++) { - Field_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Field_title[i] == (char *)NULL) return(Z_ERR); - Field_user_string[i] = (char *) calloc(Z_LEN_GUI_FIELD_STR,sizeof(char)); - if ( Field_user_string[i] == (char *)NULL) return(Z_ERR); - } - } - - - err = USERD_get_extra_gui_defaults( - Toggle_title, /* [num_toggles][Z_LEN_GUI_TITLE_STR] */ - Toggle_default_status, /* [num_toggles] */ - Pulldown_title, /* [num_pulldowns][Z_LEN_GUI_TITLE_STR] */ - Pulldown_number_in_list, /* [num_pulldowns] */ - Pulldown_default_selection, /* [num_pulldowns] */ - Pulldown_item_strings, /* [num_pulldowns][Z_MAX_NUM_GUI_PULL_ITEMS][Z_LEN_GUI_PULL_STR] */ - Field_title, /* [num_fields][Z_LEN_GUI_TITLE_STR] */ - Field_user_string /* [num_fields][Z_LEN_GUI_FIELD_STR] */ - ); - if (Z_ERR == err) return(Z_ERR); - - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Extra GUI Information ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr,"\nTOGGLE INFO: %d active toggles\n",Num_toggles); - for (i=0; i<Num_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_title[i]); - fprintf(stderr,"Default status = %d \n",Toggle_default_status[i]); - } - - fprintf(stderr,"\nPULLDOWN INFO: %d active pulldowns\n",Num_pulldowns); - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_title[i] ); - for (j=0; j<Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - fprintf(stderr,"Pulldown_item %d : %s\n",j,Pulldown_item_strings[i][j]); - if (strlen(Pulldown_item_strings[i][j]) == 0) { - Pulldown_number_in_list[i] = j; - break; - } - } - fprintf(stderr,"Number of items in list: %d\n",Pulldown_number_in_list[i]); - fprintf(stderr,"Default selection: %d\n\n",Pulldown_default_selection[i]); - } - fprintf(stderr,"\n"); - - fprintf(stderr,"\nFIELDINFO: %d active fields\n",Num_fields); - for (i=0; i<Num_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_user_string[i]); - } - fprintf(stderr,"\n\n\n"); - } -#endif - - - /* Get the var_extract stuff (optional) - * ---------------------------------------------------------- */ -#ifdef _VES - - /* Get the var_extract numbers of toggles, pulldowns, & fields - * ---------------------------------------------------------- */ - USERD_get_var_extract_gui_numbers(&Num_ve_toggles, - &Num_ve_pulldowns, - &Num_ve_fields ); - if ( Num_ve_toggles > 0 || Num_ve_pulldowns > 0 || Num_ve_fields > 0 ) { - - *any_var_extract = TRUE; - - if (Num_ve_toggles > 0) { - Toggle_ve_title = (char **) calloc(Num_ve_toggles,sizeof(char*)); - if (Toggle_ve_title == (char **)NULL) return(Z_ERR); - for (i=0; i<Num_ve_toggles; i++) { - Toggle_ve_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Toggle_ve_title[i] == (char *)NULL ) return(Z_ERR); - } - Toggle_ve_default_status = (int *) calloc(Num_ve_toggles,sizeof(int)); - Toggle_ve_choice = (int *) calloc(Num_ve_toggles,sizeof(int)); - } - - if (Num_ve_pulldowns > 0) { - Pulldown_ve_title = (char **) calloc( Num_ve_pulldowns , sizeof(char*) ); - if (Pulldown_ve_title == (char **)NULL) return(Z_ERR); - - Pulldown_ve_item_strings = (char ***) calloc( Num_ve_pulldowns , sizeof(char**) ); - if (Pulldown_ve_item_strings == (char ***)NULL) return(Z_ERR); - - for (i=0; i<Num_ve_pulldowns; i++) { - Pulldown_ve_title[i] = (char *) calloc( Z_LEN_GUI_TITLE_STR , sizeof(char) ); - if ( Pulldown_ve_title[i] == (char *)NULL ) return(Z_ERR); - - Pulldown_ve_item_strings[i] = (char **)calloc(Z_MAX_NUM_GUI_PULL_ITEMS, sizeof(char *)); - if (Pulldown_ve_item_strings[i] == (char **)NULL) return(Z_ERR); - - for(j = 0; j < Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - Pulldown_ve_item_strings[i][j] = (char *) calloc( Z_LEN_GUI_PULL_STR , sizeof(char) ); - if ( Pulldown_ve_item_strings[i][j] == (char *)NULL ) return(Z_ERR); - } - } - Pulldown_ve_number_in_list = (int *) calloc(Num_ve_pulldowns,sizeof(int)); - Pulldown_ve_default_selection = (int *) calloc(Num_ve_pulldowns,sizeof(int)); - Pulldown_ve_choice = (int *) calloc(Num_ve_pulldowns,sizeof(int)); - } - - if (Num_ve_fields > 0) { - Field_ve_title = (char **) calloc(Num_ve_fields,sizeof(char*)); - Field_ve_user_string = (char **) calloc(Num_ve_fields,sizeof(char*)); - if (Field_ve_title == (char **) NULL) return(Z_ERR); - for (i=0; i<Num_ve_fields; i++) { - Field_ve_title[i] = (char *) calloc(Z_LEN_GUI_TITLE_STR,sizeof(char)); - if ( Field_ve_title[i] == (char *)NULL) return(Z_ERR); - Field_ve_user_string[i] = (char *) calloc(Z_LEN_GUI_FIELD_STR,sizeof(char)); - if ( Field_ve_user_string[i] == (char *)NULL) return(Z_ERR); - } - } - - - err = USERD_get_var_extract_gui_defaults( - Toggle_ve_title, /* [num_ve_toggles][Z_LEN_GUI_TITLE_STR] */ - Toggle_ve_default_status, /* [num_ve_toggles] */ - Pulldown_ve_title, /* [num_ve_pulldowns][Z_LEN_GUI_TITLE_STR] */ - Pulldown_ve_number_in_list, /* [num_ve_pulldowns] */ - Pulldown_ve_default_selection, /* [num_ve_pulldowns] */ - Pulldown_ve_item_strings, /* [num_ve_pulldowns][Z_MAX_NUM_GUI_PULL_ITEMS][Z_LEN_GUI_PULL_STR] */ - Field_ve_title, /* [num_ve_fields][Z_LEN_GUI_TITLE_STR] */ - Field_ve_user_string /* [num_ve_fields][Z_LEN_GUI_FIELD_STR] */ - ); - if (Z_ERR == err) return(Z_ERR); - - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Var Extract Information ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr,"\nTOGGLE INFO: %d active toggles\n",Num_ve_toggles); - for (i=0; i<Num_ve_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_ve_title[i]); - fprintf(stderr,"Default status = %d \n",Toggle_ve_default_status[i]); - } - - fprintf(stderr,"\nPULLDOWN INFO: %d active pulldowns\n",Num_ve_pulldowns); - for (i=0; i<Num_ve_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_ve_title[i] ); - for (j=0; j<Z_MAX_NUM_GUI_PULL_ITEMS; j++) { - fprintf(stderr,"Pulldown_item %d : %s\n",j,Pulldown_ve_item_strings[i][j]); - if (strlen(Pulldown_ve_item_strings[i][j]) == 0) { - Pulldown_ve_number_in_list[i] = j; - break; - } - } - fprintf(stderr,"Number of items in list: %d\n",Pulldown_ve_number_in_list[i]); - fprintf(stderr,"Default selection: %d\n\n",Pulldown_ve_default_selection[i]); - } - fprintf(stderr,"\n"); - - fprintf(stderr,"\nFIELDINFO: %d active fields\n",Num_ve_fields); - for (i=0; i<Num_ve_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_ve_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_ve_user_string[i]); - } - fprintf(stderr,"\n\n\n"); - } -#endif - - -#if (defined GT_USERD_API_100) - - /* Get the reader api used - *------------------------*/ - err = USERD_get_reader_version(Version_number); - if(err == Z_OK) { - fprintf(stderr," API version: %s\n",Version_number); - } - else { - fprintf(stderr,"Error: Could not get reader api version\n"); - return(Z_ERR); - } - - /* Get the reader release - *-----------------------*/ - err = USERD_get_reader_release(release_number); - if(err == Z_OK) { - fprintf(stderr," Release: %s\n",release_number); - } - else { - fprintf(stderr,"Error: Could not get reader release\n"); - return(Z_ERR); - } -#else - fprintf(stderr," API version: 1.00\n"); -#endif - - -#if 0 - /* Get the reader description - *---------------------------*/ - err = USERD_get_reader_descrip(description); - if(err == Z_OK) { - fprintf(stderr," Description:\n\n"); - fprintf(stderr,"%s\n\n",description); - } - else { - fprintf(stderr,"Error: Could not get reader description\n"); - return(Z_ERR); - } -#else - fprintf(stderr," Note: Not currently calling USERD_get_reader_descrip\n"); - fprintf(stderr," because it is optional.\n"); -#endif - - return(Z_OK); -} - - -/*---------- - * get_input - *----------*/ -static int -get_input(int set_server_number, - int use_playfile, - char playfile[Z_MAXFILENP], - int two_fields, - int any_extra_gui, - int any_var_extract, - int *swapbytes) -{ - FILE *fplay; - - int i, j; - int err; - int tot_servers; - int cur_server; - char the_path[Z_MAXFILENP]; - char file1[Z_MAXFILENP]; - char file2[Z_MAXFILENP]; - char filename_1[Z_MAXFILENP]; - char filename_2[Z_MAXFILENP]; - - - fprintf(stderr,"\n-------------- get_input ----------------\n"); - - /*----------------------------------------------------- - * Prompt for the two input values, as the client would - * And set this info for the reader - *-----------------------------------------------------*/ - -#if (defined GT_USERD_API_100) - - /* Set the server number - if command line option to do so - *--------------------------------------------------------*/ - if(set_server_number) { - fprintf(stderr," Enter total number of servers: "); - scanf("%d",&tot_servers); - - fprintf(stderr," Enter current server number: "); - scanf("%d",&cur_server); - - fprintf(stderr," Setting %d of %d for server number\n",cur_server,tot_servers); - USERD_set_server_number(cur_server,tot_servers); - } -#endif - - /* Set the filenames - *------------------*/ - memset(the_path,EOS,Z_MAXFILENP); - memset(file1,EOS,Z_MAXFILENP); - memset(file2,EOS,Z_MAXFILENP); - memset(filename_1,EOS,Z_MAXFILENP); - memset(filename_2,EOS,Z_MAXFILENP); - - - if(!use_playfile) { - fprintf(stderr," Enter the path: "); - scanf("%s",the_path); - - - fprintf(stderr," Enter filename_1: "); - scanf("%s",file1); - - if(two_fields == TRUE) { - fprintf(stderr," Enter filename_2: "); - scanf("%s",file2); - } - - fprintf(stderr," Enter Swapbytes (0 if FALSE, 1 if TRUE): "); - scanf("%d",swapbytes); - - if (TRUE == any_extra_gui ) { - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Extra GUI INPUT ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr, "\n TOGGLE INPUT \n"); - for (i=0; i<Num_toggles; i++) { - fprintf(stderr, " Enter Toggle Value for '%s' (1=toggle on, 0=toggle off)\n",Toggle_title[i]); - scanf("%d",&Toggle_choice[i]); - } - fprintf(stderr, "\n PULLDOWN INPUT \n"); - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr, "\n PULLDOWN # %d \n",i); - for (j = 0; j<Pulldown_number_in_list[i]; j++) { - fprintf(stderr, " %d %s\n",j,Pulldown_item_strings[i][j]); - } - fprintf(stderr, " Enter Pulldown Value for '%s' (0 to %d)\n",Pulldown_title[i],Pulldown_number_in_list[i]-1); - scanf("%d",&Pulldown_choice[i]); - } - fprintf(stderr, "\n FIELD INPUT \n"); - for (i=0; i<Num_fields; i++) { - fprintf(stderr, "Enter string for field %d '%s'\n",i,Field_title[i]); - scanf("%s",Field_user_string[i]); - } - - } /* end if there is any extra gui stuff */ - - if (TRUE == any_var_extract ) { - fprintf(stderr,"\n**********************************************\n"); - fprintf(stderr,"**** Var extract INPUT ***\n"); - fprintf(stderr,"**********************************************\n\n"); - - fprintf(stderr, "\n TOGGLE INPUT \n"); - for (i=0; i<Num_ve_toggles; i++) { - fprintf(stderr, " Enter Toggle Value for '%s' (1=toggle on, 0=toggle off)\n",Toggle_ve_title[i]); - scanf("%d",&Toggle_ve_choice[i]); - } - fprintf(stderr, "\n PULLDOWN INPUT \n"); - for (i=0; i<Num_ve_pulldowns; i++) { - fprintf(stderr, "\n PULLDOWN # %d \n",i); - for (j = 0; j<Pulldown_ve_number_in_list[i]; j++) { - fprintf(stderr, " %d %s\n",j,Pulldown_ve_item_strings[i][j]); - } - fprintf(stderr, " Enter Pulldown Value for '%s' (0 to %d)\n",Pulldown_ve_title[i],Pulldown_ve_number_in_list[i]-1); - scanf("%d",&Pulldown_ve_choice[i]); - } - fprintf(stderr, "\n FIELD INPUT \n"); - for (i=0; i<Num_ve_fields; i++) { - fprintf(stderr, "Enter string for field %d '%s'\n",i,Field_ve_title[i]); - scanf("%s",Field_ve_user_string[i]); - } - - } /* end if there is any var_extract stuff */ - - } /* end if not using playfile */ - else { - fplay = fopen(playfile,"rb"); - if(fplay == (FILE *)NULL) { - fprintf(stderr,"Error: Opening the playfile %s\n",playfile); - return(Z_ERR); - } - else { - fscanf(fplay,"%s",the_path); - fscanf(fplay,"%s",file1); - if(two_fields == TRUE) { - fscanf(fplay,"%s",file2); - } - fscanf(fplay,"%d",swapbytes); - - /* --------------------- - * Extra GUI stuff - * --------------------- */ - if (TRUE == any_extra_gui) { - - for (i=0; i<Num_toggles; i++) { - fscanf(fplay,"%d",&Toggle_choice[i]); - } - - for (i=0; i<Num_pulldowns; i++) { - fscanf(fplay,"%d",&Pulldown_choice[i]); - } - - for (i=0; i<Num_fields; i++) { - fscanf(fplay,"%s",Field_user_string[i]); - } - } - - /* --------------------- - * var_sxtract stuff - * --------------------- */ - if (TRUE == any_var_extract) { - - for (i=0; i<Num_ve_toggles; i++) { - fscanf(fplay,"%d",&Toggle_ve_choice[i]); - } - - for (i=0; i<Num_ve_pulldowns; i++) { - fscanf(fplay,"%d",&Pulldown_ve_choice[i]); - } - - for (i=0; i<Num_ve_fields; i++) { - fscanf(fplay,"%s",Field_ve_user_string[i]); - } - } - - fclose(fplay); - } - } - -#ifdef _EGS - /* ------------------------------------------- - * set the user choices here and run the code - * ------------------------------------------- */ - - /* set your choices here - Toggle_choice[0..Num_toggles] - Pulldown_choice[0..Num_pulldowns] - Field_user_string[Num_fields][0..Numfields] - amd then send your choices into this routine */ - - USERD_set_extra_gui_data(Toggle_choice, /* [num_toggle] */ - Pulldown_choice, /* [num_pulldown] */ - Field_user_string ); /* [num_fields][Z_LEN_GUI_FIELD_STR] */ - - for (i=0; i<Num_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_title[i]); - fprintf(stderr,"User selection = %d \n",Toggle_choice[i]); - } - fprintf(stderr,"\n\n"); - - for (i=0; i<Num_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_title[i] ); - fprintf(stderr,"Pulldown selection is # %d : %s\n", - Pulldown_choice[i],Pulldown_item_strings[i][Pulldown_choice[i]]); - } - - for (i=0; i<Num_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_user_string[i]); - - } -#endif - -#ifdef _VES - /* ------------------------------------------- - * set the user choices here and run the code - * ------------------------------------------- */ - - /* set your choices here - Toggle_ve_choice[0..Num_ve_toggles] - Pulldown_ve_choice[0..Num_ve_pulldowns] - Field_ve_user_string[Num_ve_fields][0..Numfields] - amd then send your choices into this routine */ - - USERD_set_var_extract_gui_data(Toggle_ve_choice, /* [num_ve_toggle] */ - Pulldown_ve_choice, /* [num_ve_pulldown] */ - Field_ve_user_string); /*[num_ve_fields][Z_LEN_GUI_FIELD_STR] */ - - for (i=0; i<Num_ve_toggles; i++) { - fprintf(stderr,"Toggle Title %d : %s\n",i,Toggle_ve_title[i]); - fprintf(stderr,"User selection = %d \n",Toggle_ve_choice[i]); - } - fprintf(stderr,"\n\n"); - - for (i=0; i<Num_ve_pulldowns; i++) { - fprintf(stderr,"Pulldown Title %d : %s\n", i , Pulldown_ve_title[i] ); - fprintf(stderr,"Pulldown selection is # %d : %s\n", - Pulldown_ve_choice[i],Pulldown_ve_item_strings[i][Pulldown_ve_choice[i]]); - } - - for (i=0; i<Num_ve_fields; i++) { - fprintf(stderr,"Field Title %d : %s\n",i,Field_ve_title[i]); - fprintf(stderr,"Field string %d: %s\n",i,Field_ve_user_string[i]); - } -#endif - - - if(strncmp(file1,"/",1)) { - strcpy(filename_1,the_path); - strcat(filename_1,"/"); - strcat(filename_1,file1); - } - if(two_fields == TRUE) { - if(strncmp(file2,"/",1)) { - strcpy(filename_2,the_path); - strcat(filename_2,"/"); - strcat(filename_2,file2); - } - } - if(*swapbytes == 0) { - *swapbytes = FALSE; - } - else { - *swapbytes = TRUE; - } - - /* Feedback - *---------*/ - fprintf(stderr," path: %s\n",the_path); - fprintf(stderr," filename_1: %s\n",filename_1); - fprintf(stderr," filename_2: %s\n",filename_2); - if(*swapbytes) { - fprintf(stderr," Swapbytes: TRUE\n"); - } - else { - fprintf(stderr," Swapbytes: FALSE\n"); - } - - err = USERD_set_filenames(filename_1,filename_2,the_path,*swapbytes); - if(err == Z_ERR) { - fprintf(stderr,"Error: Trouble setting the filenames\n"); - return(Z_ERR); - } - - return(Z_OK); -} - - -/*---------- - * time_info - *----------*/ -static int -time_info( void ) -{ - int i; - int err; - int geom_time_set; - int ts; - float *sol_times; - char ts_desc[Z_BUFL]; - - fprintf(stderr,"\n-------------- time_info ----------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the number of timesets - *---------------------------*/ - Num_time_sets = USERD_get_number_of_timesets(); - fprintf(stderr," number of timesets: %d\n",Num_time_sets); - if(Num_time_sets == 0) { - fprintf(stderr," So, static geometry and variables\n"); - return(Z_OK); - } - - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_time_set = USERD_get_geom_timeset_number(); - - fprintf(stderr," geom timeset number: %d\n",geom_time_set); - if(geom_time_set < 1 && Num_time_sets > 0) { - fprintf(stderr,"Error: timeset numbers must be 1 or greater\n"); - fprintf(stderr," (unless Num_time_sets is zero also)\n"); - } - - - /* For each timeset - *-----------------*/ - for(ts=1; ts<=Num_time_sets; ++ts) { - - fprintf(stderr," Timeset %d:\n",ts); - - /* Get the timeset descriptions - *-----------------------------*/ - err = USERD_get_timeset_description(ts,ts_desc); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting timeset description\n"); - return(Z_ERR); - } - else { - fprintf(stderr," description: %s\n",ts_desc); - } - - /* Get the number of time steps - *-----------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(ts); - fprintf(stderr," number of time steps: %d\n",Num_time_steps); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - - - /* Get the solution times - *-----------------------*/ - if(Num_time_steps > 0) { - sol_times = (float *) calloc(Num_time_steps,sizeof(float)); - if(sol_times == (float *)NULL) { - fprintf(stderr,"Error: allocating for solution times\n"); - return(Z_ERR); - } - else { - err = USERD_get_sol_times(ts,sol_times); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting solution times\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_time_steps; ++i) { - fprintf(stderr," At step %d, time = %f\n",i,sol_times[i]); - } - } - } - free(sol_times); - } - } - -#else - - - /* Get the number of time steps - *-----------------------------*/ - Num_time_steps = USERD_get_number_of_time_steps(); - fprintf(stderr," Nnumber of time steps: %d\n",Num_time_steps); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - - - /* Get the solution times - *-----------------------*/ - if(Num_time_steps > 0) { - sol_times = (float *) calloc(Num_time_steps,sizeof(float)); - if(sol_times == (float *)NULL) { - fprintf(stderr,"Error: allocating for solution times\n"); - return(Z_ERR); - } - else { - err = USERD_get_solution_times(sol_times); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting solution times\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_time_steps; ++i) { - fprintf(stderr," At step %d, time = %f\n",i,sol_times[i]); - } - } - } - free(sol_times); - } - -#endif - - return(Z_OK); -} - - - -/*---------------- - * part_build_info - *----------------*/ -static int -part_build_info(int geom_time_step) -{ - int i, j; - int fn; - int err; - int num_dataset_files; - int geom_time_set; - Z_QFILES *qfiles; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - - int *part_ids; - int *part_types; - int *number_of_nodes; - int **num_elems; - int **ijk_dimensions; - int **iblanking_options; - char **part_descriptions; - - int ghosts_in_block; - - int *max_num_nodes; - int **max_num_elems; - int **max_ijk_dimensions; - float extents[6]; - - - fprintf(stderr,"\n------------ part_build_info ------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_time_set = USERD_get_geom_timeset_number(); - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(geom_time_set); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step - *-----------------------------------------*/ - USERD_set_time_set_and_step(geom_time_set,geom_time_step); - -#else - - /* Set the time step - to first step - *----------------------------------*/ - USERD_set_time_step(geom_time_step); - -#endif - - /* Get the changing geometry status - *---------------------------------*/ - Geom_status = USERD_get_changing_geometry_status(); - if(Geom_status == Z_STATIC) { - fprintf(stderr," Geom changing status: Z_STATIC\n"); - } - else if(Geom_status == Z_CHANGE_COORDS) { - fprintf(stderr," Geom changing status: Z_CHANGE_COORDS\n"); - } - else if(Geom_status == Z_CHANGE_CONN) { - fprintf(stderr," Geom changing status: Z_CHANGE_CONN\n"); - } - else { - fprintf(stderr," Invalid Geom changing status!!\n"); - } - - - /* Get the node label status - *--------------------------*/ - Node_labels = USERD_get_node_label_status(); - if(Node_labels) { - fprintf(stderr," Node labels will be provided\n"); - } - else { - fprintf(stderr," Node labels will NOT be provided\n"); - } - - /* Get the element label status - *-----------------------------*/ - Element_labels = USERD_get_element_label_status(); - if(Element_labels) { - fprintf(stderr," Element labels will be provided\n"); - } - else { - fprintf(stderr," Element labels will NOT be provided\n"); - } - - fprintf(stderr,"\n"); - - /* Get the number of files in the dataset - *---------------------------------------*/ - num_dataset_files = USERD_get_number_of_files_in_dataset(); - fprintf(stderr," Number of files in dataset: %d\n",num_dataset_files); - - - /* Get the dataset query file info - *--------------------------------*/ - if(num_dataset_files > 0) { - - qfiles = (Z_QFILES *) calloc(num_dataset_files,sizeof(Z_QFILES)); - if(qfiles == (Z_QFILES *)NULL) { - fprintf(stderr,"Error: allocating for dataset query files\n"); - return(Z_ERR); - } - else { - - for(i=0; i<num_dataset_files; ++i) { - qfiles[i].f_desc = (char **) calloc(10,sizeof(char *)); - if(qfiles[i].f_desc == (char **)NULL) { - fprintf(stderr,"Error: allocating for dataset query descrip lines\n"); - return(Z_ERR); - } - else { - for(j=0; j<10; ++j) { - qfiles[i].f_desc[j] = (char *) calloc(Z_MAXFILENP,sizeof(char)); - if(qfiles[i].f_desc[j] == (char *)NULL) { - fprintf(stderr,"Error: allocating for dataset query descrip lines\n"); - return(Z_ERR); - } - } - } - } - - err = USERD_get_dataset_query_file_info(qfiles); - if(err == Z_OK) { - for(fn=0; fn<num_dataset_files; ++fn) { - fprintf(stderr," For dataset file %d:\n",fn); - - fprintf(stderr," name: %s\n",qfiles[fn].name); - fprintf(stderr," size: %d\n",qfiles[fn].sizeb); - fprintf(stderr," time: %s\n",qfiles[fn].timemod); - fprintf(stderr," num desc lines: %d\n",qfiles[fn].num_d_lines); - for(i=0; i<qfiles[fn].num_d_lines; ++i) { - fprintf(stderr," desc line %d: %s\n",i,qfiles[fn].f_desc[i]); - } - } - } - else { - fprintf(stderr,"Error: getting dataset query info\n"); - return(Z_ERR); - } - } - - /* Free allocated memory - *----------------------*/ - for(i=0; i<num_dataset_files; ++i) { - for(j=0; j<10; ++j) { - free(qfiles[i].f_desc[j]); - } - free(qfiles[i].f_desc); - } - free(qfiles); - } - - fprintf(stderr,"\n-----------------------------------------\n"); - -#if (defined GT_USERD_API_100) - - /* Get the geometry description lines - *-----------------------------------*/ - err = USERD_get_descrip_lines(Z_GEOM,0,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Geom Desc line1: %s\n",line1); - fprintf(stderr," Geom Desc line2: %s\n",line2); - } - else { - fprintf(stderr,"Error: getting geom description lines\n"); - return(Z_ERR); - } - -#else - - /* Get the geometry description lines - *-----------------------------------*/ - err = USERD_get_description_lines(Z_GEOM,0,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Geom Desc line1: %s\n",line1); - fprintf(stderr," Geom Desc line2: %s\n",line2); - } - else { - fprintf(stderr,"Error: getting geom description lines\n"); - return(Z_ERR); - } - -#endif - - /* Get the number of model parts - *------------------------------*/ - Num_parts = USERD_get_number_of_model_parts(); - if(Num_parts > 0) { - fprintf(stderr," Number of parts: %d\n",Num_parts); - } - else { - fprintf(stderr," Problems getting number of parts\n"); - return(Z_ERR); - } - - - - /* Get the gold part build info - *-----------------------------*/ - Pbuild = (BUILDINFO *) calloc(Num_parts,sizeof(BUILDINFO)); - if(Pbuild == (BUILDINFO *)NULL) { - fprintf(stderr," Problems allocating for Pbuild structure\n"); - return(Z_ERR); - } - - - part_ids = (int *) calloc(Num_parts,sizeof(int)); - if(part_ids == (int *)NULL) { - fprintf(stderr," Problems allocating for part ids\n"); - return(Z_ERR); - } - - part_types = (int *) calloc(Num_parts,sizeof(int)); - if(part_types == (int *)NULL) { - fprintf(stderr," Problems allocating for part types\n"); - return(Z_ERR); - } - - part_descriptions = (char **) calloc(Num_parts,sizeof(char *)); - if(part_descriptions == (char **)NULL) { - fprintf(stderr," Problems allocating for part descriptions\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - part_descriptions[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(part_descriptions[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for part descriptions\n"); - return(Z_ERR); - } - } - } - - number_of_nodes = (int *) calloc(Num_parts,sizeof(int)); - if(number_of_nodes == (int *)NULL) { - fprintf(stderr," Problems allocating for part number of nodes\n"); - return(Z_ERR); - } - - num_elems = (int **) calloc(Num_parts,sizeof(int *)); - if(num_elems == (int **)NULL) { - fprintf(stderr," Problems allocating for part number of elements\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - num_elems[i] = (int *) calloc(Z_MAXTYPE,sizeof(int)); - if(num_elems[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part number of elements\n"); - return(Z_ERR); - } - } - } - - ijk_dimensions = (int **) calloc(Num_parts,sizeof(int *)); - if(ijk_dimensions == (int **)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - else { - -#if (defined GT_USERD_API_202) - for(i=0; i<Num_parts; ++i) { - ijk_dimensions[i] = (int *) calloc(9,sizeof(int)); - if(ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - else { - for(j=0; j<9; ++j) { - ijk_dimensions[i][j] = -1; - } - } - } -#else - for(i=0; i<Num_parts; ++i) { - ijk_dimensions[i] = (int *) calloc(3,sizeof(int)); - if(ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part ijk dimensions\n"); - return(Z_ERR); - } - } -#endif - } - - iblanking_options = (int **) calloc(Num_parts,sizeof(int *)); - if(iblanking_options == (int **)NULL) { - fprintf(stderr," Problems allocating for part iblanking options\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - iblanking_options[i] = (int *) calloc(6,sizeof(int)); - if(iblanking_options[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part iblanking options\n"); - return(Z_ERR); - } - } - } - - -#if (defined GT_USERD_API_100) - - err = USERD_get_gold_part_build_info(part_ids, - part_types, - part_descriptions, - number_of_nodes, - num_elems, - ijk_dimensions, - iblanking_options); -#else - - err = USERD_get_part_build_info(part_ids, - part_types, - part_descriptions, - num_elems, - ijk_dimensions, - iblanking_options); - -#endif - - if(err == Z_ERR) { - fprintf(stderr," Problems getting part build info\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - fprintf(stderr," For part %d:\n",i+1); - - fprintf(stderr," part id: %d\n",part_ids[i]); - Pbuild[i].id = part_ids[i]; - - if(part_types[i] == Z_UNSTRUCTURED) { - fprintf(stderr," part type: Z_UNSTRUCTURED\n"); - } - else if(part_types[i] == Z_STRUCTURED) { - fprintf(stderr," part type: Z_STRUCTURED\n"); - } - else if(part_types[i] == Z_IBLANKED) { - fprintf(stderr," part type: Z_IBLANKED\n"); - } - else { - fprintf(stderr," Invalid part type\n"); - return(Z_ERR); - } - Pbuild[i].type = part_types[i]; - - fprintf(stderr," part desc: %s\n",part_descriptions[i]); - strncpy(Pbuild[i].desc,part_descriptions[i],Z_BUFL); - -#if (defined GT_USERD_API_100) - fprintf(stderr," number of nodes : %d\n",number_of_nodes[i]); - Pbuild[i].nn = number_of_nodes[i]; -#else - Pbuild[i].nn = USERD_get_number_of_global_nodes(); -#endif - - for(j=0; j<Z_MAXTYPE; ++j) { - if(num_elems[i][j] > 0) { - fprintf(stderr," # %s elements: %d\n", - Elem_info[j].name,num_elems[i][j]); - Pbuild[i].ne[j] = num_elems[i][j]; - } - } - - if(part_types[i] != Z_UNSTRUCTURED) { - - /* For this checker, we will place the following in the - * Pbuild[].ne[] structure: - * - * Note this can be used for block size whether ranges or not - * ------------------------------------------------------------- - * Pbuild[].ne[0] = i dim of current block (to the range selected) - * Pbuild[].ne[1] = j dim of current block (to the range selected) - * Pbuild[].ne[2] = k dim of current block (to the range selected) - * - * Thus if ranges: - * --------------- - * Pbuild[].ne[3] = i min range (-1 indicates no ranges) - * Pbuild[].ne[4] = i max range - * Pbuild[].ne[5] = i min range - * Pbuild[].ne[6] = i max range - * Pbuild[].ne[7] = i min range - * Pbuild[].ne[8] = i max range - * - * Pbuild[].ne[9] = i dim of total block (if ranges) - * Pbuild[].ne[10] = j dim of total block (if ranges) - * Pbuild[].ne[11] = k dim of total block (if ranges) - * - * What comes back from the api is: - * -------------------------------- - * before 2.03 (no ranges) - * ----------------------- - * ijk_dimensions[][0] = i dim of block - * ijk_dimensions[][1] = j dim of block - * ijk_dimensions[][2] = k dim of block - * - * at 2.03 (if no ranges) - * ------- - * ijk_dimensions[][0] = i dim of block - * ijk_dimensions[][1] = j dim of block - * ijk_dimensions[][2] = k dim of block - * ijk_dimensions[][3] = -1 - * - * at 2.03 (if ranges) - * ------- - * ijk_dimensions[][0] = i dim of total block - * ijk_dimensions[][1] = j dim of total block - * ijk_dimensions[][2] = k dim of total block - * ijk_dimensions[][3] = i min range - * ijk_dimensions[][4] = i max range - * ijk_dimensions[][5] = j min range - * ijk_dimensions[][6] = j max range - * ijk_dimensions[][7] = k min range - * ijk_dimensions[][8] = k max range - *--------------------------------------------------------------*/ - -#if (defined GT_USERD_API_202) - if(ijk_dimensions[i][3] == -1) { - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = ijk_dimensions[i][3]; - } - else { - - /* If empty part - *--------------*/ - if(ijk_dimensions[i][0] == 0 && - ijk_dimensions[i][1] == 0 && - ijk_dimensions[i][2] == 0) { - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = -1; - } - - /* range part - *-----------*/ - else { - Pbuild[i].ne[0] = ijk_dimensions[i][4] - ijk_dimensions[i][3] + 1; - Pbuild[i].ne[1] = ijk_dimensions[i][6] - ijk_dimensions[i][5] + 1; - Pbuild[i].ne[2] = ijk_dimensions[i][8] - ijk_dimensions[i][7] + 1; - - Pbuild[i].ne[3] = ijk_dimensions[i][3]; - Pbuild[i].ne[4] = ijk_dimensions[i][4]; - Pbuild[i].ne[5] = ijk_dimensions[i][5]; - Pbuild[i].ne[6] = ijk_dimensions[i][6]; - Pbuild[i].ne[7] = ijk_dimensions[i][7]; - Pbuild[i].ne[8] = ijk_dimensions[i][8]; - - Pbuild[i].ne[9] = ijk_dimensions[i][0]; - Pbuild[i].ne[10] = ijk_dimensions[i][1]; - Pbuild[i].ne[11] = ijk_dimensions[i][2]; - - fprintf(stderr," Part has ranges:\n"); - fprintf(stderr," ijk dimensions of total block: %d %d %d\n", - Pbuild[i].ne[9], - Pbuild[i].ne[10], - Pbuild[i].ne[11]); - fprintf(stderr," i range: %d to %d\n", - Pbuild[i].ne[3], - Pbuild[i].ne[4]); - fprintf(stderr," j range: %d to %d\n", - Pbuild[i].ne[5], - Pbuild[i].ne[6]); - fprintf(stderr," k range: %d to %d\n", - Pbuild[i].ne[7], - Pbuild[i].ne[8]); - fprintf(stderr," ijk dimensions of range portion: %d %d %d\n", - Pbuild[i].ne[0], - Pbuild[i].ne[1], - Pbuild[i].ne[2]); - } - } -#else - fprintf(stderr," ijk_dimensions: %d %d %d\n", - ijk_dimensions[i][0], - ijk_dimensions[i][1], - ijk_dimensions[i][2]); - Pbuild[i].ne[0] = ijk_dimensions[i][0]; - Pbuild[i].ne[1] = ijk_dimensions[i][1]; - Pbuild[i].ne[2] = ijk_dimensions[i][2]; - Pbuild[i].ne[3] = -1; -#endif - if(part_types[i] == Z_IBLANKED) { - fprintf(stderr," Ibanking options on:\n"); - if(iblanking_options[i][Z_EXT]) { - fprintf(stderr," Z_EXT\n"); - } - if(iblanking_options[i][Z_INT]) { - fprintf(stderr," Z_INT\n"); - } - if(iblanking_options[i][Z_BND]) { - fprintf(stderr," Z_BND\n"); - } - if(iblanking_options[i][Z_INTBND]) { - fprintf(stderr," Z_INTBND\n"); - } - if(iblanking_options[i][Z_SYM]) { - fprintf(stderr," Z_SYM\n"); - } - } - } - } - } - - -#if (defined GT_USERD_API_200) - - /* Get ghosts in model flag - *-------------------------*/ - Ghosts_in_model = USERD_get_ghosts_in_model_flag(); - if(Ghosts_in_model) { - fprintf(stderr," Ghosts in Model: TRUE\n"); - } - else { - fprintf(stderr," Ghosts in Model: FALSE\n"); - } - - /* Get ghosts in block flag - if needed - *-------------------------------------*/ - for(i=1; i<=Num_parts; ++i) { - if(part_types[i-1] != Z_UNSTRUCTURED && Ghosts_in_model) { - ghosts_in_block = USERD_get_ghosts_in_block_flag(i); - Pbuild[i-1].ghosts = ghosts_in_block; - if(ghosts_in_block) { - fprintf(stderr," Ghosts in block part %d: TRUE\n",i); - } - else { - fprintf(stderr," Ghosts in block part %d: FALSE\n",i); - } - } - } - -#endif - - -#if (defined GT_USERD_API_100) - - /* Get maxsize info - *-----------------*/ - max_num_nodes = (int *) calloc(Num_parts,sizeof(int)); - if(max_num_nodes == (int *)NULL) { - fprintf(stderr," Problems allocating for part max num of nodes\n"); - return(Z_ERR); - } - - max_num_elems = (int **) calloc(Num_parts,sizeof(int *)); - if(max_num_elems == (int **)NULL) { - fprintf(stderr," Problems allocating for part max num of elements\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - max_num_elems[i] = (int *) calloc(Z_MAXTYPE,sizeof(int)); - if(max_num_elems[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part max_num of elements\n"); - return(Z_ERR); - } - } - } - - max_ijk_dimensions = (int **) calloc(Num_parts,sizeof(int *)); - if(max_ijk_dimensions == (int **)NULL) { - fprintf(stderr," Problems allocating for part max ijk dimensions\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_parts; ++i) { - max_ijk_dimensions[i] = (int *) calloc(3,sizeof(int)); - if(max_ijk_dimensions[i] == (int *)NULL) { - fprintf(stderr," Problems allocating for part max ijk dimensions\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_maxsize_info(max_num_nodes, - max_num_elems, - max_ijk_dimensions); - if(err == Z_ERR) { - fprintf(stderr," No maxsize info provided (or error getting them)\n"); - } - else { - - for(i=0; i<Num_parts; ++i) { - fprintf(stderr," For part %d:\n",i+1); - - fprintf(stderr," max number of nodes : %d\n",max_num_nodes[i]); - - for(j=0; j<Z_MAXTYPE; ++j) { - if(max_num_elems[i][j] > 0) { - fprintf(stderr," max # %s elems: %d\n", - Elem_info[j].name,max_num_elems[i][j]); - } - } - - if(part_types[i] != Z_UNSTRUCTURED) { - fprintf(stderr," max_ijk_dimensions: %d %d %d\n", - max_ijk_dimensions[i][0], - max_ijk_dimensions[i][1], - max_ijk_dimensions[i][2]); - } - } - } - - /* Get model extents - if given - *-----------------------------*/ - err = USERD_get_model_extents(extents); - if(err == Z_ERR) { - fprintf(stderr," No extents given\n"); - } - else { - fprintf(stderr," Min x: %g\n",extents[0]); - fprintf(stderr," Max x: %g\n",extents[1]); - fprintf(stderr," Min y: %g\n",extents[2]); - fprintf(stderr," Max y: %g\n",extents[3]); - fprintf(stderr," Min z: %g\n",extents[4]); - fprintf(stderr," Max z: %g\n",extents[5]); - } - -#endif - - /* Free the allocated memory - *--------------------------*/ - free(part_ids); - free(part_types); - free(number_of_nodes); - - for(i=0; i<Num_parts; ++i) { - free(ijk_dimensions[i]); - free(num_elems[i]); - free(part_descriptions[i]); - } - free(ijk_dimensions); - free(num_elems); - free(iblanking_options); - free(part_descriptions); - -#if (defined GT_USERD_API_100) - for(i=0; i<Num_parts; ++i) { - free(max_ijk_dimensions[i]); - free(max_num_elems[i]); - } - free(max_num_nodes); - free(max_num_elems); - free(max_ijk_dimensions); - -#endif - - return(Z_OK); -} - - -/*-------------- - * variable_info - *--------------*/ -static int -variable_info( void ) -{ - int i,j; - int err; - - char **var_description; - char **var_filename; - int *var_type; - int *var_classify; - int *var_complex; - char **var_ifilename; - float *var_freq; - int *var_contran; - int *var_timeset; - - - fprintf(stderr,"\n------------ variable_info --------------\n"); - - /* Get the number of variables - *----------------------------*/ - Num_vars = USERD_get_number_of_variables(); - if(Num_vars < 0) { - fprintf(stderr,"Error: getting the number of variables\n"); - } - else { - fprintf(stderr," Number of variables: %d\n",Num_vars); - } - - - /* Get the gold variable info - *---------------------------*/ - Varinfo = (VARINFO *) calloc(Num_vars,sizeof(VARINFO)); - if(Varinfo == (VARINFO *)NULL) { - fprintf(stderr," Problems allocating for Varinfo structure\n"); - return(Z_ERR); - } - - - var_description = (char **) calloc(Num_vars,sizeof(char *)); - if(var_description == (char **)NULL) { - fprintf(stderr," Problems allocating for var description\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_description[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_description[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var description\n"); - return(Z_ERR); - } - } - } - - var_filename = (char **) calloc(Num_vars,sizeof(char *)); - if(var_filename == (char **)NULL) { - fprintf(stderr," Problems allocating for var filename\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_filename[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_filename[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var filename\n"); - return(Z_ERR); - } - } - } - - var_type = (int *) calloc(Num_vars,sizeof(int)); - if(var_type == (int *)NULL) { - fprintf(stderr," Problems allocating for var type\n"); - return(Z_ERR); - } - - var_classify = (int *) calloc(Num_vars,sizeof(int)); - if(var_classify == (int *)NULL) { - fprintf(stderr," Problems allocating for var classify\n"); - return(Z_ERR); - } - - var_complex = (int *) calloc(Num_vars,sizeof(int)); - if(var_complex == (int *)NULL) { - fprintf(stderr," Problems allocating for var complex\n"); - return(Z_ERR); - } - - - var_ifilename = (char **) calloc(Num_vars,sizeof(char *)); - if(var_ifilename == (char **)NULL) { - fprintf(stderr," Problems allocating for var ifilename\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_vars; ++i) { - var_ifilename[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(var_ifilename[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for var ifilename\n"); - return(Z_ERR); - } - } - } - - var_freq = (float *) calloc(Num_vars,sizeof(float)); - if(var_freq == (float *)NULL) { - fprintf(stderr," Problems allocating for var freq\n"); - return(Z_ERR); - } - - var_contran = (int *) calloc(Num_vars,sizeof(int)); - if(var_contran == (int *)NULL) { - fprintf(stderr," Problems allocating for var contran\n"); - return(Z_ERR); - } - - var_timeset = (int *) calloc(Num_vars,sizeof(int)); - if(var_timeset == (int *)NULL) { - fprintf(stderr," Problems allocating for var timeset\n"); - return(Z_ERR); - } - -#if (defined GT_USERD_API_100) - - err = USERD_get_gold_variable_info(var_description, - var_filename, - var_type, - var_classify, - var_complex, - var_ifilename, - var_freq, - var_contran, - var_timeset); -#else - - err = USERD_get_variable_info(var_description, - var_filename, - var_type, - var_classify); - -#endif - - if(err == Z_ERR) { - fprintf(stderr,"Error: getting variable info\n"); - } - else { - for(i=0; i<Num_vars; ++i) { - - /* Loading the global - * (for use in other routines) - *----------------------------*/ - strncpy(Varinfo[i].description,var_description[i],Z_BUFL); - strncpy(Varinfo[i].filename,var_filename[i],Z_BUFL); - strncpy(Varinfo[i].ifilename,var_ifilename[i],Z_BUFL); - Varinfo[i].type = var_type[i]; - Varinfo[i].classify = var_classify[i]; - Varinfo[i].complex = var_complex[i]; - Varinfo[i].freq = var_freq[i]; - Varinfo[i].contran = var_contran[i]; - Varinfo[i].timeset = var_timeset[i]; - - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Variable %d:\n",i+1); - - fprintf(stderr," var desc: %s\n",var_description[i]); - fprintf(stderr," var filename: %s\n",var_filename[i]); - -#if (defined GT_USERD_API_100) - if(var_complex[i]) { - fprintf(stderr," var complex: TRUE\n"); - fprintf(stderr," var ifilename: %s\n",var_ifilename[i]); - fprintf(stderr," var freq: %g\n",var_freq[i]); - } - else { - fprintf(stderr," var complex: FALSE\n"); - } -#endif - - if(var_type[i] == Z_CONSTANT) { - fprintf(stderr," var type: Z_CONSTANT\n"); - -#if (defined GT_USERD_API_100) - if(var_contran[i]) { - fprintf(stderr," var contran: TRUE\n"); - } - else { - fprintf(stderr," var contran: FALSE\n"); - } -#endif - - } - else if(var_type[i] == Z_SCALAR) { - fprintf(stderr," var type: Z_SCALAR\n"); - } - else if(var_type[i] == Z_VECTOR) { - fprintf(stderr," var type: Z_VECTOR\n"); - } - else if(var_type[i] == Z_TENSOR) { - fprintf(stderr," var type: Z_TENSOR\n"); - } - else if(var_type[i] == Z_TENSOR9) { - fprintf(stderr," var type: Z_TENSOR9\n"); - } - else { - fprintf(stderr," Invalid var type\n"); - return(Z_ERR); - } - - if(var_classify[i] == Z_PER_NODE) { - fprintf(stderr," var classify: Z_PER_NODE\n"); - } - else if(var_classify[i] == Z_PER_ELEM) { - fprintf(stderr," var classify: Z_PER_ELEM\n"); - } - else if(var_classify[i] != Z_CONSTANT) { - fprintf(stderr," Invalid var classify\n"); - return(Z_ERR); - } - -#if (defined GT_USERD_API_100) - fprintf(stderr," var timeset: %d\n",var_timeset[i]); -#endif - } - } - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<Num_vars; ++i) { - free(var_description[i]); - free(var_filename[i]); - free(var_ifilename[i]); - } - free(var_description); - free(var_filename); - free(var_ifilename); - free(var_type); - free(var_classify); - free(var_complex); - free(var_freq); - free(var_contran); - free(var_timeset); - - return(Z_OK); -} - - -#if (defined GT_USERD_API_100) -/*------------------ - * gold_part_builder - *------------------*/ -static int -gold_part_builder(int geom_time_step) -{ - int i, j, k, jj, kk; - int err; - int geom_timeset; - int p, pn; - int et, ne; - int *elemids; - int **conns; - int nn; - int comp; - int bdim[3]; - int ib[5]; - int num_ghosts; - int num_dims; - int cell_type; - float mm[6]; - float **coords; - int *nodeids; - int *iblanking; - int *ghost_flag; - short *parent_type; - int *parent_num; - int num_elems[Z_MAXTYPE]; - CRD *crds; - int bd1,bd2,bd3; - int empty_part; - int *pdata; - int nsid_len; - int *nsid_con; - int nface_len; - int *nface_con; - int npf_len; - int *npf_con; - int maxcheck; - int num_failed = 0; - int *fail_flags = (int *) NULL; - float values[14], vals[10]; - - fprintf(stderr,"\n------------- part_builder --------------\n"); - - if(Num_time_sets > 0) { - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_timeset = USERD_get_geom_timeset_number(); - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(geom_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(geom_timeset,geom_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - geom_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",geom_time_step); - } - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n\n----------------------------------------"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - pdata = (int *)calloc(ne*Elem_info[et].con_len,sizeof(int)); - if(pdata == (int *) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - else { - conns = (int **) calloc(ne,sizeof(int *)); - if(conns == (int **) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - for(i=0; i<ne; ++i) { - conns[i] = pdata; - pdata += Elem_info[et].con_len; - } - } - - - /* Get the elements - *-----------------*/ - err = USERD_get_part_elements_by_type(pn,et,conns); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element connectivities\n"); - return(Z_ERR); - } - - if(Element_labels) { - elemids = (int *) calloc(ne,sizeof(int)); - if(elemids == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - err = USERD_get_part_element_ids_by_type(pn,et,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - -#if (defined GT_USERD_API_202) - - maxcheck = Z_NSIDED; - - /* Nsided elements, if any - *------------------------*/ - if(et == Z_NSIDED || - et == Z_G_NSIDED) { - - nsid_len = 0; - for(i=0; i<ne; ++i) { - nsid_len += conns[i][0]; - } - - nsid_con = (int *) calloc(nsid_len,sizeof(int)); - if(nsid_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nsided conn array\n"); - return(Z_ERR); - } - - err = USERD_get_nsided_conn(pn,nsid_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nsided conn array\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<conns[i][0]; ++j) { - fprintf(stderr," %d",nsid_con[j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - - for(j=nsid_len-conns[i][0]; j<nsid_len; ++j) { - fprintf(stderr," %d",nsid_con[j]); - } - fprintf(stderr,"\n"); - } - } - - /* Nfaced elements if any - *-----------------------*/ - if(et == Z_NFACED || - et == Z_G_NFACED) { - - nface_len = 0; - for(i=0; i<ne; ++i) { - nface_len += conns[i][0]; - } - - nface_con = (int *) calloc(nface_len,sizeof(int)); - if(nface_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nfaced face array\n"); - return(Z_ERR); - } - - err = USERD_get_nfaced_nodes_per_face(pn,nface_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nfaced face array array\n"); - return(Z_ERR); - } - - npf_len = 0; - for(i=0; i<nface_len; ++i) { - npf_len += nface_con[i]; - } - - npf_con = (int *) calloc(npf_len,sizeof(int)); - if(npf_con == (int *) NULL) { - fprintf(stderr,"Error: allocating nfaced npf array\n"); - return(Z_ERR); - } - - err = USERD_get_nfaced_conn(pn,npf_con); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nfaced conn array\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - jj = 0; - kk = 0; - for(i=0; i<ne; ++i) { - - if(i == 0 || - i == ne-1) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name, - i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - for(j=0; j<conns[i][0]; ++j) { - fprintf(stderr," face %d connectivity:",j+1); - for(k=0; k<nface_con[jj]; ++k) { - fprintf(stderr," %d",npf_con[kk]); - ++kk; - } - fprintf(stderr,"\n"); - ++jj; - } - } - else { - for(j=0; j<conns[i][0]; ++j) { - for(k=0; k<nface_con[jj]; ++k) { - ++kk; - } - ++jj; - } - } - } - } -#else - - maxcheck = Z_MAXTYPE; - -#endif - - /* Regular elements - *-----------------*/ - if(et < maxcheck) { - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - - /* check the connectivity for negative numbers - * -------------------------------------------*/ -#if defined GT_USERD_API_100 - for (i=0;i<ne;i++){ - for(j=0; j<Elem_info[et].con_len; ++j) { - /* ---------- uncomment to print out connectivity values ---------- */ -/* fprintf(stderr," %d",conns[i][j]); */ - if (conns[i][j] <= 0 || conns[i][j] > Pbuild[p].nn ) { - fprintf(stderr,"\n****************************\n"); - fprintf(stderr,"Connectivity value out of bounds: \n"); - fprintf(stderr,"Either less than zero or greater than \n"); - fprintf(stderr," number of nodes in part!! \n"); - fprintf(stderr,"i = %d j = %d conns[i][j] = %d \n",i,j,conns[i][j]); - fprintf(stderr,"****************************\n"); - } - } - /* ---------- uncomment to print out connectivity values ---------- */ -/* fprintf(stderr,"\n"); */ - } -#endif - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - } - } - - /* Free the allocated memory - *--------------------------*/ - if(NULL != conns) { - if(NULL != *conns) { - free(*conns); - *conns = NULL; - } - free(conns); - conns = NULL; - } - - if(Element_labels) { - free(elemids); - } - } - } - - /* Get the coords - *---------------*/ - nn = Pbuild[p].nn; - - if(nn > 0) { - - coords = (float **) calloc(3,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<3; ++i) { - coords[i] = (float *) calloc((nn+1),sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - if(Node_labels) { - nodeids = (int *) calloc((nn+1),sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - - - err = USERD_get_part_coords(pn,coords); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting unstructured coords\n"); - return(Z_ERR); - } - - if(Node_labels) { - err = USERD_get_part_node_ids(pn,nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - i = 1; - fprintf(stderr," Node %d of %d:\n",i,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - - - /* Last node - *----------*/ - i = nn; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=2; i<=nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<3; ++i) { - free(coords[i]); - } - free(coords); - if(Node_labels) { - free(nodeids); - } - } - } - - - /*--------------------- - * For structured parts - *---------------------*/ - else { - - empty_part = FALSE; - if(Pbuild[p].ne[0] == 0 && - Pbuild[p].ne[1] == 0 && - Pbuild[p].ne[2] == 0) { - empty_part = TRUE; - } - - if(!empty_part) { - - /* Get the block coords - *---------------------*/ - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - - if(Doing_Structured_Cinching) { - bdim[comp] = Pbuild[p].ne[comp]; - - /* even */ - if((bdim[comp] % 2) == 0) { - bdim[comp] = (bdim[comp]/2) + 1; - } - /* odd */ - else { - bdim[comp] = ((bdim[comp]-1)/2) + 1; - } - } - - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - } - - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - coords = (float **) calloc(num_dims,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<num_dims; ++i) { - coords[i] = (float *) calloc(nn,sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - /* Get the coords - *---------------*/ - for(comp=0; comp<num_dims; ++comp) { - - /* For structured cinching, send in one less on each end and stride of 2 - *----------------------------------------------------------------------*/ - if(Doing_Structured_Cinching) { - err = USERD_set_block_range_and_stride(pn, - 0, Pbuild[p].ne[0]-1, 2, - 0, Pbuild[p].ne[1]-1, 2, - 0, Pbuild[p].ne[2]-1, 2); - } - - err = USERD_get_block_coords_by_component(pn,comp,coords[comp]); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block coords\n"); - return(Z_ERR); - } - } - - -#if (defined GT_USERD_API_200) - - if(Node_labels) { - nodeids = (int *) calloc(nn,sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - /* Get the node ids - if any - *--------------------------*/ - if(Node_labels) { - err = USERD_get_part_node_ids(pn,nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } -#endif - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - if(nn > 0) { - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - -#if (defined GT_USERD_API_200) - - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } -#endif - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - mm[0] = mm[1] = coords[0][i]; - } - - - /* Last node - *----------*/ - i = nn-1; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - -#if (defined GT_USERD_API_200) - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } -#endif - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - } - } - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=1; i<nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(num_dims > 1) { - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - } - if(num_dims > 2) { - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - if(num_dims > 1) { - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - } - if(num_dims > 2) { - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - } - - /* Free the allocated memory - so far - *-----------------------------------*/ - for(i=0; i<num_dims; ++i) { - free(coords[i]); - } - free(coords); - -#if (defined GT_USERD_API_200) - if(Node_labels) { - free(nodeids); - } -#endif - - /* Get the block iblanking - if any - *---------------------------------*/ - if(Pbuild[p].type == Z_IBLANKED) { - - iblanking = (int *) calloc(nn,sizeof(int)); - if(iblanking == (int *) NULL) { - fprintf(stderr,"Error: allocating iblanking array\n"); - return(Z_ERR); - } - - err = USERD_get_block_iblanking(pn,iblanking); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block iblanking\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - ib[Z_EXT] = 0; - ib[Z_INT] = 0; - ib[Z_BND] = 0; - ib[Z_INTBND] = 0; - ib[Z_SYM] = 0; - - for(i=0; i<nn; ++i) { - ++ib[iblanking[i]]; - } - - fprintf(stderr," Iblanking breakdown:\n"); - fprintf(stderr," Number of Z_EXT: %d\n",ib[Z_EXT]); - fprintf(stderr," Number of Z_INT: %d\n",ib[Z_INT]); - fprintf(stderr," Number of Z_BND: %d\n",ib[Z_BND]); - fprintf(stderr," Number of Z_INTBND: %d\n",ib[Z_INTBND]); - fprintf(stderr," Number of Z_SYM: %d\n",ib[Z_SYM]); - - free(iblanking); - } - -#if (defined GT_USERD_API_200) - - /* Get the ghost flags - if any - *-----------------------------*/ - if(Pbuild[p].ghosts) { - - ghost_flag = (int *) calloc(ne,sizeof(int)); - if(ghost_flag == (int *) NULL) { - fprintf(stderr,"Error: allocating ghost_flag array\n"); - return(Z_ERR); - } - - err = USERD_get_block_ghost_flags(pn,ghost_flag); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block ghost flags\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - num_ghosts = 0; - - for(i=0; i<ne; ++i) { - if(ghost_flag[i] > 0) { - ++num_ghosts; - } - } - - fprintf(stderr," Block Ghost flag breakdown:\n"); - fprintf(stderr," %d ghost cells out of %d total cells\n", - num_ghosts,ne); - - free(ghost_flag); - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - - elemids = (int *) calloc(ne,sizeof(int)); - if(elemids == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - - - et = cell_type; - err = USERD_get_part_element_ids_by_type(pn,et,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - fprintf(stderr," id: %d\n",elemids[i]); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - fprintf(stderr," id: %d\n",elemids[i]); - } - - free(elemids); - } -#endif - } - else { - fprintf(stderr," Empty structured part\n"); - } - } - - /* Get border availability - *------------------------*/ - err = USERD_get_border_availability(pn,num_elems); - if(err == Z_OK) { - - /* Get border elements - if any - *-----------------------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = num_elems[et]; - if(ne > 0) { - - conns = (int **) calloc(ne,sizeof(int *)); - if(conns == (int **) NULL) { - fprintf(stderr,"Error: allocating border conns array\n"); - return(Z_ERR); - } - else { - for(i=0; i<ne; ++i) { - conns[i] = (int *) calloc(Elem_info[et].con_len,sizeof(int)); - if(conns[i] == (int *) NULL) { - fprintf(stderr,"Error: allocating border conns array\n"); - return(Z_ERR); - } - } - } - - parent_type = (short *) calloc(ne,sizeof(short)); - if(parent_type == (short *) NULL) { - fprintf(stderr,"Error: allocating border parent_type array\n"); - return(Z_ERR); - } - - parent_num = (int *) calloc(ne,sizeof(int)); - if(parent_num == (int *) NULL) { - fprintf(stderr,"Error: allocating border parent_num array\n"); - return(Z_ERR); - } - - - err = USERD_get_border_elements_by_type(pn, - et, - conns, - parent_type, - parent_num); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting border elements\n"); - return(Z_ERR); - } - - - /* Echo "some" info - *-----------------*/ - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s border element %d of %d:\n", - Elem_info[et].name,i+1,ne); - fprintf(stderr," Parent type: %s\n", - Elem_info[parent_type[i]].name); - fprintf(stderr," Parent num: %d\n",parent_num[i]); - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s border element %d of %d:\n", - Elem_info[et].name,i+1,ne); - fprintf(stderr," Parent type: %s\n", - Elem_info[parent_type[i]].name); - fprintf(stderr," Parent num: %d\n",parent_num[i]); - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[i][j]); - } - fprintf(stderr,"\n"); - } - - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<ne; ++i) { - free(conns[i]); - } - free(conns); - free(parent_type); - free(parent_num); - } - } - } - - -#if (defined GT_USERD_API_204) - /* See if any rigid body in model - *-------------------------------*/ - if(Any_Rigid_Body_Present) { - -#if (defined GT_USERD_API_207) - if(USERD_rigidbody_values(pn,values) == Z_OK) { - fprintf(stderr," Rigid Body values:\n"); - fprintf(stderr," IX = %g\n",values[0]); - fprintf(stderr," IY = %g\n",values[1]); - fprintf(stderr," IZ = %g\n",values[2]); - fprintf(stderr," E0 = %g\n",values[3]); - fprintf(stderr," E1 = %g\n",values[4]); - fprintf(stderr," E2 = %g\n",values[5]); - fprintf(stderr," E3 = %g\n",values[6]); - fprintf(stderr," XOFF = %g\n",values[7]); - fprintf(stderr," YOFF = %g\n",values[8]); - fprintf(stderr," ZOFF = %g\n",values[9]); - fprintf(stderr," ROT_ORDER = %g\n",values[10]); - fprintf(stderr," XROT = %g\n",values[11]); - fprintf(stderr," YROT = %g\n",values[12]); - fprintf(stderr," ZROT = %g\n",values[13]); - } -#else - if(USERD_rigidbody_values(pn,vals) == Z_OK) { - fprintf(stderr," Rigid Body values:\n"); - fprintf(stderr," IX = %g\n",vals[0]); - fprintf(stderr," IY = %g\n",vals[1]); - fprintf(stderr," IZ = %g\n",vals[2]); - fprintf(stderr," E0 = %g\n",vals[3]); - fprintf(stderr," E1 = %g\n",vals[4]); - fprintf(stderr," E2 = %g\n",vals[5]); - fprintf(stderr," E3 = %g\n",vals[6]); - fprintf(stderr," XOFF = %g\n",vals[7]); - fprintf(stderr," YOFF = %g\n",vals[8]); - fprintf(stderr," ZOFF = %g\n",vals[9]); - } -#endif - } -#endif - - } /* end for p = 0 to Num_parts */ - - return(Z_OK); -} - - -/*---------------- - * gold_var_loader - *----------------*/ -static int -gold_var_loader(int var_time_step) -{ - int i, j; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - float constant_val; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float *values; - float minv,maxv; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n--------------- var_loader --------------\n"); - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - if(v > 0) { - fprintf(stderr,"\n"); - } - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - - - if(Num_time_sets > 0) { - /* Get the timeset used for the variable - *---------------------------------------*/ - var_timeset = Varinfo[v].timeset; - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(var_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n", - Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(var_timeset,var_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - var_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",var_time_step); - } - - - /* Constants - *----------*/ - if(Varinfo[v].type == Z_CONSTANT) { - - constant_val = USERD_get_constant_val(vn,FALSE); - fprintf(stderr," Constant (%s):\n",Varinfo[v].description); - fprintf(stderr," value: %g\n",constant_val); - - if(Varinfo[v].complex) { - constant_val = USERD_get_constant_val(vn,TRUE); - fprintf(stderr," value (imag): %g\n",constant_val); - } - } - - /* Scalars, Vectors, Tensors - *--------------------------*/ - else { - - /* Get the var description line - *-----------------------------*/ - err = USERD_get_descrip_lines(Z_VARI,vn,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - if(Varinfo[v].complex) { - err = USERD_get_descrip_lines(Z_VARI,vn,TRUE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line (imag): %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line (imag)\n"); - return(Z_ERR); - } - } - - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - else if(Varinfo[v].type == Z_TENSOR) { - num_comps = 6; - } - else if(Varinfo[v].type == Z_TENSOR9) { - num_comps = 9; - } - - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - - if(Doing_Structured_Cinching) { - bdim[comp] = Pbuild[p].ne[comp]; - - /* even */ - if((bdim[comp] % 2) == 0) { - bdim[comp] = (bdim[comp]/2) + 1; - } - /* odd */ - else { - bdim[comp] = ((bdim[comp]-1)/2) + 1; - } - } - - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - - /* For structured cinching, send in one less on each end and stride of 2 - *----------------------------------------------------------------------*/ - if(Doing_Structured_Cinching) { - err = USERD_set_block_range_and_stride(pn, - 0, Pbuild[p].ne[0]-1, 2, - 0, Pbuild[p].ne[1]-1, 2, - 0, Pbuild[p].ne[2]-1, 2); - } - } - - - fprintf(stderr," For part %d, with %d nodes:\n",pn,nsize); - - if(nsize > 0) { - values = (float *) calloc((nsize+1),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - for(comp=0; comp<num_comps; ++comp) { - - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - 0, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d: \n",comp); - fprintf(stderr," node %10d value: %g\n",1,values[1]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - if(Varinfo[v].complex) { - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - 0, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d (imag): \n",comp); - fprintf(stderr," node %10d value: %g\n",1,values[1]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - } - } - free(values); - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - if(Doing_Structured_Cinching) { - bdim[comp] = Pbuild[p].ne[comp]; - - /* even */ - if((bdim[comp] % 2) == 0) { - bdim[comp] = (bdim[comp]/2) + 1; - } - /* odd */ - else { - bdim[comp] = ((bdim[comp]-1)/2) + 1; - } - } - - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - } - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - - - /* For structured cinching, send in one less on each end and stride of 2 - *----------------------------------------------------------------------*/ - if(Doing_Structured_Cinching) { - err = USERD_set_block_range_and_stride(pn, - 0, Pbuild[p].ne[0]-1, 2, - 0, Pbuild[p].ne[1]-1, 2, - 0, Pbuild[p].ne[2]-1, 2); - } - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - fprintf(stderr," For part %d, with %d elems of type %s:\n", - pn,nsize,Elem_info[et].name); - - - values = (float *) calloc((nsize+1),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - for(comp=0; comp<num_comps; ++comp) { - - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - et, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st elem, last elem, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d: \n",comp); - fprintf(stderr," elem %10d value: %g\n",1,values[1]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - if(Varinfo[v].complex) { - err = USERD_get_var_by_component(vn, - pn, - Varinfo[v].type, - et, - FALSE, - comp, - values); - if(err == Z_UNDEF) { - fprintf(stderr," Variable not defined on this part\n"); - } - - /* For the component, show 1st elem, last elem, min, max values - *-------------------------------------------------------------*/ - minv = maxv = values[1]; - for(i=2; i<=nsize; ++i) { - if(values[i] < minv) { - minv = values[i]; - } - if(values[i] > maxv) { - maxv = values[i]; - } - } - - fprintf(stderr," For component %d (imag): \n",comp); - fprintf(stderr," elem %10d value: %g\n",1,values[1]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize]); - fprintf(stderr," min value: %g\n",minv); - fprintf(stderr," max value: %g\n",maxv); - - } - } - free(values); - } - } - } - } - } - } - - return(Z_OK); -} - -#else - -/*------------- - * part_builder - *-------------*/ -static int -part_builder(int geom_time_step) -{ - int i, j; - int err; - int p, pn; - int et, ne; - int *elemids[Z_MAXTYPE]; - int **conns[Z_MAXTYPE]; - int nn; - int comp; - int bdim[3]; - int ib[5]; - int num_dims; - int cell_type; - float mm[6]; - float **coords; - int *nodeids; - int *iblanking; - CRD *crds; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n------------- part_builder --------------\n"); - - - if(Num_time_steps > 1) { - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------*/ - USERD_set_time_step(geom_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d\n", - geom_time_step,0,Num_time_steps-1); - } - - - /* Get the global coords - *----------------------*/ - nn = USERD_get_number_of_global_nodes(); - - if(nn > 0) { - - crds = (CRD *) calloc(nn,sizeof(CRD)); - if(crds == (CRD *) NULL) { - fprintf(stderr,"Error: allocating crds array\n"); - return(Z_ERR); - } - - if(Node_labels) { - nodeids = (int *) calloc(nn,sizeof(int)); - if(nodeids == (int *) NULL) { - fprintf(stderr,"Error: allocating nodeids array\n"); - return(Z_ERR); - } - } - - - err = USERD_get_global_coords(crds); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting unstructured coords\n"); - return(Z_ERR); - } - - if(Node_labels) { - err = USERD_get_global_node_ids(nodeids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting nodeids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - crds[i].xyz[0], crds[i].xyz[1], crds[i].xyz[2]); - mm[0] = mm[1] = crds[i].xyz[0]; - mm[2] = mm[3] = crds[i].xyz[1]; - mm[4] = mm[5] = crds[i].xyz[2]; - - - /* Last node - *----------*/ - i = nn-1; - if(i > 0) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - if(Node_labels) { - fprintf(stderr," id: %d\n",nodeids[i]); - } - fprintf(stderr," x y z coordinates: %g %g %g\n", - crds[i].xyz[0], crds[i].xyz[1], crds[i].xyz[2]); - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=1; i<nn; ++i) { - if(crds[i].xyz[0] < mm[0]) { - mm[0] = crds[i].xyz[0]; - } - if(crds[i].xyz[0] > mm[1]) { - mm[1] = crds[i].xyz[0]; - } - if(crds[i].xyz[1] < mm[2]) { - mm[2] = crds[i].xyz[1]; - } - if(crds[i].xyz[1] > mm[3]) { - mm[3] = crds[i].xyz[1]; - } - if(crds[i].xyz[2] < mm[4]) { - mm[4] = crds[i].xyz[2]; - } - if(crds[i].xyz[2] > mm[5]) { - mm[5] = crds[i].xyz[2]; - } - } - - fprintf(stderr," Global coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - - - /* Free the allocated memory - *--------------------------*/ - free(crds); - if(Node_labels) { - free(nodeids); - } - } - - - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - conns[et] = (int **) calloc(ne,sizeof(int *)); - if(conns[et] == (int **) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - else { - for(i=0; i<ne; ++i) { - conns[et][i] = (int *) calloc(Elem_info[et].con_len,sizeof(int)); - if(conns[et][i] == (int *) NULL) { - fprintf(stderr,"Error: allocating conns array\n"); - return(Z_ERR); - } - } - } - - if(Element_labels) { - elemids[et] = (int *) calloc(ne,sizeof(int)); - if(elemids[et] == (int *) NULL) { - fprintf(stderr,"Error: allocating elemids array\n"); - return(Z_ERR); - } - } - } - } - - /* Get the elements - *-----------------*/ - err = USERD_get_element_connectivities_for_part(pn,conns); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element connectivities\n"); - return(Z_ERR); - } - - /* Get the element ids - if any - *-----------------------------*/ - if(Element_labels) { - err = USERD_get_element_ids_for_part(pn,elemids); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting element ids\n"); - return(Z_ERR); - } - } - - /* Echo "some" info - *-----------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - - /* First element of the type - *--------------------------*/ - i = 0; - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[et][i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[et][i][j]); - } - fprintf(stderr,"\n"); - - /* Last element of the type - *-------------------------*/ - i = ne - 1; - if(i > 0) { - fprintf(stderr," %s Element %d of %d:\n",Elem_info[et].name,i+1,ne); - if(Element_labels) { - fprintf(stderr," id: %d\n",elemids[et][i]); - } - fprintf(stderr," connectivity:"); - for(j=0; j<Elem_info[et].con_len; ++j) { - fprintf(stderr," %d",conns[et][i][j]); - } - fprintf(stderr,"\n"); - } - } - } - - /* Free the allocated memory - *--------------------------*/ - for(et=0; et<Z_MAXTYPE; ++et) { - ne = Pbuild[p].ne[et]; - - if(ne > 0) { - for(i=0; i<ne; ++i) { - free(conns[et][i]); - } - free(conns[et]); - - if(Element_labels) { - free(elemids[et]); - } - } - } - } - - - /*--------------------- - * For structured parts - *---------------------*/ - else { - - /* Get the block coords - *---------------------*/ - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - coords = (float **) calloc(num_dims,sizeof(float *)); - if(coords == (float **) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - else { - for(i=0; i<num_dims; ++i) { - coords[i] = (float *) calloc(nn,sizeof(float)); - if(coords[i] == (float *) NULL) { - fprintf(stderr,"Error: allocating coords array\n"); - return(Z_ERR); - } - } - } - - /* Get the coords - *---------------*/ - for(comp=0; comp<num_dims; ++comp) { - err = USERD_get_block_coords_by_component(pn,comp,coords[comp]); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block coords\n"); - return(Z_ERR); - } - } - - - /* Echo "some" info - *-----------------*/ - - /* First node - *-----------*/ - if(nn > 0) { - i = 0; - fprintf(stderr," Node %d of %d:\n",i+1,nn); - - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - mm[4] = mm[5] = coords[2][i]; - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - mm[0] = mm[1] = coords[0][i]; - mm[2] = mm[3] = coords[1][i]; - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - mm[0] = mm[1] = coords[0][i]; - } - - - /* Last node - *----------*/ - i = nn-1; - if(i > 1) { - fprintf(stderr," Node %d of %d:\n",i+1,nn); - - if(num_dims == 3) { - fprintf(stderr," x y z coordinates: %g %g %g\n", - coords[0][i], coords[1][i], coords[2][i]); - } - else if(num_dims == 2) { - fprintf(stderr," x y coordinates: %g %g\n", - coords[0][i], coords[1][i]); - } - else { - fprintf(stderr," x coordinates: %g\n", - coords[0][i]); - } - } - } - - /* Min and max coordinate values - *------------------------------*/ - for(i=2; i<=nn; ++i) { - if(coords[0][i] < mm[0]) { - mm[0] = coords[0][i]; - } - if(coords[0][i] > mm[1]) { - mm[1] = coords[0][i]; - } - if(num_dims > 1) { - if(coords[1][i] < mm[2]) { - mm[2] = coords[1][i]; - } - if(coords[1][i] > mm[3]) { - mm[3] = coords[1][i]; - } - } - if(num_dims > 2) { - if(coords[2][i] < mm[4]) { - mm[4] = coords[2][i]; - } - if(coords[2][i] > mm[5]) { - mm[5] = coords[2][i]; - } - } - } - - fprintf(stderr," Coordinate ranges:\n"); - fprintf(stderr," min x: %g\n",mm[0]); - fprintf(stderr," max x: %g\n",mm[1]); - if(num_dims > 1) { - fprintf(stderr," min y: %g\n",mm[2]); - fprintf(stderr," max y: %g\n",mm[3]); - } - if(num_dims > 2) { - fprintf(stderr," min z: %g\n",mm[4]); - fprintf(stderr," max z: %g\n",mm[5]); - } - - /* Free the allocated memory - so far - *-----------------------------------*/ - for(i=0; i<num_dims; ++i) { - free(coords[i]); - } - free(coords); - - - /* Get the block iblanking - if any - *---------------------------------*/ - if(Pbuild[p].type == Z_IBLANKED) { - - iblanking = (int *) calloc(nn,sizeof(int)); - if(iblanking == (int *) NULL) { - fprintf(stderr,"Error: allocating iblanking array\n"); - return(Z_ERR); - } - - err = USERD_get_block_iblanking(pn,iblanking); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block iblanking\n"); - return(Z_ERR); - } - - /* Echo "some" info - *-----------------*/ - ib[Z_EXT] = 0; - ib[Z_INT] = 0; - ib[Z_BND] = 0; - ib[Z_INTBND] = 0; - ib[Z_SYM] = 0; - - for(i=0; i<nn; ++i) { - ++ib[iblanking[i]]; - } - - fprintf(stderr," Iblanking breakdown:\n"); - fprintf(stderr," Number of Z_EXT: %d\n",ib[Z_EXT]); - fprintf(stderr," Number of Z_INT: %d\n",ib[Z_INT]); - fprintf(stderr," Number of Z_BND: %d\n",ib[Z_BND]); - fprintf(stderr," Number of Z_INTBND: %d\n",ib[Z_INTBND]); - fprintf(stderr," Number of Z_SYM: %d\n",ib[Z_SYM]); - - free(iblanking); - } - } - } - - return(Z_OK); -} - - -/*----------- - * var_loader - *-----------*/ -static int -var_loader(int var_time_step) -{ - int i, j, k; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - float constant_val; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float *values; - float *tvalues; - float minv[3],maxv[3]; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n--------------- var_loader --------------\n"); - - if(Num_time_steps > 1 && v == 0) { - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_step(var_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d)\n\n", - var_time_step,0,Num_time_steps-1); - } - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - if(v > 0) { - fprintf(stderr,"\n"); - } - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - - /* Constants - *----------*/ - if(Varinfo[v].type == Z_CONSTANT) { - - constant_val = USERD_get_constant_value(vn); - fprintf(stderr," Constant (%s):\n",Varinfo[v].description); - fprintf(stderr," value: %g\n",constant_val); - } - - - /* Scalars, Vectors, Tensors - *--------------------------*/ - else { - - /* Get the var description line - *-----------------------------*/ - err = USERD_get_description_lines(Z_VARI,vn,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - else if(Varinfo[v].type == Z_TENSOR) { - num_comps = 6; - } - else if(Varinfo[v].type == Z_TENSOR9) { - num_comps = 9; - } - - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - } - - - fprintf(stderr," For part %d, with %d nodes:\n",pn,nsize); - - if(nsize > 0) { - values = (float *) calloc((num_comps * nsize),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - if(num_comps == 1) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_scalar_values(vn, - pn, - 0, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting scalar values\n"); - return(Z_ERR); - } - } - else { - err = USERD_get_block_scalar_values(pn, - vn, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block scalar values\n"); - return(Z_ERR); - } - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - for(i=0; i<nsize; ++i) { - if(values[i] < minv[0]) { - minv[0] = values[i]; - } - if(values[i] > maxv[0]) { - maxv[0] = values[i]; - } - } - - fprintf(stderr," node %10d value: %g\n",1,values[0]); - fprintf(stderr," node %10d value: %g\n",nsize,values[nsize-1]); - fprintf(stderr," min value: %g\n",minv[0]); - fprintf(stderr," max value: %g\n",maxv[0]); - - } - - else if(num_comps == 3) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_vector_values(vn, - pn, - 0, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - } - else { - - tvalues = (float *) calloc(nsize,sizeof(float)); - if(tvalues == (float *) NULL) { - fprintf(stderr,"Error: alocating tvalues array\n"); - return(Z_ERR); - } - - for(i=0; i<3; ++i) { - err = USERD_get_block_vector_values_by_component(pn, - vn, - i, - tvalues); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - for(j=0; j<nsize; ++j) { - k = j*3 + i; - values[k] = tvalues[j]; - } - } - free(tvalues); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - minv[1] = maxv[1] = values[1]; - minv[2] = maxv[2] = values[2]; - for(i=0; i<nsize; ++i) { - j = i*3; - for(k=0; k<3; ++k) { - if(values[j+k] < minv[k]) { - minv[k] = values[j+k]; - } - if(values[j+k] > maxv[k]) { - maxv[k] = values[j+k]; - } - } - } - - fprintf(stderr," node %10d values: %g %g %g\n",1, - values[0],values[1],values[2]); - fprintf(stderr," node %10d values: %g %g %g\n",nsize, - values[3*nsize-3],values[3*nsize-2],values[3*nsize-1]); - fprintf(stderr," min values: %g %g %g\n", - minv[0],minv[1],minv[2]); - fprintf(stderr," max values: %g %g %g\n", - maxv[0],maxv[1],maxv[2]); - - } - free(values); - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - fprintf(stderr," For part %d, with %d elems of type %s:\n", - pn,nsize,Elem_info[et].name); - - values = (float *) calloc((num_comps * nsize),sizeof(float)); - if(values == (float *) NULL) { - fprintf(stderr,"Error: alocating variable values\n"); - return(Z_ERR); - } - - if(num_comps == 1) { - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_scalar_values(vn, - pn, - et, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting scalar values\n"); - return(Z_ERR); - } - } - else { - err = USERD_get_block_scalar_values(pn, - vn, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting block scalar values\n"); - return(Z_ERR); - } - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - for(i=1; i<nsize; ++i) { - if(values[i] < minv[0]) { - minv[0] = values[i]; - } - if(values[i] > maxv[0]) { - maxv[0] = values[i]; - } - } - - fprintf(stderr," elem %10d value: %g\n",1,values[0]); - fprintf(stderr," elem %10d value: %g\n",nsize,values[nsize-1]); - fprintf(stderr," min value: %g\n",minv[0]); - fprintf(stderr," max value: %g\n",maxv[0]); - - } - - else if(num_comps == 3) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - err = USERD_get_vector_values(vn, - pn, - et, - values); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - } - else { - - tvalues = (float *) calloc(nsize,sizeof(float)); - if(tvalues == (float *) NULL) { - fprintf(stderr,"Error: alocating tvalues array\n"); - return(Z_ERR); - } - - for(i=0; i<3; ++i) { - err = USERD_get_block_vector_values_by_component(pn, - vn, - i, - tvalues); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting vector values\n"); - return(Z_ERR); - } - for(j=0; j<nsize; ++j) { - k = j*3 + i; - values[k] = tvalues[j]; - } - } - free(tvalues); - } - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - minv[0] = maxv[0] = values[0]; - minv[1] = maxv[1] = values[1]; - minv[2] = maxv[2] = values[2]; - for(i=1; i<=nsize; ++i) { - j = i*3; - for(k=0; k<3; ++k) { - if(values[j+k] < minv[k]) { - minv[k] = values[j+k]; - } - if(values[j+k] > maxv[k]) { - maxv[k] = values[j+k]; - } - } - } - - fprintf(stderr," elem %10d values: %g %g %g\n",1, - values[0],values[1],values[2]); - fprintf(stderr," elem %10d values: %g %g %g\n",nsize, - values[3*nsize-3],values[3*nsize-2],values[3*nsize-1]); - fprintf(stderr," min values: %g %g %g\n", - minv[0],minv[1],minv[2]); - fprintf(stderr," max values: %g %g %g\n", - maxv[0],maxv[1],maxv[2]); - - } - free(values); - } - } - } - } - } - } - - return(Z_OK); -} - -#endif - - -#if (defined GT_USERD_API_202) - - -/*--------------- - * materials_info - *---------------*/ -static int -materials_info( void ) -{ - int i,j; - int err; - int *num_materials; - int *msids; - char **msname; - int *mids; - char **mdesc; - - - fprintf(stderr,"\n------------- materials info --------------\n"); - - /* Get the number of variables - *----------------------------*/ - Num_materials_sets = USERD_get_number_of_material_sets(); - if(Num_materials_sets < 0) { - fprintf(stderr,"Error: getting the number of material sets\n"); - return(Z_ERR); - } - else { - if(Num_materials_sets == 0) { - fprintf(stderr," No materials sets in the model\n"); - return (Z_OK); - } - else if(Num_materials_sets > 1) { - fprintf(stderr," Number of materials sets: %d\n",Num_materials_sets); - fprintf(stderr," Currently, EnSight 7.6 only supports 1 material set\n"); - return(Z_ERR); - } - else { - fprintf(stderr," Number of materials sets: %d\n",Num_materials_sets); - } - } - - /* Get the material set index list and names - *------------------------------------------*/ - msids = (int *) calloc(Num_materials_sets,sizeof(int)); - if(msids == (int *)NULL) { - fprintf(stderr," Problems allocating for material set ids\n"); - return(Z_ERR); - } - - num_materials = (int *) calloc(Num_materials_sets,sizeof(int)); - if(num_materials == (int *)NULL) { - fprintf(stderr," Problems allocating for material set num materials\n"); - return(Z_ERR); - } - - msname = (char **) calloc(Num_materials_sets,sizeof(char *)); - if(msname == (char **)NULL) { - fprintf(stderr," Problems allocating for material set names\n"); - return(Z_ERR); - } - else { - for(i=0; i<Num_materials_sets; ++i) { - msname[i] = (char *) calloc(Z_BUFL,sizeof(char)); - if(msname[i] == (char *)NULL) { - fprintf(stderr," Problems allocating for material set names\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_matf_set_info(msids,msname); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting material set info\n"); - } - else { - for(i=0; i<Num_materials_sets; ++i) { - - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Material set %d:\n",i+1); - - fprintf(stderr," id: %d\n",msids[i]); - fprintf(stderr," name: %s\n",msname[i]); - - num_materials[i] = USERD_get_number_of_materials(i); - if(num_materials[i] < 0) { - fprintf(stderr,"Error: getting the number of materials in set %d\n",i); - return (Z_ERR); - } - else if(num_materials[i] == 0) { - fprintf(stderr," No materials in Materials set %d\n",i); - return (Z_OK); - } - else { - mids = (int *) calloc(num_materials[i],sizeof(int)); - if(mids == (int *)NULL) { - fprintf(stderr," Problems allocating for material ids\n"); - return(Z_ERR); - } - - mdesc = (char **) calloc(num_materials[i],sizeof(char *)); - if(mdesc == (char **)NULL) { - fprintf(stderr," Problems allocating for material desc\n"); - return(Z_ERR); - } - else { - for(j=0; j<num_materials[i]; ++j) { - mdesc[j] = (char *) calloc(Z_BUFL,sizeof(char)); - if(mdesc[j] == (char *)NULL) { - fprintf(stderr," Problems allocating for material desc\n"); - return(Z_ERR); - } - } - } - - err = USERD_get_matf_var_info(i,mids,mdesc); - if(err == Z_ERR) { - fprintf(stderr,"Error: getting material info\n"); - } - else { - - for(j=0; j<num_materials[i]; ++j) { - /* Echo some feedback - *-------------------*/ - fprintf(stderr," For Material %d:\n",j+1); - - fprintf(stderr," index: %d\n",mids[j]); - fprintf(stderr," description: %s\n",mdesc[j]); - } - } - } - } - } - - /* Free the allocated memory - *--------------------------*/ - for(i=0; i<Num_materials_sets; ++i) { - free(msname[i]); - - for(j=0; j<num_materials[i]; ++j) { - free(mdesc[j]); - } - } - free(msname); - free(msids); - free(num_materials); - free(mdesc); - free(mids); - - return(Z_OK); -} - - -/*---------------------- - * gold_materials_loader - *----------------------*/ -static int -gold_materials_loader(int geom_time_step) -{ - int i, j, k, ms, nn; - int err, err1, err2; - int geom_timeset; - int p, pn; - int et, e1, e2; - int num_dims; - int comp; - int bdim[3]; - int ne; - int cell_type; - int bd1,bd2,bd3; - int *ivals; - float *fvals; - int do_num; - int mixed_present; - int matf_size, matfv_size; - - - fprintf(stderr,"\n-------------- materials_loader --------------\n"); - - if(Num_time_sets > 0) { - /* Get the timeset used for the geometry - *--------------------------------------*/ - geom_timeset = USERD_get_geom_timeset_number(); - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(geom_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Num time steps returned: %d\n",Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(geom_time_step > (Num_time_steps - 1)) { - geom_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -gts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(geom_timeset,geom_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - geom_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",geom_time_step); - } - - for(ms=0; ms<Num_materials_sets; ++ms) { - fprintf(stderr,"\n"); - fprintf(stderr," Materials Set %d:\n",ms+1); - - for(p=0; p<Num_parts; ++p) { - pn = p+1; - - fprintf(stderr,"\n"); - fprintf(stderr," Part %d:\n",pn); - - /*----------------------- - * For unstructured parts - *-----------------------*/ - if(Pbuild[p].type == Z_UNSTRUCTURED) { - - e1 = 0; - e2 = Z_MAXTYPE; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nn = bdim[0] * bdim[1] * bdim[2]; - - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - ne = bd1 * bd2 * bd3; - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - - e1 = cell_type; - e2 = cell_type + 1; - } - - - for(et=e1; et<e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - ne = Pbuild[p].ne[et]; - } - - if(ne > 0) { - - /* Get the material ids, if any - *-----------------------------*/ - err = USERD_size_matf_data(ms, - pn, - et, - Z_MAT_INDEX, - &matf_size); - if(err == Z_OK && matf_size > 0) { - - - /* Go get the material ids - *------------------------*/ - ivals = (int *) calloc(matf_size,sizeof(int)); - if(ivals == (int *)NULL) { - fprintf(stderr," Problems allocating for material ids\n"); - return(Z_ERR); - } - err = USERD_load_matf_data(ms, - pn, - et, - Z_MAT_INDEX, - ivals, - fvals); - if(err == Z_OK) { - if(matf_size < 20) { - fprintf(stderr," Printing all mat ids for %s elements\n", - Elem_info[et].name); - do_num = matf_size; - } - else { - fprintf(stderr," Printing first 20 mat ids for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - - /* See if any mixed materials - *---------------------------*/ - mixed_present = FALSE; - for(k=0; k<matf_size; ++k) { - if(ivals[k] < 0) { - mixed_present = TRUE; - break; - } - } - - /* Feedback - *---------*/ - for(k=0; k<do_num; ++k) { - fprintf(stderr," mat id[%d] = %d\n",k,ivals[k]); - } - free(ivals); - } - else { - fprintf(stderr," Trouble getting mat ids for %s elements\n", - Elem_info[et].name); - free(ivals); - return(Z_ERR); - } - } - else { - fprintf(stderr," %s elements have no material ids\n", - Elem_info[et].name); - } - - - /* Get the mixed material ids, if any - *-----------------------------------*/ - if(mixed_present) { - err1 = USERD_size_matf_data(ms, - pn, - et, - Z_MIX_INDEX, - &matf_size); - err2 = USERD_size_matf_data(ms, - pn, - et, - Z_MIX_VALUE, - &matfv_size); - - if(err1 == Z_OK && - err2 == Z_OK && - matf_size > 0 && - matfv_size > 0) { - - /* Go get the material ids - *------------------------*/ - ivals = (int *) calloc(matf_size,sizeof(int)); - if(ivals == (int *)NULL) { - fprintf(stderr," Problems allocating for mixed material ids\n"); - return(Z_ERR); - } - fvals = (float *) calloc(matfv_size,sizeof(float)); - if(fvals == (float *)NULL) { - fprintf(stderr," Problems allocating for mixed material values\n"); - return(Z_ERR); - } - - err1 = USERD_load_matf_data(ms, - pn, - et, - Z_MIX_INDEX, - ivals, - fvals); - - err2 = USERD_load_matf_data(ms, - pn, - et, - Z_MIX_VALUE, - ivals, - fvals); - if(err1 == Z_OK && - err2 == Z_OK) { - if(matf_size < 20) { - fprintf(stderr," Printing all mixed mat ids for %s elements\n", - Elem_info[et].name); - do_num = matf_size; - } - else { - fprintf(stderr," Printing first 20 mixed mat ids for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - for(k=0; k<do_num; ++k) { - fprintf(stderr," mixed mat id[%d] = %d\n",k,ivals[k]); - } - free(ivals); - - if(matfv_size < 20) { - fprintf(stderr," Printing all mixed mat values for %s elements\n", - Elem_info[et].name); - do_num = matfv_size; - } - else { - fprintf(stderr," Printing first 20 mixed mat values for %s elements\n", - Elem_info[et].name); - do_num = 20; - } - for(k=0; k<do_num; ++k) { - fprintf(stderr," mixed mat val[%d] = %f\n",k,fvals[k]); - } - free(fvals); - } - else { - fprintf(stderr," Trouble getting mixed mat ids or vals for %s elements\n", - Elem_info[et].name); - free(ivals); - free(fvals); - return(Z_ERR); - } - } - else { - fprintf(stderr," Trouble getting mixed mat sizes for %s elements\n", - Elem_info[et].name); - return(Z_ERR); - } - } - else { - fprintf(stderr," (%s elements have no mixed material ids)\n", - Elem_info[et].name); - } - } - } - } - } - return(Z_OK); -} - -#endif - - -/*-------------- - * entity_querys - *--------------*/ -static int -entity_querys(int var_time_step) -{ - int i, j; - int err; - int v, vn; - int var_timeset; - int p, pn; - int et, e1, e2; - int num_comps; - int num_dims; - int nsize; - int comp; - int bdim[3]; - int ne; - int cell_type; - char line1[Z_BUFL]; - char line2[Z_BUFL]; - float qvals[3]; - int bd1,bd2,bd3; - - - fprintf(stderr,"\n-------------- entity_querys ------------\n"); - fprintf(stderr," (scalar & vector variables only) \n"); - fprintf(stderr,"\n"); - -#if (defined USERD_API_100) - - if(Num_time_steps > 1) { - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the time step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_step(var_time_step); - - fprintf(stderr," Using time step: %d (where range is %d through %d)\n\n", - var_time_step,0,Num_time_steps-1); - } -#endif - - for(v=0; v<Num_vars; ++v) { - vn = v + 1; - - /* Scalar or vectors only - *-----------------------*/ - if(Varinfo[v].type == Z_SCALAR || Varinfo[v].type == Z_VECTOR) { - - - if(Varinfo[v].classify == Z_PER_NODE) { - fprintf(stderr," Z_PER_NODE Variable %d:\n",vn); - } - else { - fprintf(stderr," Z_PER_ELEM Variable %d:\n",vn); - } - -#if (defined GT_USERD_API_100) - - if(Num_time_sets > 0) { - /* Get the timeset used for the variable - *---------------------------------------*/ - var_timeset = Varinfo[v].timeset; - - /* Get the number of time steps for this timeset - *----------------------------------------------*/ - Num_time_steps = USERD_get_num_of_time_steps(var_timeset); - if(Num_time_steps < 1) { - fprintf(stderr," Error: Number of time steps returned: %d\n", - Num_time_steps); - fprintf(stderr," (Must be >0 to be okay)\n"); - return(Z_ERR); - } - if(var_time_step > (Num_time_steps - 1)) { - var_time_step = Num_time_steps - 1; - } - - /* Set the timeset and step - to first step by default, but - * can set it at others using -vts command argument - *---------------------------------------------------------*/ - USERD_set_time_set_and_step(var_timeset,var_time_step); - - fprintf(stderr," Using timeset: %d (step range is %d through %d)\n", - var_timeset,0,Num_time_steps-1); - fprintf(stderr," Using time step: %d\n",var_time_step); - } -#endif - - - /* Get the var description line - *-----------------------------*/ -#if (defined GT_USERD_API_100) - err = USERD_get_descrip_lines(Z_VARI,vn,FALSE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - - if(Varinfo[v].complex) { - err = USERD_get_descrip_lines(Z_VARI,vn,TRUE,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line (imag): %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line (imag)\n"); - return(Z_ERR); - } - } -#else - - err = USERD_get_description_lines(Z_VARI,vn,line1,line2); - if(err == Z_OK) { - fprintf(stderr," Desc line: %s\n",line1); - } - else { - fprintf(stderr,"Error: getting var description line\n"); - return(Z_ERR); - } - -#endif - - /* Get the values by component - *-----------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - num_comps = 1; - } - else if(Varinfo[v].type == Z_VECTOR) { - num_comps = 3; - } - - /* Per_Node - *---------*/ - if(Varinfo[v].classify == Z_PER_NODE) { - - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].nn; - } - else { - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - nsize = bdim[0] * bdim[1] * bdim[2]; - } - - - - if(nsize > 0) { - - fprintf(stderr," For part %d, using node %d:\n",pn,nsize); - -#if (defined GT_USERD_API_100) - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals, - FALSE); -#else - err = USERD_get_variable_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals); -#endif - if(err == Z_NOT_IMPLEMENTED) { - fprintf(stderr," Node and element queries not implemented\n"); - return(Z_OK); - } - else if(err == Z_ERR) { - fprintf(stderr," Could not get value\n"); - } - else { - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - -#if (defined GT_USERD_API_100) - if(Varinfo[v].complex) { - - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - 0, - var_time_step, - qvals, - TRUE); - - if(err == Z_ERR) { - fprintf(stderr," Could not get imag value\n"); - } - else { - - /* For the component, show 1st node, last node, min, max values - *-------------------------------------------------------------*/ - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value (imag) is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values (imag) are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - } - } -#endif - - } - } - } - } - - /* Per_Elem - *---------*/ - else { - for(p=0; p<Num_parts; ++p) { - pn = p + 1; - - if(Pbuild[p].type != Z_UNSTRUCTURED) { - - for(comp=0; comp<3; ++comp) { - if(Pbuild[p].ne[comp] < 1) { - bdim[comp] = 1; - } - else { - bdim[comp] = Pbuild[p].ne[comp]; - } - } - bd1 = bdim[0]-1; - if(bd1 < 1) { - bd1 = 1; - } - bd2 = bdim[1]-1; - if(bd2 < 1) { - bd2 = 1; - } - bd3 = bdim[2]-1; - if(bd3 < 1) { - bd3 = 1; - } - nsize = bd1 * bd2 * bd3; - - - /* Determine cell type - *--------------------*/ - num_dims = 3; - for(i=0; i<3; ++i) { - if(bdim[i] == 1) { - --num_dims; - } - } - if(num_dims == 3) { - cell_type = Z_HEX08; - } - else if(num_dims == 2) { - cell_type = Z_QUA04; - } - else { - cell_type = Z_BAR02; - } - } - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - e1 = 0; - e2 = Z_MAXTYPE-1; - } - else { - e1 = e2 = cell_type; - } - - for(et=e1; et<=e2; ++et) { - - if(Pbuild[p].type == Z_UNSTRUCTURED) { - nsize = Pbuild[p].ne[et]; - } - - if(nsize > 0) { - - - fprintf(stderr," For part %d, using elem %d of type %s:\n", - pn,nsize,Elem_info[et].name); - - -#if (defined GT_USERD_API_100) - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals, - FALSE); -#else - err = USERD_get_variable_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals); -#endif - - if(err == Z_NOT_IMPLEMENTED) { - fprintf(stderr," Node and element queries not implemented\n"); - return(Z_OK); - } - else if(err == Z_ERR) { - fprintf(stderr," Could not get value\n"); - } - else { - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - -#if (defined GT_USERD_API_100) - if(Varinfo[v].complex) { - - err = USERD_get_var_value_at_specific(vn, - nsize, - pn, - et, - var_time_step, - qvals, - TRUE); - if(err == Z_ERR) { - fprintf(stderr," Could not get imag value\n"); - } - else { - if(Varinfo[v].type == Z_SCALAR) { - fprintf(stderr," Scalar value (imag) is: %g\n",qvals[0]); - } - else { - fprintf(stderr," Vector values (imag) are: %g %g %g\n", - qvals[0],qvals[1],qvals[2]); - } - } - } -#endif - } - } - } - } - } - } - } - - return(Z_OK); -} - - -/*-------------- - * exercise_bkup - *--------------*/ -static int -exercise_bkup( void ) -{ - int err; - FILE *arcfile; - - fprintf(stderr,"\n------------ exercise_archive -----------\n"); - - arcfile = fopen("test.arc","wb"); - if(arcfile == (FILE *)NULL) { - fprintf(stderr,"Error: opening test archive file\n"); - return(Z_ERR); - } - err = USERD_bkup(arcfile,Z_SAVE_ARCHIVE); - if(err == Z_ERR) { - fprintf(stderr,"Error: saving to test archive file\n"); - return(Z_ERR); - } - fclose(arcfile); - - arcfile = fopen("test.arc","rb"); - err = USERD_bkup(arcfile,Z_REST_ARCHIVE); - if(err == Z_ERR) { - fprintf(stderr,"Error: restoring from test archive file\n"); - return(Z_ERR); - } - - fprintf(stderr," Archive test completed\n"); - - fclose(arcfile); - - return(Z_OK); -} - -/* ------------------------------------------------------- - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ------------------------------------------------------ */ -int load_fail_defaults(void) -{ - int check_for_failed = FALSE; - int cri1 = 0; /* Criteria1 ELE_FAILED_GREATER, etc */ - int cri2 = 0; - int logic_cri2 = 0; /* Logic for criteria 2 ELE_FAILED_LOGIC_NONE, AND, etc */ - float val1 = 0.0; /* failure threshold 1 */ - float val2= 0.0; /* failure threshold 2 */ - char failed_var_name[Z_MXVARIABLEDESC]={EOS}; - - check_for_failed = USERD_get_uns_failed_params( failed_var_name, - &val1, &val2, &cri1, &cri2, - &logic_cri2 ); - fprintf(stderr,"\n------------- failed element info -------------\n"); - if (check_for_failed == TRUE) { - fprintf(stderr," Failed element criteria info \n"); - fprintf(stderr," Variable name = %s\n",failed_var_name); - fprintf(stderr," Criteria 1 = %d\n",cri1); - fprintf(stderr," Criteria 2 = %d\n",cri1); - fprintf(stderr," Logic criteria = %d\n",logic_cri2); - fprintf(stderr," Value 1 = %f\n",val1); - fprintf(stderr," Value 2 = %f\n",val2); - } else { - fprintf(stderr," No Failed elements\n"); - } - return(Z_OK); -} - - -/* End of File */ diff --git a/applications/test/ensightFoamReader/udr_checker.c b/applications/test/ensightFoamReader/udr_checker.c deleted file mode 120000 index 2e9390c3103319daef639094dccfc34f83de8ee5..0000000000000000000000000000000000000000 --- a/applications/test/ensightFoamReader/udr_checker.c +++ /dev/null @@ -1 +0,0 @@ -udr_checker-80.c \ No newline at end of file diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H index 8ce3150b75672bbc0c3c1739f3e5f08e6b0c9729..b83ba15cef6405c848c02e6746397d4701204d93 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/getTimeIndex.H @@ -1,8 +1,8 @@ // Read time index from */uniform/time, but treat 0 and constant specially // or simply increment from the '-index' option if it was supplied - label timeIndex = 0; - +label timeIndex = 0; +{ if (optIndex) { timeIndex = indexingNumber++; @@ -37,7 +37,4 @@ continue; } } - - Info<< nl << "Time [" << timeIndex << "] = " << runTime.timeName() << nl; - -// end-of-file +} diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertLagrangian.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertLagrangian.H index 2719ccc85a4442365ea886b13af5f6159f13ce6e..07341e6dad46dcf0c543e8afced3b35d7b989799 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertLagrangian.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertLagrangian.H @@ -94,7 +94,7 @@ if (doLagrangian) ); Info<< " Lagrangian: " - << runTime.relativePath(writer.output()) << nl; + << args.relativePath(writer.output()) << nl; writer.writeTimeValue(mesh.time().value()); writer.writeGeometry(); diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertSurfaceFields.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertSurfaceFields.H index 5ab48ff99d95b685f0dd41c44dc71e77bfbc72de..a35a3de15e4ee889ac3390eb2603b8a122ffde41 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertSurfaceFields.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertSurfaceFields.H @@ -107,7 +107,7 @@ Description ); Info<< " Surface : " - << runTime.relativePath(writer.output()) << nl; + << args.relativePath(writer.output()) << nl; writer.writeTimeValue(timeValue); @@ -211,7 +211,7 @@ Description ); Info<< " FaceZone : " - << runTime.relativePath(writer.output()) << nl; + << args.relativePath(writer.output()) << nl; writer.beginFile(fz.name()); diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertTopoSet.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertTopoSet.H index e2a96e898f7a2f9dd11169b4cba419d5dd0406bc..270843cf7f1ac446b0b9a1d93351d3f2fa522782 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertTopoSet.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertTopoSet.H @@ -42,7 +42,7 @@ if (faceSetName.size()) ); Info<< " faceSet : " - << runTime.relativePath(outputName) << nl; + << args.relativePath(outputName) << nl; vtk::writeFaceSet ( @@ -70,7 +70,7 @@ if (pointSetName.size()) ); Info<< " pointSet : " - << runTime.relativePath(outputName) << nl; + << args.relativePath(outputName) << nl; vtk::writePointSet ( diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H index 763b3fa3d9fd93b77690ca57492e5ed4e540d5d2..ad4e27ef5169d54ab53318f2d02a76b53204e27f 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/convertVolumeFields.H @@ -113,7 +113,7 @@ Description ); Info<< " Internal : " - << runTime.relativePath(internalWriter->output()) << nl; + << args.relativePath(internalWriter->output()) << nl; internalWriter->writeTimeValue(mesh.time().value()); internalWriter->writeGeometry(); @@ -163,7 +163,7 @@ Description ); Info<< " Boundaries: " - << runTime.relativePath(writer->output()) << nl; + << args.relativePath(writer->output()) << nl; writer->writeTimeValue(timeValue); writer->writeGeometry(); @@ -229,7 +229,7 @@ Description ); Info<< " Boundary : " - << runTime.relativePath(writer->output()) << nl; + << args.relativePath(writer->output()) << nl; writer->writeTimeValue(timeValue); writer->writeGeometry(); diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index 2d727012ce00fe7f3090daa484cc361d882d0e80..9108061b3a304cc43e6e380656493fad6a98cc62 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -575,7 +575,7 @@ int main(int argc, char *argv[]) fvMeshSubsetProxy::subsetType cellSubsetType = fvMeshSubsetProxy::NONE; - string vtkName = runTime.globalCaseName(); + string vtkName = args.globalCaseName(); if (regionNames.size() == 1) { @@ -628,7 +628,7 @@ int main(int argc, char *argv[]) // Sub-directory for output const word vtkDirName = args.opt<word>("name", "VTK"); - const fileName outputDir(runTime.globalPath()/vtkDirName); + const fileName outputDir(args.globalPath()/vtkDirName); if (Pstream::master()) { @@ -650,7 +650,7 @@ int main(int argc, char *argv[]) if (args.found("overwrite") && isDir(regionDir)) { Info<< "Removing old directory " - << runTime.relativePath(regionDir) + << args.relativePath(regionDir) << nl << endl; rmDir(regionDir); } diff --git a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVFoam/vtkPVFoam.C b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVFoam/vtkPVFoam.C index 1cf6e69aaf718c77be7f598239d47d94d0c4a38b..794949c3f9105ada66b53eef3b9648debc04b84e 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVFoam/vtkPVFoam.C +++ b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVFoam/vtkPVFoam.C @@ -30,6 +30,7 @@ License #include "areaFaMesh.H" #include "faMesh.H" #include "fvMesh.H" +#include "foamVersion.H" #include "Time.H" #include "patchZones.H" #include "IOobjectList.H" @@ -314,6 +315,9 @@ Foam::vtkPVFoam::vtkPVFoam fullCasePath = cwd(); } + // OPENFOAM API + setEnv("FOAM_API", std::to_string(foamVersion::api), true); + // The name of the executable, unless already present in the environment setEnv("FOAM_EXECUTABLE", "paraview", false); diff --git a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVblockMesh/vtkPVblockMesh.C b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVblockMesh/vtkPVblockMesh.C index 6a9037c38540e54f51f46a3ed603652210c35b1e..efec807d266af56655fd4865ace86adefa4e5817 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVblockMesh/vtkPVblockMesh.C +++ b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVblockMesh/vtkPVblockMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2017-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,6 +29,7 @@ License // OpenFOAM includes #include "blockMesh.H" #include "blockMeshTools.H" +#include "foamVersion.H" #include "Time.H" #include "patchZones.H" #include "StringStream.H" @@ -206,6 +207,9 @@ Foam::vtkPVblockMesh::vtkPVblockMesh fullCasePath = cwd(); } + // OPENFOAM API + setEnv("FOAM_API", std::to_string(foamVersion::api), true); + // The name of the executable, unless already present in the environment setEnv("FOAM_EXECUTABLE", "paraview", false); diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/Allwmake b/applications/utilities/postProcessing/graphics/ensightFoamReader/Allwmake deleted file mode 100755 index ecb7039b93a994de65d349fce9bea25d936eea56..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/Allwmake +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory -. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments - -#------------------------------------------------------------------------------ - -wmake $targetType - -#------------------------------------------------------------------------------ diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/files b/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/files deleted file mode 100644 index 4a5c265dcd9c28a1ce3b541e4e68c42d0497f2e1..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -libuserd.C - -LIB = $(FOAM_LIBBIN)/libuserd-foam diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/options b/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/options deleted file mode 100644 index 0d76f0304cb80b84d3b76b745da396950249f4a5..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/Make/options +++ /dev/null @@ -1,14 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/browser/lnInclude \ - -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/lagrangian/basic/lnInclude - -LIB_LIBS = \ - -lOpenFOAM \ - -lfiniteVolume \ - -lmeshTools \ - -lgenericPatchFields \ - -llagrangian \ - $(PROJECT_LIBS) diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README b/applications/utilities/postProcessing/graphics/ensightFoamReader/README deleted file mode 100644 index 24ed777c767b9d643e7d173b0e324ccd7add4f30..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README +++ /dev/null @@ -1,1847 +0,0 @@ --------------------------------------- -EnSight User Defined Reader Capability --------------------------------------- - -A user defined reader capability is included in EnSight which allows otherwise -unsupported structured or unstructured data to be read. The user defined -reader utilizes a dynamic shared library composed of routines defined in this -document, but produced by the user (or some third party). This capability is -currently available for dec, ibm, hp, sgi, and sun servers. - -**************************************************************************** -Note: Several user defined readers have been included with your EnSight - release and can be accessed by changing the ENSIGHT6_READER - environment variable as outlined in step 3. below. Please be aware - that these are "unsupported" readers, but many of them are being used - successfully. -**************************************************************************** - - -The process for producing a user defined reader is: --------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy library and for various other working or - sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $ENSIGHT6_HOME/ensight62/user_defined_src/readers - - examples: - -------- - The default library. Basic dummy routines. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/dummy - - Sample library which reads unstructured binary EnSight6 data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/ensight6 - - Sample library which reads binary static plot3d data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/plot3d - - Reads binary LS-DYNA3D state database. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/ls-dyna3d - - Reads FORTRAN binary Unstrutured dytran data base. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/dytran - - Reads FlowScience "flsgrf" flow3d data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/flow3d - - Reads Tecplot "plt" files. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/tecplot - - Reads Common File Format data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/cff - - Reads Cobalt grid and picture/restart file data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/cobalt - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. Thus, a separate makefile is provided - for each machine type. Operating system level differences could cause - you to have to modify these makefiles slightly, but the general - process is very straightforward. Note that for the SGI environment you - must compile with the following flags to ensure compatability with - the EnSight server: Irix_5.3 -mips1 - Irix_6.2 -mips2 - Irix_6.5_n32 -mips3 - Irix_6.5_n64 -mips4 -64 - - __________________________________________________________________ - | MACHINE | MAKEFILE TO USE | SHARED LIBRARY NAME PRODUCED | - | TYPE |--------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ================================================================== - __________________________________________________________________ - | sgi | makefile.sgi | libuserd.so | - | |--------------------------------------------------------| - | | ld -shared -all -o libuserd.so libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | hp | makefile.hp | libuserd.sl | - | |--------------------------------------------------------| - | | ld -b -o libuserd.sl libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | sun | makefile.sun | libuserd.so | - | |--------------------------------------------------------| - | | ld -G -o libuserd.so libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | dec | makefile.dec | libuserd.so | - | |--------------------------------------------------------| - | | ld -shared -all -o libuserd.so libuserd.o -lc | - ------------------------------------------------------------------ - __________________________________________________________________ - | ibm | makefile.ibm | libuserd.so | - | |--------------------------------------------------------| - | | ld -G -o libuserd.so libuserd.o -bnoentry -bexpall -lc | - ------------------------------------------------------------------ - - Once you have created your library, you should place it in a directory - of your choice under: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers - - Thus, if you created a reader for "mydata", you should create the - following directory, and place your libuserd.so into it: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers/mydata - - -3. Set up the ENSIGHT6_READER environment variable so EnSight will know - which reader directory to use at runtime. - - Ensight will look for the library under: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers/$ENSIGHT6_READER - - When EnSight was installed, you set this variable to "dummy", with: - - setenv ENSIGHT6_READER dummy - - You can use any of the other provided readers by changing this variable. - For example, to use the dytran reader: - - setenv ENSIGHT6_READER dytran - - Thus, you can use your reader in the same way. If you provided "mydata", - change ENSIGHT6_READER to: - - setenv ENSIGHT6_READER mydata - - - For your information, EnSight makes sure that the appropriate library - environment variable is set for your machine architecture. You do not - have to deal with this if you locate your library as outlined above. - The library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -IMPORTANT: Unless the shared library is available in the - .../$ENSIGHT6_READER directory, EnSight will not run. - -As always, EnSight support is available if you need it. - - - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_number_of_global_nodes number of global nodes -USERD_get_global_coords global node coordinates -USERD_get_global_node_ids global node ids -USERD_get_element_connectivities_for_part part's element connectivites -USERD_get_element_ids_for_part part's element ids -USERD_get_scalar_values global scalar variables -USERD_get_vector_values global vector variables - - -Generally Needed for BLOCK data ------------------------------------------ -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_block_scalar_values block scalar variables -USERD_get_block_vector_values_by_component block vector variables - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_set_filenames filenames entered in GUI -USERD_set_time_step current time step - -USERD_get_name_of_reader name of reader for GUI -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_number_of_time_steps number of time steps -USERD_get_solution_times solution time values -USERD_get_description_lines file associated descrip lines -USERD_get_number_of_variables number of variables -USERD_get_variable_info variable type/descrip etc. -USERD_get_constant_value constant variable's value -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part type/descrip etc. -USERD_get_variable_value_at_specific node's or element's variable - value over time - -USERD_stop_part_building cleanup routine -USERD_bkup archive routine - - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - -2. Setting filenames and getting time info - USERD_set_filenames - USERD_get_number_of_time_steps - USERD_get_solution_times - USERD_set_time_step - -3. Gathering info for part builder - - USERD_set_time_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_description_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords (for model extents) - USERD_get_block_coords_by_component (for model extents) - -4. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_variable_info - -5. Part building (per part created) - - USERD_set_time_step - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - USERD_stop_part_building (only once when part builder - dialog is closed) - -6. Loading Variables - - constants: - --------- - USERD_set_time_step - USERD_get_constant_value - - scalars: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_scalar_values - USERD_get_block_scalar_values - - vectors: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_vector_values - USERD_get_block_vector_values_by_component - -7. Changing geometry - - changing coords only: - -------------------- - USERD_set_time_step - USERD_get_global_coords - USERD_get_block_coords_by_component - - changing connectivity: - --------------------- - USERD_set_time_step - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_time_steps = 1; -static int Num_global_nodes = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; -static int Current_time_step = 0; - - - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - - - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given scalar variable - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given scalar variable - - Specification: - ------------- - int USERD_get_block_scalar_values(int block_number, - int which_scalar, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (IN) which_scalar = The variable number - (OUT) scalar_array = 1D array containing scalar values - for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some scalar type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_vector_values_by_component - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given vector - variable, one component at a time. - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given vector - variable, one component at a time. - - - Specification: - ------------- - int USERD_get_block_vector_values_by_component(int block_number, - int which_vector, - int which_component, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_vector = The variable number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) vector_array = 1D array containing vector - component value for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. - - - --------------------------------------------------------------------- -USERD_get_constant_value - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_BUFLEN is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - - - --------------------------------------------------------------------- -USERD_get_description_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_description_lines(int which_type, - int which_var, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_connectivities_for_part - - Description: - ----------- - Gets the connectivities for the elements of an unstructured part - - Specification: - ------------- - int USERD_get_element_connectivities_for_part(int part_number, - int **conn_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) conn_array = 3D array containing connectivity - of each element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type by connectivity length - of each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25][3] - conn_array[Z_QUA04][100][4] - conn_array[Z_HEX08][30][8] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array loaded in USERD_get_global_coords is zero-based, - but within EnSight it will become a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array in - USERD_get_global_coords as follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array here as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - - - --------------------------------------------------------------------- -USERD_get_element_ids_for_part - - Description: - ----------- - Gets the ids for the elements of an unstructured part. - - Specification: - ------------- - int USERD_get_element_ids_for_part(int part_number, - int *elemid_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) elemid_array = 2D array containing id of each - element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25] - conn_array[Z_QUA04][100] - conn_array[Z_HEX08][30] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and element - label status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - - --------------------------------------------------------------------- -USERD_get_global_coords - - Description: - ----------- - Gets the coordinates for the global nodes. - - Specification: - ------------- - int USERD_get_global_coords(CRD *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) coord_array = 1D array of CRD structures, - which contains x,y,z coordinates - of each node. - - (Array will have been allocated - Num_global_nodes long) - - For reference, CRD structure (which is in global_extern) is: - - typedef struct { - float xyz[3]; - }CRD; - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array is zero-based, but within EnSight it will become - a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array as - follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array in USERD_get_element_connectivities_for_part - as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - --------------------------------------------------------------------- -USERD_get_global_node_ids - - Description: - ----------- - Gets the node ids assigned to each of the global nodes. - - Specification: - ------------- - int USERD_get_global_node_ids(int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) nodeid_array = 1D array containing node ids of - each node. The ids must be > 0 - - (Array will have been allocated - Num_global_nodes long) - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and node label - status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Provide a name for your custom reader format. - - * If you don't want a custom reader to show up in the data dialog - choices, return a name of "No_Custom" - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. The must also be - positive numbers greater than zero. - - USERD_get_global_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - Also be aware that if you say node labels are available, - the connectivity of elements must be according to these - node ids. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_global_nodes - - Description: - ----------- - Gets the number of global nodes, used for unstructured parts. - - Specification: - ------------- - int USERD_get_number_of_global_nodes() - - Returns: - ------- - Number of global nodes (>=0 if okay, <0 if problems) - - Arguments: - --------- - none - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * For unstructured data: - EnSight wants 1. A global array of nodes - 2. Element connectivities by part, which - reference the node numbers of the global - node array. - IMPORTANT: - --------- - If you provide node ids, then element connectivities - must be in terms of the node ids. If you do not - provide node ids, then element connectivities must be - in terms of the index into the node array, but shifted - to start at 1 - - * Num_global_nodes would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if probs). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available. - - Specification: - ------------- - int USERD_get_number_of_time_steps( void ) - - Returns: - ------- - Number of time steps (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, and vector types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_part_build_info(int *part_numbers, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_numbers = Array containing part numbers for - each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1 - - ******************************************** - The numbers provided here are the ones by - which the parts will be referred to in any - of the other routines which receive a part - number or block number as an argument!! - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimensions - for each structured model part. - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given scalar variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given scalar variable. - - Specification: - ------------- - int USERD_get_scalar_values(int which_scalar, - int which_part, - int which_type, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_scalar = The variable number (of scalar type) - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) scalar_array - - if Z_PER_NODE: = 1D array containing scalar values - for each node. - - (Array will have been allocated - Num_global_nodes long) - - if Z_PER_ELEM: = 1d array containing scalar values for - each element of a particular part and type. - - (Array will have been allocated - number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some scalar type variables. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_solution_times - - Description: - ----------- - Get the solution times associated with each time step. - - Specification: - ------------- - int USERD_get_solution_times(float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) solution_times = 1D array of solution times/time step - - (Array will have been allocated - Num_time_steps long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_filename = Variable filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - etc. - - - --------------------------------------------------------------------- -USERD_get_variable_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_variable_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_part_build_info), - or the block's element list - zzzzz (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The part number - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_part_build_info) - - (IN) time_step = The time step - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - --------------------------------------------------------------------- -USERD_get_vector_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given vector variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given vector variable. - - Specification: - ------------- - int USERD_get_vector_values(int which_vector, - int which_part, - int which_type, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_vector = The variable number - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) vector_array - - if Z_PER_NODE: = 1D array containing vector values - for each node. - - (Array will have been allocated - 3 by Num_global_nodes long) - - Info stored in this fashion: - vector_array[0] = xcomp of node 1 - vector_array[1] = ycomp of node 1 - vector_array[2] = zcomp of node 1 - - vector_array[3] = xcomp of node 2 - vector_array[4] = ycomp of node 2 - vector_array[5] = zcomp of node 2 - - vector_array[6] = xcomp of node 3 - vector_array[7] = ycomp of node 3 - vector_array[8] = zcomp of node 3 - etc. - - if Z_PER_ELEM: = 1d array containing vector values for - each element of a particular part and type. - - (Array will have been allocated - 3 by number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Info stored in this fashion: - vector_array[0] = xcomp of elem 1 (of part and type) - vector_array[1] = ycomp of elem 1 " - vector_array[2] = zcomp of elem 1 " - - vector_array[3] = xcomp of elem 2 " - vector_array[4] = ycomp of elem 2 " - vector_array[5] = zcomp of elem 2 " - - vector_array[6] = xcomp of elem 3 " - vector_array[7] = ycomp of elem 3 " - vector_array[8] = zcomp of elem 3 " - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - (IN) swapbytes = TRUE if should swap bytes when reading data. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - - --------------------------------------------------------------------- -USERD_set_time_step - - Description: - ----------- - Set the current time step. All functions that need time, and - that do not explicitly pass it in, will use the time step set by - this routine. - - Specification: - ------------- - void USERD_set_time_step(int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) time_step - The current time step to set - - Notes: - ----- - * Current_time_step would be set here - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README7 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README7 deleted file mode 100644 index 197c3c572e95bc490b21c5f7e9fd81be8df784c6..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README7 +++ /dev/null @@ -1,1847 +0,0 @@ --------------------------------------- -EnSight User Defined Reader Capability --------------------------------------- - -A user defined reader capability is included in EnSight which allows otherwise -unsupported structured or unstructured data to be read. The user defined -reader utilizes a dynamic shared library composed of routines defined in this -document, but produced by the user (or some third party). This capability is -currently available for dec, ibm, hp, sgi, and sun servers. - -**************************************************************************** -Note: Several user defined readers have been included with your EnSight - release and can be accessed by changing the ENSIGHT6_READER - environment variable as outlined in step 3. below. Please be aware - that these are "unsupported" readers, but many of them are being used - successfully. -**************************************************************************** - - -The process for producing a user defined reader is: --------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy library and for various other working or - sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $ENSIGHT6_HOME/ensight62/user_defined_src/readers - - examples: - -------- - The default library. Basic dummy routines. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/dummy - - Sample library which reads unstructured binary EnSight6 data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/ensight6 - - Sample library which reads binary static plot3d data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/plot3d - - Reads binary LS-DYNA3D state database. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/ls-dyna3d - - Reads FORTRAN binary Unstrutured dytran data base. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/dytran - - Reads FlowScience "flsgrf" flow3d data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/flow3d - - Reads Tecplot "plt" files. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/tecplot - - Reads Common File Format data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/cff - - Reads Cobalt grid and picture/restart file data. - $ENSIGHT6_HOME/ensight62/user_defined_src/readers/cobalt - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. Thus, a separate makefile is provided - for each machine type. Operating system level differences could cause - you to have to modify these makefiles slightly, but the general - process is very straightforward. Note that for the SGI environment you - must compile with the following flags to ensure compatability with - the EnSight server: Irix_5.3 -mips1 - Irix_6.2 -mips2 - Irix_6.5_n32 -mips3 - Irix_6.5_n64 -mips4 -64 - - __________________________________________________________________ - | MACHINE | MAKEFILE TO USE | SHARED LIBRARY NAME PRODUCED | - | TYPE |--------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ================================================================== - __________________________________________________________________ - | sgi | makefile.sgi | libuserd.so | - | |--------------------------------------------------------| - | | ld -shared -all -o libuserd.so libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | hp | makefile.hp | libuserd.sl | - | |--------------------------------------------------------| - | | ld -b -o libuserd.sl libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | sun | makefile.sun | libuserd.so | - | |--------------------------------------------------------| - | | ld -G -o libuserd.so libuserd.o | - ------------------------------------------------------------------ - __________________________________________________________________ - | dec | makefile.dec | libuserd.so | - | |--------------------------------------------------------| - | | ld -shared -all -o libuserd.so libuserd.o -lc | - ------------------------------------------------------------------ - __________________________________________________________________ - | ibm | makefile.ibm | libuserd.so | - | |--------------------------------------------------------| - | | ld -G -o libuserd.so libuserd.o -bnoentry -bexpall -lc | - ------------------------------------------------------------------ - - Once you have created your library, you should place it in a directory - of your choice under: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers - - Thus, if you created a reader for "mydata", you should create the - following directory, and place your libuserd.so into it: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers/mydata - - -3. Set up the ENSIGHT6_READER environment variable so EnSight will know - which reader directory to use at runtime. - - Ensight will look for the library under: - - $ENSIGHT6_HOME/machines/$ENSIGHT6_ARCH/lib_readers/$ENSIGHT6_READER - - When EnSight was installed, you set this variable to "dummy", with: - - setenv ENSIGHT6_READER dummy - - You can use any of the other provided readers by changing this variable. - For example, to use the dytran reader: - - setenv ENSIGHT6_READER dytran - - Thus, you can use your reader in the same way. If you provided "mydata", - change ENSIGHT6_READER to: - - setenv ENSIGHT6_READER mydata - - - For your information, EnSight makes sure that the appropriate library - environment variable is set for your machine architecture. You do not - have to deal with this if you locate your library as outlined above. - The library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -IMPORTANT: Unless the shared library is available in the - .../$ENSIGHT6_READER directory, EnSight will not run. - -As always, EnSight support is available if you need it. - - - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_number_of_global_nodes number of global nodes -USERD_get_global_coords global node coordinates -USERD_get_global_node_ids global node ids -USERD_get_element_connectivities_for_part part's element connectivites -USERD_get_element_ids_for_part part's element ids -USERD_get_scalar_values global scalar variables -USERD_get_vector_values global vector variables - - -Generally Needed for BLOCK data ------------------------------------------ -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_block_scalar_values block scalar variables -USERD_get_block_vector_values_by_component block vector variables - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_set_filenames filenames entered in GUI -USERD_set_time_step current time step - -USERD_get_name_of_reader name of reader for GUI -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_number_of_time_steps number of time steps -USERD_get_solution_times solution time values -USERD_get_description_lines file associated descrip lines -USERD_get_number_of_variables number of variables -USERD_get_variable_info variable type/descrip etc. -USERD_get_constant_value constant variable's value -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part type/descrip etc. -USERD_get_variable_value_at_specific node's or element's variable - value over time - -USERD_stop_part_building cleanup routine -USERD_bkup archive routine - - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - -2. Setting filenames and getting time info - USERD_set_filenames - USERD_get_number_of_time_steps - USERD_get_solution_times - USERD_set_time_step - -3. Gathering info for part builder - - USERD_set_time_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_description_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords (for model extents) - USERD_get_block_coords_by_component (for model extents) - -4. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_variable_info - -5. Part building (per part created) - - USERD_set_time_step - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - USERD_stop_part_building (only once when part builder - dialog is closed) - -6. Loading Variables - - constants: - --------- - USERD_set_time_step - USERD_get_constant_value - - scalars: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_scalar_values - USERD_get_block_scalar_values - - vectors: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_vector_values - USERD_get_block_vector_values_by_component - -7. Changing geometry - - changing coords only: - -------------------- - USERD_set_time_step - USERD_get_global_coords - USERD_get_block_coords_by_component - - changing connectivity: - --------------------- - USERD_set_time_step - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_time_steps = 1; -static int Num_global_nodes = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; -static int Current_time_step = 0; - - - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - - - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given scalar variable - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given scalar variable - - Specification: - ------------- - int USERD_get_block_scalar_values(int block_number, - int which_scalar, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (IN) which_scalar = The variable number - (OUT) scalar_array = 1D array containing scalar values - for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some scalar type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_vector_values_by_component - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given vector - variable, one component at a time. - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given vector - variable, one component at a time. - - - Specification: - ------------- - int USERD_get_block_vector_values_by_component(int block_number, - int which_vector, - int which_component, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_vector = The variable number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) vector_array = 1D array containing vector - component value for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. - - - --------------------------------------------------------------------- -USERD_get_constant_value - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - - - --------------------------------------------------------------------- -USERD_get_description_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_description_lines(int which_type, - int which_var, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_connectivities_for_part - - Description: - ----------- - Gets the connectivities for the elements of an unstructured part - - Specification: - ------------- - int USERD_get_element_connectivities_for_part(int part_number, - int **conn_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) conn_array = 3D array containing connectivity - of each element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type by connectivity length - of each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25][3] - conn_array[Z_QUA04][100][4] - conn_array[Z_HEX08][30][8] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array loaded in USERD_get_global_coords is zero-based, - but within EnSight it will become a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array in - USERD_get_global_coords as follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array here as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - - - --------------------------------------------------------------------- -USERD_get_element_ids_for_part - - Description: - ----------- - Gets the ids for the elements of an unstructured part. - - Specification: - ------------- - int USERD_get_element_ids_for_part(int part_number, - int *elemid_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) elemid_array = 2D array containing id of each - element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25] - conn_array[Z_QUA04][100] - conn_array[Z_HEX08][30] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and element - label status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - - --------------------------------------------------------------------- -USERD_get_global_coords - - Description: - ----------- - Gets the coordinates for the global nodes. - - Specification: - ------------- - int USERD_get_global_coords(CRD *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) coord_array = 1D array of CRD structures, - which contains x,y,z coordinates - of each node. - - (Array will have been allocated - Num_global_nodes long) - - For reference, CRD structure (which is in global_extern) is: - - typedef struct { - float xyz[3]; - }CRD; - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array is zero-based, but within EnSight it will become - a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array as - follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array in USERD_get_element_connectivities_for_part - as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - --------------------------------------------------------------------- -USERD_get_global_node_ids - - Description: - ----------- - Gets the node ids assigned to each of the global nodes. - - Specification: - ------------- - int USERD_get_global_node_ids(int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) nodeid_array = 1D array containing node ids of - each node. The ids must be > 0 - - (Array will have been allocated - Num_global_nodes long) - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and node label - status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Provide a name for your custom reader format. - - * If you don't want a custom reader to show up in the data dialog - choices, return a name of "No_Custom" - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. The must also be - positive numbers greater than zero. - - USERD_get_global_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - Also be aware that if you say node labels are available, - the connectivity of elements must be according to these - node ids. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_global_nodes - - Description: - ----------- - Gets the number of global nodes, used for unstructured parts. - - Specification: - ------------- - int USERD_get_number_of_global_nodes() - - Returns: - ------- - Number of global nodes (>=0 if okay, <0 if problems) - - Arguments: - --------- - none - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * For unstructured data: - EnSight wants 1. A global array of nodes - 2. Element connectivities by part, which - reference the node numbers of the global - node array. - IMPORTANT: - --------- - If you provide node ids, then element connectivities - must be in terms of the node ids. If you do not - provide node ids, then element connectivities must be - in terms of the index into the node array, but shifted - to start at 1 - - * Num_global_nodes would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if probs). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available. - - Specification: - ------------- - int USERD_get_number_of_time_steps( void ) - - Returns: - ------- - Number of time steps (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, and vector types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_part_build_info(int *part_numbers, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_numbers = Array containing part numbers for - each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1 - - ******************************************** - The numbers provided here are the ones by - which the parts will be referred to in any - of the other routines which receive a part - number or block number as an argument!! - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimensions - for each structured model part. - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given scalar variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given scalar variable. - - Specification: - ------------- - int USERD_get_scalar_values(int which_scalar, - int which_part, - int which_type, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_scalar = The variable number (of scalar type) - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) scalar_array - - if Z_PER_NODE: = 1D array containing scalar values - for each node. - - (Array will have been allocated - Num_global_nodes long) - - if Z_PER_ELEM: = 1d array containing scalar values for - each element of a particular part and type. - - (Array will have been allocated - number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some scalar type variables. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_solution_times - - Description: - ----------- - Get the solution times associated with each time step. - - Specification: - ------------- - int USERD_get_solution_times(float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) solution_times = 1D array of solution times/time step - - (Array will have been allocated - Num_time_steps long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_filename = Variable filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - etc. - - - --------------------------------------------------------------------- -USERD_get_variable_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_variable_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_part_build_info), - or the block's element list - zzzzz (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The part number - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_part_build_info) - - (IN) time_step = The time step - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - --------------------------------------------------------------------- -USERD_get_vector_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given vector variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given vector variable. - - Specification: - ------------- - int USERD_get_vector_values(int which_vector, - int which_part, - int which_type, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_vector = The variable number - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) vector_array - - if Z_PER_NODE: = 1D array containing vector values - for each node. - - (Array will have been allocated - 3 by Num_global_nodes long) - - Info stored in this fashion: - vector_array[0] = xcomp of node 1 - vector_array[1] = ycomp of node 1 - vector_array[2] = zcomp of node 1 - - vector_array[3] = xcomp of node 2 - vector_array[4] = ycomp of node 2 - vector_array[5] = zcomp of node 2 - - vector_array[6] = xcomp of node 3 - vector_array[7] = ycomp of node 3 - vector_array[8] = zcomp of node 3 - etc. - - if Z_PER_ELEM: = 1d array containing vector values for - each element of a particular part and type. - - (Array will have been allocated - 3 by number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Info stored in this fashion: - vector_array[0] = xcomp of elem 1 (of part and type) - vector_array[1] = ycomp of elem 1 " - vector_array[2] = zcomp of elem 1 " - - vector_array[3] = xcomp of elem 2 " - vector_array[4] = ycomp of elem 2 " - vector_array[5] = zcomp of elem 2 " - - vector_array[6] = xcomp of elem 3 " - vector_array[7] = ycomp of elem 3 " - vector_array[8] = zcomp of elem 3 " - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - (IN) swapbytes = TRUE if should swap bytes when reading data. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - - --------------------------------------------------------------------- -USERD_set_time_step - - Description: - ----------- - Set the current time step. All functions that need time, and - that do not explicitly pass it in, will use the time step set by - this routine. - - Specification: - ------------- - void USERD_set_time_step(int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) time_step - The current time step to set - - Notes: - ----- - * Current_time_step would be set here - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_1.0_to_2.0 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_1.0_to_2.0 deleted file mode 100644 index 35d80156fba477688c7399771da89a51f1adea4c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_1.0_to_2.0 +++ /dev/null @@ -1,361 +0,0 @@ -README_1.0_to_2.0 -================= -This document exists to help those who already have a working user defined -reader (using the 1.0 API) to change it into the 2.0 API format - if desired. - -Note that you do not have to update your (1.0 API) user defined reader if it -is already working fine for you. - -You should consider it if: - - efficieny gains are needed or - - you need access to complex variables or - - you need access to tensor variables or - - you need multiple timeset capability or - - you want to provide your own "border" elements (as opposed to EnSight's - computation of them) - -As an indication of the differences that might be realized in efficency, -consider the following comparison on an unstructured model consisting of: - -1,639,058 nodes -7,079,211 elements 240530 tria3 - 3984 quad4 - 5927663 tetra4 - 653 pyramid5 - 906381 penta6 - -12 parts - -The same model was represented in EnSight6 and EnSight Gold format. - - - EnSight6 format into: EnSight Gold format into: - ------------------------------------ ------------------------- - EnSight7.1 |Ensight7.2 |Ensight 7.1 |EnSight7.2 |Ensight7.2 - internal |internal |userd reader |internal |userd reader - reader |reader |(API 1.0) |reader |(API 2.0) - | | | | - Time | Mem |Time | Mem |Time | Mem |Time | Mem |Time | Mem - (sec)| (Mb) |(sec)| (Mb) |(sec)| (Mb) |(sec)| (Mb) |(sec)| (Mb) - ----------- |----------- |----------- |----------- |----------- -@ part 4.3 27.6 | 3.5 28.4 | 4.0 27.6 | 3.3 8.8 | 3.3 8.9 -loader | | | | - | | | | -after 14.0 243.4 |12.8 244.3 |49.8 475.8 | 6.0 211.5 | 6.2 211.6 -loading all | | | | -12 parts | | | | -(non-visual) | | | | - | | | | -after 16.8 263.2 |16.0 264.2 |52.8 490.7 | 9.1 236.2 | 9.5 236.2 -activate of | | | | -a vector. | | | | - ^ ^ - /|\ /|\ - | | - | | - | | - Compare these two! - - -Significant is the inefficiency of the 1.0 API, and the fact that the -2.0 API has the same improved efficiency (both in speed and memory) as -the gold internal reader! - -Note: Structured data will not show much difference between the two API's, -but it was more efficient initially. - - -========================================================= -A note on philosophical differences between the two API's: -========================================================= - -API 1.0 deals with: -------------------- - -> global coordinate array & corresponding - -> global node id array - -> global nodal variables - - -> for each part: - -> local element connectivities (grouped by type) & corresponding - -> local element ids - -> local elemental variables - - -The element connectivities, within parts, reference the global coordinate -array. If node ids are provided, the element connectivities have to be in -terms of the node ids. If node ids are not provided, the connectivities are in -terms of the (one-based) index number of each node in the global coordinate -array. Thus, node ids are more than labels - they are a part of the -connectivity referencing scheme. Element ids are purely labels. - -This API was originally setup to try to make the interface to other codes as -straightforward as possible. Efficiency was not the major consideration. - -EnSight must do a fair amount of work to get data provided in the manner -described above into the form that it uses internally. There is mapping that -has to be setup and maintained between the global arrays and the local part -arrays so that updating over time can be accomplished efficiently. There is -hashing that is required in order to deal efficently with node ids. - -All of this leads to a considerable amount of temporary memory and processing, -in order to get a model read into EnSight. - - -API 2.0 deals with: -------------------- - -> for each part: - -> part coordinates & corresponding - -> part node ids - -> part nodal variables - - -> part element connectivities (grouped by type) & corresponding - -> part element ids - -> part elemental variables - -API 2.0 requires that the coordinates and corresponding nodal variables be -provided per part. This eliminates the global to local mapping with all its -associated temporary memory and processing time. The connectivity of the -elements in each part reference the node indicies of its own (one-based) part -coordinate array. The connectivity of the elements do not reference the nodes -according to node ids. Node ids (and element ids for that matter) are purely -labels for screen display and for query operations within EnSight. This -eliminates the need for node id hashing as a model is read. - -The 2.0 API has been created for those needing more efficiency - both in terms -of memory use and speed. The increased efficiency is possible because data is -requested in a manner which more closely represents the way that EnSight -stores and manipulates information internally. The new API requests size -information and allocates the actual internal structures and arrays -accordingly. Pointers to these arrays are passed directly to you in the -routines which gather data, thus eliminating a considerable amount of -temporary memory (and allocation time) that is needed in the old -API. Depending on what you must do to get your data into the form required, -the memory savings and the speed improvement when loading models can be quite -significant!! - -Additionally, the ability to handle tensor and complex variables has been -added to the new API, and support for multiple timesets is provided. ------------------------------------------------- - - -So, with that said, if you determine that you want to convert your existing -reader to the new API format, The following may be helpful. - -==================== -First the Good News! The following routines are identical in both API's!! -==================== ---------------------------------------------------- -USERD_bkup -USERD_get_block_coords_by_component -USERD_get_block_iblanking -USERD_get_changing_geometry_status -USERD_get_dataset_query_file_info -USERD_get_element_label_status -USERD_get_name_of_reader -USERD_get_node_label_status -USERD_get_number_of_files_in_dataset -USERD_get_number_of_model_parts -USERD_get_number_of_variables -USERD_set_filenames -USERD_stop_part_building - - - -======================== -Second, pretty Good News! The following routines have minor changes, -======================== namely a slight name change and the addition - of arguments related to complex data, constant -(Note, the name changes type, or self contained parts vs global coords. - are needed so both - API's can exist together) The arguments must be added, but depending on - your situation, many might simply be place - holders. -------------------------------------------------------------------------------- - - ----------------------------------------------------- -A) Changes related to imaginary flag for complex data - ===================================================== - If you don't deal with complex variables, simply add - this flag to your argument list and ignore its value. - ----------------------------------------------------- - -API 1.0 API 2.0 -------- ------- -USERD_get_constant_value USERD_get_constant_val -( ( - int which var int which_var, - int imag_data -) ) - -USERD_get_description_lines USERD_get_descrip_lines -( ( - int which_type, int which_type, - int which_var, int which_var, - int imag_data, - char line1[Z_BUFL], char line1[Z_BUFL], - char line2[Z_BUFL] char line2[Z_BUFL] -) ) - -USERD_get_variable_value_at_specific USERD_get_var_value_at_specific -( ( - int which_var, int which_var, - int which_node_or_elem, int which_node_or_elem, - int which_part, int which_part, - int which_elem_type, int which_elem_type, - int time_step, int time_step, - float values[3] float values[3], - int imag_data -) ) - - - --------------------------------------------------------- -B) Changes related to complex data info, and constant type - (and some of the multiple timeset support) - ========================================================= - If you don't deal with complex variables, simply add the - arguments for var_complex, var_ifilename, and var_freq - and assign var_complex to be FALSE. - - The argument var_contran needs to be added, and set - appropriately if you have constant variables, to indicate - if the constant variable is fixed for all time or varies - over time. - - The argument var_timeset needs to be added, and set - appropriately. - --------------------------------------------------------- - -API 1.0 API 2.0 -------- ------- -USERD_get_variable_info USERD_get_gold_variable_info -( ( - char **var_description, char **var_description, - char **var_filename, char **var_filename, - int *var_type, int *var_type, - int *var_classify int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset -) ) - - - ------------------------------------------------------ -C) Changes related to self contained part coordinates - ====================================================== - The number_of_nodes argument needs to be added and - set for each part. This one is critical for you to do. - ------------------------------------------------------ - -API 1.0 API 2.0 -------- ------- -USERD_get_part_build_info USERD_get_gold_part_build_info -( ( - int *part_numbers, int *part_types, - int *part_types, int *part_types, - char *part_description[Z_BUFL], char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], int *ijk_dimensions[3], - int *iblanking_options[6] int *iblanking_options[6] -) ) - - - ------------------------------------------------------ -D) Changes related to multiple timeset support - ====================================================== - The timeset_number argument needs to be added for the - following three routines. - - The multiple timeset support also includes the change - in B) above for USERD_get_gold_variable_info and the - last three new routines in the third section of this - readme file. - ------------------------------------------------------ - -API 1.0 API 2.0 -------- ------- -USERD_get_number_of_time_steps USERD_get_num_of_time_steps -( ( - void int timeset_number -) ) - -USERD_get_solution_times USERD_get_sol_times -( ( - int timeset_number, - float *solution_times float *solution_times -) ) - -USERD_set_time_step USERD_set_time_set_and_step -( ( - int timeset_number, - int time_step int time_step -) ) - - - ------------------------------------------------------ -E) Changes related to global_extern.h - ====================================================== - - Be sure to include the updated global_extern.h file that comes - with the EnSight 7.2 release (not the one from previous releases). - - - - -================================================================= -Third, deleted and new routines. (Here is where the work lies) - - Several old routines are gone. You will have to create the new - routines that replace them. I think you will find in most cases - that your old routines will form the basis of the new routines, - and that it isn't too difficult to provide the information in - the new way. - - The detailed specifications for these new routines can be found - in README_USERD_2.0 (or the headers in libuserd.c of the - dummy_gold or ensight_gold readers). -================================================================= - -API 1.0 API 2.0 -------- ------- - -These routines: replaced by the single routine: ---------------------------- ------------------------------- -USERD_get_block_scalar_values USERD_get_var_by_component -USERD_get_block_vector_values_by_component -USERD_get_scalar_values -USERD_get_vector_values - -These global coordinate routines: replaced by part coord routines: ---------------------------------- -------------------------------- -USERD_get_global_coords USERD_get_part_coords -USERD_get_global_node_ids USERD_get_part_node_ids -USERD_get_number_of_global_nodes - -These part connectivity routines: replaced by part by type routines: ---------------------------------- ---------------------------------- -USERD_get_element_connectivities_for_part USERD_get_part_elements_by_type -USERD_get_element_ids_for_part USERD_get_part_element_ids_by_type - - - These are New Routines - ---------------------- - (Can be a dummy) -> USERD_exit_routine - (Can be a dummy) -> USERD_get_model_extents - (Required) -> USERD_get_reader_version - - multiple timeset releated: - (Required) -> USERD_get_number_timesets - (Required) -> USERD_get_timeset_description - (Required) -> USERD_get_geom_timeset_number - - border provided by the reader option: - (Required) -> USERD_get_border_availability - (Can be a dummy) -> USERD_get_border_elements_by_type - - transient model allocation efficency: - (Can be a dummy) -> USERD_get_maxsize_info - - Possible use with Server-of-Servers: - (Can be a dummy) -> USERD_set_server_number diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_2.01_to_2.03 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_2.01_to_2.03 deleted file mode 100644 index 23f27ec89d62391a3a7d3569af49848bfb4916c1..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_2.01_to_2.03 +++ /dev/null @@ -1,1374 +0,0 @@ -README_USERD_2.03 -================= - -At this API revision level: - -1. Routines to handle materials have been added. -2. Routines to handle nsided and nfaced elements have been added -3. A routine has modified so structured ranges can be specified - -**************************************************************************** -Note: The dummy_gold reader, the Ensight Gold example reader, and the - SILO reader have been moved to this 2.03 API level. -**************************************************************************** - -------------------------------- -Quick Index of Library Routines -------------------------------- - -The new new routines are: -------------------------- -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) -The modified routine is: ------------------------- -USERD_get_gold_part_build_info Gets the info needed for part building - process - --------------------- -Header files changes --------------------- -global_extern.h has appropriate changes, must use it -global_extern_proto.h new file, access from global_extern.h - -Basically the the old global_extern.h file has been split into two files now. - - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -10. To see if materials in the model - - USERD_get_number_of_material_sets - - If any material sets in the model (calls these once per material set): - USERD_get_matf_set_info - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - . - . - . - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_203 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.03" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is access from the new global_extern.h - -******************************************************************************* -******************************************************************************* - -____________________ --------------------- -New Library Routines -____________________ --------------------- - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - -________________________ ------------------------- -Modified Library Routine -________________________ ------------------------- - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for part building process - - Specification: - ------------- - int - USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability( int part_number,... - USERD_get_border_elements_by_type( int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Starting at API 2.01: - ==================== - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - Starting at API 2.02: - ==================== - Z_NSIDED n node nsided polygon - Z_NFACED n face nfaced polyhedron - Z_G_NSIDED n node ghost nsided polygon - Z_G_NFACED n face ghost nfaced polyhedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - This will be based on Current_time_step diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_1.0 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_1.0 deleted file mode 100644 index 6453be2655961e483172748fd93e4ab758410e89..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_1.0 +++ /dev/null @@ -1,2013 +0,0 @@ -README_USERD_1.0 -================ --------------------------------------- -EnSight User Defined Reader Capability ===> (API 1.0) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -Two versions of this API are available starting with EnSight Version 7.2. The -1.0 API (which was designed to be friendly to those producing it, but requires -more manipulation internally by EnSight) may be a little easier to -produce, but requires more memory and processing time. The 2.0 API is -considerably more efficient, and was designed more with that in mind. It -requires that all data be provided on a part basis. - -If you already have a working 1.0 API reader and are happy with it - there is -probably no reason to modify it to the 2.0 API unless: - - you deal with large models and the memory use and load times are a - problem or - - you need tensor variable support or - - you need complex variable support or - - you need multiple timeset capability or - _ you want to provide your own "border" elements (as opposed to EnSight's - computation of them). - -If you are producing a new reader, you should consider which will work best -for your needs. - - -API 1.0 (defined in this README_USERD_1.0 document) -======= -The original user defined reader API (used with EnSight Versions 6 through -7.1) will continue to be supported. (Note that there was a change in the way -that the libraries were made at version 7.1 of EnSight, but underlying code -was kept the same.) Thus, any readers that work with EnSight 7.1, should still -function with EnSight 7.2. - - -API 2.0 (defined in README_USERD_2.0 document) -======= -This new API has been defined to be more efficient and includes access to new -capabilities of EnSight 7.2. It lends itself closely to the EnSight "gold" -type format. - -Some of its advantages are:: - - * Most intermediate temporary arrays have been eliminated, such that the user - defined routines write directly into internal part structures. This is a - considerable improvement in memory use, and improves speed as well since - far less memory need be allocated, initialized, etc. - - * Parts are self contained. Coordinates, connectivity and all variables are - provided on a part basis. This eliminates the need for several global to - local coordinate mapping operations and the need for node id connectivity - hashing. This can greatly improve the speed at which models are loaded. - - * Model extents can be provided directly, such that EnSight need not read - all the coordinate data at load time. - - * Tensor variables are supported - - * Complex variables are supported - - * A routine is provided as EnSight exits, so cleanup operations such as - removing temporary files can be easily accomplished. - - * Geometry and variables can be provided on different time lines. - - * If your data format already provides boundary shell information, you can - use it instead of the "border" representation that EnSight would compute. - -Further discussion on the philosophical differences between the two API's and -an efficiency comparison example can be found in the README_1.0_to_2.0 file. -This file also contains guidance on necessary changes to modify an existing -1.0 API to the new 2.0 API. - - -**************************************************************************** -Note: Several (1.0 API) user defined readers have been included with your - EnSight release and are configured by default. There are site- and - user-configurable options outlined in step 3 below. Please be aware - that these are "unsupported" readers, but many of them are being used - successfully. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy library and for various other working or - sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $ENSIGHT7_HOME/user_defined_src/readers - - examples of API 1.0: - ------------------- - Basic dummy routines provide skeleton for a new reader - $ENSIGHT7_HOME/user_defined_src/readers/dummy - - Sample library which reads unstructured binary EnSight6 data - $ENSIGHT7_HOME/user_defined_src/readers/ensight6 - - Sample library which reads binary static plot3d data - $ENSIGHT7_HOME/user_defined_src/readers/plot3d - - Reads binary LS-DYNA3D state database - $ENSIGHT7_HOME/user_defined_src/readers/ls-dyna3d - - Reads FORTRAN binary Unstructured dytran data base - $ENSIGHT7_HOME/user_defined_src/readers/dytran - - Reads FlowScience "flsgrf" flow3d data - $ENSIGHT7_HOME/user_defined_src/readers/flow3d - - Reads Tecplot "plt" files - $ENSIGHT7_HOME/user_defined_src/readers/tecplot - - Reads Common File Format data - $ENSIGHT7_HOME/user_defined_src/readers/cff - - Reads Cobalt grid and picture/restart file data - $ENSIGHT7_HOME/user_defined_src/readers/cobalt - - Reads binary Nastran OP2 data base - $ENSIGHT7_HOME/user_defined_src/readers/nastran - - Reads binary and ascii cfx data - $ENSIGHT7_HOME/user_defined_src/readers/cfx4 - - Reads Exodus II data base - $ENSIGHT7_HOME/user_defined_src/readers/exodus - - Reads Parallel Exodus data base - $ENSIGHT7_HOME/user_defined_src/readers/pxi - - Reads FORTRAN binary SCRYU data - $ENSIGHT7_HOME/user_defined_src/readers/scryu - - Reads binary and ascii STL data - $ENSIGHT7_HOME/user_defined_src/readers/stl - - Reads Vectis data - $ENSIGHT7_HOME/user_defined_src/readers/vectis - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $ENSIGHT7_HOME/machines/$ENSIGHT7_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $ENSIGHT7_HOME/machines/$ENSIGHT7_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $ENSIGHT7_HOME/machines/$ENSIGHT7_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - - - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_number_of_global_nodes number of global nodes -USERD_get_global_coords global node coordinates -USERD_get_global_node_ids global node ids -USERD_get_element_connectivities_for_part part's element connectivites -USERD_get_element_ids_for_part part's element ids -USERD_get_scalar_values global scalar variables -USERD_get_vector_values global vector variables - - -Generally Needed for BLOCK data ------------------------------------------ -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_block_scalar_values block scalar variables -USERD_get_block_vector_values_by_component block vector variables - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_set_filenames filenames entered in GUI -USERD_set_time_step current time step - -USERD_get_name_of_reader name of reader for GUI -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_number_of_time_steps number of time steps -USERD_get_solution_times solution time values -USERD_get_description_lines file associated descrip lines -USERD_get_number_of_variables number of variables -USERD_get_variable_info variable type/descrip etc. -USERD_get_constant_value constant variable's value -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part type/descrip etc. -USERD_get_variable_value_at_specific node's or element's variable - value over time - -USERD_stop_part_building cleanup routine -USERD_bkup archive routine - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - -2. Setting filenames and getting time info - USERD_set_filenames - USERD_get_number_of_time_steps - USERD_get_solution_times - USERD_set_time_step - -3. Gathering info for part builder - - USERD_set_time_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_description_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords (for model extents) - USERD_get_block_coords_by_component (for model extents) - -4. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_variable_info - -5. Part building (per part created) - - USERD_set_time_step - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - USERD_stop_part_building (only once when part builder - dialog is closed) - -6. Loading Variables - - constants: - --------- - USERD_set_time_step - USERD_get_constant_value - - scalars: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_scalar_values - USERD_get_block_scalar_values - - vectors: - ------- - USERD_get_description_lines - USERD_set_time_step - USERD_get_vector_values - USERD_get_block_vector_values_by_component - -7. Changing geometry - - changing coords only: - -------------------- - USERD_set_time_step - USERD_get_global_coords - USERD_get_block_coords_by_component - - changing connectivity: - --------------------- - USERD_set_time_step - USERD_get_number_of_model_parts - USERD_get_part_build_info - USERD_get_number_global_nodes - USERD_get_global_coords - USERD_get_global_node_ids - USERD_get_element_connectivities_for_part - USERD_get_element_ids_for_part - USERD_get_block_iblanking - USERD_get_block_coords_by_component - -8. Node or Element queries over time - - USERD_get_variable_value_at_specific - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_time_steps = 1; -static int Num_global_nodes = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; -static int Current_time_step = 0; - - - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - - - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given scalar variable - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given scalar variable - - Specification: - ------------- - int USERD_get_block_scalar_values(int block_number, - int which_scalar, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (IN) which_scalar = The variable number - (OUT) scalar_array = 1D array containing scalar values - for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some scalar type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_vector_values_by_component - - Description: - ----------- - if Z_PER_NODE: - Get the values at each node of a block, for a given vector - variable, one component at a time. - - or if Z_PER_ELEM: - Get the values at each element of a block, for a given vector - variable, one component at a time. - - - Specification: - ------------- - int USERD_get_block_vector_values_by_component(int block_number, - int which_vector, - int which_component, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - - (IN) which_vector = The variable number - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) vector_array = 1D array containing vector - component value for each node or element. - - Array will have been allocated: - - if Z_PER_NODE: - i*j*k for the block long - - if Z_PER_ELEM: - (i-1)*(i-1)*(k-1) for the block long - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0, - Num_variables is > 0, and there are some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. - - - --------------------------------------------------------------------- -USERD_get_constant_value - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - - - --------------------------------------------------------------------- -USERD_get_description_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_description_lines(int which_type, - int which_var, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_connectivities_for_part - - Description: - ----------- - Gets the connectivities for the elements of an unstructured part - - Specification: - ------------- - int USERD_get_element_connectivities_for_part(int part_number, - int **conn_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) conn_array = 3D array containing connectivity - of each element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type by connectivity length - of each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25][3] - conn_array[Z_QUA04][100][4] - conn_array[Z_HEX08][30][8] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array loaded in USERD_get_global_coords is zero-based, - but within EnSight it will become a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array in - USERD_get_global_coords as follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array here as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - - - --------------------------------------------------------------------- -USERD_get_element_ids_for_part - - Description: - ----------- - Gets the ids for the elements of an unstructured part. - - Specification: - ------------- - int USERD_get_element_ids_for_part(int part_number, - int *elemid_array[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - - (OUT) elemid_array = 2D array containing id of each - element of each type. - - (Array will have been allocated - Z_MAXTYPE by num_of_elements of - each type) - - ex) If num_of_elements[Z_TRI03] = 25 - num_of_elements[Z_QUA04] = 100 - num_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[Z_TRI03][25] - conn_array[Z_QUA04][100] - conn_array[Z_HEX08][30] - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and element - label status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - - --------------------------------------------------------------------- -USERD_get_global_coords - - Description: - ----------- - Gets the coordinates for the global nodes. - - Specification: - ------------- - int USERD_get_global_coords(CRD *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) coord_array = 1D array of CRD structures, - which contains x,y,z coordinates - of each node. - - (Array will have been allocated - Num_global_nodes long) - - For reference, CRD structure (which is in global_extern) is: - - typedef struct { - float xyz[3]; - }CRD; - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * The coord_array is zero-based, but within EnSight it will become - a one-based array. - Thus, coord_array[0] will be accessed by node 1 from the conn_array, - coord_array[1] will be accessed by node 2 from the conn_array, etc. - - ex) Given a model of two triangles, you should load coord_array as - follows: - - node coordinates - ---- ----------- - 4 --------- 3 1 coord_array[0].xyz[0] = 0.0 - |\ | coord_array[0].xyz[1] = 0.0 - | \ T2 | coord_array[0].xyz[2] = 0.0 - | \ | - | \ | 2 coord_array[1].xyz[0] = 1.0 - | \ | coord_array[1].xyz[1] = 0.0 - | \ | coord_array[1].xyz[2] = 0.0 - | \ | - | T1 \ | 3 coord_array[2].xyz[0] = 1.0 - | \| coord_array[2].xyz[1] = 1.6 - 1 --------- 2 coord_array[2].xyz[2] = 0.0 - - 4 coord_array[3].xyz[0] = 0.0 - coord_array[3].xyz[1] = 1.6 - coord_array[3].xyz[2] = 0.0 - - - And conn_array in USERD_get_element_connectivities_for_part - as follows: - - Triangle Connectivity - -------- ------------ - T1 conn_array[Z_TRI03][0][0] = 1 - conn_array[Z_TRI03][0][1] = 2 - conn_array[Z_TRI03][0][2] = 4 - - T2 conn_array[Z_TRI03][1][0] = 2 - conn_array[Z_TRI03][1][1] = 3 - conn_array[Z_TRI03][1][2] = 4 - --------------------------------------------------------------------- -USERD_get_global_node_ids - - Description: - ----------- - Gets the node ids assigned to each of the global nodes. - - Specification: - ------------- - int USERD_get_global_node_ids(int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) nodeid_array = 1D array containing node ids of - each node. The ids must be > 0 - - (Array will have been allocated - Num_global_nodes long) - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and node label - status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Provide a name for your custom reader format. - - * If you don't want a custom reader to show up in the data dialog - choices, return a name of "No_Custom" - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. The must also be - positive numbers greater than zero. - - USERD_get_global_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - Also be aware that if you say node labels are available, - the connectivity of elements must be according to these - node ids. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_global_nodes - - Description: - ----------- - Gets the number of global nodes, used for unstructured parts. - - Specification: - ------------- - int USERD_get_number_of_global_nodes() - - Returns: - ------- - Number of global nodes (>=0 if okay, <0 if problems) - - Arguments: - --------- - none - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - * For unstructured data: - EnSight wants 1. A global array of nodes - 2. Element connectivities by part, which - reference the node numbers of the global - node array. - IMPORTANT: - --------- - If you provide node ids, then element connectivities - must be in terms of the node ids. If you do not - provide node ids, then element connectivities must be - in terms of the index into the node array, but shifted - to start at 1 - - * Num_global_nodes would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if probs). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available. - - Specification: - ------------- - int USERD_get_number_of_time_steps( void ) - - Returns: - ------- - Number of time steps (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, and vector types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_part_build_info(int *part_numbers, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_numbers = Array containing part numbers for - each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1 - - ******************************************** - The numbers provided here are the ones by - which the parts will be referred to in any - of the other routines which receive a part - number or block number as an argument!! - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimensions - for each structured model part. - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_scalar_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given scalar variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given scalar variable. - - Specification: - ------------- - int USERD_get_scalar_values(int which_scalar, - int which_part, - int which_type, - float *scalar_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_scalar = The variable number (of scalar type) - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) scalar_array - - if Z_PER_NODE: = 1D array containing scalar values - for each node. - - (Array will have been allocated - Num_global_nodes long) - - if Z_PER_ELEM: = 1d array containing scalar values for - each element of a particular part and type. - - (Array will have been allocated - number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some scalar type variables. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_solution_times - - Description: - ----------- - Get the solution times associated with each time step. - - Specification: - ------------- - int USERD_get_solution_times(float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) solution_times = 1D array of solution times/time step - - (Array will have been allocated - Num_time_steps long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_filename = Variable filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - etc. - - - --------------------------------------------------------------------- -USERD_get_variable_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_variable_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The part number - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_part_build_info) - - (IN) time_step = The time step - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - --------------------------------------------------------------------- -USERD_get_vector_values - - Description: - ----------- - if Z_PER_NODE: - Get the values at each global node for a given vector variable. - - or if Z_PER_ELEM: - Get the values at each element of a specific part and type for a - given vector variable. - - Specification: - ------------- - int USERD_get_vector_values(int which_vector, - int which_part, - int which_type, - float *vector_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_vector = The variable number - - (IN) which_part - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The part number - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - - (OUT) vector_array - - if Z_PER_NODE: = 1D array containing vector values - for each node. - - (Array will have been allocated - 3 by Num_global_nodes long) - - Info stored in this fashion: - vector_array[0] = xcomp of node 1 - vector_array[1] = ycomp of node 1 - vector_array[2] = zcomp of node 1 - - vector_array[3] = xcomp of node 2 - vector_array[4] = ycomp of node 2 - vector_array[5] = zcomp of node 2 - - vector_array[6] = xcomp of node 3 - vector_array[7] = ycomp of node 3 - vector_array[8] = zcomp of node 3 - etc. - - if Z_PER_ELEM: = 1D array containing vector values for - each element of a particular part and type. - - (Array will have been allocated - 3 by number_of_elements[which_part][which_type] - long. See USERD_get_part_build_info) - - Info stored in this fashion: - vector_array[0] = xcomp of elem 1 (of part and type) - vector_array[1] = ycomp of elem 1 " - vector_array[2] = zcomp of elem 1 " - - vector_array[3] = xcomp of elem 2 " - vector_array[4] = ycomp of elem 2 " - vector_array[5] = zcomp of elem 2 " - - vector_array[6] = xcomp of elem 3 " - vector_array[7] = ycomp of elem 3 " - vector_array[8] = zcomp of elem 3 " - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0, - Num_variables is > 0, and you have some vector type variables - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - (IN) swapbytes = TRUE if should swap bytes when reading data. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - - --------------------------------------------------------------------- -USERD_set_time_step - - Description: - ----------- - Set the current time step. All functions that need time, and - that do not explicitly pass it in, will use the time step set by - this routine. - - Specification: - ------------- - void USERD_set_time_step(int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) time_step - The current time step to set - - Notes: - ----- - * Current_time_step would be set here - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - - - ----- end of doucment ---- - - diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.0 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.0 deleted file mode 100644 index 93ac1f4fff0d59add85ae4224cf70e14e7ca87db..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.0 +++ /dev/null @@ -1,2537 +0,0 @@ -README_USERD_2.0 -================ --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.0) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -Two versions of this API are available starting with EnSight Version 7.2. The -1.0 API (which was designed to be friendly to those producing it, but requires -more manipulation internally by EnSight) may be a little easier to -produce, but requires more memory and processing time. The 2.0 API is -considerably more efficient, and was designed more with that in mind. It -requires that all data be provided on a part basis. - -If you already have a working 1.0 API reader and are happy with it - there is -probably no reason to modify it to the 2.0 API unless: - - you deal with large models and the memory use and load times are a - problem or - - you need tensor variable support or - - you need complex variable support or - - you need multiple timeset capability or - _ you want to provide your own "border" elements (as opposed to EnSight's - computation of them). - -If you are producing a new reader, you should consider which will work best -for your needs. - - -API 1.0 (defined in README_USERD_1.0 document) -======= -The original user defined reader API (used with EnSight Versions 6 through -7.1) will continue to be supported. (Note that there was a change in the way -that the libraries were made at version 7.1 of EnSight, but underlying code -was kept the same.) Thus, any readers that work with EnSight 7.1, should still -function with EnSight 7.2. - - -API 2.0 (defined in this README_USERD_2.0 document) -======= -This new API has been defined to be more efficient and includes access to new -capabilities of EnSight 7.2. It lends itself closely to the EnSight "gold" -type format. - -Some of its advantages are:: - - * Most intermediate temporary arrays have been eliminated, such that the user - defined routines write directly into internal part structures. This is a - considerable improvement in memory use, and improves speed as well since - far less memory need be allocated, initialized, etc. - - * Parts are self contained. Coordinates, connectivity and all variables are - provided on a part basis. This eliminates the need for several global to - local coordinate mapping operations and the need for node id connectivity - hashing. This can greatly improve the speed at which models are loaded. - - * Model extents can be provided directly, such that EnSight need not read - all the coordinate data at load time. - - * Tensor variables are supported - - * Complex variables are supported - - * A routine is provided as EnSight exits, so cleanup operations such as - removing temporary files can be easily accomplished. - - * Geometry and variables can be provided on different time lines (timesets). - - * If your data format already provides boundary shell information, you can - use it instead of the "border" representation that EnSight would compute. - -Further discussion on the philosophical differences between the two API's and -an efficiency comparison example can be found in the README_1.0_to_2.0 file. -This file also contains guidance on necessary changes to modify an existing -1.0 API to the new 2.0 API. - - -**************************************************************************** -Note: A default dummy_gold reader and an Ensight Gold example of this new 2.0 - user defined reader API has been included with your EnSight release. - Also, the SILO reader included in the release utilizes the 2.0 API. - - And while not identical, the API 1.0 readers might be useful to - examine as examples. Many of the routines are the same or similar. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - - - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description(optional) - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - - -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable - value over time -USERD_stop_part_building cleanup after part build routine - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - USERD_set_server_number - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_maxsize_info - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - USERD_set_time_set_and_step - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - USERD_get_block_coords_by_component - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability( int part_number,... - USERD_get_border_elements_by_type( int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimensions - for each structured model part. - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and element - label status is TRUE - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 and node label - status is TRUE - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 instead of 2.0 - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - - ----- end of doucment ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.01 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.01 deleted file mode 100644 index e76880e74e5ce0919e964662a9c5aed2a83bd499..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.01 +++ /dev/null @@ -1,2787 +0,0 @@ -README_USERD_2.01 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.01) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - - -***>> API 2.01 adds the capabilty of handling ghost cells. - - -API 2.01 (defined in this README_USERD_2.01 document) -======== -This new API has been defined to be more efficient and includes access to new -capabilities of EnSight 7.4. It lends itself closely to the EnSight "gold" -type format. - -Some of its advantages are:: - - * Most intermediate temporary arrays have been eliminated, such that the user - defined routines write directly into internal part structures. This is a - considerable improvement in memory use, and improves speed as well since - far less memory need be allocated, initialized, etc. - - * Parts are self contained. Coordinates, connectivity and all variables are - provided on a part basis. This eliminates the need for several global to - local coordinate mapping operations and the need for node id connectivity - hashing. This can greatly improve the speed at which models are loaded. - - * Model extents can be provided directly, such that EnSight need not read - all the coordinate data at load time. - - * Tensor variables are supported - - * Complex variables are supported - - * A routine is provided as EnSight exits, so cleanup operations such as - removing temporary files can be easily accomplished. - - * Geometry and variables can be provided on different time lines (timesets). - - * If your data format already provides boundary shell information, you can - use it instead of the "border" representation that EnSight would compute. - - * Ghost cells are supported, for both unstructured and structured models. - - -**************************************************************************** -Note: A default dummy_gold reader and an Ensight Gold example of this new 2.01 - user defined reader API has been included with your EnSight release. - Also, the SILO and ExodusII_gold reader included in the release - utilizes the 2.01 API. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description(optional) - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - - -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable - value over time -USERD_stop_part_building cleanup after part build routine - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - USERD_set_server_number - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - - else if structured part: - ----------------------- - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -You must use the global_extern.h file associated with the proper release of -EnSight when you build readers. Namely, this header file can change per EnSight -release. For example, readers compiled for EnSight 7.3 will not run properly in -EnSight 7.4 and vica versa because there was a critical change in the -global_extern.h file between these two versions. In most cases the only thing -needed to produce a workable reader is to remake it with the proper header file. - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimensions - for each structured model part. - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - - ----- end of doucment ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03 deleted file mode 100644 index 14d40c799a11f9ed321b5f35cce01a62df232658..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03 +++ /dev/null @@ -1,3838 +0,0 @@ -README_USERD_2.03 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.03) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - - -***>> API 2.03 additional capabilities (beyond API 2.01): -1. Routines to handle materials -2. Routines to handle nsided and nfaced elements -3. Modified routine to handle structured ranges - - -**************************************************************************** -Note: The dummy_gold reader, the Ensight Gold example reader, and the - SILO reader have been moved to this 2.03 API level. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description (optional) - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - -USERD_get_gold_part_build_info Gets the info needed for part building process -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) - - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable value over time -USERD_stop_part_building cleanup after part build routine - -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - USERD_set_server_number - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - else if structured part: - ----------------------- - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - -10. To see if materials in the model - - USERD_get_number_of_material_sets - USERD_get_matf_set_info - - If any material sets in the model (calls these once per material set): - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - -And it references: - - #include "global_extern_proto.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_203 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.03" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is accessed from the new global_extern.h - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) *two_fields = FALSE if only one data field required - in the data dialog of EnSight. - TRUE if two data fields required. - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) filename_2 = the filename entered into the result - field of the data dialog. - (If the two_fields flag in USERD_get_name_of_reader - is FALSE, this will be null string) - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - - ----- end of doucment ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03_CHANGES b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03_CHANGES deleted file mode 100644 index 90941e03e3722d7602ae6f87c02e1b9525ab2547..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.03_CHANGES +++ /dev/null @@ -1,1374 +0,0 @@ -README_USERD_2.03 -================= - -At this API revision level: - -1. Routines to handle materials have been added. -2. Routines to handle nsided and nfaced elements have been added -3. A routine has modified so structured ranges can be specified - -**************************************************************************** -Note: The dummy_gold reader, the Ensight Gold example reader, and the - SILO reader have been moved to this 2.03 API level. -**************************************************************************** - -------------------------------- -Quick Index of Library Routines -------------------------------- - -The new new routines are: -------------------------- -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) -The modified routine is: ------------------------- -USERD_get_gold_part_build_info Gets the info needed for part building - process - --------------------- -Header files changes --------------------- -global_extern.h has appropriate changes, must use it -global_extern_protr.h new file, access from global_extern.h - -Basically the the old global_extern.h file has been split into two files now. - - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -10. To see if materials in the model - - USERD_get_number_of_material_sets - - If any material sets in the model (calls these once per material set): - USERD_get_matf_set_info - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - . - . - . - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_203 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.03" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is access from the new global_extern.h - -******************************************************************************* -******************************************************************************* - -____________________ --------------------- -New Library Routines -____________________ --------------------- - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - -________________________ ------------------------- -Modified Library Routine -________________________ ------------------------- - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for part building process - - Specification: - ------------- - int - USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability( int part_number,... - USERD_get_border_elements_by_type( int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Starting at API 2.01: - ==================== - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - Starting at API 2.02: - ==================== - Z_NSIDED n node nsided polygon - Z_NFACED n face nfaced polyhedron - Z_G_NSIDED n node ghost nsided polygon - Z_G_NFACED n face ghost nfaced polyhedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][4] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][4] = 3 - 2 ................. ijk_dimension[0][4] = 4 - . . . ijk_dimension[0][4] = 1 - . . . ijk_dimension[0][4] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][4] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][4] = 1 - 2 *-------*-------* ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][4] = 1 - | | | ijk_dimension[1][4] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - This will be based on Current_time_step diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.05 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.05 deleted file mode 100644 index b92bb1c988a6b4b337f05feefcd9ddb4f3f9c892..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.05 +++ /dev/null @@ -1,4543 +0,0 @@ -README_USERD_2.05 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.05) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - -***>> API 2.05 additional capabilities (beyond API 2.04): -Routines to handle material species. - USERD_get_number_of_species - USERD_get_matsp_info - -Routines to handle variable extraction parameters after a read, and then -update the variables accordingly. Similar to the extra GUI capabilities -(which are processed before a read). (Can actually be added to pre-2.05 readers) - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - -Routines to obtain rigid body values from a reader. -(Routines were added - EnSight is now using for Nastran and STL readers - with Dynasty rigid body motion data file) - USERD_rigidbody_existence - USERD_rigidbody_values - -Routine that lets reader know when EnSight is getting the right side of a time -interval for variable interpolation between steps. Not generally needed for -most readers - however, may be needed for those that implement rigid body, and -wish to cache left and right timespan information for interpolation within the -reader itself. (Can actually be added to pre-2.05 readers) - USERD_set_right_side - - -***>> API 2.04 additional capabilities (beyond API 2.03): -Routines to handle failed elements. Basically -a.One routine to return a flag indicating the existence of - failed elements in at least one part in at least one - timestep in the model. -b.A second routine to return a matrix of flags indexed by part and - element type indicating which parts and element types have failed - elements at the current time step. -c.Finally a third routine to return an array of flags for a given - part and element type that is number of elements of that type long - indicating which elements have failed, and which have not failed. - - -***>> API 2.03 additional capabilities (beyond API 2.01): -1. Routines to handle materials -2. Routines to handle nsided and nfaced elements -3. Modified routine to handle structured ranges - - -**************************************************************************** -Note: The dummy_gold reader, the Ensight Gold example reader, the - ABAQUS_ODB reader and the LS-DYNA reader have been moved to - this 2.04 API level. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description (optional) - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - -USERD_get_gold_part_build_info Gets the info needed for part building process -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) - - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable value over time -USERD_stop_part_building cleanup after part build routine - -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - - ---------------------------- -Optional Extra GUI Info -Adds Toggle(s), Pulldown(s) Field(s) -that can be used for additonal input ---------------------------- -USERD_get_extra_gui_numbers Gets the number of toggles, pulldowns and fields -USERD_get_extra_gui_defaults Gets the default values for the GUI members -USERD_set_extra_gui_data Returns the answers provided by the user - -USERD_rigidbody_existence Returns whether rigid body transformation - data exists for the model. -USERD_rigidbody_values Returns the euler and location values for a - given part - -USERD_set_right_side Simply informs the reader when the time set - is for the right side of a time span during - variable interpolation between time steps. - -New at 2.04 ------------ - -/* ---------------------------------------------------------- - * - * Failure criteria in LS-DYNA - * if fail flag == threshold_val1 (0.0) then element fails - * logic_criteria2 not used - * threshold_val2 not used - * threshold_operator2 not used - * Return (Z_ERR) if this is not used. - * Return Z_OK if failed element feature should be used - * - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ---------------------------------------------------------- */ - -int USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - USERD_get_extra_gui_numbers (optional) - USERD_get_extra_gui_defaults (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - USERD_set_server_number - USERD_set_extra_gui_data (optional) - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_uns_failed_model_flag - USERD_get_gold_part_build_info - USERD_get_uns_failed_etype_flags - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_uns_failed_elist_flags - - else if structured part: - ----------------------- - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - USERD_get_uns_failed_model_flag - USERD_get_uns_failed_etype_flags - USERD_get_uns_failed_elist_flags - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_uns_failed_model_flag - USERD_get_gold_part_build_info - USERD_get_uns_failed_etype_flags - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_uns_failed_elist_flags - USERD_get_block_iblanking - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - -10. To see if materials in the model - - USERD_get_number_of_material_sets - USERD_get_matf_set_info - - If any material sets in the model (calls these once per material set): - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -11. To modify the variable extraction parameters and have the variables - update accordingly. - - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - -And it references: - - #include "global_extern_proto.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_204 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.04" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is accessed from the new global_extern.h - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) two_fields = FALSE if only one data field is - required. - TRUE if two data fields required - - -1 if one field (Geom) required - and one field (Param) is optional - Param field can contain any text - for example a file name, modifiers, - etc. that can be used to modify the - reader's behavior. - - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) param_2 = The usage of this string depends on - 'two_fields' in USERD_get_name_of_reader. - - If two_fields is FALSE then it's empty. - - If two_fields is TRUE, this is the - manditory results file entered - into the result field of the data dialog. - - If two_fields is -1, then this contains - optional text (filenames, modifiers, etc.) - that can be parsed and used to modify - reader - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - --------------------------------------------------------------------- -USERD_rigidbody_existence - - Description: - ----------- - Gets the existence of rigid body values or not in the model - - Specification: - ------------- - int USERD_rigidbody_existence( void ) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - none - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_rigidbody_values - - Description: - ----------- - Gets the rigid body values for each part - - Specification: - ------------- - int USERD_rigidbody_values(int part_number, - float values[7]) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - (IN) part_number = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) values values[0] = IX (x location) - values[1] = IY (y location) - values[2] = IZ (z location) - values[3] = E0 (e0 euler value) - values[4] = E1 (e1 euler value) - values[5] = E2 (e2 euler value) - values[6] = E3 (e3 euler value) - - - Notes: - ----- - * This will be based on Current_time_step - * It will not be called unless USERD_rigidbody_existence indicates - that there are some values in the model by returning Z_OK. - - --------------------------------------------------------------------- -USERD_set_right_side - - Description: - ----------- - Informs the reader that the time currently set is the right side of a time - span used for variable interpolation between time steps - - Specification: - ------------- - void USERD_set_right_side( void ) - - Returns: - ------- - - Arguments: - --------- - none - - Notes: - ----- - * Applies to Current_time_step - - - - - ------------------------------------------------------------------- - ENHANCED GUI ROUTINES - --------------------------------------------------------------------- -USERD_get_extra_gui_numbers - - Description: - ----------- - The Enhanced GUI routines are added to allow - the user to customize a portion of the Data - Reader dialog to pass in options to their - user defined reader. - - Specification: - ------------- - void USERD__get_extra_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_extra_gui_numbers - USERD_get_extra_gui_defaults - USERD_set_extra_gui_data - - The existence of these routine indicates that - you wish to add customize entries to the - Data Reader dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_extra_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_extra_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_extra_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_extra_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_extra_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_extra_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_numbers - - Description: - ----------- - The Var_Extract_GUI routines are added to allow - the user to customize a extraction parameters - for variables "after" the file has been read. - These things can be modified and the variables will - be update/refreshed according to the new parameters set - - Specification: - ------------- - void USERD_get_var_extract_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults (this one) - USERD_set_var_extract_gui_data - - The existence of these routine indicates that - you wish to have the Var Extract Parameters dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_var_extract_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_var_extract_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_var_extract_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_var_extract_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_var_extract_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - - - ------------------------------------------------------------------------------------ -/* ---------------------------------------------------------- - * New in EnSight 8 is the capability to remove (fail) elements - * based on variable threshold values. Basically the variable - * name, a couple of thresholds, a couple of values and a logic - * criteria are read in from this routine. Every element that - * satisfies the failure criteria is removed and not used in - * EnSight calculations. - * - * Example Failure criteria - * Let fail_var_name = "fail_flag" - * threshold_val1 = 0 - * threshold_operator1 = Z_EQUAL_TO - * logic_criteria2 not used - * threshold_val2 not used - * threshold_operator2 not used - * For each value of "fail_flag" at each element, - * if fail flag == threshold_val1 (0.0) then element fails - * Return (Z_ERR) if this is not used. - * Return (Z_OK) if failed element feature should be used - * - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ---------------------------------------------------------- */ -int USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - - - ----- end of document ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.06 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.06 deleted file mode 100644 index 88c4955c810c5273db3a5240921714c7fc13fc5c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.06 +++ /dev/null @@ -1,4603 +0,0 @@ -README_USERD_2.06 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.06) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - -***>> API 2.06 additional capabilities (beyond API 2.05): -Routines to allow userd defined readers for structured data -to deal with min, max, and stride within the reader itself -instead of within EnSight. - USERD_get_structured_reader_cinching - USERD_set_block_range_and_stride - - -***>> API 2.05 additional capabilities (beyond API 2.04): -Routines to handle material species. - USERD_get_number_of_species - USERD_get_matsp_info - -Routines to handle variable extraction parameters after a read, and then -update the variables accordingly. Similar to the extra GUI capabilities -(which are processed before a read). (Can actually be added to pre-2.05 readers) - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - -Routines to obtain rigid body values from a reader. -(Routines were added - EnSight is now using for Nastran and STL readers - with Dynasty rigid body motion data file) - USERD_rigidbody_existence - USERD_rigidbody_values - -Routine that lets reader know when EnSight is getting the right side of a time -interval for variable interpolation between steps. Not generally needed for -most readers - however, may be needed for those that implement rigid body, and -wish to cache left and right timespan information for interpolation within the -reader itself. (Can actually be added to pre-2.05 readers) - USERD_set_right_side - - -***>> API 2.04 additional capabilities (beyond API 2.03): -Routines to handle failed elements. Basically -a.One routine to return a flag indicating the existence of - failed elements in at least one part in at least one - timestep in the model. -b.A second routine to return a matrix of flags indexed by part and - element type indicating which parts and element types have failed - elements at the current time step. -c.Finally a third routine to return an array of flags for a given - part and element type that is number of elements of that type long - indicating which elements have failed, and which have not failed. - - -***>> API 2.03 additional capabilities (beyond API 2.01): -1. Routines to handle materials -2. Routines to handle nsided and nfaced elements -3. Modified routine to handle structured ranges - - -**************************************************************************** -Note: Only the the Ensight Gold example reader, has been moved to - this 2.06 API level. And it is purely for an example - it does not - actually provide a benefit. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_release release string of reader -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description (optional) - -USERD_get_extra_gui_numbers Gets the number of toggles, pulldowns and fields -USERD_get_extra_gui_defaults Gets the default values for the GUI members -USERD_set_extra_gui_data Returns the answers provided by the user - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_gold_part_build_info Gets the info needed for part building process -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) - - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable value over time -USERD_stop_part_building cleanup after part build routine - -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - -USERD_get_uns_failed_params Gets thresholds/criteria for failure - -USERD_rigidbody_existence Returns whether rigid body transformation - data exists for the model. -USERD_rigidbody_values Returns the euler and location values for a - given part - -USERD_set_right_side Simply informs the reader when the time set - is for the right side of a time span during - variable interpolation between time steps. - -USERD_get_structured_reader_cinching Tells if the reader will do structured - cinching -USERD_set_block_range_and_stride Sets the min, max, and stride of a block - if doing structured cinching - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - USERD_get_extra_gui_numbers (optional) - USERD_get_extra_gui_defaults (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - <USERD_set_extra_gui_data> (optional if reader has - USERD_get_extra_gui_defaults routine) - USERD_get_structured_reader_cinching - USERD_set_server_number - USERD_set_extra_gui_data (optional) - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - else if structured part: - ----------------------- - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - -10. To see if materials in the model - - USERD_get_number_of_material_sets - USERD_get_matf_set_info - - If any material sets in the model (calls these once per material set): - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -11. To modify the variable extraction parameters and have the variables - update accordingly. - - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - -And it references: - - #include "global_extern_proto.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_204 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.04" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is accessed from the new global_extern.h - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) two_fields = FALSE if only one data field is - required. - TRUE if two data fields required - - -1 if one field (Geom) required - and one field (Param) is optional - Param field can contain any text - for example a file name, modifiers, - etc. that can be used to modify the - reader's behavior. - - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) param_2 = The usage of this string depends on - 'two_fields' in USERD_get_name_of_reader. - - If two_fields is FALSE then it's empty. - - If two_fields is TRUE, this is the - manditory results file entered - into the result field of the data dialog. - - If two_fields is -1, then this contains - optional text (filenames, modifiers, etc.) - that can be parsed and used to modify - reader - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - --------------------------------------------------------------------- -USERD_rigidbody_existence - - Description: - ----------- - Gets the existence of rigid body values or not in the model - - Specification: - ------------- - int USERD_rigidbody_existence( void ) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - none - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_rigidbody_values - - Description: - ----------- - Gets the rigid body values for each part - - Specification: - ------------- - int USERD_rigidbody_values(int part_number, - float values[7]) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - (IN) part_number = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) values values[0] = IX (x location) - values[1] = IY (y location) - values[2] = IZ (z location) - values[3] = E0 (e0 euler value) - values[4] = E1 (e1 euler value) - values[5] = E2 (e2 euler value) - values[6] = E3 (e3 euler value) - - - Notes: - ----- - * This will be based on Current_time_step - * It will not be called unless USERD_rigidbody_existence indicates - that there are some values in the model by returning Z_OK. - - --------------------------------------------------------------------- -USERD_set_right_side - - Description: - ----------- - Informs the reader that the time currently set is the right side of a time - span used for variable interpolation between time steps - - Specification: - ------------- - void USERD_set_right_side( void ) - - Returns: - ------- - - Arguments: - --------- - none - - Notes: - ----- - * Applies to Current_time_step - - - - - ------------------------------------------------------------------- - ENHANCED GUI ROUTINES - --------------------------------------------------------------------- -USERD_get_extra_gui_numbers - - Description: - ----------- - The Enhanced GUI routines are added to allow - the user to customize a portion of the Data - Reader dialog to pass in options to their - user defined reader. - - Specification: - ------------- - void USERD__get_extra_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_extra_gui_numbers - USERD_get_extra_gui_defaults - USERD_set_extra_gui_data - - The existence of these routine indicates that - you wish to add customize entries to the - Data Reader dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_extra_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_extra_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_extra_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_extra_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_extra_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_extra_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_numbers - - Description: - ----------- - The Var_Extract_GUI routines are added to allow - the user to customize a extraction parameters - for variables "after" the file has been read. - These things can be modified and the variables will - be update/refreshed according to the new parameters set - - Specification: - ------------- - void USERD_get_var_extract_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults (this one) - USERD_set_var_extract_gui_data - - The existence of these routine indicates that - you wish to have the Var Extract Parameters dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_var_extract_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_var_extract_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_var_extract_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_var_extract_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_var_extract_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - - - ------------------------------------------------------------------------------------ -/* ---------------------------------------------------------- - * New in EnSight 8 is the capability to remove (fail) elements - * based on variable threshold values. Basically the variable - * name, a couple of thresholds, a couple of values and a logic - * criteria are read in from this routine. Every element that - * satisfies the failure criteria is removed and not used in - * EnSight calculations. - * - * Example Failure criteria - * Let fail_var_name = "fail_flag" - * threshold_val1 = 0 - * threshold_operator1 = Z_EQUAL_TO - * logic_criteria2 not used - * threshold_val2 not used - * threshold_operator2 not used - * For each value of "fail_flag" at each element, - * if fail flag == threshold_val1 (0.0) then element fails - * Return (Z_ERR) if this is not used. - * Return (Z_OK) if failed element feature should be used - * - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ---------------------------------------------------------- */ -int USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - -/*-------------------------------------------------------------------- - * USERD_get_structured_reader_cinching - - *-------------------------------------------------------------------- - * - * Gets whether this reader will do structured cinching for block data - * This means that it will handle the min, max, and step values for a - * given block and return the coordinate components or variable components - * in their "cinched" state when partial extraction or striding is used. - * This is as opposed to returning the entire component (ignoring min, max - * and stride) and letting Ensight pick out the values actually used. - * - * returns: Z_OK if the reader will handle the - * min, max, and stride and return - * the cinched values only. - * - * Z_UNDEF or Z_ERR if will return entire component - * and rely on EnSight to cinch. - * - * Notes: - * Unless you can actually pull out the desired min, max, and stride - * without using a full component of memory, don't enable this feature. - *--------------------------------------------------------------------*/ -int -USERD_get_structured_reader_cinching( void ) - - - -/*-------------------------------------------------------------------- - * USERD_set_block_range_and_stride - - *-------------------------------------------------------------------- - * - * Sets the min, max, and step values in each of the i, j, and k, directions - * for the given part. - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in - * USERD_get_gold_part_build_info) - * - * (IN) mini = min i plane desired (zero based) - * maxi = max i plane desired (zero based) - * stepi = i stride - * minj = min j plane desired (zero based) - * maxj = max j plane desired (zero based) - * stepj = j stride - * mink = min k plane desired (zero based) - * maxk = max k plane desired (zero based) - * stepk = k stride - * - * - * returns: Z_OK if no problems - * Z_ERR if an error - * - * Notes: - * * It will not be called unless USERD_get_structured_reader_cinching - * indicates that this reader does structured cinching by returning - * a Z_OK. - * - * * It will actually be called before each geom component and before - * each part variable - so if you are storing things locally, you should - * make this routine be able to quickly check whether anything needs - * updated or not. - * - * * If the stride (step) does not hit right on the max, the last element - * in each direction will be shortened appropriately. - * For example, if a block had 0 to 12 in the i direction, - * and the user specified min = 1 - * max = 8 - * step = 3 - * - * 0 1 2 3 4 5 6 7 8 9 10 11 12 - * | | | | | | | | | | | | | - * - * | | | | - * - * Namely, the coarser cell boundaries in this direction would be at 1, 4, -7, and 8 - * - *--------------------------------------------------------------------*/ -int -USERD_set_block_range_and_stride(int part_number, - int mini, int maxi, int stepi, - int minj, int maxj, int stepj, - int mink, int maxk, int stepk) - - - ----- end of document ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.07 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.07 deleted file mode 100644 index 3b52eed3a35b84def62d261234314aaf7e387460..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.07 +++ /dev/null @@ -1,4617 +0,0 @@ -README_USERD_2.07 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.07) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - -***>> API 2.07 additional capabilities (beyond API 2.06): -Optional routine to allow userd defined readers to indicate their auto -distribute preference when used with SOS. This is used to set the auto -distribute flag default in the client. If the function does not exist, -then it defaults to 'use auto distribute'. If the function does exist and -indicates 'no auto distribute', then it's up to the UDR to decompose a -distributed data set. - USERD_prefer_auto_distribute -Optional routine to allow userd defined readers to indicate their -preference for the 'Set file...' button labels in the client's File->Open -dialog. If the function does not exist or it returns a null string for -an argument, then the default values are used. - USERD_set_filename_button_labels - -***>> API 2.06 additional capabilities (beyond API 2.05): -Routines to allow userd defined readers for structured data -to deal with min, max, and stride within the reader itself -instead of within EnSight. - USERD_get_structured_reader_cinching - USERD_set_block_range_and_stride - - -***>> API 2.05 additional capabilities (beyond API 2.04): -Routines to handle material species. - USERD_get_number_of_species - USERD_get_matsp_info - -Routines to handle variable extraction parameters after a read, and then -update the variables accordingly. Similar to the extra GUI capabilities -(which are processed before a read). (Can actually be added to pre-2.05 readers) - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - -Routines to obtain rigid body values from a reader. -(Routines were added - EnSight is now using for Nastran and STL readers - with Dynasty rigid body motion data file) - USERD_rigidbody_existence - USERD_rigidbody_values - -Routine that lets reader know when EnSight is getting the right side of a time -interval for variable interpolation between steps. Not generally needed for -most readers - however, may be needed for those that implement rigid body, and -wish to cache left and right timespan information for interpolation within the -reader itself. (Can actually be added to pre-2.05 readers) - USERD_set_right_side - - -***>> API 2.04 additional capabilities (beyond API 2.03): -Routines to handle failed elements. Basically -a.One routine to return a flag indicating the existence of - failed elements in at least one part in at least one - timestep in the model. -b.A second routine to return a matrix of flags indexed by part and - element type indicating which parts and element types have failed - elements at the current time step. -c.Finally a third routine to return an array of flags for a given - part and element type that is number of elements of that type long - indicating which elements have failed, and which have not failed. - - -***>> API 2.03 additional capabilities (beyond API 2.01): -1. Routines to handle materials -2. Routines to handle nsided and nfaced elements -3. Modified routine to handle structured ranges - - -**************************************************************************** -Note: Only the the Ensight Gold example reader, has been moved to - this 2.06 API level. And it is purely for an example - it does not - actually provide a benefit. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_release release string of reader -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description (optional) - -USERD_get_extra_gui_numbers Gets the number of toggles, pulldowns and fields -USERD_get_extra_gui_defaults Gets the default values for the GUI members -USERD_set_extra_gui_data Returns the answers provided by the user - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_gold_part_build_info Gets the info needed for part building process -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) - - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable value over time -USERD_stop_part_building cleanup after part build routine - -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - -USERD_get_uns_failed_params Gets thresholds/criteria for failure - -USERD_rigidbody_existence Returns whether rigid body transformation - data exists for the model. -USERD_rigidbody_values Returns the euler and location values for a - given part - -USERD_set_right_side Simply informs the reader when the time set - is for the right side of a time span during - variable interpolation between time steps. - -USERD_get_structured_reader_cinching Tells if the reader will do structured - cinching -USERD_set_block_range_and_stride Sets the min, max, and stride of a block - if doing structured cinching - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - USERD_get_extra_gui_numbers (optional) - USERD_get_extra_gui_defaults (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - <USERD_set_extra_gui_data> (optional if reader has - USERD_get_extra_gui_defaults routine) - USERD_get_structured_reader_cinching - USERD_set_server_number - USERD_set_extra_gui_data (optional) - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - else if structured part: - ----------------------- - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - -10. To see if materials in the model - - USERD_get_number_of_material_sets - USERD_get_matf_set_info - - If any material sets in the model (calls these once per material set): - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -11. To modify the variable extraction parameters and have the variables - update accordingly. - - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - -And it references: - - #include "global_extern_proto.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_204 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.04" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is accessed from the new global_extern.h - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) two_fields = FALSE if only one data field is - required. - TRUE if two data fields required - - -1 if one field (Geom) required - and one field (Param) is optional - Param field can contain any text - for example a file name, modifiers, - etc. that can be used to modify the - reader's behavior. - - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) param_2 = The usage of this string depends on - 'two_fields' in USERD_get_name_of_reader. - - If two_fields is FALSE then it's empty. - - If two_fields is TRUE, this is the - manditory results file entered - into the result field of the data dialog. - - If two_fields is -1, then this contains - optional text (filenames, modifiers, etc.) - that can be parsed and used to modify - reader - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - --------------------------------------------------------------------- -USERD_rigidbody_existence - - Description: - ----------- - Gets the existence of rigid body values or not in the model - - Specification: - ------------- - int USERD_rigidbody_existence( void ) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - none - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_rigidbody_values - - Description: - ----------- - Gets the rigid body values for each part - - Specification: - ------------- - int USERD_rigidbody_values(int part_number, - float values[7]) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - (IN) part_number = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) values values[0] = IX (x location) - values[1] = IY (y location) - values[2] = IZ (z location) - values[3] = E0 (e0 euler value) - values[4] = E1 (e1 euler value) - values[5] = E2 (e2 euler value) - values[6] = E3 (e3 euler value) - - - Notes: - ----- - * This will be based on Current_time_step - * It will not be called unless USERD_rigidbody_existence indicates - that there are some values in the model by returning Z_OK. - - --------------------------------------------------------------------- -USERD_set_right_side - - Description: - ----------- - Informs the reader that the time currently set is the right side of a time - span used for variable interpolation between time steps - - Specification: - ------------- - void USERD_set_right_side( void ) - - Returns: - ------- - - Arguments: - --------- - none - - Notes: - ----- - * Applies to Current_time_step - - - - - ------------------------------------------------------------------- - ENHANCED GUI ROUTINES - --------------------------------------------------------------------- -USERD_get_extra_gui_numbers - - Description: - ----------- - The Enhanced GUI routines are added to allow - the user to customize a portion of the Data - Reader dialog to pass in options to their - user defined reader. - - Specification: - ------------- - void USERD__get_extra_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_extra_gui_numbers - USERD_get_extra_gui_defaults - USERD_set_extra_gui_data - - The existence of these routine indicates that - you wish to add customize entries to the - Data Reader dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_extra_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_extra_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_extra_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_extra_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_extra_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_extra_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_numbers - - Description: - ----------- - The Var_Extract_GUI routines are added to allow - the user to customize a extraction parameters - for variables "after" the file has been read. - These things can be modified and the variables will - be update/refreshed according to the new parameters set - - Specification: - ------------- - void USERD_get_var_extract_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults (this one) - USERD_set_var_extract_gui_data - - The existence of these routine indicates that - you wish to have the Var Extract Parameters dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_var_extract_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_var_extract_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_var_extract_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_var_extract_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_var_extract_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - - - ------------------------------------------------------------------------------------ -/* ---------------------------------------------------------- - * New in EnSight 8 is the capability to remove (fail) elements - * based on variable threshold values. Basically the variable - * name, a couple of thresholds, a couple of values and a logic - * criteria are read in from this routine. Every element that - * satisfies the failure criteria is removed and not used in - * EnSight calculations. - * - * Example Failure criteria - * Let fail_var_name = "fail_flag" - * threshold_val1 = 0 - * threshold_operator1 = Z_EQUAL_TO - * logic_criteria2 not used - * threshold_val2 not used - * threshold_operator2 not used - * For each value of "fail_flag" at each element, - * if fail flag == threshold_val1 (0.0) then element fails - * Return (Z_ERR) if this is not used. - * Return (Z_OK) if failed element feature should be used - * - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ---------------------------------------------------------- */ -int USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - -/*-------------------------------------------------------------------- - * USERD_get_structured_reader_cinching - - *-------------------------------------------------------------------- - * - * Gets whether this reader will do structured cinching for block data - * This means that it will handle the min, max, and step values for a - * given block and return the coordinate components or variable components - * in their "cinched" state when partial extraction or striding is used. - * This is as opposed to returning the entire component (ignoring min, max - * and stride) and letting Ensight pick out the values actually used. - * - * returns: Z_OK if the reader will handle the - * min, max, and stride and return - * the cinched values only. - * - * Z_UNDEF or Z_ERR if will return entire component - * and rely on EnSight to cinch. - * - * Notes: - * Unless you can actually pull out the desired min, max, and stride - * without using a full component of memory, don't enable this feature. - *--------------------------------------------------------------------*/ -int -USERD_get_structured_reader_cinching( void ) - - - -/*-------------------------------------------------------------------- - * USERD_set_block_range_and_stride - - *-------------------------------------------------------------------- - * - * Sets the min, max, and step values in each of the i, j, and k, directions - * for the given part. - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in - * USERD_get_gold_part_build_info) - * - * (IN) mini = min i plane desired (zero based) - * maxi = max i plane desired (zero based) - * stepi = i stride - * minj = min j plane desired (zero based) - * maxj = max j plane desired (zero based) - * stepj = j stride - * mink = min k plane desired (zero based) - * maxk = max k plane desired (zero based) - * stepk = k stride - * - * - * returns: Z_OK if no problems - * Z_ERR if an error - * - * Notes: - * * It will not be called unless USERD_get_structured_reader_cinching - * indicates that this reader does structured cinching by returning - * a Z_OK. - * - * * It will actually be called before each geom component and before - * each part variable - so if you are storing things locally, you should - * make this routine be able to quickly check whether anything needs - * updated or not. - * - * * If the stride (step) does not hit right on the max, the last element - * in each direction will be shortened appropriately. - * For example, if a block had 0 to 12 in the i direction, - * and the user specified min = 1 - * max = 8 - * step = 3 - * - * 0 1 2 3 4 5 6 7 8 9 10 11 12 - * | | | | | | | | | | | | | - * - * | | | | - * - * Namely, the coarser cell boundaries in this direction would be at 1, 4, -7, and 8 - * - *--------------------------------------------------------------------*/ -int -USERD_set_block_range_and_stride(int part_number, - int mini, int maxi, int stepi, - int minj, int maxj, int stepj, - int mink, int maxk, int stepk) - - - ----- end of document ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.08 b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.08 deleted file mode 100644 index 29e185d4d0cc03fefd8d608d98618fbbaa8a253b..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_2.08 +++ /dev/null @@ -1,4653 +0,0 @@ -README_USERD_2.08 -================= --------------------------------------- -EnSight User Defined Reader Capability ===> (API 2.08) --------------------------------------- -A user defined reader capability is included in EnSight which can allow -otherwise unsupported structured or unstructured data to be read. The user -defined reader capability utilizes dynamic shared libraries composed of -routines defined in this document but produced by you, the user, (or some -third party). This capability is currently available for dec, ibm, hp, sgi, -sun, linux, alpha linux, and NT servers. - -You should refer to beginning of README_USERD_2.0 and/or README_1.0_to_2.0 -for a discussion of the differences between API 1.0 and API 2.*. - -***>> API 2.08 invloves a slight change to API 2.05 and later: -Namely, rotational (yaw,pitch,roll) values were added to the values -argument of USERD_rigidbody_values routine. - -***>> API 2.07 additional capabilities (beyond API 2.06): -Optional routine to allow userd defined readers to indicate their auto -distribute preference when used with SOS. This is used to set the auto -distribute flag default in the client. If the function does not exist, -then it defaults to 'use auto distribute'. If the function does exist and -indicates 'no auto distribute', then it's up to the UDR to decompose a -distributed data set. - USERD_prefer_auto_distribute -Optional routine to allow userd defined readers to indicate their -preference for the 'Set file...' button labels in the client's File->Open -dialog. If the function does not exist or it returns a null string for -an argument, then the default values are used. - USERD_set_filename_button_labels - -***>> API 2.06 additional capabilities (beyond API 2.05): -Routines to allow userd defined readers for structured data -to deal with min, max, and stride within the reader itself -instead of within EnSight. - USERD_get_structured_reader_cinching - USERD_set_block_range_and_stride - - -***>> API 2.05 additional capabilities (beyond API 2.04): -Routines to handle material species. - USERD_get_number_of_species - USERD_get_matsp_info - -Routines to handle variable extraction parameters after a read, and then -update the variables accordingly. Similar to the extra GUI capabilities -(which are processed before a read). (Can actually be added to pre-2.05 readers) - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - -Routines to obtain rigid body values from a reader. -(Routines were added - EnSight is now using for Nastran and STL readers - with Dynasty rigid body motion data file) - USERD_rigidbody_existence - USERD_rigidbody_values - -Routine that lets reader know when EnSight is getting the right side of a time -interval for variable interpolation between steps. Not generally needed for -most readers - however, may be needed for those that implement rigid body, and -wish to cache left and right timespan information for interpolation within the -reader itself. (Can actually be added to pre-2.05 readers) - USERD_set_right_side - - -***>> API 2.04 additional capabilities (beyond API 2.03): -Routines to handle failed elements. Basically -a.One routine to return a flag indicating the existence of - failed elements in at least one part in at least one - timestep in the model. -b.A second routine to return a matrix of flags indexed by part and - element type indicating which parts and element types have failed - elements at the current time step. -c.Finally a third routine to return an array of flags for a given - part and element type that is number of elements of that type long - indicating which elements have failed, and which have not failed. - - -***>> API 2.03 additional capabilities (beyond API 2.01): -1. Routines to handle materials -2. Routines to handle nsided and nfaced elements -3. Modified routine to handle structured ranges - - -**************************************************************************** -Note: Only the the Ensight Gold example reader, has been moved to - this 2.06 API level. And it is purely for an example - it does not - actually provide a benefit. -**************************************************************************** - - -The process for producing a user defined reader is: ---------------------------------------------------- -1. Write code for all pertinent routines in the library (Unless someone else - has done this for you). - - This is of course where the work is done by the user. The word - "pertinent" is used because depending on the nature of the data, some - of the routines in the library may be dummy routines. - - The source code for a dummy_gold library and for various other - working or sample libraries is copied from the installation CD during - installation. These will be located in directories under: - - $CEI_HOME/ensight76/user_defined_src/readers - - examples: - -------- - Basic dummy_gold routines provide skeleton for a new reader - $CEI_HOME/ensight76/user_defined_src/readers/dummy_gold - - Sample library which reads unstructured binary EnSight Gold data - $CEI_HOME/ensight76/user_defined_src/readers/ensight_gold - - You may find it useful to place your library source in this area as - well, but are not limited to this location. - - * ===> The descriptions of each library routine and the order that the - routines are called, which is provided in this file, along with - the example libraries, should make it possible for you to produce - code for your own data reader. - - -2. Produce the dynamic shared library. - - This is a compiling and loading process which varies according to - the type of machine you are on. In the user-defined-reader source - tree we have tried to isolate the machine dependent parts of the - build process using a set of files in the 'config' directory. In this - directory there is a configuration file for each platform on which - EnSight is supported. Before you can compile the installed readers - you should run the script called 'init' in the config directory. - - i.e. (for UNIX) - cd config - ./init sgi_6.5_n64 - cd .. - make - - If you are compiling for Windows NT, there are two options. If you - have the Cygwin GNU utilities installed, you can use GNU make as for - Unix. Otherwise, there is a script called makeall.cmd which will - build all of the readers using nmake. The Makefiles in each reader - directory will work using either make or nmake. - - i.e. (WIN32 Cygwin) (using nmake) - cd config cd config - sh init win32 cp win32 config - cd .. cd .. - mkdir lib - make makeall.cmd - - If you have platform-specific portions of code in your reader, the - build system defines a set of flags which can be used within - #ifdef ... #endif regions in your source, as shown in the table - below. - - Because the readers are now dynamically opened by EnSight, you may - have to include dependent libraries on your link-line to avoid having - unresolved symbols. If you are having problems with a reader, start - ensight as "ensight7 -readerdbg" and you will get feedback on any - problems encountered in loading a reader. If there are unresolved - symbols, you need to find the library which contains the missing - symbols and link it into your reader by adding it to the example - link commands below. - - If you choose to use a different build environment for your reader, - you should take care to use compatible compilation flags to ensure - compatibilty with the EnSight executables, most notably on the SGI - and HP-UX 11.0 platforms, which should use the following flags: - - sgi_6.2_o32: -mips2 - sgi_6.2_n64: -mips4 -64 - sgi_6.5_n32: -mips3 - sgi_6.5_n64: -mips4 -64 - hp_11.0_32: +DA2.0 - hp_11.0_64: +DA2.0W - - ______________________________________________________________________ - | MACHINE | OS flag | SHARED LIBRARY NAME PRODUCED | - | TYPE |------------------------------------------------------------| - | | LD COMMAND USED IN MAKEFILE | - ====================================================================== - ______________________________________________________________________ - | sgi | -DSGI | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | hp | -DHP | libuserd-X.sl | - | |------------------------------------------------------------| - | | ld -b -o libuserd-X.sl libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | sun | -DSUN | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | dec | -DDEC | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -all -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | linux | -DLINUX | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | alpha | -DALINUX | libuserd-X.so | - | linux |------------------------------------------------------------| - | | ld -shared -o libuserd-X.so libuserd-X.o -lc | - ---------------------------------------------------------------------- - ______________________________________________________________________ - | ibm | -DIBM | libuserd-X.so | - | |------------------------------------------------------------| - | | ld -G -o libuserd-X.so libuserd-X.o -bnoentry -bexpall -lc | - ---------------------------------------------------------------------- - - Once you have created your library, you should place it in a directory - of your choice or in the standard reader location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - For example, if you created a reader for "mydata", you should create - the reader libuserd-mydata.so and place the file in your own reader - directory (see section 3 below) or in the standard location: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers/libuserd-mydata.so - - -3. By default EnSight will load all readers found in the directory: - - $CEI_HOME/ensight76/machines/$CEI_ARCH/lib_readers - - Files with names "libuserd-X.so" (where X is a name unique to the reader) - are assumed to be user-defined readers. - - There are two methods which can be used to supplement the default - behavior. - - (1) A feature which is useful for site-level or user-level configuration - is the optional environment variable $ENSIGHT7_READER. This - variable directs EnSight to load all readers in the specified reader - directory (you should probably specify a full path) before loading - the built-in readers. If the same reader exists in both directories - (as determined by the name returned by USERD_get_name_of_reader(), - NOT by the filename), the locally configured reader will take - precedence. - - (2) A useful feature for end-users is the use of the libuserd-devel - reader. EnSight will search for a reader named libuserd-devel.so - (.sl for HP or .dll for NT). This reader can exist anywhere in the - library path (see below) of the user. This is useful for an - individual actively developing a reader because the existence of a - libuserd-devel library will take precedence over any other library - which returns the same name from USERD_get_name_of_reader(). - - As an example, a site may install commonly used readers in a common - location, and users can set the ENSIGHT7_READER variable to access them: - - setenv ENSIGHT7_READER /usr/local/lib/e7readers - - A user working on a new reader may compile the reader and place it in - a directory specified by the library path: - - cp libuserd-myreader.so ~/lib/libuserd-devel.so - setenv <librarypath> ~/lib:$<librarypath> - - The user is responsible for correctly configuring the library path - variable in order to make use of the libuserd-devel feature. The - library environment variables used are: - - Machine type Environment variable to set - ------------ --------------------------- - sgi LD_LIBRARY_PATH - dec LD_LIBRARY_PATH - sun LD_LIBRARY_PATH - linux LD_LIBRARY_PATH - alpha linux LD_LIBRARY_PATH - hp SHLIB_PATH - ibm LIBPATH - -As always, EnSight support is available if you need it. - -------------------------------- -Quick Index of Library Routines -------------------------------- - -Generally Needed for UNSTRUCTURED data --------------------------------------- -USERD_get_part_coords part's node coordinates -USERD_get_part_node_ids part's node ids -USERD_get_part_elements_by_type part's element connectivites -USERD_get_part_element_ids_by_type part's element ids - - -Generally Needed for BLOCK data --------------------------------------- -USERD_get_block_coords_by_component block coordinates -USERD_get_block_iblanking block iblanking values -USERD_get_ghosts_in_block_flag block ghost cell existence? -USERD_get_block_ghost_flags block ghost cell flags - - These routines, which formerly were only for unstructured data, will now - also be called for structured data if you specify that ids will be given - in the USERD_get_node_label_status and USERD_get_element_label_status rotuines - ------------------------------------------------------------------------------ - USERD_get_part_node_ids part's node ids - USERD_get_part_element_ids_by_type part's element ids - - -Generally needed for either or both kinds of data -------------------------------------------------- -USERD_get_name_of_reader name of reader for GUI -USERD_get_reader_release release string of reader -USERD_get_reader_version provide reader version number -USERD_get_reader_descrip provide GUI more description (optional) - -USERD_get_extra_gui_numbers Gets the number of toggles, pulldowns and fields -USERD_get_extra_gui_defaults Gets the default values for the GUI members -USERD_set_extra_gui_data Returns the answers provided by the user - -USERD_set_filenames filenames entered in GUI -USERD_set_server_number server which of how many - -USERD_get_number_of_timesets number of timesets -USERD_get_timeset_description description of timeset -USERD_get_geom_timeset_number timeset # to use for geom - -USERD_get_num_of_time_steps number of time steps -USERD_get_sol_times solution time values -USERD_set_time_set_and_step current timeset and time step - -USERD_get_changing_geometry_status changing geometry? -USERD_get_node_label_status node labels? -USERD_get_element_label_status element labels? -USERD_get_model_extents provide model bounding extents -USERD_get_number_of_files_in_dataset number of files in model -USERD_get_dataset_query_file_info info about each model file -USERD_get_descrip_lines file associated description lines -USERD_get_number_of_model_parts number of model parts -USERD_get_gold_part_build_info Gets the info needed for part building process -USERD_get_part_build_info part/block type/descrip etc. -USERD_get_maxsize_info part/block allocation maximums -USERD_get_ghosts_in_model_flag model contains ghost cells? -USERD_get_nsided_conn Gets the element connectivities for nsided - elements. (utilizes the number of nodes - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_nodes_per_face Gets the number of nodes per face for nfaced - elements (utilizes the number of faces - per element obtained in - USERD_get_part_elements_by_type) -USERD_get_nfaced_conn Gets the element connectivities for nfaced - elements (utilizes the number of nodes - per face obtained in - USERD_get_nfaced_nodes_per_face) - - -USERD_get_border_availability part border provided? -USERD_get_border_elements_by_type part border conn and parent info - -USERD_get_number_of_variables number of variables -USERD_get_gold_variable_info variable type/descrip etc. -USERD_get_var_by_component part or block variable values -USERD_get_constant_val constant variable's value -USERD_get_var_value_at_specific node's or element's variable value over time -USERD_stop_part_building cleanup after part build routine - -USERD_get_number_of_material_sets Gets the number of material sets -USERD_get_matf_set_info Gets the material set indices and names -USERD_get_number_of_materials Gets the number of materials -USERD_get_matf_var_info Gets the material indices and descriptions -USERD_size_matf_data Gets the length of either the - material ids list, - mixed-material ids list, or - mixed-material values list -USERD_load_matf_data Gets the material ids list, - mixed-material ids list, or - mixed-material values list - -USERD_bkup archive routine - -USERD_exit_routine cleanup upon exit routine - -USERD_get_uns_failed_params Gets thresholds/criteria for failure - -USERD_rigidbody_existence Returns whether rigid body transformation - data exists for the model. -USERD_rigidbody_values Returns the euler and location values for a - given part - -USERD_set_right_side Simply informs the reader when the time set - is for the right side of a time span during - variable interpolation between time steps. - -USERD_get_structured_reader_cinching Tells if the reader will do structured - cinching -USERD_set_block_range_and_stride Sets the min, max, and stride of a block - if doing structured cinching - - -------------------------- -Order Routines are called -------------------------- - -The various main operations are given basically in the order they will -be performed. Within each operation, the order the routines will be -called is given. - -1. Setting name in the gui, and specifying one or two input fields - - USERD_get_name_of_reader - USERD_get_reader_descrip (optional) - USERD_get_extra_gui_numbers (optional) - USERD_get_extra_gui_defaults (optional) - -2. Getting the reader version (also distinguishes between API's) - - USERD_get_reader_version - -3. Setting filenames and getting timeset and time info - - <USERD_set_extra_gui_data> (optional if reader has - USERD_get_extra_gui_defaults routine) - USERD_get_structured_reader_cinching - USERD_set_server_number - USERD_set_extra_gui_data (optional) - USERD_set_filenames - USERD_get_number_of_timesets - USERD_get_geom_timeset_number - - for each timeset: - USERD_get_timeset_description - USERD_get_num_of_time_steps - USERD_get_sol_times - - USERD_set_time_set_and_step - -4. Gathering info for part builder - - USERD_set_time_set_and_step - USERD_get_changing_geometry_status - USERD_get_node_label_status - USERD_get_element_label_status - USERD_get_number_of_files_in_dataset - USERD_get_dataset_query_file_info - USERD_get_descrip_lines (for geometry) - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_maxsize_info - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR (for model extents) - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - -5. Gathering Variable info - - USERD_get_number_of_variables - USERD_get_gold_variable_info - -6. Part building (per part created) - - both unstructured and structured: - -------------------------------- - USERD_set_time_set_and_step - - if unstructured part: - -------------------- - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - - If any nsided elements: - - USERD_get_nsided_conn - - If any nfaced elements: - - USERD_get_nfaced_nodes_per_face - USERD_get_nfaced_conn - - USERD_get_part_coords - USERD_get_part_node_ids - - else if structured part: - ----------------------- - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - both again: - ---------- - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - USERD_stop_part_building (only once when part builder - dialog is closed) - -7. Loading Variables - - constants: - --------- - USERD_set_time_set_and_step - USERD_get_constant_val - - scalars/vectors/tensors: - ------------------------ - USERD_get_descrip_lines - USERD_set_time_set_and_step - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_var_by_component - -8. Changing geometry - - changing coords only (per part): - -------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_part_coords - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - - changing connectivity (per part): - --------------------- - USERD_set_time_set_and_step - USERD_get_descrip_lines - USERD_get_number_of_model_parts - USERD_get_gold_part_build_info - USERD_get_ghosts_in_model_flag - USERD_get_get_ghosts_in_block_flag (if any ghost cells in model) - USERD_get_model_extents OR - USERD_get_part_coords AND/OR - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_part_element_ids_by_type - USERD_get_part_elements_by_type - USERD_get_part_coords - USERD_get_part_node_ids - USERD_get_block_iblanking - <USERD_set_block_range_and_stride> (if doing structured reader cinching - USERD_get_block_coords_by_component - USERD_get_block_ghost_flags (If ghost cells in part) - USERD_get_part_node_ids (If node ids given) - USERD_get_part_element_ids_by_type (If element ids given) - - USERD_get_border_availability (If border representation - USERD_get_border_elements_by_type is selected) - - -9. Node or Element queries over time - - USERD_get_var_value_at_specific - -10. To see if materials in the model - - USERD_get_number_of_material_sets - USERD_get_matf_set_info - - If any material sets in the model (calls these once per material set): - USERD_get_number_of_materials - USERD_get_matf_var_info - - For each elment type of each part containing material ids, calls: - USERD_size_matf_data - USERD_load_matf_data - - If there are any elements with mixed materials, when a domain or - interface is created, calls these again per part: - - USERD_size_matf_data - USERD_load_matf_data - -11. To modify the variable extraction parameters and have the variables - update accordingly. - - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults - USERD_set_var_extract_gui_data - - - ------------------------ -Detailed Specifications ------------------------ - -Include files: --------------- -The following header file is required in any file containing these library -routines. - - #include "global_extern.h" - -And it references: - - #include "global_extern_proto.h" - - - -******************************************************************************* -****************************** Special Note *********************************** -******************************************************************************* - -Make sure you use the proper define in the global_extern.h header file, namely: -#define USERD_API_204 - -Also, Make sure the api version in the USERD_get_reader_version routine is set -to "2.04" or larger. - -Make sure your reader has access to the global_extern_proto.h This is a new -file which is accessed from the new global_extern.h - -******************************************************************************* -******************************************************************************* - - -Basis of arrays: ---------------- -Unless explicitly stated otherwise, all arrays are zero based - in true C -fashion. - - -Global variables: ----------------- -You will generally need to have a few global variables which are shared by -the various library routines. The detailed specifications below have assumed -the following are available. (Their names describe their purpose, and they -will be used in helping describe the details of the routines below). - -static int Numparts_available = 0; -static int Num_unstructured_parts = 0; -static int Num_structured_blocks = 0; - -/* Note: Numparts_available = Num_unstructured_parts + Num_structured_blocks */ - -static int Num_timesets = 1; -static int Current_timeset = 1; -static int Geom_timeset_number = 1; - -static int Num_time_steps[Z_MAXSETS] = 1; -static int Current_time_step = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; - -static int Server_Number = 1; Which server of -static int Tot_Servers = 1; the total number of servers - - - -_________________________________________ ------------------------------------------ -Library Routines (in alphabetical order): -_________________________________________ ------------------------------------------ - --------------------------------------------------------------------- -USERD_bkup - - Description: - ----------- - This routine is called during the EnSight archive process. You can - use it to save or restore info relating to your user defined reader. - - Specification: - ------------- - int USERD_bkup(FILE *archive_file, - int backup_type) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) archive_file = The archive file pointer - - (IN) backup_type = Z_SAVE_ARCHIVE for saving archive - Z_REST_ARCHIVE for restoring archive - - Notes: - ----- - * Since EnSight's archive file is saved in binary form, you should - also do any writing to it or reading from it in binary. - - * You should archive any variables, which will be needed for - future operations, that will not be read or computed again - before they will be needed. These are typically global - variables. - - * Make sure that the number of bytes that you write on a save and - the number of bytes that you read on a restore are identical!! - - * If any of the variables you save are allocated arrays, you must - do the allocations before restoring into them. - --------------------------------------------------------------------- -USERD_exit_routine - - Description: - ----------- - This routine is called as EnSight is exiting. It can be used to clean - up anything needed - such as removing temporary files, etc. - or can simply - be a dummy. - - Specification: - ------------- - void USERD_exit_routine( void ) - - Arguments: - --------- - none - --------------------------------------------------------------------- -USERD_get_block_coords_by_component - - Description: - ----------- - Get the coordinates of a given structured block, a component at a time. - - Specification: - ------------- - int USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) which_component = Z_COMPX if x component wanted - = Z_COMPY if y component wanted - = Z_COMPZ if z component wanted - - (OUT) coord_array = 1D array containing x,y, or z - coordinate component of each node - - (Array will have been allocated - i*j*k for the block long) - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_block_iblanking - - Description: - ----------- - Get the iblanking value at each node of a block (if the block is - iblanked). - - Specification: - ------------- - int USERD_get_block_iblanking(int block_number, - int *iblank_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) iblank_array = 1D array containing iblank value - for each node. - - (Array will have been allocated - i*j*k for the block long) - - possible values are: Z_EXT = exterior - Z_INT = interior - Z_BND = boundary - Z_INTBND = internal boundary - Z_SYM = symmetry plane - - Notes: - ----- - * Not called unless Num_structured_blocks is > 0 and you have - some iblanked blocks - - * Will be based on Current_time_step - - - ----------------------------------------------------------------------- -USERD_get_block_ghost_flags - - Description: - ----------- - Get the ghost_flags value at each element of a block containing ghost cells. - - Specification: - ------------- - int USERD_get_block_ghost_flags(int block_number, - int *ghost_flags) - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) block_number = The block number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) ghost_flags = 1D array containing ghost flag value - for each block cell. - - (Array will have been allocated - (i-1)*(j-1)*(k-1) for the block long) - - possible values are: 0 = non-ghost cell (normal cell) - >0 = ghost cell - - Notes: - ----- - * This routine is new in the 2.01 API - - * This will be based on Current_time_step - - * Only called for structured "block" parts that have some ghost cells - as indicated by the USERD_get_ghost_in_block_flag. The model must - of course also have been indicated to have some ghost cells in the - USERD_get_ghost_in_model_flag routine. - - * It is sufficient to set the value to be 1 to flag as a ghost cell, - but the value can be any non-zero value, so you could use it to - indicate which block or which server (for Server-of-server use) the - cell is actually in. - - - --------------------------------------------------------------------- -USERD_get_border_availability - - Description: - ----------- - Finds out if border elements are provided by the reader for the - desired part, or will need to be computed internally by EnSight. - - Specification: - ------------- - int USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]) - - Returns: - ------- - Z_OK if border elements will be provided by the reader. - (number_of_elements array will be loaded and - USERD_get_border_elements_by_type will be called) - - Z_ERR if border elements are not available - thus EnSight must compute. - (USERD_get_border_elements_by_type will not be called) - - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) number_of_elements = 2D array containing number of - each type of border element in - the part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - - Notes: - ----- - * Only called if border representation is used. - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_border_elements_by_type - - Description: - ----------- - Provides border element connectivity and parent information. - - Specification: - ------------- - int USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - - (OUT) conn_array = 2D array containing connectivity - of each border element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_QUA08] = 30 - as obtained in: - USERD_get_border_availability - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_QUA08 - - (OUT) parent_element_type = 1D array containing element type of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - (OUT) parent_element_num = 1D array containing element number of the - parent element (the one that the border - element is a face/edge of). - - (Array will have been allocated - num_of_elements of the type long) - - - Notes: - ----- - * Not called unless USERD_get_border_availability returned Z_OK - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_changing_geometry_status - - Description: - ----------- - Gets the changing geometry status for the model - - Specification: - ------------- - int USERD_get_changing_geometry_status( void ) - - Returns: - ------- - Z_STATIC if geometry does not change - Z_CHANGE_COORDS if changing coordinates only - Z_CHANGE_CONN if changing connectivity - - Arguments: - --------- - none - - Notes: - ----- - * EnSight does not support changing number of parts. But the - coords and/or the connectivity of the parts can change. Note that - a part is allowed to be empty (number of nodes and elements equal - to zero). - - --------------------------------------------------------------------- -USERD_get_constant_val - - Description: - ----------- - Get the value of a constant at a time step - - Specification: - ------------- - float USERD_get_constant_value(int which_var, - int imag_data) - - Returns: - ------- - Value of the requested constant variable - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) imag_data = TRUE if want imaginary data value. - FALSE if want real data value. - - Notes: - ----- - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_dataset_query_file_info - - Description: - ----------- - Get the information about files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) qfiles = Structure containing information about each file - of the dataset. The Z_QFILES structure is defined - in the global_extern.h file - - (The structure will have been allocated - Num_dataset_files long, with 10 description - lines per file). - - qfiles[].name = The name of the file - (Z_MAXFILENP is the dimensioned length - of the name) - - qfiles[].sizeb = The number of bytes in the file - (Typically obtained with a call to the - "stat" system routine) (Is a long) - - qfiles[].timemod = The time the file was last modified - (Z_MAXTIMLEN is the dimensioned length - of this string) - (Typically obtained with a call to the - "stat" system routine) - - qfiles[].num_d_lines = The number of description lines you - are providing from the file. Max = 10 - - qfiles[].f_desc[] = The description line(s) per file, - qfiles[].num_d_lines of them - (Z_MAXFILENP is the allocated length of - each line) - - Notes: - ----- - * If Num_dataset_files is 0, this routine will not be called. - (See USERD_get_number_of_files_in_dataset) - - --------------------------------------------------------------------- -USERD_get_descrip_lines - - Description: - ----------- - Get two description lines associated with geometry per time step, - or one description line associated with a variable per time step. - - Specification: - ------------- - int USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_type = Z_GEOM for geometry (2 lines) - = Z_VARI for variable (1 line) - - (IN) which_var = If it is a variable, which one. - Ignored if geometry type. - - (IN) imag_data = TRUE if want imaginary data file. - FALSE if want real data file. - - (OUT) line1 = The 1st geometry description line, - or the variable description line. - - (OUT) line2 = The 2nd geometry description line - Not used if variable type. - - Notes: - ----- - * Will be based on Current_time_step - - * These are the lines EnSight can echo to the screen in - annotation mode. - - - --------------------------------------------------------------------- -USERD_get_element_label_status - - Description: - ----------- - Answers the question as to whether element labels will be provided. - - Specification: - ------------- - int USERD_get_element_label_status( void ) - - Returns: - ------- - TRUE if element labels will be provided - FALSE if element labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * element lables are needed in order to do any element querying, or - element labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. - - API 1.0: - USERD_get_element_ids_for_part is used to obtain the ids, - on a part by part basis, if TRUE status is returned here. - - API 2.0: - USERD_get_part_element_ids_by_type is used to obtain the ids, - on a per part, per type basis, if TRUE status is returned here. - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them youself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model (especially - if you are dealing with a decomposed dataset). - - USERD_get_part_element_ids_by_type is used to obtain the ids, - on an element type by part basis, if TRUE status is returned here. - - * Will call USERD_get_part_element_ids_by_type for each type of - of each part if this routine returns TRUE. --------------------------------------------------------------------- -USERD_get_geom_timeset_number - - - Description: - ----------- - Gets the timeset number to be used for geometry - - Specification: - ------------- - int USERD_get_geom_timeset_number( void ) - - Returns: - ------- - Geom_timeset_number = The timeset number that will be used for geometry. - For example, if USERD_get_number_of timesets - returns 2, the valid timeset numbers would be - 1 or 2. - - Arguments: - --------- - none - - Notes: - ----- - * If your model is static, which you indicated by returning a zero - in USERD_get_number_of_timesets, you can return a zero here as well. - - - --------------------------------------------------------------------- -USERD_get_gold_part_build_info - - Description: - ----------- - Gets the info needed for the part building process. - - Specification: - ------------- - int USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_description[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) part_id = Array containing the external part - ids for each of the model parts. - - IMPORTANT: - Parts numbers must be >= 1, because - of the way they are used in the GUI - - ******************************************* - The ids provided here are the numbers by - which the parts will be referred to in the - GUI (if possible). They are basically - labels as far as you are concerned. - - Note: The part numbers you pass to routines - which receive a part_number or block_number - or which_part as an argument are the 1-based - table index of the parts! - - example: If Numparts_available = 3 - - Table index part_id - ----------- ------- - 1 13 - 2 57 - 3 125 - - ^ ^ - | | - | These are placed in: - | part_id[0] = 13 - | part_id[1] = 57 - | part_id[2] = 125 - | for GUI labeling purposes. - | - These implied table indices are the part_number, - block_number, or which_part numbers that you would - pass to routines like: - - USERD_get_part_coords(int part_number,... - USERD_get_part_node_ids(int part_number,... - USERD_get_part_elements_by_type(int part_number,... - USERD_get_part_element_ids_by_type(int part_number,... - USERD_get_block_coords_by_component(int block_number,... - USERD_get_block_iblanking(int block_number,... - USERD_get_block_ghost_flags(int block_number,... - USERD_get_ghosts_in_block_flag(int block_number) - USERD_get_border_availability(int part_number,... - USERD_get_border_elements_by_type(int part_number,... - USERD_get_var_by_component(int which_variable, - int which_part,... - USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part,... - ******************************************** - - (Array will have been allocated - Numparts_available long) - - (OUT) part_types = Array containing one of the - following for each model part: - - Z_UNSTRUCTURED or - Z_STRUCTURED or - Z_IBLANKED - - (Array will have been allocated - Numparts_available long) - - (OUT) part_description = Array containing a description - for each of the model parts - - (Array will have been allocated - Numparts_available by Z_BUFL - long) - - (OUT) number_of_nodes = Number of unstructured nodes in the part - - (Array will have been allocated - Numparts_available long) - - (OUT) number_of_elements = 2D array containing number of - each type of element for each - unstructured model part. - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) ijk_dimensions = 2D array containing ijk dimension info - for structured blocks - - For Z_UNSTRUCTURED - is ignored - - For Z_STRUCTURED or Z_IBLANKED - - Prior to version 2.03: - ---------------------- - (Array will have been allocated - Numparts_available by 3 long) - - ijk_dimensions[][0] = I dimension - ijk_dimensions[][1] = J dimension - ijk_dimensions[][2] = K dimension - - - Starting at version 2.03: - ------------------------ - (Array will have been allocated - Numparts_available by 9 long) - - There are two ways to do this: - ------------------------------ - 1. The simple one, without ranges. - - This is good for all structured models - that will NOT be used in EnSight's - Server of Servers - - Simply provide the ijk dimensions in the - first three slots and place a -1 in - the 4th slot. (The remaining slots will - be ignored). - - Thus, - ijk_dimensions[][0] = I dimension of block - ijk_dimensions[][1] = J dimension of block - ijk_dimensions[][2] = K dimension of block - ijk_dimensions[][3] = -1 - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][4] = -1 - | | | - | | | - 2 *-------*-------* - | | | - | | | - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - - 2. Using ranges. - - This one can be used anytime, but MUST - be used if EnSight's Server of Servers - is to be used! - - The first 3 slots contain the ijk dimension - of the complete block (of which this may be - a portion). The last 6 slots contain the - ijk min and max ranges within the complete. - - Thus, - ijk_dimensions[][0] = I dim of complete block - ijk_dimensions[][1] = J dim of complete block - ijk_dimensions[][2] = K dim of complete block - - ijk_dimensions[][3] = Imin of portion (1-based) - ijk_dimensions[][4] = Imax of portion (1-based) - ijk_dimensions[][5] = Jmin of portion (1-based) - ijk_dimensions[][6] = Jmax of portion (1-based) - ijk_dimensions[][7] = Kmin of portion (1-based) - ijk_dimensions[][8] = Kmax of portion (1-based) - - - example1: (Model has one part, a simple 2D block, - and want whole thing) - - (J planes) - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[0][3] = 1 - | | | ijk_dimension[0][4] = 3 - | | | ijk_dimension[0][5] = 1 - 2 *-------*-------* ijk_dimension[0][6] = 4 - | | | ijk_dimension[0][7] = 1 - | | | ijk_dimension[0][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - example2: (Want to have the block represented - in two portions - 2 parts) - - (J planes) top portion - 4 *-------*-------* - | | | ijk_dimension[0][0] = 3 - | | | ijk_dimension[0][1] = 4 - | | | ijk_dimension[0][2] = 1 - 3 *-------*-------* - . . . ijk_dimension[0][3] = 1 - . . . ijk_dimension[0][4] = 3 - . . . ijk_dimension[0][5] = 3 - 2 ................. ijk_dimension[0][6] = 4 - . . . ijk_dimension[0][7] = 1 - . . . ijk_dimension[0][8] = 1 - . . . - 1 ................. - 1 2 3 (I planes) - - - (J planes) bottom portion - 4 ................. - . . . ijk_dimension[1][0] = 3 - . . . ijk_dimension[2][1] = 4 - . . . ijk_dimension[3][2] = 1 - 3 *-------*-------* - | | | ijk_dimension[1][3] = 1 - | | | ijk_dimension[1][4] = 3 - | | | ijk_dimension[1][5] = 1 - 2 *-------*-------* ijk_dimension[1][6] = 3 - | | | ijk_dimension[1][7] = 1 - | | | ijk_dimension[1][8] = 1 - | | | - 1 *-------*-------* - 1 2 3 (I planes) - - - And note that if you were partioning this block for - EnSight's Server of Servers, you would only have one part, - instead of two. Each SOS server would return its appropriate - ranges in the last 6 slots. The first 3 slots would remain constant. - - - (OUT) iblanking_options = 2D array containing iblanking - options possible for each - structured model part. - ---------- - (Ignored unless Z_IBLANKED type) - - (Array will have been allocated - Numparts_available by 6 long) - - iblanking_options[][Z_EXT] = TRUE if external (outside) - [][Z_INT] = TRUE if internal (inside) - [][Z_BND] = TRUE if boundary - [][Z_INTBND] = TRUE if internal boundary - [][Z_SYM] = TRUE if symmetry surface - - - Notes: - ----- - * If you haven't built a table of pointers to the different parts, - you might want to do so here as you gather the needed info. - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_gold_variable_info - - Description: - ----------- - Get the variable descriptions, types and filenames - - Specification: - ------------- - int USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) var_description = Variable descriptions - - (Array will have been allocated - Num_variables by Z_BUFL long) - - variable description restrictions: - ---------------------------------- - 1. Only first 19 characters used in EnSight. - 2. Leading and trailing whitespace will be removed by EnSight. - 3. Illegal characters will be replaced by underscores. - 4. Thay may not start with a numeric digit. - 4. No two variables may have the same description. - - - (OUT) var_filename = Variable real filenames - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_type = Variable type - - (Array will have been allocated - Num_variables long) - - types are: Z_CONSTANT - Z_SCALAR - Z_VECTOR - Z_TENSOR - Z_TENSOR9 - - (OUT) var_classify = Variable classification - - (Array will have been allocated - Num_variables long) - - types are: Z_PER_NODE - Z_PER_ELEM - - (OUT) var_complex = TRUE if complex, FALSE otherwise - - (Array will have been allocated - Num_variables long) - - (OUT) var_ifilename = Variable imaginary filenames (if complex) - - (Array will have been allocated - Num_variables by Z_BUFL long) - - (OUT) var_freq = complex frequency (if complex) - - (Array will have been allocated - Num_variables long) - - (OUT) var_contran = TRUE if constant changes per time step - FALSE if constant truly same at all time steps - - (Array will have been allocated - Num_variables long) - - (OUT) var_timeset = Timeset the variable will use (1 based). - (For static models, set it to 1) - - (Array will have been allocated - Num_variables long) - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 or 2 - - - Notes: - ----- - * The implied variable numbers apply, but be aware that the - arrays are zero based. - So for variable 1, will need to provide var_description[0] - var_filename[0] - var_type[0] - var_classify[0] - var_complex[0] - var_ifilename[0] - var_freq[0] - var_contran[0] - var_timeset[0] - - - for variable 2, will need to provide var_description[1] - var_filename[1] - var_type[1] - var_classify[1] - var_complex[1] - var_ifilename[1] - var_freq[1] - var_contran[1] - var_timeset[1] - etc. - - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_block_flag - - Description: - ----------- - Gets whether ghost cells present in block or not - - Specification: - ------------- - int USERD_get_ghosts_in_block_flag(int block_number) - - Returns: - ------- - TRUE if any ghost cells in this structured part - FALSE if no ghost cells in this structured part - - Arguments: - --------- - (IN) block_number = The block part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Notes: - ----- - * This routine is new in the 2.01 API - * This will be based on Current_time_step - - * Intended for structured parts only, value will be ignored for - unstructured parts - - - --------------------------------------------------------------------- -USERD_get_ghosts_in_model_flag - - Description: - ----------- - Answers the question as to whether any ghost cells in the model. - - Specification: - ------------- - int USERD_get_ghosts_in_model_flag( void ) - - Returns: - ------- - TRUE if any ghost cells in the model - FALSE if no ghost cells in the model - - Arguments: - --------- - - Notes: - ----- - * This routine is new in the 2.01 API - -------------------------------------------------------------------------- -USERD_get_matf_set_info - - Description: - ----------- - Get the material set ids and names - - Specification: - ------------- - int USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) mat_set_ids = 1D material set ids array - - (Array will have been allocated - Num_material_sets long) - - (OUT) mat_set_name = 2D material set name array - - (Array will have been allocated - Num_material_sets by Z_BUFL long) - - Notes: - ----- - * Will not be called if Num_material_sets is zero - * See USERD_get_number_of_material_sets header for explanatory example - - --------------------------------------------------------------------- -USERD_get_matf_var_info - - Description: - ----------- - Gets the material ids and descriptions for the material set - - Specification: - ------------- - int USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (OUT) mat_ids[set_index] = 1D integer array containing the material - ids to associated with each material - - (Array will have been allocated - Num_materials[set_index] long) - - (OUT) mat_desc[set_index] = 2D char array containing the material - descriptions to associated with each material - - (Array will have been allocated - Num_materials[set_index] by Z_BUFL long) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_get_maxsize_info - - Description: - ----------- - Gets maximum part sizes for efficient memory allocation. - - Transient models (especially those that increase in size) can cause - reallocations, at time step changes, to keep chewing up more and - more memory. The way to avoid this is to know what the maximum - size of such memory will be, and allocate for this maximum initially. - - Accordingly, if you choose to provide this information (it is optional), - EnSight will take advantage of it. - - - Specification: - ------------- - int USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]) - - Returns: - ------- - Z_OK if supplying maximum data - Z_ERR if not supplying maximum data, or some error occurred - while trying to obtain it. - - Arguments: - --------- - (OUT) max_number_of_nodes = Maximum number of unstructured nodes - in the part (over all time). - - (Array will have been allocated - Numparts_available long) - - (OUT) max_number_of_elements = 2D array containing maximum number of - each type of element for each - unstructured model part (over all time). - ------------ - Possible types are: - - Z_POINT = point - Z_BAR02 = 2-noded bar - Z_BAR03 = 3-noded bar - Z_TRI03 = 3-noded triangle - Z_TRI06 = 6-noded triangle - Z_QUA04 = 4-noded quadrilateral - Z_QUA08 = 8-noded quadrilateral - Z_TET04 = 4-noded tetrahedron - Z_TET10 = 10-noded tetrahedron - Z_PYR05 = 5-noded pyramid - Z_PYR13 = 13-noded pyramid - Z_PEN06 = 6-noded pentahedron - Z_PEN15 = 15-noded pentahedron - Z_HEX08 = 8-noded hexahedron - Z_HEX20 = 20-noded hexahedron - - Z_G_POINT = ghost node point element - Z_G_BAR02 = 2 node ghost bar - Z_G_BAR03 = 3 node ghost bar - Z_G_TRI03 = 3 node ghost triangle - Z_G_TRI06 = 6 node ghost triangle - Z_G_QUA04 = 4 node ghost quad - Z_G_QUA08 = 8 node ghost quad - Z_G_TET04 = 4 node ghost tetrahedron - Z_G_TET10 = 10 node ghost tetrahedron - Z_G_PYR05 = 5 node ghost pyramid - Z_G_PYR13 = 13 node ghost pyramid - Z_G_PEN06 = 6 node ghost pentahedron - Z_G_PEN15 = 15 node ghost pentahedron - Z_G_HEX08 = 8 node ghost hexahedron - Z_G_HEX20 = 20 node ghost hexahedron - - (Ignored unless Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by - Z_MAXTYPE long) - - (OUT) max_ijk_dimensions = 2D array containing maximum ijk dimensions - for each structured model part (over all time). - ---------- - (Ignored if Z_UNSTRUCTURED type) - - (Array will have been allocated - Numparts_available by 3 long) - - max_ijk_dimensions[][0] = maximum I dimension - max_ijk_dimensions[][1] = maximum J dimension - max_ijk_dimensions[][2] = maximum K dimension - - Notes: - ----- - * You need to have first called USERD_get_number_of_model_parts and - USERD_get_gold_part_build_info, so Numparts_available is known and - so EnSight will know what the type is (Z_UNSTRUCTURED, Z_STRUCTURED, - or Z_IBLANKED) of each part. - - * This will NOT be based on Current_time_step - it is to be the maximum - values over all time!! - - * This information is optional. If you return Z_ERR, Ensight will still - process things fine, reallocating as needed, etc. However, for - large transient models you will likely use considerably more memory - and take more processing time for the memory reallocations. So, if it - is possible to provide this information "up front", it is recommended - to do so. - - --------------------------------------------------------------------- -USERD_get_model_extents - - Description: - ----------- - Gets the model bounding box extents. If this routine supplys them - EnSight will not have to spend time doing so. If this routine - returns Z_ERR, EnSight will have to take the time to touch all the - nodes and gather the extent info. - - Specification: - ------------- - int USERD_get_model_extents(float extents[6]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (whereupon EnSight will determine by reading - all coords of all parts) - - Arguments: - --------- - (OUT) extents[0] = min x - [1] = max x - [2] = min y - [3] = max y - [4] = min z - [5] = max z - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_name_of_reader - - Description: - ----------- - Gets the name of your user defined reader. The user interface will - ask for this and include it in the available reader list. - - Specification: - ------------- - int USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) reader_name = the name of the your reader or data format. - (max length is Z_MAX_USERD_NAME, which is 20) - - (OUT) two_fields = FALSE if only one data field is - required. - TRUE if two data fields required - - -1 if one field (Geom) required - and one field (Param) is optional - Param field can contain any text - for example a file name, modifiers, - etc. that can be used to modify the - reader's behavior. - - - Notes: - ----- - * Always called. Please be sure to provide a name for your custom - reader format. - --------------------------------------------------------------------- -USERD_get_nfaced_conn - - Description: - ----------- - Gets the array containing the connectivity of nsided faces of nfaced elements - - Specification: - -------------int - int USERD_get_nfaced_conn(int part_number, - int *nfaced_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_conn_array = 1D array of nsided face connectivies of nfaced - elements - - (int array will have been allocated long enough to - hold all the nsided face connectivities. Which is - the sum of all the nodes per face values in the - nfaced_npf_array of USERD_get_nfaced_nodes_per_face) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In USERD_get_faced_nodes_per_face: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In this function: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - --------------------------------------------------------------------- -USERD_get_nfaced_nodes_per_face - - - Description: - ----------- - Gets the array containing the number of nodes per face for each face - of the nfaced elements. - - Specification: - ------------- - int USERD_get_nfaced_nodes_per_face(int part_number, - int *nfaced_npf_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nfaced_npf_array = 1D array of nodes per face for all faces of - nfaced elements - - (int array will have been allocated long enough - to hold all the nodes_per_face values. Which is - the sum of all the number of faces per element - values in the conn_array of - USERD_get_part_elements_by_type) - - Notes: - ----- - * Will not be called unless there are some nfaced elements in the - the part - - * Providing nfaced information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nfaced - polyhedral elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of faces per nfaced element. (as if connectivity - length of an nfaced element is one) - - 3. In this routine, provide the streamed number of nodes per face - for each of the faces of the nfaced elements. - - - Simple example: 11 10 12 - +--------+-----+ - 2 nfaced elements: /| |\ /| - (1 7-faced / | | \ / | - 1 5-sided) / | | +9 | - / | | /| | - /7 | 8 / | | - +-----------+/ | | | - | |5 | |4 | |6 - | +-----|--+--|--+ - | / | \ | / - | / | \|/3 - | / | + - | / | / - |/1 |2 / - +-----------+/ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NFACED] = 2 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 2 x 1 - for element_type of Z_NFACED: - conn_array[0][0] = 7 (for the 7-faced element) - conn_array[1][0] = 5 (for the 5-faced element) - - == - Sum 12 <---------+ - | - 3. In this routine: | - length of nfaced_npf_array will be: 12 - - nfaced_npf_array[0] = 5 (5-noded top face of 7-faced element) - nfaced_npf_array[1] = 5 (5-noded bot face of 7-faced element) - nfaced_npf_array[2] = 4 (4-noded front face of 7-faced element) - nfaced_npf_array[3] = 4 (4-noded left face of 7-faced element) - nfaced_npf_array[4] = 4 (4-noded back face of 7-faced element) - nfaced_npf_array[5] = 4 (4-noded right front face of 7-faced element) - nfaced_npf_array[6] = 4 (4-noded right back face of 7-faced element) - - nfaced_npf_array[7] = 3 (3-noded top face of 5-faced element) - nfaced_npf_array[8] = 3 (3-noded bot face of 5-faced element) - nfaced_npf_array[9] = 4 (4-noded back face of 5-faced element) - nfaced_npf_array[10] = 4 (4-noded right face of 5-faced element) - nfaced_npf_array[11] = 4 (4-noded left front face of 5-faced element) - - == - Sum 48 <-------------+ - | - 4. In USERD_get_nfaced_conn: | - length of the nfaced_conn_array will be: 48 - - nsided_conn_array[0] = 7 (conn of 5-noded top face of 7-faced elem) - nsided_conn_array[1] = 8 - nsided_conn_array[2] = 9 - nsided_conn_array[3] = 10 - nsided_conn_array[4] = 11 - - nsided_conn_array[5] = 1 (conn of 5-noded bot face of 7-faced elem) - nsided_conn_array[6] = 5 - nsided_conn_array[7] = 4 - nsided_conn_array[8] = 3 - nsided_conn_array[9] = 2 - - nsided_conn_array[10] = 1 (conn of 4-noded front face of 7-faced elem) - nsided_conn_array[11] = 2 - nsided_conn_array[12] = 8 - nsided_conn_array[13] = 7 - - nsided_conn_array[14] = 5 (conn of 4-noded left face of 7-faced elem) - nsided_conn_array[15] = 1 - nsided_conn_array[16] = 7 - nsided_conn_array[17] = 11 - - nsided_conn_array[18] = 4 (conn of 4-noded back face of 7-faced elem) - nsided_conn_array[19] = 5 - nsided_conn_array[20] = 11 - nsided_conn_array[21] = 10 - - nsided_conn_array[22] = 2 (conn of 4-noded right front face of 7-faced) - nsided_conn_array[23] = 3 - nsided_conn_array[24] = 9 - nsided_conn_array[25] = 8 - - nsided_conn_array[26] = 3 (conn of 4-noded right back face of 7-faced) - nsided_conn_array[27] = 4 - nsided_conn_array[28] = 10 - nsided_conn_array[29] = 9 - - nsided_conn_array[30] = 9 (conn of 3-noded top face of 5-faced elem) - nsided_conn_array[32] = 12 - nsided_conn_array[32] = 10 - - nsided_conn_array[33] = 3 (conn of 3-noded bot face of 5-faced elem) - nsided_conn_array[34] = 4 - nsided_conn_array[35] = 6 - - nsided_conn_array[36] = 6 (conn of 4-noded back face of 5-faced elem) - nsided_conn_array[37] = 4 - nsided_conn_array[38] = 10 - nsided_conn_array[39] = 12 - - nsided_conn_array[40] = 3 (conn of 4-noded right face of 5-faced elem) - nsided_conn_array[41] = 6 - nsided_conn_array[42] = 12 - nsided_conn_array[43] = 9 - - nsided_conn_array[44] = 4 (conn of 4-noded left front face of 5-faced) - nsided_conn_array[45] = 3 - nsided_conn_array[46] = 9 - nsided_conn_array[47] = 10 - - - - --------------------------------------------------------------------- -USERD_get_node_label_status - - Description: - ----------- - Answers the question as to whether node labels will be provided. - - Specification: - ------------- - int USERD_get_node_label_status( void ) - - Returns: - ------- - TRUE if node labels will be provided - FALSE if node labels will NOT be provided - - Arguments: - --------- - none - - Notes: - ----- - * Node ids are needed in order to do any node querying, or node - labeling on-screen within EnSight. - - * Prior to API 2.01: - ----------------- - For unstructured parts, you can read them from your file if - available, or can assign them, etc. They need to be unique - per part, and are often unique per model. They must also be - positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - (Unlike API 1.0, where the connectivity of elements had to be - according to the node ids - API 2.0's element connectivities - are not affected either way by the status here.) - - For structured parts, EnSight will assign ids if you return a - status of TRUE here. You cannot assign them yourself!! - - * Starting at API 2.01: - -------------------- - For both unstructured and structured parts, you can read them - from your file if available, or can assign them, etc. They need - to be unique per part, and are often unique per model. They must - also be positive numbers greater than zero. - - USERD_get_part_node_ids is used to obtain the ids, if the - status returned here is TRUE. - - * Will call USERD_get_part_node_ids for each part if this routine - returns TRUE. - --------------------------------------------------------------------- -USERD_get_nsided_conn - - - Description: - ----------- - Gets the array containing the connectivity of nsided elements - - Specification: - ------------- - int USERD_get_nsided_conn(int part_number, - int *nsided_conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = the part number - - (OUT) nsided_conn_array = 1D array of nsided connectivies - - (int array will have been allocated long enough - to hold all the nsided connectivities. Which is - the sum of all the nodes_per_element values in - the conn_array of USERD_get_part_elements_by_type) - - - Notes: - ----- - * Will not be called unless there are some nsided elements in the the part. - - * Providing nsided information to Ensight: - - 1. In USERD_get_gold_part_build_info, provide the number of nsided - elements in the part. - - 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - the number of nodes per nsided element. (as if connectivity - length of an nsided element is one) - - 3. In this routine, provide the streamed connectivities for each of the - nsided elements. - - - Simple example: 5 6 - +--------+ - 3 nsided elements: /| \ - (1 4-sided / | \ - 1 3-sided / | \ - 1 7-sided) / | \ 7 - /3 |4 + - +-----+ | - | | | - | | |8 - | | + - | | / - | | / - | | / - |1 |2 /9 - +-----+--------+ - - 1. In USERD_get_gold_part_build_info: - number_of_elements[Z_NSIDED] = 3 - . - /|\ - | - 2. In USERD_get_part_elements_by_type: - length of conn_array will be: 3 x 1 - - for element_type of Z_NSIDED: - conn_array[0][0] = 4 (for the 4-sided element) - conn_array[1][0] = 3 (for the 3-sided element) - conn_array[2][0] = 7 (for the 7-sided element) - - Sum === - 14 <---------+ - | - 3. In this routine: | - length of nsided_conn_array will be: 14 - - nsided_conn_array[0] = 1 (connectivity of 4-sided element) - nsided_conn_array[1] = 2 - nsided_conn_array[2] = 4 - nsided_conn_array[3] = 3 - - nsided_conn_array[4] = 3 (connectivity of 3-sided element) - nsided_conn_array[5] = 4 - nsided_conn_array[6] = 5 - - nsided_conn_array[7] = 2 (connectivity of 7-sided element) - nsided_conn_array[8] = 9 - nsided_conn_array[9] = 8 - nsided_conn_array[10] = 7 - nsided_conn_array[11] = 6 - nsided_conn_array[12] = 5 - nsided_conn_array[13] = 4 - - - - --------------------------------------------------------------------- -USERD_get_num_of_time_steps - - Description: - ----------- - Gets the number of time steps of data available for desired timeset. - - Specification: - ------------- - int USERD_get_num_of_time_steps( int timeset_number ) - - Returns: - ------- - Number of time steps in timeset (>0 if okay, <=0 if problems). - - Arguments: - --------- - (IN) timeset number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - Notes: - ----- - * This should be >= 1 1 indicates a static model - >1 indicates a transient model - - * Num_time_steps[timeset_number] would be set here - - - --------------------------------------------------------------------- -USERD_get_number_of_files_in_dataset - - Description: - ----------- - Get the total number of files in the dataset. Used for the - dataset query option within EnSight. - - Specification: - ------------- - int USERD_get_number_of_files_in_dataset( void ) - - Returns: - ------- - The total number of files in the dataset. - - Arguments: - --------- - none - - Notes: - ----- - * You can be as complete as you want about this. If you don't - care about the dataset query option, return a value of 0 - If you only want certain files, you can just include them. But, - you will need to supply the info in USERD_get_dataset_query_file_info - for each file you include here. - - * Num_dataset_files would be set here - - --------------------------------------------------------------------- -USERD_get_number_of_material_sets - - - Description: - ----------- - Get the number of material sets in the model - - Specification: - ------------- - int USERD_get_number_of_material_sets( void ) - - - Returns: - ------- - Num_material_sets = number of material sets - (Zero would indicate that you have no materials - to deal with in the model) - - or - - -1 if an error condition - - Arguments: - --------- - none - - Notes: - ----- - * You may want to keep this as a global for use in other routines. - - ############################################################### - NOTE: For EnSight 7.6, only one material set is supported - within EnSight. - Thus the only valid returns here are: - 0 (no materials) - 1 (for the one material set allowed) - or -1 (if an error) - - If the casefile has more than this, this reader will - read them, but EnSight will issue an error message and - choke on them! - ############################################################### - - ================================================================ - A very simple explanatory example, to use as a reference for the - materials routines: - - Given a 2D mesh composed of 9 quad (Z_QUA04) elements, with two materials. - Most of the model is material 1, but the top left corner is material 9 - - basically as shown: - - - *--------*--------*--------* - | | / | | - | Mat 9 / | | - | | / | | - | |/ | | - | e7 / e8 | e9 | - | /| | | - | / | | | - | / | | | - *----/---*--------*--------* - | / | | | - | / | | | - | / | Mat 1 | - |/ | | | - | e4 | e5 | e6 | - | | | | - | | | | - | | | | - *--------*--------*--------* - | | | | - | | | | - | | | | - | | | | - | e1 | e2 | e3 | - | | | | - | | | | - | | | | - *--------*--------*--------* - - - Thus, in this routine, set: - Num_material_sets = 1 - - In USERD_get_matf_set_info, set: - mat_set_ids[0] = 1 - mat_set_name[0] = "Material Set 1" (or whatever name desired) - - In USERD_get_number_of_materials, input would be set_index = 0, and - would need to set: - Num_materials[0] = 2 - - For simplicity, the ids and descriptions that would be returned in - USERD_get_matf_var_info could be: - mat_ids[0] = 1 - mat_ids[1] = 9 - mat_desc[0] = "mat 1" (or whatever desired) - mat_desc[2] = "mat 9" - - The per element material ids list would need to be: - - material ids: - ------------- - ids_list[0] = 1 (material id 1, for elem e1) - ids_list[1] = 1 ( " e2) - ids_list[2] = 1 ( " e3) - ids_list[3] = -1 (negative of index into mixed-material id list, for elem e4) - ids_list[5] = 1 (material id 1, for elem e5) - ids_list[5] = 1 ( " e6) - ids_list[5] = -5 (negative of index into mixed-material id list, for elem e7) - ids_list[5] = -9 ( " e8) - ids_list[5] = 1 (material id 1, for elem e9) - - Finally we need the mixed material ids list and the mixed materials values list, - which would need to be: - - mixed-material ids: - ------------------- - ==> 1 ids_list[0] = 2 (the -1 in the material variable points here, - 2 indicates that two materials are present) - 2 ids_list[1] = 1 (1st material is 1) - 3 ids_list[2] = 9 (2nd material is 9) - 4 ids_list[3] = -1 (negative of index into mixed-material val_list) - ==> 5 ids_list[4] = 2 (the -5 in the material variable points here, - 2 indicates that two materials are present) - 6 ids_list[5] = 1 (1st material is 1) - 7 ids_list[6] = 9 (2nd material is 9) - 8 ids_list[7] = -3 (negative of index into mixed-material val_list) - ==> 9 ids_list[8] = 2 etc. - 10 ids_list[9] = 1 - 11 ids_list[10] = 9 - 12 ids_list[11] = -5 - - mixed-material values: - ---------------------- - ==> 1 val_list[0] = 0.875 (the -1 in the mixed-material ids_list points here, - and this is the value for material 1) - 2 val_list[1] = 0.125 (the value for material 9) - ==> 3 val_list[2] = 0.125 (the -3 in the mixed-materials ids_list points here) - 4 val_list[3] = 0.875 - ==> 5 val_list[4] = 0.875 (the -5 in the mixed-materials ids_list points here) - 6 val_list[5] = 0.125 - - So, USERD_size_matf_data would need to return - matf_size = 8, when called with set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX - - matf_size = 12, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX - - = 6, when called with set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE - - And, USERD_load_matf_data would need to return: - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - wtyp = Z_QUA04 - mat_type = Z_MAT_INDEX (indicating id list). - - the int array ids_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_INDEX (indicating id list). - - the float array val_list as shown above when called with: - set_id = 1 - part_id = 1 - mat_type = Z_MIX_VALUE (indicating val list). - - -------------------------------------------------------------------------- -USERD_get_number_of_materials - - Description: - ----------- - Gets the number of materials in the material set - - Specification: - ------------- - int USERD_get_number_of_materials( int set_index ) - - Returns: - ------- - Num_materials[set_index] = Number of materials in the set - 0 indicates no materials information present - -1 indicates an error - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero - * You may want to keep this as a global for use in other routines. - - - --------------------------------------------------------------------- -USERD_get_number_of_model_parts - - Description: - ----------- - Gets the total number of unstructured and structured parts - in the model, for which you can supply information. - - Specification: - ------------- - int USERD_get_number_of_model_parts( void ) - - Returns: - ------- - Number of parts (>0 if okay, <=0 if problems). - - Arguments: - --------- - none - - Notes: - ----- - * If going to have to read down through the parts in order to - know how many, you may want to build a table of pointers to - the various parts, so you can easily get to particular parts in - later processes. If you can simply read the number of parts - at the head of the file, then you would probably not build the - table at this time. - - * This routine would set Numparts_available, which is equal to - Num_unstructured_parts + Num_structured_blocks. - - - --------------------------------------------------------------------- -USERD_get_number_of_timesets - - Description: - ----------- - Gets the number of timesets used in the model. - - Specification: - ------------- - int USERD_get_number_of_timesets( void ) - - Returns: - ------- - Number of timesets in the model - - Arguments: - --------- - none - - Notes: - ----- - * Num_timesets would be set here - - * If you have a static model, both geometry and variables, you should - return a value of zero. - - * If you have a transient model, then you should return one or more. - - For example: - - Geometry Variables No. of timesets - --------- ------------------------------ --------------- - static static 0 - static transient, all using same timeset 1 - - transient transient, all using same timeset as geom 1 - - static transient, using 3 different timesets 3 - - transient transient, using 3 different timesets and - none of them the same as the - geometry timeset 4 - etc. - - NOTE: ALL GEOMETRY MUST USE THE SAME TIMESET!!! You will have to provide - the timeset number to use - for geometry in: - USERD_get_geom_timeset_number - - Variables can use the same timeset as the geometry, or can use - other timesets. More than one variable can use the same timeset. - - example: changing geometry at 5 steps, 0.0, 1.0, 2.0, 3.0, 4.0 - variable 1 provided at these same five steps - variable 2 provided at 3 steps, 0.5, 1.25, 3.33 - - This routine should return a value of 2, because only - two different timesets are needed. Timeset 1 would be for the - geometry and variable 1 (they both use it). Timeset 2 would - be for variable 2, which needs its own in this case. - - - - - --------------------------------------------------------------------- -USERD_get_number_of_variables - - Description: - ----------- - Get the number of variables for which you will be providing info. - - Specification: - ------------- - int USERD_get_number_of_variables( void ) - - Returns: - ------- - Number of variables (includes constant, scalar, vector and tensor types) - (>=0 if okay, <0 if problem) - - Arguments: - --------- - none - - Notes: - ----- - ***************************************************************** - * Variable numbers, by which references will be made, are implied - here. If you say there are 3 variables, the variable numbers - will be 1, 2, and 3. - ***************************************************************** - - * Num_variables would be set here - - - --------------------------------------------------------------------- -USERD_get_part_coords - - Description: - ----------- - Gets the coordinates for an unstructured part. - - Specification: - ------------- - int USERD_get_part_coords(int part_number, float **coord_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) coord_array = 2D float array which contains, - x,y,z coordinates of each node - in the part. - - (IMPORTANT: The second dimension of this aray is 1-based!!!) - - (Array will have been allocated - 3 by (number_of_nodes + 1) for the part - long - see USERD_get_gold_part_build_info) - - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - coord_array[3][101] - - Ignore the coord_array[0][0] - coord_array[1][0] - coord_array[2][0] locations and start - the node coordinates at: - coord_array[0][1] - coord_array[1][1] - coord_array[2][1] - - coord_array[0][2] - coord_array[1][2] - coord_array[2][2] - - etc. - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_element_ids_by_type - - Description: - ----------- - Gets the ids for the elements of a particular type for an unstructured - or structured part. - - Specification: - ------------- - int USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (OUT) elemid_array = 1D array containing id of each - element of the type. - - (Array will have been allocated - number_of_elements of the type long) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25] when called with Z_TRI03 - - conn_array[100] when called with Z_QUA04 - - conn_array[30] when called with Z_HEX08 - - Notes: - ----- - * Not called unless element label status is set to TRUE in - USERD_get_element_label_status - - * Will be based on Current_time_step - - - --------------------------------------------------------------------- -USERD_get_part_elements_by_type - - Description: - ----------- - Gets the connectivities for the elements of a particular type in an - unstructured part - - Specification: - ------------- - int USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (IN) element_type = One of the following (See global_extern.h) - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - - (OUT) conn_array = 2D array containing connectivity - of each element of the type. - - (Array will have been allocated - num_of_elements of the type by - connectivity length of the type) - - ex) If number_of_elements[Z_TRI03] = 25 - number_of_elements[Z_QUA04] = 100 - number_of_elements[Z_HEX08] = 30 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions available - for this routine will be: - conn_array[25][3] when called with Z_TRI03 - - conn_array[100][4] when called with Z_QUA04 - - conn_array[30][8] when called with Z_HEX08 - - Notes: - ----- - * Not called unless Num_unstructured_parts is > 0 - - * Will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_get_part_node_ids - - Description: - ----------- - Gets the node ids of an unstructured or structured part. - - Specification: - ------------- - int USERD_get_part_node_ids(int part_number, int *nodeid_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) part_number = The part number - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) nodeid_array = 1D array containing node ids of - each node in the part. - - (IMPORTANT: This array is 1-based!!!) - - (Array will have been allocated - (number_of_nodes + 1) for the part long - see USERD_get_gold_part_build_info) - - ex) If number_of_nodes = 100 - as obtained in: - USERD_get_gold_part_build_info - - Then the allocated dimensions of the - pointer sent to this routine will be: - nodeid_array[101] - - Ignore the nodeid_array[0] location and start - the node ids at: - nodeid_array[1] - - nodeid_array[2] - - etc. - - Notes: - ----- - * Not called unless node label status is TRUE, as returned from - USERD_get_node_label_status - - * Will be based on Current_time_step - - * The ids are purely labels, used when displaying or querying node ids. - However, any node id < 0 will never be displayed - - --------------------------------------------------------------------- -USERD_get_reader_descrip - - Description: - ----------- - Gets the description of the reader, so gui can give more info - - Specification: - ------------- - int USERD_get_reader_descrip(char descrip[Z_MAXFILENP]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) descrip = the description of the reader (max length is MAXFILENP, - which is 255) - - Notes: - ----- - * OPTIONAL ROUTINE! You can have it or not. - - - --------------------------------------------------------------------- -USERD_get_reader_version - - Description: - ----------- - Gets the version number of the user defined reader - - Specification: - ------------- - int USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful (and will assume is version 1.0) - - Arguments: - --------- - (OUT) version_number = the version number of the reader - (max length is Z_MAX_USERD_NAME, which - is 20) - - Notes: - ----- - * This needs to be "2.000" or greater. Otherwise EnSight will assume - this reader is API 1.0 - - * should set it to "2.010" for this version of the API - - - - --------------------------------------------------------------------- -USERD_get_sol_times - - Description: - ----------- - Get the solution times associated with each time step for - desired timeset. - - Specification: - ------------- - int USERD_get_sol_times(int timeset_number, - float *solution_times) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) solution_times = 1D array of solution times per time step - - (Array will have been allocated - Num_time_steps[timeset_number] long) - - Notes: - ----- - * The solution times must be non-negative and increasing. - - - --------------------------------------------------------------------- -USERD_get_timeset_description - - - Description: - ----------- - Get the description to associate with the desired timeset. - - Specification: - ------------- - int USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) timeset_number = the timeset number - - For example: If USERD_get_number_of_timesets - returns 2, the valid - timeset_number's would be 1 and 2 - - (OUT) timeset_description = timeset description string - - - Notes: - ----- - * A string of NULLs is valid for timeset_description - - - - --------------------------------------------------------------------- -USERD_get_var_by_component - - Description: - ----------- - Gets the values of a variable component. Both unstructured and structured - parts use this routine. - - if Z_PER_NODE: - Get the component value at each node for a given variable in the part. - - or if Z_PER_ELEM: - Get the component value at each element of a specific part and type - for a given variable. - - Specification: - ------------- - int USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - or: Z_UNDEF, in which case you need not load any values into var_array - - - Arguments: - --------- - (IN) which_variable = The variable number - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - (IN) var_type = Z_SCALAR - Z_VECTOR - Z_TENSOR (symmetric tensor) - Z_TENSOR9 (asymmetric tensor) - - (IN) which_type - - if Z_PER_NODE: Not used - - if Z_PER_ELEM: = The element type - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - - (IN) imag_data = TRUE if imag component - FALSE if real component - - (IN) component = The component: (0 if Z_SCALAR) - (0 - 2 if Z_VECTOR) - (0 - 5 if Z_TENSOR) - (0 - 8 if Z_TENSOR9) - - * 6 Symmetric Indicies, 0:5 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 22 23 | = | 1 5 | * - * | | | | * - * | 33 | | 2 | * - - - * 9 General Indicies, 0:8 * - * ---------------------------- * - * | 11 12 13 | | 0 3 4 | * - * | | | | * - * T = | 21 22 23 | = | 6 1 5 | * - * | | | | * - * | 31 32 33 | | 7 8 2 | * - - (OUT) var_array - - ----------------------------------------------------------------------- - (IMPORTANT: this array is 1-based for both Z_PER_NODE and Z_PER_ELEM!!!) - ----------------------------------------------------------------------- - - if Z_PER_NODE: = 1D array containing variable component value - for each node. - - (Array will have been allocated - (number_of_nodes + 1) long) - - Info stored in this fashion: - var_array[0] = not used - var_array[1] = var component for node 1 of part - var_array[2] = var_component for node 2 of part - var_array[3] = var_component for node 3 of part - etc. - - if Z_PER_ELEM: = 1D array containing variable component - value for each element of a particular - part and type. - - (Array will have been allocated - (number_of_elements[which_part][which_type] + 1) - long. See USERD_get_gold_part_build_info) - - Info stored in this fashion: - var_array[1] = var component for elem 1 (of part and type) - var_array[2] = var component for elem 2 (of part and type) - var_array[3] = var component for elem 3 (of part and type) - etc. - - Notes: - ----- - * Not called unless Num_variables is > 0 - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * Will be based on Current_time_step - - * If the variable is not defined for this part, simply return with a - value of Z_UNDEF. EnSight will treat the variable as undefined for - this part. - - --------------------------------------------------------------------- -USERD_get_var_value_at_specific - - Description: - ----------- - if Z_PER_NODE: - Get the value of a particular variable at a particular node in a - particular part at a particular time. - - or if Z_PER_ELEM: - Get the value of a particular variable at a particular element of - a particular type in a particular part at a particular time. - - - Specification: - ------------- - int USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) which_var = The variable number - - (IN) which_node_or_elem - - If Z_PER_NODE: - = The node number. This is not the id, but is - the index of the global node - list (1 based), or the block's - node list (1 based). - - Thus, coord_array[1] - coord_array[2] - coord_array[3] - . | - . |which_node_or_elem index - . ---- - - - If Z_PER_ELEM: - = The element number. This is not the id, but is - the element number index - of the number_of_element array - (see USERD_get_gold_part_build_info), - or the block's element list (1 based). - - Thus, for which_part: - conn_array[which_elem_type][0] - conn_array[which_elem_type][1] - conn_array[which_elem_type][2] - . | - . which_node_or_elem index - . ---- - - - (IN) which_part Since EnSight Version 7.4 - ------------------------- - = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - Prior to EnSight Version 7.4 - ---------------------------- - = The part id This is the part_id label loaded - in USERD_get_gold_part_build_info. - It is NOT the part table index. - - - (IN) which_elem_type - - If Z_PER_NODE, or block part: - = Not used - - If Z_PER_ELEM: - = The element type. This is the element type index - of the number_of_element array - (see USERD_get_gold_part_build_info) - - (IN) time_step = The time step - - (IN) imag_data = TRUE if want imaginary value. - FALSE if want real value. - - (OUT) values = scalar or vector component value(s) - values[0] = scalar or vector[0] - values[1] = vector[1] - values[2] = vector[2] - - - Notes: - ----- - * This routine is used in node querys over time (or element querys over - time for Z_PER_ELEM variables). If these operations are not critical - to you, this can be a dummy routine. - - * The per_node or per_elem classification must be obtainable from the - variable number (a var_classify array needs to be retained) - - * The time step given is for the proper variable timeset. - - ----------------------------------------------------------------------- -USERD_load_matf_data - - Description: - ----------- - Get the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) ids_list = If mat_type is Z_MAT_INDEX: - --------------------------- - 1D material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MAT_INDEX) - - If mat_type is Z_MIX_INDEX: - --------------------------- - 1D mixed-material id list - (Int array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_INDEX) - - (OUT) val_list = 1D mixed-materials values list - (only used if mat_type is Z_MIX_VALUE) - - (Float array will have been allocated - the appropriate size, as returned in - USERD_size_matf_data for mat_type Z_MIX_VALUE) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, - or Num_materials[set_index] is zero, - or the appropriate size from USERD_size_matf_data is zero - - - --------------------------------------------------------------------- -USERD_set_filenames - - Description: - ----------- - Receives the geometry and result filenames entered in the data - dialog. The user written code will have to store and use these - as needed. The user written code must manage its own files!! - - Specification: - ------------- - int USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) filename_1 = the filename entered into the geometry - field of the data dialog. - - (IN) param_2 = The usage of this string depends on - 'two_fields' in USERD_get_name_of_reader. - - If two_fields is FALSE then it's empty. - - If two_fields is TRUE, this is the - manditory results file entered - into the result field of the data dialog. - - If two_fields is -1, then this contains - optional text (filenames, modifiers, etc.) - that can be parsed and used to modify - reader - - (IN) the_path = the path info from the data dialog. - Note: filename_1 and filename_2 have already - had the path prepended to them. This - is provided in case it is needed for - filenames contained in one of the files - - (IN) swapbytes = TRUE if should swap bytes when reading data. - = FALSE normally. - - Notes: - ----- - * Since you must manage everything from the input that is entered in - these data dialog fields, this is an important routine! - - * It may be that you will need to have an executive type file that contains - info and other filenames within it, like EnSight6's case file. - - --------------------------------------------------------------------- -USERD_set_server_number - - Description: - ----------- - Receives the server number of how many total servers. - - Specification: - ------------- - int USERD_set_server_number(int cur_serv, - int tot_servs) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) cur_serv = the current server. - - (IN) tot_servs = the total number of servers. - - Notes: - ----- - * Only useful if your user defined reader is being used with EnSight's - Server-of-Server capability. And even then, it may or may not be - something that you can take advantage of. If your data is already - partitioned in some manner, such that you can access the proper - portions using this information. - - For all non-SOS uses, this will simply be 1 of 1 - - - --------------------------------------------------------------------- -USERD_set_time_set_and_step - - Description: - ----------- - Set the current time step in the desired timeset. All functions that - need time, and that do not explicitly pass it in, will use the timeset - and step set by this routine, if needed. - - Specification: - ------------- - void USERD_set_time_set_and_step(int timeset_number, - int time_step) - - Returns: - ------- - nothing - - Arguments: - --------- - (IN) timeset_number = the timeset number (1 based). - - For example: If USERD_get_number_of_timesets - returns 2, the valid timeset_number's - would be 1 and 2. - - (IN) time_step = The current time step to set - - Notes: - ----- - * Current_time_step and Current_timeset would be set here - - --------------------------------------------------------------------- -USERD_size_matf_data - - Description: - ----------- - Get the length of the material id list, mixed-material id list, or - mixed-material values list for the given material set and part (and - element type if material id list) - - Specification: - ------------- - int USERD_size_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size) - - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (IN) set_index = the material set index (zero based) - - (IN) part_id = the part number desired - - (IN) wtyp = the element type (used for Z_MAT_INDEX only) - - Z_POINT node point element - Z_BAR02 2 node bar - Z_BAR03 3 node bar - Z_TRI03 3 node triangle - Z_TRI06 6 node triangle - Z_QUA04 4 node quad - Z_QUA08 8 node quad - Z_TET04 4 node tetrahedron - Z_TET10 10 node tetrahedron - Z_PYR05 5 node pyramid - Z_PYR13 13 node pyramid - Z_PEN06 6 node pentahedron - Z_PEN15 15 node pentahedron - Z_HEX08 8 node hexahedron - Z_HEX20 20 node hexahedron - Z_NSIDED nsided polygon - Z_NFACED nfaced polyhedron - - Z_G_POINT ghost node point element - Z_G_BAR02 2 node ghost bar - Z_G_BAR03 3 node ghost bar - Z_G_TRI03 3 node ghost triangle - Z_G_TRI06 6 node ghost triangle - Z_G_QUA04 4 node ghost quad - Z_G_QUA08 8 node ghost quad - Z_G_TET04 4 node ghost tetrahedron - Z_G_TET10 10 node ghost tetrahedron - Z_G_PYR05 5 node ghost pyramid - Z_G_PYR13 13 node ghost pyramid - Z_G_PEN06 6 node ghost pentahedron - Z_G_PEN15 15 node ghost pentahedron - Z_G_HEX08 8 node ghost hexahedron - Z_G_HEX20 20 node ghost hexahedron - Z_G_NSIDED ghost nsided polygon - Z_G_NFACED ghost nfaced polyhedron - - (IN) mat_type = Z_MAT_INDEX for material ids list - Z_MIX_INDEX for mixed-material ids list - Z_MIX_VALUE for mixed-material values list - - (OUT) matf_size = the length of the material id list, or - mixed-material id list, or - mixed-material values list - for the given material set and part number - (and element type if Z_MAT_INDEX) - - Notes: - ----- - * See USERD_get_number_of_material_sets header for explanatory example - * Will not be called if Num_material_sets is zero, or - Num_materials[set_index] is zero - - - - --------------------------------------------------------------------- -USERD_stop_part_building - - Description: - ----------- - This routine called when the part building dialog is closed. It is - provided in case you desire to release memory, etc. that was only needed - during the part building process. - - Specification: - ------------- - void USERD_stop_part_building( void ) - - Returns: - ------- - nothing - - Arguments: - --------- - none - - Notes: - ----- - --------------------------------------------------------------------- -USERD_rigidbody_existence - - Description: - ----------- - Gets the existence of rigid body values or not in the model - - Specification: - ------------- - int USERD_rigidbody_existence( void ) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - none - - Notes: - ----- - * This will be based on Current_time_step - - --------------------------------------------------------------------- -USERD_rigidbody_values - - Description: - ----------- - Gets the rigid body values for each part - - Specification: - ------------- - int USERD_rigidbody_values(int part_number, - float values[14]) - - Returns: - ------- - Z_OK if rigid body values exist for the model - Z_UNDEF if no rigid body values exist - Z_ERR if an error - - Arguments: - --------- - (IN) part_number = The part number - - (1-based index of part table, namely: - - 1 ... Numparts_available. - - It is NOT the part_id that - is loaded in USERD_get_gold_part_build_info) - - (OUT) values values[0] = IX (x location) - values[1] = IY (y location) - values[2] = IZ (z location) - values[3] = E0 (e0 euler value) - values[4] = E1 (e1 euler value) - values[5] = E2 (e2 euler value) - values[6] = E3 (e3 euler value) - - The next 3 are for an optional cg offset. If none is - needed or desired (namely the first 7 values above - contain all that is needed), then these should be - set to 0.0 - - values[7] = xoff (initial cg x offset) - values[8] = yoff (initial cg y offset) - values[9] = z0ff (initial cg z offset) - - The next 4 values are for and optional initial yaw, pitch, roll - operation. This is useful to get parts from one - standard layout to a different standard layout. - (example, flex body parts computed in an axis system - different than that of rigid body parts manipulation) - If not needed or desired, set these to 0.0 - - values[10] = rot_order (order the roations are applied - 0.0 = no rotations - 1.0 = xyz order - 2.0 = xzy order - 3.0 = yxz order - 4.0 = yzx order - 5.0 = zxy order - 6.0 = zyx order) - values[11] = xrot (initial x rotation - degrees) - values[12] = yrot (initial y rotation - degrees) - values[13] = zrot (initial z rotation - degrees) - - Notes: - ----- - * This will be based on Current_time_step - * It will not be called unless USERD_rigidbody_existence indicates - that there are some values in the model by returning Z_OK. - * Order that transformations will be applied is: - 1. The yaw,pitch,roll rotations, if present (values[11] through values[13] - in the order specified in rot_order, values[10]) - 2. The cg offsets, if present (values[7] through values[9]) - 3. The euler parameter rotations (values[3] through values[6]) - 4. The translations (values[0] through values[2]) - --------------------------------------------------------------------- -USERD_set_right_side - - Description: - ----------- - Informs the reader that the time currently set is the right side of a time - span used for variable interpolation between time steps - - Specification: - ------------- - void USERD_set_right_side( void ) - - Returns: - ------- - - Arguments: - --------- - none - - Notes: - ----- - * Applies to Current_time_step - - - - - ------------------------------------------------------------------- - ENHANCED GUI ROUTINES - --------------------------------------------------------------------- -USERD_get_extra_gui_numbers - - Description: - ----------- - The Enhanced GUI routines are added to allow - the user to customize a portion of the Data - Reader dialog to pass in options to their - user defined reader. - - Specification: - ------------- - void USERD__get_extra_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_extra_gui_numbers - USERD_get_extra_gui_defaults - USERD_set_extra_gui_data - - The existence of these routine indicates that - you wish to add customize entries to the - Data Reader dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_extra_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_extra_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_extra_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_extra_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_extra_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_extra_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_numbers - - Description: - ----------- - The Var_Extract_GUI routines are added to allow - the user to customize a extraction parameters - for variables "after" the file has been read. - These things can be modified and the variables will - be update/refreshed according to the new parameters set - - Specification: - ------------- - void USERD_get_var_extract_gui_numbers(int *num_Toggles, - int *num_pulldowns, - int *num_fields) - - - Returns: - ------- - - Arguments: - --------- - (OUT) num_Toggles = number of toggles that will be provided - - num_pulldowns = number of pulldowns that will be provided - - num_fields = number of fields that will be provided - - Notes: - ----- - There are three routines that work together: - USERD_get_var_extract_gui_numbers - USERD_get_var_extract_gui_defaults (this one) - USERD_set_var_extract_gui_data - - The existence of these routine indicates that - you wish to have the Var Extract Parameters dialog. - - If you don't want the extra GUI features, - simply delete these routines, or change their - names to something such as - USERD_DISABLED_get_var_extract_gui_defaults - - The presence of these routines - will ensure that EnSight will call them and - use their data to modify the extraction parameters set - with some or all of the following: - toggles, pulldown menu and fields. - - The user can then interact with the enhanced - GUI and then send their choices to - USERD_set_extra_gui_data - - Therefore if USERD_get_var_extract_gui_numbers - exists then the other two must exist. - - If none exist, then the GUI will be unchanged. - - Toggle data will return an integer - TRUE if checked - FALSE if unchecked - - Pulldown menu will return an integer representing - the menu item selected - - Field will return a string Z_LEN_GUI_FIELD_STR long. - - If all the enhanced GUI features are enabled it - might look something like this - - =================================================== - [] Title 1 [X] Title 3 - [X]Title 2 [X] Title 4 - - Pulldown Menu -> - Menu Choice 1 - Menu Choice 2 - Menu Choice 3 - - Data Field Title 1 ____________________________ - - Data Field Title 2 ____________________________ - ===================================================== - - This routine defines the numbers of toggles, pulldowns & fields - - The following are defined in the global_extern.h - Z_MAX_NUM_GUI_PULL_ITEMS max num GUI pulldowns - Z_LEN_GUI_PULL_STR max length of GUI pulldown string - Z_LEN_GUI_FIELD_STR max length of field string - Z_LEN_GUI_TITLE_STR max length of title string - - The library is loaded, this routine is - called, then the library is unloaded. - - Do not define globals in this routine - as when the library is unloaded, you'll - lose them. - - --------------------------------------------------------------------- -USERD_get_var_extract_gui_defaults - - Description: - ----------- - This routine defines the Titles, status, - List choices, strings, etc that are fed - up to the GUI. - - Specification: - ------------- - int USERD_get_var_extract_gui_defaults(char **toggle_Title, - int *toggle_default_status, - char **pulldown_Title, - int *pulldown_number_in_list, - int *pulldown_default_selection, - char ***pulldown_item_strings, - char **field_Title, - char **field_user_string) - - Returns: - ------- - Z_OK if successful - Z_ERR if not successful - - Arguments: - --------- - (OUT) toggle_Title = title for each toggle - array dimension is [num_toggles] by - [Z_LEN_GUI_TITLE_STR] long - - toggle_default_status = Setting for each toggle (TRUE or FALSE) - array dimension is [num_toggles] long - - pulldown_Title = title for each pulldown - array dimension is [num_pulldowns] by - [Z_LEN_GUI_TITLE_STR] long - - pulldown_number_in_list = number of items in each pulldown - array dimension is [num_pulldowns] long - - pulldown_default_selection = pulldown item selection for each pulldown - array dimension is [num_pulldowns] long - - pulldown_item_strings = pulldown item strings - array is [num_pulldowns] by - [Z_MAX_NUM_GUI_PULL_ITEMS] by - [Z_LEN_GUI_PULL_STR] long - - field_Title = title for each field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - field_user_string = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - - Notes: - ----- - * The library is loaded, this routine is called, then the library is unloaded. - - * Do not define globals in this routine as when the library is unloaded, you'll - lose them. - - - --------------------------------------------------------------------- -USERD_set_var_extract_gui_data - - Description: - ----------- - This routine sets the new values for the toggles, pulldowns, and fields. - - Specification: - ------------- - void USERD_set_var_extract_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR]*/) - - Returns: - ------- - - Arguments: - --------- - (IN) toggle = setting for each toggle. TRUE or FALSE - array dimension is [num_toggles] long - - pulldown = item chosen in each pulldown. (0 based) - array dimension is [num_pulldowns] long - - field_text = content of the field - array dimension is [num_fields] by - [Z_LEN_GUI_TITLE_STR] long - - - Notes: - ----- - * This routine is called when the library is permanently - loaded to the EnSight session, so define your globals - in this and later routines. - - * It's up to you to change your reader behavior according to - user entries! - - - - - ------------------------------------------------------------------------------------ -/* ---------------------------------------------------------- - * New in EnSight 8 is the capability to remove (fail) elements - * based on variable threshold values. Basically the variable - * name, a couple of thresholds, a couple of values and a logic - * criteria are read in from this routine. Every element that - * satisfies the failure criteria is removed and not used in - * EnSight calculations. - * - * Example Failure criteria - * Let fail_var_name = "fail_flag" - * threshold_val1 = 0 - * threshold_operator1 = Z_EQUAL_TO - * logic_criteria2 not used - * threshold_val2 not used - * threshold_operator2 not used - * For each value of "fail_flag" at each element, - * if fail flag == threshold_val1 (0.0) then element fails - * Return (Z_ERR) if this is not used. - * Return (Z_OK) if failed element feature should be used - * - * threshold_operator1 & 2 can be one of the following - * Z_ELE_FAILED_NONE, - disables checking - * Z_ELE_FAILED_GREATER, - greater than - * Z_ELE_FAILED_LESS, - less than - * Z_ELE_FAILED_EQUAL, - equal - * Z_ELE_FAILED_NOT_EQUAL, - not equal - * Z_ELE_FAILED_MANY - not used - * - * logic_criteria2 - * Z_ELE_FAILED_LOGIC_NONE, - * Z_ELE_FAILED_LOGIC_AND, - * Z_ELE_FAILED_LOGIC_OR, - * Z_ELE_FAILED_LOGIC_MANY - * - * ---------------------------------------------------------- */ -int USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - -/*-------------------------------------------------------------------- - * USERD_get_structured_reader_cinching - - *-------------------------------------------------------------------- - * - * Gets whether this reader will do structured cinching for block data - * This means that it will handle the min, max, and step values for a - * given block and return the coordinate components or variable components - * in their "cinched" state when partial extraction or striding is used. - * This is as opposed to returning the entire component (ignoring min, max - * and stride) and letting Ensight pick out the values actually used. - * - * returns: Z_OK if the reader will handle the - * min, max, and stride and return - * the cinched values only. - * - * Z_UNDEF or Z_ERR if will return entire component - * and rely on EnSight to cinch. - * - * Notes: - * Unless you can actually pull out the desired min, max, and stride - * without using a full component of memory, don't enable this feature. - *--------------------------------------------------------------------*/ -int -USERD_get_structured_reader_cinching( void ) - - - -/*-------------------------------------------------------------------- - * USERD_set_block_range_and_stride - - *-------------------------------------------------------------------- - * - * Sets the min, max, and step values in each of the i, j, and k, directions - * for the given part. - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in - * USERD_get_gold_part_build_info) - * - * (IN) mini = min i plane desired (zero based) - * maxi = max i plane desired (zero based) - * stepi = i stride - * minj = min j plane desired (zero based) - * maxj = max j plane desired (zero based) - * stepj = j stride - * mink = min k plane desired (zero based) - * maxk = max k plane desired (zero based) - * stepk = k stride - * - * - * returns: Z_OK if no problems - * Z_ERR if an error - * - * Notes: - * * It will not be called unless USERD_get_structured_reader_cinching - * indicates that this reader does structured cinching by returning - * a Z_OK. - * - * * It will actually be called before each geom component and before - * each part variable - so if you are storing things locally, you should - * make this routine be able to quickly check whether anything needs - * updated or not. - * - * * If the stride (step) does not hit right on the max, the last element - * in each direction will be shortened appropriately. - * For example, if a block had 0 to 12 in the i direction, - * and the user specified min = 1 - * max = 8 - * step = 3 - * - * 0 1 2 3 4 5 6 7 8 9 10 11 12 - * | | | | | | | | | | | | | - * - * | | | | - * - * Namely, the coarser cell boundaries in this direction would be at 1, 4, -7, and 8 - * - *--------------------------------------------------------------------*/ -int -USERD_set_block_range_and_stride(int part_number, - int mini, int maxi, int stepi, - int minj, int maxj, int stepj, - int mink, int maxk, int stepk) - - - ----- end of document ---- diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_IN_BUFFERS b/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_IN_BUFFERS deleted file mode 100644 index 8b80e6a645dbc3ec0d14e7c2bcf5da86881f0827..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/README_USERD_IN_BUFFERS +++ /dev/null @@ -1,1447 +0,0 @@ -README_USERD_IN_BUFFERS -======================== -Five optional routines for normal elements, - - USERD_get_part_coords_in_buffers | - USERD_get_part_node_ids_in_buffers | - USERD_get_part_elements_by_type_in_buffers |If any of these are implemented, - USERD_get_part_element_ids_by_type_in_buffers |all 5 of them must be implemented - USERD_get_var_by_component_in_buffers | - - - -one optional routine for nsided elements, - - USERD_get_nsided_conn_in_buffers - - - -and one optional routine for nfaced elements, - - USERD_get_nfaced_conn_in_buffers - - -can be added into any API 2.* reader to be used by the -Unstructured Auto Distribute capability in EnSight 8.2 and later. - -Unstructured Auto Distribute is a capability requiring Server of Servers (SOS) -that will partition an unstructured model for you automatically across a set of -servers. - -If you do not implement the routines listed above (and described below) in your -reader, EnSight can still perform this operation but will require much more memory on -each server to read in the data (somewhat like each server having to read the -whole model). You will however, get the execution advantage of having your model -partitioned across multiple servers. - -If you do implement these routines in your reader (in a proper manner), you -should be able to not only get the execution advantages, but also memory usage -on each server which is proportional to the subset that it is assigned to deal with. - - -Note that the optional routines are functionally quite similar -to the following functions. And thus their implementation should -not be too difficult to add to any existing reader that has already -implemented these: ------------------------------------------- -USERD_get_part_coords -USERD_get_part_node_ids -USERD_get_part_elements_by_type -USERD_get_part_element_ids_by_type -USERD_get_var_by_component - -USERD_get_nsided_conn - -USERD_get_nfaced_conn - - - -Routine Details: -================ - -/*-------------------------------------------------------------------- - * USERD_get_part_coords_in_buffers - - *-------------------------------------------------------------------- - * - * Get the coordinates for an unstructured part in buffers. - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, get to - * the correct starting spot, initialize, etc. - * - * (IN) n_beg = Zero based, first node index - * of the buffered set - * - * (IN) n_end = Zero based, last node index - * of the buffered set - * - * Thus, for first five nodes: - * n_beg = 0 - * n_end = 4 - * total_number = (n_end - n_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five nodes, would be: - * n_beg = 5 - * n_end = 9 - * total_number = (n_end - n_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all nodes of a part, would be: - * n_beg = 0 - * n_end = num_nodes - 1 - * - * (IN) buffer_size = The size of the buffer. - * Namely: coord_array[3][buffer_size] - * - * (OUT) coord_array = 2D float buffer array which is set up to hold - * x,y,z coordinates of nodes. - * - * (IMPORTANT: the second dimension of of this array is 0-based!!!) - * - * (IMPORTANT: in the sister routine (USERD_get_part_coords) - which - * does not use buffers. This array is 1-based. So pay attention.) - * - * (Array will have been allocated - * 3 by buffer_size long - * - * Example, if we had a part with 645 nodes and the buffer size was set to 200 - * - * first invocation: - * first = TRUE Will be TRUE the first time! - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * coord_array[3][200] fill with values for nodes 1 - 200 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * second invocation: which occurs because we returned a 0 last time - * first = FALSE will now be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * coord_array[3][200] fill with values for nodes 201 - 400 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * third invocation: which occurs because we returned a 0 last time - * first = FALSE will still be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * coord_array[3][200] fill with values for nodes 401 - 600 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * fourth invocation: which occurs because we returned a 0 last time - * first = FALSE will still be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * coord_array[3][200] fill with values for nodes 601 - 645 (zero-based) - * *num_returned = 45 set this - * return(1) return this (indicates done!) - * - * (OUT) *num_returned = The number of nodes whose coordinates are returned - * in the buffer. This will normally be equal to - * buffer_size except for that last buffer - - * which could be less than a full buffer. - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Not called unless number_of_nodes for the part > 0 - * - * * Again, make sure each buffer is zero based. For our example above: - * - * Invocation: - * 1 2 3 4 - * ------- ------- -------- ------- - * coord_array[0][0] x for node 1 node 201 node 401 node 601 - * coord_array[1][0] y for " " " " - * coord_array[2][0] z for " " " " - * - * coord_array[0][1] x for node 2 node 202 node 402 node 602 - * coord_array[1][1] y for " " " " - * coord_array[2][1] z for " " " " - * - * ... - * - * coord_array[0][199] x for node 200 node 400 node 600 node 645 - * coord_array[1][199] y for " " " " - * coord_array[2][199] z for " " " " - *--------------------------------------------------------------------*/ -int -USERD_get_part_coords_in_buffers(int part_number, - float **coord_array, - int first, - int n_beg, - int n_end, - int buffer_size, - int *num_returned) - - - - - -/*-------------------------------------------------------------------- - * USERD_get_part_node_ids_in_buffers - - *-------------------------------------------------------------------- - * - * Get the node ids for an unstructured part in buffers. - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, get to - * the correct starting spot, initialize, etc. - * - * (IN) n_beg = Zero based, first node index - * of the buffered set - * - * (IN) n_end = Zero based, last node index - * of the buffered set - * - * Thus, for first five nodes: - * n_beg = 0 - * n_end = 4 - * total_number = (n_end - n_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five nodes, would be: - * n_beg = 5 - * n_end = 9 - * total_number = (n_end - n_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all nodes of a part, would be: - * n_beg = 0 - * n_end = num_nodes - 1 - * - * (IN) buffer_size = The size of the buffer. - * Namely: nodeid_array[buffer_size] - * - * (OUT) nodeid_array = 1D buffer array which is set up to hold - * node ids of nodes - * - * (IMPORTANT: this array is 0-based!!!) - * - * (IMPORTANT: in the sister routine (USERD_get_part_node_ids) - which - * does not use buffers. This array is 1-based. So pay attention.) - * - * (Array will have been allocated - * buffer_size long) - * - * Example, if we had a part with 645 nodes and the buffer size was set to 200 - * - * first invocation: - * first = TRUE Will be TRUE the first time! - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * nodeid_array[200] fill with values for nodes 1 - 200 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * second invocation: which occurs because we returned a 0 last time - * first = FALSE will now be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * nodeid_array[200] fill with values for nodes 201 - 400 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * third invocation: which occurs because we returned a 0 last time - * first = FALSE will still be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * nodeid_array[200] fill with values for nodes 401 - 600 (zero-based) - * *num_returned = 200 set this - * return(0) return this (indicates more to do) - * - * fourth invocation: which occurs because we returned a 0 last time - * first = FALSE will still be FALSE - * n_beg = 0 - * n_end = 644 - * buffer_size = 200 - * nodeid_array[200] fill with values for nodes 601 - 645 (zero-based) - * *num_returned = 45 set this - * return(1) return this (indicates done!) - * - * - * (OUT) *num_returned = The number of nodes whose ids are returned - * in the buffer. This will normally be equal - * to buffer_size except for that last buffer - * - which could be less than a full buffer. - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Not called unless number_of_nodes for the part > 0 - * - * * Again, make sure each buffer is zero based. For our example above: - * - * Invocation: - * 1 2 3 4 - * ------- ------- -------- ------- - * nodeid_array[0] id for node 1 node 201 node 401 node 601 - * - * nodeid_array[1] id for node 2 node 202 node 402 node 602 - * - * ... - * - * nodeid_array[199] id for node 200 node 400 node 600 node 645 - *--------------------------------------------------------------------*/ -int -USERD_get_part_node_ids_in_buffers(int part_number, - int *nodeid_array, - int first, - int n_beg, - int n_end, - int buffer_size, - int *num_returned) - - - - -/*-------------------------------------------------------------------- - * USERD_get_part_elements_by_type_in_buffers - - *-------------------------------------------------------------------- - * - * Gets the connectivities for the elements of a particular type - * in an unstructured part in buffers - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) element_type = One of the following (See global_extern.h) - * Z_POINT node point element - * Z_BAR02 2 node bar - * Z_BAR03 3 node bar - * Z_TRI03 3 node triangle - * Z_TRI06 6 node triangle - * Z_QUA04 4 node quad - * Z_QUA08 8 node quad - * Z_TET04 4 node tetrahedron - * Z_TET10 10 node tetrahedron - * Z_PYR05 5 node pyramid - * Z_PYR13 13 node pyramid - * Z_PEN06 6 node pentahedron - * Z_PEN15 15 node pentahedron - * Z_HEX08 8 node hexahedron - * Z_HEX20 20 node hexahedron - * - * Starting at API 2.01: - * ==================== - * Z_G_POINT ghost node point element - * Z_G_BAR02 2 node ghost bar - * Z_G_BAR03 3 node ghost bar - * Z_G_TRI03 3 node ghost triangle - * Z_G_TRI06 6 node ghost triangle - * Z_G_QUA04 4 node ghost quad - * Z_G_QUA08 8 node ghost quad - * Z_G_TET04 4 node ghost tetrahedron - * Z_G_TET10 10 node ghost tetrahedron - * Z_G_PYR05 5 node ghost pyramid - * Z_G_PYR13 13 node ghost pyramid - * Z_G_PEN06 6 node ghost pentahedron - * Z_G_PEN15 15 node ghost pentahedron - * Z_G_HEX08 8 node ghost hexahedron - * Z_G_HEX20 20 node ghost hexahedron - * Z_NSIDED n node ghost nsided polygon - * Z_NFACED n face ghost nfaced polyhedron - * - * Starting at API 2.02: - * ==================== - * Z_NSIDED n node nsided polygon - * Z_NFACED n face nfaced polyhedron - * Z_G_NSIDED n node ghost nsided polygon - * Z_G_NFACED n face ghost nfaced polyhedron - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, get to - * the correct starting spot, initialize, etc. - * - * (IN) e_beg = Zero based, first element number - * of the buffered set - * - * (IN) e_end = Zero based, last element number - * of the buffered set - * - * Thus, for first five elements of a type: - * e_beg = 0 - * e_end = 4 - * total_number = (e_end - e_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five elements of a type, would be: - * e_beg = 5 - * e_end = 9 - * total_number = (e_end - e_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all elements of the type of a part, would be: - * n_beg = 0 - * n_end = num_elements_of_type - 1 - * - * (IN) buffer_size = The size of the buffer. - * Namely: conn_array[buffer_size][element_size] - * - * (OUT) conn_array = 2D buffer array which is set up to hold - * connectivity of elements of the type. - * - * (Array will have been allocated - * buffer_size of - * the type by connectivity length - * of the type) - * - * ex) The allocated dimensions available - * for this routine will be: - * conn_array[buffer_size][3] when called with Z_TRI03 - * - * conn_array[buffer_size][4] when called with Z_QUA04 - * - * conn_array[buffer_size][8] when called with Z_HEX08 - * - * etc. - * - * * Example, (if 158 quad elements, and buffer size is 200) - * - * (get all 158 quad4s in one invocation) - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 (zero based, first element index) - * e_end = 157 (zero based, last element index) - * buffer_size = 200 - * conn_array[200][4] Use first 158 locations of the array - * *num_returned = 158 set this - * return(1) return this (indicates no more to do) - * - * * Example, (if 158 quad elements, and buffer size is 75) - * - * first invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * conn_array[75][4] load in conn for elements 1 - 75 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * second invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * conn_array[75][4] load in conn for elements 76 - 150 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * third invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * conn_array[75][4] load in conn for elements 151 - 158 - * *num_returned = 8 set this - * return(1) return this (indicates no more to do) - * - * - * (OUT) *num_returned = The number of elements whose connectivities - * are returned in the buffer. This will - * normally be equal to buffer_size except for - * that last buffer - which could be less than - * a full buffer. - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Again, make sure each buffer is zero based. For our example using buffers above: - * - * Invocation: - * 1 2 3 - * ------- ------- -------- - * conn_array[0][0] node 1 in conn for quad 1 quad 76 quad 151 - * conn_array[0][1] node 2 in conn for quad 1 quad 76 quad 151 - * conn_array[0][2] node 3 in conn for quad 1 quad 76 quad 151 - * conn_array[0][3] node 4 in conn for quad 1 quad 76 quad 151 - * - * conn_array[1][0] node 1 in conn for quad 2 quad 77 quad 152 - * conn_array[1][1] node 2 in conn for quad 2 quad 77 quad 152 - * conn_array[1][2] node 3 in conn for quad 2 quad 77 quad 152 - * conn_array[1][3] node 4 in conn for quad 2 quad 77 quad 152 - * - * ... - * - * conn_array[74][0] node 1 in conn for quad 75 quad 150 quad 158 - * conn_array[74][1] node 2 in conn for quad 75 quad 150 quad 158 - * conn_array[74][2] node 3 in conn for quad 75 quad 150 quad 158 - * conn_array[74][3] node 4 in conn for quad 75 quad 150 quad 158 - *--------------------------------------------------------------------*/ -int -USERD_get_part_elements_by_type_in_buffers(int part_number, - int element_type, - int **conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned) - - - - - -/*-------------------------------------------------------------------- - * USERD_get_part_element_ids_by_type_in_buffers - - *-------------------------------------------------------------------- - * - * Gets the ids for the elements of a particular type - * in an unstructured part in buffers - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) element_type = One of the following (See global_extern.h) - * Z_POINT node point element - * Z_BAR02 2 node bar - * Z_BAR03 3 node bar - * Z_TRI03 3 node triangle - * Z_TRI06 6 node triangle - * Z_QUA04 4 node quad - * Z_QUA08 8 node quad - * Z_TET04 4 node tetrahedron - * Z_TET10 10 node tetrahedron - * Z_PYR05 5 node pyramid - * Z_PYR13 13 node pyramid - * Z_PEN06 6 node pentahedron - * Z_PEN15 15 node pentahedron - * Z_HEX08 8 node hexahedron - * Z_HEX20 20 node hexahedron - * - * Starting at API 2.01: - * ==================== - * Z_G_POINT ghost node point element - * Z_G_BAR02 2 node ghost bar - * Z_G_BAR03 3 node ghost bar - * Z_G_TRI03 3 node ghost triangle - * Z_G_TRI06 6 node ghost triangle - * Z_G_QUA04 4 node ghost quad - * Z_G_QUA08 8 node ghost quad - * Z_G_TET04 4 node ghost tetrahedron - * Z_G_TET10 10 node ghost tetrahedron - * Z_G_PYR05 5 node ghost pyramid - * Z_G_PYR13 13 node ghost pyramid - * Z_G_PEN06 6 node ghost pentahedron - * Z_G_PEN15 15 node ghost pentahedron - * Z_G_HEX08 8 node ghost hexahedron - * Z_G_HEX20 20 node ghost hexahedron - * Z_NSIDED n node ghost nsided polygon - * Z_NFACED n face ghost nfaced polyhedron - * - * Starting at API 2.02: - * ==================== - * Z_NSIDED n node nsided polygon - * Z_NFACED n face nfaced polyhedron - * Z_G_NSIDED n node ghost nsided polygon - * Z_G_NFACED n face ghost nfaced polyhedron - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, get to - * the correct starting spot, initialize, etc. - * - * (IN) e_beg = Zero based, first element number - * of the buffered set - * - * (IN) e_end = Zero based, last element number - * of the buffered set - * - * Thus, for first five elements of a type: - * e_beg = 0 - * e_end = 4 - * total_number = (e_end - e_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five elements of a type, would be: - * e_beg = 5 - * e_end = 9 - * total_number = (e_end - e_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all elements of the type of a part, would be: - * n_beg = 0 - * n_end = num_elements_of_type - 1 - * - * (IN) buffer_size = The size of the buffer. - * Namely: elemid_array[buffer_size] - * - * (OUT) elemid_array = 1D buffer array which is set up to hold ids - * of elements of the type. - * - * (Array will have been allocated - * buffer_size long) - * - * * Example, (if 158 quad elements, and buffer size is 200) - * - * (get all 158 quad4 ids in one invocation) - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 (zero based, first element index) - * e_end = 157 (zero based, last element index) - * buffer_size = 200 - * elemeid_array[200] Use first 158 locations of the array - * *num_returned = 158 set this - * return(1) return this (indicates no more to do) - * - * * Example, (if 158 quad elements, and buffer size is 75) - * - * first invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * elemid_array[75] load in ids for elements 1 - 75 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * second invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * elemid_array[75] load in ids for elements 76 - 150 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * third invocation: - * element_type = Z_QUA04 - * first = TRUE Will be TRUE the first time! - * e_beg = 0 - * e_end = 157 - * buffer_size = 75 - * elemid_array[75] load in ids for elements 151 - 158 - * *num_returned = 8 set this - * return(1) return this (indicates no more to do) - * - * - * (OUT) *num_returned = The number of elements whose ids are returned - * in the buffer. This will normally be equal - * to buffer_size except for that last buffer - * - which could be less than a full buffer. - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Again, make sure each buffer is zero based. For our example using buffers above: - * - * Invocation: - * 1 2 3 - * ------- ------- -------- - * elemid_array[0] elem id for quad 1 quad 76 quad 151 - * - * elemid_array[1] elem id for quad 2 quad 77 quad 152 - * - * ... - * - * elemid_array[74] elem id for quad 75 quad 150 quad 158 - *--------------------------------------------------------------------*/ -int -USERD_get_part_element_ids_by_type_in_buffers(int part_number, - int element_type, - int *elemid_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned) - - - - - - -/*-------------------------------------------------------------------- - * USERD_get_var_by_component_in_buffers - used by unstructured parts - *-------------------------------------------------------------------- - * - * if Z_PER_NODE: - * Get the component value at each node for a given variable in the part - * in buffers. - * - * or if Z_PER_ELEM: - * Get the component value at each element of a specific part and type for - * a given variable in buffers. - * - * (IN) which_variable = The variable number - * - * (IN) which_part Since EnSight Version 7.4 - * ------------------------- - * = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * Prior to EnSight Version 7.4 - * ---------------------------- - * = The part id This is the part_id label loaded - * in USERD_get_gold_part_build_inf\o. - * It is NOT the part table index. - * - * (IN) var_type = Z_SCALAR - * Z_VECTOR - * Z_TENSOR ( symmetric tensor) - * Z_TENSOR9 (asymmetric tensor) - * - * (IN) which_type - * - * if Z_PER_NODE: Not used - * - * if Z_PER_ELEM: = The element type - * Z_POINT node point element - * Z_BAR02 2 node bar - * Z_BAR03 3 node bar - * Z_TRI03 3 node triangle - * Z_TRI06 6 node triangle - * Z_QUA04 4 node quad - * Z_QUA08 8 node quad - * Z_TET04 4 node tetrahedron - * Z_TET10 10 node tetrahedron - * Z_PYR05 5 node pyramid - * Z_PYR13 13 node pyramid - * Z_PEN06 6 node pentahedron - * Z_PEN15 15 node pentahedron - * Z_HEX08 8 node hexahedron - * Z_HEX20 20 node hexahedron - * - * Starting at API 2.01: - * ==================== - * Z_G_POINT ghost node point element - * Z_G_BAR02 2 node ghost bar - * Z_G_BAR03 3 node ghost bar - * Z_G_TRI03 3 node ghost triangle - * Z_G_TRI06 6 node ghost triangle - * Z_G_QUA04 4 node ghost quad - * Z_G_QUA08 8 node ghost quad - * Z_G_TET04 4 node ghost tetrahedron - * Z_G_TET10 10 node ghost tetrahedron - * Z_G_PYR05 5 node ghost pyramid - * Z_G_PYR13 13 node ghost pyramid - * Z_G_PEN06 6 node ghost pentahedron - * Z_G_PEN15 15 node ghost pentahedron - * Z_G_HEX08 8 node ghost hexahedron - * Z_G_HEX20 20 node ghost hexahedron - * Starting at API 2.02: - * ==================== - * Z_NSIDED n node nsided polygon - * Z_NFACED n face nfaced polyhedron - * Z_G_NSIDED n node ghost nsided polygon - * Z_G_NFACED n face ghost nfaced polyhedron - * - * - * - * (IN) imag_data = TRUE if imag component - * FALSE if real component - * - * (IN) component = The component: (0 if Z_SCALAR) - * (0 - 2 if Z_VECTOR) - * (0 - 5 if Z_TENSOR) - * (0 - 8 if Z_TENSOR9) - * - * * 6 Symmetric Indicies, 0:5 * - * * ---------------------------- * - * * | 11 12 13 | | 0 3 4 | * - * * | | | | * - * * T = | 22 23 | = | 1 5 | * - * * | | | | * - * * | 33 | | 2 | * - * - * * 9 General Indicies, 0:8 * - * * ---------------------------- * - * * | 11 12 13 | | 0 1 2 | * - * * | | | | * - * * T = | 21 22 23 | = | 3 4 5 | * - * * | | | | * - * * | 31 32 33 | | 6 7 8 | * - * - * (IN) ne_beg - * if Z_PER_NODE: = Zero based, first node index of the buffered set - * if Z_PER_ELEM: = Zero based, first element index of the buffered set - * - * (IN) ne_end - * if Z_PER_NODE: = Zero based, last node index of the buffered set - * if Z_PER_ELEM: = Zero based, last element index of the buffered set - * - * Thus, for first five elements or nodes: - * e_beg = 0 - * e_end = 4 - * total_number = (e_end - e_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five elements or nodes, would be: - * e_beg = 5 - * e_end = 9 - * total_number = (e_end - e_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all elements or nodes of a part, would be: - * n_beg = 0 - * n_end = num_elements_or_nodes - 1 - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, get to - * the correct starting spot, initialize, etc. - * - * (IN) buffer_size = The size of the buffer. - * Namely: var_array[buffer_size] - * - * (IN) leftside = TRUE if current time is at a timestep or - * when getting the left side of a time - * span that encloses the current time. - * = FALSE when getting the right side of a time - * span that encloses the current time. - * - * Timeline: - * step1 step2 step3 - * |-------------|--------------|-------... requires no interpolation - * ^ get values at step2 (leftside = TRUE) - * current time (leftside = TRUE) - * - * - * Timeline: - * step1 step2 step3 - * |-------------|--------------|-------... requires interpolation - * ^ get values at step2 (leftside = TRUE) - * current time and get values at step3 (leftside = FALSE) - * - * Note that it would generally be easier for this routine if EnSight got all - * of the left side, then all of the right side, and then did its - * interpolation. But, in the spirit of doing things in buffers (to save - * memory) it gets a left side buffer (and the corresponding right side - * buffer and interpolates these), if needed, before going to the next - * buffer of the set. Thus, you need to be able to handle that situation. - * - * Note also that EnSight will have called the routine to change the current - * time step between the two invocations when interpolation is required. - * And Ensight does the interpolating. This variable is provided so - * that you can deal with two different files or pointers between the - * corresponding invocations for the two times - * - * (OUT) var_array - * - * ----------------------------------------------------------------------- - * (IMPORTANT: this array is 0-based for both Z_PER_NODE and Z_PER_ELEM!!! - * ----------------------------------------------------------------------- - * - * if Z_PER_NODE: = 1D buffer array set up to hold a variable - * component value for nodes. - * - * if Z_PER_ELEM: = 1D buffer array set up to hold a variable - * component value for elements. - * - * (Array will have been allocated - * buffer_size long) - * - * Info stored in this fashion: - * var_array[0] = var component for node or element 1 of part - * var_array[1] = var component for node or element 2 of part - * var_array[2] = var component for node or element 3 of part - * etc. - * - * * Example, (if 158 quad elements with a real Z_PER_ELEM scalar, - * current time is between steps, and buffer size is 75) - * - * first invocation: (for left side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = TRUE Will be TRUE the first time! - * buffer_size = 75 - * leftside = TRUE <== - * var_array[75] load in scalar value for elements 1 - 75 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * second invocation: (for right side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = TRUE Note: Will still be TRUE (because is right side) - * buffer_size = 75 - * leftside = FALSE <== - * var_array[75] load in scalar value for elements 1 - 75 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * ------------------------------- - * third invocation: (for left side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = FALSE Will be FALSE now - * buffer_size = 75 - * leftside = TRUE <== - * var_array[75] load in scalar value for elements 76 - 150 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - * fourth invocation: (for right side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = FALSE - * buffer_size = 75 - * leftside = FALSE <== - * var_array[75] load in scalar value for elements 76 - 150 - * *num_returned = 75 set this - * return(0) return this (indicates more to do) - * - *------------------------------------ - * fifth invocation: (for left side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = FALSE Will still be FALSE - * buffer_size = 75 - * leftside = TRUE <== - * var_array[75] load in scalar value for elements 151 - 158 - * *num_returned = 8 set this - * return(1) return this (indicates no more to do) - * - * sixth invocation: (for right side of time span) - * var_type = Z_SCALAR - * which_type = Z_PER_ELEM - * imag_data = FALSE - * component = 0 - * ne_beg = 0 - * ne_end = 157 - * first = FALSE - * buffer_size = 75 - * leftside = FALSE <== - * var_array[75] load in scalar value for elements 151 - 158 - * *num_returned = 8 set this - * return(1) return this (indicates no more to do) - * - * - * (OUT) *num_returned = The number of nodes or elements whose variable - * values are returned in the buffer. This will - * normally be equal to buffer_size except for - * that last buffer - which could be less than - * a full buffer. - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Again, make sure each buffer is zero based. For our example using buffers above: - * - * Invocation: - * ---------------- ------------------ ------------------- - * 1 2 3 4 5 6 - * ------- ------- -------- -------- --------- --------- - * var_array[0] scalar of quad 1L quad 1R quad 76L quad 76R quad 151L quad 151R - * - * var_array[1] scalar of quad 2L quad 2R quad 77L quad 77R quad 152L quad 152R - * - * ... - * - * var_array[74] scalar of quad 75L quad 75R quad 150L quad 150R quad 158L quad 158R - * - * Where: L indicates left time step - * R indicates right time step - *--------------------------------------------------------------------*/ -int -USERD_get_var_by_component_in_buffers(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array, - int first, - int ne_beg, - int ne_end, - int buffer_size, - int leftside, - int *num_returned) - - - - -/*-------------------------------------------------------------------- - * USERD_get_nsided_conn_in_buffers - - *-------------------------------------------------------------------- - * - * Gets the two arrays containing the connectivity information - * of nsided elements in buffers - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, - * get to the correct starting spot, - * initialize, etc. - * - * (IN) e_beg = Zero based, first element number - * of the buffered set - * - * (IN) e_end = Zero based, last element number - * of the buffered set - * - * Thus, for first five elements of a type: - * e_beg = 0 - * e_end = 4 - * total_number = (e_end - e_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five elements of a type, would be: - * e_beg = 5 - * e_end = 9 - * total_number = (e_end - e_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all elements of the type of a part, would be: - * n_beg = 0 - * n_end = num_elements_of_type - 1 - * - * (IN) buffer_size = The size of the num_nodes_per_elem_array buffer. - * Namely: num_nodes_per_elem_array[buffer_size] - * - * (OUT) num_nodes_per_elem_array = 1D buffer array of the number of nodes - * per nsided element. - * - * (OUT) nsided_conn_array = 1D buffer array of nsided connectivies - * - * (int array will have been allocated - * long enough to hold all the nsided - * connectivities in the buffered chunk) - * - * (OUT) *num_returned = The number of elements whose connectivities - * are returned in the buffer. This will - * normally be equal to buffer_size except for - * that last buffer - which could be less than - * a full buffer. - * - * Providing nsided information to Ensight: - * - * NOTE: for other nsided operations you need these first two, but we - * don't actually use them in this routine. - * - * 1. In USERD_get_gold_part_build_info, provide the number of nsided - * elements in the part. - * - * 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - * the number of nodes per nsided element. (as if connectivity - * length of an nsided element is one) - * - * We do use the following: - * 3. In this routine, provide the corresponding num_nodes_per_element and - * streamed connectivities for each of the nsided elements in this - * buffered portion. - * - * - * Simple example: 5 6 - * +--------+ - * 3 nsided elements: /| \ - * (1 4-sided / | \ - * 1 3-sided / | \ - * 1 7-sided) / | \ 7 - * /3 |4 + - * +-----+ | - * | | | - * | | |8 - * | | + - * | | / - * | | / - * | | / - * |1 |2 /9 - * +-----+--------+ - * - * NOTE, don't really use these first two here (See USERD_get_nsided_conn) - * - * 1. In USERD_get_gold_part_build_info: - * number_of_elements[Z_NSIDED] = 3 - * . - * /|\ - * | - * 2. In USERD_get_part_elements_by_type: - * length of conn_array will be: 3 x 1 - * - * for element_type of Z_NSIDED: - * conn_array[0][0] = 4 (for the 4-sided element) - * conn_array[1][0] = 3 (for the 3-sided element) - * conn_array[2][0] = 7 (for the 7-sided element) - * - * Sum === - * 14 - * - * But for our example, lets assume that that our buffer is just 2 - * ================ - * 3. In this routine: - * - * first invocation: - * first = TRUE - * e_beg = 0 - * e_end = 2 - * buffer_size = 2 - * num_nodes_per_elem_array[2] load it: num_nodes_per_elem_array[0] = 4 - * num_nodes_per_elem_array[1] = 3 - * - * nsided_conn_array[at least 7] load it: nsided_conn_array[0] = 1 - * nsided_conn_array[1] = 2 - * nsided_conn_array[2] = 4 - * nsided_conn_array[3] = 3 - * - * nsided_conn_array[4] = 3 - * nsided_conn_array[5] = 4 - * nsided_conn_array[6] = 5 - * *num_returned = 2 - * return(0) return this (indicates more to do) - * - * second invocation: - * first = FALSE - * e_beg = 0 - * e_end = 2 - * buffer_size = 2 - * num_nodes_per_elem_array[2] load it: num_nodes_per_elem_array[0] = 7 - * - * nsided_conn_array[at least 7] load it: nsided_conn_array[0] = 2 - * nsided_conn_array[1] = 9 - * nsided_conn_array[2] = 8 - * nsided_conn_array[3] = 7 - * nsided_conn_array[4] = 6 - * nsided_conn_array[5] = 5 - * nsided_conn_array[6] = 4 - * *num_returned = 1 - * return(1) return this (indicates no more to do) - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Will not be called unless there are some nsided elements in the - * the part - *--------------------------------------------------------------------*/ -int -USERD_get_nsided_conn_in_buffers(int part_number, - int *num_nodes_per_elem_array, - int *nsided_conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned) - - - - -/*-------------------------------------------------------------------- - * USERD_get_nfaced_conn_in_buffers - - *-------------------------------------------------------------------- - * - * Gets three arrays containing the number of faces per element, - * number of nodes per face, and connectivity per face of nfaced - * elements in buffers - * - * (IN) part_number = The part number - * - * (1-based index of part table, namely: - * - * 1 ... Numparts_available. - * - * It is NOT the part_id that - * is loaded in USERD_get_gold_part_build_info) - * - * (IN) first = TRUE if first invocation of a buffered set. - * Will be FALSE for all subsequent invocations - * of the set. This is so you can open files, - * get to the correct starting spot, - * initialize, etc. - * - * (IN) e_beg = Zero based, first element number - * of the buffered set - * - * (IN) e_end = Zero based, last element number - * of the buffered set - * - * Thus, for first five elements of a type: - * e_beg = 0 - * e_end = 4 - * total_number = (e_end - e_beg) + 1 = (4 - 0) + 1 = 5 - * - * for second five elements of a type, would be: - * e_beg = 5 - * e_end = 9 - * total_number = (e_end - e_beg) + 1 = (9 - 5) + 1 = 5 - * - * for all elements of the type of a part, would be: - * n_beg = 0 - * n_end = num_elements_of_type - 1 - * - * (IN) buffer_size = The size of the num_nodes_per_elem_array buffer. - * Namely: num_nodes_per_elem_array[buffer_size] - * - * (OUT) nfaced_fpe_array = 1D buffer array of the number of faces per nfaced - * element. - * - * (int array will have been allocated - * buffer_size long) - * - * (OUT) nfaced_npf_array = 1D buffer array of the number of nodes per face - * for nfaced elements. - * - * (int array will have been allocated long - * enough to hold a buffer's size of values) - * - * (OUT) nfaced_conn_array = 1D array of nsided face connectivies of - * nfaced elements - * - * (int array will have been allocated - * long enough to hold a buffer's worth of values) - * - * Providing nfaced information to Ensight: - * - * NOTE: for other nfaced operations you need these first two, but we - * don't actually use them in this routine. - * - * 1. In USERD_get_gold_part_build_info, provide the number of nfaced - * polyhedral elements in the part. - * - * 2. In USERD_get_part_elements_by_type, provide (in the conn_array), - * the number of faces per nfaced element. (as if connectivity - * length of an nfaced element is one) - * - * We do use the following: - * 3. In this routine, provide the corresponding number of faces per nfaced - * element, streamed number of nodes per face, and streamed face - * connectivities for each of the faces of the nfaced elements in the - * bufferred portion. - * - * - * Simple example: 11 10 12 - * +--------+-----+ - * 2 nfaced elements: /| |\ /| - * (1 7-faced / | | \ / | - * 1 5-sided) / | | +9 | - * / | | /| | - * /7 | 8 / | | - * +-----------+/ | | | - * | |5 | |4 | |6 - * | +-----|--+--|--+ - * | / | \ | / - * | / | \|/3 - * | / | + - * | / | / - * |/1 |2 / - * +-----------+/ - * - * Note, don't really use these first two here (See USERD_get_nfaced_conn) - * - * 1. In USERD_get_gold_part_build_info: - * number_of_elements[Z_NFACED] = 2 - * . - * /|\ - * | - * 2. In USERD_get_part_elements_by_type: - * length of conn_array will be: 2 x 1 - * for element_type of Z_NFACED: - * conn_array[0][0] = 7 (for the 7-faced element) - * conn_array[1][0] = 5 (for the 5-faced element) - * == - * Sum 12 - * - * - * But for our simple example, lets assume that that our buffer is just 1 - * so that we have multiple invocations. ================ - * - * 3. In this routine: - * - * first invocation: - * first = TRUE - * e_beg = 0 - * e_end = 1 - * buffer_size = 1 - * nfaced_fpe_array[1] load it: nfaced_fpe_array[0] = 7 - * - * nfaced_npf_array[at least 7] load it: nfaced_npf_array[0] = 5 - * nfaced_npf_array[1] = 5 - * nfaced_npf_array[2] = 4 - * nfaced_npf_array[3] = 4 - * nfaced_npf_array[4] = 4 - * nfaced_npf_array[5] = 4 - * nfaced_npf_array[6] = 4 - * - * nsided_conn_array[at least 30] load it: nsided_conn_array[0] = 7 - * nsided_conn_array[1] = 8 - * nsided_conn_array[2] = 9 - * nsided_conn_array[3] = 10 - * nsided_conn_array[4] = 11 - * - * nsided_conn_array[5] = 1 - * nsided_conn_array[6] = 5 - * nsided_conn_array[7] = 4 - * nsided_conn_array[8] = 3 - * nsided_conn_array[9] = 2 - * - * nsided_conn_array[10] = 1 - * nsided_conn_array[11] = 2 - * nsided_conn_array[12] = 8 - * nsided_conn_array[13] = 7 - * - * nsided_conn_array[14] = 5 - * nsided_conn_array[15] = 1 - * nsided_conn_array[16] = 7 - * nsided_conn_array[17] = 11 - * - * nsided_conn_array[18] = 4 - * nsided_conn_array[19] = 5 - * nsided_conn_array[20] = 11 - * nsided_conn_array[21] = 10 - * - * nsided_conn_array[22] = 2 - * nsided_conn_array[23] = 3 - * nsided_conn_array[24] = 9 - * nsided_conn_array[25] = 8 - * - * nsided_conn_array[26] = 3 - * nsided_conn_array[27] = 4 - * nsided_conn_array[28] = 10 - * nsided_conn_array[29] = 9 - * *num_returned = 1; - * return(0) - * - * second invocation: - * first = FALSE - * e_beg = 0 - * e_end = 1 - * buffer_size = 1 - * nfaced_fpe_array[1] load it: nfaced_fpe_array[0] = 5 - * - * nfaced_npf_array[at least 7] load it: nfaced_npf_array[0] = 3 - * nfaced_npf_array[1] = 3 - * nfaced_npf_array[2] = 4 - * nfaced_npf_array[3] = 4 - * nfaced_npf_array[4] = 4 - * - * nsided_conn_array[at least 18] load it: nsided_conn_array[0] = 9 - * nsided_conn_array[1] = 12 - * nsided_conn_array[2] = 10 - * - * nsided_conn_array[3] = 3 - * nsided_conn_array[4] = 4 - * nsided_conn_array[5] = 6 - * - * nsided_conn_array[6] = 6 - * nsided_conn_array[7] = 4 - * nsided_conn_array[8] = 10 - * nsided_conn_array[9] = 12 - * - * nsided_conn_array[10] = 3 - * nsided_conn_array[11] = 6 - * nsided_conn_array[12] = 12 - * nsided_conn_array[13] = 9 - * - * nsided_conn_array[14] = 4 - * nsided_conn_array[15] = 3 - * nsided_conn_array[16] = 9 - * nsided_conn_array[17] = 10 - * *num_returned = 1; - * return(1) - * - * returns 0 if got some, more to do - * 1 if got some, done - * -1 if an error - * - * Notes: - * * This will be based on Current_time_step - * - * * Will not be called unless there are some nfaced elements in the - * the part - *--------------------------------------------------------------------*/ -int -USERD_get_nfaced_conn_in_buffers(int part_number, - int *nfaced_fpe_array, - int *nfaced_npf_array, - int *nfaced_conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned) diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_API.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_API.H deleted file mode 100644 index 0a76de23339e746baa82f90e2acdaf39a0887f48..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_API.H +++ /dev/null @@ -1,2 +0,0 @@ -#define DO_READER -#define USERD_API_203 diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H deleted file mode 100644 index 6a47c6ecf29900449c93411bc0f236a43398b257..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H +++ /dev/null @@ -1,14 +0,0 @@ -//====================================================================== -// backup is not implemented -//====================================================================== -int USERD_bkup -( - FILE *archive_file, - int backup_type) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_bkup" << endl - << flush; -#endif - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H deleted file mode 100644 index 277450fc47fae33c5dd30707d6d3191ae7a43f0d..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H +++ /dev/null @@ -1,11 +0,0 @@ -void USERD_exit_routine -( - void -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_exit_routine" << endl - << flush; -#endif - -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H deleted file mode 100644 index 5ea3202b8ce5d8b72b850148527a927c6b89eb5d..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H +++ /dev/null @@ -1,17 +0,0 @@ - -// Not used - -int USERD_get_border_availability -( - int part_number, - int number_of_elements[Z_MAXTYPE] -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_border_availability for part_number " - << part_number << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H deleted file mode 100644 index 29536014be42f741099ed1a634a8716cdb7c68f1..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H +++ /dev/null @@ -1,19 +0,0 @@ - -// Not called if USERD_border_availability returns Z_ERR - -int USERD_get_border_elements_by_type -( - int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parnet_element_type -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_border_elements_by_type" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H deleted file mode 100644 index f346f338bf8fc16e87291101255f729e9e3d0523..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H +++ /dev/null @@ -1,10 +0,0 @@ -//====================================================================== -int USERD_get_changing_geometry_status(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_changing_geometry_status" << endl << flush; -#endif - - // Choose the most general option - return Z_CHANGE_CONN; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H deleted file mode 100644 index d14dc7a17a5bad0871280153e66098d3feafda9e..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H +++ /dev/null @@ -1,15 +0,0 @@ - -//====================================================================== -// Not in use -//====================================================================== -float USERD_get_constant_val -( - int which_var, - int imag_data -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_constant_val" << endl << flush; -#endif - return 0.0; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_dataset_query_file_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_dataset_query_file_info.H deleted file mode 100644 index 03e7e2fe0faf56a04654ea7793c169d4868479fe..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_dataset_query_file_info.H +++ /dev/null @@ -1,8 +0,0 @@ -//====================================================================== -// NOT SUPPORTED... yet, if ever! -//====================================================================== -int USERD_get_dataset_query_file_info(Z_QFILES *qfiles) -{ - // just return OK - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H deleted file mode 100644 index d10346eb940296cd81fa7c85a3a05d1f42710204..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H +++ /dev/null @@ -1,31 +0,0 @@ -//====================================================================== -int USERD_get_descrip_lines -( - int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL] -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_descrip_lines" << endl - << flush; -#endif - - if (which_type == Z_GEOM) - { - strncpy(line1, meshName, Z_BUFL); - strncpy(line2, "", Z_BUFL); - } - else - { - strncpy(line1, "WHERE IS THIS LINE USED I WONDER???", Z_BUFL); - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_descrip_lines" << endl - << flush; -#endif - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H deleted file mode 100644 index 99b0ba28e1834cca22f394074eb2fe2a2c9158bb..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H +++ /dev/null @@ -1,10 +0,0 @@ -//====================================================================== -// if TRUE: set in USERD_get_element_ids_for_part -//====================================================================== -int USERD_get_element_label_status(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_element_label_status" << endl << flush; -#endif - return TRUE; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H deleted file mode 100644 index 9b0df36a20d98efcf6ed9ec24d812ef9f5a44f7d..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H +++ /dev/null @@ -1,14 +0,0 @@ -int USERD_get_geom_timeset_number -( - void -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_geom_timeset_number" << endl - << flush; -#endif - - Geom_timeset_number = 1; - - return Geom_timeset_number; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H deleted file mode 100644 index 299ec5a67d0f3cc78c692260691ee760bcc66c11..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H +++ /dev/null @@ -1,153 +0,0 @@ -//====================================================================== -// this is based on the current time step. -//====================================================================== -int USERD_get_gold_part_build_info -( - int *part_numbers, - int *part_types, - char *part_descriptions[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6] -) -{ - #ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_gold_part_build_info" << endl << flush; - #endif - - const cellShapeList& cellShapes = meshPtr->cellShapes(); - const cellList& cells = meshPtr->cells(); - - label nCells = cells.size(); - - // all parts are unstructured - for (label n = 0; n<Numparts_available; n++) - { - part_numbers[n] = n + 1; - part_types[n] = Z_UNSTRUCTURED; - } - - strncpy(part_descriptions[0], meshName, Z_BUFL); - - for (label i=0; i<nPatches; i++) - { - word patchName(meshPtr->boundary()[i].name()); - strncpy(part_descriptions[i+1], patchName.c_str(), Z_BUFL); - } - - label nHex08 = 0; - label nPen06 = 0; - label nPyr05 = 0; - label nTet04 = 0; - label nFaced = 0; - - for (label n=0; n<nCells; n++) - { - label nFacesInCell = cells[n].size(); - labelList points = cellShapes[n]; - - if ((nFacesInCell == 6) && (points.size() == 8)) - { - nHex08++; - } - else if ((nFacesInCell == 4) && (points.size() == 4)) - { - nTet04++; - } - else if (nFacesInCell == 5) - { - if (points.size() == 6) - { - nPen06++; - } - else if (points.size() == 5) - { - nPyr05++; - } - else - { - nFaced++; - } - } - else - { - nFaced++; - } - } - - for (label n=0; n < Z_MAXTYPE; n++) - { - for (label i=0; i<Numparts_available; i++) - { - number_of_elements[i][n] = 0; - } - } - - number_of_elements[0][Z_TET04] = nTet04; - number_of_elements[0][Z_PYR05] = nPyr05; - number_of_elements[0][Z_HEX08] = nHex08; - number_of_elements[0][Z_PEN06] = nPen06; - number_of_elements[0][Z_NFACED] = nFaced; - - /* - Info<< "nTet04 = " << nTet04 << endl; - Info<< "nPyr05 = " << nPyr05 << endl; - Info<< "nHex08 = " << nHex08 << endl; - Info<< "nPen06 = " << nPen06 << endl; - Info<< "nFaced = " << nFaced << endl; - */ - - number_of_nodes[0] = meshPtr->nPoints(); - - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - - for (label i=0; i<nPatches; i++) - { - label nTri03 = 0; - label nQuad04 = 0; - label nPoly = 0; - - forAll(bMesh[i], n) - { - label nPoints = bMesh[i][n].size(); - - if (nPoints == 3) - { - nTri03++; - } - else if (nPoints == 4) - { - nQuad04++; - } - else - { - nPoly++; - } - } - - number_of_elements[i+1][Z_TRI03] = nTri03; - number_of_elements[i+1][Z_QUA04] = nQuad04; - number_of_elements[i+1][Z_NSIDED] = nPoly; - - number_of_nodes[i+1] = bMesh[i].points().size(); - } - - if (Numparts_available > nPatches+1) - { - strncpy - ( - part_descriptions[nPatches+1], - cloud::prefix.c_str(), - Z_BUFL - ); - number_of_elements[nPatches+1][Z_POINT] = sprayPtr->size(); - number_of_nodes[nPatches+1] = sprayPtr->size(); - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_gold_part_build_info" << endl << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H deleted file mode 100644 index 40c181015b1cc9d281bd647a62e70c2a32973a36..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H +++ /dev/null @@ -1,120 +0,0 @@ -//====================================================================== -// variable 1 - var[0] , i.e variables are zero based -//====================================================================== -int USERD_get_gold_variable_info -( - char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_gold_variable_info" << endl - << flush; -#endif - - label offset = Num_variables - nSprayVariables; - - // scalars first ... - for (label n=0; n<offset; n++) - { - if (isScalar[var2field[n]]) - { - var_type[n] = Z_SCALAR; - var_classify[n] = Z_PER_ELEM; - var_complex[n] = FALSE; - var_timeset[n] = 1; - strncpy - ( - var_description[n], - fieldNames[var2field[n]].c_str(), - Z_BUFL - ); - } - } - - // ... and then vectors - for (label n=0; n<offset; n++) - { - if (isVector[var2field[n]]) - { - var_type[n] = Z_VECTOR; - var_classify[n] = Z_PER_ELEM; - var_complex[n] = FALSE; - var_timeset[n] = 1; - strncpy - ( - var_description[n], - fieldNames[var2field[n]].c_str(), - Z_BUFL - ); - } - } - - // ... and tensors (NB! all tensors are treated as asymmetric) - for (label n=0; n<offset; n++) - { - if (isTensor[var2field[n]]) - { - var_type[n] = Z_TENSOR9; - var_classify[n] = Z_PER_ELEM; - var_complex[n] = FALSE; - var_timeset[n] = 1; - strncpy - ( - var_description[n], - fieldNames[var2field[n]].c_str(), - Z_BUFL - ); - } - } - - if (Numparts_available > nPatches+1) - { - - label Ns = lagrangianScalarNames.size(); - - for (label n=0; n<Ns; n++) - { - var_type[offset + n] = Z_SCALAR; - var_classify[offset + n] = Z_PER_ELEM; - var_complex[offset + n] = FALSE; - var_timeset[offset + n] = 1; - word name = parcelPrepend + lagrangianScalarNames[n]; - strncpy - ( - var_description[offset + n], - name.c_str(), - Z_BUFL - ); - } - - forAll(lagrangianVectorNames, n) - { - var_type[offset + Ns + n] = Z_VECTOR; - var_classify[offset + Ns + n] = Z_PER_ELEM; - var_complex[offset + Ns + n] = FALSE; - var_timeset[offset + Ns + n] = 1; - word name = parcelPrepend + lagrangianVectorNames[n]; - strncpy - ( - var_description[offset + Ns + n], - name.c_str(), - Z_BUFL - ); - } - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_gold_variable_info" << endl - << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H deleted file mode 100644 index 8f1b417ee473d348ca5cf9d76d231422a667cc66..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H +++ /dev/null @@ -1,14 +0,0 @@ - -int USERD_get_matf_set_info -( - int *mat_set_ids, - char **mat_set_name -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_matf_set_info" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H deleted file mode 100644 index 9f4bf9c8cd0296cb75339c571b2ff83e02afc877..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H +++ /dev/null @@ -1,15 +0,0 @@ - -int USERD_get_matf_var_info -( - int set_index, - int *mat_ids, - char **mat_desc -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_matf_var_info" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H deleted file mode 100644 index aab4c0c90345adea610aa9e5e83059a4c1cb0f38..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H +++ /dev/null @@ -1,102 +0,0 @@ -int USERD_get_maxsize_info -( - int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3] -) -{ - return Z_ERR; - -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_maxsize_info" << endl; -#endif - - label maxNPoints = 0; - label maxNParcels = 0; - - label nPen06Max = 0; - label nHex08Max = 0; - label nPyr05Max = 0; - label nTet04Max = 0; - - Info<< "Checking all time steps for EnSight memory allocation purpose. " - << "This can take some time." << endl; - - for (label timeI=1; timeI < timeDirs.size(); ++timeI) - { - - label nPen06 = 0; - label nHex08 = 0; - label nPyr05 = 0; - label nTet04 = 0; - - runTimePtr->setTime(timeDirs[timeI], timeI); - - Info<< "Checking time = " << runTimePtr->timeName() << endl; - - const cellShapeList& cells = meshPtr->cellShapes(); - - const label nPoints = meshPtr->nPoints(); - const label nCells = cells.size(); - - maxNPoints = max(maxNPoints, nPoints); - - for (label n=0; n<nCells;n++) - { - label nFaces = cells[n].nFaces(); - const labelList& points = cells[n]; - - if ((nFaces == 6) && (points.size() == 8)) - { - nHex08++; - } - else if ((nFaces == 5) && (points.size() == 6)) - { - nPen06++; - } - else if ((nFaces == 5) && (points.size() == 5)) - { - nPyr05++; - } - else if ((nFaces == 4) && (points.size() == 4)) - { - nTet04++; - } - } - - nPen06Max = max(nPen06Max, nPen06); - nHex08Max = max(nHex08Max, nHex08); - nPyr05Max = max(nPyr05Max, nPyr05); - nTet04Max = max(nTet04Max, nTet04); - - if (Numparts_available > 1) - { - // Get the maximum number of spray parcels - // and store it - Cloud<passiveParticle> lagrangian(*meshPtr, cloud::defaultName); - - if (lagrangian.size() > nMaxParcels) - { - nMaxParcels = lagrangian.size(); - } - } - } - - max_number_of_nodes[0] = maxNPoints; - max_number_of_elements[0][Z_HEX08] = nHex08Max; - max_number_of_elements[0][Z_PEN06] = nPen06Max; - max_number_of_elements[0][Z_PYR05] = nPyr05Max; - max_number_of_elements[0][Z_TET04] = nTet04Max; - - if (Numparts_available > 1) - { - max_number_of_nodes[1] = maxNParcels; - max_number_of_elements[1][Z_POINT] = maxNParcels; - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_maxsize_info" << endl; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H deleted file mode 100644 index b78438ae7d70e36a5b18e2dd3c9b56dcc7c93379..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H +++ /dev/null @@ -1,15 +0,0 @@ - -// Not used. Let EnSight do the job. - -int USERD_get_model_extents -( - float extents[6] -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_model_extents" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H deleted file mode 100644 index c055407b534cabf180ba87d09a85db9228d63ca8..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H +++ /dev/null @@ -1,18 +0,0 @@ -//====================================================================== -// Setting name in the gui, and specifying one or two input fields -//====================================================================== -int USERD_get_name_of_reader -( - char reader_name[Z_MAX_USERD_NAME], - int *two_fields -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_name_of_reader" << endl << flush; -#endif - - strncpy(reader_name, readerName, Z_MAX_USERD_NAME); - *two_fields = FALSE; - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H deleted file mode 100644 index 436d68d2591796cf55892afdc489faf3f8f97cd4..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H +++ /dev/null @@ -1,79 +0,0 @@ - -int USERD_get_nfaced_conn -( - int part_number, - int *nfaced_conn_array -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_nfaced_conn" - << ", part_number = " << part_number - << endl - << flush; -#endif - - if (part_number == 1) - { - label nPoint = 0; - const cellShapeList& cellShapes = meshPtr->cellShapes(); - const cellList& cells = meshPtr->cells(); - const faceList& faces = meshPtr->faces(); - label nCells = cellShapes.size(); - - for (label n=0; n<nCells; n++) - { - label nFacesInCell = cells[n].size(); - labelList points = cellShapes[n]; - if ((nFacesInCell == 6) && (points.size() == 8)) - {} - else if ((nFacesInCell == 4) && (points.size() == 4)) - {} - else if (nFacesInCell == 5) - { - if (points.size() == 6) - {} - else if (points.size() == 5) - {} - else - { - for (label i=0; i<nFacesInCell; i++) - { - label facei = cells[n][i]; - label nPoints = faces[facei].size(); - for (label j=0; j<nPoints; j++) - { - nfaced_conn_array[nPoint++] = faces[facei][j] + 1; - } - } - } - } - else - { - for (label i=0; i<nFacesInCell; i++) - { - label facei = cells[n][i]; - label nPoints = faces[facei].size(); - for (label j=0; j<nPoints; j++) - { - nfaced_conn_array[nPoint++] = faces[facei][j] + 1; - } - } - } - } - - } - else if (part_number < nPatches+2) - { - - } - else - { - return Z_ERR; - } - -#ifdef ENSIGHTDEBUG - Info<< "Exiting: USERD_get_nfaced_conn" << endl - << flush; -#endif - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H deleted file mode 100644 index 335f928516a0f92fc2aa0b0f7f2df0fc5aaa151f..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H +++ /dev/null @@ -1,74 +0,0 @@ - -int USERD_get_nfaced_nodes_per_face -( - int part_number, - int *nfaced_npf_array -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_nfaced_nodes_per_face" - << ", part_number = " << part_number - << endl - << flush; -#endif - - if (part_number == 1) - { - const cellShapeList& cellShapes = meshPtr->cellShapes(); - const cellList& cells = meshPtr->cells(); - const faceList& faces = meshPtr->faces(); - - label nCells = cellShapes.size(); - label nFaced = 0; - for (label n=0; n<nCells; n++) - { - label nFacesInCell = cells[n].size(); - labelList points = cellShapes[n]; - label nPoints = points.size(); - - if ((nFacesInCell == 6) && (nPoints == 8)) - {} - else if ((nFacesInCell == 4) && (nPoints == 4)) - {} - else if (nFacesInCell == 5) - { - if (nPoints == 6) - {} - else if (nPoints == 5) - {} - else - { - for (label i=0; i<nFacesInCell; i++) - { - label facei = cells[n][i]; - label nFacePoints = faces[facei].size(); - nfaced_npf_array[nFaced++] = nFacePoints; - } - } - } - else - { - for (label i=0; i<nFacesInCell; i++) - { - label facei = cells[n][i]; - label nFacePoints = faces[facei].size(); - nfaced_npf_array[nFaced++] = nFacePoints; - } - } - } - - } - else if (part_number < nPatches+2) - { - return Z_ERR; - } - else - { - return Z_ERR; - } -#ifdef ENSIGHTDEBUG - Info<< "Exiting: USERD_get_nfaced_nodes_per_face" << endl - << flush; -#endif - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H deleted file mode 100644 index bd0d977c76b7e9f6706d64b51bb816703d703a7e..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H +++ /dev/null @@ -1,11 +0,0 @@ -//====================================================================== -// if TRUE: set in USERD_get_global_node_ids -//====================================================================== -int USERD_get_node_label_status(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_node_label_status" << endl << flush; -#endif - - return TRUE; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H deleted file mode 100644 index 9557b5ae532f445f9d8ea599ec423df24aa4e775..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H +++ /dev/null @@ -1,49 +0,0 @@ -int USERD_get_nsided_conn -( - int part_number, - int *nsided_conn_array -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_nsided_conn" - << ", part_number = " << part_number - << endl - << flush; -#endif - if (part_number == 1) - { - Info<< "************* EEEEEEEEERRRRRRRRRRRRRRRRRR *************** " - << endl << flush; - - } - else if (part_number < nPatches+2) - { - //const cellList& cells = meshPtr->cells(); - //const faceList& faces = meshPtr->faces(); - - label patchi = part_number - 2; - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - - label np = 0; - forAll(bMesh[patchi], facei) - { - label nPoints = bMesh[patchi][facei].size(); - if ((nPoints != 3) && (nPoints != 4)) - { - for (label i=0; i<nPoints; i++) - { - nsided_conn_array[np++] = bMesh[patchi][facei][i] + 1; - } - } - } - } - else if (part_number == nPatches+2) - { - return Z_ERR; - } -#ifdef ENSIGHTDEBUG - Info<< "Exiting: USERD_get_nsided_conn" << endl - << flush; -#endif - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H deleted file mode 100644 index 37a1a5c06e00f54e94f085332cdc59def3702e3c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H +++ /dev/null @@ -1,15 +0,0 @@ -//====================================================================== -// don't use multiple time sets...NN -//====================================================================== -int USERD_get_num_of_time_steps -( - int timeset_number -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_num_of_time_steps" << endl - << flush; -#endif - - return Num_time_steps; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H deleted file mode 100644 index ed936ee082ac5bc8b63f8259e8932f63d184f27f..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H +++ /dev/null @@ -1,13 +0,0 @@ -//====================================================================== -// -//====================================================================== -int USERD_get_number_of_files_in_dataset(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_files_in_dataset" << endl << flush; -#endif - - // use 1 insted of 0 which gives an un-necessary warning. - Num_dataset_files = 1; - return Num_dataset_files; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H deleted file mode 100644 index f8a0477645515bcae9742a5c772a4556df075bce..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H +++ /dev/null @@ -1,14 +0,0 @@ - -int USERD_get_number_of_material_sets -( - void -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_material_sets" << endl - << flush; -#endif - - // No materials - return 0; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H deleted file mode 100644 index 98162b2e11f45d727fd6d6cd4d2d0a0bb67d019c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H +++ /dev/null @@ -1,14 +0,0 @@ - -int USERD_get_number_of_materials -( - int set_index -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_materials" << endl - << flush; -#endif - - // No materials - return 0; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H deleted file mode 100644 index cef0a64b1cd10403128440ccdecf6d8d0a51a275..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H +++ /dev/null @@ -1,9 +0,0 @@ - -int USERD_get_number_of_model_parts(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_model_parts" << endl << flush; -#endif - - return Numparts_available; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H deleted file mode 100644 index acb342135714809739f7724dc0f1dab0a55bae88..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H +++ /dev/null @@ -1,9 +0,0 @@ -//====================================================================== -int USERD_get_number_of_variables(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_variables" << endl << flush; -#endif - - return Num_variables; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H deleted file mode 100644 index e4fc922fbd5d6a088a31a10fa58a4a896097d6f1..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H +++ /dev/null @@ -1,13 +0,0 @@ -int USERD_get_number_of_timesets -( - void -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_number_of_timesets" << endl - << flush; -#endif - - Num_timesets = 1; - return Num_timesets; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H deleted file mode 100644 index 9cc17a1ec6f00d9061101f72d6dd199f02a8b57f..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H +++ /dev/null @@ -1,64 +0,0 @@ -// Note: coord_array is 1-based. - -int USERD_get_part_coords -( - int part_number, - float **coord_array -) -{ - #ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_part_coords" << endl << - "part_number = " << part_number << endl << flush; - #endif - - if (part_number == 1) - { - const vectorField& points = meshPtr->points(); - label nPoints = points.size(); - - for (label indx=0; indx<nPoints; indx++) - { - coord_array[0][indx+1] = float(points[indx].x()); - coord_array[1][indx+1] = float(points[indx].y()); - coord_array[2][indx+1] = float(points[indx].z()); - } - } - else if (part_number < nPatches+2) - { - label patchi = part_number-2; - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - const vectorField& points = bMesh[patchi].points(); - label nPoints = points.size(); - - for (label indx=0; indx<nPoints; indx++) - { - coord_array[0][indx+1] = float(points[indx].x()); - coord_array[1][indx+1] = float(points[indx].y()); - coord_array[2][indx+1] = float(points[indx].z()); - } - - } - else if (part_number == nPatches+2) - { - label indx = 1; - - forAllConstIter(Cloud<passiveParticle>, *sprayPtr, iter) - { - coord_array[0][indx] = float(iter().position().x()); - coord_array[1][indx] = float(iter().position().y()); - coord_array[2][indx] = float(iter().position().z()); - indx++; - } - - } - else - { - return Z_ERR; - } - - #ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_part_coords" << endl << flush; - #endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H deleted file mode 100644 index 06759502390d76dd6fe4d5f8bc6a9db33b145cf9..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H +++ /dev/null @@ -1,162 +0,0 @@ -int USERD_get_part_element_ids_by_type -( - int part_number, - int element_type, - int *elemid_array -) -{ - -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_part_element_ids_by_type" << endl - << "part_number = " << part_number << endl - << "element_type = " << element_type << endl << flush; -#endif - - if (part_number == 1) - { - const cellShapeList& cellShapes = meshPtr->cellShapes(); - const cellList& cells = meshPtr->cells(); - - label nCells = cells.size(); - - label nPen06 = 0; - label nHex08 = 0; - label nPyr05 = 0; - label nTet04 = 0; - label nFaced = 0; - - if (element_type == Z_HEX08) - { - for (label n=0; n<nCells; n++) - { - label nFaces = cells[n].size(); - labelList points = cellShapes[n]; - - if ((nFaces == 6) && (points.size() == 8)) - { - elemid_array[nHex08++] = n + 1; - } - } - } - else if (element_type == Z_PEN06) - { - for (label n=0; n<nCells; n++) - { - label nFaces = cells[n].size(); - labelList points = cellShapes[n]; - - if ((nFaces == 5) && (points.size() == 6)) - { - elemid_array[nPen06++] = n + 1; - } - } - } - else if (element_type == Z_PYR05) - { - for (label n=0; n<nCells; n++) - { - label nFaces = cells[n].size(); - labelList points = cellShapes[n]; - - if ((nFaces == 5) && (points.size() == 5)) - { - elemid_array[nPyr05++] = n + 1; - } - } - } - else if (element_type == Z_TET04) - { - for (label n=0; n<nCells; n++) - { - label nFaces = cells[n].size(); - labelList points = cellShapes[n]; - - if ((nFaces == 4) && (points.size() == 4)) - { - elemid_array[nTet04++] = n + 1; - } - } - } - else if (element_type == Z_NFACED) - { - for (label n=0; n<nCells; n++) - { - label nFaces = cells[n].size(); - labelList points = cellShapes[n]; - if ((nFaces == 6) && (points.size() == 8)) - {} - else if ((nFaces == 5) && (points.size() == 6)) - {} - else if ((nFaces == 5) && (points.size() == 5)) - {} - else if ((nFaces == 4) && (points.size() == 4)) - {} - else - { - elemid_array[nFaced++] = n + 1; - } - - } - } - } - else if (part_number < nPatches+2) - { - - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - label patchi = part_number - 2; - - label nTri03 = 0; - label nQuad04 = 0; - label nPoly = 0; - - if (element_type == Z_TRI03) - { - forAll(bMesh[patchi], facei) - { - if (bMesh[patchi][facei].size() == 3) - { - elemid_array[nTri03++] = facei + 1; - } - } - } - else if (element_type == Z_QUA04) - { - forAll(bMesh[patchi], facei) - { - if (bMesh[patchi][facei].size() == 4) - { - elemid_array[nQuad04++] = facei + 1; - } - } - } - else if (element_type == Z_NSIDED) - { - forAll(bMesh[patchi], facei) - { - label nPoints = bMesh[patchi][facei].size(); - if ((nPoints != 3) && (nPoints != 4)) - { - elemid_array[nPoly++] = facei + 1; - } - } - } - - } - else if (part_number == nPatches+2) - { - forAll(*sprayPtr, n) - { - elemid_array[n] = n + 1; - } - } - else - { - return Z_ERR; - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_part_element_ids_by_type" << endl << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H deleted file mode 100644 index 0fafe21207f49ab490d806f7fd0479dc7fb65c14..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H +++ /dev/null @@ -1,252 +0,0 @@ -int USERD_get_part_elements_by_type -( - int part_number, - int element_type, - int **conn_array -) -{ - #ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_part_elements_by_type" << nl - << "part_number = " << part_number << nl - << "element_type = " << element_type; - if (element_type == Z_HEX08) - { - Info<< " Z_HEX08"; - } - else if (element_type == Z_PEN06) - { - Info<< " Z_PEN06"; - } - else if (element_type == Z_PYR05) - { - Info<< " Z_PYR05"; - } - else if (element_type == Z_TET04) - { - Info<< " Z_TET04"; - } - else if (element_type == Z_TRI03) - { - Info<< " Z_TRI03"; - } - else if (element_type == Z_QUA04) - { - Info<< " Z_QUA04"; - } - else if (element_type == Z_NFACED) - { - Info<< " Z_NFACED"; - } - else if (element_type == Z_NSIDED) - { - Info<< " Z_NSIDED"; - } - else - { - Info<< " unknown"; - } - Info<< endl << flush; - #endif - - if (part_number == 1) - { - const cellShapeList& cellShapes = meshPtr->cellShapes(); - - //================================ - // hexahedron - //================================ - if (element_type == Z_HEX08) - { - const cellModel& hex = cellModel::ref(cellModel::HEX); - - label nHex08 = 0; - forAll(cellShapes, celli) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == hex) - { - forAll(cellShape, ip) - { - conn_array[nHex08][ip] = cellShape[ip] + 1; - } - nHex08++; - } - } - } - //================================ - // pentahedron - //================================ - else if (element_type == Z_PEN06) - { - const cellModel& prism = cellModel::ref(cellModel::PRISM); - - label nPen06 = 0; - forAll(cellShapes, celli) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == prism) - { - forAll(cellShape, ip) - { - conn_array[nPen06][ip] = cellShape[ip] + 1; - } - nPen06++; - } - } - } - //================================ - // pyramid - //================================ - else if (element_type == Z_PYR05) - { - const cellModel& pyr = cellModel::ref(cellModel::PYR); - - label nPyr05 = 0; - forAll(cellShapes, celli) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == pyr) - { - forAll(cellShape, ip) - { - conn_array[nPyr05][ip] = cellShape[ip] + 1; - } - nPyr05++; - } - } - } - //================================ - // tetrahedron - //================================ - else if (element_type == Z_TET04) - { - const cellModel& tet = cellModel::ref(cellModel::TET); - - label nTet04 = 0; - forAll(cellShapes, celli) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == tet) - { - forAll(cellShape, ip) - { - conn_array[nTet04][ip] = cellShape[ip] + 1; - } - nTet04++; - } - } - } - //================================ - // polyhedra - //================================ - else - { - label nCells = cellShapes.size(); - label nFaced = 0; - const cellList cells = meshPtr->cells(); - - for (label n=0; n<nCells; n++) - { - label nFacesInCell = cells[n].size(); - labelList points = cellShapes[n]; - if ((nFacesInCell == 6) && (points.size() == 8)) - {} - else if ((nFacesInCell == 4) && (points.size() == 4)) - {} - else if (nFacesInCell == 5) - { - if (points.size() == 6) - {} - else if (points.size() == 5) - {} - else - { - conn_array[nFaced++][0] = nFacesInCell; - } - } - else - { - conn_array[nFaced++][0] = nFacesInCell; - } - } - } - } - else if (part_number < nPatches+2) - { - label patchi = part_number - 2; - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - - label nTri03 = 0; - label nQuad04 = 0; - if (element_type == Z_TRI03) - { - forAll(bMesh[patchi], n) - { - label nPoints = bMesh[patchi][n].size(); - if (nPoints == 3) - { - for (label i=0; i<nPoints; i++) - { - label ip = bMesh[patchi][n][i]; - conn_array[nTri03][i] = ip + 1; - } - nTri03++; - } - } - } - else if (element_type == Z_QUA04) - { - forAll(bMesh[patchi], n) - { - label nPoints = bMesh[patchi][n].size(); - if (nPoints == 4) - { - for (label i=0; i<nPoints; i++) - { - label ip = bMesh[patchi][n][i]; - conn_array[nQuad04][i] = ip + 1; - } - nQuad04++; - } - } - - } - else if (element_type == Z_NSIDED) - { - label nPoly = 0; - forAll(bMesh[patchi], n) - { - label nPoints = bMesh[patchi][n].size(); - if ((nPoints != 3) && (nPoints != 4)) - { - conn_array[nPoly++][0] = nPoints; - } - } - } - } - else if (part_number == nPatches+2) - { - forAll(*sprayPtr, n) - { - conn_array[n][0] = n + 1; - } - } - else - { - return Z_ERR; - } - - #ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_part_elements_by_type" << endl; - #endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H deleted file mode 100644 index b270a1b57b0658ebb3208c7277f90d5fc1724890..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H +++ /dev/null @@ -1,56 +0,0 @@ -int USERD_get_part_node_ids -( - int part_number, - int *nodeid_array -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_part_node_ids" << endl - << "part_number = " << part_number << endl - << flush; -#endif - - if (part_number == 1) - { - for (label indx=0; indx<Num_global_nodes; indx++) - { - nodeid_array[indx] = indx + 1; - } - } - else if (part_number < nPatches+2) - { - - label patchi = part_number-2; - const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - const vectorField& points = bMesh[patchi].points(); - - label nPoints = points.size(); - - for (label indx=0; indx<nPoints; indx++) - { - nodeid_array[indx] = indx + 1; - } - - } - else if (part_number == nPatches+2) - { - label indx = 0; - - forAllConstIter(Cloud<passiveParticle>, *sprayPtr, iter) - { - nodeid_array[indx] = indx + 1; - indx++; - } - } - else - { - return Z_ERR; - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_part_node_ids" << endl - << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H deleted file mode 100644 index 13c43b1b66ea60726e5cb646eaa5ec07f1035ad3..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H +++ /dev/null @@ -1,27 +0,0 @@ -int USERD_get_reader_release -( - char release_number[Z_MAX_USERD_NAME] -) -{ - -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_reader_release" << endl; -#endif - - strncpy - ( - release_number, - #if OPENFOAM - ("OpenFOAM-" + std::to_string(OPENFOAM)).c_str(), - #else - "OpenFOAM-unknown", - #endif - Z_MAX_USERD_NAME - ); - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_reader_release" << endl; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H deleted file mode 100644 index a8fd102fe3b6fc380123b6fc20c00618c0622673..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H +++ /dev/null @@ -1,18 +0,0 @@ -int USERD_get_reader_version -( - char version_number[Z_MAX_USERD_NAME] -) -{ - -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_reader_version" << endl; -#endif - - strncpy(version_number, readerVersion, Z_MAX_USERD_NAME); - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_reader_version" << endl; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H deleted file mode 100644 index 8c71ca3b9abd7069f4d2dc5a25d827a186c30157..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H +++ /dev/null @@ -1,43 +0,0 @@ -//====================================================================== -// Negative values of the time is not allowed in EnSight. -// So for engines, where the time is CAD's we need to correct -// this so that all CAD's are positive. NN -//====================================================================== -int USERD_get_sol_times -( - int timeset_number, - float *solution_times -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_sol_times\n" << timeDirs << endl; -#endif - - for (label n=0; n<Num_time_steps;n++) - { - solution_times[n] = timeDirs[n+1].value(); - } - - if (timeDirs[1].value() < 0) - { - scalar addCAD = 360.0; - while (timeDirs[1].value() + addCAD < 0.0) - { - addCAD += 360.0; - } - for (label n=0; n<Num_time_steps;n++) - { - solution_times[n] += addCAD; - - Info<< "Time[" << n << "] = " << timeDirs[n+1].value() - << " was corrected to " << solution_times[n] << endl; - } - - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_sol_times" << endl; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_timeset_description.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_timeset_description.H deleted file mode 100644 index e3c98ba240127ba9047968c11c5a162113632bc9..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_timeset_description.H +++ /dev/null @@ -1,26 +0,0 @@ -int USERD_get_timeset_description -( - int timeset_number, - char timeset_description[Z_BUFL] -) -{ - -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_timeset_description" << endl; -#endif - - if (timeDirs[1].value() < 0) - { - strncpy(timeset_description, "CAD", Z_BUFL); - } - else - { - strncpy(timeset_description, "seconds", Z_BUFL); - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_timeset_description" << endl; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H deleted file mode 100644 index f6c437450f123ea6adad49f3ac9f8dd755c9c356..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H +++ /dev/null @@ -1,103 +0,0 @@ -int USERD_get_var_by_component -( - int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_var_by_component" << endl - << "which_variable = " << which_variable << endl - << "which_part = " << which_part << endl - << "var_type = " << var_type << endl - << "which_type = " << which_type << endl - << "component = " << component << endl - << flush; -#endif - - label nVar = which_variable - 1; - - Time& runTime = *runTimePtr; - - fvMesh& mesh = *meshPtr; - const cellShapeList& cells = mesh.cellShapes(); - - label nCells = cells.size(); - - if (var_type == Z_SCALAR) - { - if (which_part == 1) - { - #include "getFieldScalar.H" - } - else if (which_part < nPatches+2) - { - #include "getPatchFieldScalar.H" - } - else if (which_part == nPatches+2) - { - #include "getLagrangianScalar.H" - } - else - { - return Z_ERR; - } - } - else if (var_type == Z_VECTOR) - { - if (which_part == 1) - { - #include "getFieldVector.H" - } - else if (which_part < nPatches+2) - { - #include "getPatchFieldVector.H" - } - else if (which_part == nPatches+2) - { - #include "getLagrangianVector.H" - } - else - { - return Z_ERR; - } - - } - else if (var_type == Z_TENSOR9) - { - // all tensor are treated as asymmetric tensors here - - if (which_part == 1) - { - #include "getFieldTensor.H" - } - else if (which_part < nPatches+2) - { - #include "getPatchFieldTensor.H" - } - else if (which_part == nPatches+2) - { - return Z_UNDEF; - } - else - { - return Z_ERR; - } - - } - else - { - return Z_UNDEF; - } - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_var_by_component" << endl - << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H deleted file mode 100644 index c7b5a92ae66e2222301aac6303546a65c5d998d2..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H +++ /dev/null @@ -1,70 +0,0 @@ -//====================================================================== -int USERD_get_var_value_at_specific -( - int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_get_var_value_at_specific" << endl - << flush; -#endif - // Not sure if it is 0 or 1 based - - label nNode = which_node_or_elem; - label nVar = which_var - 1; - - fvMesh& mesh = *meshPtr; - - if (nVar < Num_variables - nSprayVariables) - { - Time& runTime = *runTimePtr; - - IOobject fieldObject - ( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (isScalar[nVar]) - { - volScalarField scalarField(fieldObject,mesh); - values[0] = scalarField[nNode]; - } - else if (isVector[nVar]) - { - volVectorField vectorField(fieldObject,mesh); - values[0] = vectorField[nNode].x(); - values[1] = vectorField[nNode].y(); - values[2] = vectorField[nNode].z(); - } - else - { - Info<< "ERROR in USERD_get_variable_value_at_specific. " - << "No available variable???" - << endl; - return Z_ERR; - } - } - else - { - Info<< "This functionality is not implemented yet." - << endl; - return Z_ERR; - } - - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_get_var_value_at_specific" << endl - << flush; -#endif - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H deleted file mode 100644 index c89cc5f253cfcce257f3740029d5eaf176c21780..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H +++ /dev/null @@ -1,18 +0,0 @@ - -int USERD_load_matf_data -( - int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_load_matf_data" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H deleted file mode 100644 index a5d8986a7508104dd9ff612005afb9e351d41359..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H +++ /dev/null @@ -1,222 +0,0 @@ -//====================================================================== -// Setting filenames -//====================================================================== -int USERD_set_filenames -( - char filename_1[], - char filename_2[], - char the_path[], - int swapbytes -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_set_filenames" << endl << flush; -#endif - - char tmp[100]; - - label lRoot = strlen(the_path); - label lCase = strlen(filename_1); - - bool cleared = false; - - while (!cleared) - { - lRoot = strlen(the_path); - lCase = strlen(filename_1); - - // remove the last '/' from rootDir - if (the_path[lRoot-1] == '/') - { - the_path[lRoot-1] = '\0'; - } - else - { - cleared = true; - } - } - - rootDir = the_path; - - // the path is pre-pended to filename_1 - // 1 is the 'Geometry' : 2 the 'Result' which is null here - // since two_field is FALSE - for (label i=0; i<lCase-lRoot;i++) - { - tmp[i] = filename_1[i+1+lRoot]; - } - caseDir = tmp; - - if (!isDir(rootDir/caseDir)) - { - Info<< rootDir/caseDir << " is not a valid directory." - << endl; - return Z_ERR; - } - - // construct the global pointers to the database and mesh - - delete meshPtr; - delete runTimePtr; - - runTimePtr = new Time - ( - Time::controlDictName, - rootDir, - caseDir - ); - - Time& runTime = *runTimePtr; - - meshPtr = new fvMesh - ( - IOobject - ( - fvMesh::defaultRegion, - runTime.timeName(), - runTime - ) - ); - - // set the available number of time-steps - timeDirs = Foam::Time::findTimes(rootDir/caseDir); - - Num_time_steps = timeDirs.size() - 1; - - nPatches = meshPtr->boundaryMesh().size(); - - // set the number of fields and store their names - // a valid field must exist for all time-steps - runTime.setTime(timeDirs.last(), timeDirs.size()-1); - IOobjectList objects(*meshPtr, runTime.timeName()); - - fieldNames = objects.names(); - - // because of the spray being a 'field' ... - // get the availabe number of variables and - // check for type (scalar/vector/tensor) - - label nVar = 0; - wordList scalars = objects.names(scalarName); - - forAll(fieldNames, n) - { - bool isitScalar = false; - forAll(scalars,i) - { - if (fieldNames[n] == scalars[i]) - { - isitScalar = true; - var2field[nVar++] = n; - } - } - isScalar[n] = isitScalar; - } - - wordList vectors = objects.names(vectorName); - - forAll(fieldNames, n) - { - bool isitVector = false; - forAll(vectors,i) - { - if (fieldNames[n] == vectors[i]) - { - isitVector = true; - var2field[nVar++] = n; - } - } - isVector[n] = isitVector; - } - - wordList tensors = objects.names(tensorName); - - forAll(fieldNames, n) - { - bool isitTensor = false; - forAll(tensors,i) - { - if (fieldNames[n] == tensors[i]) - { - isitTensor = true; - var2field[nVar++] = n; - } - } - isTensor[n] = isitTensor; - } - - bool lagrangianNamesFound = false; - label n = 0; - while (!lagrangianNamesFound && n < Num_time_steps) - { - runTime.setTime(timeDirs[n+1], n+1); - - Cloud<passiveParticle> lagrangian(*meshPtr, cloud::defaultName); - - n++; - if (lagrangian.size()) - { - lagrangianNamesFound = true; - } - } - - IOobject positionsHeader - ( - "positions", - runTime.timeName(), - cloud::prefix, - runTime, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ); - - IOobject coordinatesHeader - ( - "coordinates", - runTime.timeName(), - cloud::prefix, - runTime, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ); - - if - ( - positionsHeader.typeHeaderOk<Cloud<passiveParticle>>(false) - || coordinatesHeader.typeHeaderOk<Cloud<passiveParticle>>(false) - ) - { - Info<< "[Found lagrangian]" << endl; - - delete sprayPtr; - - sprayPtr = new Cloud<passiveParticle>(*meshPtr, cloud::defaultName); - - IOobjectList objects(*meshPtr, runTime.timeName(), cloud::prefix); - - lagrangianScalarNames = objects.names(sprayScalarFieldName); - lagrangianVectorNames = objects.names(sprayVectorFieldName); - - isSpray[fieldNames.size()] = true; - - nSprayVariables += lagrangianScalarNames.size(); - nSprayVariables += lagrangianVectorNames.size(); - - Num_unstructured_parts++; - } - - Current_time_step = Num_time_steps; - runTime.setTime(timeDirs[Current_time_step], Current_time_step); - - Num_variables = nVar + nSprayVariables; - Numparts_available = - Num_unstructured_parts + Num_structured_parts + nPatches; - -#ifdef ENSIGHTDEBUG - Info<< "Leaving: USERD_set_filenames" << endl << flush; -#endif - - return Z_OK; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H deleted file mode 100644 index f0ff4b24fceb4c348f479f20316d597b318e8660..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H +++ /dev/null @@ -1,12 +0,0 @@ -void USERD_set_server_number -( - int cur_serv, - int tot_serv -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_set_server_number" << endl - << flush; -#endif - -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H deleted file mode 100644 index 7bc4ba1c5c4bb6175b9ad8aade7af247111bfde8..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H +++ /dev/null @@ -1,55 +0,0 @@ -//====================================================================== -void USERD_set_time_set_and_step -( - int timeset_number, - int time_step -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_set_time_set_and_step" << endl << flush; -#endif - // update the global pointers and variables - // to the current time-step - - // at exit time_step < 0 - if (time_step >= 0) - { - Time& runTime = *runTimePtr; - Current_time_step = time_step; - // add 1, since the first timestep is 'constant' - - if (time_step == 0) - { - runTime.setTime - ( - timeDirs[Current_time_step], - Current_time_step - ); - } - else - { - runTime.setTime - ( - timeDirs[Current_time_step + 1], - Current_time_step + 1 - ); - } - - meshPtr->readUpdate(); - - if (time_step == 0) - { - runTime.setTime - ( - timeDirs[Current_time_step + 1], - Current_time_step + 1 - ); - } - - if (Numparts_available > nPatches+1) - { - delete sprayPtr; - sprayPtr = new Cloud<passiveParticle>(*meshPtr, cloud::defaultName); - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H deleted file mode 100644 index c48fa13bfb85f1ddfdb3c9c453b17876abe7415a..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H +++ /dev/null @@ -1,17 +0,0 @@ - -int USERD_size_matf_data -( - int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size -) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_size_matf_data" << endl - << flush; -#endif - - return Z_ERR; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H deleted file mode 100644 index c6262b8ee1375a8aafd31981ac67ba5b758cedfd..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H +++ /dev/null @@ -1,8 +0,0 @@ -// Not in use -void USERD_stop_part_building(void) -{ -#ifdef ENSIGHTDEBUG - Info<< "Entering: USERD_stop_part_building" << endl << flush; -#endif - -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_structured_data.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_structured_data.H deleted file mode 100644 index d8a4c90a19fe3d88d6fc2e88e86cee5dcee6c158..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_structured_data.H +++ /dev/null @@ -1,61 +0,0 @@ -int USERD_get_block_vector_values_by_component -( - int block_number, - int which_vector, - int which_component, - float *vector_array -) -{ - return(Z_OK); -} - -int USERD_get_block_coords_by_component -( - int block_number, - int which_component, - float *coord_array -) -{ - return(Z_OK); -} - - -int USERD_get_block_iblanking -( - int block_number, - int *iblank_array -) -{ - return(Z_OK); -} - -int USERD_get_block_scalar_values -( - int block_number, - int which_scalar, - float *scalar_array -) -{ - return(Z_OK); -} -int USERD_get_ghosts_in_model_flag( void ) -{ - return(Z_OK); -} - -int USERD_get_ghosts_in_block_flag -( - int block_number -) -{ - return(Z_OK); -} - -int USERD_get_block_ghost_flags -( - int block_number, - int *ghost_flags -) -{ - return(Z_OK); -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldScalar.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldScalar.H deleted file mode 100644 index 06cf1d8c122d44a5a6a697182b0ec8e30d2419ec..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldScalar.H +++ /dev/null @@ -1,141 +0,0 @@ - -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volScalarField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volScalarField scalarField -( - fieldObject, - mesh -); - -const cellShapeList& cellShapes = meshPtr->cellShapes(); - -// hexa's -if (which_type == Z_HEX08) -{ - const cellModel& hex = cellModel::ref(cellModel::HEX); - //const cellModel& wedge = cellModel::ref(cellModel::WEDGE); - - label counter = 1; - for (label celli=0; celli<nCells; celli++) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == hex) // || (cellModel == wedge)) - { - var_array[counter++] = scalarField[celli]; - } - } -} - -// penta's -if (which_type == Z_PEN06) -{ - const cellModel& prism = cellModel::ref(cellModel::PRISM); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == prism) - { - var_array[counter++] = scalarField[n]; - } - } -} - -// pyramids's -if (which_type == Z_PYR05) -{ - const cellModel& pyr = cellModel::ref(cellModel::PYR); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == pyr) - { - var_array[counter++] = scalarField[n]; - } - } -} - -// tet's -if (which_type == Z_TET04) -{ - const cellModel& tet = cellModel::ref(cellModel::TET); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == tet) - { - var_array[counter++] = scalarField[n]; - } - } -} - -if (which_type == Z_NFACED) -{ - const cellList& cells = meshPtr->cells(); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const labelList& points = cellShapes[n]; - label nFacesInCell = cells[n].size(); - - if ((nFacesInCell == 6) && (points.size() == 8)) - {} - else if ((nFacesInCell == 4) && (points.size() == 4)) - {} - else if (nFacesInCell == 5) - { - if (points.size() == 6) - {} - else if (points.size() == 5) - {} - else - { - var_array[counter++] = scalarField[n]; - } - } - else - { - var_array[counter++] = scalarField[n]; - } - } - -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldTensor.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldTensor.H deleted file mode 100644 index 6c800168a455ed18bc442795fbef21b9c2a6e5ce..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldTensor.H +++ /dev/null @@ -1,142 +0,0 @@ -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volTensorField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volTensorField tf -( - fieldObject, - mesh -); - -const cellShapeList& cellShapes = meshPtr->cellShapes(); - -// hexa's -if (which_type == Z_HEX08) -{ - const cellModel& hex = cellModel::ref(cellModel::HEX); - //const cellModel& wedge = cellModel::ref(cellModel::WEDGE); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == hex) // || (cellModel == wedge)) - { - #include "tensorConversion.H" - } - } -} - -// penta's -if (which_type == Z_PEN06) -{ - const cellModel& prism = cellModel::ref(cellModel::PRISM); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == prism) - { - #include "tensorConversion.H" - } - } -} - -// pyramids's -if (which_type == Z_PYR05) -{ - const cellModel& pyr = cellModel::ref(cellModel::PYR); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == pyr) - { - #include "tensorConversion.H" - } - } -} - - -// penta's -if (which_type == Z_TET04) -{ - const cellModel& tet = cellModel::ref(cellModel::TET); - - label counter = 1; - - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == tet) - { - #include "tensorConversion.H" - } - } -} - -if (which_type == Z_NFACED) -{ - const cellList& cells = meshPtr->cells(); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const labelList& points = cellShapes[n]; - label nFacesInCell = cells[n].size(); - - if ((nFacesInCell == 6) && (points.size() == 8)) - {} - else if ((nFacesInCell == 4) && (points.size() == 4)) - {} - else if (nFacesInCell == 5) - { - if (points.size() == 6) - {} - else if (points.size() == 5) - {} - else - { - #include "tensorConversion.H" - } - } - else - { - #include "tensorConversion.H" - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldVector.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldVector.H deleted file mode 100644 index 8f1f0f97da11efdbe37a4d4a8a8f89c792d6ac83..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getFieldVector.H +++ /dev/null @@ -1,141 +0,0 @@ -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volVectorField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volVectorField vectorField -( - fieldObject, - mesh -); - -const cellShapeList& cellShapes = meshPtr->cellShapes(); - -// hexa's -if (which_type == Z_HEX08) -{ - const cellModel& hex = cellModel::ref(cellModel::HEX); - //const cellModel& wedge = cellModel::ref(cellModel::WEDGE); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == hex) // || (cellModel == wedge)) - { - var_array[counter++] = vectorField[n][component]; - } - } -} - -// penta's -if (which_type == Z_PEN06) -{ - const cellModel& prism = cellModel::ref(cellModel::PRISM); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == prism) - { - var_array[counter++] = vectorField[n][component]; - } - } -} - -// pyramids's -if (which_type == Z_PYR05) -{ - const cellModel& pyr = cellModel::ref(cellModel::PYR); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == pyr) - { - var_array[counter++] = vectorField[n][component]; - } - } -} - - -// tet's -if (which_type == Z_TET04) -{ - const cellModel& tet = cellModel::ref(cellModel::TET); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const cellShape& cellShape = cellShapes[n]; - const cellModel& cellModel = cellShape.model(); - - if (cellModel == tet) - { - var_array[counter++] = vectorField[n][component]; - } - } -} - -if (which_type == Z_NFACED) -{ - const cellList& cells = meshPtr->cells(); - - label counter = 1; - for (label n=0; n<nCells; n++) - { - const labelList& points = cellShapes[n]; - label nFacesInCell = cells[n].size(); - - if ((nFacesInCell == 6) && (points.size() == 8)) - {} - else if ((nFacesInCell == 4) && (points.size() == 4)) - {} - else if (nFacesInCell == 5) - { - if (points.size() == 6) - {} - else if (points.size() == 5) - {} - else - { - var_array[counter++] = vectorField[n][component]; - } - } - else - { - var_array[counter++] = vectorField[n][component]; - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H deleted file mode 100644 index b853ac7147bc70b3b404173f7cafe6f8983b9bac..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H +++ /dev/null @@ -1,34 +0,0 @@ - -// Not sure if this is necessary anymore -nVar -= Num_variables - nSprayVariables; - -if (nVar >= 0) -{ - word name = lagrangianScalarNames[nVar]; - - IOField<scalar> s - ( - IOobject - ( - name, - runTime.timeName(), - cloud::prefix, - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); - - if (s.size()) - { - forAll(s, n) - { - var_array[n+1] = s[n]; - } - } -} -else -{ - // Info<< "getLagrangianScalar: nVar = " << nVar << endl; - return Z_UNDEF; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianVector.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianVector.H deleted file mode 100644 index de1d12aa376b51b1fbd67e4470b5fd1c517b10d4..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianVector.H +++ /dev/null @@ -1,46 +0,0 @@ - -// Not sure if this is necessary anymore - -nVar -= Num_variables - nSprayVariables + lagrangianScalarNames.size(); - -if (nVar >= 0) -{ - word name = lagrangianVectorNames[nVar]; - - IOField<vector> v - ( - IOobject - ( - name, - runTime.timeName(), - cloud::prefix, - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); - - if (v.size()) - { - forAll(v, n) - { - if (component == 0) - { - var_array[n+1] = v[n].x(); - } - else if (component == 1) - { - var_array[n+1] = v[n].y(); - } - else if (component == 2) - { - var_array[n+1] = v[n].z(); - } - } - } -} -else -{ - // Info<< "getLagrangianVector: nVar = " << nVar << endl; - return Z_UNDEF; -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldScalar.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldScalar.H deleted file mode 100644 index 549a80f64f122520d45ac413f98956a6f727cef5..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldScalar.H +++ /dev/null @@ -1,76 +0,0 @@ -label patchi = which_part - 2; - -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volScalarField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volScalarField sf -( - fieldObject, - mesh -); - -const scalarField& sfb = sf.boundaryField()[patchi]; -const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - -if (which_type == Z_TRI03) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if (nPoints == 3) - { - var_array[counter++] = sfb[facei]; - } - } -} - -if (which_type == Z_QUA04) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if (nPoints == 4) - { - var_array[counter++] = sfb[facei]; - } - } -} - -if (which_type == Z_NSIDED) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if (nPoints != 3 && nPoints != 4) - { - var_array[counter++] = sfb[facei]; - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldTensor.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldTensor.H deleted file mode 100644 index 0aed2ac26ebca7ae060ea9020de77e879d71db86..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldTensor.H +++ /dev/null @@ -1,76 +0,0 @@ -label patchi = which_part - 2; - -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volTensorField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volTensorField sf -( - fieldObject, - mesh -); - -const tensorField& tf = sf.boundaryField()[patchi]; -const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - -if (which_type == Z_TRI03) -{ - label counter = 1; - forAll(tf, n) - { - label nPoints = bMesh[patchi][n].size(); - if (nPoints == 3) - { - #include "tensorConversion.H" - } - } -} - -if (which_type == Z_QUA04) -{ - label counter = 1; - forAll(tf, n) - { - label nPoints = bMesh[patchi][n].size(); - if (nPoints == 4) - { - #include "tensorConversion.H" - } - } -} - -if (which_type == Z_NSIDED) -{ - label counter = 1; - forAll(tf, n) - { - label nPoints = bMesh[patchi][n].size(); - if ((nPoints != 3) && (nPoints != 4)) - { - #include "tensorConversion.H" - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldVector.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldVector.H deleted file mode 100644 index 4c6fe3832f9e97442822610287a00a640d818cbb..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getPatchFieldVector.H +++ /dev/null @@ -1,76 +0,0 @@ -label patchi = which_part - 2; - -if (nVar >= Num_variables - nSprayVariables) -{ - return Z_UNDEF; -} - -IOobject fieldObjectPtr -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::NO_READ -); - -if (!fieldObjectPtr.typeHeaderOk<volVectorField>(true)) -{ - return Z_UNDEF; -} - -IOobject fieldObject -( - fieldNames[var2field[nVar]], - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE -); - -volVectorField sf -( - fieldObject, - mesh -); - -const vectorField& sfb = sf.boundaryField()[patchi]; -const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - -if (which_type == Z_TRI03) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if (nPoints == 3) - { - var_array[counter++] = sfb[facei][component]; - } - } -} - -if (which_type == Z_QUA04) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if (nPoints == 4) - { - var_array[counter++] = sfb[facei][component]; - } - } -} - -if (which_type == Z_NSIDED) -{ - label counter = 1; - forAll(sfb, facei) - { - label nPoints = bMesh[patchi][facei].size(); - if ((nPoints != 3) && (nPoints != 4)) - { - var_array[counter++] = sfb[facei][component]; - } - } -} diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/globalFoam.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/globalFoam.H deleted file mode 100644 index 40fb28d94929f62b25f16cf41516dbbff432174a..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/globalFoam.H +++ /dev/null @@ -1,53 +0,0 @@ -//====================================================================== -// Global variables -const int maxNames = 1000; - -// define the name to be displayed in the window. -static char readerName[] = "OpenFOAM"; -static char meshName[] = "cells"; -static char readerVersion[] = "2.03"; - -// everything is one part in OpenFOAM, except the spray -static int Num_unstructured_parts = 1; -static int Num_structured_parts = 0; -static int Numparts_available = 1; -static int nPatches = 0; - -static int Num_timesets = 1; -static int Geom_timeset_number = 1; -static int Num_time_steps = 1; -static int Num_global_nodes = 0; -static int Num_variables = 0; -static int Num_dataset_files = 0; -static int Current_time_step = 0; - -static label nSprayVariables = 0; -static label nMaxParcels = 0; - -static bool isScalar[maxNames]; -static bool isVector[maxNames]; -static bool isTensor[maxNames]; -static bool isSpray[maxNames]; - -static word scalarName = "volScalarField"; -static word vectorName = "volVectorField"; -static word tensorName = "volTensorField"; -static word sprayScalarFieldName = "scalarField"; -static word sprayVectorFieldName = "vectorField"; -static word sprayTensorFieldName = "tensorField"; -static word parcelPrepend = "parcel_"; -static word pointPrepend = "point_"; - -static fileName rootDir; -static fileName caseDir; - -static instantList timeDirs; - -static List<word> fieldNames; -static List<word> lagrangianScalarNames; -static List<word> lagrangianVectorNames; -static label var2field[maxNames]; - -static Time *runTimePtr = 0; -static fvMesh *meshPtr = 0; -static Cloud<passiveParticle> *sprayPtr = 0; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern.h b/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern.h deleted file mode 100644 index e67fd4197ef9a98e0d1f5edb38052ea880429ca3..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern.h +++ /dev/null @@ -1,412 +0,0 @@ -/*--------------------------------------------------------------*/ -/* Header file for EnSight External Reader DSO Library Routines */ -/*--------------------------------------------------------------*/ -/* ************************************************************* - * Copyright 1998 Computational Engineering International, Inc. - * All Rights Reserved. - * - * Restricted Rights Legend - * - * Use, duplication, or disclosure of this - * software and its documentation by the - * Government is subject to restrictions as - * set forth in subdivision [(b)(3)(ii)] of - * the Rights in Technical Data and Computer - * Software clause at 52.227-7013. - * ************************************************************* - */ -#ifndef GLOBAL_EXTERN_H -#define GLOBAL_EXTERN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*-------------------------------- - * Set the reader version define - * (only one can be set at a time) - *--------------------------------*/ -#if 0 -#define USERD_API_100 -#define USERD_API_200 -#define USERD_API_201 -#define USERD_API_202 -#define USERD_API_203 -#define USERD_API_204 -#define USERD_API_205 -#define USERD_API_206 -#define USERD_API_207 -#define USERD_API_208 -#define USERD_API_209 -#define USERD_API_210 -#endif - -/*---------------------------------------*/ -/* True/False and Error conditions, etc. */ -/*---------------------------------------*/ -#define Z_ERR (-1) /*Error return value.*/ -#define Z_OK (1) /*Success return value.*/ -#define Z_UNDEF (2) /*Undefined return value.*/ - -#define Z_NOT_IMPLEMENTED (3) /*Routine not implemented*/ - /*(currently only checked for */ - /* get_var_value_at_specific */ - /* routine)*/ -#ifndef TRUE -# define TRUE (1) -# define FALSE (0) -#endif - -#define Z_BUFL (80) /* Typical string length */ - -#define Z_COMPX (0) /* x component */ -#define Z_COMPY (1) /* y component */ -#define Z_COMPZ (2) /* z component */ - -#define Z_STATIC (0) /* static geometry */ -#define Z_CHANGE_COORDS (1) /* coordinate changing only */ -#define Z_CHANGE_CONN (2) /* conectivity changing */ - -#define Z_GEOM (0) /* Geometry type */ -#define Z_VARI (1) /* Variable type */ - -#define Z_SAVE_ARCHIVE (0) /* Save archive */ -#define Z_REST_ARCHIVE (1) /* Restore archive */ - -#define Z_MAX_USERD_NAME (20) /* max length of reader name */ - -#define Z_PER_NODE (4) /* At Nodes Variable classif. */ -#define Z_PER_ELEM (1) /* At Elements Variable classif.*/ - -#define Z_MAX_SETS (300) - -#define Z_MX_MATERIALS (60) - -#define Z_MXVARIABLEDESC 20 /*Interface Variables Max Name.*/ - -/* Useful macros for handling IEEE floats */ -#define FLT_SGN_MASK 0x80000000U -#define FLT_EXP_MASK 0x7F800000U -#define FLT_MAN_MASK 0x007FFFFFU -#define FLT_EXP_BIAS 127 -#define FLT_EXP_SHIFT 23 - -#define FLT_IS_FINITE(v) \ - (((*((unsigned int*)&(v))) & FLT_EXP_MASK) != FLT_EXP_MASK) - -#define FLT_IS_NAN(v) \ - ((((*((unsigned int*)&(v))) & FLT_EXP_MASK) == FLT_EXP_MASK) && \ - ((((*((unsigned int*)&(v))) & FLT_MAN_MASK) != 0U) - -#define FLT_IS_INF(v) \ - ((((*((unsigned int*)&(v))) & FLT_EXP_MASK) == FLT_EXP_MASK) && \ - ((((*((unsigned int*)&(v))) & FLT_MAN_MASK) == 0U) - -#ifndef GLOBALDEFS_H -/*-----------------------------------*/ -/* Unstructured coordinate structure */ -/*-----------------------------------*/ -typedef struct { - float xyz[3]; -}CRD; -/*-----------------------------------*/ -/* Unstructured double coordinate structure */ -/*-----------------------------------*/ -typedef struct { - double xyz[3]; -}DBLCRD; -#endif - -/*----------------*/ -/* Variable Types */ -/*----------------*/ -enum z_var_type -{ - Z_CONSTANT, - Z_SCALAR, - Z_VECTOR, - Z_TENSOR, - Z_TENSOR9, - MAX_Z_VAR_TYPES -}; - -/*------------------- - * Vector Glyph enums - *-------------------*/ -enum vg_time { - VG_STATIC, - VG_TRANSIENT, - VG_UNDEF, - VG_NEAREST, - VG_INTERPOLATE -}; - -enum vg_type { - VG_FORCE, - VG_MOMENT -}; - - -/*--------------- - * Element Types - *--------------- - * If you mess with these, you must also - * change the get_z_maxtype - * to_z_elem_type - * to_int_elem_type routines - * in userd_read.c - *----------------------------------------*/ -#if (defined USERD_API_100 || defined USERD_API_200) -enum z_elem_types { - Z_POINT, /* 00: 1 node point element */ - Z_BAR02, /* 01: 2 node bar */ - Z_BAR03, /* 02: 3 node bar */ - Z_TRI03, /* 03: 3 node triangle */ - Z_TRI06, /* 04: 6 node triangle */ - Z_QUA04, /* 05: 4 node quad */ - Z_QUA08, /* 06: 8 node quad */ - Z_TET04, /* 07: 4 node tetrahedron */ - Z_TET10, /* 08: 10 node tetrahedron */ - Z_PYR05, /* 09: 5 node pyramid */ - Z_PYR13, /* 10: 13 node pyramid */ - Z_PEN06, /* 11: 6 node pentahedron */ - Z_PEN15, /* 12: 15 node pentahedron */ - Z_HEX08, /* 13: 8 node hexahedron */ - Z_HEX20, /* 14: 20 node hexahedron */ - Z_MAXTYPE -}; - -#elif defined USERD_API_201 -enum z_elem_types { - Z_POINT, /* 00: 1 node point element */ - Z_G_POINT, /* 01: 1 node point element (ghost call) */ - Z_BAR02, /* 02: 2 node bar */ - Z_G_BAR02, /* 03: 2 node bar (ghost cell) */ - Z_BAR03, /* 04: 3 node bar */ - Z_G_BAR03, /* 05: 3 node bar (ghost cell) */ - Z_TRI03, /* 06: 3 node triangle */ - Z_G_TRI03, /* 07: 3 node triangle (ghost cell) */ - Z_TRI06, /* 08: 6 node triangle */ - Z_G_TRI06, /* 09: 6 node triangle (ghost cell) */ - Z_QUA04, /* 10: 4 node quad */ - Z_G_QUA04, /* 11: 4 node quad (ghost cell) */ - Z_QUA08, /* 12: 8 node quad */ - Z_G_QUA08, /* 13: 8 node quad (ghost cell) */ - Z_TET04, /* 14: 4 node tetrahedron */ - Z_G_TET04, /* 15: 4 node tetrahedron (ghost cell) */ - Z_TET10, /* 16: 10 node tetrahedron */ - Z_G_TET10, /* 17: 10 node tetrahedron (ghost cell) */ - Z_PYR05, /* 18: 5 node pyramid */ - Z_G_PYR05, /* 19: 5 node pyramid (ghost cell) */ - Z_PYR13, /* 20: 13 node pyramid */ - Z_G_PYR13, /* 21: 13 node pyramid (ghost cell) */ - Z_PEN06, /* 22: 6 node pentahedron */ - Z_G_PEN06, /* 23: 6 node pentahedron (ghost cell) */ - Z_PEN15, /* 24: 15 node pentahedron */ - Z_G_PEN15, /* 25: 15 node pentahedron (ghost cell) */ - Z_HEX08, /* 26: 8 node hexahedron */ - Z_G_HEX08, /* 27: 8 node hexahedron (ghost cell) */ - Z_HEX20, /* 28: 20 node hexahedron */ - Z_G_HEX20, /* 29: 20 node hexahedron (ghost cell) */ - Z_MAXTYPE -}; - -#else -enum z_elem_types { - Z_POINT, /* 00: 1 node point element */ - Z_G_POINT, /* 01: 1 node point element (ghost call) */ - Z_BAR02, /* 02: 2 node bar */ - Z_G_BAR02, /* 03: 2 node bar (ghost cell) */ - Z_BAR03, /* 04: 3 node bar */ - Z_G_BAR03, /* 05: 3 node bar (ghost cell) */ - Z_TRI03, /* 06: 3 node triangle */ - Z_G_TRI03, /* 07: 3 node triangle (ghost cell) */ - Z_TRI06, /* 08: 6 node triangle */ - Z_G_TRI06, /* 09: 6 node triangle (ghost cell) */ - Z_QUA04, /* 10: 4 node quad */ - Z_G_QUA04, /* 11: 4 node quad (ghost cell) */ - Z_QUA08, /* 12: 8 node quad */ - Z_G_QUA08, /* 13: 8 node quad (ghost cell) */ - Z_TET04, /* 14: 4 node tetrahedron */ - Z_G_TET04, /* 15: 4 node tetrahedron (ghost cell) */ - Z_TET10, /* 16: 10 node tetrahedron */ - Z_G_TET10, /* 17: 10 node tetrahedron (ghost cell) */ - Z_PYR05, /* 18: 5 node pyramid */ - Z_G_PYR05, /* 19: 5 node pyramid (ghost cell) */ - Z_PYR13, /* 20: 13 node pyramid */ - Z_G_PYR13, /* 21: 13 node pyramid (ghost cell) */ - Z_PEN06, /* 22: 6 node pentahedron */ - Z_G_PEN06, /* 23: 6 node pentahedron (ghost cell) */ - Z_PEN15, /* 24: 15 node pentahedron */ - Z_G_PEN15, /* 25: 15 node pentahedron (ghost cell) */ - Z_HEX08, /* 26: 8 node hexahedron */ - Z_G_HEX08, /* 27: 8 node hexahedron (ghost cell) */ - Z_HEX20, /* 28: 20 node hexahedron */ - Z_G_HEX20, /* 29: 20 node hexahedron (ghost cell) */ - Z_NSIDED, /* 30: n node polygon */ - Z_G_NSIDED, /* 31: n node polygon (ghost cell) */ - Z_NFACED, /* 32: n faced polyhedron */ - Z_G_NFACED, /* 33: n faced polyhedron (ghost cell) */ - Z_MAXTYPE -}; - -#endif - -enum z_node_ids_opt -{ - Z_NO_NODE_IDS, - Z_ASSIGN_NODE_IDS, - Z_GIVEN_NODE_IDS -}; - -enum z_element_ids_opt -{ - Z_NO_ELEMENT_IDS, - Z_ASSIGN_ELEMENT_IDS, - Z_GIVEN_ELEMENT_IDS -}; - - -/*-------------------------------*/ -/* Unstructured/Structured types */ -/*-------------------------------*/ -enum z_structured_defs -{ - Z_UNSTRUCTURED, /* for unstructured part */ - Z_STRUCTURED, /* for structured (non-iblanked) part */ - Z_IBLANKED, /* for structured iblanked part */ - Z_MAXMESHTYPES -}; - -/*----------------------------*/ -/* Structured Iblanking types */ -/*----------------------------*/ -enum z_iblank_domain -{ - Z_EXT, /* Exterior */ - Z_INT, /* Interior */ - Z_BND, /* Boundary */ - Z_INTBND, /* Internal boundary/baffle */ - Z_SYM, /* Symmetry surface */ - Z_NO_OF_IBLANK_DOMAIN_ITEMS -}; - - -/*-----------------------------------*/ -/* Dataset Query file info Structure */ -/*-----------------------------------*/ -#define Z_MAXFILENP 255 /* Max file name and path.*/ -#define Z_MAXTIMLEN 40 /* Max time str length */ -#define Z_BUFLEN 82 /* Allocated length of the f_desc strings */ -typedef struct { - char name[Z_MAXFILENP]; - long sizeb; - char timemod[Z_MAXTIMLEN]; - int num_d_lines; - char **f_desc; -} Z_QFILES; - -/*------------------------------------------- - * Mixed Material enum - * - * (Must be comparable to material_file_index - * in mat_defs.h of EnSight server) - *--------------------------------------------*/ -enum z_material_file_index -{ - Z_MAT_INDEX, - Z_MIX_INDEX, - Z_MIX_VALUE, - Z_SPE_VALUE, - Z_NUM_MAT_FILES -}; - -/*------------------------------------------- - * Material type enum - * - * (Must be comparable to matset_via_file_type - * in mat_defs.h of EnSight server) - *--------------------------------------------*/ -enum z_matset_via_file_type -{ - Z_MISET_VIA_SPARSE_MIX, /* Original method prior to 07Feb07:mel*/ - Z_MISET_VIA_ESCAL_VARS, /* Materials via element scalar variables*/ - Z_MISET_VIA_MAX_FTYPES -}; - - -/* --------------------------------------- - * Extra GUI size stuff - * _EGS - * This is the maximum number of - * Extra GUI items that you are - * allowed of each type. - * - * Don't change these values! - * ------------------------------------- */ -#define Z_MAX_NUM_GUI_PULL_ITEMS 20 /* max num GUI pulldowns */ -#define Z_LEN_GUI_PULL_STR 80 /* max length of GUI pulldown string */ -#define Z_LEN_GUI_FIELD_STR 256 /* max length of field string */ -#define Z_LEN_GUI_TITLE_STR 40 /* max length of title string */ - -/* --------------------------------------- - * Extra data function defines (for "target") - * - * Don't change these values! - * ------------------------------------- */ -#define DATA_TARGET_NONE 0 -#define DATA_TARGET_SERVER 1 -#define DATA_TARGET_SOS 2 -#define DATA_TARGET_CLIENT 3 -#define DATA_TARGET_PYTHON 0x10000000 -#define DATA_TARGET_CMDLANG 0x20000000 -#define DATA_TARGET_UNDEF_VAL 0x40000000 -#define DATA_TARGET_OTHER 0x00000000 -#define DATA_TARGET_MASK 0x0000000f - -/* --------------------------------------- - * Failed elemenet enums - * --------------------------------------- */ - -enum z_element_failure_criteria -{ - Z_ELE_FAILED_NONE, - Z_ELE_FAILED_GREATER, - Z_ELE_FAILED_LESS, - Z_ELE_FAILED_EQUAL, - Z_ELE_FAILED_NOT_EQUAL, - Z_ELE_FAILED_MANY -}; - - -enum z_element_failure_logic -{ - Z_ELE_FAILED_LOGIC_NONE, - Z_ELE_FAILED_LOGIC_AND, - Z_ELE_FAILED_LOGIC_OR, - Z_ELE_FAILED_LOGIC_MANY -}; - -/*---------------------------------------------------------- - * We include the prototype header file - *----------------------------------------------------------*/ -#include "global_extern_proto.h" - -/* --------------------- - * export the file pointer if windows - * because windows can't open a file in the - * server and pass the FILE * pointer properly. - * --------------------- */ -#ifdef WIN32 -typedef struct _USERD_globals_struct { - char arch_filename[256]; - unsigned long arch_fileptr; -} _USERD_globals; -#endif - -#ifdef __cplusplus -} -#endif - -/*--------------------------------------------------------------------*/ -#endif /*GLOBAL_EXTERN_H*/ diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern_proto.h b/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern_proto.h deleted file mode 100644 index 272261c7988b757ebc16fcbac48c726f29989f1e..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/global_extern_proto.h +++ /dev/null @@ -1,734 +0,0 @@ -/*--------------------------------------------------------------*/ -/* Prototype Header file for EnSight External Reader */ -/* DSO Library Routines */ -/* */ -/* intended to be included from global_extern.h only */ -/*--------------------------------------------------------------*/ -/* ************************************************************* - * Copyright 1998 Computational Engineering International, Inc. - * All Rights Reserved. - * - * Restricted Rights Legend - * - * Use, duplication, or disclosure of this - * software and its documentation by the - * Government is subject to restrictions as - * set forth in subdivision [(b)(3)(ii)] of - * the Rights in Technical Data and Computer - * Software clause at 52.227-7013. - * ************************************************************* - */ -#ifndef GLOBAL_EXTERN_PROTO_H -#define GLOBAL_EXTERN_PROTO_H - -#include <stdio.h> - -#ifdef WIN32 -#define W32IMPORT __declspec( dllimport ) -#define W32EXPORT __declspec( dllexport ) -#else -#define W32IMPORT extern -#define W32EXPORT extern -#endif - -/*---------------------- - * Same in All Versions - *----------------------*/ -W32EXPORT int -USERD_get_number_of_model_parts( void ); - -W32EXPORT int -USERD_get_block_coords_by_component(int block_number, - int which_component, - float *coord_array); - -W32EXPORT int -USERD_get_block_iblanking(int block_number, - int *iblank_array); - -W32EXPORT int -USERD_get_block_scalar_values(int block_number, - int which_scalar, - float *scalar_array); - -W32EXPORT int -USERD_get_block_vector_values_by_component(int block_number, - int which_vector, - int which_component, - float *vector_array); - -W32EXPORT int -USERD_get_name_of_reader(char reader_name[Z_MAX_USERD_NAME], - int *two_fields); - -/* - * This mechanism is used to mark the fact that a given - * reader cannot be unloaded. We set this by default for - * C++ based readers as there are known issues with unloading - * a C++ DLL on certain platforms (Linux). - */ -W32EXPORT int -USERD_reader_unloadable(void); - -#ifdef __cplusplus -/* - * Define a macro that defines the cpp function as part of the - * USERD_get_name_of_reader declaration - */ -#ifndef NO_AUTO_UNLOADABLE_CODE - -#if defined(LINUX) || defined(SGI) - -#define USERD_get_name_of_reader \ - USERD_reader_unloadable(void) { return(0); } \ -int USERD_get_name_of_reader - -#endif - -#endif - -#endif - -W32EXPORT int -USERD_get_reader_descrip(char descrip[Z_MAXFILENP]); - -W32EXPORT int -USERD_set_filenames(char filename_1[], - char filename_2[], - char the_path[], - int swapbytes); - -W32EXPORT int -USERD_get_number_of_files_in_dataset( void ); - -W32EXPORT int -USERD_get_dataset_query_file_info(Z_QFILES *qfiles); - -W32EXPORT int -USERD_get_changing_geometry_status( void ); - -W32EXPORT int -USERD_get_node_label_status( void ); - -W32EXPORT int -USERD_get_element_label_status( void ); - -W32EXPORT int -USERD_get_number_of_variables( void ); - -W32EXPORT void -USERD_stop_part_building( void ); - -W32EXPORT int -USERD_bkup(FILE *archive_file, - int backup_type); - -/* ----------------------------------- - * Optional routine allows getting data - * from the reader to modify server/client behavior - * ------------------------------------ */ -W32EXPORT int -USERD_get_extra_data(int *target, - int *nints, int *nflts, int *nchrs, - int *pints, float *pflts, char *pchrs); - -/* ---------------------------- - * Extra "Before" GUI stuff available for all versions of API - * Note: this API suite is entirely optional... - * --------------------------- */ -W32EXPORT void USERD_get_extra_gui_numbers( - int *num_Toggles, - int *num_pulldowns, - int *num_fields -); - -W32EXPORT int USERD_get_extra_gui_defaults( - char **toggle_Title, /* [num_toggles][Z_LEN_GUI_TITLE_STR] */ - int *toggle_default_status, /* [num_toggles] */ - char **pulldown_Title, /* [num_pulldowns][Z_LEN_GUI_TITLE_STR] */ - int *pulldown_number_in_list, /* [num_pulldowns] */ - int *pulldown_default_selection, /* [num_pulldowns] */ - char ***pulldown_item_strings, /* [num_pulldowns][Z_MAX_NUM_GUI_PULL_ITEMS][Z_LEN_GUI_PULL_STR] */ - char **field_Title, /* [num_fields][Z_LEN_GUI_TITLE_STR] */ - char **field_user_string /* [num_fields][Z_LEN_GUI_FIELD_STR] */ -); - -W32EXPORT void USERD_set_extra_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR] */ -); - -/* ---------------------------- - * Extra "After" GUI stuff available for all versions of API - * Note: this API suite is entirely optional... - * --------------------------- */ -W32EXPORT void USERD_get_var_extract_gui_numbers( - int *num_Toggles, - int *num_pulldowns, - int *num_fields -); - -W32EXPORT int USERD_get_var_extract_gui_defaults( - char **toggle_Title, /* [num_toggles][Z_LEN_GUI_TITLE_STR] */ - int *toggle_default_status, /* [num_toggles] */ - char **pulldown_Title, /* [num_pulldowns][Z_LEN_GUI_TITLE_STR] */ - int *pulldown_number_in_list, /* [num_pulldowns] */ - int *pulldown_default_selection, /* [num_pulldowns] */ - char ***pulldown_item_strings, /* [num_pulldowns][Z_MAX_NUM_GUI_PULL_ITEMS][Z_LEN_GUI_PULL_STR] */ - char **field_Title, /* [num_fields][Z_LEN_GUI_TITLE_STR] */ - char **field_user_string /* [num_fields][Z_LEN_GUI_FIELD_STR] */ -); - -W32EXPORT void USERD_set_var_extract_gui_data( - int *toggle, /* [num_toggle] */ - int *pulldown, /* [num_pulldown] */ - char **field_text /* [num_fields][Z_LEN_GUI_FIELD_STR] */ ); - -/* -------------------- - * xy-query data routines - * -------------------- */ -W32EXPORT int USERD_get_num_xy_queries(void); - -W32EXPORT int USERD_get_xy_query_info( - int query_num, - char *query_name, - char *query_xtitle, - char *query_ytitle, - int *query_num_pairs); - -W32EXPORT int USERD_get_xy_query_data( - int query_num, - int num_vals, - float *x_vals, - float *y_vals); - - -/* This routine added so the reader can know if we are at the "right" side of - * an interval - namely, interpolation between steps is being done in EnSight - * (It can be in any version of EnSight) - *----------------------------------------------------------------------------*/ -W32EXPORT void -USERD_set_right_side( void ); - -/*--------------------------------------------- - * Routines that get the geometry in buffers, - * used for Unstructured Auto Distribute - * (Optional) - *---------------------------------------------*/ -W32EXPORT int -USERD_get_part_coords_in_buffers(int part_number, - float **coord_array, - int first, - int n_beg, - int n_end, - int buffer_size, - int *num_returned); - -W32EXPORT int -USERD_get_part_node_ids_in_buffers(int part_number, - int *nodeid_array, - int first, - int n_beg, - int n_end, - int buffer_size, - int *num_returned); - -W32EXPORT int -USERD_get_part_elements_by_type_in_buffers(int part_number, - int element_type, - int **conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned); - -W32EXPORT int -USERD_get_part_element_ids_by_type_in_buffers(int part_number, - int element_type, - int *elemid_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned); -W32EXPORT int -USERD_get_var_by_component_in_buffers(int which_variable, - int which_part, - int var_type, - int which_type, - int imag_data, - int component, - float *var_array, - int first, - int ne_beg, - int ne_end, - int buffer_size, - int leftside, - int *num_returned); - -W32EXPORT int -USERD_get_nsided_conn_in_buffers(int part_number, - int *num_nodes_per_elem_array, - int *nsided_conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned); - -W32EXPORT int -USERD_get_nfaced_conn_in_buffers(int part_number, - int *nfaced_fpe_arrray, - int *nfaced_npf_arrray, - int *nfaced_conn_array, - int first, - int e_beg, - int e_end, - int buffer_size, - int *num_returned); - - -/*----------------------- - * For Version 1.000 Only - *-----------------------*/ -#if defined USERD_API_100 - -W32EXPORT int -USERD_get_number_of_global_nodes( void ); - -W32EXPORT int -USERD_get_global_coords(CRD *coord_array); - -W32EXPORT int -USERD_get_global_node_ids(int *nodeid_array); - -W32EXPORT int -USERD_get_element_connectivities_for_part(int part_number, - int **conn_array[Z_MAXTYPE]); - -W32EXPORT int -USERD_get_element_ids_for_part(int part_number, - int *elemid_array[Z_MAXTYPE]); - -W32EXPORT int -USERD_get_vector_values(int which_vector, - int which_part, - int which_type, - float *vector_array); - -W32EXPORT int -USERD_get_part_build_info(int *part_id, - int *part_types, - char *part_descriptions[Z_BUFL], - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]); - -W32EXPORT int -USERD_get_scalar_values(int which_scalar, - int which_part, - int which_type, - float *scalar_array); - -W32EXPORT int -USERD_get_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify); - -W32EXPORT int -USERD_get_description_lines(int which_type, - int which_var, - char line1[Z_BUFL], - char line2[Z_BUFL]); - -W32EXPORT int -USERD_get_variable_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3]); - -W32EXPORT float -USERD_get_constant_value(int which_var); - -W32EXPORT int -USERD_get_solution_times(float *solution_times); -W32EXPORT void -USERD_set_time_step(int time_step); - -W32EXPORT int -USERD_get_number_of_time_steps(void); - -#endif - - -/*---------------------- - * New For Version 2.000 - *----------------------*/ -#if !defined USERD_API_100 - -W32EXPORT int -USERD_get_part_coords(int part_number, - float **coord_array); - -W32EXPORT int -USERD_get_part_node_ids(int part_number, - int *nodeid_array); - -W32EXPORT int -USERD_get_part_elements_by_type(int part_number, - int element_type, - int **conn_array); -W32EXPORT int -USERD_get_part_element_ids_by_type(int part_number, - int element_type, - int *elemid_array); - -W32EXPORT int -USERD_get_reader_version(char version_number[Z_MAX_USERD_NAME]); - -W32EXPORT int -USERD_get_reader_release(char version_number[Z_MAX_USERD_NAME]); - -W32EXPORT int -USERD_get_var_by_component(int which_variable, - int which_part, - int var_type, - int which_type, - int complex, - int component, - float *var_array); - -W32EXPORT int -USERD_get_maxsize_info(int *max_number_of_nodes, - int *max_number_of_elements[Z_MAXTYPE], - int *max_ijk_dimensions[3]); - -W32EXPORT void -USERD_exit_routine( void ); - -W32EXPORT int -USERD_get_gold_variable_info(char **var_description, - char **var_filename, - int *var_type, - int *var_classify, - int *var_complex, - char **var_ifilename, - float *var_freq, - int *var_contran, - int *var_timeset); -W32EXPORT int -USERD_get_model_extents( float extents[6] ); - -W32EXPORT int -USERD_get_descrip_lines(int which_type, - int which_var, - int imag_data, - char line1[Z_BUFL], - char line2[Z_BUFL]); - -W32EXPORT int -USERD_get_var_value_at_specific(int which_var, - int which_node_or_elem, - int which_part, - int which_elem_type, - int time_step, - float values[3], - int imag_data); - -W32EXPORT float -USERD_get_constant_val(int which_var, int imag_data); - -W32EXPORT int -USERD_get_geom_timeset_number(void); - -W32EXPORT int -USERD_get_number_of_timesets(void); - -W32EXPORT int -USERD_get_timeset_description(int timeset_number, - char timeset_description[Z_BUFL]); - -W32EXPORT int -USERD_get_sol_times(int timeset_number, - float *solution_times); -W32EXPORT void -USERD_set_time_set_and_step(int timeset_number, - int time_step); -W32EXPORT int -USERD_get_num_of_time_steps(int timeset_number); - -W32EXPORT int -USERD_get_border_availability(int part_number, - int number_of_elements[Z_MAXTYPE]); - -W32EXPORT int -USERD_get_border_elements_by_type(int part_number, - int element_type, - int **conn_array, - short *parent_element_type, - int *parent_element_num); - -W32EXPORT void -USERD_set_server_number(int serv_num, - int tot_servs); - -#endif - - -/*---------------------- - * New For Version 2.010 - *----------------------*/ -#if defined USERD_API_201 || defined USERD_API_202 || defined USERD_API_203 || defined USERD_API_204 || defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 -W32EXPORT int -USERD_get_ghosts_in_model_flag( void ); - -W32EXPORT int -USERD_get_ghosts_in_block_flag(int block_number); - -W32EXPORT int -USERD_get_block_ghost_flags(int block_number, - int *ghost_flags); -#endif - -/*-------------------------- - * Modified at Version 2.030 - *--------------------------*/ -#if defined USERD_API_200 || defined USERD_API_201 || defined USERD_API_202 - -W32EXPORT int -USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_descriptions[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[3], - int *iblanking_options[6]); -#endif - -#if defined USERD_API_203 || defined USERD_API_204 || defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 -W32EXPORT int -USERD_get_gold_part_build_info(int *part_id, - int *part_types, - char *part_descriptions[Z_BUFL], - int *number_of_nodes, - int *number_of_elements[Z_MAXTYPE], - int *ijk_dimensions[9], - int *iblanking_options[6]); -#endif - - -/*---------------------- - * New For Version 2.030 - *----------------------*/ -#if defined USERD_API_203 || defined USERD_API_204 || defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 -W32EXPORT int -USERD_get_number_of_material_sets( void ); - -W32EXPORT int -USERD_get_matf_set_info(int *mat_set_ids, - char **mat_set_name); - -W32EXPORT int -USERD_get_number_of_materials( int set_index ); - -W32EXPORT int -USERD_get_matf_var_info(int set_index, - int *mat_ids, - char **mat_desc); - -W32EXPORT int -USERD_size_matf_data(int set_index, - int part_id, - int wtyp, - int mat_type, - int *matf_size ); - -W32EXPORT int -USERD_load_matf_data( int set_index, - int part_id, - int wtyp, - int mat_type, - int *ids_list, - float *val_list ); - -W32EXPORT int -USERD_get_nsided_conn( int part_number, - int *nsided_conn_array ); - -W32EXPORT int -USERD_get_nfaced_nodes_per_face( int part_number, - int *nfaced_npf_array ); - -W32EXPORT int -USERD_get_nfaced_conn( int part_number, - int *nfaced_conn_array ); - -#endif - -/*---------------------- - * New For Version 2.040 - *----------------------*/ -#if defined USERD_API_204 || defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 - -W32EXPORT int -USERD_get_uns_failed_params( - char *fail_var_name, /* variable name to be used in failure - must be scalar, per elem */ - float *threshold_val1, /* number to compare for failure */ - float *threshold_val2, /* number to compare for failure */ - int *threshold_operator1, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *threshold_operator2, /* Z_GREATER_THAN, Z_LESS_THAN, - Z_EQUAL_TO */ - int *logic_criteria2 - - ); - -#endif - -/*---------------------- -** New For Version 2.050 -**----------------------*/ -#if defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 - -W32EXPORT int -USERD_get_number_of_species( int set_index ); - -W32EXPORT int -USERD_get_matsp_info(int set_index, - int *sp_ids, - char **sp_desc, - int *sppermatcnt, - int *sppermatlis); - -W32EXPORT int -USERD_rigidbody_existence( void ); - -#endif - -/*-------------------------------------------- - * New at 2.05, but modified for Version 2.080 - *-------------------------------------------- */ -#if defined USERD_API_205 || defined USERD_API_206 || defined USERD_API_207 -W32EXPORT int -USERD_rigidbody_values(int part_number, - float values[10]); -#endif - -#if defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 -W32EXPORT int -USERD_rigidbody_values(int part_number, - float values[14]); -#endif - - - - -/*---------------------- -** New For Version 2.060 -**----------------------*/ -#if defined USERD_API_206 || defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 - -W32EXPORT int -USERD_get_structured_reader_cinching( void ); - -W32EXPORT int -USERD_set_block_range_and_stride(int file_pn, - int mini, int maxi, int stepi, - int minj, int maxj, int stepj, - int mink, int maxk, int stepk); -#endif - -/*---------------------- -** New For Version 2.070 -**----------------------*/ -#if defined USERD_API_207 || defined USERD_API_208 || defined USERD_API_209 || defined USERD_API_210 - -/* non-optional functions go here */ - -#endif - -/* This is optional; defaults to 'Set file' and 'Set results' if not - * defined. If 'two_fields' is true, then both labels must have a - * non-NULL string otherwise the defaults will be used. - */ -W32EXPORT void -USERD_set_filename_button_labels(char filename_label_1[Z_MAX_USERD_NAME], - char filename_label_2[Z_MAX_USERD_NAME]); - -/* This is optional; defaults to TRUE if not defined. */ -W32EXPORT int -USERD_prefer_auto_distribute(void); - - - -/*---------------------- -** New For Version 2.090 -**----------------------*/ -#if defined USERD_API_209 || defined USERD_API_210 - -/* non-optional functions go here */ - -#endif - -/* These are optional */ -W32EXPORT int -USERD_get_vglyph_counts(int *num_vglyph_vectors, - int *num_vglyph_timelines); - -W32EXPORT int -USERD_get_vglyph_timeline_info(int vtl, - int *id, - int *numtimes, - int *before, - int *amidst, - int *after); - -W32EXPORT int -USERD_get_vglyph_timeline_times(int vtl, - float *times); - -W32EXPORT int -USERD_get_vglyph_vector_info(int vg, - int *id, - char *description, - int *type, - int *time_condition, - int *time_line, - int *part, - int *nidloc, - int *eidloc); - -W32EXPORT int -USERD_get_vglyph_vector_values(int vg, - float **values); - -W32EXPORT int -USERD_get_vglyph_vector_xyzloc(int vg, - float **xyzloc); - -/*---------------------- -** New For Version 2.100 -**----------------------*/ -#if defined USERD_API_210 - -W32EXPORT int -USERD_get_mat_scalars_desc(int set_index, - char **mesv_desc); -#endif - -/* These are optional */ -W32EXPORT int -USERD_get_matf_set_type(int set_index); - -/* special, optional functions */ -W32EXPORT void -USERD_reset_routine(void); - -/*--------------------------------------------------------------------*/ -#endif /*GLOBAL_EXTERN_PROTO_H*/ diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/libuserd.C b/applications/utilities/postProcessing/graphics/ensightFoamReader/libuserd.C deleted file mode 100644 index 3da1b648d28bc8cb8515eab72e99d9fa0a61bca9..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/libuserd.C +++ /dev/null @@ -1,142 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -Application - libuserd-foam - -Description - EnSight library module to read OpenFOAM data directly without translation - - It can currently handle most cell types. - - See also: README_USERD_2.0 - 24 Sep 2001: NN - Added support for Ensight API 2.0 - 02 Sep 2002: NN - Added support for ghost cells - 14 Mar 2004: NN - Added patches to the parts - -\*---------------------------------------------------------------------------*/ - -#include <cstdio> - -#include "fvCFD.H" -#include "IOobjectList.H" -#include "Cloud.H" -#include "passiveParticle.H" -#include "fvMesh.H" -#include "cellModel.H" -#include "globalFoam.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -extern "C" -{ - -#include "USERD_API.H" -#include "global_extern.h" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// same API as in 1.0 -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "USERD_bkup.H" -#include "USERD_get_name_of_reader.H" -#include "USERD_set_filenames.H" -#include "USERD_get_number_of_model_parts.H" -#include "USERD_get_changing_geometry_status.H" -#include "USERD_get_dataset_query_file_info.H" -#include "USERD_get_element_label_status.H" -#include "USERD_get_node_label_status.H" -#include "USERD_get_number_of_files_in_dataset.H" -#include "USERD_get_number_of_variables.H" -#include "USERD_stop_part_building.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// slightly changed with 2.0 from 1.0 -// (to handle complex variables - not used by OpenFOAM anyway) -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "USERD_get_constant_val.H" -#include "USERD_get_descrip_lines.H" -#include "USERD_get_var_value_at_specific.H" -#include "USERD_get_gold_variable_info.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// critical changes with 2.0 from 1.0 -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "USERD_get_gold_part_build_info.H" -#include "USERD_get_num_of_time_steps.H" -#include "USERD_get_sol_times.H" -#include "USERD_set_time_set_and_step.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// new additions with 2.0 from 1.0 -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "USERD_get_var_by_component.H" -#include "USERD_get_part_coords.H" -#include "USERD_get_part_node_ids.H" -#include "USERD_get_part_elements_by_type.H" -#include "USERD_get_part_element_ids_by_type.H" - -#include "USERD_exit_routine.H" -#include "USERD_get_model_extents.H" -#include "USERD_get_reader_version.H" -#include "USERD_get_reader_release.H" -#include "USERD_get_number_timesets.H" -#include "USERD_get_timeset_description.H" -#include "USERD_get_geom_timeset_number.H" - -#include "USERD_get_border_availability.H" -#include "USERD_get_border_elements_by_type.H" - -#include "USERD_get_maxsize_info.H" -#include "USERD_set_server_number.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// new additions with 2.03 from 2.02 -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "USERD_get_number_of_material_sets.H" -#include "USERD_get_matf_set_info.H" -#include "USERD_get_number_of_materials.H" -#include "USERD_get_matf_var_info.H" -#include "USERD_size_matf_data.H" -#include "USERD_load_matf_data.H" -#include "USERD_get_nsided_conn.H" -#include "USERD_get_nfaced_nodes_per_face.H" -#include "USERD_get_nfaced_conn.H" - -//********************************************************************** -//====================================================================== -// STRUCTURED DATA STUFF - not used in OpenFOAM -//====================================================================== -//********************************************************************** - -#include "USERD_structured_data.H" - -} - -// ************************************************************************ // diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/tensorConversion.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/tensorConversion.H deleted file mode 100644 index 9f2b1bc6c53a6fce9ec5a8ed0c220eccf65b9221..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/tensorConversion.H +++ /dev/null @@ -1,36 +0,0 @@ -if (component == 0) -{ - var_array[counter++] = tf[n].xx(); -} -else if (component == 1) -{ - var_array[counter++] = tf[n].yy(); -} -else if (component == 2) -{ - var_array[counter++] = tf[n].zz(); -} -else if (component == 3) -{ - var_array[counter++] = tf[n].xy(); -} -else if (component == 4) -{ - var_array[counter++] = tf[n].xz(); -} -else if (component == 5) -{ - var_array[counter++] = tf[n].yz(); -} -else if (component == 6) -{ - var_array[counter++] = tf[n].yx(); -} -else if (component == 7) -{ - var_array[counter++] = tf[n].zx(); -} -else if (component == 8) -{ - var_array[counter++] = tf[n].zy(); -} diff --git a/bin/foamLog b/bin/foamLog index 260383230944da60f51bfd66ea21df954548009a..cd68971205e9d313a2fed2bd9fb046027ab955d0 100755 --- a/bin/foamLog +++ b/bin/foamLog @@ -29,7 +29,7 @@ # Extract data for each time-step from a log file for graphing. # # Environment -# WM_PROJECT_API +# FOAM_API # WM_PROJECT_DIR # WM_PROJECT_SITE # @@ -90,9 +90,9 @@ cat <<HELP The database ($Script.db) will taken from these locations: . - $userDir/$WM_PROJECT_API/ + $userDir/$FOAM_API/ $userDir/ - $groupDir/$WM_PROJECT_API/etc/ + $groupDir/$FOAM_API/etc/ $groupDir/etc/ $WM_PROJECT_DIR/etc/ $toolsDir diff --git a/bin/foamNewCase b/bin/foamNewCase index 9565606a1b429c959c0e06e936fd231f1075aca2..ca9c2c1b1b85d22d22b4f2b2a70bcb9d595f5438 100755 --- a/bin/foamNewCase +++ b/bin/foamNewCase @@ -4,7 +4,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2018-2019 OpenCFD Ltd. #------------------------------------------------------------------------------- # License # This file is part of OpenFOAM. @@ -30,14 +30,14 @@ # - requires rsync # # Environment -# WM_PROJECT_API +# FOAM_API # WM_PROJECT_DIR # WM_PROJECT_SITE # #------------------------------------------------------------------------------ groupDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-<unknown>}/site}" userDir="$HOME/.OpenFOAM" -projectApi="${WM_PROJECT_API:-unknown}" +projectApi="${FOAM_API:-unknown}" templateDir="appTemplates" @@ -52,7 +52,7 @@ options: -app NAME specify the application to use -case DIR specify alternative case directory, default is the cwd -list list the applications available - -with-api=NUM specify alternative api to use (default: \$WM_PROJECT_API) + -with-api=NUM specify alternative api to use (default: \$FOAM_API) -version VER [obsolete] -help Print the usage diff --git a/bin/foamUpdateCaseFileHeader b/bin/foamUpdateCaseFileHeader index 11f110a045d0679e96f799ad4f6b13540cafc480..c77fa4305c444b3f3d71b99a2ccb27eaeb4fce15 100755 --- a/bin/foamUpdateCaseFileHeader +++ b/bin/foamUpdateCaseFileHeader @@ -4,7 +4,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2018-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -74,9 +74,9 @@ do esac done -# Constant width for version - default to WM_PROJECT_API +# Constant width for version - default to FOAM_API -: ${version:=$WM_PROJECT_API} +: ${version:=$FOAM_API} : ${version:=$WM_PROJECT_VERSION} version=$(printf %-36s ${version:-OPENFOAM}) diff --git a/bin/mpirunDebug b/bin/mpirunDebug index 61d2f212d850f8ff162aaf1b0ca764042de23cbb..d672bf14ea6a50aff7d387b94e256ff13dd2403d 100755 --- a/bin/mpirunDebug +++ b/bin/mpirunDebug @@ -196,13 +196,13 @@ sourceFoam=false # Fallback command # Same as foamEtcFile -mode=uo bashrc # -# check ~/.$WM_PROJECT/$WM_PROJECT_API/ +# check ~/.$WM_PROJECT/$FOAM_API/ # check ~/.$WM_PROJECT/ -# check <installedProject>/etc/ -if [ -n "$WM_PROJECT" ] +# check projectDir/etc/ +if [ -n "$WM_PROJECT_DIR" ] then for i in \ - "$HOME/.$WM_PROJECT/$WM_PROJECT_API" \ + "$HOME/.$WM_PROJECT/$FOAM_API" \ "$HOME/.$WM_PROJECT" \ "$WM_PROJECT_DIR/etc" \ ; diff --git a/bin/tools/change-sitedir.sh b/bin/tools/change-sitedir.sh index f66504a2255ea2424f732a60c738d52f35a2d378..da9824088304d6bc78f5890b47f52906fab3fb95 100644 --- a/bin/tools/change-sitedir.sh +++ b/bin/tools/change-sitedir.sh @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -46,7 +46,7 @@ # # corresponds to the standard site location: # -# $WM_PROJECT_DIR/site{/$WM_PROJECT_API/platforms/$WM_OPTIONS} +# $WM_PROJECT_DIR/site{/$FOAM_API/platforms/$WM_OPTIONS} # #------------------------------------------------------------------------------ diff --git a/bin/tools/foamCreateModuleInclude b/bin/tools/foamCreateModuleInclude index 661b94dfa9fe7772a92c19f04bb540ebcd4a02f5..7074ad5c965366207cda165c385a240f2ddff765 100755 --- a/bin/tools/foamCreateModuleInclude +++ b/bin/tools/foamCreateModuleInclude @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. # \\/ M anipulation | Copyright (C) 2016-2017 CINECA #------------------------------------------------------------------------------ # License @@ -27,8 +27,10 @@ # # Description # Script to create module settings. +# # This is still incomplete, but can be a useful basis when using a module # system. +# #------------------------------------------------------------------------------ usage() { exec 1>&2 @@ -38,7 +40,8 @@ usage() { usage: ${0##*/} [OPTION] projectDir options: -output=file The output name (default: ModuleInclude.tcl) - -preload=file Specify (module) file to preload. Can use multiple times + -prefs=file A preferences file (OpenFOAM) to load. + -preload=file Specify a shell file to preload. Can use multiple times -tmpdir=file The tmp directory to use. -help Print the usage @@ -63,7 +66,7 @@ die() #------------------------------------------------------------------------------ -unset optBackend optDebug preload projectDir +unset optBackend optDebug optPrefs preloads projectDir unset moduleOutput moduleTmpDir # Parse some options @@ -79,8 +82,11 @@ do -debug) optDebug=true ;; + -prefs=*) + optPrefs="${1#*=}" + ;; -preload=*) - preload="$preload${preload:+ }${1#*=}" + preloads="$preloads${preloads:+ }${1#*=}" ;; --recursive-backend--) optBackend=true @@ -130,7 +136,7 @@ then die "Incorrect projectDir? $projectDir" # Check preloads - for file in $preloads + for file in "$preloads" do [ -f "$file" ] || echo "No such file to preload: $file" 1>&2 done @@ -146,7 +152,8 @@ then $0 \ --recursive-backend-- \ "${optDebug:+-debug}" \ - "${output:+-output=$moduleOutput}" \ + "${optPrefs:+-prefs=$optPrefs}" \ + "${moduleOutput:+-output=$moduleOutput}" \ "${preloads:+-preload=$preloads}" \ "${moduleTmpDir:+-tmpdir=$moduleTmpDir}" \ $projectDir @@ -164,7 +171,7 @@ fi : ${moduleTmpDir:=${TMPDIR:-/tmp}} # Preload any/all modules -for file in $preloads +for file in "$preloads" do [ -f "$file" ] && . "$file" '' done @@ -213,7 +220,7 @@ printEnv > $tmpFiles.env.pre.log printAlias > $tmpFiles.alias.pre.log # OpenFOAM settings -. $projectDir/etc/bashrc '' +. $projectDir/etc/bashrc "$optPrefs" echo "Using openfoam: $WM_PROJECT_DIR" 1>&2 echo "==> $moduleOutput" 1>&2 @@ -227,7 +234,9 @@ unset SCOTCH_VERSION # Also remove user directories as being unreliable -foamOldDirs="$CEI_HOME $BOOST_ARCH_PATH $CGAL_ARCH_PATH $FFTW_ARCH_PATH $MPI_ARCH_PATH $SCOTCH_ARCH_PATH \ +foamOldDirs="$BOOST_ARCH_PATH $CGAL_ARCH_PATH $FFTW_ARCH_PATH \ +$MESA_ARCH_PATH $LLVM_ARCH_PATH \ +$MPI_ARCH_PATH $SCOTCH_ARCH_PATH \ $FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN $WM_PROJECT_SITE \ $FOAM_USER_APPBIN $FOAM_USER_LIBBIN" foamClean=$WM_PROJECT_DIR/bin/foamCleanPath @@ -245,9 +254,6 @@ then unset FOAM_EXT_LIBBIN fi fi -unset CEI_HOME -unset ENSIGHT9_INPUT ENSIGHT9_READER -unset ENSIGHT10_INPUT ENSIGHT10_READER # Always consider site to be bogus. If needed, should be done elsewhere. unset FOAM_SITE_APPBIN FOAM_SITE_LIBBIN WM_PROJECT_SITE diff --git a/etc/README.md b/etc/README.md index d638115c48f8007315ff0a9d7b86087b42fa1fe4..f12e3f2d6b324e7b295f80a831996a259a8c233b 100644 --- a/etc/README.md +++ b/etc/README.md @@ -14,7 +14,6 @@ These source the following files in the `config.sh/` or * `aliases` : aliases for interactive shells * `unset` : sourced to clear as many OpenFOAM environment settings as possible * `mpi` : MPI communications library settings -* `ensight` : application settings for EnSight * `paraview` : application settings for ParaView * `scotch` : application settings for compiling against scotch * `metis` : application settings for compiling against metis diff --git a/etc/bashrc b/etc/bashrc index 6deffbdf4d0236146ae52a7563c20ecf14435564..89ecd7eb823602dd1e52ca0d11f69bc45564b197 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -22,9 +22,9 @@ # - $WM_PROJECT_DIR/etc/prefs.sh # # - User or group values (first file found): -# - ~/.OpenFOAM/$WM_PROJECT_API/prefs.sh +# - ~/.OpenFOAM/$FOAM_API/prefs.sh # - ~/.OpenFOAM/prefs.sh -# - $WM_PROJECT_SITE/$WM_PROJECT_API/etc/prefs.sh +# - $WM_PROJECT_SITE/$FOAM_API/etc/prefs.sh # - $WM_PROJECT_SITE/etc/prefs.sh # # Environment @@ -93,6 +93,7 @@ export WM_COMPILE_OPTION=Opt # [WM_MPLIB] - MPI implementation: # = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM | # HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI +# Also possible to use INTELMPI-xyz etc and define your own wmake rule export WM_MPLIB=SYSTEMOPENMPI diff --git a/etc/caseDicts/postProcessing/pressure/pressureDifference.cfg b/etc/caseDicts/postProcessing/pressure/pressureDifference.cfg index 9ac24c7073313befaddae56b5d85b7425bbc2928..4f652d2ab623fb7990e8f87ea63c88aad86fb95f 100644 --- a/etc/caseDicts/postProcessing/pressure/pressureDifference.cfg +++ b/etc/caseDicts/postProcessing/pressure/pressureDifference.cfg @@ -12,7 +12,7 @@ libs ("libfieldFunctionObjects.so"); operation subtract; writeControl timeStep; -writeInterval 1 +writeInterval 1; log false; region1 diff --git a/etc/config.csh/ensight b/etc/config.csh/ensight deleted file mode 100644 index a840cbda12e1f82b1f0af36d05935cae19569d4c..0000000000000000000000000000000000000000 --- a/etc/config.csh/ensight +++ /dev/null @@ -1,40 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | -#------------------------------------------------------------------------------- -# License -# This file is part of OpenFOAM, licensed under GNU General Public License -# <http://www.gnu.org/licenses/>. -# -# File -# etc/config.csh/ensight -# - sourced by OpenFOAM-*/etc/cshrc -# -# Description -# Setup for ENSIGHT -# -#------------------------------------------------------------------------------ - -# Fallback value -if (! $?CEI_HOME ) then - setenv CEI_HOME /usr/local/ensight/CEI -endif - -if ( -r $CEI_HOME ) then - - # Special treatment for 32bit OpenFOAM and 64bit Ensight - if ($WM_ARCH-`uname -m` == linux-x86_64) setenv CEI_ARCH linux_2.6_32 - - # Add to path - setenv PATH ${CEI_HOME}/bin:${PATH} - - setenv ENSIGHT9_INPUT dummy - setenv ENSIGHT9_READER $FOAM_LIBBIN -else - unsetenv CEI_HOME -endif - -#------------------------------------------------------------------------------ diff --git a/etc/config.csh/mpi b/etc/config.csh/mpi index 0dcad59332c0c9aa528be2304a2ddc843b385373..8ee7a44b12d1e676ca68e40572362baf3146480d 100644 --- a/etc/config.csh/mpi +++ b/etc/config.csh/mpi @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2017-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -33,7 +33,7 @@ unsetenv MPI_ARCH_PATH MPI_HOME setenv FOAM_MPI dummy # Fallback value switch ("$WM_MPLIB") -case SYSTEMOPENMPI: +case SYSTEMOPENMPI*: # The system installed openmpi, locations discovery via mpicc. setenv FOAM_MPI openmpi-system _foamEtc -config openmpi-system # <- Adjustments (optional) @@ -52,7 +52,7 @@ case SYSTEMOPENMPI: endif breaksw -case OPENMPI: +case OPENMPI*: setenv FOAM_MPI openmpi-1.10.4 _foamEtc -config openmpi # <- Adjustments (optional) @@ -243,7 +243,7 @@ case SGIMPI: _foamAddLib $MPI_ARCH_PATH/lib breaksw -case INTELMPI: +case INTELMPI*: if ( $?I_MPI_ROOT ) then # I_MPI_ROOT: The Intel MPI Library installation directory @@ -300,8 +300,8 @@ case INTELMPI: echo " Currently using '$MPI_ARCH_PATH'" endif - _foamAddPath $MPI_ARCH_PATH/bin64 - _foamAddLib $MPI_ARCH_PATH/lib64 + _foamAddPath "$MPI_ARCH_PATH/intel64/bin" + _foamAddLib "$MPI_ARCH_PATH/intel64/lib" breaksw endsw diff --git a/etc/config.csh/paraview b/etc/config.csh/paraview index a0fb0c6351e686e8e0ac038cc7dafed035947570..29d1914d02badf138faf40616fcff3eef8fbd04f 100644 --- a/etc/config.csh/paraview +++ b/etc/config.csh/paraview @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -29,7 +29,7 @@ # ParaView_DIR # PV_PLUGIN_PATH # The OpenFOAM plugin must be the first in PV_PLUGIN_PATH and have -# paraview-major.minor version encoded in its name. +# paraview-major.minor encoded in its name. # # For central installations not located under ThirdParty, the environment # values must be set manually. For example, @@ -66,16 +66,10 @@ set archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER" eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt- $archDir/cmake-"` eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=LD_LIBRARY_PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt-"` -# ThirdParty cmake -set cmake="$archDir/$cmake_version" -if ( -r "$cmake/bin/cmake" ) then - # _foamAddPath not available when foamPV alias is used - setenv PATH "$cmake/bin:${PATH}" -endif - -# Evaluate command-line parameters for ParaView +# Evaluate command-line parameters for ParaView and cmake while ( $#argv > 0 ) switch ($argv[1]) + case cmake*=*: case ParaView*=*: # name=value -> set name=value eval "set $argv[1]" @@ -84,6 +78,13 @@ while ( $#argv > 0 ) shift end +# ThirdParty cmake +set cmake="$archDir/$cmake_version" +if ( -r "$cmake/bin/cmake" ) then + # _foamAddPath not available when foamPV alias is used + setenv PATH "$cmake/bin:${PATH}" +endif + if ($?ParaView_VERSION) then switch ("$ParaView_VERSION") case "": diff --git a/etc/config.csh/settings b/etc/config.csh/settings index ac09ece5bd33628bbe388e3cff45a50bf9f50cc1..f2592aab1f04c2c4dd70913be307b103cb4ff0ec 100644 --- a/etc/config.csh/settings +++ b/etc/config.csh/settings @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -160,8 +160,8 @@ else endif # Shared site (group) executables/libraries -setenv FOAM_SITE_APPBIN "$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin" -setenv FOAM_SITE_LIBBIN "$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/lib" +setenv FOAM_SITE_APPBIN "$siteDir/$FOAM_API/platforms/$WM_OPTIONS/bin" +setenv FOAM_SITE_LIBBIN "$siteDir/$FOAM_API/platforms/$WM_OPTIONS/lib" # User executables/libraries setenv FOAM_USER_APPBIN "$WM_PROJECT_USER_DIR/platforms/$WM_OPTIONS/bin" @@ -183,11 +183,11 @@ endif setenv PATH "${WM_PROJECT_DIR}/bin:${PATH}" # Prepend site-specific scripts to path - only if they exist -if ( -d "$siteDir/bin" ) then # Generic +if ( -d "$siteDir/bin" ) then # Generic _foamAddPath "$siteDir/bin" endif -if ( -d "$siteDir/$WM_PROJECT_API/bin" ) then # API-specific - _foamAddPath "$siteDir/$WM_PROJECT_API/bin" +if ( -d "$siteDir/$FOAM_API/bin" ) then # API-specific + _foamAddPath "$siteDir/$FOAM_API/bin" endif # OpenFOAM executables (user, group, standard) diff --git a/etc/config.csh/setup b/etc/config.csh/setup index a1152d8a74da3d6822e31d211882560e467056f0..8d2833c8c91bcb389b76301238e703deaf61396f 100644 --- a/etc/config.csh/setup +++ b/etc/config.csh/setup @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2018-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -24,8 +24,8 @@ # #------------------------------------------------------------------------------ -# [WM_PROJECT_API] - The API level for the project -setenv WM_PROJECT_API `$WM_PROJECT_DIR/bin/foamEtcFile -show-api` +# [FOAM_API] - The API level for the project +setenv FOAM_API `$WM_PROJECT_DIR/bin/foamEtcFile -show-api` # The installation parent directory set prefixDir="${WM_PROJECT_DIR:h}" @@ -51,8 +51,8 @@ _foamEcho "Locating ThirdParty directory" foreach foamDir (\ "$WM_PROJECT_DIR/ThirdParty" \ "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ - "$prefixDir/ThirdParty-v$WM_PROJECT_API" \ - "$prefixDir/ThirdParty-$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-v$FOAM_API" \ + "$prefixDir/ThirdParty-$FOAM_API" \ "$prefixDir/ThirdParty-common" \ ) _foamEcho "... $foamDir" @@ -139,7 +139,6 @@ _foamEtc -config settings _foamEtc -config mpi _foamEtc -config paraview -- "$FOAM_SETTINGS" # Pass through for evaluation _foamEtc -config vtk -_foamEtc -config ensight ## _foamEtc -config ADIOS ## _foamEtc -config ADIOS2 _foamEtc -config CGAL diff --git a/etc/config.csh/unset b/etc/config.csh/unset index 3041f8931a973ced95b85f6e66432900d2c04263..8a453c36891b46025b889e7032025202742206e6 100644 --- a/etc/config.csh/unset +++ b/etc/config.csh/unset @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -73,6 +73,7 @@ unsetenv WM_THIRD_PARTY_DIR #------------------------------------------------------------------------------ # Unset FOAM_* environment variables +unsetenv FOAM_API unsetenv FOAM_APPBIN unsetenv FOAM_APP unsetenv FOAM_CODE_TEMPLATES diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk index aaeccc386159b48d9ddbf93c19276e84b734eadb..dbd5edf90c60a6c958c697bcbd7479d20be3796f 100644 --- a/etc/config.csh/vtk +++ b/etc/config.csh/vtk @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -32,31 +32,37 @@ set vtk_version=VTK-8.2.0 set mesa_version=mesa-17.1.1 +set mesa_llvm=none -setenv VTK_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version -setenv MESA_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version +setenv VTK_DIR "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version" +setenv MESA_ARCH_PATH "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version" +setenv LLVM_ARCH_PATH "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH/$mesa_llvm" # END OF (NORMAL) USER EDITABLE PART #------------------------------------------------------------------------------ if ($?FOAM_VERBOSE && $?prompt) then - echo "Using vtk ($vtk_version) -> $VTK_DIR" - echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" + echo "Using vtk" + echo " vtk ($vtk_version) $VTK_DIR" + echo " mesa ($mesa_version) $MESA_ARCH_PATH" + echo " llvm ($mesa_llvm) $LLVM_ARCH_PATH" endif # Set paths if binaries are present -if ( -r $VTK_DIR ) then +if ( -d "$VTK_DIR" ) then # Uses lib/ and not lib64/ - _foamAddLib $VTK_DIR/lib + _foamAddLib "$VTK_DIR/lib" else unset VTK_DIR endif -if ( -r $MESA_ARCH_PATH ) then - _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH +if ( -d "$MESA_ARCH_PATH" ) then + _foamAddLibAuto "$LLVM_ARCH_PATH" + _foamAddLibAuto "$MESA_ARCH_PATH" else + unset LLVM_ARCH_PATH unset MESA_ARCH_PATH endif -unset vtk_version mesa_version +unset vtk_version mesa_version mesa_llvm #------------------------------------------------------------------------------ diff --git a/etc/config.sh/ensight b/etc/config.sh/ensight deleted file mode 100644 index 933aa6c9df2d03396de201e5879b93ad00dbeddd..0000000000000000000000000000000000000000 --- a/etc/config.sh/ensight +++ /dev/null @@ -1,42 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | -#------------------------------------------------------------------------------ -# License -# This file is part of OpenFOAM, licensed under GNU General Public License -# <http://www.gnu.org/licenses/>. -# -# File -# etc/config.sh/ensight -# - sourced by OpenFOAM-*/etc/bashrc -# -# Description -# Setup for ENSIGHT -# -#------------------------------------------------------------------------------ - -# Fallback value -[ -d "$CEI_HOME" ] || export CEI_HOME=/usr/local/ensight/CEI - -if [ -r $CEI_HOME ] -then - - # Special treatment for 32bit OpenFOAM and 64bit Ensight - [ "$WM_ARCH-$(uname -m)" = linux-x86_64 ] && export CEI_ARCH=linux_2.6_32 - - # Add to path if required - if [ "$CEI_HOME/bin/ensight" != "$(command -v ensight)" ] - then - export PATH=$CEI_HOME/bin:$PATH - fi - - export ENSIGHT9_INPUT=dummy - export ENSIGHT9_READER=$FOAM_LIBBIN -else - unset CEI_HOME -fi - -#------------------------------------------------------------------------------ diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi index 28b95885d329b5efd587ab7765b9c61ab5983fb4..014bd7bf38274edd5490cefbb852ce4cd4eb8ac8 100644 --- a/etc/config.sh/mpi +++ b/etc/config.sh/mpi @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2017-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -33,7 +33,7 @@ unset MPI_ARCH_PATH MPI_HOME export FOAM_MPI=dummy # Fallback value case "$WM_MPLIB" in -SYSTEMOPENMPI) +SYSTEMOPENMPI*) # The system installed openmpi, locations discovery via mpicc. export FOAM_MPI=openmpi-system @@ -58,7 +58,7 @@ SYSTEMOPENMPI) fi ;; -OPENMPI) +OPENMPI*) export FOAM_MPI=openmpi-1.10.4 _foamEtc -config openmpi # <- Adjustments (optional) @@ -261,7 +261,7 @@ SGIMPI) _foamAddLib $MPI_ARCH_PATH/lib ;; -INTELMPI) +INTELMPI*) if [ -n "$I_MPI_ROOT" ] then # I_MPI_ROOT: The Intel MPI Library installation directory @@ -303,8 +303,8 @@ INTELMPI) export FOAM_MPI MPI_ARCH_PATH - _foamAddPath $MPI_ARCH_PATH/bin64 - _foamAddLib $MPI_ARCH_PATH/lib64 + _foamAddPath "$MPI_ARCH_PATH/intel64/bin" + _foamAddLib "$MPI_ARCH_PATH/intel64/lib" ;; esac diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview index 87ba79beb9e69f15d25b841cde5ed5cebcfe5cd2..7538f3ca472ff7f3b15dc842e06726a36de9f739 100644 --- a/etc/config.sh/paraview +++ b/etc/config.sh/paraview @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -71,25 +71,25 @@ eval \ "$($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=LD_LIBRARY_PATH \ $ParaView_DIR $archDir/ParaView- $archDir/qt-)" -# ThirdParty cmake -cmake="$archDir/$cmake_version" -if [ -r "$cmake/bin/cmake" ] -then - # _foamAddPath not available when foamPV function is used - PATH="$cmake/bin:$PATH" -fi - -# Evaluate command-line parameters for ParaView +# Evaluate command-line parameters for ParaView and cmake for i do case "$i" in - (ParaView*=*) + (cmake*=* | ParaView*=*) # name=value -> export name=value eval "export $i" ;; esac done +# ThirdParty cmake +cmake="$archDir/$cmake_version" +if [ -r "$cmake/bin/cmake" ] +then + # _foamAddPath not available when foamPV function is used + PATH="$cmake/bin:$PATH" +fi + case "$ParaView_VERSION" in ('') # empty - do nothing diff --git a/etc/config.sh/settings b/etc/config.sh/settings index c0ea5654aa78c8252c6006e5fdbbfb42ece2c09f..55e2f1829e09035008ec5c157ff7e140a03d2ea2 100644 --- a/etc/config.sh/settings +++ b/etc/config.sh/settings @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -155,8 +155,8 @@ else fi # Shared site (group) executables/libraries -export FOAM_SITE_APPBIN="$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin" -export FOAM_SITE_LIBBIN="$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/lib" +export FOAM_SITE_APPBIN="$siteDir/$FOAM_API/platforms/$WM_OPTIONS/bin" +export FOAM_SITE_LIBBIN="$siteDir/$FOAM_API/platforms/$WM_OPTIONS/lib" # User executables/libraries export FOAM_USER_APPBIN="$WM_PROJECT_USER_DIR/platforms/$WM_OPTIONS/bin" @@ -180,13 +180,13 @@ fi export PATH="$WM_PROJECT_DIR/bin:$PATH" # Prepend site-specific scripts to path - only if they exist -if [ -d "$siteDir/bin" ] # Generic +if [ -d "$siteDir/bin" ] # Generic then _foamAddPath "$siteDir/bin" fi -if [ -d "$siteDir/$WM_PROJECT_API/bin" ] # API-specific +if [ -d "$siteDir/$FOAM_API/bin" ] # API-specific then - _foamAddPath "$siteDir/$WM_PROJECT_API/bin" + _foamAddPath "$siteDir/$FOAM_API/bin" fi # OpenFOAM executables (user, group, standard) diff --git a/etc/config.sh/setup b/etc/config.sh/setup index 40ab0012f72129d64fbcd3b46d491f62869ae529..ed692ec25956fce78970bca1a91ed96490bf42a6 100644 --- a/etc/config.sh/setup +++ b/etc/config.sh/setup @@ -24,8 +24,8 @@ # #------------------------------------------------------------------------------ -# [WM_PROJECT_API] - The API level for the project -export WM_PROJECT_API="$($WM_PROJECT_DIR/bin/foamEtcFile -show-api)" +# [FOAM_API] - The API level for the project +export FOAM_API="$($WM_PROJECT_DIR/bin/foamEtcFile -show-api)" # The installation parent directory prefixDir="${WM_PROJECT_DIR%/*}" @@ -52,8 +52,8 @@ _foamEcho "Locating ThirdParty directory" for WM_THIRD_PARTY_DIR in \ "$WM_PROJECT_DIR/ThirdParty" \ "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ - "$prefixDir/ThirdParty-v$WM_PROJECT_API" \ - "$prefixDir/ThirdParty-$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-v$FOAM_API" \ + "$prefixDir/ThirdParty-$FOAM_API" \ "$prefixDir/ThirdParty-common" \ ; do @@ -119,7 +119,6 @@ _foamEtc -config settings _foamEtc -config mpi _foamEtc -config paraview -- "$@" # Pass through for evaluation _foamEtc -config vtk -_foamEtc -config ensight _foamEtc -config gperftools ## _foamEtc -config ADIOS ## _foamEtc -config ADIOS2 diff --git a/etc/config.sh/unset b/etc/config.sh/unset index 4d3c5fd0e410a089790bedaeee7d73d3f891a2d4..2153e87f94cd6ce9701985513b65dd69892c44f9 100644 --- a/etc/config.sh/unset +++ b/etc/config.sh/unset @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -63,6 +63,7 @@ unset WM_THIRD_PARTY_DIR #------------------------------------------------------------------------------ # Unset FOAM_* environment variables +unset FOAM_API unset FOAM_APPBIN unset FOAM_APP unset FOAM_CODE_TEMPLATES diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk index 782fcc43e40dd5081b14cf9a55fbf7f8a1580604..4815da2435c7d6ee079b75042249661d290424e7 100644 --- a/etc/config.sh/vtk +++ b/etc/config.sh/vtk @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -33,38 +33,44 @@ vtk_version=VTK-8.2.0 mesa_version=mesa-17.1.1 +mesa_llvm=none -export VTK_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version -export MESA_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version +export VTK_DIR="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version" +export MESA_ARCH_PATH="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version" +export LLVM_ARCH_PATH="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH/$mesa_llvm" # END OF (NORMAL) USER EDITABLE PART #------------------------------------------------------------------------------ if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] then - echo "Using vtk ($vtk_version) -> $VTK_DIR" 1>&2 - echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" 1>&2 + echo "Using vtk" 1>&2 + echo " vtk ($vtk_version) $VTK_DIR" 1>&2 + echo " mesa ($mesa_version) $MESA_ARCH_PATH" 1>&2 + echo " llvm ($mesa_llvm) $LLVM_ARCH_PATH" 1>&2 fi if command -v _foamAddLib > /dev/null 2>&1 # normal sourcing then # Set paths if binaries are present - if [ -r $VTK_DIR ] + if [ -d "$VTK_DIR" ] then # Uses lib/ and not lib64/ - _foamAddLib $VTK_DIR/lib + _foamAddLib "$VTK_DIR/lib" else unset VTK_DIR fi - if [ -r $MESA_ARCH_PATH ] + if [ -d "$MESA_ARCH_PATH" ] then - _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH + _foamAddLibAuto "$LLVM_ARCH_PATH" + _foamAddLibAuto "$MESA_ARCH_PATH" else + unset LLVM_ARCH_PATH unset MESA_ARCH_PATH fi - unset vtk_version mesa_version + unset vtk_version mesa_version mesa_llvm fi #------------------------------------------------------------------------------ diff --git a/etc/cshrc b/etc/cshrc index 5fabac3903fbe3327a61fadb98666f1fce84d814..60f61fbcb0ad7ad474574599a1d592adb95ebb51 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License @@ -22,9 +22,9 @@ # - $WM_PROJECT_DIR/etc/prefs.csh # # - User or group values (first file found): -# - ~/.OpenFOAM/$WM_PROJECT_API/prefs.csh +# - ~/.OpenFOAM/$FOAM_API/prefs.csh # - ~/.OpenFOAM/prefs.csh -# - $WM_PROJECT_SITE/$WM_PROJECT_API/etc/prefs.csh +# - $WM_PROJECT_SITE/$FOAM_API/etc/prefs.csh # - $WM_PROJECT_SITE/prefs.csh # # Environment @@ -95,6 +95,7 @@ setenv WM_COMPILE_OPTION Opt # [WM_MPLIB] - MPI implementation: # = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM | # HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI +# Also possible to use INTELMPI-xyz etc and define your own wmake rule setenv WM_MPLIB SYSTEMOPENMPI diff --git a/modules/avalanche b/modules/avalanche index a83eb8c203ada545580a621b02b63782f2518d96..6106b0f8f4fd02a920f5bf46e3909fcb755b8805 160000 --- a/modules/avalanche +++ b/modules/avalanche @@ -1 +1 @@ -Subproject commit a83eb8c203ada545580a621b02b63782f2518d96 +Subproject commit 6106b0f8f4fd02a920f5bf46e3909fcb755b8805 diff --git a/modules/catalyst b/modules/catalyst index f0c9f44bcb94a2bdb195fb60ccf32a9615f05ff1..22a67b4d48436563896c5d7df1ba63c3f93ba07a 160000 --- a/modules/catalyst +++ b/modules/catalyst @@ -1 +1 @@ -Subproject commit f0c9f44bcb94a2bdb195fb60ccf32a9615f05ff1 +Subproject commit 22a67b4d48436563896c5d7df1ba63c3f93ba07a diff --git a/modules/cfmesh b/modules/cfmesh index 768075fbef083b2b66e8c79cfaf5fc97e6d18187..33033ed94e36eb7506146ad573005e4c866be88f 160000 --- a/modules/cfmesh +++ b/modules/cfmesh @@ -1 +1 @@ -Subproject commit 768075fbef083b2b66e8c79cfaf5fc97e6d18187 +Subproject commit 33033ed94e36eb7506146ad573005e4c866be88f diff --git a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H index 159068a43d5d0180320a0a049ef32ff0b5b3eeff..82d9466c85688bf002b1a95263731fd1d2634ad1 100644 --- a/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H +++ b/src/OpenFOAM/containers/PtrLists/PtrDynList/PtrDynListI.H @@ -272,7 +272,7 @@ inline Foam::autoPtr<T> Foam::PtrDynList<T, SizeMin>::set const autoPtr<T>& aptr ) { - this->set(i, const_cast<autoPtr<T>&>(aptr).release()); + return this->set(i, const_cast<autoPtr<T>&>(aptr).release()); } @@ -283,7 +283,7 @@ inline Foam::autoPtr<T> Foam::PtrDynList<T, SizeMin>::set const tmp<T>& tptr ) { - this->set(i, tptr.ptr()); + return this->set(i, tptr.ptr()); } diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C index 1669a43174b4fed6656d85356b72026d813a9aa2..d7aca3a4e9f09adbc935c3841755cda945eb53e1 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.C +++ b/src/OpenFOAM/db/regIOobject/regIOobject.C @@ -96,9 +96,12 @@ Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy) eventNo_(db().getEvent()), isPtr_(nullptr) { - if (registerCopy && rio.registered_) + if (registerCopy) { - const_cast<regIOobject&>(rio).checkOut(); + if (rio.registered_) + { + const_cast<regIOobject&>(rio).checkOut(); + } checkIn(); } } diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index f7c622e746b4d68748bd08f7228def6815957556..51fc94869d065dd9e6ab7b51d9b5d042cfac5f2e 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015-2018 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -672,6 +672,9 @@ void Foam::argList::setCasePaths() globalCase_ = caseDir.name(); case_ = globalCase_; // The (processor) local case name + // OPENFOAM API + setEnv("FOAM_API", std::to_string(foamVersion::api), true); + // Global case (directory) and case-name as environment variables setEnv("FOAM_CASE", caseDir, true); setEnv("FOAM_CASENAME", globalCase_, true); diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index e569e02e5256b78141c58c1cdf881a869f089831..a33bfda34317693ac5de5b824fdd0c285683c342 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -57,6 +57,8 @@ Description may be present for some solvers or utilities. Environment variables set by argList or by Time: + - \par FOAM_API + The value of foamVersion::api - \par FOAM_CASE The path of the global case. It is the same for serial and parallel jobs. diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C index b7c1098afe88959ad833636704ad4b8b4df7b20b..e68a20760449020f72794a8d4b4f3f067f5e11ba 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C @@ -206,7 +206,11 @@ Foam::solverPerformance Foam::PBiCGStab::solve solverPerf.finalResidual() = gSumMag(sA, matrix().mesh().comm())/normFactor; - if (solverPerf.checkConvergence(tolerance_, relTol_)) + if + ( + solverPerf.nIterations() >= minIter_ + && solverPerf.checkConvergence(tolerance_, relTol_) + ) { for (label cell=0; cell<nCells; cell++) { diff --git a/src/OpenFOAM/meshes/boundBox/boundBoxI.H b/src/OpenFOAM/meshes/boundBox/boundBoxI.H index aa95e05411783622bf5534eaa11adc064f42edab..0379a93ee8a446ec12f9901680715cafed0a821e 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBoxI.H +++ b/src/OpenFOAM/meshes/boundBox/boundBoxI.H @@ -143,7 +143,7 @@ inline Foam::scalar Foam::boundBox::avgDim() const } -Foam::label Foam::boundBox::nDim() const +inline Foam::label Foam::boundBox::nDim() const { label ngood = 0; diff --git a/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C b/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C index 77ede96916ecd0d24736f52f58496d89759e6f51..49f64b43e126ddea06b96fff9aff56a970d2ce8b 100644 --- a/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C +++ b/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C @@ -224,7 +224,15 @@ Foam::vtk::Tools::zeroField data->SetNumberOfComponents(static_cast<int>(pTraits<Type>::nComponents)); data->SetNumberOfTuples(size); + // Fill() was not available before VTK-8 + #if (VTK_MAJOR_VERSION < 8) + for (int i = 0; i < data->GetNumberOfComponents(); ++i) + { + data->FillComponent(i, 0); + } + #else data->Fill(0); + #endif return data; } diff --git a/src/conversion/vtk/output/foamVtkInternalWriter.C b/src/conversion/vtk/output/foamVtkInternalWriter.C index 1179b8971fe310923523e38d35350cfab922a951..6e0769ee686d815b5db0786d26c6f0f0f0bed22d 100644 --- a/src/conversion/vtk/output/foamVtkInternalWriter.C +++ b/src/conversion/vtk/output/foamVtkInternalWriter.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -665,9 +665,9 @@ void Foam::vtk::internalWriter::writeCellIDs() bool Foam::vtk::internalWriter::writeProcIDs() { - if (!Pstream::parRun()) + if (!parallel_) { - // Skip serial output (meaningless) + // Disabled in serial output (meaningless) return false; } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C index 50e10cf9997a891c9d27a1fe85848d22d65b0c18..1472633a48c0194289c42465e60e14e0f0c4a404 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C @@ -171,10 +171,30 @@ Foam::labelPair Foam::addPatchCellLayer::getEdgeString // - which hasn't been handled yet // - with same neighbour // - that needs extrusion + + const label initFp = startFp; while (true) { label prevFp = fEdges.rcIndex(startFp); + if (prevFp == initFp) + { + const edge& e = pp.edges()[fEdges[initFp]]; + const face& localF = pp.localFaces()[patchFacei]; + + FatalErrorInFunction + << "On face:" << patchFacei + << " fc:" << pp.faceCentres()[patchFacei] + << " vertices:" << localF + << " points:" + << UIndirectList<point>(pp.points(), pp[patchFacei]) + << " edges:" << fEdges + << " All edges of face seem to have same neighbour " + << nbrGlobalFacei + << " starting walking from edge " << e + << exit(FatalError); + } + if ( !sameEdgeNeighbour diff --git a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C index bc904e8e27c5e668982ca883606d399fa91e532f..53dda11eacb2ce5d976c1e9388ac2add88c76d87 100644 --- a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C +++ b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2018-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2016-2017 Wikki Ltd @@ -173,6 +173,12 @@ Foam::faBoundaryMesh::faBoundaryMesh void Foam::faBoundaryMesh::calcGeometry() { + // processorFaPatch geometry triggers calculation of pointNormals. + // This uses parallel comms and hence will not be trigggered + // on processors that do not have a processorFaPatch so instead + // force construction. + (void)mesh_.pointAreaNormals(); + forAll(*this, patchi) { operator[](patchi).initGeometry(); @@ -377,6 +383,12 @@ bool Foam::faBoundaryMesh::checkDefinition(const bool report) const void Foam::faBoundaryMesh::movePoints(const pointField& p) { + // processorFaPatch geometry triggers calculation of pointNormals. + // This uses parallel comms and hence will not be trigggered + // on processors that do not have a processorFaPatch so instead + // force construction. + (void)mesh_.pointAreaNormals(); + faPatchList& patches = *this; forAll(patches, patchi) diff --git a/src/finiteArea/faMesh/faMesh.C b/src/finiteArea/faMesh/faMesh.C index fb90fe17f6fb06d6a3541d0d9bf6d82cf3ce78fd..85873a4743731f906e47a049bffcbe128a1ccc7b 100644 --- a/src/finiteArea/faMesh/faMesh.C +++ b/src/finiteArea/faMesh/faMesh.C @@ -235,7 +235,7 @@ Foam::faMesh::faMesh(const polyMesh& pMesh) // Calculate the geometry for the patches (transformation tensors etc.) boundary_.calcGeometry(); - if (isFile(pMesh.time().timePath()/"S0")) + if (isFile(pMesh.time().timePath()/mesh().dbDir()/"S0")) { S0Ptr_ = new DimensionedField<scalar, areaMesh> ( diff --git a/src/functionObjects/Allwmake b/src/functionObjects/Allwmake index be5bc411709eb44e7835cbb42473b0a148f44c49..fa4da4d414e623807096d0a3512b392ca84059cf 100755 --- a/src/functionObjects/Allwmake +++ b/src/functionObjects/Allwmake @@ -12,4 +12,6 @@ wmake $targetType solvers ./graphics/Allwmake $targetType +./randomProcesses/Allwmake $targetType + #------------------------------------------------------------------------------ diff --git a/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.C b/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.C index 7c19426a6e998906e4f62f40f96cc99f05bce937..23da6e0e6457bca9ac3cc7230069467ff619b2e9 100644 --- a/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.C +++ b/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.C @@ -62,7 +62,7 @@ void Foam::functionObjects::energySpectrum::calcAndWriteSpectrum const vectorField& C, const vector& c0, const vector& deltaC, - const Vector<label>& N, + const Vector<int>& N, const scalar kappaNorm ) { @@ -72,7 +72,7 @@ void Foam::functionObjects::energySpectrum::calcAndWriteSpectrum fft::forwardTransform ( ReComplexField(U), - List<label>({N.x(), N.y(), N.z()}) + List<int>({N.x(), N.y(), N.z()}) ) /scalar(cmptProduct(N)) ); @@ -159,7 +159,7 @@ bool Foam::functionObjects::energySpectrum::read(const dictionary& dict) const vector L(meshBb.max() - meshBb.min()); const vector nCellXYZ(cmptDivide(L, cellBb.max() - cellBb.min())); - N_ = Vector<label> + N_ = Vector<int> ( round(nCellXYZ.x()), round(nCellXYZ.z()), diff --git a/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.H b/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.H index 9958d6edbe7f412a74defc63adb2a9bcba0a8f7d..9af3cefe045a708c695c327335f3e9e7573ed5ee 100644 --- a/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.H +++ b/src/functionObjects/randomProcesses/energySpectrum/energySpectrum.H @@ -96,7 +96,7 @@ protected: word UName_; //- Number of cells in I-J-K directions - Vector<label> N_; + Vector<int> N_; //- Reference point vector c0_; @@ -121,7 +121,7 @@ protected: const vectorField& C, const vector& c0, const vector& deltaC, - const Vector<label>& N, + const Vector<int>& N, const scalar kappaNorm ); diff --git a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappyLayerDriver.C b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappyLayerDriver.C index 87bb6389d4cf01ed41999182bae4986c80d1f0ed..dee5f277075d4008182efd076b27e300a729232b 100644 --- a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappyLayerDriver.C +++ b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappyLayerDriver.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -674,6 +674,71 @@ void Foam::snappyLayerDriver::handleNonManifolds Info<< "Set displacement to zero for all " << nNonManif << " non-manifold points" << endl; + + + + // 4. Check for extrusion of baffles i.e. all edges of a face having the + // same two neighbouring faces (one of which is the current face). + // Note: this is detected locally already before - this test is for the + // extremely rare occurence where the baffle faces are on different + // processors. + { + label nBaffleFaces = 0; + + const labelListList& faceEdges = pp.faceEdges(); + forAll(pp, facei) + { + const labelList& fEdges = faceEdges[facei]; + + const labelList& globFaces0 = edgeGlobalFaces[fEdges[0]]; + if (globFaces0.size() == 2) + { + const edge e0(globFaces0[0], globFaces0[1]); + bool isBaffle = true; + for (label fp = 1; fp < fEdges.size(); fp++) + { + const labelList& globFaces = edgeGlobalFaces[fEdges[fp]]; + if + ( + (globFaces.size() != 2) + || (edge(globFaces[0], globFaces[1]) != e0) + ) + { + isBaffle = false; + break; + } + } + + if (isBaffle) + { + bool unextrude = unmarkExtrusion + ( + pp.localFaces()[facei], + patchDisp, + patchNLayers, + extrudeStatus + ); + if (unextrude) + { + //Pout<< "Detected extrusion of baffle face " + // << pp.faceCentres()[facei] + // << " since all edges have the same neighbours " + // << e0 << endl; + + nBaffleFaces++; + } + } + } + } + + reduce(nBaffleFaces, sumOp<label>()); + + if (nBaffleFaces) + { + Info<< "Set displacement to zero for all points on " << nBaffleFaces + << " baffle faces" << endl; + } + } } diff --git a/src/regionModels/thermalBaffleModels/thermalBaffleModel/thermalBaffleModelNew.C b/src/regionModels/thermalBaffleModels/thermalBaffleModel/thermalBaffleModelNew.C index ee6831c9ee4fcc6d8235a4de43371856b38628e0..90ed6065e2e14bec5360b77063d93df08da40888 100644 --- a/src/regionModels/thermalBaffleModels/thermalBaffleModel/thermalBaffleModelNew.C +++ b/src/regionModels/thermalBaffleModels/thermalBaffleModel/thermalBaffleModelNew.C @@ -38,9 +38,8 @@ namespace thermalBaffleModels autoPtr<thermalBaffleModel> thermalBaffleModel::New(const fvMesh& mesh) { - word modelType; - { - IOdictionary thermalBafflePropertiesDict + const word modelType = + IOdictionary ( IOobject ( @@ -51,15 +50,7 @@ autoPtr<thermalBaffleModel> thermalBaffleModel::New(const fvMesh& mesh) IOobject::NO_WRITE, false ) - ); - - word modelType = - thermalBafflePropertiesDict.lookupOrDefault<word> - ( - "thermalBaffleModel", - "thermalBaffle" - ); - } + ).lookupOrDefault<word>("thermalBaffleModel", "thermalBaffle"); auto cstrIter = meshConstructorTablePtr_->cfind(modelType); @@ -84,7 +75,7 @@ autoPtr<thermalBaffleModel> thermalBaffleModel::New const dictionary& dict ) { - word modelType = + const word modelType = dict.lookupOrDefault<word>("thermalBaffleModel", "thermalBaffle"); auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType); diff --git a/src/sampling/sampledSurface/writers/ensight/ensightSurfaceWriterImpl.C b/src/sampling/sampledSurface/writers/ensight/ensightSurfaceWriterImpl.C index cb040ff965fbb65ed9024d229d570ed124191403..b78edb71785267204f73a046887fd240445b80bf 100644 --- a/src/sampling/sampledSurface/writers/ensight/ensightSurfaceWriterImpl.C +++ b/src/sampling/sampledSurface/writers/ensight/ensightSurfaceWriterImpl.C @@ -193,7 +193,7 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated scalar timeValue = 0.0; readScalar(timeDir, timeValue); - scalar meshValue = 0; + scalar meshValue = timeValue; if (!isDir(baseDir)) { diff --git a/src/thermophysicalModels/radiation/radiationModels/solarLoad/faceShading/faceShading.C b/src/thermophysicalModels/radiation/radiationModels/solarLoad/faceShading/faceShading.C index 4c0785eb1185498c38a1ef2b8f4af7935712dbb2..da762b641de47118091f3668e64769b8d0100d37 100644 --- a/src/thermophysicalModels/radiation/radiationModels/solarLoad/faceShading/faceShading.C +++ b/src/thermophysicalModels/radiation/radiationModels/solarLoad/faceShading/faceShading.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2017-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,11 +26,10 @@ License #include "faceShading.H" #include "fvMesh.H" #include "boundaryRadiationProperties.H" -#include "OFstream.H" #include "cyclicAMIPolyPatch.H" #include "volFields.H" #include "distributedTriSurfaceMesh.H" - +#include "OBJstream.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -49,25 +48,14 @@ void Foam::faceShading::writeRays const pointField& myFc ) { - OFstream str(fName); - label vertI = 0; + OBJstream os(fName); - Pout<< "Dumping rays to " << str.name() << endl; + Pout<< "Dumping rays to " << os.name() << endl; forAll(myFc, faceI) { - meshTools::writeOBJ(str, myFc[faceI]); - vertI++; - meshTools::writeOBJ(str, endCf[faceI]); - vertI++; - str << "l " << vertI-1 << ' ' << vertI << nl; + os.write(linePointRef(myFc[faceI], endCf[faceI])); } - str.flush(); - - Pout<< "cmd: objToVTK " << fName.c_str() << endl; - - stringList cmd({"objToVTK", fName, fName.lessExt().ext("vtk")}); - Foam::system(cmd); } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/Allclean b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/Allclean index 9e53e2850bd3a22ece2b0d3df4fff63f6795dd65..d4a9953c5116d9aff95672ff9f7541de5fb9ea56 100755 --- a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/Allclean +++ b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/Allclean @@ -4,7 +4,6 @@ cd ${0%/*} || exit 1 # Run from this directory cleanCase0 -rm -rf VTK rm -rf constant/cellToRegion rm -rf constant/*/polyMesh # region meshes diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict b/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict index b8096e514db550d8b434919d21e63a6b6d19a639..283724bc2d63c640a67f1d991628970012e79e35 100644 --- a/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict +++ b/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict @@ -49,7 +49,7 @@ runTimeModifiable true; functions { - #include "cuttingPlane" + #include "samples" #include "streamLines" #include "forceCoeffs" } diff --git a/wmake/rules/linux64Clang/mplibINTELMPI b/wmake/rules/linux64Clang/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64Clang/mplibINTELMPI +++ b/wmake/rules/linux64Clang/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linux64Cray/mplibINTELMPI b/wmake/rules/linux64Cray/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64Cray/mplibINTELMPI +++ b/wmake/rules/linux64Cray/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linux64Gcc/mplibINTELMPI b/wmake/rules/linux64Gcc/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64Gcc/mplibINTELMPI +++ b/wmake/rules/linux64Gcc/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linux64GccKNL/mplibINTELMPI b/wmake/rules/linux64GccKNL/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64GccKNL/mplibINTELMPI +++ b/wmake/rules/linux64GccKNL/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linux64Icc/mplibINTELMPI b/wmake/rules/linux64Icc/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64Icc/mplibINTELMPI +++ b/wmake/rules/linux64Icc/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linux64IccKNL/mplibINTELMPI b/wmake/rules/linux64IccKNL/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linux64IccKNL/mplibINTELMPI +++ b/wmake/rules/linux64IccKNL/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/rules/linuxARM64Arm/c b/wmake/rules/linuxARM64Arm/c index 91a1e739afdfc1596b33a83a8d6a17d281d8beca..06b574e59f6b2430fdc3b8198d037a87f7c8dde7 100644 --- a/wmake/rules/linuxARM64Arm/c +++ b/wmake/rules/linuxARM64Arm/c @@ -1,6 +1,6 @@ SUFFIXES += .c -cc = armclang +cc = armclang -mcpu=native cWARN = -Wall @@ -12,5 +12,5 @@ ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $< -o $@ LINK_LIBS = $(cDBUG) -LINKLIBSO = $(cc) -shared -LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs +LINKLIBSO = $(cc) -shared -armpl +LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs -armpl diff --git a/wmake/rules/linuxARM64Arm/c++ b/wmake/rules/linuxARM64Arm/c++ index 5704e839a9b9edbeeaf92675661b79b937716c72..4bbc646aecb34986641e41a5a6b7d5a3ddd0d1ed 100644 --- a/wmake/rules/linuxARM64Arm/c++ +++ b/wmake/rules/linuxARM64Arm/c++ @@ -1,6 +1,6 @@ include $(GENERAL_RULES)/Clang/c++ -CC = armclang++ -std=c++11 +CC = armclang++ -std=c++11 -mcpu=native include $(DEFAULT_RULES)/c++$(WM_COMPILE_OPTION) @@ -13,5 +13,5 @@ cpptoo = $(Ctoo) LINK_LIBS = $(c++DBUG) -LINKLIBSO = $(CC) $(c++FLAGS) -shared -LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed +LINKLIBSO = $(CC) $(c++FLAGS) -shared -armpl +LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -armpl diff --git a/wmake/rules/linuxARM64Arm/c++Opt b/wmake/rules/linuxARM64Arm/c++Opt index c427c3d08b8d71d05db3ceb32b020fb460f55fa3..7a4e09d9f42d00521d445af644e434507fd7ce20 100644 --- a/wmake/rules/linuxARM64Arm/c++Opt +++ b/wmake/rules/linuxARM64Arm/c++Opt @@ -1,2 +1,2 @@ c++DBUG = -c++OPT = -mcpu=thunderx2t99 -ffp-contract=fast -ffast-math -O3 -funsafe-math-optimizations +c++OPT = -ffp-contract=fast -ffast-math -O3 -funsafe-math-optimizations -fsimdmath -armpl diff --git a/wmake/rules/linuxARM64Arm/cOpt b/wmake/rules/linuxARM64Arm/cOpt index 0086d1849ebac2a560442be4d2032d7c73774e9d..10aa6fc610f154f7a49156a92d54824800811532 100644 --- a/wmake/rules/linuxARM64Arm/cOpt +++ b/wmake/rules/linuxARM64Arm/cOpt @@ -1,2 +1,2 @@ cDBUG = -cOPT = -mcpu=thunderx2t99 -ffp-contract=fast -ffast-math -O3 +cOPT = -ffp-contract=fast -ffast-math -O3 -armpl diff --git a/wmake/rules/linuxARM7Gcc/c b/wmake/rules/linuxARM7Gcc/c index 6845d94483ae7de89f1106267bb220ca500a24a1..2cff6a24d77d33d95700c6eb1275c31b152bd226 100644 --- a/wmake/rules/linuxARM7Gcc/c +++ b/wmake/rules/linuxARM7Gcc/c @@ -1,6 +1,6 @@ SUFFIXES += .c -cc = gcc +cc = gcc -mcpu=cortex-a9 cWARN = -Wall diff --git a/wmake/rules/linuxARM7Gcc/c++ b/wmake/rules/linuxARM7Gcc/c++ index 00a88b07a16c4ec1856fd30302d542fa7ba2404c..a1cf1ad6cf12041797c1a86eca9eca296c87281e 100644 --- a/wmake/rules/linuxARM7Gcc/c++ +++ b/wmake/rules/linuxARM7Gcc/c++ @@ -1,6 +1,6 @@ include $(GENERAL_RULES)/Gcc/c++ -CC = g++ -std=c++11 +CC = g++ -std=c++11 -mcpu=cortex-a9 include $(DEFAULT_RULES)/c++$(WM_COMPILE_OPTION) diff --git a/wmake/rules/linuxARM7Gcc/c++Opt b/wmake/rules/linuxARM7Gcc/c++Opt index fe7b457de7b83c21a980701a223eb319e4ca3112..ab2bfabcd0804e8686593f81507cf546a48992d9 100644 --- a/wmake/rules/linuxARM7Gcc/c++Opt +++ b/wmake/rules/linuxARM7Gcc/c++Opt @@ -1,5 +1,5 @@ c++DBUG = -#c++OPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard -c++OPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=softfp +#c++OPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mfpu=vfpv3-d16 -mfloat-abi=hard +c++OPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mfpu=vfpv3-d16 -mfloat-abi=softfp ROUNDING_MATH = -frounding-math diff --git a/wmake/rules/linuxARM7Gcc/cOpt b/wmake/rules/linuxARM7Gcc/cOpt index c80aa2b5c137b05847b4cb684b3bf4c70cb68550..6efb6d39bf73f9068f94f953012ae2b229eebeec 100644 --- a/wmake/rules/linuxARM7Gcc/cOpt +++ b/wmake/rules/linuxARM7Gcc/cOpt @@ -1,3 +1,3 @@ cDBUG = -#cOPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard -cOPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=softfp +#cOPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mfpu=vfpv3-d16 -mfloat-abi=hard +cOPT = -O3 -floop-optimize -falign-loops -falign-labels -falign-functions -falign-jumps -fprefetch-loop-arrays -mfpu=vfpv3-d16 -mfloat-abi=softfp diff --git a/wmake/rules/linuxIA64Icc/mplibINTELMPI b/wmake/rules/linuxIA64Icc/mplibINTELMPI index 278e0b0f22c7c7d6fafc3334cddccb237afe232e..e5f0d01163d87759eb1b90d317fd8a61058ccb74 100644 --- a/wmake/rules/linuxIA64Icc/mplibINTELMPI +++ b/wmake/rules/linuxIA64Icc/mplibINTELMPI @@ -1,3 +1,3 @@ PFLAGS = -DMPICH_SKIP_MPICXX -PINC = -isystem $(MPI_ARCH_PATH)/include64 -PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi +PINC = -isystem $(MPI_ARCH_PATH)/intel64/include +PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi diff --git a/wmake/wmakeBuildInfo b/wmake/wmakeBuildInfo index 5914b310735c874160cd6280e4c6478523ddb90c..cb86b267d049023dbe33d004162fa428aa00c492 100755 --- a/wmake/wmakeBuildInfo +++ b/wmake/wmakeBuildInfo @@ -1,9 +1,9 @@ -#!/bin/bash +#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2018-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------- # License @@ -26,7 +26,7 @@ # wmakeBuildInfo # # Description -# Print the version used when building the project +# Print the api/version and other build information for the project. # # Environment # - WM_PROJECT_DIR @@ -51,7 +51,7 @@ usage() { Usage: ${0##*/} [OPTION] ${0##*/} [-update] -filter FILE options: - -check Compare make and meta information (exit 0 for no changes) + -cmp, -check Compare make and meta information (exit 0 for no changes) -diff Display differences between make and meta information (exit code 0 for no changes) -dry-run In combination with -update @@ -96,7 +96,7 @@ do -h | -help*) usage ;; - -check) + -cmp | -check) optCheck=true ;; -diff) @@ -156,12 +156,11 @@ fi #------------------------------------------------------------------------------ -# Variables -declare -A makeInfo -declare -A metaInfo +# Variables - for portability, avoiding bash associative arrays +unset make_info meta_info -# -# Populate makeInfo array + +# Populate make_* variables # # - api : from rules/General/general # - patch : cached value from previous make @@ -177,10 +176,9 @@ declare -A metaInfo # # - Working on detached head. # -> branch has value "HEAD" instead of something more readable. -# getMakeInfo() { - if [ "${#makeInfo[*]}" -eq 4 ] + if [ -n "$make_info" ] then ##echo "use cached value for make info" 1>&2 return 0 @@ -188,7 +186,7 @@ getMakeInfo() ##echo "get make info" 1>&2 local api patch build branch - makeInfo=() + unset make_api make_patch make_branch make_build # (api) from WM_DIR/rules/General/general # - extract WM_VERSION = OPENFOAM=<digits> @@ -211,15 +209,15 @@ getMakeInfo() branch="$(git --git-dir=$WM_PROJECT_DIR/.git rev-parse --abbrev-ref HEAD 2>/dev/null)" fi - makeInfo[api]="$api" - makeInfo[patch]="${patch:-0}" # default is 0 - makeInfo[branch]="$branch" - makeInfo[build]="$build" + make_api="$api" + make_patch="${patch:-0}" # Default is 0 (unpatched) + make_branch="$branch" + make_build="$build" + make_info=true } -# -# Populate metaInfo array +# Populate meta_* variables # # - api : from META-INFO/api-info # - patch : from META-INFO/api-info @@ -229,10 +227,9 @@ getMakeInfo() # Failure modes: # - Directory, file or entry not found. # -> corresponding entries are empty strings -# getMetaInfo() { - if [ "${#metaInfo[*]}" -eq 4 ] + if [ -n "$meta_info" ] then ##echo "use cached value for meta info" 1>&2 return 0 @@ -240,7 +237,7 @@ getMetaInfo() ##echo "get meta info" 1>&2 local api patch build branch - metaInfo=() + unset meta_api meta_patch meta_branch meta_build if [ -d "$metaInfoDir" ] then @@ -253,14 +250,14 @@ getMetaInfo() build="$(sed -ne 's@^build *= *\([^ ]*\).*@\1@p' $metaInfoDir/build-info 2>/dev/null)" fi - metaInfo[api]="$api" - metaInfo[patch]="${patch:-0}" # default is 0 - metaInfo[branch]="$branch" - metaInfo[build]="$build" + meta_api="$api" + meta_patch="${patch:-0}" # Default is 0 (unpatched) + meta_branch="$branch" + meta_build="$build" + meta_info=true } -# # Get api from rules/General/general # # Failure modes: @@ -268,18 +265,17 @@ getMetaInfo() # -> Fatal for building, but could be OK for a stripped down version # # Fallback. Get from api-info -# getApi() { getMakeInfo # Local copy - local api="${makeInfo[api]}" + local api="${make_api}" if [ -z "$api" ] then getMetaInfo - api="${metaInfo[api]}" + api="${meta_api}" fi if [ -n "$api" ] @@ -295,53 +291,69 @@ getApi() # # Failure modes: # - No patch information (can't find file etc). -# getPatchLevel() { getMetaInfo # Local copy - local value="${metaInfo[patch]}" + local patch="${meta_patch}" - if [ -n "$value" ] + if [ -n "$patch" ] then - echo "$value" + echo "$patch" else return 1 fi } +# # Report make info +# reportMakeInfo() { getMakeInfo getMetaInfo - local patch="${metaInfo[patch]}" # <- From meta-info only - makeInfo[patch]="${patch:=0}" # Extra safety - echo "make" - for key in api patch branch build - do - echo " $key = ${makeInfo[$key]}" - done + echo " api = ${make_api}" + echo " patch = ${meta_patch:-0}" # <- From meta-info only + echo " branch = ${make_branch}" + echo " build = ${make_build}" } +# # Report meta info +# reportMetaInfo() { getMetaInfo - local patch="${metaInfo[patch]}" # <- From meta-info only - metaInfo[patch]="${patch:=0}" # Extra safety - echo "meta" - for key in api patch branch build - do - echo " $key = ${metaInfo[$key]}" - done + echo " api = ${meta_api}" + echo " patch = ${meta_patch:-0}" # <- From meta-info only + echo " branch = ${meta_branch}" + echo " build = ${meta_build}" +} + + +# Report diff between make and meta info (single key). +# Set diff_header prior to the first call. +# $1 == key +# $2 == make value +# $3 == meta value +unset diff_header +_reportDiff() +{ + if [ -n "$diff_header" ] + then + echo "$diff_header" + unset diff_header + fi + echo "$1:" + echo " make $2" + echo " meta $3" } @@ -350,50 +362,68 @@ reportMetaInfo() # $1 == verbose, print as diff. Silent otherwise checkDiff() { - local verbose="$1" - local key diff + local diff verbose + + if [ "$1" = "verbose" ] + then + diff_header="Differences" + verbose=true + fi getMakeInfo getMetaInfo - for key in api patch branch build - do - if [ "${makeInfo[$key]}" != "${metaInfo[$key]}" ] + # api + if [ "${make_api}" != "${meta_api}" ] + then + diff=true + + if [ -n "$verbose" ] then - case "$key" in - (branch | build) - # Only trigger when make info (branch, build) are non-empty - if [ -n "${makeInfo[$key]}" ] - then - diff="$diff $key" - fi - - ;; - (*) - diff="$diff $key" - ;; - esac + _reportDiff "api" "${make_api}" "${meta_api}" fi - done + fi - if [ "$verbose" = verbose ] && [ -n "$diff" ] + # patch + if [ "${make_patch}" != "${meta_patch}" ] then - echo "Differences" - for key in $diff - do - echo "$key:" - echo " make ${makeInfo[$key]}" - echo " meta ${metaInfo[$key]}" - done + diff=true + + if [ -n "$verbose" ] + then + _reportDiff "patch" "${make_patch}" "${meta_patch}" + fi + fi + + # branch - only test when make info is non-empty + if [ -n "${make_branch}" ] && [ "${make_branch}" != "${meta_branch}" ] + then + diff=true + + if [ -n "$verbose" ] + then + _reportDiff "branch" "${make_branch}" "${meta_branch}" + fi + fi + + # build - only test when make info is non-empty + if [ -n "${make_build}" ] && [ "${make_build}" != "${meta_build}" ] + then + diff=true + + if [ -n "$verbose" ] + then + _reportDiff "build" "${make_build}" "${meta_build}" + fi fi # No diffs, but never permit entirely empty values for build. - test -z "$diff" || test -z "${makeInfo[build]}${metaInfo[build]}" + test -z "$diff" || test -z "${make_build}${meta_build}" } # -# Update metaInfo (on disk) based on the makeInfo +# Update meta info (on disk) based on the make info # performUpdate() { @@ -401,16 +431,16 @@ performUpdate() getMetaInfo # Local copies of the make info - local api="${makeInfo[api]}" - local branch="${makeInfo[branch]}" - local build="${makeInfo[build]}" - local patch="${makeInfo[patch]}" + local api="${make_api}" + local branch="${make_branch}" + local build="${make_build}" + local patch="${make_patch}" # If any of the make-info are empty (bad), # use the meta-info to avoid spurious changes - [ -n "$api" ] || api="${metaInfo[api]}" - [ -n "$branch" ] || branch="${metaInfo[branch]}" - [ -n "$build" ] || build="${metaInfo[build]}" + [ -n "$api" ] || api="${meta_api}" + [ -n "$branch" ] || branch="${meta_branch}" + [ -n "$build" ] || build="${meta_build}" # Fallback to WM_PROJECT_VERSION alone [ -n "$build" ] || build="${WM_PROJECT_VERSION:-unknown}" @@ -419,12 +449,11 @@ performUpdate() # build-info outputFile="$metaInfoDir/build-info" - if [ "$branch" != "${metaInfo[branch]}" ] || \ - [ "$build" != "${metaInfo[build]}" ] || \ - [ "$patch" != "${metaInfo[patch]}" ] + if [ "$branch" != "${meta_branch}" ] || \ + [ "$build" != "${meta_build}" ] || \ + [ "$patch" != "${meta_patch}" ] then - patch="${metaInfo[patch]}" # <- From meta-info only - : "${patch:=0}" # Extra safety + patch="${meta_patch:-0}" # <- From meta-info only if [ -n "$optDryRun" ] then @@ -441,10 +470,9 @@ performUpdate() # api-info outputFile="$metaInfoDir/api-info" - if [ "$api" != "${metaInfo[api]}" ] + if [ "$api" != "${meta_api}" ] then - patch="${metaInfo[patch]}" # <- From meta-info only - : "${patch:=0}" # Extra safety + patch="${meta_patch:-0}" # <- From meta-info only if [ -n "$optDryRun" ] then @@ -461,8 +489,7 @@ performUpdate() # -# Update metaInfo (on disk) based on the makeInfo -# This is the +# Update meta info (on disk) based on the make info # performFiltering() { @@ -477,11 +504,10 @@ performFiltering() getMetaInfo # Local copies of the make info - local api="${makeInfo[api]}" - local branch="${makeInfo[branch]}" - local build="${makeInfo[build]}" - local patch="${metaInfo[patch]}" # <- From meta-info only - : "${patch:=0}" # Extra safety + local api="${make_api}" + local branch="${make_branch}" + local build="${make_build}" + local patch="${meta_patch:-0}" # <- From meta-info only # If any of the make-info are empty (bad), @@ -492,19 +518,20 @@ performFiltering() if [ -z "$api" ] then - api="${metaInfo[api]}" + api="${meta_api}" api="${api:-0}" # integer value fi # branch/build could be missing for non-git if [ -z "$branch" ] then - branch="${metaInfo[branch]}" + branch="${meta_branch}" branch="${branch:-unknown}" fi + if [ -z "$build" ] then - build="${metaInfo[build]}" + build="${meta_build}" # Fallback to WM_PROJECT_VERSION build="${build:-${WM_PROJECT_VERSION:-unknown}}" fi @@ -523,7 +550,7 @@ performFiltering() #------------------------------------------------------------------------------ -# Dispatching +# Dispatch if [ -n "$optCheck" ] then diff --git a/wmake/wmakeScheduler b/wmake/wmakeScheduler index 08b05d5d5269a9069210b3a2c65e15f0ef0cf2a2..0a92eaa0d84fc87f13fdaec46ef007bfe7c60cc7 100755 --- a/wmake/wmakeScheduler +++ b/wmake/wmakeScheduler @@ -4,7 +4,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2018-2019 OpenCFD Ltd. #------------------------------------------------------------------------------- # License # This file is part of OpenFOAM. @@ -44,20 +44,24 @@ # Sources the relevant cshrc/bashrc if not set. # # Environment +# - FOAM_API # - WM_PROJECT_DIR -# - WM_PROJECT -# - WM_PROJECT_API +# - WM_PROJECT (defaults to OpenFOAM) # #------------------------------------------------------------------------------- -Script=${0##*/} +Script="${0##*/}" -# csh sets HOST, bash sets HOSTNAME -: ${HOST:=$HOSTNAME} +# Default project +[ -n "$WM_PROJECT" ] || WM_PROJECT=OpenFOAM lockDir="$HOME/.$WM_PROJECT/.wmake" +# csh sets HOST, bash sets HOSTNAME +[ -n "$HOST" ] || HOST="$HOSTNAME" + # Fallback - 1 core on current host -: ${WM_HOSTS:=$HOST:1} +[ -n "$WM_HOSTS" ] || WM_HOSTS="${HOST}:1" + # Count the total number of slots available and exit if [ "$1" = "-count" ] @@ -90,13 +94,13 @@ esac # Same as foamEtcFile -mode=uo bashrc # -# Check ~/.$WM_PROJECT/$WM_PROJECT_API/ +# Check ~/.$WM_PROJECT/$FOAM_API/ # Check ~/.$WM_PROJECT/ # Check projectDir/etc/ -if [ -n "$WM_PROJECT" ] +if [ -n "$WM_PROJECT_DIR" ] then for i in \ - "$HOME/.$WM_PROJECT/$WM_PROJECT_API" \ + "$HOME/.$WM_PROJECT/$FOAM_API" \ "$HOME/.$WM_PROJECT" \ "$WM_PROJECT_DIR/etc" \ ; @@ -114,11 +118,11 @@ fi # Use FOAM_SETTINGS to pass command-line settings case "$sourceFoam" in */bashrc) - sourceFoam='[ -n "$WM_PROJECT" ] || '". $sourceFoam $FOAM_SETTINGS" + sourceFoam='[ -n "$WM_PROJECT_DIR" ] || '". $sourceFoam $FOAM_SETTINGS" ;; */cshrc) - sourceFoam='if ( ! $?WM_PROJECT ) source '"$sourceFoam $FOAM_SETTINGS" + sourceFoam='if ( ! $?WM_PROJECT_DIR ) source '"$sourceFoam $FOAM_SETTINGS" ;; esac diff --git a/wmake/wmakeSchedulerUptime b/wmake/wmakeSchedulerUptime index ec8d2e72484027f660641c93fc520ee101b8ef1f..2873d35d4783477c496f1cb664a55b351690562f 100755 --- a/wmake/wmakeSchedulerUptime +++ b/wmake/wmakeSchedulerUptime @@ -4,7 +4,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | Copyright (C) 2018-2019 OpenCFD Ltd. #------------------------------------------------------------------------------- # License # This file is part of OpenFOAM. @@ -44,20 +44,24 @@ # Sources the relevant cshrc/bashrc if not set. # # Environment +# - FOAM_API # - WM_PROJECT_DIR -# - WM_PROJECT -# - WM_PROJECT_API +# - WM_PROJECT (defaults to OpenFOAM) # #------------------------------------------------------------------------------- -Script=${0##*/} +Script="${0##*/}" -# csh sets HOST, bash sets HOSTNAME -: ${HOST:=$HOSTNAME} +# Default project +[ -n "$WM_PROJECT" ] || WM_PROJECT=OpenFOAM lockDir="$HOME/.$WM_PROJECT/.wmake" +# csh sets HOST, bash sets HOSTNAME +[ -n "$HOST" ] || HOST="$HOSTNAME" + # Fallback - 1 core on current host -: ${WM_HOSTS:=$HOST:1} +[ -n "$WM_HOSTS" ] || WM_HOSTS="${HOST}:1" + # Count the total number of slots available and exit if [ "$1" = "-count" ] @@ -90,13 +94,13 @@ esac # Same as foamEtcFile -mode=uo bashrc # -# Check ~/.$WM_PROJECT/$WM_PROJECT_API/ +# Check ~/.$WM_PROJECT/$FOAM_API/ # Check ~/.$WM_PROJECT/ # Check projectDir/etc/ -if [ -n "$WM_PROJECT" ] +if [ -n "$WM_PROJECT_DIR" ] then for i in \ - "$HOME/.$WM_PROJECT/$WM_PROJECT_API" \ + "$HOME/.$WM_PROJECT/$FOAM_API" \ "$HOME/.$WM_PROJECT" \ "$WM_PROJECT_DIR/etc" \ ; @@ -114,11 +118,11 @@ fi # Use FOAM_SETTINGS to pass command-line settings case "$sourceFoam" in */bashrc) - sourceFoam='[ -n "$WM_PROJECT" ] || '". $sourceFoam $FOAM_SETTINGS" + sourceFoam='[ -n "$WM_PROJECT_DIR" ] || '". $sourceFoam $FOAM_SETTINGS" ;; */cshrc) - sourceFoam='if ( ! $?WM_PROJECT ) source '"$sourceFoam $FOAM_SETTINGS" + sourceFoam='if ( ! $?WM_PROJECT_DIR ) source '"$sourceFoam $FOAM_SETTINGS" ;; esac