From f2a372abba91d2f873378975e7829de3e01efb48 Mon Sep 17 00:00:00 2001 From: Jean-Paul Pelteret Date: Thu, 20 Aug 2015 15:29:48 +0200 Subject: [PATCH] Direct support for Abaqus mesh files in GridIn. The mesh_converter program is now considered obsolete and has been removed from the contrib folder. Direct support for Abaqus mesh files has been added to the GridIn class through the function GridIn::read_abaqus(). An internal class Abaqus_to_UCD captures all of the functionality of the original mesh_converter program and feeds its output directly to the already implemented GridIn::read_ucd() function. This is suboptimal but works sufficiently well to act as an interim solution until the internal renumbering scheme necessary to convert the Abaqus format directly to deal.II's internal number can be determined. On top of the already existing functionality to read in Abaqus meshes created using Cubit, patches provided by Krzysztof Bzowski that allow for the input of mesh files exported directly from Abaqus have also been included. Test cases have been added to the testsuite, with the original mesh files from the mesh_converter program used for this purpose. --- cmake/setup_cached_variables.cmake | 8 +- cmake/setup_custom_targets.cmake | 4 +- contrib/CMakeLists.txt | 6 - contrib/mesh_conversion/CMakeLists.txt | 43 - contrib/mesh_conversion/Main.cc | 74 -- contrib/mesh_conversion/MeshConversion.cc | 520 -------- contrib/mesh_conversion/MeshConversion.h | 60 - contrib/mesh_conversion/README.txt | 66 - contrib/mesh_conversion/gpl-2.0.txt | 339 ----- .../mesh_conversion/mesh/3d/other_simple.ucd | 13 - .../mesh/3d/test_cube_pave_1.ucd | 91 -- .../mesh/3d/test_cube_two_materials.ucd | 63 - contrib/mesh_conversion/test.sh | 48 - doc/news/changes.h | 13 + doc/readme.html | 8 - doc/users/cmake.html | 20 +- doc/users/config.sample | 4 - include/deal.II/grid/grid_in.h | 73 +- source/grid/grid_in.cc | 584 ++++++++- tests/CMakeLists.txt | 4 +- tests/grid/grid_in_abaqus_01.cc | 111 ++ tests/grid/grid_in_abaqus_01.output | 31 + .../grid/grids/abaqus/2d/2d_quad.cub | Bin .../grid/grids/abaqus/2d/2d_quad.inp | 0 .../grid/grids/abaqus}/2d/2d_test.cub | Bin .../grid/grids/abaqus}/2d/2d_test.inp | 0 tests/grid/grids/abaqus/2d/2d_test_abaqus.cae | Bin 0 -> 94208 bytes tests/grid/grids/abaqus/2d/2d_test_abaqus.inp | 232 ++++ tests/grid/grids/abaqus/2d/2d_test_pave.cub | Bin 0 -> 32726 bytes tests/grid/grids/abaqus/2d/2d_test_pave.inp | 388 ++++++ .../grid/grids/abaqus/3d/3d_CC.cub | Bin .../grid/grids/abaqus/3d/3d_CC_cubit_new.inp | 0 .../grid/grids/abaqus/3d/3d_CC_cubit_old.inp | 0 .../grid/grids/abaqus/3d/3d_other_simple.inp | 0 tests/grid/grids/abaqus/3d/3d_test_abaqus.cae | Bin 0 -> 81920 bytes tests/grid/grids/abaqus/3d/3d_test_abaqus.inp | 1049 ++++++++++++++++ .../grid/grids/abaqus/3d/3d_test_cube_1.cub | Bin .../grid/grids/abaqus/3d/3d_test_cube_1.inp | 0 .../grids/abaqus/3d/3d_test_cube_pave_1.cub | Bin .../grids/abaqus/3d/3d_test_cube_pave_1.inp | 0 .../abaqus/3d/3d_test_cube_two_materials.cub | Bin .../abaqus/3d/3d_test_cube_two_materials.inp | 0 .../grid/grids/ucd/2d/2d_quad.ucd | 2 +- .../grid/grids/ucd}/2d/2d_test.ucd | 0 tests/grid/grids/ucd/2d/2d_test_abaqus.ucd | 200 +++ tests/grid/grids/ucd/2d/2d_test_pave.ucd | 341 +++++ .../grid/grids/ucd/3d/3d_CC_cubit_new.ucd | 2 +- .../grid/grids/ucd/3d/3d_CC_cubit_old.ucd | 2 +- .../grids/ucd/3d/3d_other_simple.ucd} | 2 +- tests/grid/grids/ucd/3d/3d_test_abaqus.ucd | 1105 +++++++++++++++++ .../grid/grids/ucd/3d/3d_test_cube_1.ucd | 2 +- .../grids/ucd/3d/3d_test_cube_pave_1.ucd} | 2 +- .../ucd/3d/3d_test_cube_two_materials.ucd} | 2 +- tests/mesh_converter/CMakeLists.txt | 116 -- tests/mesh_converter/meshes/2d/2d_test.cub | Bin 22952 -> 0 bytes tests/mesh_converter/meshes/2d/2d_test.inp | 252 ---- tests/mesh_converter/meshes/2d/2d_test.ucd | 251 ---- tests/mesh_converter/meshes/2d/quad.cub | Bin 14372 -> 0 bytes tests/mesh_converter/meshes/2d/quad.inp | 29 - tests/mesh_converter/meshes/2d/quad.ucd | 25 - tests/mesh_converter/meshes/3d/CC.cub | Bin 51528 -> 0 bytes .../mesh_converter/meshes/3d/CC_cubit_new.inp | 157 --- .../mesh_converter/meshes/3d/CC_cubit_new.ucd | 106 -- .../mesh_converter/meshes/3d/CC_cubit_old.inp | 113 -- .../mesh_converter/meshes/3d/CC_cubit_old.ucd | 106 -- .../mesh_converter/meshes/3d/other_simple.inp | 17 - .../mesh_converter/meshes/3d/test_cube_1.cub | Bin 25385 -> 0 bytes .../mesh_converter/meshes/3d/test_cube_1.inp | 25 - .../mesh_converter/meshes/3d/test_cube_1.ucd | 19 - .../meshes/3d/test_cube_pave_1.cub | Bin 29571 -> 0 bytes .../meshes/3d/test_cube_pave_1.inp | 97 -- .../meshes/3d/test_cube_two_materials.cub | Bin 27699 -> 0 bytes .../meshes/3d/test_cube_two_materials.inp | 67 - tests/mesh_converter/meshes/README.txt | 66 - tests/run_testsuite.cmake | 2 +- 75 files changed, 4115 insertions(+), 2845 deletions(-) delete mode 100644 contrib/mesh_conversion/CMakeLists.txt delete mode 100644 contrib/mesh_conversion/Main.cc delete mode 100644 contrib/mesh_conversion/MeshConversion.cc delete mode 100644 contrib/mesh_conversion/MeshConversion.h delete mode 100644 contrib/mesh_conversion/README.txt delete mode 100644 contrib/mesh_conversion/gpl-2.0.txt delete mode 100644 contrib/mesh_conversion/mesh/3d/other_simple.ucd delete mode 100644 contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd delete mode 100644 contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd delete mode 100755 contrib/mesh_conversion/test.sh create mode 100644 tests/grid/grid_in_abaqus_01.cc create mode 100644 tests/grid/grid_in_abaqus_01.output rename contrib/mesh_conversion/mesh/2d/quad.cub => tests/grid/grids/abaqus/2d/2d_quad.cub (100%) rename contrib/mesh_conversion/mesh/2d/quad.inp => tests/grid/grids/abaqus/2d/2d_quad.inp (100%) rename {contrib/mesh_conversion/mesh => tests/grid/grids/abaqus}/2d/2d_test.cub (100%) rename {contrib/mesh_conversion/mesh => tests/grid/grids/abaqus}/2d/2d_test.inp (100%) create mode 100755 tests/grid/grids/abaqus/2d/2d_test_abaqus.cae create mode 100755 tests/grid/grids/abaqus/2d/2d_test_abaqus.inp create mode 100644 tests/grid/grids/abaqus/2d/2d_test_pave.cub create mode 100644 tests/grid/grids/abaqus/2d/2d_test_pave.inp rename contrib/mesh_conversion/mesh/3d/CC.cub => tests/grid/grids/abaqus/3d/3d_CC.cub (100%) rename contrib/mesh_conversion/mesh/3d/CC_cubit_new.inp => tests/grid/grids/abaqus/3d/3d_CC_cubit_new.inp (100%) rename contrib/mesh_conversion/mesh/3d/CC_cubit_old.inp => tests/grid/grids/abaqus/3d/3d_CC_cubit_old.inp (100%) rename contrib/mesh_conversion/mesh/3d/other_simple.inp => tests/grid/grids/abaqus/3d/3d_other_simple.inp (100%) create mode 100755 tests/grid/grids/abaqus/3d/3d_test_abaqus.cae create mode 100755 tests/grid/grids/abaqus/3d/3d_test_abaqus.inp rename contrib/mesh_conversion/mesh/3d/test_cube_1.cub => tests/grid/grids/abaqus/3d/3d_test_cube_1.cub (100%) rename contrib/mesh_conversion/mesh/3d/test_cube_1.inp => tests/grid/grids/abaqus/3d/3d_test_cube_1.inp (100%) rename contrib/mesh_conversion/mesh/3d/test_cube_pave_1.cub => tests/grid/grids/abaqus/3d/3d_test_cube_pave_1.cub (100%) rename contrib/mesh_conversion/mesh/3d/test_cube_pave_1.inp => tests/grid/grids/abaqus/3d/3d_test_cube_pave_1.inp (100%) rename contrib/mesh_conversion/mesh/3d/test_cube_two_materials.cub => tests/grid/grids/abaqus/3d/3d_test_cube_two_materials.cub (100%) rename contrib/mesh_conversion/mesh/3d/test_cube_two_materials.inp => tests/grid/grids/abaqus/3d/3d_test_cube_two_materials.inp (100%) rename contrib/mesh_conversion/mesh/2d/quad.ucd => tests/grid/grids/ucd/2d/2d_quad.ucd (94%) rename {contrib/mesh_conversion/mesh => tests/grid/grids/ucd}/2d/2d_test.ucd (100%) create mode 100755 tests/grid/grids/ucd/2d/2d_test_abaqus.ucd create mode 100644 tests/grid/grids/ucd/2d/2d_test_pave.ucd rename contrib/mesh_conversion/mesh/3d/CC_cubit_new.ucd => tests/grid/grids/ucd/3d/3d_CC_cubit_new.ucd (98%) rename contrib/mesh_conversion/mesh/3d/CC_cubit_old.ucd => tests/grid/grids/ucd/3d/3d_CC_cubit_old.ucd (98%) rename tests/{mesh_converter/meshes/3d/other_simple.ucd => grid/grids/ucd/3d/3d_other_simple.ucd} (91%) create mode 100755 tests/grid/grids/ucd/3d/3d_test_abaqus.ucd rename contrib/mesh_conversion/mesh/3d/test_cube_1.ucd => tests/grid/grids/ucd/3d/3d_test_cube_1.ucd (93%) rename tests/{mesh_converter/meshes/3d/test_cube_pave_1.ucd => grid/grids/ucd/3d/3d_test_cube_pave_1.ucd} (98%) rename tests/{mesh_converter/meshes/3d/test_cube_two_materials.ucd => grid/grids/ucd/3d/3d_test_cube_two_materials.ucd} (97%) delete mode 100644 tests/mesh_converter/CMakeLists.txt delete mode 100644 tests/mesh_converter/meshes/2d/2d_test.cub delete mode 100644 tests/mesh_converter/meshes/2d/2d_test.inp delete mode 100644 tests/mesh_converter/meshes/2d/2d_test.ucd delete mode 100644 tests/mesh_converter/meshes/2d/quad.cub delete mode 100644 tests/mesh_converter/meshes/2d/quad.inp delete mode 100644 tests/mesh_converter/meshes/2d/quad.ucd delete mode 100644 tests/mesh_converter/meshes/3d/CC.cub delete mode 100644 tests/mesh_converter/meshes/3d/CC_cubit_new.inp delete mode 100644 tests/mesh_converter/meshes/3d/CC_cubit_new.ucd delete mode 100644 tests/mesh_converter/meshes/3d/CC_cubit_old.inp delete mode 100644 tests/mesh_converter/meshes/3d/CC_cubit_old.ucd delete mode 100644 tests/mesh_converter/meshes/3d/other_simple.inp delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_1.cub delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_1.inp delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_1.ucd delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_pave_1.cub delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_pave_1.inp delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_two_materials.cub delete mode 100644 tests/mesh_converter/meshes/3d/test_cube_two_materials.inp delete mode 100644 tests/mesh_converter/meshes/README.txt diff --git a/cmake/setup_cached_variables.cmake b/cmake/setup_cached_variables.cmake index 262a995a62..1520d56664 100644 --- a/cmake/setup_cached_variables.cmake +++ b/cmake/setup_cached_variables.cmake @@ -24,7 +24,6 @@ # DEAL_II_ALLOW_BUNDLED # DEAL_II_COMPONENT_DOCUMENTATION # DEAL_II_COMPONENT_EXAMPLES -# DEAL_II_COMPONENT_MESH_CONVERTER # DEAL_II_COMPONENT_PARAMETER_GUI # DEAL_II_COMPONENT_PACKAGE # DEAL_II_FORCE_AUTODETECTION @@ -84,11 +83,6 @@ OPTION(DEAL_II_COMPONENT_EXAMPLES ON ) -OPTION(DEAL_II_COMPONENT_MESH_CONVERTER - "Build and install the mesh_converter. This adds a COMPONENT \"mesh_converter\" to the build system." - ON - ) - OPTION(DEAL_II_COMPONENT_PARAMETER_GUI "Build and install the parameter_gui. This adds a COMPONENT \"parameter_gui\" to the build system." OFF @@ -384,7 +378,7 @@ FOREACH(_var ${_res}) # # Same for components: # - IF(_var MATCHES "^(DOCUMENTATION|EXAMPLES|MESH_CONVERTER|PACKAGE|PARAMETER_GUI)") + IF(_var MATCHES "^(DOCUMENTATION|EXAMPLES|PACKAGE|PARAMETER_GUI)") SET(DEAL_II_COMPONENT_${_var} ${${_var}} CACHE BOOL "" FORCE) UNSET(${_var} CACHE) ENDIF() diff --git a/cmake/setup_custom_targets.cmake b/cmake/setup_custom_targets.cmake index 0cd0494479..38daa74e50 100644 --- a/cmake/setup_custom_targets.cmake +++ b/cmake/setup_custom_targets.cmake @@ -20,7 +20,6 @@ # compat_files # documentation # examples -# mesh_converter # parameter_gui # @@ -55,7 +54,7 @@ ENDIF() # The library can always be compiled and/or installed unconditionally ;-) _add_custom_target(library) -FOREACH(_component compat_files documentation examples mesh_converter parameter_gui) +FOREACH(_component compat_files documentation examples parameter_gui) STRING(TOUPPER "${_component}" _component_uppercase) IF(DEAL_II_COMPONENT_${_component_uppercase}) _add_custom_target(${_component}) @@ -121,7 +120,6 @@ FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/print_info.cmake # documentation - ${_description_string} component 'documentation' # examples - ${_description_string} component 'examples' # library - ${_description_string} component 'library' -# mesh_converter - ${_description_string} component 'mesh_converter' # parameter_gui - ${_description_string} component 'parameter_gui' # package - build binary package # diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 30fc5c517c..61c5dd2497 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -13,12 +13,6 @@ ## ## --------------------------------------------------------------------- -IF(DEAL_II_COMPONENT_MESH_CONVERTER) - MESSAGE(STATUS "Setting up mesh_converter") - ADD_SUBDIRECTORY(mesh_conversion) - MESSAGE(STATUS "Setting up mesh_converter - Done") -ENDIF() - IF(DEAL_II_COMPONENT_PARAMETER_GUI) MESSAGE(STATUS "Setting up parameter_gui") ADD_SUBDIRECTORY(parameter_gui) diff --git a/contrib/mesh_conversion/CMakeLists.txt b/contrib/mesh_conversion/CMakeLists.txt deleted file mode 100644 index ed922bfd10..0000000000 --- a/contrib/mesh_conversion/CMakeLists.txt +++ /dev/null @@ -1,43 +0,0 @@ -## --------------------------------------------------------------------- -## -## Copyright (C) 2012 - 2014 by the deal.II authors -## -## This file is part of the deal.II library. -## -## The deal.II library is free software; you can use it, redistribute -## it, and/or modify it under the terms of the GNU Lesser General -## Public License as published by the Free Software Foundation; either -## version 2.1 of the License, or (at your option) any later version. -## The full text of the license can be found in the file LICENSE at -## the top level of the deal.II distribution. -## -## --------------------------------------------------------------------- - -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) -#PROJECT(mesh_converter) - -IF("${DEAL_II_EXECUTABLE_RELDIR}" STREQUAL "") - SET(DEAL_II_EXECUTABLE_RELDIR "bin") -ENDIF() - -ADD_EXECUTABLE(mesh_converter_exe - Main.cc - MeshConversion.cc - ) -SET_TARGET_PROPERTIES(mesh_converter_exe - PROPERTIES - OUTPUT_NAME mesh_converter - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${DEAL_II_EXECUTABLE_RELDIR}" - ) - -ADD_DEPENDENCIES(mesh_converter mesh_converter_exe) - -INSTALL(TARGETS mesh_converter_exe - RUNTIME DESTINATION ${DEAL_II_EXECUTABLE_RELDIR} - COMPONENT mesh_converter - ) -EXPORT(TARGETS mesh_converter_exe - FILE - ${CMAKE_BINARY_DIR}/${DEAL_II_PROJECT_CONFIG_RELDIR}/${DEAL_II_PROJECT_CONFIG_NAME}Targets.cmake - APPEND - ) diff --git a/contrib/mesh_conversion/Main.cc b/contrib/mesh_conversion/Main.cc deleted file mode 100644 index 9403bf996c..0000000000 --- a/contrib/mesh_conversion/Main.cc +++ /dev/null @@ -1,74 +0,0 @@ -// ====================================================== -// MESH CONVERSION TOOL -// -// This program is distributed under the terms of the -// GNU GPL v2.0 license. -// -// Author: Jean-Paul Pelteret -// jppelteret.uct@gmail.com -// modified by: Timo Heister, heister@clemson.edu -// ====================================================== - -#include "MeshConversion.h" -#include -#include - -using namespace std; - -//-------------------------------------------------------------------------------- - -void display_help (void) { - std::cout << "The first input argument is the spatial dimension of the input file, " - << std::endl - << "the second is the path to the read-in Abaqus .inp file, " - << std::endl - << "and the third is the name of the file to which you wish to write the output AVS .ucd file to." - << std::endl - << std::endl - << "Correct program usage is: " - << std::endl - << " './convert_mesh /path/to/input_file.inp /path/to/output_file.ucd'" - << std::endl - << "e.g. './convert_mesh 3 mesh/3d/test_in.inp mesh/3d/test_out.ucd'" - << std::endl - << "NOTE: New Abaqus files outputted by Cubit 12.0 and later MUST be generated with the 'NOT CUBIT ID's' option selected. " - << std::endl; -} - -int main (int argc, char* argv[]) { - if (argc != 4) - { - display_help(); - return 0; - } - - try - { - const unsigned int dimension = atoi (argv[1]); - std::cout << "Dimension: " << dimension << std::endl; - std::string input_file = argv[2]; - std::string output_file = argv[3]; - - MeshConversion mesh (dimension, input_file, output_file); - const bool success = mesh.convert_mesh (); - - if (success == false) { - std::cout << "Something has gone wrong with the conversion..." << std::endl; - display_help(); - } - } - - catch (...) - { - std::cerr << std::endl - << "==============" << std::endl; - std::cerr << "UNKNOWN ERROR!" << std::endl - << "==============" << std::endl; - - return 1; - } - - return 0; -} - -//-------------------------------------------------------------------------------- diff --git a/contrib/mesh_conversion/MeshConversion.cc b/contrib/mesh_conversion/MeshConversion.cc deleted file mode 100644 index 5f5a0eb833..0000000000 --- a/contrib/mesh_conversion/MeshConversion.cc +++ /dev/null @@ -1,520 +0,0 @@ -// ====================================================== -// MESH CONVERSION TOOL -// -// This program is distributed under the terms of the -// GNU GPL v2.0 license. -// -// Author: Jean-Paul Pelteret -// jppelteret.uct@gmail.com -// modified by: Timo Heister, heister@clemson.edu -// ====================================================== - -#include "MeshConversion.h" - -//-------------------------------------------------------------------------------- - -MeshConversion::MeshConversion (const unsigned int dimension, const std::string input_file, const std::string output_file) - : - tolerance (5e-16), // Used to offset Cubit tolerance error when outputting value close to zero - dimension (dimension), - input_file_name (input_file), - output_file_name (output_file) -{ - greeting (); - - if (dimension == 2) - { - node_per_face = 2; // Line edge - node_per_cell = 4; // Quad face - face_per_cell = 2 * dimension; // Lines per quad - } - else - if (dimension == 3) - { - node_per_face = 4; // Quad face - node_per_cell = 8; // Hex cell - face_per_cell = 2 * dimension; // Quads per hex - } - else - { - std::cerr << "ERROR: Chosen spatial dimension is invalid!" << std::endl; - } -} - -//-------------------------------------------------------------------------------- - -MeshConversion::~MeshConversion () -{ -} - -//-------------------------------------------------------------------------------- - -bool MeshConversion::convert_mesh (void) -{ - if (!read_in_abaqus()) - { - std::cerr << "ERROR: could not parse file." << std::endl; - return false; - } - - return write_out_avs_ucd(); -} - -//-------------------------------------------------------------------------------- - - -// ======================================================== -// http://www.codeguru.com/forum/showthread.php?t=231054 -// ======================================================== -template bool from_string (T& t, const std::string& s, std::ios_base& (*f) (std::ios_base&)) -{ - std::istringstream iss (s); - return ! (iss >> f >> t).fail(); -} - -//-------------------------------------------------------------------------------- - -void MeshConversion::greeting () -{ - std::cout << std::endl; - std::cout << std::endl; - std::cout << std::endl; - std::cout << "************************************************************************************" << std::endl; - std::cout << "*** FEM Mesh conversion tool ***" << std::endl; - std::cout << "************************************************************************************" << std::endl; - std::cout << "*** Author: Jean-Paul Pelteret, Timo Heister ***" << std::endl; - std::cout << "*** Date: June 2010, September 2011 ***" << std::endl; - std::cout << "*** References: ***" << std::endl; - std::cout << "*** http://www.dealii.org/developer/doxygen/deal.II/structGeometryInfo.html ***" << std::endl; - std::cout << "*** http://people.scs.fsu.edu/~burkardt/data/ucd/ucd.html ***" << std::endl; - std::cout << "*** http://www.cprogramming.com/tutorial/string.html ***" << std::endl; - std::cout << "*** http://www.codeguru.com/forum/showthread.php?t=231054 ***" << std::endl; - std::cout << "************************************************************************************" << std::endl; - std::cout << "*** FEATURES: ***" << std::endl; - std::cout << "*** Read-in file types: ***" << std::endl; - std::cout << "*** - Abaqus inp (from Cubit) ***" << std::endl; - std::cout << "*** Write-out file types: ***" << std::endl; - std::cout << "*** - AVS UCD ***" << std::endl; - std::cout << "************************************************************************************" << std::endl; - std::cout << std::endl; -} - - - -bool MeshConversion::read_in_abaqus () -{ - std::cout << "Reading in ABAQUS .inp FILE: " << input_file_name << std::endl; - - std::ifstream input_stream; - - input_stream.open (input_file_name.c_str(), std::ifstream::in); - - if (!input_stream.good()) - { - std::cerr << "ERROR: file '" << input_file_name << "' not found." << std::endl; - return false; - } - - std::string line; - - std::getline (input_stream, line); - - while (!input_stream.eof()) - { - if (0 == line.compare ("*HEADING") - || 0 == line.compare (0, 2, "**") - || 0 == line.compare (0, 5, "*PART")) - { - //skip header and comments - while (!input_stream.eof()) - { - std::getline (input_stream, line); - if (line[0] == '*') - goto cont; - } - } - else - if (0 == line.compare (0, 5, "*NODE")) - { - //header might be: - //*NODE, NSET=ALLNODES - //*NODE - - // contains lines in the form: - //index, x, y, z - int c = 0; - while (!input_stream.eof()) - { - std::getline (input_stream, line); - if (line[0] == '*') - goto cont; - - std::vector node (dimension + 1); - - istringstream iss (line); - char comma; - for (unsigned int i = 0; i < dimension + 1; ++i) - iss >> node[i] >> comma; - - node_list.push_back (node); - - ++c; - } - } - else - if (0 == line.compare (0, 8, "*ELEMENT")) - { - //different header formats: - //*ELEMENT, TYPE=S4R, ELSET=EB - //*ELEMENT, TYPE=C3D8R, ELSET=EB - //*ELEMENT, TYPE=C3D8 - - //elements itself (n=4 or n=8): - //index, i[0], ..., i[n] - - int material = 0; - - //scan for material - { - string before_material = "ELSET=EB"; - size_t idx = line.find (before_material); - if (idx != std::string::npos) - { - from_string (material, line.substr (idx + before_material.size()), std::dec); - } - } - - std::getline (input_stream, line); - while (!input_stream.eof()) - { - if (line[0] == '*') - goto cont; - - istringstream iss (line); - char comma; - - const int n_points = 2 << dimension; - std::vector cell (1 + n_points); - for (int i = 0; i < 1 + n_points; ++i) - iss >> cell[i] >> comma; - - //overwrite cell index from file by material - cell[0] = (double) material; - - cell_list.push_back (cell); - - std::getline (input_stream, line); - } - } - else - if (0 == line.compare (0, 8, "*SURFACE")) - { - //old format: - //*SURFACE, NAME=SS - // , S - - int b_indicator = 0; - { - string before = "NAME=SS"; - size_t idx = line.find (before); - if (idx != std::string::npos) - { - from_string (b_indicator, line.substr (idx + before.size()), std::dec); - } - } - - std::getline (input_stream, line); - while (!input_stream.eof()) - { - if (line[0] == '*') - goto cont; - - istringstream iss (line); - char comma; - char temp; - int el_idx; - int face_number; - string face_number_str; - iss >> el_idx >> comma >> temp >> face_number; - - std::vector quad_node_list; - quad_node_list = get_global_node_numbers (el_idx, face_number); - quad_node_list.insert (quad_node_list.begin(), b_indicator); - - face_list.push_back (quad_node_list); - - std::getline (input_stream, line); - } - } - else - if (0 == line.compare (0, 6, "*ELSET")) - { - //new style line/face indicators - //*ELSET, ELSET=SS1_S3 - //,, ... - //*SURFACE, NAME=SS - //SS1_S3, S - - std::vector elements; - std::getline (input_stream, line); - while (!input_stream.eof()) - { - if (line[0] == '*') - break; - - istringstream iss (line); - char comma; - int elid; - while (!iss.eof()) - { - iss >> elid >> comma; - elements.push_back (elid); - } - - std::getline (input_stream, line); - } - - if (0 != line.compare (0, 8, "*SURFACE")) - { - std::cout << "WARNING: expected SURFACE after ELSET." << std::endl; - goto cont; - } - - int b_indicator = 0; - { - string before = "NAME=SS"; - size_t idx = line.find (before); - if (idx != std::string::npos) - { - from_string (b_indicator, line.substr (idx + before.size()), std::dec); - } - } - - std::getline (input_stream, line); - - istringstream iss (line); - char comma; - std::string temp; - int face_number; - iss >> temp >> comma >> face_number; - - for (unsigned int i = 0;i < elements.size();++i) - { - std::vector quad_node_list; - - quad_node_list = get_global_node_numbers (elements[i], face_number); - - quad_node_list.insert (quad_node_list.begin(), b_indicator); - - face_list.push_back (quad_node_list); - } - } - else - if (0 == line.compare (0, 5, "*NSET")) - { - //skip nodesets, we have no use for them - while (!input_stream.eof()) - { - std::getline (input_stream, line); - if (line[0] == '*') - goto cont; - } - } - else - { - std::cout << "Warning, skipping line:" << line << std::endl; - } - - std::getline (input_stream, line); - cont: - (void) 0; - } - return true; -} - - - -//-------------------------------------------------------------------------------- - -std::vector MeshConversion::get_global_node_numbers (const int face_cell_no, const int face_cell_face_no) -{ - std::vector quad_node_list (node_per_face); - - if (dimension == 2) - { - if (face_cell_face_no == 1) - { - quad_node_list[0] = cell_list[face_cell_no - 1][1]; - quad_node_list[1] = cell_list[face_cell_no - 1][2]; - } - else - if (face_cell_face_no == 2) - { - quad_node_list[0] = cell_list[face_cell_no - 1][2]; - quad_node_list[1] = cell_list[face_cell_no - 1][3]; - } - else - if (face_cell_face_no == 3) - { - quad_node_list[0] = cell_list[face_cell_no - 1][3]; - quad_node_list[1] = cell_list[face_cell_no - 1][4]; - } - else - if (face_cell_face_no == 4) - { - quad_node_list[0] = cell_list[face_cell_no - 1][4]; - quad_node_list[1] = cell_list[face_cell_no - 1][1]; - } - else - { - std::cerr << "ERROR! Invalid face number inputted!" << std::endl; - std::cerr << "face_cell_face_no = " << face_cell_face_no << std::endl; - } - } - else // (dimension == 3) - { - if (face_cell_face_no == 1) - { - quad_node_list[0] = cell_list[face_cell_no - 1][1]; - quad_node_list[1] = cell_list[face_cell_no - 1][4]; - quad_node_list[2] = cell_list[face_cell_no - 1][3]; - quad_node_list[3] = cell_list[face_cell_no - 1][2]; - } - else - if (face_cell_face_no == 2) - { - quad_node_list[0] = cell_list[face_cell_no - 1][5]; - quad_node_list[1] = cell_list[face_cell_no - 1][8]; - quad_node_list[2] = cell_list[face_cell_no - 1][7]; - quad_node_list[3] = cell_list[face_cell_no - 1][6]; - } - else - if (face_cell_face_no == 3) - { - quad_node_list[0] = cell_list[face_cell_no - 1][1]; - quad_node_list[1] = cell_list[face_cell_no - 1][2]; - quad_node_list[2] = cell_list[face_cell_no - 1][6]; - quad_node_list[3] = cell_list[face_cell_no - 1][5]; - } - else - if (face_cell_face_no == 4) - { - quad_node_list[0] = cell_list[face_cell_no - 1][2]; - quad_node_list[1] = cell_list[face_cell_no - 1][3]; - quad_node_list[2] = cell_list[face_cell_no - 1][7]; - quad_node_list[3] = cell_list[face_cell_no - 1][6]; - } - else - if (face_cell_face_no == 5) - { - quad_node_list[0] = cell_list[face_cell_no - 1][3]; - quad_node_list[1] = cell_list[face_cell_no - 1][4]; - quad_node_list[2] = cell_list[face_cell_no - 1][8]; - quad_node_list[3] = cell_list[face_cell_no - 1][7]; - } - else - if (face_cell_face_no == 6) - { - quad_node_list[0] = cell_list[face_cell_no - 1][1]; - quad_node_list[1] = cell_list[face_cell_no - 1][5]; - quad_node_list[2] = cell_list[face_cell_no - 1][8]; - quad_node_list[3] = cell_list[face_cell_no - 1][4]; - } - else - { - std::cerr << "ERROR! Invalid face number inputted!" << std::endl; - std::cerr << "face_cell_face_no = " << face_cell_face_no << std::endl; - } - } - - return quad_node_list; -} - -//-------------------------------------------------------------------------------- - -bool MeshConversion::write_out_avs_ucd (void) -{ - std::cout << "Writing out AVS .ucd FILE: " << output_file_name << std::endl; - - std::ofstream output; - output.open (output_file_name.c_str()); - - // Write out title - Note: No other commented text can be inserted below the title in a UCD file - output << "# FEM Mesh Converter" << std::endl; - output << "# Mesh type: AVS UCD" << std::endl; - output << "# Input file name: " << input_file_name << std::endl; - - // ======================================================== - // ASCII UCD File Format - // The input file cannot contain blank lines or lines with leading blanks. Comments, if present, must precede all data in the file. Comments within the data will cause read errors. The general order of the data is as follows: - // 1. Numbers defining the overall structure, including the number of nodes, the number of cells, and the length of the vector of data associated with the nodes, cells, and the model. - // e.g. 1: - // - // e.g. 2: - // n_elements = n_hex_cells + n_bc_quads + n_quad_cells + n_bc_edges - // outfile.write(str(n_nodes) + " " + str(n_elements) + " 0 0 0\n") - // 2. For each node, its node id and the coordinates of that node in space. Node-ids must be integers, but any number including non sequential numbers can be used. Mid-edge nodes are treated like any other node. - // 3. For each cell: its cell-id, material, cell type (hexahedral, pyramid, etc.), and the list of node-ids that correspond to each of the cell's vertices. The below table specifies the different cell types and the keyword used to represent them in the file. - - // Write out header - output << node_list.size() << "\t" << (cell_list.size() + face_list.size()) << "\t0\t0\t0" << std::endl; - - // Write out node numbers - for (unsigned int ii = 0; ii < node_list.size(); ++ii) // Loop over all nodes - { - for (unsigned int jj = 0; jj < dimension + 1; ++jj) // Loop over entries to be outputted - { - if (jj == 0) // Node number - { - output.precision(); - output << node_list[ii][jj] << "\t"; - } - else // Node coordinates - { - output.width (16); - output.setf (ios::scientific, ios::floatfield); - output.precision (8); - if (abs (node_list[ii][jj]) > tolerance) // invoke tolerance -> set points close to zero equal to zero - output << static_cast (node_list[ii][jj]) << "\t"; - else - output << 0.0 << "\t"; - } - } - if (dimension == 2) - output << 0.0 << "\t"; - - output << std::endl; - output.unsetf (ios::floatfield); - } - - // Write out cell node numbers - for (unsigned int ii = 0; ii < cell_list.size(); ++ii) - { - output << ii + 1 << "\t" << cell_list[ii][0] << "\t" << (dimension == 2 ? "quad" : "hex") << "\t"; - for (unsigned int jj = 1; jj < node_per_cell + 1; ++jj) - output << cell_list[ii][jj] << "\t"; - - output << std::endl; - } - - // Write out quad node numbers - for (unsigned int ii = 0; ii < face_list.size(); ++ii) - { - output << ii + 1 << "\t" << face_list[ii][0] << "\t" << (dimension == 2 ? "line" : "quad") << "\t"; - for (unsigned int jj = 1; jj < node_per_face + 1; ++jj) - output << face_list[ii][jj] << "\t"; - - output << std::endl; - } - - output.close(); - - std::cout << "Output successful!" << std::endl; - std::cout << " Number of nodes: " << node_list.size() << std::endl; - std::cout << " Number of cells: " << cell_list.size() << std::endl; - std::cout << " Number of boundary faces: " << face_list.size() << std::endl << std::endl; - - return true; -} - -//-------------------------------------------------------------------------------- diff --git a/contrib/mesh_conversion/MeshConversion.h b/contrib/mesh_conversion/MeshConversion.h deleted file mode 100644 index d945404935..0000000000 --- a/contrib/mesh_conversion/MeshConversion.h +++ /dev/null @@ -1,60 +0,0 @@ -// ====================================================== -// MESH CONVERSION TOOL -// -// This program is distributed under the terms of the -// GNU GPL v2.0 license. -// -// Author: Jean-Paul Pelteret -// jppelteret.uct@gmail.com -// modified by: Timo Heister, heister@clemson.edu -// ====================================================== - -#ifndef MESH_CONVERSION_H -#define MESH_CONVERSION_H - -//-------------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -class MeshConversion -{ - public: - MeshConversion (const unsigned int dimension, const std::string input_file, const std::string output_file); - ~MeshConversion (); - bool convert_mesh (); - - private: - void greeting (); - - bool read_in_abaqus (); - bool write_out_avs_ucd (); - - std::vector get_global_node_numbers(const int face_cell_no, const int face_cell_face_no); - - const double tolerance; - const unsigned int dimension; - - unsigned int node_per_face; - unsigned int node_per_cell; - unsigned int face_per_cell; - - const std::string input_file_name; - const std::string output_file_name; - - // NL: Stored as [ global node-id (int), x-coord, y-coord, z-coord ] - std::vector< std::vector > node_list; - // CL: Stored as [ material-id (int), node1, node2, node3, node4, node5, node6, node7, node8 ] - std::vector< std::vector > cell_list; - // FL: Stored as [ sideset-id (int), node1, node2, node3, node4 ] - std::vector< std::vector > face_list; -}; - -#endif // MESH_CONVERSION_H diff --git a/contrib/mesh_conversion/README.txt b/contrib/mesh_conversion/README.txt deleted file mode 100644 index 10dfeb0360..0000000000 --- a/contrib/mesh_conversion/README.txt +++ /dev/null @@ -1,66 +0,0 @@ -==================================================== -MESH CONVERSION TOOL -v. 1.2 - -Use: Convert an ABAQUS .inp file to an AVS UCD file. - -Author: Jean-Paul Pelteret - jppelteret.uct@gmail.com - modified by: Timo Heister, heister@clemson.edu -=================================================== - - -This tool is intended to support converting ABAQUS .inp files into a -format that deal.II can read. To use this tool, you need to configure -deal.II using the "-DDEAL_II_COMPONENT_MESH_CONVERTER=ON" argument -when calling 'cmake'. The resulting executable will then be placed in -the installation directory. - - - -Cubit features captured by ABAQUS .inp files: ---------------------------------------------- -1. Multiple material-id's can be defined in the mesh. This is done by specifying blocksets in the pre-processor. -2. Arbitrary surface boundaries can be defined in the mesh. This is done by specifying sidesets in the pre-processor. In particular, boundaries are not confined to just surfaces (in 3d) - individual element faces can be added to the sideset as well. This is useful when a boundary condition is to be applied on a complex shape boundary that is difficult to define using "surfaces" alone. Similar can be done in 2d. - -How to use: ------------ -1. It is necessary to save the mesh as an Abaqus input file .inp. In Cubit, this is done as follows: -1.1. Go to "Analysis setup mode" by clicking on the disc icon in the toolbar on the right. -1.2. Select "Export Mesh" under "Operation" by clicking on the necessary icon in the toolbar on the right. -1.3. Select an output file. I have found that in Cubit version 11.0 and 12.0 that it is necessary to click on the browse button and type it in the dialogue that pops up. -1.4. Select the dimension to output in. -1.5. Tick the overwrite box. -1.6. If using Cubit v12.0 onwards, uncheck the box "Export using Cubit ID's". The conversion process will encounter errors if box if left checked. -1.7. Click apply. - -2. Converting the mesh -IMPORTANT NOTE: From v12.0 onwards, the format of the Abaqus file that Cubit outputted changed. This has been accounted for but an requires a flag to be passed to the conversion program. - I describe outputs from before v12.0 as "Abaqus OLD" and v12.0 an on (up to v12.1 at this point) as "Abaqus NEW". -2.1. Compile the program using 'make' or another suitable tool -2.2. Run the program with the following command line arguments: - './convert_mesh /path/to/input_file.inp /path/to/output_file.ucd' - - The first input argument is the spatial dimension of the input file, the second is the path to the read-in Abaqus .inp file, and the third is the name of the file to which you wish to write the output AVS .ucd file to. - An example of the correct program usage is: -e.g. './convert_mesh 3 mesh/3d/test_in.inp mesh/3d/test_out.ucd' - - -Notes: ------- -1. A few example / test meshes are provided in the directory "mesh". The .inp files that have been generated are all of the Abaqus OLD format except for one - CC.cub has been converted into both the "new" and "old" formats and both subsequently converted into deal.II readable meshes. - -Copyright: ----------- -This program is distributed under the GNU GPL v2.0 copyright. Details can be found at: -http://www.gnu.org/licenses/gpl-2.0.html - -This copyright is extended to the example mesh files distributed with this program, namely -./mesh/2d/2d_test.* -./mesh/2d/quad.* -./mesh/3d/CC.* -./mesh/3d/CC_cubit_new.* -./mesh/3d/CC_cubit_old.* -./mesh/3d/test_cube_1.* -./mesh/3d/test_cube_pave_1.* -./mesh/3d/test_cube_two_materials.* \ No newline at end of file diff --git a/contrib/mesh_conversion/gpl-2.0.txt b/contrib/mesh_conversion/gpl-2.0.txt deleted file mode 100644 index d159169d10..0000000000 --- a/contrib/mesh_conversion/gpl-2.0.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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 this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/contrib/mesh_conversion/mesh/3d/other_simple.ucd b/contrib/mesh_conversion/mesh/3d/other_simple.ucd deleted file mode 100644 index 073dd734a5..0000000000 --- a/contrib/mesh_conversion/mesh/3d/other_simple.ucd +++ /dev/null @@ -1,13 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD -# Input file name: mesh/3d/other_simple.inp -8 1 0 0 0 -1 0.00000000e+00 0.00000000e+00 0.00000000e+00 -2 0.00000000e+00 0.00000000e+00 5.00000000e+01 -3 5.00000000e+01 0.00000000e+00 5.00000000e+01 -4 5.00000000e+01 0.00000000e+00 0.00000000e+00 -5 0.00000000e+00 5.00000000e+01 0.00000000e+00 -6 7.05725000e-01 5.00000000e+01 5.00000000e+01 -7 5.00000000e+01 5.00000000e+01 5.00000000e+01 -8 5.00000000e+01 5.00000000e+01 0.00000000e+00 -1 0 hex 1 2 3 4 5 6 7 8 diff --git a/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd b/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd deleted file mode 100644 index 02c7fd4898..0000000000 --- a/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd +++ /dev/null @@ -1,91 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD -# Input file name: mesh/3d/test_cube_pave_1.inp -39 48 0 0 0 -1 1.00000000e+00 1.00000000e+00 0.00000000e+00 -2 5.00000000e-01 1.00000000e+00 0.00000000e+00 -3 5.58355900e-01 3.92933100e-01 0.00000000e+00 -4 1.00000000e+00 0.00000000e+00 0.00000000e+00 -5 1.00000000e+00 1.00000000e+00 1.00000000e+00 -6 5.00000000e-01 1.00000000e+00 1.00000000e+00 -7 5.58355900e-01 3.92933100e-01 1.00000000e+00 -8 1.00000000e+00 0.00000000e+00 1.00000000e+00 -9 0.00000000e+00 1.00000000e+00 0.00000000e+00 -10 1.56240900e-01 1.79928800e-01 0.00000000e+00 -11 0.00000000e+00 1.00000000e+00 1.00000000e+00 -12 1.56240900e-01 1.79928800e-01 1.00000000e+00 -13 -5.00000000e-01 1.00000000e+00 0.00000000e+00 -14 -3.89707500e-01 6.80424600e-02 0.00000000e+00 -15 -5.00000000e-01 1.00000000e+00 1.00000000e+00 -16 -3.89707500e-01 6.80424600e-02 1.00000000e+00 -17 -1.00000000e+00 1.00000000e+00 0.00000000e+00 -18 -1.00000000e+00 0.00000000e+00 0.00000000e+00 -19 -1.00000000e+00 1.00000000e+00 1.00000000e+00 -20 -1.00000000e+00 0.00000000e+00 1.00000000e+00 -21 -1.00000000e+00 -1.00000000e+00 0.00000000e+00 -22 0.00000000e+00 -1.00000000e+00 0.00000000e+00 -23 -1.00000000e+00 -1.00000000e+00 1.00000000e+00 -24 0.00000000e+00 -1.00000000e+00 1.00000000e+00 -25 1.00000000e+00 -1.00000000e+00 0.00000000e+00 -26 1.00000000e+00 -1.00000000e+00 1.00000000e+00 -27 1.00000000e+00 1.00000000e+00 -1.00000000e+00 -28 5.00000000e-01 1.00000000e+00 -1.00000000e+00 -29 5.58355900e-01 3.92933100e-01 -1.00000000e+00 -30 1.00000000e+00 0.00000000e+00 -1.00000000e+00 -31 0.00000000e+00 1.00000000e+00 -1.00000000e+00 -32 1.56240900e-01 1.79928800e-01 -1.00000000e+00 -33 -5.00000000e-01 1.00000000e+00 -1.00000000e+00 -34 -3.89707500e-01 6.80424600e-02 -1.00000000e+00 -35 -1.00000000e+00 1.00000000e+00 -1.00000000e+00 -36 -1.00000000e+00 0.00000000e+00 -1.00000000e+00 -37 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -38 0.00000000e+00 -1.00000000e+00 -1.00000000e+00 -39 1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -1 1 hex 1 2 3 4 5 6 7 8 -2 1 hex 2 9 10 3 6 11 12 7 -3 1 hex 9 13 14 10 11 15 16 12 -4 1 hex 13 17 18 14 15 19 20 16 -5 1 hex 21 22 14 18 23 24 16 20 -6 1 hex 10 14 22 25 12 16 24 26 -7 1 hex 25 4 3 10 26 8 7 12 -8 1 hex 27 28 29 30 1 2 3 4 -9 1 hex 28 31 32 29 2 9 10 3 -10 1 hex 31 33 34 32 9 13 14 10 -11 1 hex 33 35 36 34 13 17 18 14 -12 1 hex 37 38 34 36 21 22 14 18 -13 1 hex 32 34 38 39 10 14 22 25 -14 1 hex 39 30 29 32 25 4 3 10 -1 1 quad 5 8 7 6 -2 1 quad 6 7 12 11 -3 1 quad 11 12 16 15 -4 1 quad 15 16 20 19 -5 1 quad 23 20 16 24 -6 1 quad 12 26 24 16 -7 1 quad 26 12 7 8 -8 2 quad 27 30 29 28 -9 2 quad 28 29 32 31 -10 2 quad 31 32 34 33 -11 2 quad 33 34 36 35 -12 2 quad 37 36 34 38 -13 2 quad 32 39 38 34 -14 2 quad 39 32 29 30 -15 3 quad 21 22 24 23 -16 3 quad 22 25 26 24 -17 3 quad 37 38 22 21 -18 3 quad 38 39 25 22 -19 4 quad 17 18 20 19 -20 4 quad 21 23 20 18 -21 4 quad 35 36 18 17 -22 4 quad 37 21 18 36 -23 5 quad 1 2 6 5 -24 5 quad 2 9 11 6 -25 5 quad 9 13 15 11 -26 5 quad 13 17 19 15 -27 5 quad 27 28 2 1 -28 5 quad 28 31 9 2 -29 5 quad 31 33 13 9 -30 5 quad 33 35 17 13 -31 6 quad 1 5 8 4 -32 6 quad 25 4 8 26 -33 6 quad 27 1 4 30 -34 6 quad 39 30 4 25 diff --git a/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd b/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd deleted file mode 100644 index 3889718dd6..0000000000 --- a/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd +++ /dev/null @@ -1,63 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD -# Input file name: mesh/3d/test_cube_two_materials.inp -27 32 0 0 0 -1 -1.00000000e+00 -1.00000000e+00 1.00000000e+00 -2 -1.00000000e+00 -1.00000000e+00 0.00000000e+00 -3 -1.00000000e+00 0.00000000e+00 0.00000000e+00 -4 -1.00000000e+00 0.00000000e+00 1.00000000e+00 -5 0.00000000e+00 -1.00000000e+00 1.00000000e+00 -6 0.00000000e+00 -1.00000000e+00 0.00000000e+00 -7 0.00000000e+00 0.00000000e+00 0.00000000e+00 -8 0.00000000e+00 0.00000000e+00 1.00000000e+00 -9 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -10 -1.00000000e+00 0.00000000e+00 -1.00000000e+00 -11 0.00000000e+00 -1.00000000e+00 -1.00000000e+00 -12 0.00000000e+00 0.00000000e+00 -1.00000000e+00 -13 -1.00000000e+00 1.00000000e+00 0.00000000e+00 -14 -1.00000000e+00 1.00000000e+00 1.00000000e+00 -15 0.00000000e+00 1.00000000e+00 0.00000000e+00 -16 0.00000000e+00 1.00000000e+00 1.00000000e+00 -17 -1.00000000e+00 1.00000000e+00 -1.00000000e+00 -18 0.00000000e+00 1.00000000e+00 -1.00000000e+00 -19 1.00000000e+00 -1.00000000e+00 1.00000000e+00 -20 1.00000000e+00 -1.00000000e+00 0.00000000e+00 -21 1.00000000e+00 0.00000000e+00 0.00000000e+00 -22 1.00000000e+00 0.00000000e+00 1.00000000e+00 -23 1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -24 1.00000000e+00 0.00000000e+00 -1.00000000e+00 -25 1.00000000e+00 1.00000000e+00 0.00000000e+00 -26 1.00000000e+00 1.00000000e+00 1.00000000e+00 -27 1.00000000e+00 1.00000000e+00 -1.00000000e+00 -1 1 hex 1 2 3 4 5 6 7 8 -2 1 hex 2 9 10 3 6 11 12 7 -3 1 hex 4 3 13 14 8 7 15 16 -4 1 hex 3 10 17 13 7 12 18 15 -5 1 hex 5 6 7 8 19 20 21 22 -6 2 hex 6 11 12 7 20 23 24 21 -7 2 hex 8 7 15 16 22 21 25 26 -8 2 hex 7 12 18 15 21 24 27 25 -1 1 quad 1 5 8 4 -2 1 quad 4 8 16 14 -3 1 quad 5 19 22 8 -4 1 quad 8 22 26 16 -5 1 quad 13 14 16 15 -6 1 quad 17 13 15 18 -7 1 quad 15 16 26 25 -8 1 quad 18 15 25 27 -9 1 quad 1 4 3 2 -10 1 quad 2 3 10 9 -11 1 quad 4 14 13 3 -12 1 quad 3 13 17 10 -13 1 quad 1 2 6 5 -14 1 quad 2 9 11 6 -15 1 quad 5 6 20 19 -16 1 quad 6 11 23 20 -17 2 quad 9 10 12 11 -18 2 quad 10 17 18 12 -19 2 quad 12 18 27 24 -20 2 quad 21 25 27 24 -21 3 quad 19 22 21 20 -22 3 quad 11 12 24 23 -23 3 quad 20 21 24 23 -24 3 quad 22 26 25 21 diff --git a/contrib/mesh_conversion/test.sh b/contrib/mesh_conversion/test.sh deleted file mode 100755 index cff12d8026..0000000000 --- a/contrib/mesh_conversion/test.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# ====================================================== -# MESH CONVERSION TOOL -# v. 1.2 -# -# This program is distributed under the terms of the -# GNU GPL v2.0 license. -# -# Author: Jean-Paul Pelteret -# jppelteret.uct@gmail.com -# modified by: Timo Heister, heister@clemson.edu -# ====================================================== - -mesh=mesh/2d/2d_test -./convert_mesh 2 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/2d/quad -./convert_mesh 2 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/test_cube_1 -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/test_cube_two_materials -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/CC_cubit_old -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/CC_cubit_new -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/test_cube_pave_1 -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -mesh=mesh/3d/other_simple -./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -diff -q $mesh.ucd test/`basename $mesh.ucd` - -# mesh=mesh/3d/other -# ./convert_mesh 3 $mesh.inp test/`basename $mesh.ucd` >/dev/null -# diff -q $mesh.ucd test/`basename $mesh.ucd` diff --git a/doc/news/changes.h b/doc/news/changes.h index 2f59813705..1b722dc4ca 100644 --- a/doc/news/changes.h +++ b/doc/news/changes.h @@ -39,6 +39,13 @@ inconvenience this causes.
    +
  1. Changed: The mesh_converter program has been removed from the + contrib folder. The equivalent functionality can now be found in + the GridIn class. +
    + (Jean-Paul Pelteret, 2015/08/12) +
  2. +
  3. Changed: The signature of the FiniteElement::fill_fe_values(), FiniteElement::fill_fe_face_values(), and FiniteElement::fill_fe_subface_values() functions has been changed, in an effort to clarify which of these contain @@ -149,6 +156,12 @@ inconvenience this causes. (Wolfgang Bangerth, Bruno Turcksin, 2015/08/13)
  4. +
  5. New: Direct support for Abaqus mesh files has been added to the GridIn + class through the function GridIn::read_abaqus(). +
    + (Jean-Paul Pelteret, Timo Heister, Krzysztof Bzowski, 2015/08/12) +
  6. +
  7. Improved: Some finite elements compute hessians analytically rather than by finite differencing. Namely, these are finite elements that are subclasses of FEPoly as well as FESystem with those as base elements. diff --git a/doc/readme.html b/doc/readme.html index 82a2da6141..d4221863c5 100644 --- a/doc/readme.html +++ b/doc/readme.html @@ -391,14 +391,6 @@
  8. -

    - mesh_converter: If you wish to compile and install the - mesh_converter tool discussed in the documentation - of the GridIn class, specify - -DDEAL_II_COMPONENT_MESH_CONVERTER=ON. (This is in fact - the default.) -

    -

    parameter_gui: If you wish to compile and install the parameter_gui tool discussed in the documentation diff --git a/doc/users/cmake.html b/doc/users/cmake.html index 8703010946..12b3b99714 100644 --- a/doc/users/cmake.html +++ b/doc/users/cmake.html @@ -184,9 +184,9 @@ cmake -DDEAL_II_WITH_MPI=ON <...> The same holds for all variables starting with COMPONENT_ and all individual component names: - DOCUMENTATION, EXAMPLES, - MESH_CONVERTER and PARAMETER_GUI (which - will be expanded to the full DEAL_II_COMPONENT_* variable name). + DOCUMENTATION, EXAMPLES + and PARAMETER_GUI (which will be expanded to the + full DEAL_II_COMPONENT_* variable name).

    @@ -223,7 +223,6 @@ cmake -DDEAL_II_WITH_MPI=ON <...> # documentation - build and install component 'documentation' # examples - build and install component 'examples' # library - build and install component 'library' -# mesh_converter - build and install component 'mesh_converter' # parameter_gui - build and install component 'parameter_gui' # # test - run a minimal set of tests @@ -263,7 +262,6 @@ cmake -DDEAL_II_WITH_MPI=ON <...> # Component configuration: # ( DEAL_II_COMPONENT_DOCUMENTATION = OFF ) # DEAL_II_COMPONENT_EXAMPLES -# DEAL_II_COMPONENT_MESH_CONVERTER # ( DEAL_II_COMPONENT_PARAMETER_GUI = OFF ) # # Detailed information (compiler flags, feature configuration) can be found in detailed.log @@ -401,7 +399,6 @@ $ cmake -GNinja [...] documentation - builds and installs the 'documentation' component examples - builds and installs the 'examples' component library - builds and installs the 'library' component -mesh_converter - builds and installs the 'mesh_converter' component parameter_gui - builds and installs the 'parameter_gui' component @@ -752,17 +749,6 @@ cmake -DLAPACK_FOUND=true \ This adds a component examples to the build system.

    -
  9. -

    - DEAL_II_COMPONENT_MESH_CONVERTER (default - ON): -

    -

    - Enable configuration and installation of the - mesh_converter binary. This adds a component - mesh_converter to the build system. -

    -
  10. DEAL_II_COMPONENT_PARAMETER_GUI (default diff --git a/doc/users/config.sample b/doc/users/config.sample index b761fa5ce2..cbb65f38b2 100644 --- a/doc/users/config.sample +++ b/doc/users/config.sample @@ -24,10 +24,6 @@ # "Enable configuration and installation of the example steps. This adds a COMPONENT \"examples\" to the build system." # ) # -# SET(DEAL_II_COMPONENT_MESH_CONVERTER ON CACHE BOOL -# "Build and install the mesh_converter. This adds a COMPONENT \"mesh_converter\" to the build system." -# ) -# # SET(DEAL_II_COMPONENT_PARAMETER_GUI OFF CACHE BOOL # "Build and install the parameter_gui. This adds a COMPONENT \"parameter_gui\" to the build system." # ) diff --git a/include/deal.II/grid/grid_in.h b/include/deal.II/grid/grid_in.h index ea27687105..c1eb66f914 100644 --- a/include/deal.II/grid/grid_in.h +++ b/include/deal.II/grid/grid_in.h @@ -209,27 +209,11 @@ struct SubCellData; * plug-in script can be found on the deal.II wiki page, * http://code.google.com/p/dealii/wiki/MeshInputAndOutput . * - * There is also a little program bin/mesh_conversion (in the - * directory where deal.II was installed), written by Jean-Paul Pelteret, that - * can convert Cubit ABAQUS files into the UCD format that can be read in as - * discussed above. The program was designed with the intention of exporting - * geometries with complex boundary condition surfaces and multiple materials - * from Cubit - information which is currently not easily obtained through - * Cubit's python interface. Using the the program is simple: to use it, it - * needs to be built and run with the command - * @code - * /path/to/deal.II/bin/mesh_conversion /path/to/input_file.inp /path/to/output_file.ucd - * @endcode. - * More information is available in the readme file included with the program - * and located in the contrib/mesh_conversion/README.txt file in - * the deal.II source directory tree. Note that the program's copyright - * remains with its author and that it is under a separate license than the - * rest of the library. - * - * To build the program, see the doc/readmes.html and - * doc/development/cmake.html files. - * - * + * Alternatively, Cubit can generate ABAQUS files that can be read in via the + * read_abaqus() function. This may be a better option for geometries with + * complex boundary condition surfaces and multiple materials + * - information which is currently not easily obtained through + * Cubit's python interface. * *

    Structure of input grid data. The GridReordering class

    * @@ -302,8 +286,9 @@ struct SubCellData; * * @ingroup grid * @ingroup input - * @author Wolfgang Bangerth, 1998, 2000, Luca Heltai, 2004, 2007 + * @author Wolfgang Bangerth, 1998, 2000, Luca Heltai, 2004, 2007, Jean-Paul Pelteret 2015, Timo Heister 2015, Krzysztof Bzowski, 2015 */ + template class GridIn { @@ -320,6 +305,8 @@ public: unv, /// Use read_ucd() ucd, + /// Use read_abaqus() + abaqus, /// Use read_dbmesh() dbmesh, /// Use read_xda() @@ -378,6 +365,46 @@ public: */ void read_ucd (std::istream &in); + /** + * Read grid data from an Abaqus file. Numerical and constitutive data + * is ignored. + * + * @note The current implementation of this mesh reader is suboptimal, + * and may therefore be slow for large meshes. + * + * @note Usage tips for Cubit: + * - Multiple material-id's can be defined in the mesh. + * This is done by specifying blocksets in the pre-processor. + * - Arbitrary surface boundaries can be defined in the mesh. + * This is done by specifying sidesets in the pre-processor. + * In particular, boundaries are not confined to just surfaces (in 3d) + * individual element faces can be added to the sideset as well. + * This is useful when a boundary condition is to be applied on a + * complex shape boundary that is difficult to define using "surfaces" + * alone. Similar can be done in 2d. + * + * @note Compatibility information for this file format is listed below. + * - Files generated in Abaqus CAE 6.12 have been verified to be + * correctly imported, but older (or newer) versions of Abaqus may + * also generate valid input decks. + * - Files generated using Cubit 11.x, 12.x and 13.x are valid, but only + * when using a specific set of export steps. These are as follows: + * 1. Go to "Analysis setup mode" by clicking on the disc icon in the + * toolbar on the right. + * 2. Select "Export Mesh" under "Operation" by clicking on the + * necessary icon in the toolbar on the right. + * 3. Select an output file. In Cubit version 11.0 and 12.0 it might be + * necessary to click on the browse button and type it in the + * dialogue that pops up. + * 4. Select the dimension to output in. + * 5. Tick the overwrite box. + * 6. If using Cubit v12.0 onwards, uncheck the box "Export using Cubit + * ID's". An invalid file will encounter errors if this box is left + * checked. + * 7. Click apply. + */ + void read_abaqus (std::istream &in); + /** * Read grid data from a file containing data in the DB mesh format. */ @@ -577,8 +604,6 @@ private: Format default_format; }; - - /* -------------- declaration of explicit specializations ------------- */ #ifndef DOXYGEN diff --git a/source/grid/grid_in.cc b/source/grid/grid_in.cc index 6da36aef97..7e68c15175 100644 --- a/source/grid/grid_in.cc +++ b/source/grid/grid_in.cc @@ -757,6 +757,64 @@ void GridIn::read_ucd (std::istream &in) tria->create_triangulation_compatibility (vertices, cells, subcelldata); } +namespace +{ + template + class Abaqus_to_UCD + { + public: + Abaqus_to_UCD (); + + void read_in_abaqus (std::istream &in); + void write_out_avs_ucd (std::ostream &out) const; + + private: + const double tolerance; + + std::vector get_global_node_numbers (const int face_cell_no, + const int face_cell_face_no) const; + + // NL: Stored as [ global node-id (int), x-coord, y-coord, z-coord ] + std::vector< std::vector > node_list; + // CL: Stored as [ material-id (int), node1, node2, node3, node4, node5, node6, node7, node8 ] + std::vector< std::vector > cell_list; + // FL: Stored as [ sideset-id (int), node1, node2, node3, node4 ] + std::vector< std::vector > face_list; + // ELSET: Stored as [ (std::string) elset_name = (std::vector) of cells numbers] + std::map< std::string, std::vector > elsets_list; + }; +} + +template +void GridIn::read_abaqus (std::istream &in) +{ + Assert (tria != 0, ExcNoTriangulationSelected()); + Assert (dim==2 || dim==3, ExcNotImplemented()); + AssertThrow (in, ExcIO()); + + // Read in the Abaqus file into an intermediate object + // that is to be passed along to the UCD reader + Abaqus_to_UCD abaqus_to_ucd; + abaqus_to_ucd.read_in_abaqus(in); + + std::stringstream in_ucd; + abaqus_to_ucd.write_out_avs_ucd(in_ucd); + + // This next call is wrapped in a try-catch for the following reason: + // It ensures that if the Abaqus mesh is read in correctly but produces + // an erroneous result then the user is alerted to the source of the problem + // and doesn't think that they've somehow called the wrong function. + try + { + read_ucd(in_ucd); + } + catch (...) + { + AssertThrow(false, ExcMessage("Internal conversion from ABAQUS file to UCD format was unsuccessful. \ + Are you sure that your ABAQUS mesh file conforms with the requirements \ + listed in the documentation?")); + } +} template @@ -770,7 +828,6 @@ void GridIn::read_dbmesh (std::istream &in) // skip comments at start of file skip_comment_lines (in, '#'); - // first read in identifier string std::string line; getline (in, line); @@ -2649,6 +2706,10 @@ void GridIn::read (std::istream &in, read_ucd (in); return; + case abaqus: + read_abaqus(in); + return; + case xda: read_xda (in); return; @@ -2687,6 +2748,8 @@ GridIn::default_suffix (const Format format) return ".unv"; case ucd: return ".inp"; + case abaqus: + return ".inp"; // Typical suffix for Abaqus mesh files conflicts with UCD. case xda: return ".xda"; case netcdf: @@ -2717,6 +2780,7 @@ GridIn::parse_format (const std::string &format_name) if (format_name == "vtk") return vtk; + // This is also the typical extension of Abaqus input files. if (format_name == "inp") return ucd; @@ -2760,9 +2824,525 @@ GridIn::parse_format (const std::string &format_name) template std::string GridIn::get_format_names () { - return "dbmesh|msh|unv|vtk|ucd|xda|netcdf|tecplot"; + return "dbmesh|msh|unv|vtk|ucd|abaqus|xda|netcdf|tecplot"; } +namespace +{ + template + Abaqus_to_UCD::Abaqus_to_UCD () + : tolerance (5e-16) // Used to offset Cubit tolerance error when outputting value close to zero + { + AssertThrow(dim==2 || dim==3, ExcNotImplemented()); + } + + // Convert from a string to some other data type + // Reference: http://www.codeguru.com/forum/showthread.php?t=231054 + template bool + from_string (T &t, + const std::string &s, + std::ios_base& (*f) (std::ios_base &)) + { + std::istringstream iss (s); + return ! (iss >> f >> t).fail(); + } + + // Extract an integer from a string + int + extract_int (const std::string &s) + { + std::string tmp; + for (unsigned int i = 0; i + void + Abaqus_to_UCD::read_in_abaqus (std::istream &input_stream) + { + AssertThrow (input_stream, ExcIO()); + std::string line; + std::getline (input_stream, line); + + while (!input_stream.eof()) + { + std::transform(line.begin(), line.end(), line.begin(), ::toupper); + + if (line.compare ("*HEADING") == 0 || + line.compare (0, 2, "**") == 0 || + line.compare (0, 5, "*PART") == 0) + { + // Skip header and comments + while (!input_stream.eof()) + { + std::getline (input_stream, line); + if (line[0] == '*') + goto cont; // My eyes, they burn! + } + } + else if (line.compare (0, 5, "*NODE") == 0) + { + // Extract list of vertices + // Header line might be: + // *NODE, NSET=ALLNODES + // *NODE + + // Contains lines in the form: + // Index, x, y, z + while (!input_stream.eof()) + { + std::getline (input_stream, line); + if (line[0] == '*') + goto cont; + + std::vector node (dim+1); + + std::istringstream iss (line); + char comma; + for (unsigned int i = 0; i < dim+1; ++i) + iss >> node[i] >> comma; + + node_list.push_back (node); + } + } + else if (line.compare (0, 8, "*ELEMENT") == 0) + { + // Element construction. + // There are different header formats, the details + // of which we're not particularly interested in except + // whether they represent quads or hexahedrals. + // *ELEMENT, TYPE=S4R, ELSET=EB + // *ELEMENT, TYPE=C3D8R, ELSET=EB + // *ELEMENT, TYPE=C3D8 + // Elements itself (n=4 or n=8): + // Index, i[0], ..., i[n] + + int material = 0; + // Scan for material id + { + const std::string before_material = "ELSET=EB"; + const std::size_t idx = line.find (before_material); + if (idx != std::string::npos) + { + from_string (material, line.substr (idx + before_material.size()), std::dec); + } + } + + // Read ELEMENT definition + std::getline (input_stream, line); + while (!input_stream.eof()) + { + if (line[0] == '*') + goto cont; + + std::istringstream iss (line); + char comma; + + // We will store the material id in the zeroth entry of the + // vector and the rest of the elements represent the global + // node numbers + const unsigned int n_data_per_cell = 1+GeometryInfo::vertices_per_cell; + std::vector cell (n_data_per_cell); + for (unsigned int i = 0; i < n_data_per_cell; ++i) + iss >> cell[i] >> comma; + + // Overwrite cell index from file by material + cell[0] = static_cast (material); + cell_list.push_back (cell); + + std::getline (input_stream, line); + } + } + else if (line.compare (0, 8, "*SURFACE") == 0) + { + // Extract the definitions of boundary surfaces + // Old format from Cubit: + // *SURFACE, NAME=SS + // , S + // Abaqus default format: + // *SURFACE, TYPE=ELEMENT, NAME=SURF- + + // Get name of the surface and extract id from it; + // this will be the boundary indicator + const std::string name_key = "NAME="; + const std::size_t name_idx_start = line.find(name_key) + name_key.size(); + std::size_t name_idx_end = line.find(',', name_idx_start); + if (name_idx_end == std::string::npos) + { + name_idx_end = line.size(); + } + const int b_indicator = extract_int(line.substr(name_idx_start, name_idx_end - name_idx_start)); + + // Read SURFACE definition + // Note that the orientation of the faces is embedded within the + // definition of each "set" of faces that comprise the surface + // These are either marked by an "S" or "E" in 3d or 2d respectively. + std::getline (input_stream, line); + while (!input_stream.eof()) + { + if (line[0] == '*') + goto cont; + + // Change all characters to upper case + std::transform(line.begin(), line.end(), line.begin(), ::toupper); + + // Surface can be created from ELSET, or directly from cells + // If elsets_list contains a key with specific name - refers to that ELSET, otherwise refers to cell + std::istringstream iss (line); + char comma; + int el_idx; + int face_number; + char temp; + + // Get relevant faces, taking into account the element orientation + std::vector quad_node_list; + const std::string elset_name = line.substr(0, line.find(',')); + if (elsets_list.count(elset_name) != 0) + { + // Surface refers to ELSET + std::string stmp; + iss >> stmp >> temp >> face_number; + + const std::vector cells = elsets_list[elset_name]; + for (unsigned int i = 0; i > el_idx >> comma >> temp >> face_number; + quad_node_list = get_global_node_numbers (el_idx, face_number); + quad_node_list.insert (quad_node_list.begin(), b_indicator); + + face_list.push_back (quad_node_list); + } + + std::getline (input_stream, line); + } + } + else if (line.compare (0, 6, "*ELSET") == 0) + { + // Get ELSET name. + // Materials are attached to elsets with specific name + std::string elset_name; + { + const std::string elset_key = "*ELSET, ELSET="; + const std::size_t idx = line.find(elset_key); + if (idx != std::string::npos) + { + const std::string comma = ","; + const std::size_t first_comma = line.find(comma); + const std::size_t second_comma = line.find(comma, first_comma+1); + const std::size_t elset_name_start = line.find(elset_key) + elset_key.size(); + elset_name = line.substr(elset_name_start, second_comma-elset_name_start); + } + + } + + // There are two possibilities of storing cells numbers in ELSET: + // 1. If the header contains the 'GENERATE' keyword, then the next line describes range of cells as: + // cell_id_start, cell_id_end, cell_step + // 2. If the header does not contain the 'GENERATE' keyword, then the next lines contain cells numbers + std::vector elements; + const std::size_t generate_idx = line.find("GENERATE"); + if (generate_idx != std::string::npos) + { + // Option (1) + std::getline (input_stream, line); + std::istringstream iss (line); + char comma; + int elid_start; + int elid_end; + int elis_step; + iss >> elid_start >> comma >> elid_end >> comma >> elis_step; + for (int i = elid_start; i <= elid_end; i+= elis_step) + { + elements.push_back(i); + } + elsets_list[elset_name] = elements; + + std::getline (input_stream, line); + } + else + { + // Option (2) + std::getline (input_stream, line); + while (!input_stream.eof()) + { + if (line[0] == '*') + break; + + std::istringstream iss (line); + char comma; + int elid; + while (!iss.eof()) + { + iss >> elid >> comma; + elements.push_back (elid); + } + + std::getline (input_stream, line); + } + + elsets_list[elset_name] = elements; + } + + goto cont; + } + else if (line.compare (0, 5, "*NSET") == 0) + { + // Skip nodesets; we have no use for them + while (!input_stream.eof()) + { + std::getline (input_stream, line); + if (line[0] == '*') + goto cont; + } + } + else if (line.compare(0, 14, "*SOLID SECTION") == 0) + { + // The ELSET name, which describes a section for particular material + const std::string elset_key = "ELSET="; + const std::size_t elset_start = line.find("ELSET=") + elset_key.size(); + const std::size_t elset_end = line.find(',', elset_start+1); + const std::string elset_name = line.substr(elset_start, elset_end-elset_start); + + // Solid material definition. + // We assume that material id is taken from material name, + // eg. "Material-1" -> ID=1 + const std::string material_key = "MATERIAL="; + const std::size_t last_equal = line.find("MATERIAL=") + material_key.size(); + const std::size_t material_id_start = line.find('-', last_equal); + int material_id = 0; + from_string(material_id, line.substr(material_id_start+1), std::dec); + + // Assign material id to cells + const std::vector &elset_cells = elsets_list[elset_name]; + for (unsigned int i = 0; i < elset_cells.size(); ++i) + { + const int cell_id = elset_cells[i] - 1; + cell_list[cell_id][0] = material_id; + } + } + // Note: All other lines / entries are ignored + + std::getline (input_stream, line); + +cont: + (void) 0; + } + } + + template + std::vector + Abaqus_to_UCD::get_global_node_numbers (const int face_cell_no, + const int face_cell_face_no) const + { + std::vector quad_node_list (GeometryInfo::vertices_per_face); + + // These orderings were reverse engineered by hand and may + // conceivably be erroneous. + // TODO: Currently one test (2d unstructured mesh) in the test + // suite fails, presumably because of an ordering issue. + if (dim == 2) + { + if (face_cell_face_no == 1) + { + quad_node_list[0] = cell_list[face_cell_no - 1][1]; + quad_node_list[1] = cell_list[face_cell_no - 1][2]; + } + else if (face_cell_face_no == 2) + { + quad_node_list[0] = cell_list[face_cell_no - 1][2]; + quad_node_list[1] = cell_list[face_cell_no - 1][3]; + } + else if (face_cell_face_no == 3) + { + quad_node_list[0] = cell_list[face_cell_no - 1][3]; + quad_node_list[1] = cell_list[face_cell_no - 1][4]; + } + else if (face_cell_face_no == 4) + { + quad_node_list[0] = cell_list[face_cell_no - 1][4]; + quad_node_list[1] = cell_list[face_cell_no - 1][1]; + } + else + { + AssertThrow(face_cell_face_no <= 4, ExcMessage("Invalid face number in 2d")); + } + } + else if (dim == 3) + { + if (face_cell_face_no == 1) + { + quad_node_list[0] = cell_list[face_cell_no - 1][1]; + quad_node_list[1] = cell_list[face_cell_no - 1][4]; + quad_node_list[2] = cell_list[face_cell_no - 1][3]; + quad_node_list[3] = cell_list[face_cell_no - 1][2]; + } + else if (face_cell_face_no == 2) + { + quad_node_list[0] = cell_list[face_cell_no - 1][5]; + quad_node_list[1] = cell_list[face_cell_no - 1][8]; + quad_node_list[2] = cell_list[face_cell_no - 1][7]; + quad_node_list[3] = cell_list[face_cell_no - 1][6]; + } + else if (face_cell_face_no == 3) + { + quad_node_list[0] = cell_list[face_cell_no - 1][1]; + quad_node_list[1] = cell_list[face_cell_no - 1][2]; + quad_node_list[2] = cell_list[face_cell_no - 1][6]; + quad_node_list[3] = cell_list[face_cell_no - 1][5]; + } + else if (face_cell_face_no == 4) + { + quad_node_list[0] = cell_list[face_cell_no - 1][2]; + quad_node_list[1] = cell_list[face_cell_no - 1][3]; + quad_node_list[2] = cell_list[face_cell_no - 1][7]; + quad_node_list[3] = cell_list[face_cell_no - 1][6]; + } + else if (face_cell_face_no == 5) + { + quad_node_list[0] = cell_list[face_cell_no - 1][3]; + quad_node_list[1] = cell_list[face_cell_no - 1][4]; + quad_node_list[2] = cell_list[face_cell_no - 1][8]; + quad_node_list[3] = cell_list[face_cell_no - 1][7]; + } + else if (face_cell_face_no == 6) + { + quad_node_list[0] = cell_list[face_cell_no - 1][1]; + quad_node_list[1] = cell_list[face_cell_no - 1][5]; + quad_node_list[2] = cell_list[face_cell_no - 1][8]; + quad_node_list[3] = cell_list[face_cell_no - 1][4]; + } + else + { + AssertThrow(face_cell_no <= 6, ExcMessage("Invalid face number in 3d")); + } + } + else + { + AssertThrow(dim==2 || dim==3, ExcNotImplemented()); + } + + return quad_node_list; + } + + template + void + Abaqus_to_UCD::write_out_avs_ucd (std::ostream &output) const + { + AssertThrow (output, ExcIO()); + + // Write out title - Note: No other commented text can be inserted below the + // title in a UCD file + output << "# Abaqus to UCD mesh conversion" << std::endl; + output << "# Mesh type: AVS UCD" << std::endl; + + // ======================================================== + // ASCII UCD File Format + // The input file cannot contain blank lines or lines with leading blanks. + // Comments, if present, must precede all data in the file. + // Comments within the data will cause read errors. + // The general order of the data is as follows: + // 1. Numbers defining the overall structure, including the number of nodes, + // the number of cells, and the length of the vector of data associated + // with the nodes, cells, and the model. + // e.g. 1: + // + // e.g. 2: + // n_elements = n_hex_cells + n_bc_quads + n_quad_cells + n_bc_edges + // outfile.write(str(n_nodes) + " " + str(n_elements) + " 0 0 0\n") + // 2. For each node, its node id and the coordinates of that node in space. + // Node-ids must be integers, but any number including non sequential + // numbers can be used. Mid-edge nodes are treated like any other node. + // 3. For each cell: its cell-id, material, cell type (hexahedral, pyramid, + // etc.), and the list of node-ids that correspond to each of the cell's + // vertices. The below table specifies the different cell types and the + // keyword used to represent them in the file. + + // Write out header + output + << node_list.size() << "\t" + << (cell_list.size() + face_list.size()) << "\t0\t0\t0" + << std::endl; + + // Write out node numbers + for (unsigned int ii = 0; ii < node_list.size(); ++ii) // Loop over all nodes + { + for (unsigned int jj = 0; jj < dim + 1; ++jj) // Loop over entries to be outputted + { + if (jj == 0) // Node number + { + output.precision(); + output << node_list[ii][jj] << "\t"; + } + else // Node coordinates + { + output.width (16); + output.setf (std::ios::scientific, + std::ios::floatfield); + output.precision (8); + if (std::abs (node_list[ii][jj]) > tolerance) // invoke tolerance -> set points close to zero equal to zero + output << static_cast (node_list[ii][jj]) << "\t"; + else + output << 0.0 << "\t"; + } + } + if (dim == 2) + output << 0.0 << "\t"; + + output + << std::endl; + output.unsetf (std::ios::floatfield); + } + + // Write out cell node numbers + for (unsigned int ii = 0; ii < cell_list.size(); ++ii) + { + output + << ii + 1 << "\t" + << cell_list[ii][0] << "\t" + << (dim == 2 ? "quad" : "hex") << "\t"; + for (unsigned int jj = 1; jj < GeometryInfo::vertices_per_cell + 1; ++jj) + output + << cell_list[ii][jj] << "\t"; + + output + << std::endl; + } + + // Write out quad node numbers + for (unsigned int ii = 0; ii < face_list.size(); ++ii) + { + output + << ii + 1 << "\t" + << face_list[ii][0] << "\t" + << (dim == 2 ? "line" : "quad") << "\t"; + for (unsigned int jj = 1; jj < GeometryInfo::vertices_per_face + 1; ++jj) + output + << face_list[ii][jj] << "\t"; + + output + << std::endl; + } + } +} //explicit instantiations diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d9459fdc2a..fe1bcabe96 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -89,9 +89,7 @@ SET(_categories slepc trilinos umfpack sharedtria ) IF(DEFINED DEAL_II_HAVE_TESTS_DIRECTORY) - # Only set up mesh_converter tests if the testsuite is set up as a - # dependent project: - LIST(APPEND _categories mesh_converter) + ENDIF() # diff --git a/tests/grid/grid_in_abaqus_01.cc b/tests/grid/grid_in_abaqus_01.cc new file mode 100644 index 0000000000..0ef18ad438 --- /dev/null +++ b/tests/grid/grid_in_abaqus_01.cc @@ -0,0 +1,111 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2004 - 2014 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + + + +// check whether we can read in with the abaqus format + +#include "../tests.h" +#include + +#include +#include +#include +#include + +#include +#include + + +template +void abaqus_grid (const char *name) +{ + Triangulation tria; + GridIn grid_in; + grid_in.attach_triangulation (tria); + std::ifstream input_file(name); + grid_in.read_abaqus(input_file); + + deallog << " " << tria.n_active_cells() << " active cells" << std::endl; + + int hash = 0; + int index = 0; + for (typename Triangulation::active_cell_iterator c=tria.begin_active(); + c!=tria.end(); ++c, ++index) + for (unsigned int i=0; i::vertices_per_cell; ++i) + hash += (index * i * c->vertex_index(i)) % (tria.n_active_cells()+1); + deallog << " hash=" << hash << std::endl; +} + + +int main () +{ + std::ofstream logfile("output"); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + try + { + deallog << "2d_test.inp" << std::endl; + abaqus_grid<2> (SOURCE_DIR "/grids/abaqus/2d/2d_test.inp"); + deallog << "2d_quad.inp" << std::endl; + abaqus_grid<2> (SOURCE_DIR "/grids/abaqus/2d/2d_quad.inp"); +// deallog << "2d_test_pave.inp" << std::endl; +// abaqus_grid<2> (SOURCE_DIR "/grids/abaqus/2d/2d_test_pave.inp"); // Failing test + deallog << "2d_test_abaqus.inp" << std::endl; + abaqus_grid<2> (SOURCE_DIR "/grids/abaqus/2d/2d_test_abaqus.inp"); + + deallog << "3d_test_cube_1.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_test_cube_1.inp"); + deallog << "3d_test_cube_two_materials.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_test_cube_two_materials.inp"); + deallog << "3d_CC_cubit_old.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_CC_cubit_old.inp"); + deallog << "3d_CC_cubit_new.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_CC_cubit_new.inp"); + deallog << "3d_test_cube_pave_1.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_test_cube_pave_1.inp"); + deallog << "3d_other_simple.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_other_simple.inp"); + deallog << "3d_test_abaqus.inp" << std::endl; + abaqus_grid<3> (SOURCE_DIR "/grids/abaqus/3d/3d_test_abaqus.inp"); + } + catch (std::exception &exc) + { + deallog << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + deallog << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + catch (...) + { + deallog << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + deallog << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + }; + + return 0; +} diff --git a/tests/grid/grid_in_abaqus_01.output b/tests/grid/grid_in_abaqus_01.output new file mode 100644 index 0000000000..afd1b2fe78 --- /dev/null +++ b/tests/grid/grid_in_abaqus_01.output @@ -0,0 +1,31 @@ + +DEAL::2d_test.inp +DEAL:: 108 active cells +DEAL:: hash=17533 +DEAL::2d_quad.inp +DEAL:: 4 active cells +DEAL:: hash=19 +DEAL::2d_test_abaqus.inp +DEAL:: 75 active cells +DEAL:: hash=7783 +DEAL::3d_test_cube_1.inp +DEAL:: 1 active cells +DEAL:: hash=0 +DEAL::3d_test_cube_two_materials.inp +DEAL:: 8 active cells +DEAL:: hash=179 +DEAL::3d_CC_cubit_old.inp +DEAL:: 16 active cells +DEAL:: hash=920 +DEAL::3d_CC_cubit_new.inp +DEAL:: 16 active cells +DEAL:: hash=920 +DEAL::3d_test_cube_pave_1.inp +DEAL:: 14 active cells +DEAL:: hash=551 +DEAL::3d_other_simple.inp +DEAL:: 1 active cells +DEAL:: hash=0 +DEAL::3d_test_abaqus.inp +DEAL:: 375 active cells +DEAL:: hash=494873 diff --git a/contrib/mesh_conversion/mesh/2d/quad.cub b/tests/grid/grids/abaqus/2d/2d_quad.cub similarity index 100% rename from contrib/mesh_conversion/mesh/2d/quad.cub rename to tests/grid/grids/abaqus/2d/2d_quad.cub diff --git a/contrib/mesh_conversion/mesh/2d/quad.inp b/tests/grid/grids/abaqus/2d/2d_quad.inp similarity index 100% rename from contrib/mesh_conversion/mesh/2d/quad.inp rename to tests/grid/grids/abaqus/2d/2d_quad.inp diff --git a/contrib/mesh_conversion/mesh/2d/2d_test.cub b/tests/grid/grids/abaqus/2d/2d_test.cub similarity index 100% rename from contrib/mesh_conversion/mesh/2d/2d_test.cub rename to tests/grid/grids/abaqus/2d/2d_test.cub diff --git a/contrib/mesh_conversion/mesh/2d/2d_test.inp b/tests/grid/grids/abaqus/2d/2d_test.inp similarity index 100% rename from contrib/mesh_conversion/mesh/2d/2d_test.inp rename to tests/grid/grids/abaqus/2d/2d_test.inp diff --git a/tests/grid/grids/abaqus/2d/2d_test_abaqus.cae b/tests/grid/grids/abaqus/2d/2d_test_abaqus.cae new file mode 100755 index 0000000000000000000000000000000000000000..827df1aa8a7d202e823a4a2df9e3542cf1121b49 GIT binary patch literal 94208 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 literal 0 HcmV?d00001 diff --git a/tests/grid/grids/abaqus/2d/2d_test_abaqus.inp b/tests/grid/grids/abaqus/2d/2d_test_abaqus.inp new file mode 100755 index 0000000000..cc8810104d --- /dev/null +++ b/tests/grid/grids/abaqus/2d/2d_test_abaqus.inp @@ -0,0 +1,232 @@ +*Heading +** Job name: 2d_test_abaqus Model name: Model-1 +** Generated by: Abaqus/CAE 6.13-3 +*Preprint, echo=NO, model=NO, history=NO, contact=NO +** +** PARTS +** +*Part, name=Part-1 +*Node + 1, 1., 0. + 2, 1., 1. + 3, 0., 1. + 4, 0., 0. + 5, 2., 0. + 6, 2., 2. + 7, 1., 2. + 8, 1., 0.200000003 + 9, 1., 0.400000006 + 10, 1., 0.600000024 + 11, 1., 0.800000012 + 12, 0.800000012, 1. + 13, 0.600000024, 1. + 14, 0.400000006, 1. + 15, 0.200000003, 1. + 16, 0., 0.800000012 + 17, 0., 0.600000024 + 18, 0., 0.400000006 + 19, 0., 0.200000003 + 20, 0.200000003, 0. + 21, 0.400000006, 0. + 22, 0.600000024, 0. + 23, 0.800000012, 0. + 24, 1.20000005, 0. + 25, 1.39999998, 0. + 26, 1.60000002, 0. + 27, 1.79999995, 0. + 28, 2., 0.200000003 + 29, 2., 0.400000006 + 30, 2., 0.600000024 + 31, 2., 0.800000012 + 32, 2., 1. + 33, 2., 1.20000005 + 34, 2., 1.39999998 + 35, 2., 1.60000002 + 36, 2., 1.79999995 + 37, 1.79999995, 2. + 38, 1.60000002, 2. + 39, 1.39999998, 2. + 40, 1.20000005, 2. + 41, 1., 1.79999995 + 42, 1., 1.60000002 + 43, 1., 1.39999998 + 44, 1., 1.20000005 + 45, 0.800000012, 0.200000003 + 46, 0.800000012, 0.400000006 + 47, 0.800000012, 0.600000024 + 48, 0.800000012, 0.800000012 + 49, 0.600000024, 0.200000003 + 50, 0.600000024, 0.400000006 + 51, 0.600000024, 0.600000024 + 52, 0.600000024, 0.800000012 + 53, 0.400000006, 0.200000003 + 54, 0.400000006, 0.400000006 + 55, 0.400000006, 0.600000024 + 56, 0.400000006, 0.800000012 + 57, 0.200000003, 0.200000003 + 58, 0.200000003, 0.400000006 + 59, 0.200000003, 0.600000024 + 60, 0.200000003, 0.800000012 + 61, 1.20000005, 0.200000003 + 62, 1.39999998, 0.200000003 + 63, 1.60000002, 0.200000003 + 64, 1.79999995, 0.200000003 + 65, 1.20000005, 0.400000006 + 66, 1.39999998, 0.400000006 + 67, 1.60000002, 0.400000006 + 68, 1.79999995, 0.400000006 + 69, 1.20000005, 0.600000024 + 70, 1.39999998, 0.600000024 + 71, 1.60000002, 0.600000024 + 72, 1.79999995, 0.600000024 + 73, 1.20000005, 0.800000012 + 74, 1.39999998, 0.800000012 + 75, 1.60000002, 0.800000012 + 76, 1.79999995, 0.800000012 + 77, 1.20000005, 1. + 78, 1.39999998, 1. + 79, 1.60000002, 1. + 80, 1.79999995, 1. + 81, 1.20000005, 1.20000005 + 82, 1.39999998, 1.20000005 + 83, 1.60000002, 1.20000005 + 84, 1.79999995, 1.20000005 + 85, 1.20000005, 1.39999998 + 86, 1.39999998, 1.39999998 + 87, 1.60000002, 1.39999998 + 88, 1.79999995, 1.39999998 + 89, 1.20000005, 1.60000002 + 90, 1.39999998, 1.60000002 + 91, 1.60000002, 1.60000002 + 92, 1.79999995, 1.60000002 + 93, 1.20000005, 1.79999995 + 94, 1.39999998, 1.79999995 + 95, 1.60000002, 1.79999995 + 96, 1.79999995, 1.79999995 +*Element, type=CPS4R + 1, 1, 8, 45, 23 + 2, 8, 9, 46, 45 + 3, 9, 10, 47, 46 + 4, 10, 11, 48, 47 + 5, 11, 2, 12, 48 + 6, 23, 45, 49, 22 + 7, 45, 46, 50, 49 + 8, 46, 47, 51, 50 + 9, 47, 48, 52, 51 +10, 48, 12, 13, 52 +11, 22, 49, 53, 21 +12, 49, 50, 54, 53 +13, 50, 51, 55, 54 +14, 51, 52, 56, 55 +15, 52, 13, 14, 56 +16, 21, 53, 57, 20 +17, 53, 54, 58, 57 +18, 54, 55, 59, 58 +19, 55, 56, 60, 59 +20, 56, 14, 15, 60 +21, 20, 57, 19, 4 +22, 57, 58, 18, 19 +23, 58, 59, 17, 18 +24, 59, 60, 16, 17 +25, 60, 15, 3, 16 +26, 1, 24, 61, 8 +27, 24, 25, 62, 61 +28, 25, 26, 63, 62 +29, 26, 27, 64, 63 +30, 27, 5, 28, 64 +31, 8, 61, 65, 9 +32, 61, 62, 66, 65 +33, 62, 63, 67, 66 +34, 63, 64, 68, 67 +35, 64, 28, 29, 68 +36, 9, 65, 69, 10 +37, 65, 66, 70, 69 +38, 66, 67, 71, 70 +39, 67, 68, 72, 71 +40, 68, 29, 30, 72 +41, 10, 69, 73, 11 +42, 69, 70, 74, 73 +43, 70, 71, 75, 74 +44, 71, 72, 76, 75 +45, 72, 30, 31, 76 +46, 11, 73, 77, 2 +47, 73, 74, 78, 77 +48, 74, 75, 79, 78 +49, 75, 76, 80, 79 +50, 76, 31, 32, 80 +51, 2, 77, 81, 44 +52, 77, 78, 82, 81 +53, 78, 79, 83, 82 +54, 79, 80, 84, 83 +55, 80, 32, 33, 84 +56, 44, 81, 85, 43 +57, 81, 82, 86, 85 +58, 82, 83, 87, 86 +59, 83, 84, 88, 87 +60, 84, 33, 34, 88 +61, 43, 85, 89, 42 +62, 85, 86, 90, 89 +63, 86, 87, 91, 90 +64, 87, 88, 92, 91 +65, 88, 34, 35, 92 +66, 42, 89, 93, 41 +67, 89, 90, 94, 93 +68, 90, 91, 95, 94 +69, 91, 92, 96, 95 +70, 92, 35, 36, 96 +71, 41, 93, 40, 7 +72, 93, 94, 39, 40 +73, 94, 95, 38, 39 +74, 95, 96, 37, 38 +75, 96, 36, 6, 37 +*Nset, nset=_PickedSet3, internal + 1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + 20, 21, 22, 23, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 + 57, 58, 59, 60 +*Elset, elset=_PickedSet3, internal, generate + 1, 25, 1 +*Nset, nset=_PickedSet4, internal + 1, 2, 5, 6, 7, 8, 9, 10, 11, 24, 25, 26, 27, 28, 29, 30 + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 61, 62 + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94 + 95, 96 +*Elset, elset=_PickedSet4, internal, generate + 26, 75, 1 +** Section: Section-1 +*Solid Section, elset=_PickedSet3, material=Material-1 +, +** Section: Section-2 +*Solid Section, elset=_PickedSet4, material=Material-2 +, +*End Part +** +** +** ASSEMBLY +** +*Assembly, name=Assembly +** +*Instance, name=Part-1-1, part=Part-1 +*End Instance +** +*Elset, elset=_Surf-1_S3, internal, instance=Part-1-1, generate + 21, 25, 1 +*Surface, type=ELEMENT, name=Surf-1 +_Surf-1_S3, S3 +*Elset, elset=_Surf-2_S3, internal, instance=Part-1-1, generate + 71, 75, 1 +*Surface, type=ELEMENT, name=Surf-2 +_Surf-2_S3, S3 +*Elset, elset=_Surf-3_S1, internal, instance=Part-1-1, generate + 26, 30, 1 +*Elset, elset=_Surf-3_S2, internal, instance=Part-1-1, generate + 30, 75, 5 +*Surface, type=ELEMENT, name=Surf-3 +_Surf-3_S1, S1 +_Surf-3_S2, S2 +*End Assembly +** +** MATERIALS +** +*Material, name=Material-1 +*Material, name=Material-2 diff --git a/tests/grid/grids/abaqus/2d/2d_test_pave.cub b/tests/grid/grids/abaqus/2d/2d_test_pave.cub new file mode 100644 index 0000000000000000000000000000000000000000..9ffe47f98e18edabc987d2081b18bda1d63ae3be GIT binary patch literal 32726 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

    C|%68{P%03C}&Px{~h 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 ${_test_directory}/diff - || (mv ${_test_directory}/diff - ${_test_directory}/failing_diff - && echo "${_test_full}: RUN successful." - && echo "${_test_full}: DIFF failed. ------ Source: ${_comparison_file}" - && echo "${_test_full}: DIFF failed. ------ Result: ${_test_directory}/output" - && echo "${_test_full}: DIFF failed. ------ Diff: ${_test_directory}/failing_diff" - && echo "${_test_full}: DIFF failed. ------ Diffs as follows:" - && cat ${_test_directory}/failing_diff - && exit 1) - WORKING_DIRECTORY ${_test_directory} - DEPENDS - ${_test_directory}/output - ${_comparison_file} - ) - - ADD_CUSTOM_TARGET(${_mesh}.diff DEPENDS ${_test_directory}/diff - COMMAND - echo "${_test_full}: RUN successful." - && echo "${_test_full}: DIFF successful." - && echo "${_test_full}: PASSED." - ) - - ADD_TEST(NAME ${_test_full} - COMMAND ${CMAKE_COMMAND} - -DTRGT=${_mesh}.diff - -DTEST=${_test_full} - -DBINARY_DIR=${CMAKE_BINARY_DIR} - -P ${DEAL_II_PATH}/${DEAL_II_SHARE_RELDIR}/scripts/run_test.cmake - WORKING_DIRECTORY ${_test_directory} - ) - SET_TESTS_PROPERTIES(${_test_full} PROPERTIES - LABEL "${_category}" - TIMEOUT ${TEST_TIME_LIMIT} - ) - - ENDIF() - -ENDFOREACH() diff --git a/tests/mesh_converter/meshes/2d/2d_test.cub b/tests/mesh_converter/meshes/2d/2d_test.cub deleted file mode 100644 index 90511d4e049b4279812b56e59a05fb15b7699287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22952 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 z 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 diff --git a/tests/mesh_converter/meshes/3d/CC_cubit_new.inp b/tests/mesh_converter/meshes/3d/CC_cubit_new.inp deleted file mode 100644 index 0bb7fa5cb2..0000000000 --- a/tests/mesh_converter/meshes/3d/CC_cubit_new.inp +++ /dev/null @@ -1,157 +0,0 @@ -*HEADING -cubit(y/Mesh_conversion/Mesh_conversion_update/mesh/CC_TEMP.inp): 06/13/2010: 18 -version: 12.1 -** -********************************** P A R T S ********************************** -*PART, NAME=Part-Default -** -********************************** N O D E S ********************************** -*NODE, NSET=ALLNODES - 1, -5.000000e-01, -5.000000e-01, 5.000000e-01 - 2, -5.000000e-01, -5.000000e-01, 0.000000e+00 - 3, -5.000000e-01, 0.000000e+00, 0.000000e+00 - 4, -5.000000e-01, 0.000000e+00, 5.000000e-01 - 5, 0.000000e+00, -5.000000e-01, 5.000000e-01 - 6, 0.000000e+00, -5.000000e-01, 0.000000e+00 - 7, 0.000000e+00, 0.000000e+00, 0.000000e+00 - 8, 0.000000e+00, 0.000000e+00, 5.000000e-01 - 9, -5.000000e-01, -5.000000e-01, -5.000000e-01 - 10, -5.000000e-01, 0.000000e+00, -5.000000e-01 - 11, 0.000000e+00, -5.000000e-01, -5.000000e-01 - 12, 0.000000e+00, 0.000000e+00, -5.000000e-01 - 13, -5.000000e-01, 5.000000e-01, 0.000000e+00 - 14, -5.000000e-01, 5.000000e-01, 5.000000e-01 - 15, 0.000000e+00, 5.000000e-01, 0.000000e+00 - 16, 0.000000e+00, 5.000000e-01, 5.000000e-01 - 17, -5.000000e-01, 5.000000e-01, -5.000000e-01 - 18, 0.000000e+00, 5.000000e-01, -5.000000e-01 - 19, 5.000000e-01, -5.000000e-01, 5.000000e-01 - 20, 5.000000e-01, -5.000000e-01, 0.000000e+00 - 21, 5.000000e-01, 0.000000e+00, 0.000000e+00 - 22, 5.000000e-01, 0.000000e+00, 5.000000e-01 - 23, 5.000000e-01, -5.000000e-01, -5.000000e-01 - 24, 5.000000e-01, 0.000000e+00, -5.000000e-01 - 25, 5.000000e-01, 5.000000e-01, 0.000000e+00 - 26, 5.000000e-01, 5.000000e-01, 5.000000e-01 - 27, 5.000000e-01, 5.000000e-01, -5.000000e-01 - 28, -2.500000e-01, 5.500000e-01, 2.500000e-01 - 29, -2.500000e-01, 5.500000e-01, 0.000000e+00 - 30, -2.500000e-01, 8.000000e-01, 0.000000e+00 - 31, -2.500000e-01, 8.000000e-01, 2.500000e-01 - 32, 0.000000e+00, 5.500000e-01, 2.500000e-01 - 33, 0.000000e+00, 5.500000e-01, 0.000000e+00 - 34, 0.000000e+00, 8.000000e-01, 0.000000e+00 - 35, 0.000000e+00, 8.000000e-01, 2.500000e-01 - 36, -2.500000e-01, 5.500000e-01, -2.500000e-01 - 37, -2.500000e-01, 8.000000e-01, -2.500000e-01 - 38, 0.000000e+00, 5.500000e-01, -2.500000e-01 - 39, 0.000000e+00, 8.000000e-01, -2.500000e-01 - 40, -2.500000e-01, 1.050000e+00, 0.000000e+00 - 41, -2.500000e-01, 1.050000e+00, 2.500000e-01 - 42, 0.000000e+00, 1.050000e+00, 0.000000e+00 - 43, 0.000000e+00, 1.050000e+00, 2.500000e-01 - 44, -2.500000e-01, 1.050000e+00, -2.500000e-01 - 45, 0.000000e+00, 1.050000e+00, -2.500000e-01 - 46, 2.500000e-01, 5.500000e-01, 2.500000e-01 - 47, 2.500000e-01, 5.500000e-01, 0.000000e+00 - 48, 2.500000e-01, 8.000000e-01, 0.000000e+00 - 49, 2.500000e-01, 8.000000e-01, 2.500000e-01 - 50, 2.500000e-01, 5.500000e-01, -2.500000e-01 - 51, 2.500000e-01, 8.000000e-01, -2.500000e-01 - 52, 2.500000e-01, 1.050000e+00, 0.000000e+00 - 53, 2.500000e-01, 1.050000e+00, 2.500000e-01 - 54, 2.500000e-01, 1.050000e+00, -2.500000e-01 -** -********************************** E L E M E N T S **************************** -*ELEMENT, TYPE=C3D8R, ELSET=EB1 - 1, 1, 2, 3, 4, 5, 6, 7, 8 - 2, 2, 9, 10, 3, 6, 11, 12, 7 - 3, 4, 3, 13, 14, 8, 7, 15, 16 - 4, 3, 10, 17, 13, 7, 12, 18, 15 - 5, 5, 6, 7, 8, 19, 20, 21, 22 - 6, 6, 11, 12, 7, 20, 23, 24, 21 - 7, 8, 7, 15, 16, 22, 21, 25, 26 - 8, 7, 12, 18, 15, 21, 24, 27, 25 -*ELEMENT, TYPE=C3D8R, ELSET=EB2 - 9, 28, 29, 30, 31, 32, 33, 34, 35 - 10, 29, 36, 37, 30, 33, 38, 39, 34 - 11, 31, 30, 40, 41, 35, 34, 42, 43 - 12, 30, 37, 44, 40, 34, 39, 45, 42 - 13, 32, 33, 34, 35, 46, 47, 48, 49 - 14, 33, 38, 39, 34, 47, 50, 51, 48 - 15, 35, 34, 42, 43, 49, 48, 52, 53 - 16, 34, 39, 45, 42, 48, 51, 54, 52 -** -********************************** S I D E S E T S ********************************** -*ELSET, ELSET=SS1_S3 - 1, 2, 5, 6 -*SURFACE, NAME=SS1 -SS1_S3, S3 -*ELSET, ELSET=SS2_S4 - 10, 12, 14, 16, 2, 4, 6, 8 -*SURFACE, NAME=SS2 -SS2_S4, S4 -*ELSET, ELSET=SS3_S1 - 9, 10, 11, 12, 1, 2, 3, 4 -*SURFACE, NAME=SS3 -SS3_S1, S1 -*ELSET, ELSET=SS4_S5 - 11, 12, 15, 16 -*SURFACE, NAME=SS4 -SS4_S5, S5 -*ELSET, ELSET=SS100_S5 - 3, 4, 7, 8 -*SURFACE, NAME=SS100 -SS100_S5, S5 -*ELSET, ELSET=SS101_S3 - 9, 10, 13, 14 -*SURFACE, NAME=SS101 -SS101_S3, S3 -** -********************************** P R O P E R T I E S ************************ -*SOLID SECTION, ELSET=EB1, MATERIAL=Default-Steel -*SOLID SECTION, ELSET=EB2, MATERIAL=Default-Steel -** -*END PART -** -** -** -********************************** E N D P A R T S ********************************** -** -** -********************************** A S S E M B L Y ************************************ -** -*ASSEMBLY, NAME=ASSEMBLY1 -** -*INSTANCE, NAME=Part-Default_1, PART=Part-Default -*END INSTANCE -** -*END ASSEMBLY -** -** -** -*MATERIAL, NAME = Default-Steel -*ELASTIC, TYPE=ISOTROPIC -2.068000e+05, 2.900000e-01 -*DENSITY -7.000000e-06 -*CONDUCTIVITY,TYPE=ISO -4.500000e-02 -*SPECIFIC HEAT -5.000000e+02 -** -** -************************************** H I S T O R Y ************************************* -** -*PREPRINT -** -**************************************** S T E P 1 *************************************** -*STEP,INC=100,NAME=Default Set -** -*STATIC -1, 1, 1e-05, 1 -** -** -** -** -*END STEP diff --git a/tests/mesh_converter/meshes/3d/CC_cubit_new.ucd b/tests/mesh_converter/meshes/3d/CC_cubit_new.ucd deleted file mode 100644 index bc68a51d6d..0000000000 --- a/tests/mesh_converter/meshes/3d/CC_cubit_new.ucd +++ /dev/null @@ -1,106 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD - -54 48 0 0 0 -1 -5.00000000e-01 -5.00000000e-01 5.00000000e-01 -2 -5.00000000e-01 -5.00000000e-01 0.00000000e+00 -3 -5.00000000e-01 0.00000000e+00 0.00000000e+00 -4 -5.00000000e-01 0.00000000e+00 5.00000000e-01 -5 0.00000000e+00 -5.00000000e-01 5.00000000e-01 -6 0.00000000e+00 -5.00000000e-01 0.00000000e+00 -7 0.00000000e+00 0.00000000e+00 0.00000000e+00 -8 0.00000000e+00 0.00000000e+00 5.00000000e-01 -9 -5.00000000e-01 -5.00000000e-01 -5.00000000e-01 -10 -5.00000000e-01 0.00000000e+00 -5.00000000e-01 -11 0.00000000e+00 -5.00000000e-01 -5.00000000e-01 -12 0.00000000e+00 0.00000000e+00 -5.00000000e-01 -13 -5.00000000e-01 5.00000000e-01 0.00000000e+00 -14 -5.00000000e-01 5.00000000e-01 5.00000000e-01 -15 0.00000000e+00 5.00000000e-01 0.00000000e+00 -16 0.00000000e+00 5.00000000e-01 5.00000000e-01 -17 -5.00000000e-01 5.00000000e-01 -5.00000000e-01 -18 0.00000000e+00 5.00000000e-01 -5.00000000e-01 -19 5.00000000e-01 -5.00000000e-01 5.00000000e-01 -20 5.00000000e-01 -5.00000000e-01 0.00000000e+00 -21 5.00000000e-01 0.00000000e+00 0.00000000e+00 -22 5.00000000e-01 0.00000000e+00 5.00000000e-01 -23 5.00000000e-01 -5.00000000e-01 -5.00000000e-01 -24 5.00000000e-01 0.00000000e+00 -5.00000000e-01 -25 5.00000000e-01 5.00000000e-01 0.00000000e+00 -26 5.00000000e-01 5.00000000e-01 5.00000000e-01 -27 5.00000000e-01 5.00000000e-01 -5.00000000e-01 -28 -2.50000000e-01 5.50000000e-01 2.50000000e-01 -29 -2.50000000e-01 5.50000000e-01 0.00000000e+00 -30 -2.50000000e-01 8.00000000e-01 0.00000000e+00 -31 -2.50000000e-01 8.00000000e-01 2.50000000e-01 -32 0.00000000e+00 5.50000000e-01 2.50000000e-01 -33 0.00000000e+00 5.50000000e-01 0.00000000e+00 -34 0.00000000e+00 8.00000000e-01 0.00000000e+00 -35 0.00000000e+00 8.00000000e-01 2.50000000e-01 -36 -2.50000000e-01 5.50000000e-01 -2.50000000e-01 -37 -2.50000000e-01 8.00000000e-01 -2.50000000e-01 -38 0.00000000e+00 5.50000000e-01 -2.50000000e-01 -39 0.00000000e+00 8.00000000e-01 -2.50000000e-01 -40 -2.50000000e-01 1.05000000e+00 0.00000000e+00 -41 -2.50000000e-01 1.05000000e+00 2.50000000e-01 -42 0.00000000e+00 1.05000000e+00 0.00000000e+00 -43 0.00000000e+00 1.05000000e+00 2.50000000e-01 -44 -2.50000000e-01 1.05000000e+00 -2.50000000e-01 -45 0.00000000e+00 1.05000000e+00 -2.50000000e-01 -46 2.50000000e-01 5.50000000e-01 2.50000000e-01 -47 2.50000000e-01 5.50000000e-01 0.00000000e+00 -48 2.50000000e-01 8.00000000e-01 0.00000000e+00 -49 2.50000000e-01 8.00000000e-01 2.50000000e-01 -50 2.50000000e-01 5.50000000e-01 -2.50000000e-01 -51 2.50000000e-01 8.00000000e-01 -2.50000000e-01 -52 2.50000000e-01 1.05000000e+00 0.00000000e+00 -53 2.50000000e-01 1.05000000e+00 2.50000000e-01 -54 2.50000000e-01 1.05000000e+00 -2.50000000e-01 -1 1 hex 1 2 3 4 5 6 7 8 -2 1 hex 2 9 10 3 6 11 12 7 -3 1 hex 4 3 13 14 8 7 15 16 -4 1 hex 3 10 17 13 7 12 18 15 -5 1 hex 5 6 7 8 19 20 21 22 -6 1 hex 6 11 12 7 20 23 24 21 -7 1 hex 8 7 15 16 22 21 25 26 -8 1 hex 7 12 18 15 21 24 27 25 -9 2 hex 28 29 30 31 32 33 34 35 -10 2 hex 29 36 37 30 33 38 39 34 -11 2 hex 31 30 40 41 35 34 42 43 -12 2 hex 30 37 44 40 34 39 45 42 -13 2 hex 32 33 34 35 46 47 48 49 -14 2 hex 33 38 39 34 47 50 51 48 -15 2 hex 35 34 42 43 49 48 52 53 -16 2 hex 34 39 45 42 48 51 54 52 -1 1 quad 1 2 6 5 -2 1 quad 2 9 11 6 -3 1 quad 5 6 20 19 -4 1 quad 6 11 23 20 -5 2 quad 36 37 39 38 -6 2 quad 37 44 45 39 -7 2 quad 38 39 51 50 -8 2 quad 39 45 54 51 -9 2 quad 9 10 12 11 -10 2 quad 10 17 18 12 -11 2 quad 11 12 24 23 -12 2 quad 12 18 27 24 -13 3 quad 28 31 30 29 -14 3 quad 29 30 37 36 -15 3 quad 31 41 40 30 -16 3 quad 30 40 44 37 -17 3 quad 1 4 3 2 -18 3 quad 2 3 10 9 -19 3 quad 4 14 13 3 -20 3 quad 3 13 17 10 -21 4 quad 40 41 43 42 -22 4 quad 44 40 42 45 -23 4 quad 42 43 53 52 -24 4 quad 45 42 52 54 -25 100 quad 13 14 16 15 -26 100 quad 17 13 15 18 -27 100 quad 15 16 26 25 -28 100 quad 18 15 25 27 -29 101 quad 28 29 33 32 -30 101 quad 29 36 38 33 -31 101 quad 32 33 47 46 -32 101 quad 33 38 50 47 diff --git a/tests/mesh_converter/meshes/3d/CC_cubit_old.inp b/tests/mesh_converter/meshes/3d/CC_cubit_old.inp deleted file mode 100644 index 7d2752f363..0000000000 --- a/tests/mesh_converter/meshes/3d/CC_cubit_old.inp +++ /dev/null @@ -1,113 +0,0 @@ -*HEADING -cubit(rrent/Geometry/Contact_test/contact_cubes_NTS_1_close.inp): 03/31/2010: 17 -*NODE - 1, -5.000000e-01, -5.000000e-01, 5.000000e-01 - 2, -5.000000e-01, -5.000000e-01, 0.000000e+00 - 3, -5.000000e-01, 0.000000e+00, 0.000000e+00 - 4, -5.000000e-01, 0.000000e+00, 5.000000e-01 - 5, 0.000000e+00, -5.000000e-01, 5.000000e-01 - 6, 0.000000e+00, -5.000000e-01, 0.000000e+00 - 7, 0.000000e+00, 0.000000e+00, 0.000000e+00 - 8, 0.000000e+00, 0.000000e+00, 5.000000e-01 - 9, -5.000000e-01, -5.000000e-01, -5.000000e-01 - 10, -5.000000e-01, 0.000000e+00, -5.000000e-01 - 11, 0.000000e+00, -5.000000e-01, -5.000000e-01 - 12, 0.000000e+00, 0.000000e+00, -5.000000e-01 - 13, -5.000000e-01, 5.000000e-01, 0.000000e+00 - 14, -5.000000e-01, 5.000000e-01, 5.000000e-01 - 15, 0.000000e+00, 5.000000e-01, 0.000000e+00 - 16, 0.000000e+00, 5.000000e-01, 5.000000e-01 - 17, -5.000000e-01, 5.000000e-01, -5.000000e-01 - 18, 0.000000e+00, 5.000000e-01, -5.000000e-01 - 19, 5.000000e-01, -5.000000e-01, 5.000000e-01 - 20, 5.000000e-01, -5.000000e-01, 0.000000e+00 - 21, 5.000000e-01, 0.000000e+00, 0.000000e+00 - 22, 5.000000e-01, 0.000000e+00, 5.000000e-01 - 23, 5.000000e-01, -5.000000e-01, -5.000000e-01 - 24, 5.000000e-01, 0.000000e+00, -5.000000e-01 - 25, 5.000000e-01, 5.000000e-01, 0.000000e+00 - 26, 5.000000e-01, 5.000000e-01, 5.000000e-01 - 27, 5.000000e-01, 5.000000e-01, -5.000000e-01 - 28, -2.500000e-01, 5.500000e-01, 2.500000e-01 - 29, -2.500000e-01, 5.500000e-01, 0.000000e+00 - 30, -2.500000e-01, 8.000000e-01, 0.000000e+00 - 31, -2.500000e-01, 8.000000e-01, 2.500000e-01 - 32, 0.000000e+00, 5.500000e-01, 2.500000e-01 - 33, 0.000000e+00, 5.500000e-01, 0.000000e+00 - 34, 0.000000e+00, 8.000000e-01, 0.000000e+00 - 35, 0.000000e+00, 8.000000e-01, 2.500000e-01 - 36, -2.500000e-01, 5.500000e-01, -2.500000e-01 - 37, -2.500000e-01, 8.000000e-01, -2.500000e-01 - 38, 0.000000e+00, 5.500000e-01, -2.500000e-01 - 39, 0.000000e+00, 8.000000e-01, -2.500000e-01 - 40, -2.500000e-01, 1.050000e+00, 0.000000e+00 - 41, -2.500000e-01, 1.050000e+00, 2.500000e-01 - 42, 0.000000e+00, 1.050000e+00, 0.000000e+00 - 43, 0.000000e+00, 1.050000e+00, 2.500000e-01 - 44, -2.500000e-01, 1.050000e+00, -2.500000e-01 - 45, 0.000000e+00, 1.050000e+00, -2.500000e-01 - 46, 2.500000e-01, 5.500000e-01, 2.500000e-01 - 47, 2.500000e-01, 5.500000e-01, 0.000000e+00 - 48, 2.500000e-01, 8.000000e-01, 0.000000e+00 - 49, 2.500000e-01, 8.000000e-01, 2.500000e-01 - 50, 2.500000e-01, 5.500000e-01, -2.500000e-01 - 51, 2.500000e-01, 8.000000e-01, -2.500000e-01 - 52, 2.500000e-01, 1.050000e+00, 0.000000e+00 - 53, 2.500000e-01, 1.050000e+00, 2.500000e-01 - 54, 2.500000e-01, 1.050000e+00, -2.500000e-01 -*ELEMENT, TYPE=C3D8R, ELSET=EB1 - 1, 1, 2, 3, 4, 5, 6, 7, 8 - 2, 2, 9, 10, 3, 6, 11, 12, 7 - 3, 4, 3, 13, 14, 8, 7, 15, 16 - 4, 3, 10, 17, 13, 7, 12, 18, 15 - 5, 5, 6, 7, 8, 19, 20, 21, 22 - 6, 6, 11, 12, 7, 20, 23, 24, 21 - 7, 8, 7, 15, 16, 22, 21, 25, 26 - 8, 7, 12, 18, 15, 21, 24, 27, 25 -*ELEMENT, TYPE=C3D8R, ELSET=EB2 - 9, 28, 29, 30, 31, 32, 33, 34, 35 - 10, 29, 36, 37, 30, 33, 38, 39, 34 - 11, 31, 30, 40, 41, 35, 34, 42, 43 - 12, 30, 37, 44, 40, 34, 39, 45, 42 - 13, 32, 33, 34, 35, 46, 47, 48, 49 - 14, 33, 38, 39, 34, 47, 50, 51, 48 - 15, 35, 34, 42, 43, 49, 48, 52, 53 - 16, 34, 39, 45, 42, 48, 51, 54, 52 -*SURFACE, NAME=SS1 - 1, S3 - 2, S3 - 5, S3 - 6, S3 -*SURFACE, NAME=SS2 - 10, S4 - 12, S4 - 14, S4 - 16, S4 - 2, S4 - 4, S4 - 6, S4 - 8, S4 -*SURFACE, NAME=SS3 - 9, S1 - 10, S1 - 11, S1 - 12, S1 - 1, S1 - 2, S1 - 3, S1 - 4, S1 -*SURFACE, NAME=SS4 - 11, S5 - 12, S5 - 15, S5 - 16, S5 -*SURFACE, NAME=SS100 - 3, S5 - 4, S5 - 7, S5 - 8, S5 -*SURFACE, NAME=SS101 - 9, S3 - 10, S3 - 13, S3 - 14, S3 diff --git a/tests/mesh_converter/meshes/3d/CC_cubit_old.ucd b/tests/mesh_converter/meshes/3d/CC_cubit_old.ucd deleted file mode 100644 index bc68a51d6d..0000000000 --- a/tests/mesh_converter/meshes/3d/CC_cubit_old.ucd +++ /dev/null @@ -1,106 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD - -54 48 0 0 0 -1 -5.00000000e-01 -5.00000000e-01 5.00000000e-01 -2 -5.00000000e-01 -5.00000000e-01 0.00000000e+00 -3 -5.00000000e-01 0.00000000e+00 0.00000000e+00 -4 -5.00000000e-01 0.00000000e+00 5.00000000e-01 -5 0.00000000e+00 -5.00000000e-01 5.00000000e-01 -6 0.00000000e+00 -5.00000000e-01 0.00000000e+00 -7 0.00000000e+00 0.00000000e+00 0.00000000e+00 -8 0.00000000e+00 0.00000000e+00 5.00000000e-01 -9 -5.00000000e-01 -5.00000000e-01 -5.00000000e-01 -10 -5.00000000e-01 0.00000000e+00 -5.00000000e-01 -11 0.00000000e+00 -5.00000000e-01 -5.00000000e-01 -12 0.00000000e+00 0.00000000e+00 -5.00000000e-01 -13 -5.00000000e-01 5.00000000e-01 0.00000000e+00 -14 -5.00000000e-01 5.00000000e-01 5.00000000e-01 -15 0.00000000e+00 5.00000000e-01 0.00000000e+00 -16 0.00000000e+00 5.00000000e-01 5.00000000e-01 -17 -5.00000000e-01 5.00000000e-01 -5.00000000e-01 -18 0.00000000e+00 5.00000000e-01 -5.00000000e-01 -19 5.00000000e-01 -5.00000000e-01 5.00000000e-01 -20 5.00000000e-01 -5.00000000e-01 0.00000000e+00 -21 5.00000000e-01 0.00000000e+00 0.00000000e+00 -22 5.00000000e-01 0.00000000e+00 5.00000000e-01 -23 5.00000000e-01 -5.00000000e-01 -5.00000000e-01 -24 5.00000000e-01 0.00000000e+00 -5.00000000e-01 -25 5.00000000e-01 5.00000000e-01 0.00000000e+00 -26 5.00000000e-01 5.00000000e-01 5.00000000e-01 -27 5.00000000e-01 5.00000000e-01 -5.00000000e-01 -28 -2.50000000e-01 5.50000000e-01 2.50000000e-01 -29 -2.50000000e-01 5.50000000e-01 0.00000000e+00 -30 -2.50000000e-01 8.00000000e-01 0.00000000e+00 -31 -2.50000000e-01 8.00000000e-01 2.50000000e-01 -32 0.00000000e+00 5.50000000e-01 2.50000000e-01 -33 0.00000000e+00 5.50000000e-01 0.00000000e+00 -34 0.00000000e+00 8.00000000e-01 0.00000000e+00 -35 0.00000000e+00 8.00000000e-01 2.50000000e-01 -36 -2.50000000e-01 5.50000000e-01 -2.50000000e-01 -37 -2.50000000e-01 8.00000000e-01 -2.50000000e-01 -38 0.00000000e+00 5.50000000e-01 -2.50000000e-01 -39 0.00000000e+00 8.00000000e-01 -2.50000000e-01 -40 -2.50000000e-01 1.05000000e+00 0.00000000e+00 -41 -2.50000000e-01 1.05000000e+00 2.50000000e-01 -42 0.00000000e+00 1.05000000e+00 0.00000000e+00 -43 0.00000000e+00 1.05000000e+00 2.50000000e-01 -44 -2.50000000e-01 1.05000000e+00 -2.50000000e-01 -45 0.00000000e+00 1.05000000e+00 -2.50000000e-01 -46 2.50000000e-01 5.50000000e-01 2.50000000e-01 -47 2.50000000e-01 5.50000000e-01 0.00000000e+00 -48 2.50000000e-01 8.00000000e-01 0.00000000e+00 -49 2.50000000e-01 8.00000000e-01 2.50000000e-01 -50 2.50000000e-01 5.50000000e-01 -2.50000000e-01 -51 2.50000000e-01 8.00000000e-01 -2.50000000e-01 -52 2.50000000e-01 1.05000000e+00 0.00000000e+00 -53 2.50000000e-01 1.05000000e+00 2.50000000e-01 -54 2.50000000e-01 1.05000000e+00 -2.50000000e-01 -1 1 hex 1 2 3 4 5 6 7 8 -2 1 hex 2 9 10 3 6 11 12 7 -3 1 hex 4 3 13 14 8 7 15 16 -4 1 hex 3 10 17 13 7 12 18 15 -5 1 hex 5 6 7 8 19 20 21 22 -6 1 hex 6 11 12 7 20 23 24 21 -7 1 hex 8 7 15 16 22 21 25 26 -8 1 hex 7 12 18 15 21 24 27 25 -9 2 hex 28 29 30 31 32 33 34 35 -10 2 hex 29 36 37 30 33 38 39 34 -11 2 hex 31 30 40 41 35 34 42 43 -12 2 hex 30 37 44 40 34 39 45 42 -13 2 hex 32 33 34 35 46 47 48 49 -14 2 hex 33 38 39 34 47 50 51 48 -15 2 hex 35 34 42 43 49 48 52 53 -16 2 hex 34 39 45 42 48 51 54 52 -1 1 quad 1 2 6 5 -2 1 quad 2 9 11 6 -3 1 quad 5 6 20 19 -4 1 quad 6 11 23 20 -5 2 quad 36 37 39 38 -6 2 quad 37 44 45 39 -7 2 quad 38 39 51 50 -8 2 quad 39 45 54 51 -9 2 quad 9 10 12 11 -10 2 quad 10 17 18 12 -11 2 quad 11 12 24 23 -12 2 quad 12 18 27 24 -13 3 quad 28 31 30 29 -14 3 quad 29 30 37 36 -15 3 quad 31 41 40 30 -16 3 quad 30 40 44 37 -17 3 quad 1 4 3 2 -18 3 quad 2 3 10 9 -19 3 quad 4 14 13 3 -20 3 quad 3 13 17 10 -21 4 quad 40 41 43 42 -22 4 quad 44 40 42 45 -23 4 quad 42 43 53 52 -24 4 quad 45 42 52 54 -25 100 quad 13 14 16 15 -26 100 quad 17 13 15 18 -27 100 quad 15 16 26 25 -28 100 quad 18 15 25 27 -29 101 quad 28 29 33 32 -30 101 quad 29 36 38 33 -31 101 quad 32 33 47 46 -32 101 quad 33 38 50 47 diff --git a/tests/mesh_converter/meshes/3d/other_simple.inp b/tests/mesh_converter/meshes/3d/other_simple.inp deleted file mode 100644 index 1250a41207..0000000000 --- a/tests/mesh_converter/meshes/3d/other_simple.inp +++ /dev/null @@ -1,17 +0,0 @@ -*NODE -1, 0, 0, 0 -2, 0, 0, 50 -3, 50, 0, 50 -4, 50, 0, 0 -5, 0, 50, 0 -6, 0.705725, 50, 50 -7, 50, 50, 50 -8, 50, 50, 0 -** -** -*ELEMENT, TYPE=C3D8 -1, 1, 2, 3, 4, 5, 6, 7, 8 -*NSET, NSET=n, GENERATE -1, 8 -*ELSET, ELSET=e, GENERATE -1, 1 diff --git a/tests/mesh_converter/meshes/3d/test_cube_1.cub b/tests/mesh_converter/meshes/3d/test_cube_1.cub deleted file mode 100644 index 4b577a24727c1692ce035ef78b6dcd1dff389c8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25385 zcmd5^TZ|>gSw6uAoaGJ%Ol;!X>@hKyS$Cg%uO)kCXJ>Xt%*>AWob@`qjC;@Y>@+@e z`uJRScQ!%h0U-lXl!rW+@L~x+BoabAAzMVOAGkOXNPtkJ@D%)HDG|g^JYZqIud1uN zx~IF(%=C_wp6%^R)nE11Uw{3Vsy?-R{o+a`Jbnz!621s84;hbU{)h3tfpSP=9zSY4nE8J^=e_Y-*8MnMyo9p>9E&*D4LmR5 zo@KrbP&>x^5$@T}5AgmA;d|!$8bPLx|N5hkKF?Q7|GSLz+3+D>r++si{X46VKdsY0 z%1HnCAL@_k^v6tQ@Fk9a{GV^E@yhxe8R>uZt#ALFPT$H%zw!91pVsMvjPx)6$M4LT zt`FApI`Z*KV6Q&;)=;PM%J**?>3{#+?oX!E-!{_Ez5B?M>GXdw(w}Gb!E^mqQ|-9z<%V5I-a!(uy4 z{|E*b`6qBrKmBLzbo$dq`d@$Zy?Q$Rijn?*AO88xboySHZXw~d=l)jWV||~+$?F?o zI&Lc;^xABKKlJ|4u% zE5`*`EZ;woldfqhl^;A$8eH#(*XQH*Mrk_F^TZwIi}Huh&&TQ`Dl5uEygFa%dY@R+ z@51N%XnuGcD)WA*8j&8QX`J_IBXl3ItvvZ`zUMPfw#j_YXP#`2`JT_ZU(EMx8&9^w ze9vc|Y=ilp&pe6We9vc|EX#Zkvn1^? zucEw~hF2cumG{KLBmJJ`@<_jD-8|CoSvQaLd$xmzey^TR?|;*$p)az7b7WNa1>^p8 z2kYF0SXT^EI*V4`+8pts#1Q zGqD-m7NR9A=YmzgP_snMvO407Eu8aC@@RSsR$JKK0?IyfGuSy0Ra-2`e^p$nH6bs! z?S-##tNzZNnfUvofwwRj4i?<$bnM@hnMtNkHX-{@HBO~1qA8mzH@3TL8(Zru+e^LP zwY7_&TXe+AW^b+cx$U(};6xp-7HW2*-RRU?jSlggJ2RN=k3_X@VrJzHQMHZ-xv5as za`3V%)Je=`5Ks2J!9a6LGfH1u8pW~L-6jXnSJ|vS3iLLb)DoAkEp1&{TkdXO-RiAf z-R$CJL)`L$eQ!EG5dB~fjPc46``%9Wa7<iowGOVl1c5JM4uWWahudHmWh{cwe%x>J-K(oTDY|S? zCu|u;q--JESO5;4%0{+IbnMYak>WEt8`Wt>qXVmu2@WO6={EZAwl|)5hggkd{^3Gq z4}t(A5)bNMqzmj0TcYJ!ch7A2$}qSy1l?%h4xvnDV+AHrfL4Y|pYSQ{_3hhYE&MCw zB%}s|q-;0Wh3w|F&ECqj7njzf?nO7RLw8BhwL~-OWK&xe!Gnf|keBUejD;6huJu-4 z+U|XBYXv-la5rEcT6U*iYqpxA)vk5gty;qo4Xb4}T8&m6mZ4)or8-T;T6PQBTP&Eh zP{lj4-*s1-*Apqr+F|vsWTA$XSTJkUb&$$XFl)_X!31ToVAdeyP9&HzyR7W!q6r!$ zq3W6?oBhDsxdmOO+JXP&xTsMm(epLPXFU>XrQwjLNM=|BwO1LLmdfG!=GqI_S7>61 z-WKgnqh>qpcC)bhI;%%Vl+jHYnzJs7)TWlrV(F}dD^O+VQ&S?%`y)wb_He2>POanA zS`E>(t#-|^8gQSSRtEAZPzTPg}33~{NYp&^*l7LCQ4tAggEUk!7EC;OKLpT z6N2LS@w zsA)nVQm)mxGub1tfj*#xYEZE>4Kfr3Jb7f21f&h}uYF`Pc&}BcVOb-_ePmdxP{XP^ zr7fBXE83K5u-c>}ELBFc5!JZZ7Mi_1Bujp)t}0R@P5M5lvg{~6u3;=zZA~zfCZ@~) zJ|*4Kq{60tDLGWLl}oHrVl`tJ=-6s&^)O$zG$CmahANDvCQ4sVq+6gtvUN+-F>Q5= z!o`uOP_$~XtegJ2A+SZ71^x;fVrZ67&b8qyXBp_|kb2UAKIckjB4_!`jXun*=(oQIrwo)u@saU8u z+eL~c z6$!0~T=8FCchPut=vLthg&t#|$7x{bB&HlX(x6tMposyz@5Ck~jUj{~FL@}~2lNSv zq+>8JG7s5Cj3l!Az`%|PKBCJD&L}e&tD)(LI2Dhp{3x{pQV`I8joF*LJCTNggr+qN z!q2I97i~)j04lCJbP08`lMrs1T%$9Kxd#8%-gKcq8{ba5;>!0`Kp9aMSxwnmw787b z%yhjQGEPHWR#?3QEl3}?ta*H}M%%&opd(w#GM(Us)rVZM6;eKQ`d8t&XE^ zJt*c|ZAWSODqM3-l)j#5Of?UWDHRboZPRK~z^O8n%Bwn^SPw>4TaPh?tH^3ot)n5* zYD+3b66==YnIC1e0ZFk9H%AW!99mBrA?PR@Q|cil@D!U->Rnm_1`{ya8CD=$0kbaF zNm}>_Fngy}IJE5|b?Qn9r zB0*5HKvJZhO%|%D6uhYZj;(taIk|Cs9Zi zQqw6XBwNkU!<69&1{U1Im>rRmTEGs*`|MRtT;=?oh#eUbVZ;tZ^M+VK0x@+t*Cms} zM~E>yLX`zOZWI?zi-ge&SYm?>TC@^Us!@b;dhU!aFCq0|K%vx*oTWiDl~Z0=5>XZ^ z9fmZR%qiz2(>t2)v~gvLlCC<@^r4Fpf^ifJ8N*}?#)-rN97?Q6; zj`VY}fD=)r{O?nW4Qz%|n6xVGYv%+9#)3e+Okl(W@$#G=bjr^y9ISf903o}kN?%Vj zSX&u`wP0CRsb)yMf{eNP<2dJXB8`p-B^DlPY{t@FNpig+^h)R+LawB1kMJT>K?9mr zGQ2D1DF!YFF#Ps3FZJ_@c#64-v;vImBGy_^C2QqLCSXymGtW;@Bq7i3&{GIa8C?EE ziE3sqSo}iK&oVoMu8sMn{@E>FbHOl_7zJ^ET2+P`JsEc~dtweQ)AM z9FoSXpHGAv{$6e`!|PTEbWgJM3>2g%sih%#J&|l=$aFSDB_+ieLpKdRbP`$obRvup(X{*)jyphA^~js~@(BZr zX?srV$3T;J^I@N=e1=oxY8@eoOh3&>nDMn$24k~2A8h1bVc#==z`8@Z$nA8Q7;0BJ zW1!iVyq<`O8L?#!6D1#uxd;v-7X#-cviRvl7%{JOydfm@d&-IzL_b*USGXT=+>VK; zSc1?lk!=TN@#9QGZJS&^+bi+B5)TWquw2tVpTPHewkw z?~W*MX#mEjeRBcOvn-=~Gs9B5=`@{sy#x2V2!PGcOt=P9I{tgWaVbAE;ZjSfWtP*5 zOBu*xS%%B9rmUFvN0OWDxHSI2#QbC}4n_^()-@_sRou~`cfv_pO_shM33U2XHcp@) z*FQOimVzKN{K6vCe2m#d?MZ=22Haz-?#!np#+2z@-mjq#;6@f zm3rh~Qe>c<@1O#$V#!Ozho`4f`Tk?0|V>~x%#Q)^(T77Y@G07F?WF_hxcAq4Ss<9q~=r}Ck08bNGW ziU8PhksBTfmm{+|poeaeo;XcmR=tGbRw`!A^qXj0YwbE_af^7Q0KlTkPusGYbi~1w z?xcABc`g7h7nWZtOas7*xZ~IzuFcLzfRR!@piCo(KhP-xV8b84dLl+jsc`W$<G%8~BucJ^-k+ zQr0pPfDPZbW3_B7NzX@6cG@WuL8sMe<0}J96&C@p5qDrVuE#1Abf)ZzKdxVw6**nGiblMy=jyVHJKp0x0uR9ziAmL|qLBAC^iU ztPFP+g53q~A+oUJPFnoPguakGeEhzdQt`(>O~ z?HQ}_jNHD&Ze3_t7Z5UTbbC?R-0(-zUYz*@?Bc>Q?M_@b@%Q|FZ)vzAOXVgyw*8FN zQe{RPq>zrA+58O7&Ds72Hn>xNWrgy1bdh;^ zdGwoQ>mu2(Ph{`c%BWqF6{4rIO?9)IWr zdUgCD+Q7`j8A^kYJPvbej8EfP*RAvEKI`teBTsCNyqCR4w!3eq?^=Av@^TmBSblYWvpT|nW?yVF}Ry7!{oEf zvyI(p{M`fQ()DmhL0!+PJDI+!iipz9F|q336_;kCf!~K76RP!QyMDneYc?2M!B5(t zLuHA&K9i4^#{r~iZGSYzXS2wq%VOShMp?)ajHgnPuul|!;?@fW9`@JidzFRdC%*T7 z>r;^&{CW=ECidm&f=f%2NznJ*sec=r`51NLwsLk3?bR`M_%UdR^Qjz~Zn)h`jI@%# zO4@1;EzAjj4H%K8+ejU&`)qBv8<>1E$F&^Mx7~qAjGB1Nn7Z`0Jr7+mL~f`fj#<>f zgE)DbdUPE+Ye*4@5HcqZRrcZhW9$$jhj+$!IOw;x~&s;g3`vrrtm+$82i{ukZB%&UCstIsko&nIz4m^~M}4SAxw?_xu) zxRXBm`iK9vadRsgD+$~l`{<%O(F5DSVan8o%-8cKp~5lwmc+pFWIic|LwCR-A+c)A z8RbUf8r4@Si?1zeUYNRUBN&hN(7GU)N-@=W=;LS}YX#`pSt ze~0!u=2E3{;fvP$UpiQMPM2%qq#iK^(`>)lzj^wG&C=!mS_;o0{e+6R5uJ1z4LVbY zZU)0^-mSwrl=YZ+uHw_&0XFVh>W_oTL|lX+khaUjZ?;qCzvNHwE5?Jw_%n60&KKJt zv2=413}za%fm`5S_fHlb-3t1>nm=Ycb$)3xkjKPr%7)Ij?#E-A4h0K*_BOaP{ zbv^7wNSnR1i%MXIZ}u6UB*u{`FWMJ|@fGXX9*;ew@$hQ)rOMme8^dh~5Ui?L`kRrR zN#KCGJ*4MQ9uHl<$=k3eBe4~dR~O?+xHUK*zbvYg4r0`KWZ0o3ww-uW5lA2pC>X+@dA&P1)LGSOggw4 z{lN@YDXf`PG5v4iKB9-~K8>oC(eou3mp-gt7%NU9d0;z#BbRpN?iAZy3MeS-%Bs6v z#wQKGl%ab>;JB zOa72gd8|eQQGVt3SLOIB=1&(=9y+`!ay>ptpOB+OTa8AtPQy<&b#8Yi_u^cZq4CJ? zzhcDMlsVJC>&|v}5xzxghUtqqi6bqaJr}-PEGP;2oXWIVzD)VdrYn|DGiK~DwpS4z zP{nnaet^mo4xJD?+rY!r?JA#&q?o4Lc^3CtMj-VF;P;>omv(L=nqV7H%*- z45r%$-c-_(K7n;M9wvjCIIc4N&>QY}NP|TlYn-NifxZ+&$fojC<2xVw={{wQMXBYqg diff --git a/tests/mesh_converter/meshes/3d/test_cube_1.inp b/tests/mesh_converter/meshes/3d/test_cube_1.inp deleted file mode 100644 index 6e3a898f13..0000000000 --- a/tests/mesh_converter/meshes/3d/test_cube_1.inp +++ /dev/null @@ -1,25 +0,0 @@ -*HEADING -cubit(t/Geometry/Mesh_conversion/mesh/Test_cube/test_cube_1.inp): 11/06/2008: 09 -*NODE - 1, -1.000000e+00, -1.000000e+00, 1.000000e+00 - 2, -1.000000e+00, -1.000000e+00, -1.000000e+00 - 3, -1.000000e+00, 1.000000e+00, -1.000000e+00 - 4, -1.000000e+00, 1.000000e+00, 1.000000e+00 - 5, 1.000000e+00, -1.000000e+00, 1.000000e+00 - 6, 1.000000e+00, -1.000000e+00, -1.000000e+00 - 7, 1.000000e+00, 1.000000e+00, -1.000000e+00 - 8, 1.000000e+00, 1.000000e+00, 1.000000e+00 -*ELEMENT, TYPE=C3D8R, ELSET=EB1 - 1, 1, 2, 3, 4, 5, 6, 7, 8 -*SURFACE, NAME=SS1 - 1, S6 -*SURFACE, NAME=SS2 - 1, S4 -*SURFACE, NAME=SS3 - 1, S3 -*SURFACE, NAME=SS4 - 1, S1 -*SURFACE, NAME=SS5 - 1, S5 -*SURFACE, NAME=SS6 - 1, S2 diff --git a/tests/mesh_converter/meshes/3d/test_cube_1.ucd b/tests/mesh_converter/meshes/3d/test_cube_1.ucd deleted file mode 100644 index 5f81d2d6b6..0000000000 --- a/tests/mesh_converter/meshes/3d/test_cube_1.ucd +++ /dev/null @@ -1,19 +0,0 @@ -# FEM Mesh Converter -# Mesh type: AVS UCD - -8 7 0 0 0 -1 -1.00000000e+00 -1.00000000e+00 1.00000000e+00 -2 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -3 -1.00000000e+00 1.00000000e+00 -1.00000000e+00 -4 -1.00000000e+00 1.00000000e+00 1.00000000e+00 -5 1.00000000e+00 -1.00000000e+00 1.00000000e+00 -6 1.00000000e+00 -1.00000000e+00 -1.00000000e+00 -7 1.00000000e+00 1.00000000e+00 -1.00000000e+00 -8 1.00000000e+00 1.00000000e+00 1.00000000e+00 -1 1 hex 1 2 3 4 5 6 7 8 -1 1 quad 1 5 8 4 -2 2 quad 2 3 7 6 -3 3 quad 1 2 6 5 -4 4 quad 1 4 3 2 -5 5 quad 3 4 8 7 -6 6 quad 5 8 7 6 diff --git a/tests/mesh_converter/meshes/3d/test_cube_pave_1.cub b/tests/mesh_converter/meshes/3d/test_cube_pave_1.cub deleted file mode 100644 index 3222831cf239517c2af9ae329a7599b76e333422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29571 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 LjhMFS#kBtqXWo8q diff --git a/tests/mesh_converter/meshes/3d/test_cube_pave_1.inp b/tests/mesh_converter/meshes/3d/test_cube_pave_1.inp deleted file mode 100644 index 336d4424e0..0000000000 --- a/tests/mesh_converter/meshes/3d/test_cube_pave_1.inp +++ /dev/null @@ -1,97 +0,0 @@ -*HEADING -cubit(metry/Mesh_conversion/mesh/Test_cube/test_cube_pave_1.inp): 11/06/2008: 10 -*NODE - 1, 1.000000e+00, 1.000000e+00, 0.000000e+00 - 2, 5.000000e-01, 1.000000e+00, 0.000000e+00 - 3, 5.583559e-01, 3.929331e-01, 0.000000e+00 - 4, 1.000000e+00, 0.000000e+00, 0.000000e+00 - 5, 1.000000e+00, 1.000000e+00, 1.000000e+00 - 6, 5.000000e-01, 1.000000e+00, 1.000000e+00 - 7, 5.583559e-01, 3.929331e-01, 1.000000e+00 - 8, 1.000000e+00, 0.000000e+00, 1.000000e+00 - 9, 0.000000e+00, 1.000000e+00, 0.000000e+00 - 10, 1.562409e-01, 1.799288e-01, 0.000000e+00 - 11, 0.000000e+00, 1.000000e+00, 1.000000e+00 - 12, 1.562409e-01, 1.799288e-01, 1.000000e+00 - 13, -5.000000e-01, 1.000000e+00, 0.000000e+00 - 14, -3.897075e-01, 6.804246e-02, 0.000000e+00 - 15, -5.000000e-01, 1.000000e+00, 1.000000e+00 - 16, -3.897075e-01, 6.804246e-02, 1.000000e+00 - 17, -1.000000e+00, 1.000000e+00, 0.000000e+00 - 18, -1.000000e+00, 0.000000e+00, 0.000000e+00 - 19, -1.000000e+00, 1.000000e+00, 1.000000e+00 - 20, -1.000000e+00, 0.000000e+00, 1.000000e+00 - 21, -1.000000e+00, -1.000000e+00, 0.000000e+00 - 22, 0.000000e+00, -1.000000e+00, 0.000000e+00 - 23, -1.000000e+00, -1.000000e+00, 1.000000e+00 - 24, 0.000000e+00, -1.000000e+00, 1.000000e+00 - 25, 1.000000e+00, -1.000000e+00, 0.000000e+00 - 26, 1.000000e+00, -1.000000e+00, 1.000000e+00 - 27, 1.000000e+00, 1.000000e+00, -1.000000e+00 - 28, 5.000000e-01, 1.000000e+00, -1.000000e+00 - 29, 5.583559e-01, 3.929331e-01, -1.000000e+00 - 30, 1.000000e+00, 0.000000e+00, -1.000000e+00 - 31, 0.000000e+00, 1.000000e+00, -1.000000e+00 - 32, 1.562409e-01, 1.799288e-01, -1.000000e+00 - 33, -5.000000e-01, 1.000000e+00, -1.000000e+00 - 34, -3.897075e-01, 6.804246e-02, -1.000000e+00 - 35, -1.000000e+00, 1.000000e+00, -1.000000e+00 - 36, -1.000000e+00, 0.000000e+00, -1.000000e+00 - 37, -1.000000e+00, -1.000000e+00, -1.000000e+00 - 38, 0.000000e+00, -1.000000e+00, -1.000000e+00 - 39, 1.000000e+00, -1.000000e+00, -1.000000e+00 -*ELEMENT, TYPE=C3D8R, ELSET=EB1 - 1, 1, 2, 3, 4, 5, 6, 7, 8 - 2, 2, 9, 10, 3, 6, 11, 12, 7 - 3, 9, 13, 14, 10, 11, 15, 16, 12 - 4, 13, 17, 18, 14, 15, 19, 20, 16 - 5, 21, 22, 14, 18, 23, 24, 16, 20 - 6, 10, 14, 22, 25, 12, 16, 24, 26 - 7, 25, 4, 3, 10, 26, 8, 7, 12 - 8, 27, 28, 29, 30, 1, 2, 3, 4 - 9, 28, 31, 32, 29, 2, 9, 10, 3 - 10, 31, 33, 34, 32, 9, 13, 14, 10 - 11, 33, 35, 36, 34, 13, 17, 18, 14 - 12, 37, 38, 34, 36, 21, 22, 14, 18 - 13, 32, 34, 38, 39, 10, 14, 22, 25 - 14, 39, 30, 29, 32, 25, 4, 3, 10 -*SURFACE, NAME=SS1 - 1, S2 - 2, S2 - 3, S2 - 4, S2 - 5, S2 - 6, S2 - 7, S2 -*SURFACE, NAME=SS2 - 8, S1 - 9, S1 - 10, S1 - 11, S1 - 12, S1 - 13, S1 - 14, S1 -*SURFACE, NAME=SS3 - 5, S3 - 6, S5 - 12, S3 - 13, S5 -*SURFACE, NAME=SS4 - 4, S4 - 5, S6 - 11, S4 - 12, S6 -*SURFACE, NAME=SS5 - 1, S3 - 2, S3 - 3, S3 - 4, S3 - 8, S3 - 9, S3 - 10, S3 - 11, S3 -*SURFACE, NAME=SS6 - 1, S6 - 7, S3 - 8, S6 - 14, S3 diff --git a/tests/mesh_converter/meshes/3d/test_cube_two_materials.cub b/tests/mesh_converter/meshes/3d/test_cube_two_materials.cub deleted file mode 100644 index abfe09593e61d059359a634292dd4792d0c8adb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27699 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 diff --git a/tests/mesh_converter/meshes/3d/test_cube_two_materials.inp b/tests/mesh_converter/meshes/3d/test_cube_two_materials.inp deleted file mode 100644 index 1e329c1a61..0000000000 --- a/tests/mesh_converter/meshes/3d/test_cube_two_materials.inp +++ /dev/null @@ -1,67 +0,0 @@ -*HEADING -cubit(rsion/Mesh_conversion/mesh/3d/test_cube_two_materials.inp): 01/20/2009: 07 -*NODE - 1, -1.000000e+00, -1.000000e+00, 1.000000e+00 - 2, -1.000000e+00, -1.000000e+00, 0.000000e+00 - 3, -1.000000e+00, 0.000000e+00, 0.000000e+00 - 4, -1.000000e+00, 0.000000e+00, 1.000000e+00 - 5, 0.000000e+00, -1.000000e+00, 1.000000e+00 - 6, 0.000000e+00, -1.000000e+00, 0.000000e+00 - 7, 0.000000e+00, 0.000000e+00, 0.000000e+00 - 8, 0.000000e+00, 0.000000e+00, 1.000000e+00 - 9, -1.000000e+00, -1.000000e+00, -1.000000e+00 - 10, -1.000000e+00, 0.000000e+00, -1.000000e+00 - 11, 0.000000e+00, -1.000000e+00, -1.000000e+00 - 12, 0.000000e+00, 0.000000e+00, -1.000000e+00 - 13, -1.000000e+00, 1.000000e+00, 0.000000e+00 - 14, -1.000000e+00, 1.000000e+00, 1.000000e+00 - 15, 0.000000e+00, 1.000000e+00, 0.000000e+00 - 16, 0.000000e+00, 1.000000e+00, 1.000000e+00 - 17, -1.000000e+00, 1.000000e+00, -1.000000e+00 - 18, 0.000000e+00, 1.000000e+00, -1.000000e+00 - 19, 1.000000e+00, -1.000000e+00, 1.000000e+00 - 20, 1.000000e+00, -1.000000e+00, 0.000000e+00 - 21, 1.000000e+00, 0.000000e+00, 0.000000e+00 - 22, 1.000000e+00, 0.000000e+00, 1.000000e+00 - 23, 1.000000e+00, -1.000000e+00, -1.000000e+00 - 24, 1.000000e+00, 0.000000e+00, -1.000000e+00 - 25, 1.000000e+00, 1.000000e+00, 0.000000e+00 - 26, 1.000000e+00, 1.000000e+00, 1.000000e+00 - 27, 1.000000e+00, 1.000000e+00, -1.000000e+00 -*ELEMENT, TYPE=C3D8R, ELSET=EB1 - 1, 1, 2, 3, 4, 5, 6, 7, 8 - 2, 2, 9, 10, 3, 6, 11, 12, 7 - 3, 4, 3, 13, 14, 8, 7, 15, 16 - 4, 3, 10, 17, 13, 7, 12, 18, 15 - 5, 5, 6, 7, 8, 19, 20, 21, 22 -*ELEMENT, TYPE=C3D8R, ELSET=EB2 - 6, 6, 11, 12, 7, 20, 23, 24, 21 - 7, 8, 7, 15, 16, 22, 21, 25, 26 - 8, 7, 12, 18, 15, 21, 24, 27, 25 -*SURFACE, NAME=SS1 - 1, S6 - 3, S6 - 5, S6 - 7, S6 - 3, S5 - 4, S5 - 7, S5 - 8, S5 - 1, S1 - 2, S1 - 3, S1 - 4, S1 - 1, S3 - 2, S3 - 5, S3 - 6, S3 -*SURFACE, NAME=SS2 - 2, S4 - 4, S4 - 8, S4 - 8, S2 -*SURFACE, NAME=SS3 - 5, S2 - 6, S4 - 6, S2 - 7, S2 diff --git a/tests/mesh_converter/meshes/README.txt b/tests/mesh_converter/meshes/README.txt deleted file mode 100644 index 9bc70cb14b..0000000000 --- a/tests/mesh_converter/meshes/README.txt +++ /dev/null @@ -1,66 +0,0 @@ -==================================================== -MESH CONVERSION TOOL -v. 1.2 - -Use: Convert an ABAQUS .inp file to an AVS UCD file. - -Author: Jean-Paul Pelteret - jppelteret.uct@gmail.com - modified by: Timo Heister, heister@clemson.edu -=================================================== - - -This tool is intended to support converting ABAQUS .inp files into a -format that deal.II can read. To use this tool, you need to configure -deal.II using the "-DDEAL_II_COMPONENT_MESH_CONVERTER=ON" argument -when calling 'cmake'. The resulting executable will then be placed in -the installation directory. - - - -Cubit features captured by ABAQUS .inp files: ---------------------------------------------- -1. Multiple material-id's can be defined in the mesh. This is done by specifying blocksets in the pre-processor. -2. Arbitrary surface boundaries can be defined in the mesh. This is done by specifying sidesets in the pre-processor. In particular, boundaries are not confined to just surfaces (in 3d) - individual element faces can be added to the sideset as well. This is useful when a boundary condition is to be applied on a complex shape boundary that is difficult to define using "surfaces" alone. Similar can be done in 2d. - -How to use: ------------ -1. It is necessary to save the mesh as an Abaqus input file .inp. In Cubit, this is done as follows: -1.1. Go to "Analysis setup mode" by clicking on the disc icon in the toolbar on the right. -1.2. Select "Export Mesh" under "Operation" by clicking on the necessary icon in the toolbar on the right. -1.3. Select an output file. I have found that in Cubit version 11.0 and 12.0 that it is necessary to click on the browse button and type it in the dialogue that pops up. -1.4. Select the dimension to output in. -1.5. Tick the overwrite box. -1.6. If using Cubit v12.0 onwards, uncheck the box "Export using Cubit ID's". The conversion process will encounter errors if box if left checked. -1.7. Click apply. - -2. Converting the mesh -IMPORTANT NOTE: From v12.0 onwards, the format of the Abaqus file that Cubit outputted changed. This has been accounted for but an requires a flag to be passed to the conversion program. - I describe outputs from before v12.0 as "Abaqus OLD" and v12.0 an on (up to v12.1 at this point) as "Abaqus NEW". -2.1. Compile the program using 'make' or another suitable tool -2.2. Run the program with the following command line arguments: - './convert_mesh /path/to/input_file.inp /path/to/output_file.ucd' - - The first input argument is the spatial dimension of the input file, the second is the path to the read-in Abaqus .inp file, and the third is the name of the file to which you wish to write the output AVS .ucd file to. - An example of the correct program usage is: -e.g. './convert_mesh 3 mesh/3d/test_in.inp mesh/3d/test_out.ucd' - - -Notes: ------- -1. A few example / test meshes are provided in the directory "mesh". The .inp files that have been generated are all of the Abaqus OLD format except for one - CC.cub has been converted into both the "new" and "old" formats and both subsequently converted into deal.II readable meshes. - -Copyright: ----------- -This program is distributed under the GNU GPL v2.0 copyright. Details can be found at: -http://www.gnu.org/licenses/gpl-2.0.html - -This copyright is extended to the example mesh files distributed with this program, namely -./mesh/2d/2d_test.* -./mesh/2d/quad.* -./mesh/3d/CC.* -./mesh/3d/CC_cubit_new.* -./mesh/3d/CC_cubit_old.* -./mesh/3d/test_cube_1.* -./mesh/3d/test_cube_pave_1.* -./mesh/3d/test_cube_two_materials.* diff --git a/tests/run_testsuite.cmake b/tests/run_testsuite.cmake index a4200bc542..175cf52e8c 100644 --- a/tests/run_testsuite.cmake +++ b/tests/run_testsuite.cmake @@ -268,7 +268,7 @@ ENDIF() GET_CMAKE_PROPERTY(_variables VARIABLES) FOREACH(_var ${_variables}) IF( _var MATCHES "^(TEST|DEAL_II|ALLOW|WITH|FORCE|COMPONENT)_" OR - _var MATCHES "^(DOCUMENTATION|EXAMPLES|MESH_CONVERTER|PARAMETER_GUI)" OR + _var MATCHES "^(DOCUMENTATION|EXAMPLES|PARAMETER_GUI)" OR _var MATCHES "^(ARPACK|BOOST|OPENCASCADE|MUPARSER|HDF5|METIS|MPI)_" OR _var MATCHES "^(NETCDF|P4EST|PETSC|SLEPC|THREADS|TBB|TRILINOS)_" OR _var MATCHES "^(UMFPACK|ZLIB|LAPACK|MUPARSER)_" OR -- 2.39.5