Add ParaView-5.4.1 cmake-3.3.2 and qt-5.8.0 to ThirdParty and rework PVReaders
This commit is contained in:
parent
ec83275923
commit
b5e9533f2b
108 changed files with 1582 additions and 12027 deletions
23
ThirdParty/AllClean.stage1
vendored
23
ThirdParty/AllClean.stage1
vendored
|
@ -51,21 +51,25 @@ echo ========================================
|
|||
echo
|
||||
|
||||
# gmp
|
||||
uninstallPackage gmp-4.3.2 $1
|
||||
uninstallPackage gmp-5.0.1 $1
|
||||
uninstallPackage gmp-5.0.5 $1
|
||||
uninstallPackage gmp-5.1.2 $1
|
||||
|
||||
# mpfr
|
||||
uninstallPackage mpfr-2.4.2 $1
|
||||
uninstallPackage mpfr-3.0.0 $1
|
||||
uninstallPackage mpfr-3.0.1 $1
|
||||
uninstallPackage mpfr-3.1.0 $1
|
||||
uninstallPackage mpfr-3.1.2 $1
|
||||
|
||||
# mpc
|
||||
uninstallPackage mpc-0.8.2 $1
|
||||
uninstallPackage mpc-0.9 $1
|
||||
uninstallPackage mpc-1.0.1 $1
|
||||
|
||||
# gcc
|
||||
uninstallPackage gcc-4.4.5 $1
|
||||
uninstallPackage gcc-4.5.1 $1
|
||||
uninstallPackage gcc-4.6.3 $1
|
||||
uninstallPackage gcc-4.6.4 $1
|
||||
uninstallPackage gcc-4.7.4 $1
|
||||
uninstallPackage gcc-4.8.4 $1
|
||||
uninstallPackage gcc-4.9.2 $1
|
||||
|
||||
|
@ -79,14 +83,21 @@ uninstallPackage Python-2.7 $1
|
|||
uninstallPackage m4-1.4.16 $1
|
||||
|
||||
# bison
|
||||
uninstallPackage bison-2.7 $1
|
||||
uninstallPackage bison-2.4.3 $1
|
||||
uninstallPackage bison-2.7 $1
|
||||
|
||||
# flex
|
||||
uninstallPackage flex-2.5.35 $1
|
||||
|
||||
# cmake
|
||||
uninstallPackage cmake-2.8.3 $1
|
||||
uninstallPackage cmake-2.8.5 $1
|
||||
uninstallPackage cmake-2.8.6 $1
|
||||
uninstallPackage cmake-2.8.8 $1
|
||||
uninstallPackage cmake-2.8.11 $1
|
||||
uninstallPackage cmake-2.8.12 $1
|
||||
uninstallPackage cmake-3.2.2 $1
|
||||
uninstallPackage cmake-3.2.2 $1
|
||||
uninstallPackage cmake-3.3.2 $1
|
||||
|
||||
|
||||
echo
|
||||
|
|
8
ThirdParty/AllClean.stage4
vendored
8
ThirdParty/AllClean.stage4
vendored
|
@ -51,13 +51,19 @@ echo ========================================
|
|||
echo
|
||||
|
||||
# QT
|
||||
uninstallPackage qt-everywhere-opensource-src-4.8.6 $1
|
||||
uninstallPackage qt-everywhere-opensource-src-4.7.0 $1
|
||||
uninstallPackage qt-everywhere-opensource-src-4.7.4 $1
|
||||
uninstallPackage qt-everywhere-opensource-src-4.8.5 $1
|
||||
uninstallPackage qt-everywhere-opensource-src-4.8.6 $1
|
||||
uninstallPackage qt-everywhere-opensource-src-5.8.0 $1
|
||||
|
||||
# ParaView
|
||||
uninstallPackage ParaView-4.0.1 $1
|
||||
uninstallPackage ParaView-4.1.0 $1
|
||||
uninstallPackage ParaView-4.2.0 $1
|
||||
uninstallPackage ParaView-4.3.1 $1
|
||||
uninstallPackage ParaView-4.4.0 $1
|
||||
uninstallPackage ParaView-5.4.1 $1
|
||||
|
||||
# ParaView-Server
|
||||
uninstallPackage llvm-3.6.0
|
||||
|
|
7
ThirdParty/AllMake.stage1
vendored
7
ThirdParty/AllMake.stage1
vendored
|
@ -175,6 +175,13 @@ echo
|
|||
( rpm_make -p cmake-3.2.2 -s cmake-3.2.2.spec -u http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz )
|
||||
}
|
||||
|
||||
# cmake 3.3.2
|
||||
#
|
||||
[ ! -z "$WM_THIRD_PARTY_USE_CMAKE_332" ] && {
|
||||
echo "Building cmake 3.3.2"
|
||||
( rpm_make -p cmake-3.3.2 -s cmake-3.3.2.spec -u http://www.cmake.org/files/v3.3/cmake-3.3.2.tar.gz )
|
||||
}
|
||||
|
||||
echo ========================================
|
||||
echo Done ThirdParty AllMake: Stage1
|
||||
echo ========================================
|
||||
|
|
14
ThirdParty/AllMake.stage4
vendored
14
ThirdParty/AllMake.stage4
vendored
|
@ -65,6 +65,12 @@ then
|
|||
echo "Building Qt 4.8.6"
|
||||
( rpm_make -p qt-everywhere-opensource-src-4.8.6 -s qt-everywhere-opensource-src-4.8.6.spec -u http://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz )
|
||||
}
|
||||
# Qt 5.8.0
|
||||
#
|
||||
[ ! -z "$WM_THIRD_PARTY_USE_QT_580" ] && {
|
||||
echo "Building Qt 5.8.0"
|
||||
( rpm_make -p qt-everywhere-opensource-src-5.8.0 -s qt-everywhere-opensource-src-5.8.0.spec -u http://download.qt.io/archive/qt/5.8/5.8.0/single/qt-everywhere-opensource-src-5.8.0.tar.gz )
|
||||
}
|
||||
else
|
||||
echo "Using system installed QT"
|
||||
echo ""
|
||||
|
@ -110,6 +116,14 @@ then
|
|||
-f --define='_qmakePath $QT_BIN_DIR/qmake'
|
||||
)
|
||||
}
|
||||
# ParaView 5.4.1
|
||||
#
|
||||
[ ! -z "$WM_THIRD_PARTY_USE_PARAVIEW_541" ] && {
|
||||
echo "Building ParaView 5.4.1"
|
||||
( rpm_make -p ParaView-5.4.1 -s ParaView-5.4.1.spec -u http://www.paraview.org/files/v5.4/ParaView-v5.4.1.tar.gz \
|
||||
-f --define='_qmakePath $QT_BIN_DIR/qmake'
|
||||
)
|
||||
}
|
||||
else
|
||||
echo "WARNING: "
|
||||
echo "WARNING: Skipping the installation of ParaView-4.x.x."
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -ruN ParaView-4.3.1_orig/Applications/ParaView-4.3.1_extra_install_Darwin.cmake ParaView-4.3.1/Applications/ParaView-4.3.1_extra_install_Darwin.cmake
|
||||
--- ParaView-4.3.1_orig/Applications/ParaView-4.3.1_extra_install_Darwin.cmake 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ ParaView-4.3.1/Applications/ParaView-4.3.1_extra_install_Darwin.cmake 2013-10-02 19:00:00.000000000 -0400
|
||||
diff -ruN ParaView-4.4.0_orig/Applications/ParaView-4.4.0_extra_install_Darwin.cmake ParaView-4.4.0/Applications/ParaView-4.4.0_extra_install_Darwin.cmake
|
||||
--- ParaView-4.4.0_orig/Applications/ParaView-4.4.0_extra_install_Darwin.cmake 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ ParaView-4.4.0/Applications/ParaView-4.4.0_extra_install_Darwin.cmake 2013-10-02 19:00:00.000000000 -0400
|
||||
@@ -0,0 +1,8 @@
|
||||
+#
|
||||
+# Additional install rules for Mac OS X platforms
|
||||
|
|
12
ThirdParty/rpmBuild/SOURCES/ParaView-5.4.1.patch_darwin
vendored
Normal file
12
ThirdParty/rpmBuild/SOURCES/ParaView-5.4.1.patch_darwin
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff -ruN ParaView-5.4.1_orig/Applications/ParaView-5.4.1_extra_install_Darwin.cmake ParaView-5.4.1/Applications/ParaView-5.4.1_extra_install_Darwin.cmake
|
||||
--- ParaView-5.4.1_orig/Applications/ParaView-5.4.1_extra_install_Darwin.cmake 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ ParaView-5.4.1/Applications/ParaView-5.4.1_extra_install_Darwin.cmake 2013-10-02 19:00:00.000000000 -0400
|
||||
@@ -0,0 +1,8 @@
|
||||
+#
|
||||
+# Additional install rules for Mac OS X platforms
|
||||
+#
|
||||
+INSTALL (DIRECTORY buildObj/bin/paraview.app
|
||||
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
|
||||
+ USE_SOURCE_PERMISSIONS
|
||||
+ COMPONENT Runtime)
|
||||
+
|
297
ThirdParty/rpmBuild/SPECS/ParaView-5.4.1.spec
vendored
Normal file
297
ThirdParty/rpmBuild/SPECS/ParaView-5.4.1.spec
vendored
Normal file
|
@ -0,0 +1,297 @@
|
|||
#------------------------------------------------------------------------------
|
||||
# ========= |
|
||||
# \\ / F ield | foam-extend: Open Source CFD
|
||||
# \\ / O peration |
|
||||
# \\ / A nd | For copyright notice see file Copyright
|
||||
# \\/ M anipulation |
|
||||
#------------------------------------------------------------------------------
|
||||
# License
|
||||
# This file is part of foam-extend.
|
||||
#
|
||||
# foam-extend is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Script
|
||||
# RPM spec file for ParaView-5.4.1
|
||||
#
|
||||
# Description
|
||||
# RPM spec file for creating a relocatable RPM
|
||||
#
|
||||
# Authors:
|
||||
# Martin Beaudoin, Hydro-Quebec, (2010)
|
||||
# Andreas Feymark, Chalmers University of Technology, (2013)
|
||||
# Pascal Beckstein, HZDR, (2018)
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# We grab the value of WM_THIRD_PARTY and WM_OPTIONS from the environment variable
|
||||
%{expand:%%define _WM_THIRD_PARTY_DIR %(echo $WM_THIRD_PARTY_DIR)}
|
||||
%{expand:%%define _WM_OPTIONS %(echo $WM_OPTIONS)}
|
||||
|
||||
# Disable the generation of debuginfo packages
|
||||
%define debug_package %{nil}
|
||||
|
||||
# Turning off the Fascist build policy
|
||||
# Useful for debugging the install section
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
|
||||
# The topdir needs to point to the $WM_THIRD_PARTY/rpmbuild directory
|
||||
%define _topdir %{_WM_THIRD_PARTY_DIR}/rpmBuild
|
||||
%define _tmppath %{_topdir}/tmp
|
||||
|
||||
# Will install the package directly $WM_THIRD_PARTY_DIR
|
||||
# Some comments about package relocation:
|
||||
# By using this prefix for the Prefix: parameter in this file, you will make this
|
||||
# package relocatable.
|
||||
#
|
||||
# This is fine, as long as your software is itself relocatable.
|
||||
#
|
||||
# Simply take note that libraries built with libtool are not relocatable because the
|
||||
# prefix we specify will be hard-coded in the library .la files.
|
||||
# Ref: http://sourceware.org/autobook/autobook/autobook_80.html
|
||||
#
|
||||
# In that case, if you ever change the value of the $WM_THIRD_PARTY_DIR, you will
|
||||
# not be able to reutilize this RPM, even though it is relocatable. You will need to
|
||||
# regenerate the RPM.
|
||||
#
|
||||
%define _prefix %{_WM_THIRD_PARTY_DIR}
|
||||
|
||||
%define name ParaView
|
||||
%define release %{_WM_OPTIONS}
|
||||
%define version 5.4.1
|
||||
|
||||
%define buildroot %{_topdir}/BUILD/%{name}-%{version}-root
|
||||
|
||||
BuildRoot: %{buildroot}
|
||||
Summary: ParaView
|
||||
License: Unkown
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
URL: http://www.paraview.org/files/v5.4/
|
||||
Source: %url/%{name}-v%{version}.tar.gz
|
||||
Prefix: %{_prefix}
|
||||
Group: Development/Tools
|
||||
Patch0: ParaView-5.4.1.patch_darwin
|
||||
|
||||
%define _installPrefix %{_prefix}/packages/%{name}-%{version}/platforms/%{_WM_OPTIONS}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#
|
||||
# Here, we define default compiling options for cmake
|
||||
#
|
||||
# One can override the option on the commande line : --define='MACRO EXPR'
|
||||
#
|
||||
%{!?_withVerbose: %define _withVerbose false}
|
||||
%{!?_withMesa: %define _withMesa false}
|
||||
%{!?_withMPI: %define _withMPI false}
|
||||
%{!?_withPython: %define _withPython false}
|
||||
%{!?_withQt: %define _withQt true}
|
||||
%{!?_qmakePath: %define _qmakePath Undefined}
|
||||
%{!?_mesaIncludePath: %define _mesaIncludePath Undefined}
|
||||
%{!?_mesaLibPath: %define _mesaLibPath Undefined}
|
||||
%{!?_pythonLibPath: %define _pythonLibPath Undefined}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
%description
|
||||
%{summary}
|
||||
|
||||
%prep
|
||||
%setup -q -n %{name}-v%{version}
|
||||
|
||||
%ifos darwin
|
||||
%patch0 -p1
|
||||
%endif
|
||||
|
||||
%build
|
||||
#
|
||||
# set CMake cache variables
|
||||
#
|
||||
addCMakeVariable()
|
||||
{
|
||||
while [ -n "$1" ]
|
||||
do
|
||||
CMAKE_VARIABLES="$CMAKE_VARIABLES -D$1"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
# export WM settings in a form that GNU configure recognizes
|
||||
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
||||
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
||||
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
|
||||
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
|
||||
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
|
||||
|
||||
set +x
|
||||
echo ""
|
||||
echo "Compilation options:"
|
||||
echo " _withVerbose : %{_withVerbose}"
|
||||
echo " _withMesa : %{_withMesa}"
|
||||
echo " _withMPI : %{_withMPI}"
|
||||
echo " _withPython : %{_withPython}"
|
||||
echo " _withQt : %{_withQt}"
|
||||
echo " _qmakePath : %{_qmakePath}"
|
||||
echo " _mesaIncludePath : %{_mesaIncludePath}"
|
||||
echo " _mesaLibPath : %{_mesaLibPath}"
|
||||
echo " _pythonLibPath : %{_pythonLibPath}"
|
||||
echo ""
|
||||
set -x
|
||||
|
||||
# start with these general settings
|
||||
addCMakeVariable BUILD_SHARED_LIBS:BOOL=ON
|
||||
addCMakeVariable CMAKE_BUILD_TYPE:STRING=Release
|
||||
addCMakeVariable BUILD_TESTING:BOOL=OFF
|
||||
|
||||
# We build with Python. This is ust too useful
|
||||
addCMakeVariable PARAVIEW_ENABLE_PYTHON:BOOL=ON
|
||||
|
||||
# include development files in "make install"
|
||||
addCMakeVariable PARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=ON
|
||||
|
||||
%ifos darwin
|
||||
# Additional installation rules for Mac OSX
|
||||
addCMakeVariable PARAVIEW_EXTRA_INSTALL_RULES_FILE:FILEPATH=%{_topdir}/BUILD/%{name}-v%{version}-source/Applications/ParaView-4.4.0_extra_install_Darwin.cmake
|
||||
|
||||
# We activate the new Unix-style installation for Mac OS X
|
||||
addCMakeVariable PARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON
|
||||
|
||||
# Recent version of Mac OSX (Yosemite) cannot compile ParaView with the gcc compiler
|
||||
# Using clang instead
|
||||
CC=clang
|
||||
CXX=clang++
|
||||
%endif
|
||||
|
||||
# Add the value of _qmakePath for QT_QMAKE_EXECUTABLE
|
||||
addCMakeVariable QT_QMAKE_EXECUTABLE:FILEPATH=%{_qmakePath}
|
||||
|
||||
echo "CMAKE_VARIABLES: $CMAKE_VARIABLES"
|
||||
|
||||
mkdir -p ./buildObj
|
||||
cd ./buildObj
|
||||
|
||||
cmake \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=%{_installPrefix} \
|
||||
$CMAKE_VARIABLES \
|
||||
..
|
||||
|
||||
[ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1
|
||||
make -j $WM_NCOMPPROCS
|
||||
|
||||
%install
|
||||
# On OpenSUSE, rpmbuild, will choke when detecting unreferenced symlinks
|
||||
# created during installation.
|
||||
# Qt version 4.8.0 will generate some unreferenced symlinks when
|
||||
# ParaView is compiled and installed. By enabling the following
|
||||
# environment variable, the command brp-symlink will still complain
|
||||
# about missing link targets, but it won't stop rpmbuild from generating
|
||||
# the final rpm.
|
||||
# For all other Unix distros, this is a no-op.
|
||||
export NO_BRP_STALE_LINK_ERROR=yes
|
||||
|
||||
cd buildObj
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
|
||||
%ifos darwin
|
||||
# Cleaning up some strange install side effect from option
|
||||
# PARAVIEW_DO_UNIX_STYLE_INSTALLS
|
||||
# Need to revisit this section eventually.
|
||||
if [ -d "$RPM_BUILD_ROOT/$RPM_BUILD_ROOT" ]; then
|
||||
mv $RPM_BUILD_ROOT/$RPM_BUILD_ROOT/%{_installPrefix}/bin/* $RPM_BUILD_ROOT/%{_installPrefix}/bin
|
||||
fi
|
||||
%endif
|
||||
|
||||
# Creation of foam-extend specific .csh and .sh files"
|
||||
|
||||
echo ""
|
||||
echo "Generating foam-extend specific .csh and .sh files for the package %{name}-%{version}"
|
||||
echo ""
|
||||
#
|
||||
# Generate package specific .sh file for foam-extend
|
||||
#
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_installPrefix}/etc
|
||||
cat << DOT_SH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.sh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
export PARAVIEW_DIR=\$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
export PARAVIEW_BIN_DIR=\$PARAVIEW_DIR/bin
|
||||
export PARAVIEW_LIB_DIR=\$PARAVIEW_DIR/lib
|
||||
export PARAVIEW_INCLUDE_DIR=\$PARAVIEW_DIR/include/paraview-5.4
|
||||
|
||||
export PARAVIEW_VERSION=%{version}
|
||||
|
||||
# NB: It is important to set the PV_PLUGIN_PATH location to a directory containing only the ParaView plugins.
|
||||
# Otherwise, paraview will try to automatically autoload each and every dynamic library it can find in the
|
||||
# specified directory to see if a given library is a paraview plugin.
|
||||
# In the case of \$FOAM_LIBBIN, with over 80 libraries, this is a total waste of time that will slow down the
|
||||
# startup of paraview or even make paraview crash on startup.
|
||||
export PV_PLUGIN_PATH=\$FOAM_LIBBIN/paraview-5.4_plugins
|
||||
|
||||
[ -d \$PARAVIEW_LIB_DIR/paraview-5.4 ] && _foamAddLib \$PARAVIEW_LIB_DIR/paraview-5.4
|
||||
|
||||
# Enable access to the package applications if present
|
||||
[ -d \$PARAVIEW_BIN_DIR ] && _foamAddPath \$PARAVIEW_BIN_DIR
|
||||
|
||||
# Additional binary path if running on Mac OS X
|
||||
[ -d \$PARAVIEW_BIN_DIR/paraview.app/Contents/MacOS ] && _foamAddPath \$PARAVIEW_BIN_DIR/paraview.app/Contents/MacOS
|
||||
|
||||
DOT_SH_EOF
|
||||
|
||||
#
|
||||
# Generate package specific .csh file for foam-extend
|
||||
#
|
||||
cat << DOT_CSH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.csh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
setenv PARAVIEW_DIR \$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
setenv PARAVIEW_BIN_DIR \$PARAVIEW_DIR/bin
|
||||
setenv PARAVIEW_LIB_DIR \$PARAVIEW_DIR/lib
|
||||
setenv PARAVIEW_INCLUDE_DIR \$PARAVIEW_DIR/include/paraview-5.4
|
||||
|
||||
setenv PARAVIEW_VERSION %{version}
|
||||
|
||||
# NB: It is important to set the PV_PLUGIN_PATH location to a directory containing only the ParaView plugins.
|
||||
# Otherwise, paraview will try to automatically autoload each and every dynamic library it can find in the
|
||||
# specified directory to see if a given library is a paraview plugin.
|
||||
# In the case of \$FOAM_LIBBIN, with over 80 libraries, this is a total waste of time that will slow down the
|
||||
# startup of paraview or even make paraview crash on startup.
|
||||
setenv PV_PLUGIN_PATH \$FOAM_LIBBIN/paraview-5.4_plugins
|
||||
|
||||
if ( -e \$PARAVIEW_BIN_DIR ) then
|
||||
_foamAddPath \$PARAVIEW_BIN_DIR
|
||||
endif
|
||||
|
||||
if ( -e \$PARAVIEW_LIB_DIR/paraview-5.4 ) then
|
||||
_foamAddLib \$PARAVIEW_LIB_DIR/paraview-5.4
|
||||
endif
|
||||
|
||||
|
||||
# Additional binary path if running on Mac OS X
|
||||
if ( -e \$PARAVIEW_BIN_DIR/paraview.app/Contents/MacOS ) then
|
||||
_foamAddPath \$PARAVIEW_BIN_DIR/paraview.app/Contents/MacOS
|
||||
endif
|
||||
DOT_CSH_EOF
|
||||
|
||||
#finally, generate a .tgz file for systems where using rpm for installing packages
|
||||
# as a non-root user might be a problem.
|
||||
(mkdir -p %{_topdir}/TGZS/%{_target_cpu}; cd $RPM_BUILD_ROOT/%{_prefix}; tar -zcvf %{_topdir}/TGZS/%{_target_cpu}/%{name}-%{version}.tgz packages/%{name}-%{version})
|
||||
|
||||
%clean
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%{_installPrefix}
|
||||
|
||||
|
167
ThirdParty/rpmBuild/SPECS/cmake-3.3.2.spec
vendored
Normal file
167
ThirdParty/rpmBuild/SPECS/cmake-3.3.2.spec
vendored
Normal file
|
@ -0,0 +1,167 @@
|
|||
#------------------------------------------------------------------------------
|
||||
# ========= |
|
||||
# \\ / F ield | foam-extend: Open Source CFD
|
||||
# \\ / O peration |
|
||||
# \\ / A nd | For copyright notice see file Copyright
|
||||
# \\/ M anipulation |
|
||||
#------------------------------------------------------------------------------
|
||||
# License
|
||||
# This file is part of foam-extend.
|
||||
#
|
||||
# foam-extend is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Script
|
||||
# RPM spec file for cmake-3.3.2
|
||||
#
|
||||
# Description
|
||||
# RPM spec file for creating a relocatable RPM
|
||||
#
|
||||
# Author:
|
||||
# Martin Beaudoin, Hydro-Quebec, (2015)
|
||||
# Pascal Beckstein, HZDR, (2018)
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# We grab the value of WM_THIRD_PARTY and WM_OPTIONS from the environment variable
|
||||
%{expand:%%define _WM_THIRD_PARTY_DIR %(echo $WM_THIRD_PARTY_DIR)}
|
||||
%{expand:%%define _WM_OPTIONS %(echo $WM_OPTIONS)}
|
||||
|
||||
# Disable the generation of debuginfo packages
|
||||
%define debug_package %{nil}
|
||||
|
||||
# The topdir needs to point to the $WM_THIRD_PARTY/rpmbuild directory
|
||||
%define _topdir %{_WM_THIRD_PARTY_DIR}/rpmBuild
|
||||
%define _tmppath %{_topdir}/tmp
|
||||
|
||||
# Will install the package directly $WM_THIRD_PARTY_DIR
|
||||
# Some comments about package relocation:
|
||||
# By using this prefix for the Prefix: parameter in this file, you will make this
|
||||
# package relocatable.
|
||||
#
|
||||
# This is fine, as long as your software is itself relocatable.
|
||||
#
|
||||
# Simply take note that libraries built with libtool are not relocatable because the
|
||||
# prefix we specify will be hard-coded in the library .la files.
|
||||
# Ref: http://sourceware.org/autobook/autobook/autobook_80.html
|
||||
#
|
||||
# In that case, if you ever change the value of the $WM_THIRD_PARTY_DIR, you will
|
||||
# not be able to reutilize this RPM, even though it is relocatable. You will need to
|
||||
# regenerate the RPM.
|
||||
#
|
||||
%define _prefix %{_WM_THIRD_PARTY_DIR}
|
||||
|
||||
%define name cmake
|
||||
%define release %{_WM_OPTIONS}
|
||||
%define version 3.3.2
|
||||
|
||||
%define buildroot %{_topdir}/BUILD/%{name}-%{version}-root
|
||||
|
||||
BuildRoot: %{buildroot}
|
||||
Summary: cmake
|
||||
License: Unkown
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
URL: http://www.cmake.org/files/v3.3/
|
||||
Source: %url/%{name}-%{version}.tar.gz
|
||||
Prefix: %{_prefix}
|
||||
Group: Development/Tools
|
||||
|
||||
|
||||
%define _installPrefix %{_prefix}/packages/%{name}-%{version}/platforms/%{_WM_OPTIONS}
|
||||
|
||||
%description
|
||||
%{summary}
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
# export WM settings in a form that GNU configure recognizes
|
||||
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
||||
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
||||
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
|
||||
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
|
||||
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
|
||||
|
||||
%ifos darwin
|
||||
# For Mac OSX:
|
||||
# The configuration of cmake will be using the environment variable MACOSX_DEPLOYMENT_TARGET.
|
||||
# This variable was initialized using 'sw_vers -productVersion' in etc/bashrc.
|
||||
# We need to get rid of the revision number from this string. eg turn "10.7.5" into "10.7"
|
||||
v=( ${MACOSX_DEPLOYMENT_TARGET//./ } )
|
||||
export MACOSX_DEPLOYMENT_TARGET="${v[0]}.${v[1]}"
|
||||
echo "Resetting MACOSX_DEPLOYMENT_TARGET to ${MACOSX_DEPLOYMENT_TARGET}"
|
||||
|
||||
# Recent version of Mac OSX (Yosemite) cannot compile cmake when gcc is the compiler
|
||||
# Using clang instead
|
||||
CC=clang
|
||||
CXX=clang++
|
||||
|
||||
%endif
|
||||
|
||||
./configure \
|
||||
--prefix=%{_installPrefix}
|
||||
|
||||
[ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1
|
||||
make -j $WM_NCOMPPROCS
|
||||
|
||||
%install
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
|
||||
# Creation of foam-extend specific .csh and .sh files"
|
||||
|
||||
echo ""
|
||||
echo "Generating foam-extend specific .csh and .sh files for the package %{name}-%{version}"
|
||||
echo ""
|
||||
#
|
||||
# Generate package specific .sh file for foam-extend
|
||||
#
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_installPrefix}/etc
|
||||
cat << DOT_SH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.sh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
export CMAKE_DIR=\$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
export CMAKE_BIN_DIR=\$CMAKE_DIR/bin
|
||||
|
||||
# Enable access to the runtime package applications
|
||||
[ -d \$CMAKE_BIN_DIR ] && _foamAddPath \$CMAKE_BIN_DIR
|
||||
DOT_SH_EOF
|
||||
|
||||
#
|
||||
# Generate package specific .csh file for foam-extend
|
||||
#
|
||||
cat << DOT_CSH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.csh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
setenv CMAKE_DIR \$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
setenv CMAKE_BIN_DIR \$CMAKE_DIR/bin
|
||||
|
||||
if ( -e \$CMAKE_BIN_DIR ) then
|
||||
_foamAddPath \$CMAKE_BIN_DIR
|
||||
endif
|
||||
DOT_CSH_EOF
|
||||
|
||||
#finally, generate a .tgz file for systems where using rpm for installing packages
|
||||
# as a non-root user might be a problem.
|
||||
(mkdir -p %{_topdir}/TGZS/%{_target_cpu}; cd $RPM_BUILD_ROOT/%{_prefix}; tar -zcvf %{_topdir}/TGZS/%{_target_cpu}/%{name}-%{version}.tgz packages/%{name}-%{version})
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%{_installPrefix}
|
||||
|
175
ThirdParty/rpmBuild/SPECS/qt-everywhere-opensource-src-5.8.0.spec
vendored
Normal file
175
ThirdParty/rpmBuild/SPECS/qt-everywhere-opensource-src-5.8.0.spec
vendored
Normal file
|
@ -0,0 +1,175 @@
|
|||
#------------------------------------------------------------------------------
|
||||
# ========= |
|
||||
# \\ / F ield | foam-extend: Open Source CFD
|
||||
# \\ / O peration |
|
||||
# \\ / A nd | For copyright notice see file Copyright
|
||||
# \\/ M anipulation |
|
||||
#------------------------------------------------------------------------------
|
||||
# License
|
||||
# This file is part of foam-extend.
|
||||
#
|
||||
# foam-extend is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Script
|
||||
# RPM spec file for qt-everywhere-opensource-src-5.8.0
|
||||
#
|
||||
# Description
|
||||
# RPM spec file for creating a relocatable RPM
|
||||
#
|
||||
# Author:
|
||||
# Martin Beaudoin, Hydro-Quebec, (2015)
|
||||
# Pascal Beckstein, HZDR, (2018)
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# We grab the value of WM_THIRD_PARTY and WM_OPTIONS from the environment variable
|
||||
%{expand:%%define _WM_THIRD_PARTY_DIR %(echo $WM_THIRD_PARTY_DIR)}
|
||||
%{expand:%%define _WM_OPTIONS %(echo $WM_OPTIONS)}
|
||||
|
||||
# Disable the generation of debuginfo packages
|
||||
%define debug_package %{nil}
|
||||
|
||||
# The topdir needs to point to the $WM_THIRD_PARTY/rpmbuild directory
|
||||
%define _topdir %{_WM_THIRD_PARTY_DIR}/rpmBuild
|
||||
%define _tmppath %{_topdir}/tmp
|
||||
|
||||
# Will install the package directly $WM_THIRD_PARTY_DIR
|
||||
# Some comments about package relocation:
|
||||
# By using this prefix for the Prefix: parameter in this file, you will make this
|
||||
# package relocatable.
|
||||
#
|
||||
# This is fine, as long as your software is itself relocatable.
|
||||
#
|
||||
# Simply take note that libraries built with libtool are not relocatable because the
|
||||
# prefix we specify will be hard-coded in the library .la files.
|
||||
# Ref: http://sourceware.org/autobook/autobook/autobook_80.html
|
||||
#
|
||||
# In that case, if you ever change the value of the $WM_THIRD_PARTY_DIR, you will
|
||||
# not be able to reutilize this RPM, even though it is relocatable. You will need to
|
||||
# regenerate the RPM.
|
||||
#
|
||||
%define _prefix %{_WM_THIRD_PARTY_DIR}
|
||||
|
||||
%define name qt-everywhere-opensource-src
|
||||
%define release %{_WM_OPTIONS}
|
||||
%define version 5.8.0
|
||||
|
||||
%define buildroot %{_topdir}/BUILD/%{name}-%{version}-root
|
||||
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
%define _missing_doc_files_terminate_build 0
|
||||
|
||||
BuildRoot: %{buildroot}
|
||||
Summary: qt-everywhere-opensource-src
|
||||
License: Unkown
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
URL: http://download.qt.io/archive/qt/5.8/5.8.0/single/qt-everywhere-opensource-src-5.8.0.tar.gz
|
||||
Source: %url/%{name}-%{version}.tar.gz
|
||||
Prefix: %{_prefix}
|
||||
Group: Development/Tools
|
||||
|
||||
|
||||
%define _installPrefix %{_prefix}/packages/%{name}-%{version}/platforms/%{_WM_OPTIONS}
|
||||
|
||||
%description
|
||||
%{summary}
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
# export WM settings in a form that GNU configure recognizes
|
||||
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
||||
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
||||
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
|
||||
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
|
||||
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
|
||||
|
||||
./configure \
|
||||
-opensource -confirm-license \
|
||||
-release -shared \
|
||||
-nomake examples \
|
||||
-prefix %{_installPrefix}
|
||||
|
||||
# Explicitely specify LD_LIBRARY_PATH so it can find QT own libraries
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{_builddir}/%{name}-%{version}/lib
|
||||
|
||||
[ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1
|
||||
make -j $WM_NCOMPPROCS
|
||||
|
||||
%install
|
||||
# Makefiles generated by qmake do not to support the DESTDIR= option
|
||||
# We need to use the INSTALL_ROOT= option instead
|
||||
|
||||
# Somehow, we need to clean up for the RPM to install properly
|
||||
rm -rf %{_installPrefix}
|
||||
|
||||
make install INSTALL_ROOT=$RPM_BUILD_ROOT
|
||||
|
||||
# Creation of foam-extend specific .csh and .sh files"
|
||||
|
||||
echo ""
|
||||
echo "Generating foam-extend specific .csh and .sh files for the package %{name}-%{version}"
|
||||
echo ""
|
||||
#
|
||||
# Generate package specific .sh file for foam-extend
|
||||
#
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_installPrefix}/etc
|
||||
cat << DOT_SH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.sh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
export QT_DIR=\$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
export QT_BIN_DIR=\$QT_DIR/bin
|
||||
export QT_LIB_DIR=\$QT_DIR/lib
|
||||
|
||||
# Enable access to the runtime package applications
|
||||
[ -d \$QT_BIN_DIR ] && _foamAddPath \$QT_BIN_DIR
|
||||
[ -d \$QT_LIB_DIR ] && _foamAddLib \$QT_LIB_DIR
|
||||
DOT_SH_EOF
|
||||
|
||||
#
|
||||
# Generate package specific .csh file for foam-extend
|
||||
#
|
||||
cat << DOT_CSH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.csh
|
||||
# Load %{name}-%{version} libraries and binaries if available
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
setenv QT_DIR \$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
|
||||
setenv QT_BIN_DIR \$QT_DIR/bin
|
||||
setenv QT_LIB_DIR \$QT_DIR/lib
|
||||
|
||||
if ( -e \$QT_BIN_DIR ) then
|
||||
_foamAddPath \$QT_BIN_DIR
|
||||
endif
|
||||
|
||||
if ( -e \$QT_LIB_DIR ) then
|
||||
_foamAddLib \$QT_LIB_DIR
|
||||
endif
|
||||
DOT_CSH_EOF
|
||||
|
||||
#finally, generate a .tgz file for systems where using rpm for installing packages
|
||||
# as a non-root user might be a problem.
|
||||
(mkdir -p %{_topdir}/TGZS/%{_target_cpu}; cd $RPM_BUILD_ROOT/%{_prefix}; tar -zcvf %{_topdir}/TGZS/%{_target_cpu}/%{name}-%{version}.tgz packages/%{name}-%{version})
|
||||
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%{_installPrefix}
|
||||
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
rm -rf PV3FoamReader/Make
|
||||
wclean libso vtkPV3Foam
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
|
@ -1,26 +0,0 @@
|
|||
#!/bin/bash
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
if [ -d "$PARAVIEW_DIR" -a -r "$PARAVIEW_DIR" ]
|
||||
then
|
||||
case "$PARAVIEW_VERSION" in
|
||||
3*)
|
||||
wmake libso vtkPV3Foam
|
||||
(
|
||||
cd PV3FoamReader
|
||||
mkdir -p Make/$WM_OPTIONS > /dev/null 2>&1
|
||||
cd Make/$WM_OPTIONS
|
||||
cmake ../..
|
||||
if [ "$WM_ARCH_BASE" == "darwin" ]
|
||||
then
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PV3FoamReader.dir/link.txt
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PV3FoamReader_SM.dir/link.txt
|
||||
fi
|
||||
make
|
||||
)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
|
@ -1,61 +0,0 @@
|
|||
# create a plugin that adds a reader to the ParaView GUI
|
||||
# it is added in the file dialog when doing opens/saves.
|
||||
|
||||
# The qrc file is processed by Qt's resource compiler (rcc)
|
||||
# the qrc file must have a resource prefix of "/ParaViewResources"
|
||||
# and ParaView will read anything contained under that prefix
|
||||
# the pqReader.xml file contains xml defining readers with their
|
||||
# file extensions and descriptions.
|
||||
|
||||
cmake_minimum_required(VERSION 2.4)
|
||||
|
||||
if(COMMAND cmake_policy)
|
||||
cmake_policy(SET CMP0003 NEW)
|
||||
endif(COMMAND cmake_policy)
|
||||
|
||||
FIND_PACKAGE(ParaView REQUIRED)
|
||||
INCLUDE(${PARAVIEW_USE_FILE})
|
||||
|
||||
LINK_DIRECTORIES(
|
||||
$ENV{FOAM_LIBBIN}
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
$ENV{WM_PROJECT_DIR}/src/OpenFOAM/lnInclude
|
||||
$ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude
|
||||
${PROJECT_SOURCE_DIR}/../vtkPV3Foam
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(
|
||||
-DWM_$ENV{WM_PRECISION_OPTION}
|
||||
)
|
||||
|
||||
# Set output library destination to plugin folder
|
||||
SET(
|
||||
LIBRARY_OUTPUT_PATH $ENV{PV_PLUGIN_PATH}
|
||||
CACHE INTERNAL
|
||||
"Single output directory for building all libraries."
|
||||
)
|
||||
|
||||
# Build the server-side plugin
|
||||
ADD_PARAVIEW_PLUGIN(
|
||||
PV3FoamReader_SM "1.0"
|
||||
SERVER_MANAGER_XML PV3FoamReader_SM.xml
|
||||
SERVER_MANAGER_SOURCES vtkPV3FoamReader.cxx
|
||||
)
|
||||
|
||||
# Build the client-side plugin
|
||||
ADD_PARAVIEW_PLUGIN(
|
||||
PV3FoamReader
|
||||
"1.0"
|
||||
GUI_RESOURCES PV3FoamReader.qrc
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
PV3FoamReader_SM
|
||||
OpenFOAM
|
||||
finiteVolume
|
||||
vtkPV3Foam
|
||||
pqCore
|
||||
)
|
||||
#-----------------------------------------------------------------------------
|
|
@ -1,5 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/ParaViewResources" >
|
||||
<file>PV3FoamReader.xml</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,6 +0,0 @@
|
|||
<ParaViewReaders>
|
||||
<Reader name="PV3FoamReader"
|
||||
extensions="OpenFOAM"
|
||||
file_description="OpenFOAM Reader">
|
||||
</Reader>
|
||||
</ParaViewReaders>
|
|
@ -1,209 +0,0 @@
|
|||
<ServerManagerConfiguration>
|
||||
<ProxyGroup name="sources">
|
||||
<SourceProxy
|
||||
name="PV3FoamReader"
|
||||
class="vtkPV3FoamReader">
|
||||
|
||||
<!-- File name - compulsory -->
|
||||
<StringVectorProperty
|
||||
name="FileName"
|
||||
command="SetFileName"
|
||||
number_of_elements="1"
|
||||
animateable="0">
|
||||
<FileListDomain name="files"/>
|
||||
<Documentation>
|
||||
Specifies the filename for the OpenFOAM Reader.
|
||||
</Documentation>
|
||||
</StringVectorProperty>
|
||||
|
||||
<!-- Send discrete time info to the animation panel -->
|
||||
<DoubleVectorProperty
|
||||
name="TimestepValues"
|
||||
repeatable="1"
|
||||
information_only="1">
|
||||
<TimeStepsInformationHelper/>
|
||||
<Documentation>
|
||||
Available timestep values.
|
||||
</Documentation>
|
||||
</DoubleVectorProperty>
|
||||
|
||||
|
||||
<!-- Global settings -->
|
||||
|
||||
<!-- Extrapolate Patches check-box -->
|
||||
<IntVectorProperty
|
||||
name="ExtrapolatePatches"
|
||||
command="SetExtrapolatePatches"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
<Documentation>
|
||||
Extrapolate internalField to non-constraint patches
|
||||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
<!-- Include Sets check-box -->
|
||||
<IntVectorProperty
|
||||
name="IncludeSets"
|
||||
command="SetIncludeSets"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<Documentation>
|
||||
Searches the polyMesh/sets/ directory
|
||||
</Documentation>
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<!-- Include Zones check-box -->
|
||||
<IntVectorProperty
|
||||
name="IncludeZones"
|
||||
command="SetIncludeZones"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<Documentation>
|
||||
ZoneMesh information is used to find {cell,face,point}Zones.
|
||||
The polyMesh/ directory is only checked on startup.
|
||||
</Documentation>
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<!-- Show Patch Names check-box -->
|
||||
<IntVectorProperty
|
||||
name="ShowPatchNames"
|
||||
command="SetShowPatchNames"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
<Documentation>
|
||||
Show patch names in render window.
|
||||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
<!-- Cache Mesh check-box -->
|
||||
<IntVectorProperty
|
||||
name="CacheMesh"
|
||||
command="SetCacheMesh"
|
||||
number_of_elements="1"
|
||||
default_values="1"
|
||||
animateable="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
<Documentation>
|
||||
Cache the fvMesh in memory.
|
||||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
|
||||
<!-- Update GUI check box -->
|
||||
<IntVectorProperty
|
||||
name="UpdateGUI"
|
||||
command="SetUpdateGUI"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
<Documentation>
|
||||
A simple way cause a reader GUI modification.
|
||||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
|
||||
<!-- Selections -->
|
||||
|
||||
<!-- Available Parts (volume, patches, lagrangian) array -->
|
||||
<StringVectorProperty
|
||||
name="PartArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="Part"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="PartStatus"
|
||||
label="Mesh Parts"
|
||||
command="SetPartArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="PartArrayInfo"
|
||||
animateable="0">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="PartArrayInfo" function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<!-- Available volFields array -->
|
||||
<StringVectorProperty
|
||||
name="VolFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="VolField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="VolFieldStatus"
|
||||
label="Volume Fields"
|
||||
command="SetVolFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="VolFieldArrayInfo"
|
||||
animateable="0">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="VolFieldArrayInfo" function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<!-- Available Lagrangian fields array -->
|
||||
<StringVectorProperty
|
||||
name="LagrangianFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="LagrangianField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="LagrangianFieldStatus"
|
||||
label="Lagrangian Fields"
|
||||
command="SetLagrangianFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="LagrangianFieldArrayInfo"
|
||||
animateable="0">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="LagrangianFieldArrayInfo" function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<!-- Available pointFields array -->
|
||||
<StringVectorProperty
|
||||
name="PointFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="PointField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="PointFieldStatus"
|
||||
label="Point Fields"
|
||||
command="SetPointFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="PointFieldArrayInfo"
|
||||
animateable="0">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="PointFieldArrayInfo" function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
</SourceProxy>
|
||||
</ProxyGroup>
|
||||
</ServerManagerConfiguration>
|
|
@ -1,689 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
Module: $RCSfile: vtkPV3FoamReader.cxx,v $
|
||||
|
||||
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
|
||||
#include "vtkPV3FoamReader.h"
|
||||
|
||||
#include "pqApplicationCore.h"
|
||||
#include "pqRenderView.h"
|
||||
#include "pqServerManagerModel.h"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCallbackCommand.h"
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkInformation.h"
|
||||
#include "vtkInformationVector.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkSMRenderViewProxy.h"
|
||||
#include "vtkStreamingDemandDrivenPipeline.h"
|
||||
#include "vtkStringArray.h"
|
||||
|
||||
// Foam includes
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
vtkCxxRevisionMacro(vtkPV3FoamReader, "$Revision: 1.5$");
|
||||
vtkStandardNewMacro(vtkPV3FoamReader);
|
||||
|
||||
#undef EXPERIMENTAL_TIME_CACHING
|
||||
|
||||
vtkPV3FoamReader::vtkPV3FoamReader()
|
||||
{
|
||||
Debug = 0;
|
||||
vtkDebugMacro(<<"Constructor");
|
||||
|
||||
SetNumberOfInputPorts(0);
|
||||
|
||||
FileName = NULL;
|
||||
foamData_ = NULL;
|
||||
|
||||
output0_ = NULL;
|
||||
|
||||
#ifdef VTKPV3FOAM_DUALPORT
|
||||
// Add second output for the Lagrangian
|
||||
this->SetNumberOfOutputPorts(2);
|
||||
vtkMultiBlockDataSet *lagrangian = vtkMultiBlockDataSet::New();
|
||||
lagrangian->ReleaseData();
|
||||
|
||||
this->GetExecutive()->SetOutputData(1, lagrangian);
|
||||
lagrangian->Delete();
|
||||
#endif
|
||||
|
||||
TimeStepRange[0] = 0;
|
||||
TimeStepRange[1] = 0;
|
||||
|
||||
CacheMesh = 1;
|
||||
|
||||
ExtrapolatePatches = 0;
|
||||
IncludeSets = 0;
|
||||
IncludeZones = 0;
|
||||
ShowPatchNames = 0;
|
||||
|
||||
UpdateGUI = 0;
|
||||
|
||||
PartSelection = vtkDataArraySelection::New();
|
||||
VolFieldSelection = vtkDataArraySelection::New();
|
||||
PointFieldSelection = vtkDataArraySelection::New();
|
||||
LagrangianFieldSelection = vtkDataArraySelection::New();
|
||||
|
||||
// Setup the selection callback to modify this object when an array
|
||||
// selection is changed.
|
||||
SelectionObserver = vtkCallbackCommand::New();
|
||||
SelectionObserver->SetCallback
|
||||
(
|
||||
&vtkPV3FoamReader::SelectionModifiedCallback
|
||||
);
|
||||
SelectionObserver->SetClientData(this);
|
||||
|
||||
PartSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
VolFieldSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
PointFieldSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
LagrangianFieldSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
vtkPV3FoamReader::~vtkPV3FoamReader()
|
||||
{
|
||||
vtkDebugMacro(<<"Deconstructor");
|
||||
|
||||
delete foamData_;
|
||||
|
||||
if (FileName)
|
||||
{
|
||||
delete [] FileName;
|
||||
}
|
||||
|
||||
if (output0_)
|
||||
{
|
||||
output0_->Delete();
|
||||
}
|
||||
|
||||
|
||||
PartSelection->RemoveObserver(this->SelectionObserver);
|
||||
VolFieldSelection->RemoveObserver(this->SelectionObserver);
|
||||
PointFieldSelection->RemoveObserver(this->SelectionObserver);
|
||||
LagrangianFieldSelection->RemoveObserver(this->SelectionObserver);
|
||||
|
||||
SelectionObserver->Delete();
|
||||
|
||||
PartSelection->Delete();
|
||||
VolFieldSelection->Delete();
|
||||
PointFieldSelection->Delete();
|
||||
LagrangianFieldSelection->Delete();
|
||||
}
|
||||
|
||||
|
||||
// Do everything except set the output info
|
||||
int vtkPV3FoamReader::RequestInformation
|
||||
(
|
||||
vtkInformation* vtkNotUsed(request),
|
||||
vtkInformationVector** vtkNotUsed(inputVector),
|
||||
vtkInformationVector* outputVector
|
||||
)
|
||||
{
|
||||
vtkDebugMacro(<<"RequestInformation");
|
||||
|
||||
if (Foam::vtkPV3Foam::debug)
|
||||
{
|
||||
cout<<"REQUEST_INFORMATION\n";
|
||||
}
|
||||
|
||||
if (!FileName)
|
||||
{
|
||||
vtkErrorMacro("FileName has to be specified!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nInfo = outputVector->GetNumberOfInformationObjects();
|
||||
|
||||
if (Foam::vtkPV3Foam::debug)
|
||||
{
|
||||
cout<<"RequestInformation with " << nInfo << " item(s)\n";
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
outputVector->GetInformationObject(infoI)->Print(cout);
|
||||
}
|
||||
}
|
||||
|
||||
if (!foamData_)
|
||||
{
|
||||
foamData_ = new Foam::vtkPV3Foam(FileName, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
foamData_->updateInfo();
|
||||
}
|
||||
|
||||
int nTimeSteps = 0;
|
||||
double* timeSteps = foamData_->findTimes(nTimeSteps);
|
||||
|
||||
if (!nTimeSteps)
|
||||
{
|
||||
vtkErrorMacro("could not find valid OpenFOAM mesh");
|
||||
|
||||
// delete foamData and flag it as fatal error
|
||||
delete foamData_;
|
||||
foamData_ = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// set identical time steps for all ports
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
outputVector->GetInformationObject(infoI)->Set
|
||||
(
|
||||
vtkStreamingDemandDrivenPipeline::TIME_STEPS(),
|
||||
timeSteps,
|
||||
nTimeSteps
|
||||
);
|
||||
}
|
||||
|
||||
if (nTimeSteps)
|
||||
{
|
||||
double timeRange[2];
|
||||
timeRange[0] = timeSteps[0];
|
||||
timeRange[1] = timeSteps[nTimeSteps-1];
|
||||
|
||||
if (Foam::vtkPV3Foam::debug > 1)
|
||||
{
|
||||
cout<<"nTimeSteps " << nTimeSteps << "\n"
|
||||
<<"timeRange " << timeRange[0] << " to " << timeRange[1]
|
||||
<< "\n";
|
||||
|
||||
for (int timeI = 0; timeI < nTimeSteps; ++timeI)
|
||||
{
|
||||
cout<< "step[" << timeI << "] = " << timeSteps[timeI] << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
outputVector->GetInformationObject(infoI)->Set
|
||||
(
|
||||
vtkStreamingDemandDrivenPipeline::TIME_RANGE(),
|
||||
timeRange,
|
||||
2
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
delete timeSteps;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// Set the output info
|
||||
int vtkPV3FoamReader::RequestData
|
||||
(
|
||||
vtkInformation* vtkNotUsed(request),
|
||||
vtkInformationVector** vtkNotUsed(inputVector),
|
||||
vtkInformationVector* outputVector
|
||||
)
|
||||
{
|
||||
vtkDebugMacro(<<"RequestData");
|
||||
|
||||
if (!FileName)
|
||||
{
|
||||
vtkErrorMacro("FileName has to be specified!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// catch previous error
|
||||
if (!foamData_)
|
||||
{
|
||||
vtkErrorMacro("Reader failed - perhaps no mesh?");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nInfo = outputVector->GetNumberOfInformationObjects();
|
||||
|
||||
if (Foam::vtkPV3Foam::debug)
|
||||
{
|
||||
cout<<"RequestData with " << nInfo << " item(s)\n";
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
outputVector->GetInformationObject(infoI)->Print(cout);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the requested time step.
|
||||
// We only support requests for a single time step
|
||||
|
||||
int nRequestTime = 0;
|
||||
double requestTime[nInfo];
|
||||
|
||||
// taking port0 as the lead for other outputs would be nice, but fails when
|
||||
// a filter is added - we need to check everything
|
||||
// but since PREVIOUS_UPDATE_TIME_STEPS() is protected, relay the logic
|
||||
// to the vtkPV3Foam::setTime() method
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
vtkInformation *outInfo = outputVector->GetInformationObject(infoI);
|
||||
|
||||
if
|
||||
(
|
||||
outInfo->Has
|
||||
(
|
||||
vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()
|
||||
)
|
||||
&& outInfo->Length
|
||||
(
|
||||
vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()
|
||||
) >= 1
|
||||
)
|
||||
{
|
||||
requestTime[nRequestTime++] = outInfo->Get
|
||||
(
|
||||
vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()
|
||||
)[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (nRequestTime)
|
||||
{
|
||||
foamData_->setTime(nRequestTime, requestTime);
|
||||
}
|
||||
|
||||
|
||||
vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast
|
||||
(
|
||||
outputVector->GetInformationObject(0)->Get
|
||||
(
|
||||
vtkMultiBlockDataSet::DATA_OBJECT()
|
||||
)
|
||||
);
|
||||
|
||||
if (Foam::vtkPV3Foam::debug)
|
||||
{
|
||||
cout<< "update output with "
|
||||
<< output->GetNumberOfBlocks() << " blocks\n";
|
||||
}
|
||||
|
||||
|
||||
#ifdef EXPERIMENTAL_TIME_CACHING
|
||||
bool needsUpdate = false;
|
||||
|
||||
if (!output0_)
|
||||
{
|
||||
output0_ = vtkMultiBlockDataSet::New();
|
||||
needsUpdate = true;
|
||||
}
|
||||
|
||||
// This experimental bit of code seems to work for the geometry,
|
||||
// but trashes the fields and still triggers the GeometryFilter
|
||||
if (needsUpdate)
|
||||
{
|
||||
foamData_->Update(output);
|
||||
output0_->ShallowCopy(output);
|
||||
}
|
||||
else
|
||||
{
|
||||
output->ShallowCopy(output0_);
|
||||
}
|
||||
|
||||
if (Foam::vtkPV3Foam::debug)
|
||||
{
|
||||
if (needsUpdate)
|
||||
{
|
||||
cout<< "full UPDATE ---------\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
cout<< "cached UPDATE ---------\n";
|
||||
}
|
||||
|
||||
cout<< "UPDATED output: ";
|
||||
output->Print(cout);
|
||||
|
||||
cout<< "UPDATED output0_: ";
|
||||
output0_->Print(cout);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#ifdef VTKPV3FOAM_DUALPORT
|
||||
foamData_->Update
|
||||
(
|
||||
output,
|
||||
vtkMultiBlockDataSet::SafeDownCast
|
||||
(
|
||||
outputVector->GetInformationObject(1)->Get
|
||||
(
|
||||
vtkMultiBlockDataSet::DATA_OBJECT()
|
||||
)
|
||||
);
|
||||
);
|
||||
#else
|
||||
foamData_->Update(output, output);
|
||||
#endif
|
||||
|
||||
if (ShowPatchNames)
|
||||
{
|
||||
addPatchNamesToView();
|
||||
}
|
||||
else
|
||||
{
|
||||
removePatchNamesFromView();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// Do any cleanup on the Foam side
|
||||
foamData_->CleanUp();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::addPatchNamesToView()
|
||||
{
|
||||
pqApplicationCore* appCore = pqApplicationCore::instance();
|
||||
|
||||
// Server manager model for querying items in the server manager
|
||||
pqServerManagerModel* smModel = appCore->getServerManagerModel();
|
||||
|
||||
// Get all the pqRenderView instances
|
||||
QList<pqRenderView*> renderViews = smModel->findItems<pqRenderView*>();
|
||||
|
||||
for (int viewI=0; viewI<renderViews.size(); viewI++)
|
||||
{
|
||||
foamData_->addPatchNames
|
||||
(
|
||||
renderViews[viewI]->getRenderViewProxy()->GetRenderer()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::removePatchNamesFromView()
|
||||
{
|
||||
pqApplicationCore* appCore = pqApplicationCore::instance();
|
||||
|
||||
// Server manager model for querying items in the server manager
|
||||
pqServerManagerModel* smModel = appCore->getServerManagerModel();
|
||||
|
||||
// Get all the pqRenderView instances
|
||||
QList<pqRenderView*> renderViews = smModel->findItems<pqRenderView*>();
|
||||
|
||||
for (int viewI=0; viewI<renderViews.size(); viewI++)
|
||||
{
|
||||
foamData_->removePatchNames
|
||||
(
|
||||
renderViews[viewI]->getRenderViewProxy()->GetRenderer()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
vtkDebugMacro(<<"PrintSelf");
|
||||
|
||||
this->Superclass::PrintSelf(os,indent);
|
||||
os<< indent << "File name: "
|
||||
<< (this->FileName ? this->FileName : "(none)") << "\n";
|
||||
|
||||
foamData_->PrintSelf(os, indent);
|
||||
|
||||
os<< indent << "Time step range: "
|
||||
<< this->TimeStepRange[0] << " - " << this->TimeStepRange[1]
|
||||
<< "\n";
|
||||
os<< indent << "Time step: " << this->GetTimeStep() << endl;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetTimeStep()
|
||||
{
|
||||
return foamData_ ? foamData_->timeIndex() : -1;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Parts selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV3FoamReader::GetPartSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartSelection");
|
||||
return PartSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetNumberOfPartArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfPartArrays");
|
||||
return PartSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV3FoamReader::GetPartArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartArrayName");
|
||||
return PartSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetPartArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartArrayStatus");
|
||||
return PartSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetPartArrayStatus");
|
||||
if (status)
|
||||
{
|
||||
PartSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
PartSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// volField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV3FoamReader::GetVolFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldSelection");
|
||||
return VolFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetNumberOfVolFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfVolFieldArrays");
|
||||
return VolFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV3FoamReader::GetVolFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldArrayName");
|
||||
return VolFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetVolFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldArrayStatus");
|
||||
return VolFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::SetVolFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetVolFieldArrayStatus");
|
||||
if (status)
|
||||
{
|
||||
VolFieldSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
VolFieldSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// pointField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV3FoamReader::GetPointFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldSelection");
|
||||
return PointFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetNumberOfPointFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfPointFieldArrays");
|
||||
return PointFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV3FoamReader::GetPointFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldArrayName");
|
||||
return PointFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetPointFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldArrayStatus");
|
||||
return PointFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::SetPointFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetPointFieldArrayStatus");
|
||||
if (status)
|
||||
{
|
||||
PointFieldSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
PointFieldSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// lagrangianField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV3FoamReader::GetLagrangianFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldSelection");
|
||||
return LagrangianFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetNumberOfLagrangianFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfLagrangianFieldArrays");
|
||||
return LagrangianFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV3FoamReader::GetLagrangianFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldArrayName");
|
||||
return LagrangianFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::GetLagrangianFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldArrayStatus");
|
||||
return LagrangianFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::SetLagrangianFieldArrayStatus
|
||||
(
|
||||
const char* name,
|
||||
int status
|
||||
)
|
||||
{
|
||||
vtkDebugMacro(<<"SetLagrangianFieldArrayStatus");
|
||||
if (status)
|
||||
{
|
||||
LagrangianFieldSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
LagrangianFieldSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
void vtkPV3FoamReader::SelectionModifiedCallback
|
||||
(
|
||||
vtkObject*,
|
||||
unsigned long,
|
||||
void* clientdata,
|
||||
void*
|
||||
)
|
||||
{
|
||||
static_cast<vtkPV3FoamReader*>(clientdata)->SelectionModified();
|
||||
}
|
||||
|
||||
|
||||
void vtkPV3FoamReader::SelectionModified()
|
||||
{
|
||||
vtkDebugMacro(<<"SelectionModified");
|
||||
Modified();
|
||||
}
|
||||
|
||||
|
||||
int vtkPV3FoamReader::FillOutputPortInformation
|
||||
(
|
||||
int port,
|
||||
vtkInformation* info
|
||||
)
|
||||
{
|
||||
if (port == 0)
|
||||
{
|
||||
return this->Superclass::FillOutputPortInformation(port, info);
|
||||
}
|
||||
info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkMultiBlockDataSet");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,211 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
Module: $RCSfile: vtkPV3FoamReader.h,v $
|
||||
|
||||
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
// .NAME vtkPV3FoamReader - reads a dataset in OpenFOAM format
|
||||
// .SECTION Description
|
||||
// vtkPV3FoamReader creates an multiblock dataset.
|
||||
// It uses the OpenFOAM infrastructure (fvMesh, etc) to
|
||||
// handle mesh and field data.
|
||||
|
||||
#ifndef __vtkPV3FoamReader_h
|
||||
#define __vtkPV3FoamReader_h
|
||||
|
||||
// Foam forward declarations
|
||||
namespace Foam
|
||||
{
|
||||
class vtkPV3Foam;
|
||||
}
|
||||
|
||||
// VTK includes
|
||||
#include "vtkMultiBlockDataSetAlgorithm.h"
|
||||
|
||||
// VTK forward declarations
|
||||
class vtkDataArraySelection;
|
||||
class vtkCallbackCommand;
|
||||
|
||||
|
||||
class VTK_IO_EXPORT vtkPV3FoamReader
|
||||
:
|
||||
public vtkMultiBlockDataSetAlgorithm
|
||||
{
|
||||
public:
|
||||
vtkTypeRevisionMacro(vtkPV3FoamReader,vtkMultiBlockDataSetAlgorithm);
|
||||
void PrintSelf(ostream&, vtkIndent);
|
||||
|
||||
static vtkPV3FoamReader* New();
|
||||
|
||||
// Description:
|
||||
// Get the current timestep and the timestep range.
|
||||
vtkGetVector2Macro(TimeStepRange, int);
|
||||
|
||||
// Description:
|
||||
// Set/Get the filename.
|
||||
vtkSetStringMacro(FileName);
|
||||
vtkGetStringMacro(FileName);
|
||||
|
||||
// Description:
|
||||
// GUI update control
|
||||
vtkSetMacro(UpdateGUI, int);
|
||||
vtkGetMacro(UpdateGUI, int);
|
||||
|
||||
// Description:
|
||||
// FOAM mesh caching control
|
||||
vtkSetMacro(CacheMesh, int);
|
||||
vtkGetMacro(CacheMesh, int);
|
||||
|
||||
// Description:
|
||||
// FOAM extrapolate internal values onto the patches
|
||||
vtkSetMacro(ExtrapolatePatches, int);
|
||||
vtkGetMacro(ExtrapolatePatches, int);
|
||||
|
||||
// FOAM read sets control
|
||||
vtkSetMacro(IncludeSets, int);
|
||||
vtkGetMacro(IncludeSets, int);
|
||||
|
||||
// Description:
|
||||
// FOAM read zones control
|
||||
vtkSetMacro(IncludeZones, int);
|
||||
vtkGetMacro(IncludeZones, int);
|
||||
|
||||
// Description:
|
||||
// FOAM display patch names control
|
||||
vtkSetMacro(ShowPatchNames, int);
|
||||
vtkGetMacro(ShowPatchNames, int);
|
||||
|
||||
// Description:
|
||||
// Get the current timestep
|
||||
int GetTimeStep();
|
||||
|
||||
// Description:
|
||||
// Parts selection list control
|
||||
vtkDataArraySelection* GetPartSelection();
|
||||
int GetNumberOfPartArrays();
|
||||
int GetPartArrayStatus(const char* name);
|
||||
void SetPartArrayStatus(const char* name, int status);
|
||||
const char* GetPartArrayName(int index);
|
||||
|
||||
// Description:
|
||||
// volField selection list control
|
||||
vtkDataArraySelection* GetVolFieldSelection();
|
||||
int GetNumberOfVolFieldArrays();
|
||||
int GetVolFieldArrayStatus(const char* name);
|
||||
void SetVolFieldArrayStatus(const char* name, int status);
|
||||
const char* GetVolFieldArrayName(int index);
|
||||
|
||||
// Description:
|
||||
// pointField selection list control
|
||||
vtkDataArraySelection* GetPointFieldSelection();
|
||||
int GetNumberOfPointFieldArrays();
|
||||
int GetPointFieldArrayStatus(const char* name);
|
||||
void SetPointFieldArrayStatus(const char* name, int status);
|
||||
const char* GetPointFieldArrayName(int index);
|
||||
|
||||
// Description:
|
||||
// lagrangianField selection list control
|
||||
vtkDataArraySelection* GetLagrangianFieldSelection();
|
||||
int GetNumberOfLagrangianFieldArrays();
|
||||
int GetLagrangianFieldArrayStatus(const char* name);
|
||||
void SetLagrangianFieldArrayStatus(const char* name, int status);
|
||||
const char* GetLagrangianFieldArrayName(int index);
|
||||
|
||||
// Description:
|
||||
// Callback registered with the SelectionObserver
|
||||
// for all the selection lists
|
||||
static void SelectionModifiedCallback
|
||||
(
|
||||
vtkObject* caller,
|
||||
unsigned long eid,
|
||||
void* clientdata,
|
||||
void* calldata
|
||||
);
|
||||
|
||||
void SelectionModified();
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
//- Construct null
|
||||
vtkPV3FoamReader();
|
||||
|
||||
//- Destructor
|
||||
~vtkPV3FoamReader();
|
||||
|
||||
//- Return information about mesh, times, etc without loading anything
|
||||
virtual int RequestInformation
|
||||
(
|
||||
vtkInformation*,
|
||||
vtkInformationVector**,
|
||||
vtkInformationVector*
|
||||
);
|
||||
|
||||
//- Get the mesh/fields for a particular time
|
||||
//- Destructor
|
||||
virtual int RequestData
|
||||
(
|
||||
vtkInformation*,
|
||||
vtkInformationVector**,
|
||||
vtkInformationVector*
|
||||
);
|
||||
|
||||
//- Fill in additional port information
|
||||
virtual int FillOutputPortInformation(int, vtkInformation*);
|
||||
|
||||
// The observer to modify this object when array selections are modified
|
||||
vtkCallbackCommand* SelectionObserver;
|
||||
|
||||
char* FileName;
|
||||
|
||||
private:
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
vtkPV3FoamReader(const vtkPV3FoamReader&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const vtkPV3FoamReader&);
|
||||
|
||||
//- Add patch names to the view
|
||||
void addPatchNamesToView();
|
||||
|
||||
//- Remove patch names from the view
|
||||
void removePatchNamesFromView();
|
||||
|
||||
int TimeStepRange[2];
|
||||
int CacheMesh;
|
||||
|
||||
int ExtrapolatePatches;
|
||||
int IncludeSets;
|
||||
int IncludeZones;
|
||||
int ShowPatchNames;
|
||||
|
||||
//- Dummy variable/switch for invoke a reader update
|
||||
int UpdateGUI;
|
||||
|
||||
vtkDataArraySelection* PartSelection;
|
||||
vtkDataArraySelection* VolFieldSelection;
|
||||
vtkDataArraySelection* PointFieldSelection;
|
||||
vtkDataArraySelection* LagrangianFieldSelection;
|
||||
|
||||
//- Cached data for output port0 (experimental!)
|
||||
vtkMultiBlockDataSet* output0_;
|
||||
|
||||
//BTX
|
||||
Foam::vtkPV3Foam* foamData_;
|
||||
//ETX
|
||||
};
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,12 +0,0 @@
|
|||
vtkPV3Foam.C
|
||||
vtkPV3FoamFields.C
|
||||
vtkPV3FoamMesh.C
|
||||
vtkPV3FoamMeshLagrangian.C
|
||||
vtkPV3FoamMeshPatch.C
|
||||
vtkPV3FoamMeshSet.C
|
||||
vtkPV3FoamMeshVolume.C
|
||||
vtkPV3FoamMeshZone.C
|
||||
vtkPV3FoamUpdateInfo.C
|
||||
vtkPV3FoamUtilities.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libvtkPV3Foam
|
|
@ -1,12 +0,0 @@
|
|||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(PARAVIEW_INCLUDE_DIR) \
|
||||
-I../PV3FoamReader
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-llagrangian \
|
||||
-lmeshTools \
|
||||
$(GLIBS)
|
|
@ -1,71 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFOAMTupleRemap_H
|
||||
#define vtkFOAMTupleRemap_H
|
||||
|
||||
// FOAM includes
|
||||
#include "StaticAssert.H"
|
||||
#include "Swap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
inline void vtkFOAMTupleRemap(float vec[]);
|
||||
|
||||
|
||||
// a symmTensor specialization to remap FOAM -> ParaView naming order
|
||||
// Qt/Core/pqScalarBarRepresentation.cxx defines this order
|
||||
// { "XX", "YY", "ZZ", "XY", "YZ", "XZ" }
|
||||
// in pqScalarBarRepresentation::getDefaultComponentLabel()
|
||||
// whereas FOAM uses this order
|
||||
// { XX, XY, XZ, YY, YZ, ZZ }
|
||||
//
|
||||
// for extra safety, assert that symmTensor indeed has 6 components
|
||||
StaticAssert(Foam::symmTensor::nComponents == 6);
|
||||
|
||||
|
||||
// Template specialization for symmTensor
|
||||
template<>
|
||||
inline void vtkFOAMTupleRemap<Foam::symmTensor>(float vec[])
|
||||
{
|
||||
Foam::Swap(vec[1], vec[3]); // swap XY <-> YY
|
||||
Foam::Swap(vec[2], vec[5]); // swap XZ <-> ZZ
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
inline void vtkFOAMTupleRemap(float vec[])
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,757 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::vtkPV3Foam
|
||||
|
||||
Description
|
||||
Provides a reader interface for FOAM to VTK interaction.
|
||||
|
||||
SourceFiles
|
||||
vtkPV3Foam.C
|
||||
vtkPV3Foam.H
|
||||
vtkPV3FoamI.H
|
||||
vtkPV3FoamFields.C
|
||||
vtkPV3FoamMesh.C
|
||||
vtkPV3FoamMeshLagrangian.C
|
||||
vtkPV3FoamMeshPatch.C
|
||||
vtkPV3FoamMeshSet.C
|
||||
vtkPV3FoamMeshVolume.C
|
||||
vtkPV3FoamMeshZone.C
|
||||
vtkPV3FoamFaceField.H
|
||||
vtkPV3FoamLagrangianFields.H
|
||||
vtkPV3FoamPatchField.H
|
||||
vtkPV3FoamPointFields.H
|
||||
vtkPV3FoamPoints.H
|
||||
vtkPV3FoamUpdateInfo.C
|
||||
vtkPV3FoamUpdateInfoFields.H
|
||||
vtkPV3FoamUtilities.C
|
||||
vtkPV3FoamVolFields.H
|
||||
vtkPV3FoamAddToSelection.H
|
||||
|
||||
// Needed by VTK:
|
||||
vtkDataArrayTemplateImplicit.txx
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3Foam_H
|
||||
#define vtkPV3Foam_H
|
||||
|
||||
// do not include legacy strstream headers
|
||||
#ifndef VTK_EXCLUDE_STRSTREAM_HEADERS
|
||||
# define VTK_EXCLUDE_STRSTREAM_HEADERS
|
||||
#endif
|
||||
|
||||
#include "className.H"
|
||||
#include "fileName.H"
|
||||
#include "stringList.H"
|
||||
#include "wordList.H"
|
||||
#include "primitivePatch.H"
|
||||
#include "PrimitivePatchInterpolation.H"
|
||||
#include "volPointInterpolation.H"
|
||||
|
||||
#undef VTKPV3FOAM_DUALPORT
|
||||
|
||||
// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * //
|
||||
|
||||
class vtkDataArraySelection;
|
||||
class vtkDataSet;
|
||||
class vtkPoints;
|
||||
class vtkPV3FoamReader;
|
||||
class vtkRenderer;
|
||||
class vtkTextActor;
|
||||
class vtkMultiBlockDataSet;
|
||||
class vtkPolyData;
|
||||
class vtkUnstructuredGrid;
|
||||
class vtkIndent;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// Foam class forward declarations
|
||||
class argList;
|
||||
class Time;
|
||||
class fvMesh;
|
||||
class IOobjectList;
|
||||
class polyPatch;
|
||||
class faceSet;
|
||||
class pointSet;
|
||||
|
||||
template<class Type> class IOField;
|
||||
template<class Type> class List;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkPV3Foam Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class vtkPV3Foam
|
||||
{
|
||||
// Private classes
|
||||
|
||||
//- Bookkeeping for GUI checklists and the multi-block organization
|
||||
class partInfo
|
||||
{
|
||||
const char *name_;
|
||||
int block_;
|
||||
int start_;
|
||||
int size_;
|
||||
|
||||
public:
|
||||
|
||||
partInfo(const char *name, const int blockNo=0)
|
||||
:
|
||||
name_(name),
|
||||
block_(blockNo),
|
||||
start_(-1),
|
||||
size_(0)
|
||||
{}
|
||||
|
||||
//- Return the block holding these datasets
|
||||
int block() const
|
||||
{
|
||||
return block_;
|
||||
}
|
||||
|
||||
//- Assign block number, return previous value
|
||||
int block(int blockNo)
|
||||
{
|
||||
int prev = block_;
|
||||
block_ = blockNo;
|
||||
return prev;
|
||||
}
|
||||
|
||||
const char* name() const
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
int start() const
|
||||
{
|
||||
return start_;
|
||||
}
|
||||
|
||||
int end() const
|
||||
{
|
||||
return start_ + size_;
|
||||
}
|
||||
|
||||
int size() const
|
||||
{
|
||||
return size_;
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return !size_;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
start_ = -1;
|
||||
size_ = 0;
|
||||
}
|
||||
|
||||
//- Assign new start and reset the size
|
||||
void operator=(const int i)
|
||||
{
|
||||
start_ = i;
|
||||
size_ = 0;
|
||||
}
|
||||
|
||||
//- Increment the size
|
||||
void operator+=(const int n)
|
||||
{
|
||||
size_ += n;
|
||||
}
|
||||
};
|
||||
|
||||
//- bookkeeping for polyhedral cell decomposition
|
||||
// hide in extra pointMap (cellSet/cellZone) for now
|
||||
class polyDecomp
|
||||
{
|
||||
labelList superCells_;
|
||||
labelList addPointCellLabels_;
|
||||
labelList pointMap_;
|
||||
|
||||
public:
|
||||
|
||||
polyDecomp()
|
||||
{}
|
||||
|
||||
//- Label of original cell for decomposed cells
|
||||
labelList& superCells()
|
||||
{
|
||||
return superCells_;
|
||||
}
|
||||
|
||||
//- Label of original cell for decomposed cells
|
||||
const labelList& superCells() const
|
||||
{
|
||||
return superCells_;
|
||||
}
|
||||
|
||||
//- Cell-centre labels for additional points of decomposed cells
|
||||
labelList& addPointCellLabels()
|
||||
{
|
||||
return addPointCellLabels_;
|
||||
}
|
||||
|
||||
//- Cell-centre labels for additional points of decomposed cells
|
||||
const labelList& addPointCellLabels() const
|
||||
{
|
||||
return addPointCellLabels_;
|
||||
}
|
||||
|
||||
//- Point labels for subsetted meshes
|
||||
labelList& pointMap()
|
||||
{
|
||||
return pointMap_;
|
||||
}
|
||||
|
||||
//- Point labels for subsetted meshes
|
||||
const labelList& pointMap() const
|
||||
{
|
||||
return pointMap_;
|
||||
}
|
||||
|
||||
|
||||
//- Clear
|
||||
void clear()
|
||||
{
|
||||
superCells_.clear();
|
||||
addPointCellLabels_.clear();
|
||||
pointMap_.clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Private Data
|
||||
|
||||
//- Access to the controlling vtkPV3FoamReader
|
||||
vtkPV3FoamReader* reader_;
|
||||
|
||||
//- Foam time control
|
||||
autoPtr<Time> dbPtr_;
|
||||
|
||||
//- Foam mesh
|
||||
fvMesh* meshPtr_;
|
||||
|
||||
//- The mesh region
|
||||
word meshRegion_;
|
||||
|
||||
//- The mesh directory for the region
|
||||
fileName meshDir_;
|
||||
|
||||
//- The time index
|
||||
int timeIndex_;
|
||||
|
||||
//- Track changes in mesh geometry
|
||||
bool meshChanged_;
|
||||
|
||||
//- Track changes in fields
|
||||
bool fieldsChanged_;
|
||||
|
||||
//- Selected geometrical parts (internalMesh, patches, ...)
|
||||
boolList partStatus_;
|
||||
|
||||
//- Datasets corresponding to selected geometrical pieces
|
||||
// a negative number indicates that no vtkmesh exists for this piece
|
||||
labelList partDataset_;
|
||||
|
||||
//- First instance and size of various mesh parts
|
||||
// used to index into partStatus_ and partDataset_
|
||||
partInfo partInfoVolume_;
|
||||
partInfo partInfoPatches_;
|
||||
partInfo partInfoLagrangian_;
|
||||
partInfo partInfoCellZones_;
|
||||
partInfo partInfoFaceZones_;
|
||||
partInfo partInfoPointZones_;
|
||||
partInfo partInfoCellSets_;
|
||||
partInfo partInfoFaceSets_;
|
||||
partInfo partInfoPointSets_;
|
||||
|
||||
//- Decomposed cells information (mesh regions)
|
||||
// TODO: regions
|
||||
List<polyDecomp> regionPolyDecomp_;
|
||||
|
||||
//- Decomposed cells information (cellZone meshes)
|
||||
List<polyDecomp> zonePolyDecomp_;
|
||||
|
||||
//- Decomposed cells information (cellSet meshes)
|
||||
List<polyDecomp> csetPolyDecomp_;
|
||||
|
||||
//- List of patch names for rendering to window
|
||||
List<vtkTextActor*> patchTextActorsPtrs_;
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
// Convenience method use to convert the readers from VTK 5
|
||||
// multiblock API to the current composite data infrastructure
|
||||
static void AddToBlock
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
vtkDataSet* dataset,
|
||||
const partInfo&,
|
||||
const label datasetNo,
|
||||
const string& datasetName
|
||||
);
|
||||
|
||||
// Convenience method use to convert the readers from VTK 5
|
||||
// multiblock API to the current composite data infrastructure
|
||||
static vtkDataSet* GetDataSetFromBlock
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo
|
||||
);
|
||||
|
||||
// Convenience method use to convert the readers from VTK 5
|
||||
// multiblock API to the current composite data infrastructure
|
||||
static label GetNumberOfDataSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&
|
||||
);
|
||||
|
||||
//- Reset data counters
|
||||
void resetCounters();
|
||||
|
||||
// Update information helper functions
|
||||
|
||||
//- Update the mesh parts selected in the GUI
|
||||
void updateMeshPartsStatus();
|
||||
|
||||
//- Internal mesh info
|
||||
void updateInfoInternalMesh();
|
||||
|
||||
//- Lagrangian info
|
||||
void updateInfoLagrangian();
|
||||
|
||||
//- Patch info
|
||||
void updateInfoPatches();
|
||||
|
||||
//- Set info
|
||||
void updateInfoSets();
|
||||
|
||||
//- Zone info
|
||||
void updateInfoZones();
|
||||
|
||||
//- Read zone names for zoneType from file
|
||||
wordList readZoneNames(const word& zoneType);
|
||||
|
||||
//- Add objects of Type to paraview array selection
|
||||
template<class Type>
|
||||
label addToSelection
|
||||
(
|
||||
vtkDataArraySelection*,
|
||||
const IOobjectList&,
|
||||
const string& suffix=string::null
|
||||
);
|
||||
|
||||
//- Field info
|
||||
template<template<class> class patchType, class meshType>
|
||||
void updateInfoFields(vtkDataArraySelection*);
|
||||
|
||||
//- Lagrangian field info
|
||||
void updateInfoLagrangianFields();
|
||||
|
||||
|
||||
// Update helper functions
|
||||
|
||||
//- Foam mesh
|
||||
void updateFoamMesh();
|
||||
|
||||
//- Reduce memory footprint after conversion
|
||||
void reduceMemory();
|
||||
|
||||
//- Volume fields
|
||||
void updateVolFields(vtkMultiBlockDataSet*);
|
||||
|
||||
//- Point fields
|
||||
void updatePointFields(vtkMultiBlockDataSet*);
|
||||
|
||||
//- Lagrangian fields
|
||||
void updateLagrangianFields(vtkMultiBlockDataSet*);
|
||||
|
||||
|
||||
// Mesh conversion functions
|
||||
|
||||
//- Volume mesh
|
||||
void convertMeshVolume(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Lagrangian mesh
|
||||
void convertMeshLagrangian(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Patch meshes
|
||||
void convertMeshPatches(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Cell zone meshes
|
||||
void convertMeshCellZones(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Face zone meshes
|
||||
void convertMeshFaceZones(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Point zone meshes
|
||||
void convertMeshPointZones(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Cell set meshes
|
||||
void convertMeshCellSets(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Face set meshes
|
||||
void convertMeshFaceSets(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
//- Point set meshes
|
||||
void convertMeshPointSets(vtkMultiBlockDataSet*, int& blockNo);
|
||||
|
||||
|
||||
// Add mesh functions
|
||||
|
||||
//- Add internal mesh/cell set meshes
|
||||
vtkUnstructuredGrid* volumeVTKMesh(const fvMesh&, polyDecomp&);
|
||||
|
||||
//- Add Lagrangian mesh
|
||||
vtkPolyData* lagrangianVTKMesh
|
||||
(
|
||||
const fvMesh&,
|
||||
const word& cloudName
|
||||
);
|
||||
|
||||
//- Add patch mesh
|
||||
vtkPolyData* patchVTKMesh(const polyPatch&);
|
||||
|
||||
//- Add face zone mesh
|
||||
vtkPolyData* faceZoneVTKMesh
|
||||
(
|
||||
const fvMesh&,
|
||||
const labelList& faceLabels
|
||||
);
|
||||
|
||||
//- Add point zone
|
||||
vtkPolyData* pointZoneVTKMesh
|
||||
(
|
||||
const fvMesh&,
|
||||
const labelList& pointLabels
|
||||
);
|
||||
|
||||
//- Add face set mesh
|
||||
vtkPolyData* faceSetVTKMesh
|
||||
(
|
||||
const fvMesh&,
|
||||
const faceSet&
|
||||
);
|
||||
|
||||
//- Add point mesh
|
||||
vtkPolyData* pointSetVTKMesh
|
||||
(
|
||||
const fvMesh&,
|
||||
const pointSet&
|
||||
);
|
||||
|
||||
// Field conversion functions
|
||||
|
||||
//- Convert volume fields
|
||||
void convertVolFields(vtkMultiBlockDataSet*);
|
||||
|
||||
//- Convert point fields
|
||||
void convertPointFields(vtkMultiBlockDataSet*);
|
||||
|
||||
//- Convert Lagrangian fields
|
||||
void convertLagrangianFields(vtkMultiBlockDataSet*);
|
||||
|
||||
|
||||
//- Add the fields in the selected time directory to the selection
|
||||
// lists
|
||||
template<class GeoField>
|
||||
label addObjectsToSelection
|
||||
(
|
||||
vtkDataArraySelection*,
|
||||
const IOobjectList&,
|
||||
const string& suffix=string::null
|
||||
);
|
||||
|
||||
|
||||
// Convert Foam fields
|
||||
|
||||
//- Volume fields - all types
|
||||
template<class Type>
|
||||
void convertVolFields
|
||||
(
|
||||
const fvMesh&,
|
||||
const PtrList<PrimitivePatchInterpolation<primitivePatch> >&,
|
||||
const IOobjectList&,
|
||||
vtkMultiBlockDataSet* output
|
||||
);
|
||||
|
||||
//- Volume field - all selected parts
|
||||
template<class Type>
|
||||
void convertVolFieldBlock
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||
autoPtr<GeometricField<Type, pointPatchField, pointMesh> >&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const List<polyDecomp>& decompLst
|
||||
);
|
||||
|
||||
//- Volume field
|
||||
template<class Type>
|
||||
void convertVolField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo,
|
||||
const polyDecomp&
|
||||
);
|
||||
|
||||
//- Patch field
|
||||
template<class Type>
|
||||
void convertPatchField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo
|
||||
);
|
||||
|
||||
//- face set/zone field
|
||||
template<class Type>
|
||||
void convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo,
|
||||
const fvMesh&,
|
||||
const labelList& faceLabels
|
||||
);
|
||||
|
||||
//- face set/zone field
|
||||
template<class Type>
|
||||
void convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo,
|
||||
const fvMesh&,
|
||||
const faceSet&
|
||||
);
|
||||
|
||||
//- Lagrangian fields - all types
|
||||
template<class Type>
|
||||
void convertLagrangianFields
|
||||
(
|
||||
const IOobjectList&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const label datasetNo
|
||||
);
|
||||
|
||||
//- Lagrangian field
|
||||
template<class Type>
|
||||
void convertLagrangianField
|
||||
(
|
||||
const IOField<Type>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo
|
||||
);
|
||||
|
||||
//- Point fields - all types
|
||||
template<class Type>
|
||||
void convertPointFields
|
||||
(
|
||||
const fvMesh&,
|
||||
const pointMesh&,
|
||||
const IOobjectList&,
|
||||
vtkMultiBlockDataSet* output
|
||||
);
|
||||
|
||||
//- Point field - all selected parts
|
||||
template<class Type>
|
||||
void convertPointFieldBlock
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const List<polyDecomp>&
|
||||
);
|
||||
|
||||
//- Point fields
|
||||
template<class Type>
|
||||
void convertPointField
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>&,
|
||||
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo,
|
||||
const polyDecomp&
|
||||
);
|
||||
|
||||
//- Patch point field
|
||||
template<class Type>
|
||||
void convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>&,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo&,
|
||||
const label datasetNo
|
||||
);
|
||||
|
||||
|
||||
// GUI selection helper functions
|
||||
|
||||
//- Extract up to the first non-word characters
|
||||
inline static word getFirstWord(const char*);
|
||||
|
||||
//- Only keep what is listed in hashSet
|
||||
static void pruneObjectList
|
||||
(
|
||||
IOobjectList&,
|
||||
const wordHashSet&
|
||||
);
|
||||
|
||||
//- Retrieve the current selections
|
||||
static wordHashSet getSelected(vtkDataArraySelection*);
|
||||
|
||||
//- Retrieve a sub-list of the current selections
|
||||
static wordHashSet getSelected
|
||||
(
|
||||
vtkDataArraySelection*,
|
||||
const partInfo&
|
||||
);
|
||||
|
||||
//- Retrieve the current selections
|
||||
static stringList getSelectedArrayEntries(vtkDataArraySelection*);
|
||||
|
||||
//- Retrieve a sub-list of the current selections
|
||||
static stringList getSelectedArrayEntries
|
||||
(
|
||||
vtkDataArraySelection*,
|
||||
const partInfo&
|
||||
);
|
||||
|
||||
//- Set selection(s)
|
||||
static void setSelectedArrayEntries
|
||||
(
|
||||
vtkDataArraySelection*,
|
||||
const stringList&
|
||||
);
|
||||
|
||||
//- Get the first word from the mesh parts selection
|
||||
word getPartName(int);
|
||||
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
vtkPV3Foam(const vtkPV3Foam&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const vtkPV3Foam&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Static data members
|
||||
|
||||
ClassName("vtkPV3Foam");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
vtkPV3Foam
|
||||
(
|
||||
const char* const FileName,
|
||||
vtkPV3FoamReader* reader
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
|
||||
~vtkPV3Foam();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Update
|
||||
void updateInfo();
|
||||
|
||||
void Update
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
vtkMultiBlockDataSet* lagrangianOutput
|
||||
);
|
||||
|
||||
//- Clean any storage
|
||||
void CleanUp();
|
||||
|
||||
//- Allocate and return a list of selected times
|
||||
// returns the count via the parameter
|
||||
double* findTimes(int& nTimeSteps);
|
||||
|
||||
//- Add patch names to the display
|
||||
void addPatchNames(vtkRenderer* renderer);
|
||||
|
||||
//- Remove patch names from the display
|
||||
void removePatchNames(vtkRenderer* renderer);
|
||||
|
||||
//- set the runTime to the first plausible request time,
|
||||
// returns the timeIndex
|
||||
// sets to "constant" on error
|
||||
int setTime(int count, const double requestTimes[]);
|
||||
|
||||
|
||||
//- The current time index
|
||||
int timeIndex() const
|
||||
{
|
||||
return timeIndex_;
|
||||
}
|
||||
|
||||
|
||||
// Access
|
||||
|
||||
//- Debug information
|
||||
void PrintSelf(ostream&, vtkIndent) const;
|
||||
|
||||
//- Simple memory used debugging information
|
||||
static void printMemory();
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
# include "vtkPV3FoamI.H"
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,68 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamAddToSelection_H
|
||||
#define vtkPV3FoamAddToSelection_H
|
||||
|
||||
// FOAM includes
|
||||
#include "IOobjectList.H"
|
||||
#include "SortableList.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
Foam::label Foam::vtkPV3Foam::addToSelection
|
||||
(
|
||||
vtkDataArraySelection *select,
|
||||
const IOobjectList& objectLst,
|
||||
const string& suffix
|
||||
)
|
||||
{
|
||||
SortableList<word> names(objectLst.names(Type::typeName));
|
||||
|
||||
forAll(names, nameI)
|
||||
{
|
||||
if (suffix.size())
|
||||
{
|
||||
select->AddArray((names[nameI] + suffix).c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
select->AddArray(names[nameI].c_str());
|
||||
}
|
||||
}
|
||||
|
||||
return names.size();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,209 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamFaceField_H
|
||||
#define vtkPV3FoamFaceField_H
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellData.h"
|
||||
#include "vtkFloatArray.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkPolyData.h"
|
||||
|
||||
#include "vtkFOAMTupleRemap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo,
|
||||
const fvMesh& mesh,
|
||||
const labelList& faceLabels
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
const label nInternalFaces = mesh.nInternalFaces();
|
||||
const label nFaces = mesh.nFaces();
|
||||
const labelList& faceOwner = mesh.faceOwner();
|
||||
const labelList& faceNeigh = mesh.faceNeighbour();
|
||||
|
||||
vtkFloatArray *cellData = vtkFloatArray::New();
|
||||
cellData->SetNumberOfTuples( faceLabels.size() );
|
||||
cellData->SetNumberOfComponents( nComp );
|
||||
cellData->Allocate( nComp*faceLabels.size() );
|
||||
cellData->SetName( tf.name().c_str() );
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convert convertFaceField: "
|
||||
<< tf.name()
|
||||
<< " size = " << tf.size()
|
||||
<< " nComp=" << nComp
|
||||
<< " nTuples = " << faceLabels.size() << endl;
|
||||
}
|
||||
|
||||
float vec[nComp];
|
||||
|
||||
// for interior faces: average owner/neighbour
|
||||
// for boundary faces: owner
|
||||
forAll(faceLabels, faceI)
|
||||
{
|
||||
// Bug fix: filter inactive faces. HJ, 21/Mar/2011
|
||||
const label faceNo = faceLabels[faceI];
|
||||
|
||||
if (faceNo < nInternalFaces)
|
||||
{
|
||||
Type t = 0.5*(tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]);
|
||||
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
}
|
||||
else if (faceNo < nFaces)
|
||||
{
|
||||
const Type& t = tf[faceOwner[faceNo]];
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = 0;
|
||||
}
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
cellData->InsertTuple(faceI, vec);
|
||||
}
|
||||
|
||||
|
||||
vtkPolyData::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetCellData()
|
||||
->AddArray(cellData);
|
||||
|
||||
cellData->Delete();
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo,
|
||||
const fvMesh& mesh,
|
||||
const faceSet& fSet
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
const label nInternalFaces = mesh.nInternalFaces();
|
||||
const label nFaces = mesh.nFaces();
|
||||
const labelList& faceOwner = mesh.faceOwner();
|
||||
const labelList& faceNeigh = mesh.faceNeighbour();
|
||||
|
||||
vtkFloatArray *cellData = vtkFloatArray::New();
|
||||
cellData->SetNumberOfTuples( fSet.size() );
|
||||
cellData->SetNumberOfComponents( nComp );
|
||||
cellData->Allocate( nComp*fSet.size() );
|
||||
cellData->SetName( tf.name().c_str() );
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convert convertFaceField: "
|
||||
<< tf.name()
|
||||
<< " size = " << tf.size()
|
||||
<< " nComp=" << nComp
|
||||
<< " nTuples = " << fSet.size() << endl;
|
||||
}
|
||||
|
||||
float vec[nComp];
|
||||
|
||||
// for interior faces: average owner/neighbour
|
||||
// for boundary faces: owner
|
||||
label faceI = 0;
|
||||
forAllConstIter(faceSet, fSet, iter)
|
||||
{
|
||||
const label faceNo = iter.key();
|
||||
|
||||
// Bug fix: filter inactive faces. HJ, 21/Mar/2011
|
||||
if (faceNo < nInternalFaces)
|
||||
{
|
||||
Type t = 0.5*(tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]);
|
||||
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
}
|
||||
else if (faceNo < nFaces)
|
||||
{
|
||||
const Type& t = tf[faceOwner[faceNo]];
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (direction d = 0; d < nComp; d++)
|
||||
{
|
||||
vec[d] = 0;
|
||||
}
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
cellData->InsertTuple(faceI, vec);
|
||||
++faceI;
|
||||
}
|
||||
|
||||
|
||||
vtkPolyData::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetCellData()
|
||||
->AddArray(cellData);
|
||||
|
||||
cellData->Delete();
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,325 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "IOobjectList.H"
|
||||
#include "vtkPV3FoamReader.h"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkPV3FoamVolFields.H"
|
||||
#include "vtkPV3FoamPointFields.H"
|
||||
#include "vtkPV3FoamLagrangianFields.H"
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::pruneObjectList
|
||||
(
|
||||
IOobjectList& objects,
|
||||
const wordHashSet& selected
|
||||
)
|
||||
{
|
||||
// hash all the selected field names
|
||||
if (!selected.size())
|
||||
{
|
||||
objects.clear();
|
||||
}
|
||||
|
||||
// only keep selected fields
|
||||
forAllIter(IOobjectList, objects, iter)
|
||||
{
|
||||
if (!selected.found(iter()->name()))
|
||||
{
|
||||
objects.erase(iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertVolFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
{
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
wordHashSet selectedFields = getSelected
|
||||
(
|
||||
reader_->GetVolFieldSelection()
|
||||
);
|
||||
|
||||
if (!selectedFields.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get objects (fields) for this time - only keep selected fields
|
||||
// the region name is already in the mesh db
|
||||
IOobjectList objects(mesh, dbPtr_().timeName());
|
||||
pruneObjectList(objects, selectedFields);
|
||||
|
||||
if (!objects.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertVolFields" << nl
|
||||
<< "converting Foam volume fields" << endl;
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
Info<< " " << iter()->name()
|
||||
<< " == " << iter()->objectPath() << nl;
|
||||
}
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
||||
PtrList<PrimitivePatchInterpolation<primitivePatch> >
|
||||
ppInterpList(mesh.boundaryMesh().size());
|
||||
|
||||
forAll(ppInterpList, i)
|
||||
{
|
||||
ppInterpList.set
|
||||
(
|
||||
i,
|
||||
new PrimitivePatchInterpolation<primitivePatch>
|
||||
(
|
||||
mesh.boundaryMesh()[i]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
convertVolFields<scalar>
|
||||
(
|
||||
mesh, ppInterpList, objects, output
|
||||
);
|
||||
convertVolFields<vector>
|
||||
(
|
||||
mesh, ppInterpList, objects, output
|
||||
);
|
||||
convertVolFields<sphericalTensor>
|
||||
(
|
||||
mesh, ppInterpList, objects, output
|
||||
);
|
||||
convertVolFields<symmTensor>
|
||||
(
|
||||
mesh, ppInterpList, objects, output
|
||||
);
|
||||
convertVolFields<tensor>
|
||||
(
|
||||
mesh, ppInterpList, objects, output
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertVolFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertPointFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
{
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
wordHashSet selectedFields = getSelected
|
||||
(
|
||||
reader_->GetPointFieldSelection()
|
||||
);
|
||||
|
||||
if (!selectedFields.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get objects (fields) for this time - only keep selected fields
|
||||
// the region name is already in the mesh db
|
||||
IOobjectList objects(mesh, dbPtr_().timeName());
|
||||
pruneObjectList(objects, selectedFields);
|
||||
|
||||
if (!objects.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertPointFields" << nl
|
||||
<< "converting Foam volume fields" << endl;
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
Info<< " " << iter()->name()
|
||||
<< " == " << iter()->objectPath() << nl;
|
||||
}
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Construct interpolation on the raw mesh
|
||||
|
||||
// HJ, bug fix? Point mesh handled by objectRegistry
|
||||
// HJ, 11/Nov/2010
|
||||
const pointMesh& pMesh = pointMesh::New(mesh);
|
||||
// pointMesh pMesh(mesh);
|
||||
|
||||
|
||||
convertPointFields<scalar>
|
||||
(
|
||||
mesh, pMesh, objects, output
|
||||
);
|
||||
convertPointFields<vector>
|
||||
(
|
||||
mesh, pMesh, objects, output
|
||||
);
|
||||
convertPointFields<sphericalTensor>
|
||||
(
|
||||
mesh, pMesh, objects, output
|
||||
);
|
||||
convertPointFields<symmTensor>
|
||||
(
|
||||
mesh, pMesh, objects, output
|
||||
);
|
||||
convertPointFields<tensor>
|
||||
(
|
||||
mesh, pMesh, objects, output
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertPointFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertLagrangianFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoLagrangian_;
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
wordHashSet selectedFields = getSelected
|
||||
(
|
||||
reader_->GetLagrangianFieldSelection()
|
||||
);
|
||||
|
||||
if (!selectedFields.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertLagrangianFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word cloudName = getPartName(partId);
|
||||
const label datasetNo = partDataset_[partId];
|
||||
|
||||
if (!partStatus_[partId] || datasetNo < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// Get the Lagrangian fields for this time and this cloud
|
||||
// but only keep selected fields
|
||||
// the region name is already in the mesh db
|
||||
IOobjectList objects
|
||||
(
|
||||
mesh,
|
||||
dbPtr_().timeName(),
|
||||
cloud::prefix/cloudName
|
||||
);
|
||||
pruneObjectList(objects, selectedFields);
|
||||
|
||||
if (!objects.size())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting Foam lagrangian fields" << nl;
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
Info<< " " << iter()->name()
|
||||
<< " == " << iter()->objectPath() << nl;
|
||||
}
|
||||
}
|
||||
|
||||
convertLagrangianFields<label>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
convertLagrangianFields<scalar>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
convertLagrangianFields<vector>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
convertLagrangianFields<sphericalTensor>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
convertLagrangianFields<symmTensor>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
convertLagrangianFields<tensor>
|
||||
(
|
||||
objects, output, datasetNo
|
||||
);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertLagrangianFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,47 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
inline Foam::word Foam::vtkPV3Foam::getFirstWord(const char* str)
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
label n = 0;
|
||||
while (str[n] && word::valid(str[n]))
|
||||
{
|
||||
++n;
|
||||
}
|
||||
return word(str, n, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return word::null;
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,113 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamLagrangianFields_H
|
||||
#define vtkPV3FoamLagrangianFields_H
|
||||
|
||||
#include "Cloud.H"
|
||||
|
||||
#include "vtkFOAMTupleRemap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertLagrangianFields
|
||||
(
|
||||
const IOobjectList& objects,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const label datasetNo
|
||||
)
|
||||
{
|
||||
const partInfo& selector = partInfoLagrangian_;
|
||||
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
// restrict to this IOField<Type>
|
||||
if (iter()->headerClassName() == IOField<Type>::typeName)
|
||||
{
|
||||
IOField<Type> tf(*iter());
|
||||
convertLagrangianField(tf, output, selector, datasetNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertLagrangianField
|
||||
(
|
||||
const IOField<Type>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
|
||||
vtkFloatArray *pointData = vtkFloatArray::New();
|
||||
pointData->SetNumberOfTuples( tf.size() );
|
||||
pointData->SetNumberOfComponents( nComp );
|
||||
pointData->Allocate( nComp*tf.size() );
|
||||
pointData->SetName( tf.name().c_str() );
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convert LagrangianField: "
|
||||
<< tf.name()
|
||||
<< " size = " << tf.size()
|
||||
<< " nComp=" << nComp
|
||||
<< " nTuples = " << tf.size() << endl;
|
||||
}
|
||||
|
||||
float vec[nComp];
|
||||
forAll(tf, i)
|
||||
{
|
||||
const Type& t = tf[i];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
|
||||
vtkPolyData::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetPointData()
|
||||
->AddArray(pointData);
|
||||
|
||||
pointData->Delete();
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,111 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "Cloud.H"
|
||||
#include "fvMesh.H"
|
||||
#include "IOobjectList.H"
|
||||
#include "passiveParticle.H"
|
||||
#include "vtkPV3FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
#include "vtkPoints.h"
|
||||
#include "vtkPolyData.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::lagrangianVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const word& cloudName
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = NULL;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::lagrangianVTKMesh - timePath "
|
||||
<< mesh.time().timePath()/cloud::prefix/cloudName << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
||||
// the region name is already in the mesh db
|
||||
IOobjectList sprayObjs
|
||||
(
|
||||
mesh,
|
||||
mesh.time().timeName(),
|
||||
cloud::prefix/cloudName
|
||||
);
|
||||
|
||||
IOobject* positionsPtr = sprayObjs.lookup("positions");
|
||||
if (positionsPtr)
|
||||
{
|
||||
Cloud<passiveParticle> parcels(mesh, cloudName, false);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "cloud with " << parcels.size() << " parcels" << endl;
|
||||
}
|
||||
|
||||
vtkmesh = vtkPolyData::New();
|
||||
vtkPoints* vtkpoints = vtkPoints::New();
|
||||
vtkCellArray* vtkcells = vtkCellArray::New();
|
||||
|
||||
vtkpoints->Allocate( parcels.size() );
|
||||
vtkcells->Allocate( parcels.size() );
|
||||
|
||||
vtkIdType particleId = 0;
|
||||
forAllConstIter(Cloud<passiveParticle>, parcels, iter)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, iter().position());
|
||||
|
||||
vtkcells->InsertNextCell(1, &particleId);
|
||||
particleId++;
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
vtkmesh->SetVerts(vtkcells);
|
||||
vtkcells->Delete();
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::lagrangianVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,150 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "vtkPV3FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkPoints.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkCellArray.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::faceSetVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const faceSet& fSet
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = vtkPolyData::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::faceSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Construct primitivePatch of faces in fSet.
|
||||
|
||||
const faceList& meshFaces = mesh.faces();
|
||||
faceList patchFaces(fSet.size());
|
||||
label faceI = 0;
|
||||
forAllConstIter(faceSet, fSet, iter)
|
||||
{
|
||||
patchFaces[faceI++] = meshFaces[iter.key()];
|
||||
}
|
||||
primitiveFacePatch p(patchFaces, mesh.points());
|
||||
|
||||
|
||||
// The balance of this routine should be identical to patchVTKMesh
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
const pointField& points = p.localPoints();
|
||||
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( points.size() );
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
// Add faces as polygons
|
||||
const faceList& faces = p.localFaces();
|
||||
|
||||
vtkCellArray* vtkcells = vtkCellArray::New();
|
||||
vtkcells->Allocate( faces.size() );
|
||||
|
||||
forAll(faces, faceI)
|
||||
{
|
||||
const face& f = faces[faceI];
|
||||
vtkIdType nodeIds[f.size()];
|
||||
|
||||
forAll(f, fp)
|
||||
{
|
||||
nodeIds[fp] = f[fp];
|
||||
}
|
||||
vtkcells->InsertNextCell(f.size(), nodeIds);
|
||||
}
|
||||
|
||||
vtkmesh->SetPolys(vtkcells);
|
||||
vtkcells->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::faceSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::pointSetVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const pointSet& pSet
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = vtkPolyData::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::pointSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
const pointField& meshPoints = mesh.points();
|
||||
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( pSet.size() );
|
||||
|
||||
forAllConstIter(pointSet, pSet, iter)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[iter.key()]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::pointSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,354 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "fvMesh.H"
|
||||
#include "cellModeller.H"
|
||||
#include "vtkPV3FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkUnstructuredGrid* Foam::vtkPV3Foam::volumeVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
polyDecomp& decompInfo
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Number of additional points needed by the decomposition of polyhedra
|
||||
label nAddPoints = 0;
|
||||
|
||||
// Number of additional cells generated by the decomposition of polyhedra
|
||||
label nAddCells = 0;
|
||||
|
||||
labelList& superCells = decompInfo.superCells();
|
||||
labelList& addPointCellLabels = decompInfo.addPointCellLabels();
|
||||
|
||||
const cellModel& tet = *(cellModeller::lookup("tet"));
|
||||
const cellModel& pyr = *(cellModeller::lookup("pyr"));
|
||||
const cellModel& prism = *(cellModeller::lookup("prism"));
|
||||
const cellModel& wedge = *(cellModeller::lookup("wedge"));
|
||||
const cellModel& tetWedge = *(cellModeller::lookup("tetWedge"));
|
||||
const cellModel& hex = *(cellModeller::lookup("hex"));
|
||||
|
||||
// Scan for cells which need to be decomposed and count additional points
|
||||
// and cells
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... building cell-shapes" << endl;
|
||||
}
|
||||
const cellShapeList& cellShapes = mesh.cellShapes();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... scanning" << endl;
|
||||
}
|
||||
forAll(cellShapes, cellI)
|
||||
{
|
||||
const cellModel& model = cellShapes[cellI].model();
|
||||
|
||||
if
|
||||
(
|
||||
model != hex
|
||||
&& model != wedge
|
||||
&& model != prism
|
||||
&& model != pyr
|
||||
&& model != tet
|
||||
&& model != tetWedge
|
||||
)
|
||||
{
|
||||
const cell& cFaces = mesh.cells()[cellI];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
nAddCells += nQuads + nTris;
|
||||
}
|
||||
|
||||
nAddCells--;
|
||||
nAddPoints++;
|
||||
}
|
||||
}
|
||||
|
||||
// Set size of additional point addressing array
|
||||
// (from added point to original cell)
|
||||
addPointCellLabels.setSize(nAddPoints);
|
||||
|
||||
// Set size of additional cells mapping array
|
||||
// (from added cell to original cell)
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<<" mesh nCells = " << mesh.nCells() << nl
|
||||
<<" nPoints = " << mesh.nPoints() << nl
|
||||
<<" nAddCells = " << nAddCells << nl
|
||||
<<" nAddPoints = " << nAddPoints << endl;
|
||||
}
|
||||
|
||||
superCells.setSize(mesh.nCells() + nAddCells);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting points" << endl;
|
||||
}
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( mesh.nPoints() + nAddPoints );
|
||||
|
||||
const Foam::pointField& points = mesh.points();
|
||||
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting cells" << endl;
|
||||
}
|
||||
|
||||
vtkmesh->Allocate( mesh.nCells() + nAddCells );
|
||||
|
||||
// Set counters for additional points and additional cells
|
||||
label addPointI = 0, addCellI = 0;
|
||||
|
||||
// Create storage for points - needed for mapping from Foam to VTK
|
||||
// data types - max 'order' = hex = 8 points
|
||||
vtkIdType nodeIds[8];
|
||||
|
||||
forAll(cellShapes, cellI)
|
||||
{
|
||||
const cellShape& cellShape = cellShapes[cellI];
|
||||
const cellModel& cellModel = cellShape.model();
|
||||
|
||||
superCells[addCellI++] = cellI;
|
||||
|
||||
if (cellModel == tet)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == pyr)
|
||||
{
|
||||
for (int j = 0; j < 5; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == prism)
|
||||
{
|
||||
for (int j = 0; j < 6; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == tetWedge)
|
||||
{
|
||||
// Treat as squeezed prism
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[2];
|
||||
nodeIds[2] = cellShape[1];
|
||||
nodeIds[3] = cellShape[3];
|
||||
nodeIds[4] = cellShape[4];
|
||||
nodeIds[5] = cellShape[4];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == wedge)
|
||||
{
|
||||
// Treat as squeezed hex
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[1];
|
||||
nodeIds[2] = cellShape[2];
|
||||
nodeIds[3] = cellShape[2];
|
||||
nodeIds[4] = cellShape[3];
|
||||
nodeIds[5] = cellShape[4];
|
||||
nodeIds[6] = cellShape[5];
|
||||
nodeIds[7] = cellShape[6];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == hex)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Polyhedral cell. Decompose into tets + prisms.
|
||||
|
||||
// Mapping from additional point to cell
|
||||
addPointCellLabels[addPointI] = cellI;
|
||||
|
||||
// Insert the new vertex from the cell-centre
|
||||
label newVertexLabel = mesh.nPoints() + addPointI;
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, mesh.C()[cellI]);
|
||||
|
||||
// Whether to insert cell in place of original or not.
|
||||
bool substituteCell = true;
|
||||
|
||||
const labelList& cFaces = mesh.cells()[cellI];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
|
||||
label qpi = 0;
|
||||
|
||||
for (label quadi=0; quadi<nQuads; quadi++)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCellI++] = cellI;
|
||||
}
|
||||
|
||||
nodeIds[0] = f[0];
|
||||
nodeIds[1] = f[qpi + 1];
|
||||
nodeIds[2] = f[qpi + 2];
|
||||
nodeIds[3] = f[qpi + 3];
|
||||
nodeIds[4] = newVertexLabel;
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
|
||||
qpi += 2;
|
||||
}
|
||||
|
||||
if (nTris)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCellI++] = cellI;
|
||||
}
|
||||
|
||||
nodeIds[0] = f[0];
|
||||
nodeIds[1] = f[qpi + 1];
|
||||
nodeIds[2] = f[qpi + 2];
|
||||
nodeIds[3] = newVertexLabel;
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
addPointI++;
|
||||
}
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,129 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamPatchField_H
|
||||
#define vtkPV3FoamPatchField_H
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellData.h"
|
||||
#include "vtkFloatArray.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkPointData.h"
|
||||
#include "vtkPolyData.h"
|
||||
|
||||
#include "vtkFOAMTupleRemap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertPatchField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& ptf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
|
||||
vtkFloatArray* cellData = vtkFloatArray::New();
|
||||
cellData->SetNumberOfTuples( ptf.size() );
|
||||
cellData->SetNumberOfComponents( nComp );
|
||||
cellData->Allocate( nComp*ptf.size() );
|
||||
cellData->SetName( name.c_str() );
|
||||
|
||||
float vec[nComp];
|
||||
forAll(ptf, i)
|
||||
{
|
||||
const Type& t = ptf[i];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
cellData->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
vtkPolyData::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetCellData()
|
||||
->AddArray(cellData);
|
||||
|
||||
cellData->Delete();
|
||||
}
|
||||
|
||||
|
||||
// as above, but with PointData()
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& pptf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
|
||||
vtkFloatArray *pointData = vtkFloatArray::New();
|
||||
pointData->SetNumberOfTuples( pptf.size() );
|
||||
pointData->SetNumberOfComponents( nComp );
|
||||
pointData->Allocate( nComp*pptf.size() );
|
||||
pointData->SetName( name.c_str() );
|
||||
|
||||
float vec[nComp];
|
||||
forAll(pptf, i)
|
||||
{
|
||||
const Type& t = pptf[i];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
vtkPolyData::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetPointData()
|
||||
->AddArray(pointData);
|
||||
|
||||
pointData->Delete();
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,284 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamPointFields_H
|
||||
#define vtkPV3FoamPointFields_H
|
||||
|
||||
// Foam includes
|
||||
#include "interpolatePointToCell.H"
|
||||
|
||||
#include "vtkFOAMTupleRemap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertPointFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const pointMesh& pMesh,
|
||||
const IOobjectList& objects,
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
{
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
const word& fieldName = iter()->name();
|
||||
// restrict to this GeometricField<Type, ...>
|
||||
if
|
||||
(
|
||||
iter()->headerClassName()
|
||||
!= GeometricField<Type, pointPatchField, pointMesh>::typeName
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkPV3Foam::convertPointFields : "
|
||||
<< fieldName << endl;
|
||||
}
|
||||
|
||||
GeometricField<Type, pointPatchField, pointMesh> ptf
|
||||
(
|
||||
*iter(),
|
||||
pMesh
|
||||
);
|
||||
|
||||
|
||||
// Convert activated internalMesh regions
|
||||
convertPointFieldBlock
|
||||
(
|
||||
ptf,
|
||||
output,
|
||||
partInfoVolume_,
|
||||
regionPolyDecomp_
|
||||
);
|
||||
|
||||
// Convert activated cellZones
|
||||
convertPointFieldBlock
|
||||
(
|
||||
ptf,
|
||||
output,
|
||||
partInfoCellZones_,
|
||||
zonePolyDecomp_
|
||||
);
|
||||
|
||||
// Convert activated cellSets
|
||||
convertPointFieldBlock
|
||||
(
|
||||
ptf,
|
||||
output,
|
||||
partInfoCellSets_,
|
||||
csetPolyDecomp_
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Convert patches - if activated
|
||||
//
|
||||
for
|
||||
(
|
||||
int partId = partInfoPatches_.start();
|
||||
partId < partInfoPatches_.end();
|
||||
++partId
|
||||
)
|
||||
{
|
||||
const word patchName = getPartName(partId);
|
||||
const label datasetNo = partDataset_[partId];
|
||||
const label patchId = patches.findPatchID(patchName);
|
||||
|
||||
if (!partStatus_[partId] || datasetNo < 0 || patchId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
convertPatchPointField
|
||||
(
|
||||
fieldName,
|
||||
ptf.boundaryField()[patchId].patchInternalField()(),
|
||||
output,
|
||||
partInfoPatches_,
|
||||
datasetNo
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertPointFieldBlock
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const List<polyDecomp>& decompLst
|
||||
)
|
||||
{
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const label datasetNo = partDataset_[partId];
|
||||
|
||||
if (datasetNo >= 0 && partStatus_[partId])
|
||||
{
|
||||
convertPointField
|
||||
(
|
||||
ptf,
|
||||
GeometricField<Type, fvPatchField, volMesh>::null(),
|
||||
output,
|
||||
selector,
|
||||
datasetNo,
|
||||
decompLst[datasetNo]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertPointField
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo,
|
||||
const polyDecomp& decomp
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
const labelList& addPointCellLabels = decomp.addPointCellLabels();
|
||||
const labelList& pointMap = decomp.pointMap();
|
||||
|
||||
// use a pointMap or address directly into mesh
|
||||
label nPoints;
|
||||
if (pointMap.size())
|
||||
{
|
||||
nPoints = pointMap.size();
|
||||
}
|
||||
else
|
||||
{
|
||||
nPoints = ptf.size();
|
||||
}
|
||||
|
||||
vtkFloatArray *pointData = vtkFloatArray::New();
|
||||
pointData->SetNumberOfTuples(nPoints + addPointCellLabels.size());
|
||||
pointData->SetNumberOfComponents(nComp);
|
||||
pointData->Allocate(nComp*(nPoints + addPointCellLabels.size()));
|
||||
pointData->SetName(ptf.name().c_str());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convert convertPointField: "
|
||||
<< ptf.name()
|
||||
<< " size = " << nPoints
|
||||
<< " nComp=" << nComp
|
||||
<< " nTuples = " << (nPoints + addPointCellLabels.size())
|
||||
<< endl;
|
||||
}
|
||||
|
||||
float vec[nComp];
|
||||
|
||||
if (pointMap.size())
|
||||
{
|
||||
forAll(pointMap, i)
|
||||
{
|
||||
const Type& t = ptf[pointMap[i]];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i, vec);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(ptf, i)
|
||||
{
|
||||
const Type& t = ptf[i];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i, vec);
|
||||
}
|
||||
}
|
||||
|
||||
// continue insertion from here
|
||||
label i = nPoints;
|
||||
|
||||
if (&tf != &GeometricField<Type, fvPatchField, volMesh>::null())
|
||||
{
|
||||
forAll(addPointCellLabels, apI)
|
||||
{
|
||||
const Type& t = tf[addPointCellLabels[apI]];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i++, vec);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(addPointCellLabels, apI)
|
||||
{
|
||||
Type t = interpolatePointToCell(ptf, addPointCellLabels[apI]);
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
pointData->InsertTuple(i++, vec);
|
||||
}
|
||||
}
|
||||
|
||||
vtkUnstructuredGrid::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetPointData()
|
||||
->AddArray(pointData);
|
||||
|
||||
pointData->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,79 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamPoints_H
|
||||
#define vtkPV3FoamPoints_H
|
||||
|
||||
// VTK includes
|
||||
#include "vtkPoints.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
inline void vtkPV3FoamInsertNextPoint
|
||||
(
|
||||
vtkPoints *points,
|
||||
const Foam::point& p
|
||||
)
|
||||
{
|
||||
points->InsertNextPoint(p.x(), p.y(), p.z());
|
||||
}
|
||||
|
||||
#if 0
|
||||
// this should be faster, but didn't get it working ...
|
||||
inline void vtkPV3FoamSetPoint
|
||||
(
|
||||
vtkPoints *points,
|
||||
const Foam::label id,
|
||||
const Foam::point& p
|
||||
)
|
||||
{
|
||||
points->SetPoint(id, p.x(), p.y(), p.z());
|
||||
}
|
||||
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
inline vtkPoints* vtkPV3FoamVTKPoints(const Foam::pointField& points)
|
||||
{
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->SetNumberOfPoints(points.size());
|
||||
forAll(points, i)
|
||||
{
|
||||
const Foam::point& p = points[i];
|
||||
vtkpoints->SetPoint(i, p.x(), p.y(), p.z());
|
||||
}
|
||||
|
||||
return vtkpoints;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,522 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "cellSet.H"
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "IOobjectList.H"
|
||||
#include "IOPtrList.H"
|
||||
#include "polyBoundaryMeshEntries.H"
|
||||
#include "entry.H"
|
||||
#include "Cloud.H"
|
||||
#include "vtkPV3FoamReader.h"
|
||||
|
||||
// local headers
|
||||
#include "vtkPV3FoamAddToSelection.H"
|
||||
#include "vtkPV3FoamUpdateInfoFields.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Private Classes * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
//- A class for reading zone information without requiring a mesh
|
||||
class zonesEntries
|
||||
:
|
||||
public regIOobject,
|
||||
public PtrList<entry>
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
explicit zonesEntries(const IOobject& io)
|
||||
:
|
||||
regIOobject(io),
|
||||
PtrList<entry>(readStream("regIOobject"))
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
// Member functions
|
||||
|
||||
bool writeData(Ostream&) const
|
||||
{
|
||||
notImplemented("zonesEntries::writeData(Ostream&) const");
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType)
|
||||
{
|
||||
wordList zoneNames;
|
||||
|
||||
// mesh not loaded - read from file
|
||||
IOobject ioObj
|
||||
(
|
||||
zoneType,
|
||||
dbPtr_().findInstance
|
||||
(
|
||||
meshDir_,
|
||||
zoneType,
|
||||
IOobject::READ_IF_PRESENT
|
||||
),
|
||||
meshDir_,
|
||||
dbPtr_(),
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
);
|
||||
|
||||
if (ioObj.headerOk())
|
||||
{
|
||||
zonesEntries zones(ioObj);
|
||||
|
||||
zoneNames.setSize(zones.size());
|
||||
forAll(zones, zoneI)
|
||||
{
|
||||
zoneNames[zoneI] = zones[zoneI].keyword();
|
||||
}
|
||||
}
|
||||
|
||||
return zoneNames;
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoInternalMesh()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
|
||||
// Determine mesh parts (internalMesh, patches...)
|
||||
//- Add internal mesh as first entry
|
||||
partInfoVolume_ = partSelection->GetNumberOfArrays();
|
||||
partSelection->AddArray("internalMesh");
|
||||
partInfoVolume_ += 1;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
// just for debug info
|
||||
getSelectedArrayEntries(partSelection);
|
||||
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoLagrangian()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoLagrangian" << nl
|
||||
<< " " << dbPtr_->timePath()/cloud::prefix << endl;
|
||||
}
|
||||
|
||||
|
||||
// use the db directly since this might be called without a mesh,
|
||||
// but the region must get added back in
|
||||
fileName lagrangianPrefix(cloud::prefix);
|
||||
if (meshRegion_ != polyMesh::defaultRegion)
|
||||
{
|
||||
lagrangianPrefix = meshRegion_/cloud::prefix;
|
||||
}
|
||||
|
||||
// Search for list of lagrangian objects for this time
|
||||
fileNameList cloudDirs
|
||||
(
|
||||
readDir(dbPtr_->timePath()/lagrangianPrefix, fileName::DIRECTORY)
|
||||
);
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
partInfoLagrangian_ = partSelection->GetNumberOfArrays();
|
||||
|
||||
int nClouds = 0;
|
||||
forAll(cloudDirs, cloudI)
|
||||
{
|
||||
// Add cloud to GUI list
|
||||
partSelection->AddArray
|
||||
(
|
||||
(cloudDirs[cloudI] + " - lagrangian").c_str()
|
||||
);
|
||||
|
||||
++nClouds;
|
||||
}
|
||||
|
||||
partInfoLagrangian_ += nClouds;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
// just for debug info
|
||||
getSelectedArrayEntries(partSelection);
|
||||
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangian" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoPatches()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoPatches"
|
||||
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
partInfoPatches_ = partSelection->GetNumberOfArrays();
|
||||
|
||||
int nPatches = 0;
|
||||
if (meshPtr_)
|
||||
{
|
||||
const polyBoundaryMesh& patches = meshPtr_->boundaryMesh();
|
||||
forAll(patches, patchI)
|
||||
{
|
||||
const polyPatch& pp = patches[patchI];
|
||||
|
||||
if (pp.size())
|
||||
{
|
||||
// Add patch to GUI list
|
||||
partSelection->AddArray
|
||||
(
|
||||
(pp.name() + " - patch").c_str()
|
||||
);
|
||||
|
||||
++nPatches;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// mesh not loaded - read from file
|
||||
// but this could fail if we've supplied a bad region name
|
||||
IOobject ioObj
|
||||
(
|
||||
"boundary",
|
||||
dbPtr_().findInstance
|
||||
(
|
||||
meshDir_,
|
||||
"boundary",
|
||||
IOobject::READ_IF_PRESENT
|
||||
),
|
||||
meshDir_,
|
||||
dbPtr_(),
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
);
|
||||
|
||||
// this should only ever fail if the mesh region doesn't exist
|
||||
if (ioObj.headerOk())
|
||||
{
|
||||
polyBoundaryMeshEntries patchEntries(ioObj);
|
||||
|
||||
// Add (non-zero) patches to the list of mesh parts
|
||||
forAll(patchEntries, entryI)
|
||||
{
|
||||
label nFaces
|
||||
(
|
||||
readLabel(patchEntries[entryI].dict().lookup("nFaces"))
|
||||
);
|
||||
|
||||
// Valid patch if nFace > 0 - add patch to GUI list
|
||||
if (nFaces)
|
||||
{
|
||||
partSelection->AddArray
|
||||
(
|
||||
(patchEntries[entryI].keyword() + " - patch").c_str()
|
||||
);
|
||||
|
||||
++nPatches;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
partInfoPatches_ += nPatches;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
// just for debug info
|
||||
getSelectedArrayEntries(partSelection);
|
||||
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoPatches" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoZones()
|
||||
{
|
||||
if (!reader_->GetIncludeZones())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoZones"
|
||||
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
wordList namesLst;
|
||||
|
||||
//
|
||||
// cellZones information
|
||||
// ~~~~~~~~~~~~~~~~~~~~~
|
||||
if (meshPtr_)
|
||||
{
|
||||
namesLst = meshPtr_->cellZones().names();
|
||||
}
|
||||
else
|
||||
{
|
||||
namesLst = readZoneNames("cellZones");
|
||||
}
|
||||
|
||||
partInfoCellZones_ = partSelection->GetNumberOfArrays();
|
||||
forAll(namesLst, elemI)
|
||||
{
|
||||
partSelection->AddArray((namesLst[elemI] + " - cellZone").c_str());
|
||||
}
|
||||
partInfoCellZones_ += namesLst.size();
|
||||
|
||||
|
||||
//
|
||||
// faceZones information
|
||||
// ~~~~~~~~~~~~~~~~~~~~~
|
||||
if (meshPtr_)
|
||||
{
|
||||
namesLst = meshPtr_->faceZones().names();
|
||||
}
|
||||
else
|
||||
{
|
||||
namesLst = readZoneNames("faceZones");
|
||||
}
|
||||
|
||||
partInfoFaceZones_ = partSelection->GetNumberOfArrays();
|
||||
forAll(namesLst, elemI)
|
||||
{
|
||||
partSelection->AddArray
|
||||
(
|
||||
(namesLst[elemI] + " - faceZone").c_str()
|
||||
);
|
||||
}
|
||||
partInfoFaceZones_ += namesLst.size();
|
||||
|
||||
|
||||
//
|
||||
// pointZones information
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~
|
||||
if (meshPtr_)
|
||||
{
|
||||
namesLst = meshPtr_->pointZones().names();
|
||||
}
|
||||
else
|
||||
{
|
||||
namesLst = readZoneNames("pointZones");
|
||||
}
|
||||
|
||||
partInfoPointZones_ = partSelection->GetNumberOfArrays();
|
||||
forAll(namesLst, elemI)
|
||||
{
|
||||
partSelection->AddArray
|
||||
(
|
||||
(namesLst[elemI] + " - pointZone").c_str()
|
||||
);
|
||||
}
|
||||
partInfoPointZones_ += namesLst.size();
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
// just for debug info
|
||||
getSelectedArrayEntries(partSelection);
|
||||
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoZones" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoSets()
|
||||
{
|
||||
if (!reader_->GetIncludeSets())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoSets" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
|
||||
// Add names of sets
|
||||
IOobjectList objects
|
||||
(
|
||||
dbPtr_(),
|
||||
dbPtr_().findInstance(meshDir_, "faces", IOobject::READ_IF_PRESENT),
|
||||
meshDir_/"sets"
|
||||
);
|
||||
|
||||
|
||||
partInfoCellSets_ = partSelection->GetNumberOfArrays();
|
||||
partInfoCellSets_ += addToSelection<cellSet>
|
||||
(
|
||||
partSelection,
|
||||
objects,
|
||||
" - cellSet"
|
||||
);
|
||||
|
||||
partInfoFaceSets_ = partSelection->GetNumberOfArrays();
|
||||
partInfoFaceSets_ += addToSelection<faceSet>
|
||||
(
|
||||
partSelection,
|
||||
objects,
|
||||
" - faceSet"
|
||||
);
|
||||
|
||||
partInfoPointSets_ = partSelection->GetNumberOfArrays();
|
||||
partInfoPointSets_ += addToSelection<pointSet>
|
||||
(
|
||||
partSelection,
|
||||
objects,
|
||||
" - pointSet"
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
// just for debug info
|
||||
getSelectedArrayEntries(partSelection);
|
||||
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoSets" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfoLagrangianFields()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoLagrangianFields"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection *fieldSelection =
|
||||
reader_->GetLagrangianFieldSelection();
|
||||
|
||||
// preserve the enabled selections
|
||||
stringList enabledEntries = getSelectedArrayEntries(fieldSelection);
|
||||
fieldSelection->RemoveAllArrays();
|
||||
|
||||
//
|
||||
// TODO - currently only get fields from ONE cloud
|
||||
// have to decide if the second set of fields get mixed in
|
||||
// or dealt with separately
|
||||
|
||||
const partInfo& selector = partInfoLagrangian_;
|
||||
int partId = selector.start();
|
||||
|
||||
if (!selector.size() || partId < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
word cloudName = getPartName(partId);
|
||||
|
||||
// use the db directly since this might be called without a mesh,
|
||||
// but the region must get added back in
|
||||
fileName lagrangianPrefix(cloud::prefix);
|
||||
if (meshRegion_ != polyMesh::defaultRegion)
|
||||
{
|
||||
lagrangianPrefix = meshRegion_/cloud::prefix;
|
||||
}
|
||||
|
||||
IOobjectList objects
|
||||
(
|
||||
dbPtr_(),
|
||||
dbPtr_().timeName(),
|
||||
lagrangianPrefix/cloudName
|
||||
);
|
||||
|
||||
addToSelection<IOField<label> >
|
||||
(
|
||||
fieldSelection,
|
||||
objects
|
||||
);
|
||||
addToSelection<IOField<scalar> >
|
||||
(
|
||||
fieldSelection,
|
||||
objects
|
||||
);
|
||||
addToSelection<IOField<vector> >
|
||||
(
|
||||
fieldSelection,
|
||||
objects
|
||||
);
|
||||
addToSelection<IOField<sphericalTensor> >
|
||||
(
|
||||
fieldSelection,
|
||||
|
||||
objects
|
||||
);
|
||||
addToSelection<IOField<symmTensor> >
|
||||
(
|
||||
fieldSelection,
|
||||
objects
|
||||
);
|
||||
addToSelection<IOField<tensor> >
|
||||
(
|
||||
fieldSelection,
|
||||
objects
|
||||
);
|
||||
|
||||
// restore the enabled selections
|
||||
setSelectedArrayEntries(fieldSelection, enabledEntries);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangianFields - "
|
||||
<< "lagrangian objects.size() = " << objects.size() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,114 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamUpdateInfoFields_H
|
||||
#define vtkPV3FoamUpdateInfoFields_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<template<class> class patchType, class meshType>
|
||||
void Foam::vtkPV3Foam::updateInfoFields
|
||||
(
|
||||
vtkDataArraySelection *select
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfoFields <"
|
||||
<< meshType::Mesh::typeName
|
||||
<< "> [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
stringList enabledEntries;
|
||||
// enable 'p' and 'U' on the first call
|
||||
if (select->GetNumberOfArrays() == 0 && !meshPtr_)
|
||||
{
|
||||
enabledEntries.setSize(2);
|
||||
enabledEntries[0] = "p";
|
||||
enabledEntries[1] = "U";
|
||||
}
|
||||
else
|
||||
{
|
||||
// preserve the enabled selections
|
||||
enabledEntries = getSelectedArrayEntries(select);
|
||||
}
|
||||
|
||||
select->RemoveAllArrays();
|
||||
|
||||
// use the db directly since this might be called without a mesh,
|
||||
// but the region must get added back in
|
||||
word regionPrefix;
|
||||
if (meshRegion_ != polyMesh::defaultRegion)
|
||||
{
|
||||
regionPrefix = meshRegion_;
|
||||
}
|
||||
|
||||
// Search for list of objects for this time and mesh region
|
||||
IOobjectList objects(dbPtr_(), dbPtr_().timeName(), regionPrefix);
|
||||
|
||||
//- Add volume fields to GUI
|
||||
addToSelection<GeometricField<scalar, patchType, meshType> >
|
||||
(
|
||||
select,
|
||||
objects
|
||||
);
|
||||
addToSelection<GeometricField<vector, patchType, meshType> >
|
||||
(
|
||||
select,
|
||||
objects
|
||||
);
|
||||
addToSelection<GeometricField<sphericalTensor, patchType, meshType> >
|
||||
(
|
||||
select,
|
||||
objects
|
||||
);
|
||||
addToSelection<GeometricField<symmTensor, patchType, meshType> >
|
||||
(
|
||||
select,
|
||||
objects
|
||||
);
|
||||
addToSelection<GeometricField<tensor, patchType, meshType> >
|
||||
(
|
||||
select,
|
||||
objects
|
||||
);
|
||||
|
||||
// restore the enabled selections
|
||||
setSelectedArrayEntries(select, enabledEntries);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfoFields" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
// ************************************************************************* //
|
|
@ -1,341 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
Misc helper methods and utilities
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
#include "vtkPV3FoamReader.h"
|
||||
|
||||
// Foam includes
|
||||
#include "fvMesh.H"
|
||||
#include "foamTime.H"
|
||||
#include "IFstream.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkDataSet.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkInformation.h"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkPV3Foam::AddToBlock
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
vtkDataSet* dataset,
|
||||
const partInfo& selector,
|
||||
const label datasetNo,
|
||||
const string& datasetName
|
||||
)
|
||||
{
|
||||
const int blockNo = selector.block();
|
||||
|
||||
vtkDataObject* blockDO = output->GetBlock(blockNo);
|
||||
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
|
||||
|
||||
if (!block)
|
||||
{
|
||||
if (blockDO)
|
||||
{
|
||||
FatalErrorIn("Foam::vtkPV3Foam::AddToBlock")
|
||||
<< "Block already has a vtkDataSet assigned to it"
|
||||
<< endl;
|
||||
return;
|
||||
}
|
||||
|
||||
block = vtkMultiBlockDataSet::New();
|
||||
output->SetBlock(blockNo, block);
|
||||
block->Delete();
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "block[" << blockNo << "] has "
|
||||
<< block->GetNumberOfBlocks()
|
||||
<< " datasets prior to adding set " << datasetNo
|
||||
<< " with name: " << datasetName << endl;
|
||||
}
|
||||
|
||||
block->SetBlock(datasetNo, dataset);
|
||||
|
||||
// name the block when assigning dataset 0
|
||||
if (datasetNo == 0)
|
||||
{
|
||||
output->GetMetaData(blockNo)->Set
|
||||
(
|
||||
vtkCompositeDataSet::NAME(),
|
||||
selector.name()
|
||||
);
|
||||
}
|
||||
|
||||
if (datasetName.size())
|
||||
{
|
||||
block->GetMetaData(datasetNo)->Set
|
||||
(
|
||||
vtkCompositeDataSet::NAME(),
|
||||
datasetName.c_str()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo
|
||||
)
|
||||
{
|
||||
const int blockNo = selector.block();
|
||||
|
||||
vtkDataObject* blockDO = output->GetBlock(blockNo);
|
||||
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
|
||||
|
||||
if (block)
|
||||
{
|
||||
return vtkDataSet::SafeDownCast(block->GetBlock(datasetNo));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ununsed at the moment
|
||||
Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector
|
||||
)
|
||||
{
|
||||
const int blockNo = selector.block();
|
||||
|
||||
vtkDataObject* blockDO = output->GetBlock(blockNo);
|
||||
vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
|
||||
if (block)
|
||||
{
|
||||
return block->GetNumberOfBlocks();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Foam::word Foam::vtkPV3Foam::getPartName(int partId)
|
||||
{
|
||||
return getFirstWord(reader_->GetPartArrayName(partId));
|
||||
}
|
||||
|
||||
|
||||
Foam::wordHashSet Foam::vtkPV3Foam::getSelected
|
||||
(
|
||||
vtkDataArraySelection* select
|
||||
)
|
||||
{
|
||||
int nElem = select->GetNumberOfArrays();
|
||||
wordHashSet selections(2*nElem);
|
||||
|
||||
for (int elemI=0; elemI < nElem; ++elemI)
|
||||
{
|
||||
if (select->GetArraySetting(elemI))
|
||||
{
|
||||
selections.insert(getFirstWord(select->GetArrayName(elemI)));
|
||||
}
|
||||
}
|
||||
|
||||
return selections;
|
||||
}
|
||||
|
||||
|
||||
Foam::wordHashSet Foam::vtkPV3Foam::getSelected
|
||||
(
|
||||
vtkDataArraySelection* select,
|
||||
const partInfo& selector
|
||||
)
|
||||
{
|
||||
int nElem = select->GetNumberOfArrays();
|
||||
wordHashSet selections(2*nElem);
|
||||
|
||||
for (int elemI = selector.start(); elemI < selector.end(); ++elemI)
|
||||
{
|
||||
if (select->GetArraySetting(elemI))
|
||||
{
|
||||
selections.insert(getFirstWord(select->GetArrayName(elemI)));
|
||||
}
|
||||
}
|
||||
|
||||
return selections;
|
||||
}
|
||||
|
||||
|
||||
Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
|
||||
(
|
||||
vtkDataArraySelection* select
|
||||
)
|
||||
{
|
||||
stringList selections(select->GetNumberOfArrays());
|
||||
label nElem = 0;
|
||||
|
||||
forAll(selections, elemI)
|
||||
{
|
||||
if (select->GetArraySetting(elemI))
|
||||
{
|
||||
selections[nElem++] = select->GetArrayName(elemI);
|
||||
}
|
||||
}
|
||||
selections.setSize(nElem);
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
label nElem = select->GetNumberOfArrays();
|
||||
Info<< "available(";
|
||||
for (int elemI = 0; elemI < nElem; ++elemI)
|
||||
{
|
||||
Info<< " \"" << select->GetArrayName(elemI) << "\"";
|
||||
}
|
||||
Info<< " )\nselected(";
|
||||
|
||||
forAll(selections, elemI)
|
||||
{
|
||||
Info<< " " << selections[elemI];
|
||||
}
|
||||
Info<< " )\n";
|
||||
}
|
||||
|
||||
return selections;
|
||||
}
|
||||
|
||||
|
||||
Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
|
||||
(
|
||||
vtkDataArraySelection* select,
|
||||
const partInfo& selector
|
||||
)
|
||||
{
|
||||
stringList selections(selector.size());
|
||||
label nElem = 0;
|
||||
|
||||
for (int elemI = selector.start(); elemI < selector.end(); ++elemI)
|
||||
{
|
||||
if (select->GetArraySetting(elemI))
|
||||
{
|
||||
selections[nElem++] = select->GetArrayName(elemI);
|
||||
}
|
||||
}
|
||||
selections.setSize(nElem);
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "available(";
|
||||
for (int elemI = selector.start(); elemI < selector.end(); ++elemI)
|
||||
{
|
||||
Info<< " \"" << select->GetArrayName(elemI) << "\"";
|
||||
}
|
||||
Info<< " )\nselected(";
|
||||
|
||||
forAll(selections, elemI)
|
||||
{
|
||||
Info<< " " << selections[elemI];
|
||||
}
|
||||
Info<< " )\n";
|
||||
}
|
||||
|
||||
return selections;
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::setSelectedArrayEntries
|
||||
(
|
||||
vtkDataArraySelection* select,
|
||||
const stringList& selections
|
||||
)
|
||||
{
|
||||
const int nElem = select->GetNumberOfArrays();
|
||||
select->DisableAllArrays();
|
||||
|
||||
// Loop through entries, setting values from selectedEntries
|
||||
for (int elemI=0; elemI < nElem; ++elemI)
|
||||
{
|
||||
string arrayName(select->GetArrayName(elemI));
|
||||
|
||||
forAll(selections, elemI)
|
||||
{
|
||||
if (selections[elemI] == arrayName)
|
||||
{
|
||||
select->EnableArray(arrayName.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
// parse these bits of info from /proc/meminfo (Linux)
|
||||
//
|
||||
// MemTotal: 2062660 kB
|
||||
// MemFree: 1124400 kB
|
||||
//
|
||||
// used = MemTotal - MemFree is what the free(1) uses.
|
||||
//
|
||||
void Foam::vtkPV3Foam::printMemory()
|
||||
{
|
||||
const char* meminfo = "/proc/meminfo";
|
||||
|
||||
if (exists(meminfo))
|
||||
{
|
||||
IFstream is(meminfo);
|
||||
label memTotal = 0;
|
||||
label memFree = 0;
|
||||
|
||||
string line;
|
||||
|
||||
while (is.getLine(line).good())
|
||||
{
|
||||
char tag[32];
|
||||
int value;
|
||||
|
||||
if (sscanf(line.c_str(), "%30s %d", tag, &value) == 2)
|
||||
{
|
||||
if (!strcmp(tag, "MemTotal:"))
|
||||
{
|
||||
memTotal = value;
|
||||
}
|
||||
else if (!strcmp(tag, "MemFree:"))
|
||||
{
|
||||
memFree = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Info << "memUsed: " << (memTotal - memFree) << " kB\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,377 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV3Foam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV3FoamVolFields_H
|
||||
#define vtkPV3FoamVolFields_H
|
||||
|
||||
// Foam includes
|
||||
#include "emptyFvPatchField.H"
|
||||
#include "wallPolyPatch.H"
|
||||
#include "faceSet.H"
|
||||
#include "volPointInterpolation.H"
|
||||
|
||||
#include "vtkPV3FoamFaceField.H"
|
||||
#include "vtkPV3FoamPatchField.H"
|
||||
|
||||
#include "vtkFOAMTupleRemap.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertVolFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList,
|
||||
const IOobjectList& objects,
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
{
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
// restrict to GeometricField<Type, ...>
|
||||
if
|
||||
(
|
||||
iter()->headerClassName()
|
||||
!= GeometricField<Type, fvPatchField, volMesh>::typeName
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Load field
|
||||
GeometricField<Type, fvPatchField, volMesh> tf
|
||||
(
|
||||
*iter(),
|
||||
mesh
|
||||
);
|
||||
|
||||
// Interpolated field (demand driven)
|
||||
autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr;
|
||||
|
||||
|
||||
// Convert activated internalMesh regions
|
||||
convertVolFieldBlock
|
||||
(
|
||||
tf,
|
||||
ptfPtr,
|
||||
output,
|
||||
partInfoVolume_,
|
||||
regionPolyDecomp_
|
||||
);
|
||||
|
||||
// Convert activated cellZones
|
||||
convertVolFieldBlock
|
||||
(
|
||||
tf,
|
||||
ptfPtr,
|
||||
output,
|
||||
partInfoCellZones_,
|
||||
zonePolyDecomp_
|
||||
);
|
||||
|
||||
// Convert activated cellSets
|
||||
convertVolFieldBlock
|
||||
(
|
||||
tf,
|
||||
ptfPtr,
|
||||
output,
|
||||
partInfoCellSets_,
|
||||
csetPolyDecomp_
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Convert patches - if activated
|
||||
//
|
||||
|
||||
// The name for the interpolated patch point field must be consistent
|
||||
// with the interpolated volume point field.
|
||||
// This could be done better.
|
||||
const word pointFldName = "volPointInterpolate(" + tf.name() + ')';
|
||||
|
||||
for
|
||||
(
|
||||
int partId = partInfoPatches_.start();
|
||||
partId < partInfoPatches_.end();
|
||||
++partId
|
||||
)
|
||||
{
|
||||
const word patchName = getPartName(partId);
|
||||
const label datasetNo = partDataset_[partId];
|
||||
const label patchId = patches.findPatchID(patchName);
|
||||
|
||||
if (!partStatus_[partId] || datasetNo < 0 || patchId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const fvPatchField<Type>& ptf = tf.boundaryField()[patchId];
|
||||
|
||||
if
|
||||
(
|
||||
isType<emptyFvPatchField<Type> >(ptf)
|
||||
||
|
||||
(
|
||||
reader_->GetExtrapolatePatches()
|
||||
&& !polyPatch::constraintType(patches[patchId].type())
|
||||
)
|
||||
)
|
||||
{
|
||||
fvPatch p(ptf.patch().patch(), tf.mesh().boundary());
|
||||
|
||||
tmp<Field<Type> > tpptf
|
||||
(
|
||||
fvPatchField<Type>(p, tf).patchInternalField()
|
||||
);
|
||||
|
||||
convertPatchField
|
||||
(
|
||||
tf.name(),
|
||||
tpptf(),
|
||||
output,
|
||||
partInfoPatches_,
|
||||
datasetNo
|
||||
);
|
||||
|
||||
convertPatchPointField
|
||||
(
|
||||
pointFldName,
|
||||
ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
|
||||
output,
|
||||
partInfoPatches_,
|
||||
datasetNo
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
convertPatchField
|
||||
(
|
||||
tf.name(),
|
||||
ptf,
|
||||
output,
|
||||
partInfoPatches_,
|
||||
datasetNo
|
||||
);
|
||||
|
||||
convertPatchPointField
|
||||
(
|
||||
pointFldName,
|
||||
ppInterpList[patchId].faceToPointInterpolate(ptf)(),
|
||||
output,
|
||||
partInfoPatches_,
|
||||
datasetNo
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Convert face zones - if activated
|
||||
//
|
||||
for
|
||||
(
|
||||
int partId = partInfoFaceZones_.start();
|
||||
partId < partInfoFaceZones_.end();
|
||||
++partId
|
||||
)
|
||||
{
|
||||
const word zoneName = getPartName(partId);
|
||||
const label datasetNo = partDataset_[partId];
|
||||
|
||||
if (!partStatus_[partId] || datasetNo < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const faceZoneMesh& zMesh = mesh.faceZones();
|
||||
const label zoneId = zMesh.findZoneID(zoneName);
|
||||
|
||||
if (zoneId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
convertFaceField
|
||||
(
|
||||
tf,
|
||||
output,
|
||||
partInfoFaceZones_,
|
||||
datasetNo,
|
||||
mesh,
|
||||
zMesh[zoneId]
|
||||
);
|
||||
|
||||
// TODO: points
|
||||
}
|
||||
|
||||
//
|
||||
// Convert face sets - if activated
|
||||
//
|
||||
for
|
||||
(
|
||||
int partId = partInfoFaceSets_.start();
|
||||
partId < partInfoFaceSets_.end();
|
||||
++partId
|
||||
)
|
||||
{
|
||||
const word selectName = getPartName(partId);
|
||||
const label datasetNo = partDataset_[partId];
|
||||
|
||||
if (!partStatus_[partId] || datasetNo < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const faceSet fSet(mesh, selectName);
|
||||
|
||||
convertFaceField
|
||||
(
|
||||
tf,
|
||||
output,
|
||||
partInfoFaceSets_,
|
||||
datasetNo,
|
||||
mesh,
|
||||
fSet
|
||||
);
|
||||
|
||||
// TODO: points
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertVolFieldBlock
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
autoPtr<GeometricField<Type, pointPatchField, pointMesh> >& ptfPtr,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const List<polyDecomp>& decompLst
|
||||
)
|
||||
{
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const label datasetNo = partDataset_[partId];
|
||||
|
||||
if (datasetNo >= 0 && partStatus_[partId])
|
||||
{
|
||||
convertVolField
|
||||
(
|
||||
tf,
|
||||
output,
|
||||
selector,
|
||||
datasetNo,
|
||||
decompLst[datasetNo]
|
||||
);
|
||||
|
||||
if (!ptfPtr.valid())
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convertVolFieldBlock interpolating:" << tf.name()
|
||||
<< endl;
|
||||
}
|
||||
|
||||
ptfPtr.reset
|
||||
(
|
||||
volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr()
|
||||
);
|
||||
}
|
||||
|
||||
convertPointField
|
||||
(
|
||||
ptfPtr(),
|
||||
tf,
|
||||
output,
|
||||
selector,
|
||||
datasetNo,
|
||||
decompLst[datasetNo]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV3Foam::convertVolField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
const partInfo& selector,
|
||||
const label datasetNo,
|
||||
const polyDecomp& decompInfo
|
||||
)
|
||||
{
|
||||
const label nComp = pTraits<Type>::nComponents;
|
||||
const labelList& superCells = decompInfo.superCells();
|
||||
|
||||
vtkFloatArray* celldata = vtkFloatArray::New();
|
||||
celldata->SetNumberOfTuples(superCells.size());
|
||||
celldata->SetNumberOfComponents(nComp);
|
||||
celldata->Allocate(nComp*superCells.size());
|
||||
celldata->SetName(tf.name().c_str());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "convert volField: "
|
||||
<< tf.name()
|
||||
<< " size = " << tf.size()
|
||||
<< " nComp=" << nComp
|
||||
<< " nTuples = " << superCells.size() << endl;
|
||||
}
|
||||
|
||||
float vec[nComp];
|
||||
forAll(superCells, i)
|
||||
{
|
||||
const Type& t = tf[superCells[i]];
|
||||
for (direction d=0; d<nComp; d++)
|
||||
{
|
||||
vec[d] = component(t, d);
|
||||
}
|
||||
vtkFOAMTupleRemap<Type>(vec);
|
||||
|
||||
celldata->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
vtkUnstructuredGrid::SafeDownCast
|
||||
(
|
||||
GetDataSetFromBlock(output, selector, datasetNo)
|
||||
) ->GetCellData()
|
||||
->AddArray(celldata);
|
||||
|
||||
celldata->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
rm -rf PV4FoamReader/Make
|
||||
wclean vtkPV4Foam
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
|
@ -1,26 +0,0 @@
|
|||
#!/bin/bash
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
if [ -d "$PARAVIEW_DIR" -a -r "$PARAVIEW_DIR" ]
|
||||
then
|
||||
case "$PARAVIEW_VERSION" in
|
||||
4*)
|
||||
wmake libso vtkPV4Foam
|
||||
(
|
||||
cd PV4FoamReader
|
||||
mkdir -p Make/$WM_OPTIONS > /dev/null 2>&1
|
||||
cd Make/$WM_OPTIONS
|
||||
cmake ../..
|
||||
if [ "$WM_ARCH_BASE" == "darwin" ]
|
||||
then
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PV4FoamReader.dir/link.txt
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PV4FoamReader_SM.dir/link.txt
|
||||
fi
|
||||
make
|
||||
)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
|
@ -1,12 +0,0 @@
|
|||
vtkPV4Foam.C
|
||||
vtkPV4FoamFields.C
|
||||
vtkPV4FoamMesh.C
|
||||
vtkPV4FoamMeshLagrangian.C
|
||||
vtkPV4FoamMeshPatch.C
|
||||
vtkPV4FoamMeshSet.C
|
||||
vtkPV4FoamMeshVolume.C
|
||||
vtkPV4FoamMeshZone.C
|
||||
vtkPV4FoamUpdateInfo.C
|
||||
vtkPV4FoamUtilities.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libvtkPV4Foam
|
|
@ -1,13 +0,0 @@
|
|||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(PARAVIEW_INCLUDE_DIR) \
|
||||
-I../PV4FoamReader
|
||||
|
||||
LIB_LIBS = \
|
||||
-l$(WM_PROJECT) \
|
||||
-lfiniteVolume \
|
||||
-llagrangian \
|
||||
-lmeshTools \
|
||||
$(GLIBS)
|
|
@ -1,820 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
#include "vtkPV4FoamReader.h"
|
||||
|
||||
// Foam includes
|
||||
#include "fvMesh.H"
|
||||
#include "foamTime.H"
|
||||
#include "patchZones.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkRenderer.h"
|
||||
#include "vtkTextActor.h"
|
||||
#include "vtkTextProperty.h"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(Foam::vtkPV4Foam, 0);
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
#include "vtkPV4FoamAddToSelection.H"
|
||||
#include "vtkPV4FoamUpdateInfoFields.H"
|
||||
|
||||
void Foam::vtkPV4Foam::resetCounters()
|
||||
{
|
||||
// Reset mesh part ids and sizes
|
||||
partInfoVolume_.reset();
|
||||
partInfoPatches_.reset();
|
||||
partInfoLagrangian_.reset();
|
||||
partInfoCellZones_.reset();
|
||||
partInfoFaceZones_.reset();
|
||||
partInfoPointZones_.reset();
|
||||
partInfoCellSets_.reset();
|
||||
partInfoFaceSets_.reset();
|
||||
partInfoPointSets_.reset();
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::reduceMemory()
|
||||
{
|
||||
forAll(regionPolyDecomp_, i)
|
||||
{
|
||||
regionPolyDecomp_[i].clear();
|
||||
}
|
||||
|
||||
forAll(zonePolyDecomp_, i)
|
||||
{
|
||||
zonePolyDecomp_[i].clear();
|
||||
}
|
||||
|
||||
forAll(csetPolyDecomp_, i)
|
||||
{
|
||||
csetPolyDecomp_[i].clear();
|
||||
}
|
||||
|
||||
if (!reader_->GetCacheMesh())
|
||||
{
|
||||
delete meshPtr_;
|
||||
meshPtr_ = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int Foam::vtkPV4Foam::setTime(int nRequest, const double requestTimes[])
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::setTime(";
|
||||
for (int requestI = 0; requestI < nRequest; ++requestI)
|
||||
{
|
||||
if (requestI)
|
||||
{
|
||||
Info<< ", ";
|
||||
}
|
||||
|
||||
Info<< requestTimes[requestI];
|
||||
}
|
||||
Info << ") - previousIndex = " << timeIndex_ << endl;
|
||||
}
|
||||
|
||||
Time& runTime = dbPtr_();
|
||||
|
||||
// Get times list
|
||||
instantList Times = runTime.times();
|
||||
|
||||
int nearestIndex = timeIndex_;
|
||||
for (int requestI = 0; requestI < nRequest; ++requestI)
|
||||
{
|
||||
int index = Time::findClosestTimeIndex(Times, requestTimes[requestI]);
|
||||
if (index >= 0 && index != timeIndex_)
|
||||
{
|
||||
nearestIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nearestIndex < 0)
|
||||
{
|
||||
nearestIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
// see what has changed
|
||||
if (timeIndex_ != nearestIndex)
|
||||
{
|
||||
timeIndex_ = nearestIndex;
|
||||
runTime.setTime(Times[nearestIndex], nearestIndex);
|
||||
|
||||
// the fields change each time
|
||||
fieldsChanged_ = true;
|
||||
|
||||
if (meshPtr_)
|
||||
{
|
||||
if (meshPtr_->readUpdate() != polyMesh::UNCHANGED)
|
||||
{
|
||||
meshChanged_ = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
meshChanged_ = true;
|
||||
}
|
||||
|
||||
reader_->UpdateProgress(0.05);
|
||||
|
||||
// this seems to be needed for catching Lagrangian fields
|
||||
updateInfo();
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::setTime() - selectedTime="
|
||||
<< Times[nearestIndex].name() << " index=" << timeIndex_
|
||||
<< "/" << Times.size()
|
||||
<< " meshChanged=" << Switch(meshChanged_)
|
||||
<< " fieldsChanged=" << Switch(fieldsChanged_) << endl;
|
||||
}
|
||||
|
||||
return nearestIndex;
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::updateMeshPartsStatus()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::updateMeshPartsStatus" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* selection = reader_->GetPartSelection();
|
||||
label nElem = selection->GetNumberOfArrays();
|
||||
|
||||
if (partStatus_.size() != nElem)
|
||||
{
|
||||
partStatus_.setSize(nElem);
|
||||
partStatus_ = false;
|
||||
meshChanged_ = true;
|
||||
}
|
||||
|
||||
// this needs fixing if we wish to re-use the datasets
|
||||
partDataset_.setSize(nElem);
|
||||
partDataset_ = -1;
|
||||
|
||||
// Read the selected mesh parts (zones, patches ...) and add to list
|
||||
forAll(partStatus_, partId)
|
||||
{
|
||||
const int setting = selection->GetArraySetting(partId);
|
||||
|
||||
if (partStatus_[partId] != setting)
|
||||
{
|
||||
partStatus_[partId] = setting;
|
||||
meshChanged_ = true;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< " part[" << partId << "] = "
|
||||
<< partStatus_[partId]
|
||||
<< " : " << selection->GetArrayName(partId) << endl;
|
||||
}
|
||||
}
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::updateMeshPartsStatus" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkPV4Foam::vtkPV4Foam
|
||||
(
|
||||
const char* const FileName,
|
||||
vtkPV4FoamReader* reader
|
||||
)
|
||||
:
|
||||
reader_(reader),
|
||||
dbPtr_(NULL),
|
||||
meshPtr_(NULL),
|
||||
meshRegion_(polyMesh::defaultRegion),
|
||||
meshDir_(polyMesh::meshSubDir),
|
||||
timeIndex_(-1),
|
||||
meshChanged_(true),
|
||||
fieldsChanged_(true),
|
||||
partInfoVolume_("unzoned"),
|
||||
partInfoPatches_("patches"),
|
||||
partInfoLagrangian_("lagrangian"),
|
||||
partInfoCellZones_("cellZone"),
|
||||
partInfoFaceZones_("faceZone"),
|
||||
partInfoPointZones_("pointZone"),
|
||||
partInfoCellSets_("cellSet"),
|
||||
partInfoFaceSets_("faceSet"),
|
||||
partInfoPointSets_("pointSet")
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkPV4Foam::vtkPV4Foam - " << FileName << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// avoid argList and get rootPath/caseName directly from the file
|
||||
fileName fullCasePath(fileName(FileName).path());
|
||||
|
||||
if (!isDir(fullCasePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (fullCasePath == ".")
|
||||
{
|
||||
fullCasePath = cwd();
|
||||
}
|
||||
|
||||
// Set the case as an environment variable - some BCs might use this
|
||||
if (fullCasePath.name().find("processor", 0) == 0)
|
||||
{
|
||||
const fileName globalCase = fullCasePath.path();
|
||||
|
||||
setEnv("FOAM_CASE", globalCase, true);
|
||||
setEnv("FOAM_CASENAME", globalCase.name(), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
setEnv("FOAM_CASE", fullCasePath, true);
|
||||
setEnv("FOAM_CASENAME", fullCasePath.name(), true);
|
||||
}
|
||||
|
||||
// look for 'case{region}.FOAM'
|
||||
// could be stringent and insist the prefix match the directory name...
|
||||
// Note: cannot use fileName::name() due to the embedded '{}'
|
||||
string caseName(fileName(FileName).lessExt());
|
||||
string::size_type beg = caseName.find_last_of("/{");
|
||||
string::size_type end = caseName.find('}', beg);
|
||||
|
||||
if
|
||||
(
|
||||
beg != string::npos && caseName[beg] == '{'
|
||||
&& end != string::npos && end == caseName.size()-1
|
||||
)
|
||||
{
|
||||
meshRegion_ = caseName.substr(beg+1, end-beg-1);
|
||||
|
||||
// some safety
|
||||
if (!meshRegion_.size())
|
||||
{
|
||||
meshRegion_ = polyMesh::defaultRegion;
|
||||
}
|
||||
|
||||
if (meshRegion_ != polyMesh::defaultRegion)
|
||||
{
|
||||
meshDir_ = meshRegion_/polyMesh::meshSubDir;
|
||||
}
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "fullCasePath=" << fullCasePath << nl
|
||||
<< "FOAM_CASE=" << getEnv("FOAM_CASE") << nl
|
||||
<< "FOAM_CASENAME=" << getEnv("FOAM_CASENAME") << nl
|
||||
<< "region=" << meshRegion_ << endl;
|
||||
}
|
||||
|
||||
// Create time object
|
||||
dbPtr_.reset
|
||||
(
|
||||
new Time
|
||||
(
|
||||
Time::controlDictName,
|
||||
fileName(fullCasePath.path()),
|
||||
fileName(fullCasePath.name())
|
||||
)
|
||||
);
|
||||
|
||||
dbPtr_().functionObjects().off();
|
||||
|
||||
updateInfo();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkPV4Foam::~vtkPV4Foam()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::~vtkPV4Foam" << endl;
|
||||
}
|
||||
|
||||
delete meshPtr_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkPV4Foam::updateInfo()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::updateInfo"
|
||||
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] timeIndex="
|
||||
<< timeIndex_ << endl;
|
||||
}
|
||||
|
||||
resetCounters();
|
||||
|
||||
vtkDataArraySelection* partSelection = reader_->GetPartSelection();
|
||||
|
||||
// enable 'internalMesh' on the first call
|
||||
// or preserve the enabled selections
|
||||
stringList enabledEntries;
|
||||
if (!partSelection->GetNumberOfArrays() && !meshPtr_)
|
||||
{
|
||||
enabledEntries.setSize(1);
|
||||
enabledEntries[0] = "internalMesh";
|
||||
}
|
||||
else
|
||||
{
|
||||
enabledEntries = getSelectedArrayEntries(partSelection);
|
||||
}
|
||||
|
||||
// Clear current mesh parts list
|
||||
partSelection->RemoveAllArrays();
|
||||
|
||||
// Update mesh parts list - add Lagrangian at the bottom
|
||||
updateInfoInternalMesh();
|
||||
updateInfoPatches();
|
||||
updateInfoSets();
|
||||
updateInfoZones();
|
||||
updateInfoLagrangian();
|
||||
|
||||
// restore the enabled selections
|
||||
setSelectedArrayEntries(partSelection, enabledEntries);
|
||||
|
||||
if (meshChanged_)
|
||||
{
|
||||
fieldsChanged_ = true;
|
||||
}
|
||||
|
||||
// Update volume, point and lagrangian fields
|
||||
updateInfoFields<fvPatchField, volMesh>
|
||||
(
|
||||
reader_->GetVolFieldSelection()
|
||||
);
|
||||
updateInfoFields<pointPatchField, pointMesh>
|
||||
(
|
||||
reader_->GetPointFieldSelection()
|
||||
);
|
||||
updateInfoLagrangianFields();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::updateInfo" << endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::updateFoamMesh()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::updateFoamMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
if (!reader_->GetCacheMesh())
|
||||
{
|
||||
delete meshPtr_;
|
||||
meshPtr_ = NULL;
|
||||
}
|
||||
|
||||
// Check to see if the FOAM mesh has been created
|
||||
if (!meshPtr_)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating Foam mesh for region " << meshRegion_
|
||||
<< " at time=" << dbPtr_().timeName()
|
||||
<< endl;
|
||||
|
||||
}
|
||||
|
||||
meshPtr_ = new fvMesh
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
meshRegion_,
|
||||
dbPtr_().timeName(),
|
||||
dbPtr_(),
|
||||
IOobject::MUST_READ
|
||||
)
|
||||
);
|
||||
|
||||
meshChanged_ = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Using existing Foam mesh" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::updateFoamMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::Update
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
vtkMultiBlockDataSet* lagrangianOutput
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
cout<< "<beg> Foam::vtkPV4Foam::Update - output with "
|
||||
<< output->GetNumberOfBlocks() << " and "
|
||||
<< lagrangianOutput->GetNumberOfBlocks() << " blocks\n";
|
||||
output->Print(cout);
|
||||
lagrangianOutput->Print(cout);
|
||||
printMemory();
|
||||
}
|
||||
reader_->UpdateProgress(0.1);
|
||||
|
||||
// Set up mesh parts selection(s)
|
||||
updateMeshPartsStatus();
|
||||
|
||||
reader_->UpdateProgress(0.15);
|
||||
|
||||
// Update the Foam mesh
|
||||
updateFoamMesh();
|
||||
reader_->UpdateProgress(0.4);
|
||||
|
||||
// Convert meshes - start port0 at block=0
|
||||
int blockNo = 0;
|
||||
|
||||
convertMeshVolume(output, blockNo);
|
||||
convertMeshPatches(output, blockNo);
|
||||
reader_->UpdateProgress(0.6);
|
||||
|
||||
if (reader_->GetIncludeZones())
|
||||
{
|
||||
convertMeshCellZones(output, blockNo);
|
||||
convertMeshFaceZones(output, blockNo);
|
||||
convertMeshPointZones(output, blockNo);
|
||||
reader_->UpdateProgress(0.65);
|
||||
}
|
||||
|
||||
if (reader_->GetIncludeSets())
|
||||
{
|
||||
convertMeshCellSets(output, blockNo);
|
||||
convertMeshFaceSets(output, blockNo);
|
||||
convertMeshPointSets(output, blockNo);
|
||||
reader_->UpdateProgress(0.7);
|
||||
}
|
||||
|
||||
#ifdef VTKPV4FOAM_DUALPORT
|
||||
// restart port1 at block=0
|
||||
blockNo = 0;
|
||||
#endif
|
||||
convertMeshLagrangian(lagrangianOutput, blockNo);
|
||||
|
||||
reader_->UpdateProgress(0.8);
|
||||
|
||||
// Update fields
|
||||
convertVolFields(output);
|
||||
convertPointFields(output);
|
||||
convertLagrangianFields(lagrangianOutput);
|
||||
reader_->UpdateProgress(0.95);
|
||||
|
||||
meshChanged_ = fieldsChanged_ = false;
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::CleanUp()
|
||||
{
|
||||
// reclaim some memory
|
||||
reduceMemory();
|
||||
reader_->UpdateProgress(1.0);
|
||||
}
|
||||
|
||||
|
||||
double* Foam::vtkPV4Foam::findTimes(int& nTimeSteps)
|
||||
{
|
||||
int nTimes = 0;
|
||||
double* tsteps = NULL;
|
||||
|
||||
if (dbPtr_.valid())
|
||||
{
|
||||
Time& runTime = dbPtr_();
|
||||
instantList timeLst = runTime.times();
|
||||
|
||||
// find the first time for which this mesh appears to exist
|
||||
label timeI = 0;
|
||||
for (; timeI < timeLst.size(); ++timeI)
|
||||
{
|
||||
const word& timeName = timeLst[timeI].name();
|
||||
|
||||
if
|
||||
(
|
||||
isFile(runTime.path()/timeName/meshDir_/"points")
|
||||
&& IOobject("points", timeName, meshDir_, runTime).headerOk()
|
||||
)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
nTimes = timeLst.size() - timeI;
|
||||
|
||||
// always skip "constant" time if possible
|
||||
if (timeI == 0 && nTimes > 1)
|
||||
{
|
||||
timeI = 1;
|
||||
--nTimes;
|
||||
}
|
||||
|
||||
if (nTimes)
|
||||
{
|
||||
tsteps = new double[nTimes];
|
||||
for (label stepI = 0; stepI < nTimes; ++stepI, ++timeI)
|
||||
{
|
||||
tsteps[stepI] = timeLst[timeI].value();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
cout<< "no valid dbPtr:\n";
|
||||
}
|
||||
}
|
||||
|
||||
// vector length returned via the parameter
|
||||
nTimeSteps = nTimes;
|
||||
|
||||
return tsteps;
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::addPatchNames(vtkRenderer* renderer)
|
||||
{
|
||||
// Remove any patch names previously added to the renderer
|
||||
removePatchNames(renderer);
|
||||
|
||||
// get the display patches, strip off any suffix
|
||||
wordHashSet selectedPatches = getSelected
|
||||
(
|
||||
reader_->GetPartSelection(),
|
||||
partInfoPatches_
|
||||
);
|
||||
|
||||
if (!selectedPatches.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::addPatchNames" << nl
|
||||
<<"... add patches: " << selectedPatches << endl;
|
||||
}
|
||||
|
||||
const polyBoundaryMesh& pbMesh = meshPtr_->boundaryMesh();
|
||||
|
||||
// Find the total number of zones
|
||||
// Each zone will take the patch name
|
||||
// Number of zones per patch ... zero zones should be skipped
|
||||
labelList nZones(pbMesh.size(), 0);
|
||||
|
||||
// Per global zone number the average face centre position
|
||||
DynamicList<point> zoneCentre(pbMesh.size());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... determining patch zones" << endl;
|
||||
}
|
||||
|
||||
// Loop through all patches to determine zones, and centre of each zone
|
||||
forAll(pbMesh, patchI)
|
||||
{
|
||||
const polyPatch& pp = pbMesh[patchI];
|
||||
|
||||
// Only include the patch if it is selected
|
||||
if (!selectedPatches.found(pp.name()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const labelListList& edgeFaces = pp.edgeFaces();
|
||||
const vectorField& n = pp.faceNormals();
|
||||
|
||||
boolList featEdge(pp.nEdges(), false);
|
||||
|
||||
forAll(edgeFaces, edgeI)
|
||||
{
|
||||
const labelList& eFaces = edgeFaces[edgeI];
|
||||
|
||||
if (eFaces.size() == 1)
|
||||
{
|
||||
// Note: could also do ones with > 2 faces but this gives
|
||||
// too many zones for baffles
|
||||
featEdge[edgeI] = true;
|
||||
}
|
||||
else if (mag(n[eFaces[0]] & n[eFaces[1]]) < 0.5)
|
||||
{
|
||||
featEdge[edgeI] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Do topological analysis of patch, find disconnected regions
|
||||
patchZones pZones(pp, featEdge);
|
||||
|
||||
nZones[patchI] = pZones.nZones();
|
||||
|
||||
labelList zoneNFaces(pZones.nZones(), 0);
|
||||
|
||||
// Save start of information for current patch
|
||||
label patchStart = zoneCentre.size();
|
||||
|
||||
// Create storage for additional zone centres
|
||||
forAll(zoneNFaces, zoneI)
|
||||
{
|
||||
zoneCentre.append(vector::zero);
|
||||
}
|
||||
|
||||
// Do averaging per individual zone
|
||||
forAll(pp, faceI)
|
||||
{
|
||||
label zoneI = pZones[faceI];
|
||||
zoneCentre[patchStart+zoneI] += pp[faceI].centre(pp.points());
|
||||
zoneNFaces[zoneI]++;
|
||||
}
|
||||
|
||||
for (label i=0; i<nZones[patchI]; i++)
|
||||
{
|
||||
zoneCentre[patchStart + i] /= zoneNFaces[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Count number of zones we're actually going to display. This is truncated
|
||||
// to a max per patch
|
||||
|
||||
const label MAXPATCHZONES = 20;
|
||||
|
||||
label displayZoneI = 0;
|
||||
|
||||
forAll(pbMesh, patchI)
|
||||
{
|
||||
displayZoneI += min(MAXPATCHZONES, nZones[patchI]);
|
||||
}
|
||||
|
||||
|
||||
zoneCentre.shrink();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "patch zone centres = " << zoneCentre << nl
|
||||
<< "displayed zone centres = " << displayZoneI << nl
|
||||
<< "zones per patch = " << nZones << endl;
|
||||
}
|
||||
|
||||
// Set the size of the patch labels to max number of zones
|
||||
patchTextActorsPtrs_.setSize(displayZoneI);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "constructing patch labels" << endl;
|
||||
}
|
||||
|
||||
// Actor index
|
||||
displayZoneI = 0;
|
||||
|
||||
// Index in zone centres
|
||||
label globalZoneI = 0;
|
||||
|
||||
forAll(pbMesh, patchI)
|
||||
{
|
||||
const polyPatch& pp = pbMesh[patchI];
|
||||
|
||||
// Only selected patches will have a non-zero number of zones
|
||||
label nDisplayZones = min(MAXPATCHZONES, nZones[patchI]);
|
||||
label increment = 1;
|
||||
if (nZones[patchI] >= MAXPATCHZONES)
|
||||
{
|
||||
increment = nZones[patchI]/MAXPATCHZONES;
|
||||
}
|
||||
|
||||
for (label i = 0; i < nDisplayZones; i++)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "patch name = " << pp.name() << nl
|
||||
<< "anchor = " << zoneCentre[globalZoneI] << nl
|
||||
<< "globalZoneI = " << globalZoneI << endl;
|
||||
}
|
||||
|
||||
vtkTextActor* txt = vtkTextActor::New();
|
||||
|
||||
txt->SetInput(pp.name().c_str());
|
||||
|
||||
// Set text properties
|
||||
vtkTextProperty* tprop = txt->GetTextProperty();
|
||||
tprop->SetFontFamilyToArial();
|
||||
tprop->BoldOff();
|
||||
tprop->ShadowOff();
|
||||
tprop->SetLineSpacing(1.0);
|
||||
tprop->SetFontSize(12);
|
||||
tprop->SetColor(1.0, 0.0, 0.0);
|
||||
tprop->SetJustificationToCentered();
|
||||
|
||||
// Set text to use 3-D world co-ordinates
|
||||
txt->GetPositionCoordinate()->SetCoordinateSystemToWorld();
|
||||
|
||||
txt->GetPositionCoordinate()->SetValue
|
||||
(
|
||||
zoneCentre[globalZoneI].x(),
|
||||
zoneCentre[globalZoneI].y(),
|
||||
zoneCentre[globalZoneI].z()
|
||||
);
|
||||
|
||||
// Add text to each renderer
|
||||
renderer->AddViewProp(txt);
|
||||
|
||||
// Maintain a list of text labels added so that they can be
|
||||
// removed later
|
||||
patchTextActorsPtrs_[displayZoneI] = txt;
|
||||
|
||||
globalZoneI += increment;
|
||||
displayZoneI++;
|
||||
}
|
||||
}
|
||||
|
||||
// Resize the patch names list to the actual number of patch names added
|
||||
patchTextActorsPtrs_.setSize(displayZoneI);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::addPatchNames" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::removePatchNames(vtkRenderer* renderer)
|
||||
{
|
||||
forAll(patchTextActorsPtrs_, patchI)
|
||||
{
|
||||
renderer->RemoveViewProp(patchTextActorsPtrs_[patchI]);
|
||||
patchTextActorsPtrs_[patchI]->Delete();
|
||||
}
|
||||
patchTextActorsPtrs_.clear();
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::PrintSelf(ostream& os, vtkIndent indent) const
|
||||
{
|
||||
os << indent << "Number of nodes: "
|
||||
<< (meshPtr_ ? meshPtr_->nPoints() : 0) << "\n";
|
||||
|
||||
os << indent << "Number of cells: "
|
||||
<< (meshPtr_ ? meshPtr_->nCells() : 0) << "\n";
|
||||
|
||||
os << indent << "Number of available time steps: "
|
||||
<< (dbPtr_.valid() ? dbPtr_().times().size() : 0) << endl;
|
||||
|
||||
os << indent << "mesh region: " << meshRegion_ << "\n";
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,643 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "cellSet.H"
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "fvMeshSubset.H"
|
||||
#include "vtkPV4FoamReader.h"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkMultiBlockDataSet.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshVolume
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoVolume_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
// resize for decomposed polyhedra
|
||||
regionPolyDecomp_.setSize(selector.size());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshVolume" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Convert the internalMesh
|
||||
// this looks like more than one part, but it isn't
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word partName = "internalMesh";
|
||||
|
||||
if (!partStatus_[partId])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
vtkUnstructuredGrid* vtkmesh = volumeVTKMesh
|
||||
(
|
||||
mesh,
|
||||
regionPolyDecomp_[datasetNo]
|
||||
);
|
||||
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, partName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshVolume" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshLagrangian
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoLagrangian_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshLagrangian" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word cloudName = getPartName(partId);
|
||||
|
||||
if (!partStatus_[partId])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
vtkPolyData* vtkmesh = lagrangianVTKMesh(mesh, cloudName);
|
||||
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, cloudName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshLagrangian" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshPatches
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoPatches_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshPatches" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word patchName = getPartName(partId);
|
||||
const label patchId = patches.findPatchID(patchName);
|
||||
|
||||
if (!partStatus_[partId] || patchId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTK mesh for patch[" << patchId <<"] "
|
||||
<< patchName << endl;
|
||||
}
|
||||
|
||||
vtkPolyData* vtkmesh = patchVTKMesh(patches[patchId]);
|
||||
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, patchName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshPatches" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshCellZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoCellZones_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
// resize for decomposed polyhedra
|
||||
zonePolyDecomp_.setSize(selector.size());
|
||||
|
||||
if (!selector.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshCellZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
const cellZoneMesh& zMesh = mesh.cellZones();
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word zoneName = getPartName(partId);
|
||||
const label zoneId = zMesh.findZoneID(zoneName);
|
||||
|
||||
if (!partStatus_[partId] || zoneId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTK mesh for cellZone[" << zoneId << "] "
|
||||
<< zoneName << endl;
|
||||
}
|
||||
|
||||
fvMeshSubset subsetMesh
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"set",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
subsetMesh.setLargeCellSubset(labelHashSet(zMesh[zoneId]));
|
||||
|
||||
vtkUnstructuredGrid* vtkmesh = volumeVTKMesh
|
||||
(
|
||||
subsetMesh.subMesh(),
|
||||
zonePolyDecomp_[datasetNo]
|
||||
);
|
||||
|
||||
if (vtkmesh)
|
||||
{
|
||||
// superCells + addPointCellLabels must contain global cell ids
|
||||
inplaceRenumber
|
||||
(
|
||||
subsetMesh.cellMap(),
|
||||
zonePolyDecomp_[datasetNo].superCells()
|
||||
);
|
||||
inplaceRenumber
|
||||
(
|
||||
subsetMesh.cellMap(),
|
||||
zonePolyDecomp_[datasetNo].addPointCellLabels()
|
||||
);
|
||||
|
||||
// copy pointMap as well, otherwise pointFields fail
|
||||
zonePolyDecomp_[datasetNo].pointMap() = subsetMesh.pointMap();
|
||||
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshCellZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshCellSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoCellSets_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
// resize for decomposed polyhedra
|
||||
csetPolyDecomp_.setSize(selector.size());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshCellSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word partName = getPartName(partId);
|
||||
|
||||
if (!partStatus_[partId])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTK mesh for cellSet=" << partName << endl;
|
||||
}
|
||||
|
||||
const cellSet cSet(mesh, partName);
|
||||
|
||||
fvMeshSubset subsetMesh
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"set",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
subsetMesh.setLargeCellSubset(cSet);
|
||||
|
||||
vtkUnstructuredGrid* vtkmesh = volumeVTKMesh
|
||||
(
|
||||
subsetMesh.subMesh(),
|
||||
csetPolyDecomp_[datasetNo]
|
||||
);
|
||||
|
||||
if (vtkmesh)
|
||||
{
|
||||
// superCells + addPointCellLabels must contain global cell ids
|
||||
inplaceRenumber
|
||||
(
|
||||
subsetMesh.cellMap(),
|
||||
csetPolyDecomp_[datasetNo].superCells()
|
||||
);
|
||||
inplaceRenumber
|
||||
(
|
||||
subsetMesh.cellMap(),
|
||||
csetPolyDecomp_[datasetNo].addPointCellLabels()
|
||||
);
|
||||
|
||||
// copy pointMap as well, otherwise pointFields fail
|
||||
csetPolyDecomp_[datasetNo].pointMap() = subsetMesh.pointMap();
|
||||
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, partName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshCellSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshFaceZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoFaceZones_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
if (!selector.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshFaceZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
const faceZoneMesh& zMesh = mesh.faceZones();
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word zoneName = getPartName(partId);
|
||||
const label zoneId = zMesh.findZoneID(zoneName);
|
||||
|
||||
if (!partStatus_[partId] || zoneId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTKmesh for faceZone[" << zoneId << "] "
|
||||
<< zoneName << endl;
|
||||
}
|
||||
|
||||
vtkPolyData* vtkmesh = faceZoneVTKMesh(mesh, zMesh[zoneId]);
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshFaceZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshFaceSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoFaceSets_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshFaceSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
const word partName = getPartName(partId);
|
||||
|
||||
if (!partStatus_[partId])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTK mesh for faceSet=" << partName << endl;
|
||||
}
|
||||
|
||||
const faceSet fSet(mesh, partName);
|
||||
|
||||
vtkPolyData* vtkmesh = faceSetVTKMesh(mesh, fSet);
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, partName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshFaceSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshPointZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoPointZones_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshPointZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
if (selector.size())
|
||||
{
|
||||
const pointZoneMesh& zMesh = mesh.pointZones();
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
word zoneName = getPartName(partId);
|
||||
label zoneId = zMesh.findZoneID(zoneName);
|
||||
|
||||
if (!partStatus_[partId] || zoneId < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]);
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, zoneName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshPointZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertMeshPointSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
)
|
||||
{
|
||||
partInfo& selector = partInfoPointSets_;
|
||||
selector.block(blockNo); // set output block
|
||||
label datasetNo = 0; // restart at dataset 0
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertMeshPointSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
for (int partId = selector.start(); partId < selector.end(); ++partId)
|
||||
{
|
||||
word partName = getPartName(partId);
|
||||
|
||||
if (!partStatus_[partId])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Creating VTK mesh for pointSet=" << partName << endl;
|
||||
}
|
||||
|
||||
const pointSet pSet(mesh, partName);
|
||||
|
||||
vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet);
|
||||
if (vtkmesh)
|
||||
{
|
||||
AddToBlock(output, vtkmesh, selector, datasetNo, partName);
|
||||
vtkmesh->Delete();
|
||||
|
||||
partDataset_[partId] = datasetNo++;
|
||||
}
|
||||
}
|
||||
|
||||
// anything added?
|
||||
if (datasetNo)
|
||||
{
|
||||
++blockNo;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertMeshPointSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,99 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "polyPatch.H"
|
||||
#include "primitivePatch.H"
|
||||
#include "vtkPV4FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
#include "vtkPoints.h"
|
||||
#include "vtkPolyData.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::patchVTKMesh
|
||||
(
|
||||
const polyPatch& p
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = vtkPolyData::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::patchVTKMesh - " << p.name() << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
const Foam::pointField& points = p.localPoints();
|
||||
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( points.size() );
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
|
||||
// Add faces as polygons
|
||||
const faceList& faces = p.localFaces();
|
||||
|
||||
vtkCellArray* vtkcells = vtkCellArray::New();
|
||||
vtkcells->Allocate( faces.size() );
|
||||
forAll(faces, faceI)
|
||||
{
|
||||
const face& f = faces[faceI];
|
||||
vtkIdType nodeIds[f.size()];
|
||||
|
||||
forAll(f, fp)
|
||||
{
|
||||
nodeIds[fp] = f[fp];
|
||||
}
|
||||
vtkcells->InsertNextCell(f.size(), nodeIds);
|
||||
}
|
||||
|
||||
vtkmesh->SetPolys(vtkcells);
|
||||
vtkcells->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::patchVTKMesh - " << p.name() << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,354 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "fvMesh.H"
|
||||
#include "cellModeller.H"
|
||||
#include "vtkPV4FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkUnstructuredGrid* Foam::vtkPV4Foam::volumeVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
polyDecomp& decompInfo
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Number of additional points needed by the decomposition of polyhedra
|
||||
label nAddPoints = 0;
|
||||
|
||||
// Number of additional cells generated by the decomposition of polyhedra
|
||||
label nAddCells = 0;
|
||||
|
||||
labelList& superCells = decompInfo.superCells();
|
||||
labelList& addPointCellLabels = decompInfo.addPointCellLabels();
|
||||
|
||||
const cellModel& tet = *(cellModeller::lookup("tet"));
|
||||
const cellModel& pyr = *(cellModeller::lookup("pyr"));
|
||||
const cellModel& prism = *(cellModeller::lookup("prism"));
|
||||
const cellModel& wedge = *(cellModeller::lookup("wedge"));
|
||||
const cellModel& tetWedge = *(cellModeller::lookup("tetWedge"));
|
||||
const cellModel& hex = *(cellModeller::lookup("hex"));
|
||||
|
||||
// Scan for cells which need to be decomposed and count additional points
|
||||
// and cells
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... building cell-shapes" << endl;
|
||||
}
|
||||
const cellShapeList& cellShapes = mesh.cellShapes();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... scanning" << endl;
|
||||
}
|
||||
forAll(cellShapes, cellI)
|
||||
{
|
||||
const cellModel& model = cellShapes[cellI].model();
|
||||
|
||||
if
|
||||
(
|
||||
model != hex
|
||||
&& model != wedge
|
||||
&& model != prism
|
||||
&& model != pyr
|
||||
&& model != tet
|
||||
&& model != tetWedge
|
||||
)
|
||||
{
|
||||
const cell& cFaces = mesh.cells()[cellI];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
nAddCells += nQuads + nTris;
|
||||
}
|
||||
|
||||
nAddCells--;
|
||||
nAddPoints++;
|
||||
}
|
||||
}
|
||||
|
||||
// Set size of additional point addressing array
|
||||
// (from added point to original cell)
|
||||
addPointCellLabels.setSize(nAddPoints);
|
||||
|
||||
// Set size of additional cells mapping array
|
||||
// (from added cell to original cell)
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<<" mesh nCells = " << mesh.nCells() << nl
|
||||
<<" nPoints = " << mesh.nPoints() << nl
|
||||
<<" nAddCells = " << nAddCells << nl
|
||||
<<" nAddPoints = " << nAddPoints << endl;
|
||||
}
|
||||
|
||||
superCells.setSize(mesh.nCells() + nAddCells);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting points" << endl;
|
||||
}
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( mesh.nPoints() + nAddPoints );
|
||||
|
||||
const Foam::pointField& points = mesh.points();
|
||||
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting cells" << endl;
|
||||
}
|
||||
|
||||
vtkmesh->Allocate( mesh.nCells() + nAddCells );
|
||||
|
||||
// Set counters for additional points and additional cells
|
||||
label addPointI = 0, addCellI = 0;
|
||||
|
||||
// Create storage for points - needed for mapping from Foam to VTK
|
||||
// data types - max 'order' = hex = 8 points
|
||||
vtkIdType nodeIds[8];
|
||||
|
||||
forAll(cellShapes, cellI)
|
||||
{
|
||||
const cellShape& cellShape = cellShapes[cellI];
|
||||
const cellModel& cellModel = cellShape.model();
|
||||
|
||||
superCells[addCellI++] = cellI;
|
||||
|
||||
if (cellModel == tet)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == pyr)
|
||||
{
|
||||
for (int j = 0; j < 5; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == prism)
|
||||
{
|
||||
for (int j = 0; j < 6; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == tetWedge)
|
||||
{
|
||||
// Treat as squeezed prism
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[2];
|
||||
nodeIds[2] = cellShape[1];
|
||||
nodeIds[3] = cellShape[3];
|
||||
nodeIds[4] = cellShape[4];
|
||||
nodeIds[5] = cellShape[4];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == wedge)
|
||||
{
|
||||
// Treat as squeezed hex
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[1];
|
||||
nodeIds[2] = cellShape[2];
|
||||
nodeIds[3] = cellShape[2];
|
||||
nodeIds[4] = cellShape[3];
|
||||
nodeIds[5] = cellShape[4];
|
||||
nodeIds[6] = cellShape[5];
|
||||
nodeIds[7] = cellShape[6];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == hex)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Polyhedral cell. Decompose into tets + prisms.
|
||||
|
||||
// Mapping from additional point to cell
|
||||
addPointCellLabels[addPointI] = cellI;
|
||||
|
||||
// Insert the new vertex from the cell-centre
|
||||
label newVertexLabel = mesh.nPoints() + addPointI;
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, mesh.C()[cellI]);
|
||||
|
||||
// Whether to insert cell in place of original or not.
|
||||
bool substituteCell = true;
|
||||
|
||||
const labelList& cFaces = mesh.cells()[cellI];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
|
||||
label qpi = 0;
|
||||
|
||||
for (label quadi=0; quadi<nQuads; quadi++)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCellI++] = cellI;
|
||||
}
|
||||
|
||||
nodeIds[0] = f[0];
|
||||
nodeIds[1] = f[qpi + 1];
|
||||
nodeIds[2] = f[qpi + 2];
|
||||
nodeIds[3] = f[qpi + 3];
|
||||
nodeIds[4] = newVertexLabel;
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
|
||||
qpi += 2;
|
||||
}
|
||||
|
||||
if (nTris)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCellI++] = cellI;
|
||||
}
|
||||
|
||||
nodeIds[0] = f[0];
|
||||
nodeIds[1] = f[qpi + 1];
|
||||
nodeIds[2] = f[qpi + 2];
|
||||
nodeIds[3] = newVertexLabel;
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
addPointI++;
|
||||
}
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,173 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "vtkPV4FoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkPoints.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkCellArray.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::faceZoneVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const labelList& faceLabels
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = vtkPolyData::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::faceZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
// Construct primitivePatch of faces in faceZone
|
||||
|
||||
const faceList& meshFaces = mesh.allFaces();
|
||||
faceList patchFaces(faceLabels.size());
|
||||
label npf = 0;
|
||||
|
||||
// Filter faces that are not in live mesh
|
||||
// Bug fix. HJ, 21/Mar/2011
|
||||
forAll(faceLabels, faceI)
|
||||
{
|
||||
if (faceLabels[faceI] < mesh.nFaces())
|
||||
{
|
||||
patchFaces[npf] = meshFaces[faceLabels[faceI]];
|
||||
npf++;
|
||||
}
|
||||
}
|
||||
patchFaces.setSize(npf);
|
||||
|
||||
primitiveFacePatch p(patchFaces, mesh.points());
|
||||
|
||||
|
||||
// The balance of this routine should be identical to patchVTKMesh
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
const pointField& points = p.localPoints();
|
||||
|
||||
vtkPoints* vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate(points.size());
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
|
||||
// Add faces as polygons
|
||||
const faceList& faces = p.localFaces();
|
||||
|
||||
vtkCellArray* vtkcells = vtkCellArray::New();
|
||||
vtkcells->Allocate( faces.size() );
|
||||
|
||||
forAll(faces, faceI)
|
||||
{
|
||||
const face& f = faces[faceI];
|
||||
vtkIdType nodeIds[f.size()];
|
||||
|
||||
forAll(f, fp)
|
||||
{
|
||||
nodeIds[fp] = f[fp];
|
||||
}
|
||||
vtkcells->InsertNextCell(f.size(), nodeIds);
|
||||
}
|
||||
|
||||
vtkmesh->SetPolys(vtkcells);
|
||||
vtkcells->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::faceZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::pointZoneVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const labelList& pointLabels
|
||||
)
|
||||
{
|
||||
vtkPolyData* vtkmesh = vtkPolyData::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::pointZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
const pointField& meshPoints = mesh.allPoints();
|
||||
|
||||
// Filter point labels to include only live points
|
||||
labelList pl(pointLabels.size());
|
||||
label npl = 0;
|
||||
|
||||
forAll (pointLabels, pointI)
|
||||
{
|
||||
if (pointLabels[pointI] < mesh.nPoints())
|
||||
{
|
||||
pl[npl] = pointLabels[pointI];
|
||||
npl++;
|
||||
}
|
||||
}
|
||||
pl.setSize(npl);
|
||||
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate( pl.size());
|
||||
|
||||
forAll(pointLabels, pointI)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, meshPoints[pl[pointI]]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::pointZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
if [ -d "$ParaView_DIR" -a -r "$ParaView_DIR" ]
|
||||
then
|
||||
case "$ParaView_VERSION" in
|
||||
2*)
|
||||
wmake libso vtkFoam
|
||||
(
|
||||
cd PVFoamReader
|
||||
mkdir -p Make/$WM_OPTIONS > /dev/null 2>&1
|
||||
cd Make/$WM_OPTIONS
|
||||
cmake ../..
|
||||
make
|
||||
)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
|
@ -1,79 +0,0 @@
|
|||
# Set the project/library name here. Classes should be declared as
|
||||
# "class VTK_FoamReader_EXPORT vtkFoo", where PVFoamReader is the name of the
|
||||
# project set here.
|
||||
PROJECT(PVFoamReader)
|
||||
|
||||
# Set your list of sources here. Do not change the name of the
|
||||
# PVFoamReader_SRCS variable.
|
||||
SET(PVFoamReader_SRCS
|
||||
vtkFoamReader.cxx
|
||||
vtkFoamData.cxx
|
||||
)
|
||||
|
||||
# List the kits from VTK that are needed by this project. Do not
|
||||
# change the name of the PVFoamReader_LIBS variable.
|
||||
SET(PVFoamReader_LIBS
|
||||
vtkGraphics
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
$ENV{WM_PROJECT_DIR}/src/OpenFOAM/lnInclude
|
||||
$ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude
|
||||
$ENV{ParaView_INST_DIR}/include
|
||||
../vtkFoam/lnInclude
|
||||
)
|
||||
ADD_DEFINITIONS(-DWM_$ENV{WM_PRECISION_OPTION})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Most users should not need to change anything below this line.
|
||||
|
||||
# Need to include class headers and the configuration header.
|
||||
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
|
||||
INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})
|
||||
|
||||
# Import ParaView build settings.
|
||||
FIND_PACKAGE(ParaView)
|
||||
IF(NOT ParaView_FOUND)
|
||||
MESSAGE(FATAL_ERROR "ParaView is required. Set ParaView_DIR.")
|
||||
ENDIF(NOT ParaView_FOUND)
|
||||
IF(NOT PARAVIEW_BUILD_SHARED_LIBS)
|
||||
MESSAGE(FATAL_ERROR "ParaView must be built with BUILD_SHARED_LIBS ON.")
|
||||
ENDIF(NOT PARAVIEW_BUILD_SHARED_LIBS)
|
||||
INCLUDE(${PARAVIEW_USE_FILE})
|
||||
|
||||
# Configure output directories.
|
||||
SET (LIBRARY_OUTPUT_PATH $ENV{FOAM_LIBBIN} CACHE INTERNAL
|
||||
"Single output directory for building all libraries.")
|
||||
SET (EXECUTABLE_OUTPUT_PATH $ENV{FOAM_APPBIN} CACHE INTERNAL
|
||||
"Single output directory for building all executables.")
|
||||
|
||||
# Create the configuration header.
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReaderConfigure.h.in
|
||||
${PROJECT_BINARY_DIR}/vtk${PROJECT_NAME}Configure.h
|
||||
@ONLY IMMEDIATE)
|
||||
|
||||
# Must be defined before ADD_LIBRARY for cmake version 2.3.4-20060317
|
||||
LINK_DIRECTORIES($ENV{FOAM_LIBBIN})
|
||||
LINK_DIRECTORIES($ENV{FOAM_USER_LIBBIN})
|
||||
|
||||
# Create vtk client/server wrappers for the classes.
|
||||
VTK_WRAP_ClientServer(${PROJECT_NAME} PVFoamReaderCS_SRCS "${PVFoamReader_SRCS}")
|
||||
|
||||
# Build the package as a plugin for ParaView.
|
||||
ADD_LIBRARY(${PROJECT_NAME} MODULE ${PVFoamReader_SRCS} ${PVFoamReaderCS_SRCS})
|
||||
LINK_DIRECTORIES($ENV{ParaView_INST_DIR}/lib)
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} vtkClientServer)
|
||||
FOREACH(c ${PVFoamReader_LIBS})
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${c}CS)
|
||||
ENDFOREACH(c)
|
||||
|
||||
# Place the package configuration file into the build tree.
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReader.xml.in
|
||||
${PROJECT_BINARY_DIR}/../${PROJECT_NAME}.xml @ONLY IMMEDIATE)
|
||||
|
||||
# Place the package configuration file into the build tree.
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReader.pvsm.in
|
||||
${PROJECT_BINARY_DIR}/../${PROJECT_NAME}.pvsm @ONLY IMMEDIATE)
|
||||
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} OpenFOAM finiteVolume vtkFoam)
|
||||
#-----------------------------------------------------------------------------
|
|
@ -1,154 +0,0 @@
|
|||
<ServerManagerConfiguration>
|
||||
<ProxyGroup name="sources">
|
||||
<SourceProxy
|
||||
|
||||
name="FoamReader"
|
||||
class="vtkFoamReader">
|
||||
|
||||
<StringVectorProperty
|
||||
name="FileName"
|
||||
command="SetFileName"
|
||||
number_of_elements="1">
|
||||
<StringListDomain name="files"/>
|
||||
</StringVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="UpdateGUI"
|
||||
command="SetUpdateGUI"
|
||||
number_of_elements="1"
|
||||
default_values="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="CacheMesh"
|
||||
command="SetCacheMesh"
|
||||
number_of_elements="1"
|
||||
default_values="1">
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="TimeStepRangeInfo"
|
||||
command="GetTimeStepRange"
|
||||
information_only="1">
|
||||
<SimpleIntInformationHelper/>
|
||||
</IntVectorProperty>
|
||||
<IntVectorProperty
|
||||
name="TimeStep"
|
||||
command="SetTimeStep"
|
||||
number_of_elements="1"
|
||||
animateable="1"
|
||||
default_values="0">
|
||||
<IntRangeDomain name="range">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeStepRangeInfo" function="Range"/>
|
||||
</RequiredProperties>
|
||||
</IntRangeDomain>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="TimeStepLimitsInfo"
|
||||
command="GetTimeStepLimits"
|
||||
information_only="1">
|
||||
<SimpleIntInformationHelper/>
|
||||
</IntVectorProperty>
|
||||
<IntVectorProperty
|
||||
name="TimeStepLimits"
|
||||
command="SetTimeStepLimits"
|
||||
number_of_elements="2"
|
||||
default_values="2 5" >
|
||||
<IntRangeDomain name="range">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeStepLimitsInfo" function="Range"/>
|
||||
</RequiredProperties>
|
||||
</IntRangeDomain>
|
||||
</IntVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="TimeArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="Time"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="TimeStatus"
|
||||
command="SetTimeArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="TimeArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="RegionArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="Region"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="RegionStatus"
|
||||
command="SetRegionArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="RegionArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="RegionArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="VolFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="VolField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="VolFieldStatus"
|
||||
command="SetVolFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="VolFieldArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="VolFieldArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="PointFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="PointField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="PointFieldStatus"
|
||||
command="SetPointFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="PointFieldArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="PointFieldArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
</SourceProxy>
|
||||
</ProxyGroup>
|
||||
</ServerManagerConfiguration>
|
|
@ -1,71 +0,0 @@
|
|||
<ModuleInterfaces>
|
||||
<Library name="PVFoamReader"/>
|
||||
<ServerManagerFile name="PVFoamReader.pvsm"/>
|
||||
|
||||
<Module name="FoamReader"
|
||||
class="vtkPVAdvancedReaderModule"
|
||||
root_name="Foam"
|
||||
output="vtkDataSet"
|
||||
module_type="Reader"
|
||||
extensions=".foam"
|
||||
file_description="Foam case">
|
||||
|
||||
<Source class="vtkFoamReader"/>
|
||||
|
||||
<LabeledToggle
|
||||
label="Update GUI"
|
||||
trace_name="UpdateGUI"
|
||||
property="UpdateGUI"
|
||||
help="To update GUI without execution toggle this Accept and Reset."/>
|
||||
|
||||
<LabeledToggle
|
||||
label="Cache Mesh"
|
||||
trace_name="CacheMesh"
|
||||
property="CacheMesh"
|
||||
help="Cache the FOAM mesh between GUI selection changes."/>
|
||||
|
||||
<Scale
|
||||
property="TimeStep"
|
||||
trace_name="TimeStep"
|
||||
label="Time step"
|
||||
display_entry="0"
|
||||
display_value="1"
|
||||
entry_and_label_on_top="0"
|
||||
help="Select a time step."
|
||||
keeps_timesteps="1"
|
||||
range_source="TimeStepRange"/>
|
||||
|
||||
<VectorEntry
|
||||
property="TimeStepLimits"
|
||||
type="int"
|
||||
trace_name="TimeStepLimits"
|
||||
length="2"
|
||||
label="Lower and Upper Times"
|
||||
help="Maximum lower and upper number of time steps displayed in the selection list."/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Time"
|
||||
property="TimeStatus"
|
||||
trace_name="TimeArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Region"
|
||||
property="RegionStatus"
|
||||
trace_name="RegionArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Vol Field"
|
||||
property="VolFieldStatus"
|
||||
trace_name="CellArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Point Field"
|
||||
property="PointFieldStatus"
|
||||
trace_name="PointArrays"/>
|
||||
|
||||
<Documentation>
|
||||
ParaView Foam reader module
|
||||
</Documentation>
|
||||
</Module>
|
||||
|
||||
</ModuleInterfaces>
|
|
@ -1,154 +0,0 @@
|
|||
<ServerManagerConfiguration>
|
||||
<ProxyGroup name="sources">
|
||||
<SourceProxy
|
||||
|
||||
name="FoamReader"
|
||||
class="vtkFoamReader">
|
||||
|
||||
<StringVectorProperty
|
||||
name="FileName"
|
||||
command="SetFileName"
|
||||
number_of_elements="1">
|
||||
<StringListDomain name="files"/>
|
||||
</StringVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="UpdateGUI"
|
||||
command="SetUpdateGUI"
|
||||
number_of_elements="1"
|
||||
default_values="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="CacheMesh"
|
||||
command="SetCacheMesh"
|
||||
number_of_elements="1"
|
||||
default_values="1">
|
||||
<BooleanDomain name="bool"/>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="TimeStepRangeInfo"
|
||||
command="GetTimeStepRange"
|
||||
information_only="1">
|
||||
<SimpleIntInformationHelper/>
|
||||
</IntVectorProperty>
|
||||
<IntVectorProperty
|
||||
name="TimeStep"
|
||||
command="SetTimeStep"
|
||||
number_of_elements="1"
|
||||
animateable="1"
|
||||
default_values="0">
|
||||
<IntRangeDomain name="range">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeStepRangeInfo" function="Range"/>
|
||||
</RequiredProperties>
|
||||
</IntRangeDomain>
|
||||
</IntVectorProperty>
|
||||
|
||||
<IntVectorProperty
|
||||
name="TimeStepLimitsInfo"
|
||||
command="GetTimeStepLimits"
|
||||
information_only="1">
|
||||
<SimpleIntInformationHelper/>
|
||||
</IntVectorProperty>
|
||||
<IntVectorProperty
|
||||
name="TimeStepLimits"
|
||||
command="SetTimeStepLimits"
|
||||
number_of_elements="2"
|
||||
default_values="2 5" >
|
||||
<IntRangeDomain name="range">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeStepLimitsInfo" function="Range"/>
|
||||
</RequiredProperties>
|
||||
</IntRangeDomain>
|
||||
</IntVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="TimeArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="Time"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="TimeStatus"
|
||||
command="SetTimeArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="TimeArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="TimeArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="RegionArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="Region"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="RegionStatus"
|
||||
command="SetRegionArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="RegionArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="RegionArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="VolFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="VolField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="VolFieldStatus"
|
||||
command="SetVolFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="VolFieldArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="VolFieldArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
<StringVectorProperty
|
||||
name="PointFieldArrayInfo"
|
||||
information_only="1">
|
||||
<ArraySelectionInformationHelper attribute_name="PointField"/>
|
||||
</StringVectorProperty>
|
||||
<StringVectorProperty
|
||||
name="PointFieldStatus"
|
||||
command="SetPointFieldArrayStatus"
|
||||
number_of_elements="0"
|
||||
repeat_command="1"
|
||||
number_of_elements_per_command="2"
|
||||
element_types="2 0"
|
||||
information_property="PointFieldArrayInfo">
|
||||
<ArraySelectionDomain name="array_list">
|
||||
<RequiredProperties>
|
||||
<Property name="PointFieldArrayInfo"
|
||||
function="ArrayList"/>
|
||||
</RequiredProperties>
|
||||
</ArraySelectionDomain>
|
||||
</StringVectorProperty>
|
||||
|
||||
</SourceProxy>
|
||||
</ProxyGroup>
|
||||
</ServerManagerConfiguration>
|
|
@ -1,71 +0,0 @@
|
|||
<ModuleInterfaces>
|
||||
<Library name="@PROJECT_NAME@"/>
|
||||
<ServerManagerFile name="@PROJECT_NAME@.pvsm"/>
|
||||
|
||||
<Module name="FoamReader"
|
||||
class="vtkPVAdvancedReaderModule"
|
||||
root_name="Foam"
|
||||
output="vtkDataSet"
|
||||
module_type="Reader"
|
||||
extensions=".foam"
|
||||
file_description="Foam case">
|
||||
|
||||
<Source class="vtkFoamReader"/>
|
||||
|
||||
<LabeledToggle
|
||||
label="Update GUI"
|
||||
trace_name="UpdateGUI"
|
||||
property="UpdateGUI"
|
||||
help="To update GUI without execution toggle this Accept and Reset."/>
|
||||
|
||||
<LabeledToggle
|
||||
label="Cache Mesh"
|
||||
trace_name="CacheMesh"
|
||||
property="CacheMesh"
|
||||
help="Cache the FOAM mesh between GUI selection changes."/>
|
||||
|
||||
<Scale
|
||||
property="TimeStep"
|
||||
trace_name="TimeStep"
|
||||
label="Time step"
|
||||
display_entry="0"
|
||||
display_value="1"
|
||||
entry_and_label_on_top="0"
|
||||
help="Select a time step."
|
||||
keeps_timesteps="1"
|
||||
range_source="TimeStepRange"/>
|
||||
|
||||
<VectorEntry
|
||||
property="TimeStepLimits"
|
||||
type="int"
|
||||
trace_name="TimeStepLimits"
|
||||
length="2"
|
||||
label="Lower and Upper Times"
|
||||
help="Maximum lower and upper number of time steps displayed in the selection list."/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Time"
|
||||
property="TimeStatus"
|
||||
trace_name="TimeArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Region"
|
||||
property="RegionStatus"
|
||||
trace_name="RegionArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Vol Field"
|
||||
property="VolFieldStatus"
|
||||
trace_name="CellArrays"/>
|
||||
|
||||
<ArraySelection
|
||||
label_text="Point Field"
|
||||
property="PointFieldStatus"
|
||||
trace_name="PointArrays"/>
|
||||
|
||||
<Documentation>
|
||||
ParaView Foam reader module
|
||||
</Documentation>
|
||||
</Module>
|
||||
|
||||
</ModuleInterfaces>
|
|
@ -1,18 +0,0 @@
|
|||
/*=========================================================================
|
||||
This source has no copyright. It is intended to be copied by users
|
||||
wishing to create their own ParaView plugin classes locally.
|
||||
=========================================================================*/
|
||||
#ifndef __vtk@PROJECT_NAME@_h
|
||||
#define __vtk@PROJECT_NAME@_h
|
||||
|
||||
#if defined(_WIN32)
|
||||
# if defined(@PROJECT_NAME@_EXPORTS)
|
||||
# define VTK_@PROJECT_NAME@_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define VTK_@PROJECT_NAME@_EXPORT __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# define VTK_@PROJECT_NAME@_EXPORT
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,48 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include "vtkFoamData.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
|
||||
vtkCxxRevisionMacro(vtkFoamData, "$Revision: 1.20 $");
|
||||
vtkStandardNewMacro(vtkFoamData);
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
vtkFoamData::vtkFoamData()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
vtkFoamData::~vtkFoamData()
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,69 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
vtkFoamData
|
||||
|
||||
Description
|
||||
|
||||
SourceFiles
|
||||
vtkFoamData.cxx
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamData_h
|
||||
#define vtkFoamData_h
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkDataSetSource.h"
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkFoamData Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class VTK_IO_EXPORT vtkFoamData
|
||||
:
|
||||
public vtkDataSetSource
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
static vtkFoamData *New();
|
||||
vtkTypeRevisionMacro(vtkFoamData,vtkDataSetSource);
|
||||
|
||||
vtkFoamData();
|
||||
~vtkFoamData();
|
||||
|
||||
void SetNthOutput(int num, vtkDataObject *output)
|
||||
{
|
||||
vtkDataSetSource::SetNthOutput(num, output);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,410 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include "vtkFoamReader.h"
|
||||
|
||||
#include "vtkCallbackCommand.h"
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkDataArrayCollection.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkDataSet.h"
|
||||
#include "vtkErrorCode.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
#include "vtkFoam.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
vtkCxxRevisionMacro(vtkFoamReader, "$Revision: 1.20 $");
|
||||
vtkStandardNewMacro(vtkFoamReader);
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
vtkFoamReader::vtkFoamReader()
|
||||
{
|
||||
StoredOutputs = NULL;
|
||||
|
||||
FileName = NULL;
|
||||
foamData_ = NULL;
|
||||
|
||||
CacheMesh = 0;
|
||||
|
||||
UpdateGUI = 1;
|
||||
UpdateGUIOld = 1;
|
||||
TimeStep = 0;
|
||||
TimeStepRange[0] = 0;
|
||||
TimeStepRange[1] = 0;
|
||||
|
||||
TimeStepLimits[0] = 2;
|
||||
TimeStepLimits[1] = 5;
|
||||
|
||||
TimeSelection = vtkDataArraySelection::New();
|
||||
RegionSelection = vtkDataArraySelection::New();
|
||||
VolFieldSelection = vtkDataArraySelection::New();
|
||||
PointFieldSelection = vtkDataArraySelection::New();
|
||||
|
||||
// Setup the selection callback to modify this object when an array
|
||||
// selection is changed.
|
||||
SelectionObserver = vtkCallbackCommand::New();
|
||||
SelectionObserver->SetCallback(&vtkFoamReader::SelectionModifiedCallback);
|
||||
SelectionObserver->SetClientData(this);
|
||||
|
||||
TimeSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
RegionSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
VolFieldSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
PointFieldSelection->AddObserver
|
||||
(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this->SelectionObserver
|
||||
);
|
||||
|
||||
// This is needed by ParaView 2.?.?
|
||||
this->SetNumberOfOutputPorts(0);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
vtkFoamReader::~vtkFoamReader()
|
||||
{
|
||||
if (foamData_)
|
||||
{
|
||||
delete foamData_;
|
||||
}
|
||||
|
||||
if (StoredOutputs)
|
||||
{
|
||||
StoredOutputs->Delete();
|
||||
}
|
||||
|
||||
if (FileName)
|
||||
{
|
||||
delete [] FileName;
|
||||
}
|
||||
|
||||
TimeSelection->RemoveObserver(this->SelectionObserver);
|
||||
RegionSelection->RemoveObserver(this->SelectionObserver);
|
||||
VolFieldSelection->RemoveObserver(this->SelectionObserver);
|
||||
PointFieldSelection->RemoveObserver(this->SelectionObserver);
|
||||
SelectionObserver->Delete();
|
||||
|
||||
TimeSelection->Delete();
|
||||
RegionSelection->Delete();
|
||||
VolFieldSelection->Delete();
|
||||
PointFieldSelection->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void vtkFoamReader::ExecuteInformation()
|
||||
{
|
||||
if (!foamData_)
|
||||
{
|
||||
vtkDebugMacro( << "Reading Foam case" << FileName);
|
||||
foamData_ = new Foam::vtkFoam(FileName, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
foamData_->UpdateInformation();
|
||||
}
|
||||
|
||||
vtkDebugMacro( << "end of ExecuteInformation\n");
|
||||
}
|
||||
|
||||
|
||||
void vtkFoamReader::Execute()
|
||||
{
|
||||
if (!StoredOutputs)
|
||||
{
|
||||
foamData_->Update();
|
||||
|
||||
StoredOutputs = vtkFoamData::New();
|
||||
|
||||
for (int i = 0; i < GetNumberOfOutputs(); i++)
|
||||
{
|
||||
vtkDataObject* tmp = GetOutput(i);
|
||||
vtkDataObject* output = tmp->NewInstance();
|
||||
output->ShallowCopy(tmp);
|
||||
StoredOutputs->SetNthOutput(i, output);
|
||||
output->Delete();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < GetNumberOfOutputs(); i++)
|
||||
{
|
||||
vtkDataObject* output = GetOutput(i);
|
||||
int tempExtent[6];
|
||||
output->GetUpdateExtent(tempExtent);
|
||||
output->ShallowCopy(StoredOutputs->GetOutput(i));
|
||||
output->SetUpdateExtent(tempExtent);
|
||||
}
|
||||
|
||||
if (UpdateGUIOld == GetUpdateGUI())
|
||||
{
|
||||
foamData_->Update();
|
||||
|
||||
for (int i = 0; i < GetNumberOfOutputs(); i++)
|
||||
{
|
||||
vtkDataObject* tmp = GetOutput(i);
|
||||
vtkDataObject* output = tmp->NewInstance();
|
||||
output->ShallowCopy(tmp);
|
||||
StoredOutputs->SetNthOutput(i, output);
|
||||
output->Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpdateGUIOld = GetUpdateGUI();
|
||||
}
|
||||
|
||||
|
||||
void vtkFoamReader::SetFileName(const char *name)
|
||||
{
|
||||
if (name && !FileName || (FileName && !strcmp(FileName,name)))
|
||||
{
|
||||
if (!FileName)
|
||||
{
|
||||
FileName = new char[strlen(name) + 1];
|
||||
strcpy(FileName, name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
vtkErrorMacro("Changing case is not currently supported.\nPlease delete reader and create a new one for the new case.");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
if ( FileName && name && (!strcmp(FileName,name)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!name && !FileName)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (FileName)
|
||||
{
|
||||
delete [] FileName;
|
||||
}
|
||||
|
||||
FileName = new char[strlen(name) + 1];
|
||||
strcpy(FileName, name);
|
||||
|
||||
if (foamData_)
|
||||
{
|
||||
delete foamData_;
|
||||
foamData_ = NULL;
|
||||
|
||||
if (StoredOutputs)
|
||||
{
|
||||
StoredOutputs->Delete();
|
||||
StoredOutputs = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
Modified();
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
void vtkFoamReader::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
Superclass::PrintSelf(os,indent);
|
||||
|
||||
os << indent << "File Name: "
|
||||
<< (FileName ? FileName : "(none)") << "\n";
|
||||
}
|
||||
|
||||
|
||||
vtkDataArraySelection* vtkFoamReader::GetTimeSelection()
|
||||
{
|
||||
return TimeSelection;
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetNumberOfTimeArrays()
|
||||
{
|
||||
return TimeSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
const char* vtkFoamReader::GetTimeArrayName(int index)
|
||||
{
|
||||
return TimeSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetTimeArrayStatus(const char* name)
|
||||
{
|
||||
return TimeSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
void vtkFoamReader::SetTimeArrayStatus(const char* name, int status)
|
||||
{
|
||||
if(status)
|
||||
{
|
||||
TimeSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
vtkDataArraySelection* vtkFoamReader::GetRegionSelection()
|
||||
{
|
||||
return RegionSelection;
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetNumberOfRegionArrays()
|
||||
{
|
||||
return RegionSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
const char* vtkFoamReader::GetRegionArrayName(int index)
|
||||
{
|
||||
return RegionSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetRegionArrayStatus(const char* name)
|
||||
{
|
||||
return RegionSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
void vtkFoamReader::SetRegionArrayStatus(const char* name, int status)
|
||||
{
|
||||
if(status)
|
||||
{
|
||||
RegionSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
RegionSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
vtkDataArraySelection* vtkFoamReader::GetVolFieldSelection()
|
||||
{
|
||||
return VolFieldSelection;
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetNumberOfVolFieldArrays()
|
||||
{
|
||||
return VolFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
const char* vtkFoamReader::GetVolFieldArrayName(int index)
|
||||
{
|
||||
return VolFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetVolFieldArrayStatus(const char* name)
|
||||
{
|
||||
return VolFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
void vtkFoamReader::SetVolFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
if(status)
|
||||
{
|
||||
VolFieldSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
VolFieldSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
vtkDataArraySelection* vtkFoamReader::GetPointFieldSelection()
|
||||
{
|
||||
return PointFieldSelection;
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetNumberOfPointFieldArrays()
|
||||
{
|
||||
return PointFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
const char* vtkFoamReader::GetPointFieldArrayName(int index)
|
||||
{
|
||||
return PointFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
int vtkFoamReader::GetPointFieldArrayStatus(const char* name)
|
||||
{
|
||||
return PointFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
void vtkFoamReader::SetPointFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
if(status)
|
||||
{
|
||||
PointFieldSelection->EnableArray(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
PointFieldSelection->DisableArray(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void vtkFoamReader::SelectionModifiedCallback
|
||||
(
|
||||
vtkObject*,
|
||||
unsigned long,
|
||||
void* clientdata,
|
||||
void*
|
||||
)
|
||||
{
|
||||
static_cast<vtkFoamReader*>(clientdata)->SelectionModified();
|
||||
}
|
||||
|
||||
void vtkFoamReader::SelectionModified()
|
||||
{
|
||||
Modified();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,199 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
vtkFoamReader
|
||||
|
||||
Description
|
||||
|
||||
SourceFiles
|
||||
vtkFoamReader.cxx
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamReader_h
|
||||
#define vtkFoamReader_h
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkDataSetSource.h"
|
||||
#include "vtkFoamData.h"
|
||||
|
||||
// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
class vtkFoam;
|
||||
}
|
||||
|
||||
class vtkPoints;
|
||||
class vtkDataArraySelection;
|
||||
class vtkDataArrayCollection;
|
||||
class vtkCallbackCommand;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkFoamReader Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class VTK_IO_EXPORT vtkFoamReader
|
||||
:
|
||||
public vtkDataSetSource
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//- Standard VTK class creation function
|
||||
static vtkFoamReader *New();
|
||||
|
||||
//- Standard VTK class type and revision declaration macro
|
||||
vtkTypeRevisionMacro(vtkFoamReader,vtkDataSetSource);
|
||||
|
||||
//- Standard VTK class print function
|
||||
void PrintSelf(ostream& os, vtkIndent indent);
|
||||
|
||||
// File name of FOAM datafile to read
|
||||
void SetFileName(const char *);
|
||||
//vtkSetStringMacro(FileName);
|
||||
vtkGetStringMacro(FileName);
|
||||
|
||||
// GUI update control
|
||||
vtkSetMacro(UpdateGUI, int);
|
||||
vtkGetMacro(UpdateGUI, int);
|
||||
|
||||
// FOAM mesh caching control
|
||||
vtkSetMacro(CacheMesh, int);
|
||||
vtkGetMacro(CacheMesh, int);
|
||||
|
||||
// Time-step slider control
|
||||
vtkSetMacro(TimeStep, int);
|
||||
vtkGetMacro(TimeStep, int);
|
||||
vtkSetVector2Macro(TimeStepRange, int);
|
||||
vtkGetVector2Macro(TimeStepRange, int);
|
||||
|
||||
// Control of the upper and lower limits on the number of times
|
||||
// displayed in the selection list
|
||||
vtkSetVector2Macro(TimeStepLimits, int);
|
||||
vtkGetVector2Macro(TimeStepLimits, int);
|
||||
|
||||
// Time selection list control
|
||||
vtkDataArraySelection* GetTimeSelection();
|
||||
int GetNumberOfTimeArrays();
|
||||
const char* GetTimeArrayName(int index);
|
||||
int GetTimeArrayStatus(const char* name);
|
||||
void SetTimeArrayStatus(const char* name, int status);
|
||||
|
||||
// Region selection list control
|
||||
vtkDataArraySelection* GetRegionSelection();
|
||||
int GetNumberOfRegionArrays();
|
||||
const char* GetRegionArrayName(int index);
|
||||
int GetRegionArrayStatus(const char* name);
|
||||
void SetRegionArrayStatus(const char* name, int status);
|
||||
|
||||
// volField selection list control
|
||||
vtkDataArraySelection* GetVolFieldSelection();
|
||||
int GetNumberOfVolFieldArrays();
|
||||
const char* GetVolFieldArrayName(int index);
|
||||
int GetVolFieldArrayStatus(const char* name);
|
||||
void SetVolFieldArrayStatus(const char* name, int status);
|
||||
|
||||
// pointField selection list control
|
||||
vtkDataArraySelection* GetPointFieldSelection();
|
||||
int GetNumberOfPointFieldArrays();
|
||||
const char* GetPointFieldArrayName(int index);
|
||||
int GetPointFieldArrayStatus(const char* name);
|
||||
void SetPointFieldArrayStatus(const char* name, int status);
|
||||
|
||||
// SetNthOutput provided so that vtkFoam can access it
|
||||
void SetNthOutput(int num, vtkDataObject *output)
|
||||
{
|
||||
vtkDataSetSource::SetNthOutput(num, output);
|
||||
}
|
||||
|
||||
// Standard VTK ExecuteInformation function overriding the base-class.
|
||||
// Called by ParaView before GUI is displayed.
|
||||
virtual void ExecuteInformation();
|
||||
|
||||
// Callback registered with the SelectionObserver
|
||||
// for all the selection lists
|
||||
static void SelectionModifiedCallback
|
||||
(
|
||||
vtkObject* caller,
|
||||
unsigned long eid,
|
||||
void* clientdata,
|
||||
void* calldata
|
||||
);
|
||||
|
||||
void SelectionModified();
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
vtkFoamReader();
|
||||
~vtkFoamReader();
|
||||
|
||||
// Standard VTK execute function overriding the base-class.
|
||||
// Called by ParaView when Accept is pressed.
|
||||
void Execute();
|
||||
|
||||
// Cache for the outputs. These are stored before the end of Execute()
|
||||
// and re-instated at the beginning because the Outputs would disappear
|
||||
// otherwise.
|
||||
vtkFoamData* StoredOutputs;
|
||||
|
||||
// FOAM file name (*.foam)
|
||||
char *FileName;
|
||||
|
||||
//BTX
|
||||
Foam::vtkFoam* foamData_;
|
||||
//ETX
|
||||
|
||||
int CacheMesh;
|
||||
|
||||
int UpdateGUI;
|
||||
int UpdateGUIOld;
|
||||
int TimeStep;
|
||||
int TimeStepRange[2];
|
||||
|
||||
int TimeStepLimits[2];
|
||||
|
||||
vtkDataArraySelection* TimeSelection;
|
||||
vtkDataArraySelection* RegionSelection;
|
||||
vtkDataArraySelection* VolFieldSelection;
|
||||
vtkDataArraySelection* PointFieldSelection;
|
||||
|
||||
// The observer to modify this object when the array selections are modified
|
||||
vtkCallbackCommand* SelectionObserver;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
vtkFoamReader(const vtkFoamReader&); // Not implemented.
|
||||
void operator=(const vtkFoamReader&); // Not implemented.
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,531 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: $RCSfile: vtkPVFoamSelectTimeSet.cxx,v $
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtkPVFoamSelectTimeSet.h"
|
||||
|
||||
#include "vtkDataArrayCollection.h"
|
||||
#include "vtkFloatArray.h"
|
||||
#include "vtkKWFrame.h"
|
||||
#include "vtkKWLabel.h"
|
||||
#include "vtkKWLabeledFrame.h"
|
||||
#include "vtkKWMenu.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkPVAnimationInterfaceEntry.h"
|
||||
#include "vtkPVApplication.h"
|
||||
#include "vtkPVProcessModule.h"
|
||||
#include "vtkPVScalarListWidgetProperty.h"
|
||||
#include "vtkPVSource.h"
|
||||
#include "vtkPVXMLElement.h"
|
||||
|
||||
#include <vtkstd/string>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkStandardNewMacro(vtkPVFoamSelectTimeSet);
|
||||
vtkCxxRevisionMacro(vtkPVFoamSelectTimeSet, "$Revision: 1.39 $");
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int vtkDataArrayCollectionCommand(ClientData cd, Tcl_Interp *interp,
|
||||
int argc, char *argv[]);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkPVFoamSelectTimeSet::vtkPVFoamSelectTimeSet()
|
||||
{
|
||||
this->LabeledFrame = vtkKWLabeledFrame::New();
|
||||
this->LabeledFrame->SetParent(this);
|
||||
|
||||
this->TimeLabel = vtkKWLabel::New();
|
||||
this->TimeLabel->SetParent(this->LabeledFrame->GetFrame());
|
||||
|
||||
this->TreeFrame = vtkKWWidget::New();
|
||||
this->TreeFrame->SetParent(this->LabeledFrame->GetFrame());
|
||||
|
||||
this->Tree = vtkKWWidget::New();
|
||||
this->Tree->SetParent(this->TreeFrame);
|
||||
|
||||
this->TimeValue = 0.0;
|
||||
|
||||
this->FrameLabel = 0;
|
||||
|
||||
this->TimeSets = vtkDataArrayCollection::New();
|
||||
|
||||
this->Property = 0;
|
||||
|
||||
this->SetCommand = 0;
|
||||
this->ServerSideID.ID = 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkPVFoamSelectTimeSet::~vtkPVFoamSelectTimeSet()
|
||||
{
|
||||
this->LabeledFrame->Delete();
|
||||
this->Tree->Delete();
|
||||
this->TreeFrame->Delete();
|
||||
this->TimeLabel->Delete();
|
||||
this->SetFrameLabel(0);
|
||||
this->TimeSets->Delete();
|
||||
this->SetSetCommand(0);
|
||||
if(this->ServerSideID.ID)
|
||||
{
|
||||
vtkPVProcessModule* pm = this->GetPVApplication()->GetProcessModule();
|
||||
pm->DeleteStreamObject(this->ServerSideID);
|
||||
pm->SendStream(vtkProcessModule::DATA_SERVER);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SetLabel(const char* label)
|
||||
{
|
||||
this->SetFrameLabel(label);
|
||||
if (this->GetApplication())
|
||||
{
|
||||
this->LabeledFrame->SetLabel(label);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
const char* vtkPVFoamSelectTimeSet::GetLabel()
|
||||
{
|
||||
return this->GetFrameLabel();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::Create(vtkKWApplication *pvApp)
|
||||
{
|
||||
// Call the superclass to create the widget and set the appropriate flags
|
||||
|
||||
if (!this->vtkKWWidget::Create(pvApp, "frame", "-bd 2 -relief flat"))
|
||||
{
|
||||
vtkErrorMacro("Failed creating widget " << this->GetClassName());
|
||||
return;
|
||||
}
|
||||
|
||||
// For getting the widget in a script.
|
||||
if ((this->TraceNameState == vtkPVWidget::Uninitialized ||
|
||||
this->TraceNameState == vtkPVWidget::Default) )
|
||||
{
|
||||
this->SetTraceName("FoamSelectTimeSet");
|
||||
this->SetTraceNameState(vtkPVWidget::SelfInitialized);
|
||||
}
|
||||
|
||||
this->LabeledFrame->Create(this->GetApplication(), 0);
|
||||
if (this->FrameLabel)
|
||||
{
|
||||
this->LabeledFrame->SetLabel(this->FrameLabel);
|
||||
}
|
||||
this->TimeLabel->Create(this->GetApplication(), "");
|
||||
|
||||
char label[32];
|
||||
sprintf(label, "Time value: %12.5e", 0.0);
|
||||
this->TimeLabel->SetLabel(label);
|
||||
this->Script("pack %s", this->TimeLabel->GetWidgetName());
|
||||
|
||||
this->TreeFrame->Create(this->GetApplication(), "ScrolledWindow",
|
||||
"-relief sunken -bd 2");
|
||||
|
||||
this->Tree->Create(this->GetApplication(), "Tree",
|
||||
"-background white -bd 0 -width 15 -padx 2 "
|
||||
"-redraw 1 -relief flat -selectbackground red");
|
||||
this->Script("%s bindText <ButtonPress-1> {%s SetTimeValueCallback}",
|
||||
this->Tree->GetWidgetName(), this->GetTclName());
|
||||
this->Script("%s setwidget %s", this->TreeFrame->GetWidgetName(),
|
||||
this->Tree->GetWidgetName());
|
||||
|
||||
this->Script("pack %s -expand t -fill x", this->TreeFrame->GetWidgetName());
|
||||
|
||||
this->Script("pack %s -side top -expand t -fill x",
|
||||
this->LabeledFrame->GetWidgetName());
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SetTimeValue(float time)
|
||||
{
|
||||
if (this->TimeValue != time ||
|
||||
!this->TimeLabel->GetLabel() ||
|
||||
!strcmp(this->TimeLabel->GetLabel(), "No timesets available."))
|
||||
{
|
||||
this->TimeValue = time;
|
||||
|
||||
char label[32];
|
||||
sprintf(label, "Time value: %12.5e", time);
|
||||
this->TimeLabel->SetLabel(label);
|
||||
this->Modified();
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SetTimeValueCallback(const char* item)
|
||||
{
|
||||
if (this->TimeSets->GetNumberOfItems() == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( strncmp(item, "timeset", strlen("timeset")) == 0 )
|
||||
{
|
||||
this->Script("if [%s itemcget %s -open] "
|
||||
"{%s closetree %s} else {%s opentree %s}",
|
||||
this->Tree->GetWidgetName(), item,
|
||||
this->Tree->GetWidgetName(), item,
|
||||
this->Tree->GetWidgetName(), item);
|
||||
return;
|
||||
}
|
||||
|
||||
this->Script("%s selection set %s", this->Tree->GetWidgetName(),
|
||||
item);
|
||||
this->Script("%s itemcget %s -data", this->Tree->GetWidgetName(),
|
||||
item);
|
||||
const char* result = this->GetApplication()->GetMainInterp()->result;
|
||||
if (result[0] == '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int index[2];
|
||||
sscanf(result, "%d %d", &(index[0]), &(index[1]));
|
||||
|
||||
this->SetTimeSetsFromReader();
|
||||
this->SetTimeValue(this->TimeSets->GetItem(index[0])->GetTuple1(index[1]));
|
||||
this->ModifiedCallback();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::AddRootNode(const char* name, const char* text)
|
||||
{
|
||||
if (!this->GetApplication())
|
||||
{
|
||||
return;
|
||||
}
|
||||
this->Script("%s insert end root %s -text {%s}", this->Tree->GetWidgetName(),
|
||||
name, text);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::AddChildNode(const char* parent, const char* name,
|
||||
const char* text, const char* data)
|
||||
{
|
||||
if (!this->GetApplication())
|
||||
{
|
||||
return;
|
||||
}
|
||||
this->Script("%s insert end %s %s -text {%s} -data %s",
|
||||
this->Tree->GetWidgetName(), parent, name, text, data);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SaveInBatchScript(ofstream *file)
|
||||
{
|
||||
*file << " [$pvTemp" << this->PVSource->GetVTKSourceID(0)
|
||||
<< " GetProperty " << this->SetCommand << "] SetElements1 "
|
||||
<< this->Property->GetScalar(0) << endl;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::AcceptInternal(vtkClientServerID sourceID)
|
||||
{
|
||||
if (this->ModifiedFlag)
|
||||
{
|
||||
this->Script("%s selection get", this->Tree->GetWidgetName());
|
||||
this->AddTraceEntry("$kw(%s) SetTimeValueCallback {%s}",
|
||||
this->GetTclName(),
|
||||
this->GetApplication()->GetMainInterp()->result);
|
||||
}
|
||||
|
||||
this->Property->SetVTKSourceID(sourceID);
|
||||
this->Property->SetScalars(1, &this->TimeValue);
|
||||
this->Property->AcceptInternal();
|
||||
|
||||
this->ModifiedFlag = 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::Trace(ofstream *file)
|
||||
{
|
||||
if ( ! this->InitializeTrace(file))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->Script("%s selection get", this->Tree->GetWidgetName());
|
||||
*file << "$kw(" << this->GetTclName() << ") SetTimeValueCallback {"
|
||||
<< this->GetApplication()->GetMainInterp()->result << "}" << endl;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::ResetInternal()
|
||||
{
|
||||
if ( ! this->ModifiedFlag)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Command to update the UI.
|
||||
if (!this->Tree)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->Script("%s delete [%s nodes root]", this->Tree->GetWidgetName(),
|
||||
this->Tree->GetWidgetName());
|
||||
|
||||
this->SetTimeSetsFromReader();
|
||||
|
||||
int timeSetId=0;
|
||||
char timeSetName[32];
|
||||
char timeSetText[32];
|
||||
|
||||
char timeValueName[32];
|
||||
char timeValueText[32];
|
||||
char indices[32];
|
||||
|
||||
float actualTimeValue = this->Property->GetScalar(0);
|
||||
int matchFound = 0;
|
||||
|
||||
this->ModifiedFlag = 0;
|
||||
|
||||
if (this->TimeSets->GetNumberOfItems() == 0)
|
||||
{
|
||||
this->Script("pack forget %s", this->TreeFrame->GetWidgetName());
|
||||
this->TimeLabel->SetLabel("No timesets available.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->SetTimeValue(actualTimeValue);
|
||||
this->Script("pack %s -expand t -fill x", this->TreeFrame->GetWidgetName());
|
||||
}
|
||||
|
||||
this->TimeSets->InitTraversal();
|
||||
vtkDataArray* da;
|
||||
while( (da=this->TimeSets->GetNextItem()) )
|
||||
{
|
||||
timeSetId++;
|
||||
sprintf(timeSetName,"timeset%d", timeSetId);
|
||||
sprintf(timeSetText,"Time Set %d", timeSetId);
|
||||
this->AddRootNode(timeSetName, timeSetText);
|
||||
|
||||
vtkIdType tuple;
|
||||
for(tuple=0; tuple<da->GetNumberOfTuples(); tuple++)
|
||||
{
|
||||
float timeValue = da->GetTuple1(tuple);
|
||||
sprintf(timeValueName, "time%d_%-12.5e", timeSetId, timeValue);
|
||||
sprintf(timeValueText, "%-12.5e", timeValue);
|
||||
ostrstream str;
|
||||
str << "{" << timeSetId-1 << " " << tuple << "}" << ends;
|
||||
sprintf(indices, "%s", str.str());
|
||||
str.rdbuf()->freeze(0);
|
||||
this->AddChildNode(timeSetName, timeValueName, timeValueText, indices);
|
||||
if (actualTimeValue == timeValue && !matchFound)
|
||||
{
|
||||
matchFound=1;
|
||||
this->Script("%s selection set %s", this->Tree->GetWidgetName(),
|
||||
timeValueName);
|
||||
}
|
||||
}
|
||||
if (timeSetId == 1)
|
||||
{
|
||||
this->Script("%s opentree %s", this->Tree->GetWidgetName(),
|
||||
timeSetName);
|
||||
}
|
||||
}
|
||||
|
||||
this->SetTimeValue(actualTimeValue);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::AddAnimationScriptsToMenu(vtkKWMenu *menu,
|
||||
vtkPVAnimationInterfaceEntry *ai)
|
||||
{
|
||||
char methodAndArgs[500];
|
||||
|
||||
sprintf(methodAndArgs, "AnimationMenuCallback %s", ai->GetTclName());
|
||||
// I do not under stand why the trace name is used for the
|
||||
// menu entry, but Berk must know.
|
||||
menu->AddCommand(this->GetTraceName(), this, methodAndArgs, 0, "");
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// What a pain. I need this method for tracing.
|
||||
// Maybe the animation should call PVwidget methods and not vtk object methods.
|
||||
void vtkPVFoamSelectTimeSet::AnimationMenuCallback(vtkPVAnimationInterfaceEntry *ai)
|
||||
{
|
||||
if (ai->InitializeTrace(NULL))
|
||||
{
|
||||
this->AddTraceEntry("$kw(%s) AnimationMenuCallback $kw(%s)",
|
||||
this->GetTclName(), ai->GetTclName());
|
||||
}
|
||||
|
||||
// I do not under stand why the trace name is used for the
|
||||
// menu entry, but Berk must know.
|
||||
ai->SetLabelAndScript(this->GetTraceName(), NULL, this->GetTraceName());
|
||||
ai->SetCurrentProperty(this->Property);
|
||||
ai->Update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkPVFoamSelectTimeSet* vtkPVFoamSelectTimeSet::ClonePrototype(vtkPVSource* pvSource,
|
||||
vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map)
|
||||
{
|
||||
vtkPVWidget* clone = this->ClonePrototypeInternal(pvSource, map);
|
||||
return vtkPVFoamSelectTimeSet::SafeDownCast(clone);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::CopyProperties(vtkPVWidget* clone,
|
||||
vtkPVSource* pvSource,
|
||||
vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map)
|
||||
{
|
||||
this->Superclass::CopyProperties(clone, pvSource, map);
|
||||
vtkPVFoamSelectTimeSet* pvts = vtkPVFoamSelectTimeSet::SafeDownCast(clone);
|
||||
if (pvts)
|
||||
{
|
||||
pvts->SetLabel(this->FrameLabel);
|
||||
pvts->SetSetCommand(this->SetCommand);
|
||||
}
|
||||
else
|
||||
{
|
||||
vtkErrorMacro(
|
||||
"Internal error. Could not downcast clone to PVFoamSelectTimeSet.");
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int vtkPVFoamSelectTimeSet::ReadXMLAttributes(vtkPVXMLElement* element,
|
||||
vtkPVXMLPackageParser* parser)
|
||||
{
|
||||
if(!this->Superclass::ReadXMLAttributes(element, parser)) { return 0; }
|
||||
|
||||
// Setup the Label.
|
||||
const char* label = element->GetAttribute("label");
|
||||
if(label)
|
||||
{
|
||||
this->SetLabel(label);
|
||||
}
|
||||
|
||||
this->SetSetCommand(element->GetAttribute("set_command"));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SetTimeSetsFromReader()
|
||||
{
|
||||
vtkPVProcessModule* pm = this->GetPVApplication()->GetProcessModule();
|
||||
this->TimeSets->RemoveAllItems();
|
||||
|
||||
// Create the server-side helper if necessary.
|
||||
if(!this->ServerSideID.ID)
|
||||
{
|
||||
this->ServerSideID = pm->NewStreamObject("vtkPVFoamServerSelectTimeSet");
|
||||
pm->SendStream(vtkProcessModule::DATA_SERVER);
|
||||
}
|
||||
|
||||
// Get the time sets from the reader on the server.
|
||||
// Reader -> VTKSourceID (0). We assume that there is 1 VTKSource.
|
||||
pm->GetStream() << vtkClientServerStream::Invoke
|
||||
<< this->ServerSideID << "GetTimeSets"
|
||||
<< this->PVSource->GetVTKSourceID(0)
|
||||
<< vtkClientServerStream::End;
|
||||
pm->SendStream(vtkProcessModule::DATA_SERVER_ROOT);
|
||||
vtkClientServerStream timeSets;
|
||||
if(!pm->GetLastServerResult().GetArgument(0, 0, &timeSets))
|
||||
{
|
||||
vtkErrorMacro("Error getting time sets from server.");
|
||||
return;
|
||||
}
|
||||
|
||||
// There is one time set per message.
|
||||
for(int m=0; m < timeSets.GetNumberOfMessages(); ++m)
|
||||
{
|
||||
// Each argument in the message is a time set entry.
|
||||
vtkFloatArray* timeSet = vtkFloatArray::New();
|
||||
int n = timeSets.GetNumberOfArguments(m);
|
||||
timeSet->SetNumberOfTuples(n);
|
||||
for(int i=0; i < n; ++i)
|
||||
{
|
||||
float value;
|
||||
if(!timeSets.GetArgument(m, i, &value))
|
||||
{
|
||||
vtkErrorMacro("Error reading time set value.");
|
||||
timeSet->Delete();
|
||||
return;
|
||||
}
|
||||
timeSet->SetTuple1(i, value);
|
||||
}
|
||||
this->TimeSets->AddItem(timeSet);
|
||||
timeSet->Delete();
|
||||
}
|
||||
|
||||
if (this->Property->GetNumberOfScalars() == 0 &&
|
||||
this->TimeSets->GetNumberOfItems() > 0)
|
||||
{
|
||||
vtkFloatArray *ts =
|
||||
vtkFloatArray::SafeDownCast(this->TimeSets->GetItem(0));
|
||||
this->Property->SetScalars(1, ts->GetPointer(0));
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SaveInBatchScriptForPart(ofstream *file,
|
||||
vtkClientServerID sourceID)
|
||||
{
|
||||
if (sourceID.ID == 0)
|
||||
{
|
||||
vtkErrorMacro(<< this->GetClassName()
|
||||
<< " must not have SaveInBatchScript method.");
|
||||
return;
|
||||
}
|
||||
|
||||
*file << "\t" << "pvTemp" << sourceID
|
||||
<< " SetTimeValue " << this->GetTimeValue()
|
||||
<< endl;;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::SetProperty(vtkPVWidgetProperty *prop)
|
||||
{
|
||||
this->Property = vtkPVScalarListWidgetProperty::SafeDownCast(prop);
|
||||
if (this->Property)
|
||||
{
|
||||
int numScalars = 1;
|
||||
this->Property->SetVTKCommands(1, &this->SetCommand, &numScalars);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkPVWidgetProperty* vtkPVFoamSelectTimeSet::GetProperty()
|
||||
{
|
||||
return this->Property;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkPVWidgetProperty* vtkPVFoamSelectTimeSet::CreateAppropriateProperty()
|
||||
{
|
||||
return vtkPVScalarListWidgetProperty::New();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtkPVFoamSelectTimeSet::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os, indent);
|
||||
os << indent << "TimeValue: " << this->TimeValue << endl;
|
||||
os << indent << "LabeledFrame: " << this->LabeledFrame << endl;
|
||||
os << indent << "SetCommand: "
|
||||
<< (this->SetCommand ? this->SetCommand : "(none)") << endl;
|
||||
}
|
|
@ -1,164 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: $RCSfile: vtkPVFoamSelectTimeSet.h,v $
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
// .NAME vtkPVFoamSelectTimeSet - Special time selection widget used by PVFoamReaderModule
|
||||
// .SECTION Description
|
||||
// This is a PVWidget specially designed to be used with PVFoamReaderModule.
|
||||
// It provides support for multiple sets. The time value selected by
|
||||
// the user is passed to the Foam reader with a SetTimeValue() call.
|
||||
|
||||
#ifndef __vtkPVFoamSelectTimeSet_h
|
||||
#define __vtkPVFoamSelectTimeSet_h
|
||||
|
||||
#include "vtkPVWidget.h"
|
||||
|
||||
class vtkKWLabel;
|
||||
class vtkKWMenu;
|
||||
class vtkKWLabeledFrame;
|
||||
class vtkDataArrayCollection;
|
||||
class vtkPVScalarListWidgetProperty;
|
||||
|
||||
class VTK_EXPORT vtkPVFoamSelectTimeSet : public vtkPVWidget
|
||||
{
|
||||
public:
|
||||
static vtkPVFoamSelectTimeSet* New();
|
||||
vtkTypeRevisionMacro(vtkPVFoamSelectTimeSet, vtkPVWidget);
|
||||
void PrintSelf(ostream& os, vtkIndent indent);
|
||||
|
||||
virtual void Create(vtkKWApplication *pvApp);
|
||||
|
||||
//BTX
|
||||
// Description:
|
||||
// Called when accept button is pushed.
|
||||
// Sets objects variable to the widgets value.
|
||||
// Adds a trace entry. Side effect is to turn modified flag off.
|
||||
virtual void AcceptInternal(vtkClientServerID);
|
||||
//ETX
|
||||
|
||||
// Description:
|
||||
// Called when the reset button is pushed.
|
||||
// Sets widget's value to the object-variable's value.
|
||||
// Side effect is to turn the modified flag off.
|
||||
virtual void ResetInternal();
|
||||
|
||||
// Description:
|
||||
// Adds a script to the menu of the animation interface.
|
||||
virtual void AddAnimationScriptsToMenu(vtkKWMenu *menu,
|
||||
vtkPVAnimationInterfaceEntry *ai);
|
||||
|
||||
// Description:
|
||||
// Called whenthe animation method menu item is selected.
|
||||
// Needed for proper tracing.
|
||||
// It would be nice if the menu and cascade menus would trace
|
||||
// invokation of items (?relying of enumeration of menu items or label?)
|
||||
void AnimationMenuCallback(vtkPVAnimationInterfaceEntry *ai);
|
||||
|
||||
// Description:
|
||||
// This is the labeled frame around the timeset tree.
|
||||
vtkGetObjectMacro(LabeledFrame, vtkKWLabeledFrame);
|
||||
|
||||
// Description:
|
||||
// Label displayed on the labeled frame.
|
||||
void SetLabel(const char* label);
|
||||
const char* GetLabel();
|
||||
|
||||
// Description:
|
||||
// Updates the time value label and the time ivar.
|
||||
void SetTimeValue(float time);
|
||||
vtkGetMacro(TimeValue, float);
|
||||
|
||||
// Description:
|
||||
// Calls this->SetTimeValue () and Reader->SetTimeValue()
|
||||
// with currently selected time value.
|
||||
void SetTimeValueCallback(const char* item);
|
||||
|
||||
//BTX
|
||||
// Description:
|
||||
// Creates and returns a copy of this widget. It will create
|
||||
// a new instance of the same type as the current object
|
||||
// using NewInstance() and then copy some necessary state
|
||||
// parameters.
|
||||
vtkPVFoamSelectTimeSet* ClonePrototype(vtkPVSource* pvSource,
|
||||
vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map);
|
||||
//ETX
|
||||
|
||||
// Description:
|
||||
// This serves a dual purpose. For tracing and for saving state.
|
||||
virtual void Trace(ofstream *file);
|
||||
|
||||
// Description:
|
||||
// Set/get the property to use with this widget.
|
||||
virtual void SetProperty(vtkPVWidgetProperty *prop);
|
||||
virtual vtkPVWidgetProperty* GetProperty();
|
||||
|
||||
// Description:
|
||||
// Create the right property for use with this widget.
|
||||
virtual vtkPVWidgetProperty* CreateAppropriateProperty();
|
||||
|
||||
// Description:
|
||||
// Set/get the command to pass the value to VTK.
|
||||
vtkSetStringMacro(SetCommand);
|
||||
vtkGetStringMacro(SetCommand);
|
||||
|
||||
// Description:
|
||||
// Save this widget to a file.
|
||||
virtual void SaveInBatchScript(ofstream *file);
|
||||
|
||||
protected:
|
||||
vtkPVFoamSelectTimeSet();
|
||||
~vtkPVFoamSelectTimeSet();
|
||||
|
||||
vtkPVFoamSelectTimeSet(const vtkPVFoamSelectTimeSet&); // Not implemented
|
||||
void operator=(const vtkPVFoamSelectTimeSet&); // Not implemented
|
||||
|
||||
vtkPVScalarListWidgetProperty *Property;
|
||||
|
||||
char *SetCommand;
|
||||
|
||||
vtkSetStringMacro(FrameLabel);
|
||||
vtkGetStringMacro(FrameLabel);
|
||||
|
||||
vtkKWWidget* Tree;
|
||||
vtkKWWidget* TreeFrame;
|
||||
vtkKWLabel* TimeLabel;
|
||||
vtkKWLabeledFrame* LabeledFrame;
|
||||
|
||||
void AddRootNode(const char* name, const char* text);
|
||||
void AddChildNode(const char* parent, const char* name,
|
||||
const char* text, const char* data);
|
||||
|
||||
float TimeValue;
|
||||
char* FrameLabel;
|
||||
|
||||
vtkDataArrayCollection* TimeSets;
|
||||
vtkClientServerID ServerSideID;
|
||||
|
||||
// Fill the TimeSets collection with that from the actual reader.
|
||||
void SetTimeSetsFromReader();
|
||||
|
||||
//BTX
|
||||
virtual void CopyProperties(vtkPVWidget* clone, vtkPVSource* pvSource,
|
||||
vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map);
|
||||
//ETX
|
||||
|
||||
int ReadXMLAttributes(vtkPVXMLElement* element,
|
||||
vtkPVXMLPackageParser* parser);
|
||||
|
||||
// Description:
|
||||
// An interface for saving a widget into a script.
|
||||
virtual void SaveInBatchScriptForPart(ofstream *file, vtkClientServerID);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,85 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: $RCSfile: vtkPVFoamServerSelectTimeSet.cxx,v $
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtkPVFoamServerSelectTimeSet.h"
|
||||
|
||||
#include "vtkClientServerInterpreter.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkPVProcessModule.h"
|
||||
#include "vtkFoamReader.h"
|
||||
#include "vtkDataArrayCollection.h"
|
||||
#include "vtkDataArrayCollectionIterator.h"
|
||||
#include "vtkClientServerStream.h"
|
||||
|
||||
#include <vtkstd/string>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkStandardNewMacro(vtkPVFoamServerSelectTimeSet);
|
||||
vtkCxxRevisionMacro(vtkPVFoamServerSelectTimeSet, "$Revision: 1.4 $");
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class vtkPVFoamServerSelectTimeSetInternals
|
||||
{
|
||||
public:
|
||||
vtkClientServerStream Result;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkPVFoamServerSelectTimeSet::vtkPVFoamServerSelectTimeSet()
|
||||
{
|
||||
this->Internal = new vtkPVFoamServerSelectTimeSetInternals;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkPVFoamServerSelectTimeSet::~vtkPVFoamServerSelectTimeSet()
|
||||
{
|
||||
delete this->Internal;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkPVFoamServerSelectTimeSet::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os,indent);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const vtkClientServerStream&
|
||||
vtkPVFoamServerSelectTimeSet::GetTimeSets(vtkFoamReader* reader)
|
||||
{
|
||||
// Reset the stream for a new list of time sets.
|
||||
this->Internal->Result.Reset();
|
||||
|
||||
// Get the time sets from the reader.
|
||||
vtkDataArrayCollection* timeSets = reader->GetTimeSets();
|
||||
|
||||
// Iterate through the time sets.
|
||||
vtkDataArrayCollectionIterator* iter = vtkDataArrayCollectionIterator::New();
|
||||
iter->SetCollection(timeSets);
|
||||
for(iter->GoToFirstItem(); !iter->IsDoneWithTraversal();
|
||||
iter->GoToNextItem())
|
||||
{
|
||||
// Each time set is stored in one message.
|
||||
this->Internal->Result << vtkClientServerStream::Reply;
|
||||
vtkDataArray* da = iter->GetDataArray();
|
||||
for(int i=0; i < da->GetNumberOfTuples(); ++i)
|
||||
{
|
||||
this->Internal->Result << da->GetTuple1(i);
|
||||
}
|
||||
this->Internal->Result << vtkClientServerStream::End;
|
||||
}
|
||||
iter->Delete();
|
||||
|
||||
// Return the stream.
|
||||
return this->Internal->Result;
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: $RCSfile: vtkPVFoamServerSelectTimeSet.h,v $
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
// .NAME vtkPVFoamServerSelectTimeSet - Server-side helper for vtkPVFoamSelectTimeSet.
|
||||
// .SECTION Description
|
||||
|
||||
#ifndef __vtkPVFoamServerSelectTimeSet_h
|
||||
#define __vtkPVFoamServerSelectTimeSet_h
|
||||
|
||||
#include "vtkPVServerObject.h"
|
||||
|
||||
class vtkClientServerStream;
|
||||
class vtkPVFoamServerSelectTimeSetInternals;
|
||||
class vtkFoamReader;
|
||||
|
||||
class VTK_EXPORT vtkPVFoamServerSelectTimeSet : public vtkPVServerObject
|
||||
{
|
||||
public:
|
||||
static vtkPVFoamServerSelectTimeSet* New();
|
||||
vtkTypeRevisionMacro(vtkPVFoamServerSelectTimeSet, vtkPVServerObject);
|
||||
void PrintSelf(ostream& os, vtkIndent indent);
|
||||
|
||||
// Description:
|
||||
// Get a list the time sets provided by the given reader.
|
||||
const vtkClientServerStream& GetTimeSets(vtkFoamReader*);
|
||||
|
||||
protected:
|
||||
vtkPVFoamServerSelectTimeSet();
|
||||
~vtkPVFoamServerSelectTimeSet();
|
||||
|
||||
// Internal implementation details.
|
||||
vtkPVFoamServerSelectTimeSetInternals* Internal;
|
||||
private:
|
||||
vtkPVFoamServerSelectTimeSet(const vtkPVFoamServerSelectTimeSet&); // Not implemented
|
||||
void operator=(const vtkPVFoamServerSelectTimeSet&); // Not implemented
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,5 +0,0 @@
|
|||
vtkFoam.C
|
||||
vtkFoamAddInternalMesh.C
|
||||
vtkFoamAddPatch.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libvtkFoam
|
|
@ -1,8 +0,0 @@
|
|||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(ParaView_INST_DIR)/include \
|
||||
-I../PVFoamReader
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfiniteVolume \
|
||||
$(GLIBS)
|
|
@ -1,661 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkFoam.H"
|
||||
|
||||
#include "argList.H"
|
||||
#include "foamTime.H"
|
||||
#include "polyBoundaryMeshEntries.H"
|
||||
#include "IOobjectList.H"
|
||||
#include "wordList.H"
|
||||
#include "fvMesh.H"
|
||||
#include "volFields.H"
|
||||
#include "pointMesh.H"
|
||||
#include "volPointInterpolation.H"
|
||||
|
||||
#include "vtkFoamReader.h"
|
||||
#include "vtkDataArraySelection.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
#include "vtkPointData.h"
|
||||
#include "vtkCellData.h"
|
||||
#include "vtkFloatArray.h"
|
||||
#include "vtkCharArray.h"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(Foam::vtkFoam, 0);
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
#include "vtkFoamConvertFields.H"
|
||||
|
||||
void Foam::vtkFoam::SetName
|
||||
(
|
||||
vtkUnstructuredGrid* vtkMesh,
|
||||
const char* name
|
||||
)
|
||||
{
|
||||
vtkCharArray* nmArray = vtkCharArray::New();
|
||||
nmArray->SetName("Name");
|
||||
size_t len = strlen(name);
|
||||
nmArray->SetNumberOfTuples(static_cast<vtkIdType>(len)+1);
|
||||
char* copy = nmArray->GetPointer(0);
|
||||
memcpy(copy, name, len);
|
||||
copy[len] = '\0';
|
||||
vtkMesh->GetFieldData()->AddArray(nmArray);
|
||||
nmArray->Delete();
|
||||
}
|
||||
|
||||
|
||||
Foam::string Foam::vtkFoam::padTimeString(const string& ts)
|
||||
{
|
||||
return ts + string(" ", max(label(12 - ts.size()), 0));
|
||||
}
|
||||
|
||||
|
||||
// Pad the patch name string in order to account for dynamic changes
|
||||
// in patch names during topological changes
|
||||
Foam::string Foam::vtkFoam::padPatchString(const string& ps)
|
||||
{
|
||||
label n = max(label(50 - ps.size()), 0);
|
||||
return ps + string(" ", n);
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkFoam::setSelectedTime
|
||||
(
|
||||
Time& runTime,
|
||||
vtkFoamReader* reader
|
||||
)
|
||||
{
|
||||
// Get times list
|
||||
instantList Times = runTime.times();
|
||||
int timeIndex = min(max(reader->GetTimeStep() + 1, 0), Times.size()-1);
|
||||
|
||||
// If this is the first call timeIndex will be 0 ("constant")
|
||||
// so reset to the first time step if one exists and deselect every
|
||||
// element of the selection array
|
||||
if (timeIndex == 0)
|
||||
{
|
||||
timeIndex = min(1, Times.size()-1);
|
||||
reader->GetTimeSelection()->DisableAllArrays();
|
||||
}
|
||||
|
||||
label selectedTimeIndex = -1;
|
||||
label nSelectedTimes = reader->GetTimeSelection()->GetNumberOfArrays();
|
||||
|
||||
for (label i=nSelectedTimes-1; i>=0; i--)
|
||||
{
|
||||
if(reader->GetTimeSelection()->GetArraySetting(i))
|
||||
{
|
||||
word timeName = string::validate<word>
|
||||
(
|
||||
reader->GetTimeSelection()->GetArrayName(i)
|
||||
);
|
||||
|
||||
forAll(Times, j)
|
||||
{
|
||||
if (Times[j].name() == timeName)
|
||||
{
|
||||
selectedTimeIndex = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedTimeIndex != -1)
|
||||
{
|
||||
timeIndex = min(selectedTimeIndex, Times.size()-1);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Selecting time " << Times[timeIndex].name() << endl;
|
||||
}
|
||||
|
||||
runTime.setTime(Times[timeIndex], timeIndex);
|
||||
|
||||
Times = runTime.times();
|
||||
|
||||
reader->SetTimeStepRange(0, max(Times.size()-2, 0));
|
||||
|
||||
// reset the time steps ...
|
||||
reader->GetTimeSelection()->RemoveAllArrays();
|
||||
|
||||
int* TimeStepLimits = reader->GetTimeStepLimits();
|
||||
label maxStartTimes = min(Times.size(), TimeStepLimits[0]);
|
||||
label maxNTimes = min(Times.size() - maxStartTimes, TimeStepLimits[1]);
|
||||
|
||||
for (label i=0; i<maxStartTimes; i++)
|
||||
{
|
||||
reader->GetTimeSelection()
|
||||
->AddArray(padTimeString(Times[i].name()).c_str());
|
||||
}
|
||||
|
||||
if (Times.size() > TimeStepLimits[0] + TimeStepLimits[1])
|
||||
{
|
||||
reader->GetTimeSelection()->AddArray(padTimeString("...").c_str());
|
||||
}
|
||||
|
||||
for (label i=Times.size() - maxNTimes; i<Times.size(); i++)
|
||||
{
|
||||
reader->GetTimeSelection()
|
||||
->AddArray(padTimeString(Times[i].name()).c_str());
|
||||
}
|
||||
|
||||
// Disable all the time selections (which are all selected by default) ...
|
||||
reader->GetTimeSelection()->DisableAllArrays();
|
||||
|
||||
// But maintain the selections made previously
|
||||
if (selectedTimeIndex != -1 && selectedTimeIndex < Times.size())
|
||||
{
|
||||
reader->GetTimeSelection()->EnableArray
|
||||
(padTimeString(Times[selectedTimeIndex].name()).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkFoam::updateSelectedRegions()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkFoam::updateSelectedRegions()" << endl;
|
||||
}
|
||||
|
||||
label nRegions = reader_->GetRegionSelection()->GetNumberOfArrays();
|
||||
|
||||
selectedRegions_.setSize(nRegions);
|
||||
|
||||
// Read the selected patches and add to the region list
|
||||
for (int i=0; i<nRegions; i++)
|
||||
{
|
||||
selectedRegions_[i] =
|
||||
reader_->GetRegionSelection()->GetArraySetting(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkFoam::convertMesh()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkFoam::convertMesh()" << endl;
|
||||
}
|
||||
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
// Read the internal mesh as region 0 if selected
|
||||
if (reader_->GetRegionSelection()->GetArraySetting(0))
|
||||
{
|
||||
selectedRegions_[0] = true;
|
||||
addInternalMesh
|
||||
(
|
||||
mesh,
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedRegions_[0] = false;
|
||||
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0));
|
||||
|
||||
vtkMesh->Initialize();
|
||||
SetName(vtkMesh, "(Internal Mesh)");
|
||||
}
|
||||
|
||||
|
||||
// Read the selected patches and add to the region list
|
||||
|
||||
polyBoundaryMeshEntries patchEntries
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"boundary",
|
||||
dbPtr_().findInstance(polyMesh::meshSubDir, "boundary"),
|
||||
polyMesh::meshSubDir,
|
||||
dbPtr_(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
label regioni = 0;
|
||||
label regioniLast = 0;
|
||||
|
||||
// Read in the number Outputs (patch regions) currently being used
|
||||
label currNOutputs = reader_->GetNumberOfOutputs();
|
||||
|
||||
// Cycle through all the patches in the boundary file for the relevant
|
||||
// time step
|
||||
forAll(patchEntries, entryi)
|
||||
{
|
||||
// Number of faces in the current patch (Used to detect dummy patches
|
||||
// of size zero)
|
||||
label nFaces(readLabel(patchEntries[entryi].dict().lookup("nFaces")));
|
||||
|
||||
// Check to see if the patch is currently a part of the displayed list
|
||||
if
|
||||
(
|
||||
reader_->GetRegionSelection()->ArrayExists
|
||||
(
|
||||
padPatchString(patchEntries[entryi].keyword()).c_str()
|
||||
)
|
||||
)
|
||||
{
|
||||
if (!nFaces)
|
||||
{
|
||||
// Remove patch if it is only a dummy patch in the current
|
||||
// time step with zero faces
|
||||
reader_->GetRegionSelection()->RemoveArrayByName
|
||||
(
|
||||
padPatchString(patchEntries[entryi].keyword()).c_str()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// A patch already existent in the list and which
|
||||
// continues to exist found
|
||||
regioni++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// A new patch so far not yet included into the list has been found
|
||||
if (nFaces)
|
||||
{
|
||||
regioni++;
|
||||
|
||||
// Add a new entry to the list of regions
|
||||
reader_->GetRegionSelection()->AddArray
|
||||
(
|
||||
padPatchString(patchEntries[entryi].keyword()).c_str()
|
||||
);
|
||||
|
||||
// AddArray automatically enables a new array... disable
|
||||
// it manually
|
||||
reader_->GetRegionSelection()->DisableArray
|
||||
(
|
||||
padPatchString(patchEntries[entryi].keyword()).c_str()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid Initialization of the same Output twice
|
||||
if (regioni != regioniLast)
|
||||
{
|
||||
// Only setup an Output if it has not been setup before
|
||||
if(regioni >= currNOutputs)
|
||||
{
|
||||
vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New();
|
||||
reader_->SetNthOutput(regioni,ugrid);
|
||||
ugrid->Delete();
|
||||
}
|
||||
// Initialize -> Delete memory used, and reset to zero state
|
||||
reader_->GetOutput(regioni)->Initialize();
|
||||
regioniLast = regioni;
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize (reset to zero and free) any outputs which are not used
|
||||
// anymore
|
||||
if (regioni < currNOutputs)
|
||||
{
|
||||
for(label i = (regioni+1); i < currNOutputs;i++)
|
||||
{
|
||||
reader_->GetOutput(i)->Initialize();
|
||||
}
|
||||
}
|
||||
|
||||
selectedRegions_.setSize(regioni + 1);
|
||||
|
||||
regioni = 0;
|
||||
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
forAll (patches, patchi)
|
||||
{
|
||||
if (patches[patchi].size())
|
||||
{
|
||||
regioni++;
|
||||
|
||||
if (reader_->GetRegionSelection()->GetArraySetting(regioni))
|
||||
{
|
||||
selectedRegions_[regioni] = true;
|
||||
addPatch
|
||||
(
|
||||
patches[patchi],
|
||||
vtkUnstructuredGrid::SafeDownCast
|
||||
(
|
||||
reader_->GetOutput(regioni)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedRegions_[regioni] = false;
|
||||
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast
|
||||
(
|
||||
reader_->GetOutput(regioni)
|
||||
);
|
||||
|
||||
vtkMesh->Initialize();
|
||||
SetName
|
||||
(
|
||||
vtkMesh,
|
||||
('(' + padPatchString(patches[patchi].name()) + ')').c_str()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkFoam::vtkFoam(const char* const FileName, vtkFoamReader* reader)
|
||||
:
|
||||
reader_(reader),
|
||||
argsPtr_(NULL),
|
||||
dbPtr_(NULL),
|
||||
meshPtr_(NULL)
|
||||
{
|
||||
fileName fullCasePath(fileName(FileName).path());
|
||||
|
||||
if (!isDir(fullCasePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
char* argvStrings[3];
|
||||
argvStrings[0] = new char[9];
|
||||
strcpy(argvStrings[0], "/vtkFoam");
|
||||
argvStrings[1] = new char[6];
|
||||
strcpy(argvStrings[1], "-case");
|
||||
argvStrings[2] = new char[fullCasePath.size()+1];
|
||||
strcpy(argvStrings[2], fullCasePath.c_str());
|
||||
|
||||
int argc = 3;
|
||||
char** argv = &argvStrings[0];
|
||||
argsPtr_.reset(new argList(argc, argv));
|
||||
|
||||
for(int i = 0; i < argc; i++)
|
||||
{
|
||||
delete[] argvStrings[i];
|
||||
}
|
||||
|
||||
dbPtr_.reset
|
||||
(
|
||||
new Time
|
||||
(
|
||||
Time::controlDictName,
|
||||
argsPtr_().rootPath(),
|
||||
argsPtr_().caseName()
|
||||
)
|
||||
);
|
||||
dbPtr_().functionObjects().off();
|
||||
setSelectedTime(dbPtr_(), reader_);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "vtkFoam::ExecuteInformation: Initialising outputs" << endl;
|
||||
}
|
||||
|
||||
reader_->GetRegionSelection()->AddArray("Internal Mesh");
|
||||
|
||||
vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New();
|
||||
reader_->SetNthOutput(0, ugrid);
|
||||
ugrid->Delete();
|
||||
reader_->GetOutput(0)->Initialize();
|
||||
|
||||
polyBoundaryMeshEntries patchEntries
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"boundary",
|
||||
dbPtr_().findInstance(polyMesh::meshSubDir, "boundary"),
|
||||
polyMesh::meshSubDir,
|
||||
dbPtr_(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
label regioni = 0;
|
||||
forAll(patchEntries, entryi)
|
||||
{
|
||||
label nFaces(readLabel(patchEntries[entryi].dict().lookup("nFaces")));
|
||||
|
||||
if (nFaces)
|
||||
{
|
||||
regioni++;
|
||||
|
||||
reader_->GetRegionSelection()->AddArray
|
||||
(
|
||||
padPatchString(patchEntries[entryi].keyword()).c_str()
|
||||
);
|
||||
|
||||
vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New();
|
||||
reader_->SetNthOutput(regioni, ugrid);
|
||||
ugrid->Delete();
|
||||
reader_->GetOutput(regioni)->Initialize();
|
||||
}
|
||||
}
|
||||
|
||||
selectedRegions_.setSize(regioni + 1);
|
||||
selectedRegions_ = true;
|
||||
|
||||
UpdateInformation();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkFoam::~vtkFoam()
|
||||
{
|
||||
// Do NOT delete meshPtr_ since still referenced somehow.
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkFoamAddFields.H"
|
||||
|
||||
void Foam::vtkFoam::UpdateInformation()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "TimeStep = " << reader_->GetTimeStep() << endl;
|
||||
}
|
||||
|
||||
setSelectedTime(dbPtr_(), reader_);
|
||||
|
||||
// Search for list of objects for this time
|
||||
IOobjectList objects(dbPtr_(), dbPtr_().timeName());
|
||||
|
||||
addFields<volScalarField>(reader_->GetVolFieldSelection(), objects);
|
||||
addFields<volVectorField>(reader_->GetVolFieldSelection(), objects);
|
||||
addFields<volSphericalTensorField>(reader_->GetVolFieldSelection(), objects);
|
||||
addFields<volSymmTensorField>(reader_->GetVolFieldSelection(), objects);
|
||||
addFields<volTensorField>(reader_->GetVolFieldSelection(), objects);
|
||||
|
||||
addFields<pointScalarField>(reader_->GetPointFieldSelection(), objects);
|
||||
addFields<pointVectorField>(reader_->GetPointFieldSelection(), objects);
|
||||
addFields<pointSphericalTensorField>(reader_->GetPointFieldSelection(), objects);
|
||||
addFields<pointSymmTensorField>(reader_->GetPointFieldSelection(), objects);
|
||||
addFields<pointTensorField>(reader_->GetPointFieldSelection(), objects);
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkFoam::Update()
|
||||
{
|
||||
if
|
||||
(
|
||||
!reader_->GetCacheMesh()
|
||||
|| reader_->GetTimeSelection()->GetArraySetting(0)
|
||||
)
|
||||
{
|
||||
meshPtr_= NULL;
|
||||
}
|
||||
|
||||
// Clear the current set of selected fields
|
||||
|
||||
for (label i=0; i<reader_->GetNumberOfOutputs(); i++)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(i));
|
||||
|
||||
vtkCellData* cellData = vtkMesh->GetCellData();
|
||||
int numberOfCellArrays = cellData->GetNumberOfArrays();
|
||||
|
||||
wordList cellFieldNames(numberOfCellArrays);
|
||||
for (int j=0; j<numberOfCellArrays; j++)
|
||||
{
|
||||
cellFieldNames[j] = cellData->GetArrayName(j);
|
||||
}
|
||||
|
||||
for (int j=0; j<numberOfCellArrays; j++)
|
||||
{
|
||||
cellData->RemoveArray(cellFieldNames[j].c_str());
|
||||
}
|
||||
|
||||
vtkPointData* pointData = vtkMesh->GetPointData();
|
||||
int numberOfPointArrays = pointData->GetNumberOfArrays();
|
||||
|
||||
wordList pointFieldNames(numberOfPointArrays);
|
||||
for (int j=0; j<numberOfPointArrays; j++)
|
||||
{
|
||||
pointFieldNames[j] = pointData->GetArrayName(j);
|
||||
}
|
||||
|
||||
for (int j=0; j<numberOfPointArrays; j++)
|
||||
{
|
||||
pointData->RemoveArray(pointFieldNames[j].c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// Check to see if the mesh has been created
|
||||
|
||||
if (!meshPtr_)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Reading Mesh" << endl;
|
||||
}
|
||||
meshPtr_ =
|
||||
new fvMesh
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
fvMesh::defaultRegion,
|
||||
dbPtr_().timeName(),
|
||||
dbPtr_()
|
||||
)
|
||||
);
|
||||
convertMesh();
|
||||
}
|
||||
else
|
||||
{
|
||||
boolList oldSelectedRegions = selectedRegions_;
|
||||
updateSelectedRegions();
|
||||
if
|
||||
(
|
||||
meshPtr_->readUpdate() != fvMesh::UNCHANGED
|
||||
|| oldSelectedRegions != selectedRegions_
|
||||
)
|
||||
{
|
||||
convertMesh();
|
||||
}
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting fields" << endl;
|
||||
}
|
||||
|
||||
const fvMesh& mesh = *meshPtr_;
|
||||
|
||||
Foam::volPointInterpolation pInterp(mesh);
|
||||
|
||||
// Search for list of objects for this time
|
||||
Foam::IOobjectList objects(mesh, dbPtr_().timeName());
|
||||
|
||||
convertVolFields<Foam::scalar>
|
||||
(
|
||||
mesh, pInterp, objects, reader_->GetVolFieldSelection()
|
||||
);
|
||||
convertVolFields<Foam::vector>
|
||||
(
|
||||
mesh, pInterp, objects, reader_->GetVolFieldSelection()
|
||||
);
|
||||
convertVolFields<Foam::sphericalTensor>
|
||||
(
|
||||
mesh, pInterp, objects, reader_->GetVolFieldSelection()
|
||||
);
|
||||
convertVolFields<Foam::symmTensor>
|
||||
(
|
||||
mesh, pInterp, objects, reader_->GetVolFieldSelection()
|
||||
);
|
||||
convertVolFields<Foam::tensor>
|
||||
(
|
||||
mesh, pInterp, objects, reader_->GetVolFieldSelection()
|
||||
);
|
||||
|
||||
convertPointFields<Foam::scalar>
|
||||
(
|
||||
mesh, objects, reader_->GetPointFieldSelection()
|
||||
);
|
||||
convertPointFields<Foam::vector>
|
||||
(
|
||||
mesh, objects, reader_->GetPointFieldSelection()
|
||||
);
|
||||
convertPointFields<Foam::sphericalTensor>
|
||||
(
|
||||
mesh, objects, reader_->GetPointFieldSelection()
|
||||
);
|
||||
convertPointFields<Foam::symmTensor>
|
||||
(
|
||||
mesh, objects, reader_->GetPointFieldSelection()
|
||||
);
|
||||
convertPointFields<Foam::tensor>
|
||||
(
|
||||
mesh, objects, reader_->GetPointFieldSelection()
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "done" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,255 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::vtkFoam
|
||||
|
||||
Description
|
||||
|
||||
SourceFiles
|
||||
vtkFoam.C
|
||||
vtkFoamInsertNextPoint.H
|
||||
vtkFoamAddFields.H
|
||||
vtkFoamAddInternalMesh.H
|
||||
vtkFoamConvertFields.H
|
||||
vtkFoamConvertVolField.H
|
||||
vtkFoamConvertPatchFaceField.H
|
||||
vtkFoamConvertPointField.H
|
||||
vtkFoamConvertPatchPointField.H
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoam_H
|
||||
#define vtkFoam_H
|
||||
|
||||
#include "className.H"
|
||||
#include "fileName.H"
|
||||
#include "volPointInterpolation.H"
|
||||
|
||||
// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * //
|
||||
|
||||
// VTK class forward declarations
|
||||
class vtkFoamReader;
|
||||
class vtkUnstructuredGrid;
|
||||
class vtkPoints;
|
||||
class vtkDataArraySelection;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// Foam class forward declarations
|
||||
class argList;
|
||||
class Time;
|
||||
class fvMesh;
|
||||
class IOobjectList;
|
||||
class polyPatch;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkFoam Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class vtkFoam
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Access to the controlling vtkFoamReader
|
||||
vtkFoamReader *reader_;
|
||||
|
||||
autoPtr<argList> argsPtr_;
|
||||
autoPtr<Time> dbPtr_;
|
||||
fvMesh* meshPtr_;
|
||||
|
||||
//- Selected regions, [0] = internal mesh, [1-nPatches] = patches
|
||||
boolList selectedRegions_;
|
||||
|
||||
//- Lables of cell-centres used as additional points when decomposing
|
||||
// polyhedra
|
||||
labelList addPointCellLabels_;
|
||||
|
||||
//- Label of original cell the decomposed cells are split from
|
||||
labelList superCells_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Pad-out the time name to avoid bug in the GUI redraw
|
||||
static string padTimeString(const string&);
|
||||
|
||||
//- Pad-out the patch name
|
||||
static string padPatchString(const string&);
|
||||
|
||||
//- Find and set the selected time from all the methods of selection
|
||||
static void setSelectedTime
|
||||
(
|
||||
Time& runTime,
|
||||
vtkFoamReader* reader
|
||||
);
|
||||
|
||||
//- Update the selected regions
|
||||
void updateSelectedRegions();
|
||||
|
||||
//- Convert the mesh according to the list of selected regions
|
||||
void convertMesh();
|
||||
|
||||
//- Add the internal mesh to the set of Outputs if selected
|
||||
void addInternalMesh(const fvMesh&, vtkUnstructuredGrid*);
|
||||
|
||||
//- Add the internal patch to the set of Outputs if selected
|
||||
void addPatch(const polyPatch&, vtkUnstructuredGrid*);
|
||||
|
||||
//- Add the fields in th selested time directory to the selection lists
|
||||
template<class GeoField>
|
||||
void addFields
|
||||
(
|
||||
vtkDataArraySelection *fieldSelection,
|
||||
const IOobjectList& objects
|
||||
);
|
||||
|
||||
//- Convert the selected volFields
|
||||
template<class Type>
|
||||
void convertVolFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const volPointInterpolation& pInterp,
|
||||
const IOobjectList& objects,
|
||||
vtkDataArraySelection *fieldSelection
|
||||
);
|
||||
|
||||
template<class Type>
|
||||
void convertVolField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf
|
||||
);
|
||||
|
||||
template<class Type>
|
||||
void convertPatchFaceField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& tf,
|
||||
const label regioni
|
||||
);
|
||||
|
||||
//- Convert the selected pointFields
|
||||
template<class Type>
|
||||
void convertPointFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const IOobjectList& objects,
|
||||
vtkDataArraySelection *fieldSelection
|
||||
);
|
||||
|
||||
template<class Type>
|
||||
void convertPointField
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf
|
||||
);
|
||||
|
||||
template<class Type>
|
||||
void convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& tf,
|
||||
const label regioni
|
||||
);
|
||||
|
||||
//- Set the name of the Output vtkUnstructuredGrid
|
||||
void SetName(vtkUnstructuredGrid *vtkMesh, const char* name);
|
||||
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
vtkFoam(const vtkFoam&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const vtkFoam&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Static data members
|
||||
|
||||
ClassName("vtkFoam");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
vtkFoam(const char* const FileName, vtkFoamReader* reader);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
~vtkFoam();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
void UpdateInformation();
|
||||
void Update();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Template Specialisations * * * * * * * * * * * //
|
||||
|
||||
template<>
|
||||
void vtkFoam::convertVolField
|
||||
(
|
||||
const GeometricField<scalar, fvPatchField, volMesh>& sf
|
||||
);
|
||||
|
||||
template<>
|
||||
void vtkFoam::convertPatchFaceField
|
||||
(
|
||||
const word& name,
|
||||
const Field<scalar>& sf,
|
||||
const label regioni
|
||||
);
|
||||
|
||||
template<>
|
||||
void vtkFoam::convertPointField
|
||||
(
|
||||
const GeometricField<scalar, pointPatchField, pointMesh>& psf,
|
||||
const GeometricField<scalar, fvPatchField, volMesh>& sf
|
||||
);
|
||||
|
||||
template<>
|
||||
void vtkFoam::convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<scalar>& sf,
|
||||
const label regioni
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,59 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamAddFields_H
|
||||
#define vtkFoamAddFields_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class GeoField>
|
||||
void Foam::vtkFoam::addFields
|
||||
(
|
||||
vtkDataArraySelection *fieldSelection,
|
||||
const IOobjectList& objects
|
||||
)
|
||||
{
|
||||
IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName));
|
||||
|
||||
for
|
||||
(
|
||||
IOobjectList::iterator iter = fieldObjects.begin();
|
||||
iter != fieldObjects.end();
|
||||
++iter
|
||||
)
|
||||
{
|
||||
fieldSelection->AddArray(iter()->name().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,298 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkFoam.H"
|
||||
#include "fvMesh.H"
|
||||
#include "cellModeller.H"
|
||||
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
#include "vtkCellArray.h"
|
||||
|
||||
#include "vtkFoamInsertNextPoint.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkFoam::addInternalMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
vtkUnstructuredGrid* vtkMesh
|
||||
)
|
||||
{
|
||||
SetName(vtkMesh, "Internal Mesh");
|
||||
|
||||
// Number of additional points needed by the decomposition of polyhedra
|
||||
label nAddPoints = 0;
|
||||
|
||||
// Number of additional cells generated by the decomposition of polyhedra
|
||||
label nAddCells = 0;
|
||||
|
||||
const cellModel& tet = *(cellModeller::lookup("tet"));
|
||||
const cellModel& pyr = *(cellModeller::lookup("pyr"));
|
||||
const cellModel& prism = *(cellModeller::lookup("prism"));
|
||||
const cellModel& wedge = *(cellModeller::lookup("wedge"));
|
||||
const cellModel& tetWedge = *(cellModeller::lookup("tetWedge"));
|
||||
const cellModel& hex = *(cellModeller::lookup("hex"));
|
||||
|
||||
// Scan for cells which need to be decomposed and count additional points
|
||||
// and cells
|
||||
if (debug)
|
||||
{
|
||||
Info<< "building cell-shapes" << endl;
|
||||
}
|
||||
const cellShapeList& cellShapes = mesh.cellShapes();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "scanning" << endl;
|
||||
}
|
||||
|
||||
forAll(cellShapes, cellI)
|
||||
{
|
||||
const cellModel& model = cellShapes[cellI].model();
|
||||
|
||||
if
|
||||
(
|
||||
model != hex
|
||||
&& model != wedge
|
||||
&& model != prism
|
||||
&& model != pyr
|
||||
&& model != tet
|
||||
&& model != tetWedge
|
||||
)
|
||||
{
|
||||
const cell& cFaces = mesh.cells()[cellI];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
nAddCells += nQuads + nTris;
|
||||
}
|
||||
|
||||
nAddCells--;
|
||||
nAddPoints++;
|
||||
}
|
||||
}
|
||||
|
||||
// Set size of additional point addressing array
|
||||
// (from added point to original cell)
|
||||
addPointCellLabels_.setSize(nAddPoints);
|
||||
|
||||
// Set size of additional cells mapping array
|
||||
// (from added cell to original cell)
|
||||
superCells_.setSize(mesh.nCells() + nAddCells);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting points" << endl;
|
||||
}
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate(mesh.nPoints() + nAddPoints);
|
||||
|
||||
const Foam::pointField& points = mesh.points();
|
||||
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting cells" << endl;
|
||||
}
|
||||
|
||||
vtkMesh->Allocate(mesh.nCells() + nAddCells);
|
||||
|
||||
// Set counters for additional points and additional cells
|
||||
label api = 0, aci = 0;
|
||||
|
||||
forAll(cellShapes, celli)
|
||||
{
|
||||
const cellShape& cellShape = cellShapes[celli];
|
||||
const cellModel& cellModel = cellShape.model();
|
||||
|
||||
superCells_[aci++] = celli;
|
||||
|
||||
if (cellModel == tet)
|
||||
{
|
||||
vtkMesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
const_cast<int*>(cellShape.begin())
|
||||
);
|
||||
}
|
||||
else if (cellModel == pyr)
|
||||
{
|
||||
vtkMesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
const_cast<int*>(cellShape.begin())
|
||||
);
|
||||
}
|
||||
else if (cellModel == prism)
|
||||
{
|
||||
vtkMesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
const_cast<int*>(cellShape.begin())
|
||||
);
|
||||
}
|
||||
else if (cellModel == tetWedge)
|
||||
{
|
||||
// Treat as squeezed prism
|
||||
|
||||
int vtkVerts[6];
|
||||
vtkVerts[0] = cellShape[0];
|
||||
vtkVerts[1] = cellShape[2];
|
||||
vtkVerts[2] = cellShape[1];
|
||||
vtkVerts[3] = cellShape[3];
|
||||
vtkVerts[4] = cellShape[4];
|
||||
vtkVerts[5] = cellShape[4];
|
||||
|
||||
vtkMesh->InsertNextCell(VTK_WEDGE, 6, vtkVerts);
|
||||
}
|
||||
else if (cellModel == wedge)
|
||||
{
|
||||
// Treat as squeezed hex
|
||||
|
||||
int vtkVerts[8];
|
||||
vtkVerts[0] = cellShape[0];
|
||||
vtkVerts[1] = cellShape[1];
|
||||
vtkVerts[2] = cellShape[2];
|
||||
vtkVerts[3] = cellShape[2];
|
||||
vtkVerts[4] = cellShape[3];
|
||||
vtkVerts[5] = cellShape[4];
|
||||
vtkVerts[6] = cellShape[5];
|
||||
vtkVerts[7] = cellShape[6];
|
||||
|
||||
vtkMesh->InsertNextCell(VTK_HEXAHEDRON, 8, vtkVerts);
|
||||
}
|
||||
else if (cellModel == hex)
|
||||
{
|
||||
vtkMesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
const_cast<int*>(cellShape.begin())
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Polyhedral cell. Decompose into tets + prisms.
|
||||
|
||||
// Mapping from additional point to cell
|
||||
addPointCellLabels_[api] = celli;
|
||||
|
||||
// Insert the new vertex from the cell-centre
|
||||
label newVertexLabel = mesh.nPoints() + api;
|
||||
vtkFoamInsertNextPoint(vtkpoints, mesh.C()[celli]);
|
||||
|
||||
// Whether to insert cell in place of original or not.
|
||||
bool substituteCell = true;
|
||||
|
||||
const labelList& cFaces = mesh.cells()[celli];
|
||||
|
||||
forAll(cFaces, cFaceI)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFaceI]];
|
||||
|
||||
label nFacePoints = f.size();
|
||||
|
||||
label nQuads = (nFacePoints - 2)/2;
|
||||
label nTris = (nFacePoints - 2)%2;
|
||||
|
||||
label qpi = 0;
|
||||
|
||||
for (label quadi=0; quadi<nQuads; quadi++)
|
||||
{
|
||||
label thisCellI = -1;
|
||||
|
||||
if (substituteCell)
|
||||
{
|
||||
thisCellI = celli;
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
thisCellI = mesh.nCells() + aci;
|
||||
superCells_[aci++] = celli;
|
||||
}
|
||||
|
||||
int addVtkVerts[5];
|
||||
addVtkVerts[0] = f[0];
|
||||
addVtkVerts[1] = f[qpi + 1];
|
||||
addVtkVerts[2] = f[qpi + 2];
|
||||
addVtkVerts[3] = f[qpi + 3];
|
||||
addVtkVerts[4] = newVertexLabel;
|
||||
vtkMesh->InsertNextCell(VTK_PYRAMID, 5, addVtkVerts);
|
||||
|
||||
qpi += 2;
|
||||
}
|
||||
|
||||
if (nTris)
|
||||
{
|
||||
label thisCellI = -1;
|
||||
|
||||
if (substituteCell)
|
||||
{
|
||||
thisCellI = celli;
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
thisCellI = mesh.nCells() + aci;
|
||||
superCells_[aci++] = celli;
|
||||
}
|
||||
|
||||
int addVtkVerts[4];
|
||||
addVtkVerts[0] = f[0];
|
||||
addVtkVerts[1] = f[qpi + 1];
|
||||
addVtkVerts[2] = f[qpi + 2];
|
||||
addVtkVerts[3] = newVertexLabel;
|
||||
vtkMesh->InsertNextCell(VTK_TETRA, 4, addVtkVerts);
|
||||
}
|
||||
}
|
||||
|
||||
api++;
|
||||
}
|
||||
}
|
||||
|
||||
vtkMesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,114 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkFoam.H"
|
||||
#include "polyPatch.H"
|
||||
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
#include "vtkCellArray.h"
|
||||
|
||||
#include "vtkFoamInsertNextPoint.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkFoam::addPatch
|
||||
(
|
||||
const polyPatch& p,
|
||||
vtkUnstructuredGrid *vtkPatch
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Adding patch " << p.name() << endl;
|
||||
}
|
||||
|
||||
SetName(vtkPatch, p.name().c_str());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting points" << endl;
|
||||
}
|
||||
|
||||
const Foam::pointField& points = p.localPoints();
|
||||
|
||||
// Convert Foam mesh vertices to VTK
|
||||
vtkPoints *vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate(points.size());
|
||||
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "converting faces" << endl;
|
||||
}
|
||||
|
||||
const faceList& faces = p.localFaces();
|
||||
|
||||
vtkPatch->Allocate(faces.size());
|
||||
|
||||
forAll(faces, facei)
|
||||
{
|
||||
const face& f = faces[facei];
|
||||
|
||||
if (f.size() == 3)
|
||||
{
|
||||
vtkPatch->InsertNextCell
|
||||
(
|
||||
VTK_TRIANGLE,
|
||||
3,
|
||||
const_cast<int*>(f.begin())
|
||||
);
|
||||
}
|
||||
else if (f.size() == 4)
|
||||
{
|
||||
vtkPatch->InsertNextCell
|
||||
(
|
||||
VTK_QUAD,
|
||||
4,
|
||||
const_cast<int*>(f.begin())
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
vtkPatch->InsertNextCell
|
||||
(
|
||||
VTK_POLYGON,
|
||||
f.size(),
|
||||
const_cast<int*>(f.begin())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
vtkPatch->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,234 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamConvertFields_H
|
||||
#define vtkFoamConvertFields_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkFoamConvertVolField.H"
|
||||
#include "vtkFoamConvertPointField.H"
|
||||
|
||||
#include "vtkFoamConvertPatchFaceField.H"
|
||||
#include "vtkFoamConvertPatchPointField.H"
|
||||
|
||||
#include "emptyFvPatchField.H"
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertVolFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const volPointInterpolation& pInterp,
|
||||
const IOobjectList& objects,
|
||||
vtkDataArraySelection *fieldSelection
|
||||
)
|
||||
{
|
||||
IOobjectList fieldObjects
|
||||
(
|
||||
objects.lookupClass
|
||||
(
|
||||
GeometricField<Type, fvPatchField, volMesh>::typeName
|
||||
)
|
||||
);
|
||||
|
||||
label nSelectedFields = fieldSelection->GetNumberOfArrays();
|
||||
|
||||
for (label i=0; i<nSelectedFields; i++)
|
||||
{
|
||||
if(fieldSelection->GetArraySetting(i))
|
||||
{
|
||||
word fieldName = fieldSelection->GetArrayName(i);
|
||||
|
||||
if (fieldObjects.found(fieldName))
|
||||
{
|
||||
GeometricField<Type, fvPatchField, volMesh> tf
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
fieldName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
tmp<GeometricField<Type, pointPatchField, pointMesh> > tptf
|
||||
(
|
||||
pInterp.interpolate(tf)
|
||||
);
|
||||
|
||||
if (selectedRegions_[0])
|
||||
{
|
||||
convertVolField(tf);
|
||||
convertPointField(tptf(), tf);
|
||||
}
|
||||
|
||||
label regioni = 0;
|
||||
forAll (mesh.boundaryMesh(), patchi)
|
||||
{
|
||||
if (mesh.boundaryMesh()[patchi].size())
|
||||
{
|
||||
regioni++;
|
||||
|
||||
if (selectedRegions_[regioni])
|
||||
{
|
||||
const fvPatchField<Type>& ptf
|
||||
(
|
||||
tf.boundaryField()[patchi]
|
||||
);
|
||||
|
||||
if (!isType<emptyFvPatchField<Type> >(ptf))
|
||||
{
|
||||
convertPatchFaceField
|
||||
(
|
||||
tf.name(),
|
||||
ptf,
|
||||
regioni
|
||||
);
|
||||
|
||||
convertPatchPointField
|
||||
(
|
||||
tptf().name(),
|
||||
tptf().boundaryField()[patchi]
|
||||
.patchInternalField()(),
|
||||
regioni
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
fvPatch p
|
||||
(
|
||||
ptf.patch().patch(),
|
||||
tf.mesh().boundary()
|
||||
);
|
||||
|
||||
convertPatchFaceField
|
||||
(
|
||||
tf.name(),
|
||||
fvPatchField<Type>(p, tf)
|
||||
.patchInternalField()(),
|
||||
regioni
|
||||
);
|
||||
|
||||
convertPatchPointField
|
||||
(
|
||||
tptf().name(),
|
||||
tptf().boundaryField()[patchi]
|
||||
.patchInternalField()(),
|
||||
regioni
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertPointFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const IOobjectList& objects,
|
||||
vtkDataArraySelection *fieldSelection
|
||||
)
|
||||
{
|
||||
IOobjectList fieldObjects
|
||||
(
|
||||
objects.lookupClass
|
||||
(
|
||||
GeometricField<Type, pointPatchField, pointMesh>::typeName
|
||||
)
|
||||
);
|
||||
|
||||
label nSelectedFields = fieldSelection->GetNumberOfArrays();
|
||||
|
||||
for (label i=0; i<nSelectedFields; i++)
|
||||
{
|
||||
if(fieldSelection->GetArraySetting(i))
|
||||
{
|
||||
word fieldName = fieldSelection->GetArrayName(i);
|
||||
|
||||
if (fieldObjects.found(fieldName))
|
||||
{
|
||||
pointMesh pMesh(mesh);
|
||||
|
||||
GeometricField<Type, pointPatchField, pointMesh> ptf
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
fieldName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
),
|
||||
pMesh
|
||||
);
|
||||
|
||||
if (selectedRegions_[0])
|
||||
{
|
||||
convertPointField
|
||||
(
|
||||
ptf,
|
||||
GeometricField<Type, fvPatchField, volMesh>::null()
|
||||
);
|
||||
}
|
||||
|
||||
label regioni = 0;
|
||||
forAll (mesh.boundaryMesh(), patchi)
|
||||
{
|
||||
if (mesh.boundaryMesh()[patchi].size())
|
||||
{
|
||||
regioni++;
|
||||
|
||||
if (selectedRegions_[regioni])
|
||||
{
|
||||
convertPatchPointField
|
||||
(
|
||||
ptf.name(),
|
||||
ptf.boundaryField()[patchi]
|
||||
.patchInternalField()(),
|
||||
regioni
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,105 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamConvertPatchFaceField_H
|
||||
#define vtkFoamConvertPatchFaceField_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertPatchFaceField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& ptf,
|
||||
const label regioni
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni));
|
||||
|
||||
vtkFloatArray *cellTypes = vtkFloatArray::New();
|
||||
cellTypes->SetNumberOfTuples(ptf.size());
|
||||
cellTypes->SetNumberOfComponents(Type::nComponents);
|
||||
cellTypes->Allocate(Type::nComponents*ptf.size());
|
||||
cellTypes->SetName(name.c_str());
|
||||
|
||||
float vec[Type::nComponents];
|
||||
|
||||
forAll(ptf, i)
|
||||
{
|
||||
const Type& t = ptf[i];
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = t[d];
|
||||
}
|
||||
|
||||
cellTypes->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
vtkMesh->GetCellData()->AddArray(cellTypes);
|
||||
cellTypes->Delete();
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
void Foam::vtkFoam::convertPatchFaceField
|
||||
(
|
||||
const word& name,
|
||||
const Field<scalar>& psf,
|
||||
const label regioni
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni));
|
||||
|
||||
vtkFloatArray *cellScalars = vtkFloatArray::New();
|
||||
cellScalars->SetNumberOfTuples(psf.size());
|
||||
cellScalars->SetNumberOfComponents(1);
|
||||
cellScalars->Allocate(psf.size());
|
||||
cellScalars->SetName(name.c_str());
|
||||
|
||||
forAll(psf, i)
|
||||
{
|
||||
cellScalars->InsertComponent(i, 0, psf[i]);
|
||||
}
|
||||
|
||||
vtkMesh->GetCellData()->AddArray(cellScalars);
|
||||
if (!vtkMesh->GetCellData()->GetScalars())
|
||||
{
|
||||
vtkMesh->GetCellData()->SetScalars(cellScalars);
|
||||
}
|
||||
|
||||
cellScalars->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,104 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamConvertPatchPointField_H
|
||||
#define vtkFoamConvertPatchPointField_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& pptf,
|
||||
const label regioni
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni));
|
||||
|
||||
vtkFloatArray *pointTypes = vtkFloatArray::New();
|
||||
pointTypes->SetNumberOfTuples(pptf.size());
|
||||
pointTypes->SetNumberOfComponents(Type::nComponents);
|
||||
pointTypes->Allocate(Type::nComponents*pptf.size());
|
||||
pointTypes->SetName(name.c_str());
|
||||
|
||||
float vec[Type::nComponents];
|
||||
|
||||
forAll(pptf, i)
|
||||
{
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = pptf[i][d];
|
||||
}
|
||||
|
||||
pointTypes->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
vtkMesh->GetPointData()->AddArray(pointTypes);
|
||||
pointTypes->Delete();
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
void Foam::vtkFoam::convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<scalar>& ppsf,
|
||||
const label regioni
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni));
|
||||
|
||||
vtkFloatArray *pointScalars = vtkFloatArray::New();
|
||||
pointScalars->SetNumberOfTuples(ppsf.size());
|
||||
pointScalars->SetNumberOfComponents(1);
|
||||
pointScalars->Allocate(ppsf.size());
|
||||
pointScalars->SetName(name.c_str());
|
||||
|
||||
for (int i=0; i<ppsf.size(); i++)
|
||||
{
|
||||
pointScalars->InsertComponent(i, 0, ppsf[i]);
|
||||
}
|
||||
|
||||
vtkMesh->GetPointData()->AddArray(pointScalars);
|
||||
if (!vtkMesh->GetPointData()->GetScalars())
|
||||
{
|
||||
vtkMesh->GetPointData()->SetScalars(pointScalars);
|
||||
}
|
||||
|
||||
pointScalars->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,162 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamConvertPointField_H
|
||||
#define vtkFoamConvertPointField_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "interpolatePointToCell.H"
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertPointField
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0));
|
||||
|
||||
vtkFloatArray *pointTypes = vtkFloatArray::New();
|
||||
pointTypes->SetNumberOfTuples(ptf.size() + addPointCellLabels_.size());
|
||||
pointTypes->SetNumberOfComponents(Type::nComponents);
|
||||
pointTypes->Allocate(Type::nComponents*ptf.size());
|
||||
pointTypes->SetName(ptf.name().c_str());
|
||||
|
||||
float vec[Type::nComponents];
|
||||
|
||||
forAll(ptf, i)
|
||||
{
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = ptf[i][d];
|
||||
}
|
||||
|
||||
pointTypes->InsertTuple(i, vec);
|
||||
}
|
||||
|
||||
label i = ptf.size();
|
||||
|
||||
if (&tf != &GeometricField<Type, fvPatchField, volMesh>::null())
|
||||
{
|
||||
forAll(addPointCellLabels_, api)
|
||||
{
|
||||
Type t = tf[addPointCellLabels_[api]];
|
||||
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = t[d];
|
||||
}
|
||||
|
||||
pointTypes->InsertTuple(i++, vec);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(addPointCellLabels_, api)
|
||||
{
|
||||
Type t = interpolatePointToCell(ptf, addPointCellLabels_[api]);
|
||||
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = t[d];
|
||||
}
|
||||
|
||||
pointTypes->InsertTuple(i++, vec);
|
||||
}
|
||||
}
|
||||
|
||||
vtkMesh->GetPointData()->AddArray(pointTypes);
|
||||
pointTypes->Delete();
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
void Foam::vtkFoam::convertPointField
|
||||
(
|
||||
const GeometricField<scalar, pointPatchField, pointMesh>& psf,
|
||||
const GeometricField<scalar, fvPatchField, volMesh>& sf
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0));
|
||||
|
||||
vtkFloatArray *pointScalars = vtkFloatArray::New();
|
||||
pointScalars->SetNumberOfTuples(psf.size() + addPointCellLabels_.size());
|
||||
pointScalars->SetNumberOfComponents(1);
|
||||
pointScalars->Allocate(psf.size());
|
||||
pointScalars->SetName(psf.name().c_str());
|
||||
|
||||
for (int i=0; i<psf.size(); i++)
|
||||
{
|
||||
pointScalars->InsertComponent(i, 0, psf[i]);
|
||||
}
|
||||
|
||||
label i = psf.size();
|
||||
|
||||
if (&sf != &GeometricField<scalar, fvPatchField, volMesh>::null())
|
||||
{
|
||||
forAll(addPointCellLabels_, api)
|
||||
{
|
||||
pointScalars->InsertComponent
|
||||
(
|
||||
i++,
|
||||
0,
|
||||
sf[addPointCellLabels_[api]]
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(addPointCellLabels_, api)
|
||||
{
|
||||
pointScalars->InsertComponent
|
||||
(
|
||||
i++,
|
||||
0,
|
||||
interpolatePointToCell(psf, addPointCellLabels_[api])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
vtkMesh->GetPointData()->AddArray(pointScalars);
|
||||
if (!vtkMesh->GetPointData()->GetScalars())
|
||||
{
|
||||
vtkMesh->GetPointData()->SetScalars(pointScalars);
|
||||
}
|
||||
|
||||
pointScalars->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,101 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamConvertVolField_H
|
||||
#define vtkFoamConvertVolField_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkFoam::convertVolField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0));
|
||||
|
||||
vtkFloatArray *cellTypes = vtkFloatArray::New();
|
||||
cellTypes->SetNumberOfTuples(superCells_.size());
|
||||
cellTypes->SetNumberOfComponents(Type::nComponents);
|
||||
cellTypes->Allocate(Type::nComponents*tf.size());
|
||||
cellTypes->SetName(tf.name().c_str());
|
||||
|
||||
float vec[Type::nComponents];
|
||||
|
||||
forAll(superCells_, sci)
|
||||
{
|
||||
const Type& t = tf[superCells_[sci]];
|
||||
for (direction d=0; d<Type::nComponents; d++)
|
||||
{
|
||||
vec[d] = t[d];
|
||||
}
|
||||
|
||||
cellTypes->InsertTuple(sci, vec);
|
||||
}
|
||||
|
||||
vtkMesh->GetCellData()->AddArray(cellTypes);
|
||||
cellTypes->Delete();
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
void Foam::vtkFoam::convertVolField
|
||||
(
|
||||
const GeometricField<scalar, fvPatchField, volMesh>& sf
|
||||
)
|
||||
{
|
||||
vtkUnstructuredGrid *vtkMesh =
|
||||
vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0));
|
||||
|
||||
vtkFloatArray *cellScalars = vtkFloatArray::New();
|
||||
cellScalars->SetNumberOfTuples(superCells_.size());
|
||||
cellScalars->SetNumberOfComponents(1);
|
||||
cellScalars->Allocate(sf.size());
|
||||
cellScalars->SetName(sf.name().c_str());
|
||||
|
||||
forAll(superCells_, sci)
|
||||
{
|
||||
cellScalars->InsertComponent(sci, 0, sf[superCells_[sci]]);
|
||||
}
|
||||
|
||||
vtkMesh->GetCellData()->AddArray(cellScalars);
|
||||
if (!vtkMesh->GetCellData()->GetScalars())
|
||||
{
|
||||
vtkMesh->GetCellData()->SetScalars(cellScalars);
|
||||
}
|
||||
|
||||
cellScalars->Delete();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -1,48 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 4.0
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
Foam::vtkFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkFoamInsertNextPoint_H
|
||||
#define vtkFoamInsertNextPoint_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
inline void vtkFoamInsertNextPoint
|
||||
(
|
||||
vtkPoints *points,
|
||||
const Foam::point& p
|
||||
)
|
||||
{
|
||||
points->InsertNextPoint(p.x(), p.y(), p.z());
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
10
applications/utilities/postProcessing/graphics/PVReaders/Allwclean
Executable file
10
applications/utilities/postProcessing/graphics/PVReaders/Allwclean
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # Run from this directory
|
||||
|
||||
wclean libso vtkPVFoam
|
||||
|
||||
[ ! -z "$FOAM_LIBBIN" ] && rm -f "$FOAM_LIBBIN/libvtkPVFoam"* 2>/dev/null
|
||||
[ ! -z "$PV_PLUGIN_PATH" ] && rm -f "$PV_PLUGIN_PATH/libPVFoamReader_SM"* 2>/dev/null
|
||||
rm -rf PVFoamReader/Make
|
||||
|
||||
#------------------------------------------------------------------------------
|
41
applications/utilities/postProcessing/graphics/PVReaders/Allwmake
Executable file
41
applications/utilities/postProcessing/graphics/PVReaders/Allwmake
Executable file
|
@ -0,0 +1,41 @@
|
|||
#!/bin/bash
|
||||
cd ${0%/*} || exit 1 # Run from this directory
|
||||
|
||||
if [ -d "$PARAVIEW_DIR" -a -r "$PARAVIEW_DIR" ]; then
|
||||
case "$PARAVIEW_VERSION" in
|
||||
4* | 5*)
|
||||
[ -n "$PV_PLUGIN_PATH" ] || {
|
||||
echo "$0 : PV_PLUGIN_PATH not valid - it is unset"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ensure CMake gets the correct C/C++ compilers
|
||||
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
||||
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
||||
|
||||
# store major version for usage in vtkPVFoam/Make/options
|
||||
export PARAVIEW_MAJOR_VERSION="${PARAVIEW_VERSION:0:1}"
|
||||
|
||||
wmake libso vtkPVFoam
|
||||
|
||||
# clear major version
|
||||
unset PARAVIEW_MAJOR_VERSION
|
||||
|
||||
(
|
||||
cd PVFoamReader
|
||||
mkdir -p Make/$WM_OPTIONS > /dev/null 2>&1
|
||||
cd Make/$WM_OPTIONS
|
||||
cmake ../..
|
||||
if [ "$WM_ARCH_BASE" == "darwin" ]
|
||||
then
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PVFoamReader.dir/link.txt
|
||||
sed -i bak -e 's/-dynamiclib /& -undefined dynamic_lookup /' CMakeFiles/PVFoamReader_SM.dir/link.txt
|
||||
fi
|
||||
make
|
||||
)
|
||||
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
|
@ -23,10 +23,11 @@ LINK_DIRECTORIES(
|
|||
INCLUDE_DIRECTORIES(
|
||||
$ENV{WM_PROJECT_DIR}/src/foam/lnInclude
|
||||
$ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude
|
||||
${PROJECT_SOURCE_DIR}/../vtkPV4Foam
|
||||
${PROJECT_SOURCE_DIR}/../vtkPVFoam
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(
|
||||
-std=c++11
|
||||
-DWM_$ENV{WM_PRECISION_OPTION}
|
||||
)
|
||||
|
||||
|
@ -39,16 +40,16 @@ SET(
|
|||
|
||||
# Build the server-side plugin
|
||||
ADD_PARAVIEW_PLUGIN(
|
||||
PV4FoamReader_SM "1.0"
|
||||
SERVER_MANAGER_XML PV4FoamReader_SM.xml
|
||||
SERVER_MANAGER_SOURCES vtkPV4FoamReader.cxx
|
||||
PVFoamReader_SM "1.0"
|
||||
SERVER_MANAGER_XML PVFoamReader_SM.xml
|
||||
SERVER_MANAGER_SOURCES vtkPVFoamReader.cxx
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
PV4FoamReader_SM
|
||||
PVFoamReader_SM
|
||||
foam
|
||||
finiteVolume
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
pqCore
|
||||
)
|
||||
#-----------------------------------------------------------------------------
|
|
@ -1,8 +1,8 @@
|
|||
<ServerManagerConfiguration>
|
||||
<ProxyGroup name="sources">
|
||||
<SourceProxy
|
||||
name="PV4FoamReader"
|
||||
class="vtkPV4FoamReader">
|
||||
name="PVFoamReader"
|
||||
class="vtkPVFoamReader">
|
||||
|
||||
<!-- File extension section for paraview 4.3+ -->
|
||||
|
||||
|
@ -104,6 +104,21 @@
|
|||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
<!-- Use VTK Polyhedron check-box -->
|
||||
<IntVectorProperty
|
||||
name="UiUseVTKPolyhedron"
|
||||
command="SetUseVTKPolyhedron"
|
||||
label="Use VTK Polyhedron"
|
||||
number_of_elements="1"
|
||||
default_values="0"
|
||||
animateable="0">
|
||||
<BooleanDomain name="bool"/>
|
||||
<Documentation>
|
||||
Represent cells as general polyhedra instead of decomposing
|
||||
them into simpler shapes
|
||||
</Documentation>
|
||||
</IntVectorProperty>
|
||||
|
||||
|
||||
<!-- Update GUI check box -->
|
||||
<IntVectorProperty
|
|
@ -1,7 +1,7 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
Module: $RCSfile: vtkPV4FoamReader.cxx,v $
|
||||
Module: $RCSfile: vtkPVFoamReader.cxx,v $
|
||||
|
||||
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||||
All rights reserved.
|
||||
|
@ -13,7 +13,7 @@
|
|||
|
||||
=========================================================================*/
|
||||
|
||||
#include "vtkPV4FoamReader.h"
|
||||
#include "vtkPVFoamReader.h"
|
||||
|
||||
#include "pqApplicationCore.h"
|
||||
#include "pqRenderView.h"
|
||||
|
@ -31,13 +31,13 @@
|
|||
#include "vtkStringArray.h"
|
||||
|
||||
// Foam includes
|
||||
#include "vtkPV4Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
vtkStandardNewMacro(vtkPV4FoamReader);
|
||||
vtkStandardNewMacro(vtkPVFoamReader);
|
||||
|
||||
#undef EXPERIMENTAL_TIME_CACHING
|
||||
|
||||
vtkPV4FoamReader::vtkPV4FoamReader()
|
||||
vtkPVFoamReader::vtkPVFoamReader()
|
||||
{
|
||||
Debug = 0;
|
||||
vtkDebugMacro(<<"Constructor");
|
||||
|
@ -49,7 +49,7 @@ vtkPV4FoamReader::vtkPV4FoamReader()
|
|||
|
||||
output0_ = NULL;
|
||||
|
||||
#ifdef VTKPV4FOAM_DUALPORT
|
||||
#ifdef VTKPVFOAM_DUALPORT
|
||||
// Add second output for the Lagrangian
|
||||
this->SetNumberOfOutputPorts(2);
|
||||
vtkMultiBlockDataSet *lagrangian = vtkMultiBlockDataSet::New();
|
||||
|
@ -65,6 +65,7 @@ vtkPV4FoamReader::vtkPV4FoamReader()
|
|||
CacheMesh = 1;
|
||||
|
||||
ExtrapolatePatches = 0;
|
||||
UseVTKPolyhedron = 0;
|
||||
IncludeSets = 0;
|
||||
IncludeZones = 0;
|
||||
ShowPatchNames = 0;
|
||||
|
@ -81,7 +82,7 @@ vtkPV4FoamReader::vtkPV4FoamReader()
|
|||
SelectionObserver = vtkCallbackCommand::New();
|
||||
SelectionObserver->SetCallback
|
||||
(
|
||||
&vtkPV4FoamReader::SelectionModifiedCallback
|
||||
&vtkPVFoamReader::SelectionModifiedCallback
|
||||
);
|
||||
SelectionObserver->SetClientData(this);
|
||||
|
||||
|
@ -108,7 +109,7 @@ vtkPV4FoamReader::vtkPV4FoamReader()
|
|||
}
|
||||
|
||||
|
||||
vtkPV4FoamReader::~vtkPV4FoamReader()
|
||||
vtkPVFoamReader::~vtkPVFoamReader()
|
||||
{
|
||||
vtkDebugMacro(<<"Deconstructor");
|
||||
|
||||
|
@ -140,7 +141,7 @@ vtkPV4FoamReader::~vtkPV4FoamReader()
|
|||
|
||||
|
||||
// Do everything except set the output info
|
||||
int vtkPV4FoamReader::RequestInformation
|
||||
int vtkPVFoamReader::RequestInformation
|
||||
(
|
||||
vtkInformation* vtkNotUsed(request),
|
||||
vtkInformationVector** vtkNotUsed(inputVector),
|
||||
|
@ -149,7 +150,7 @@ int vtkPV4FoamReader::RequestInformation
|
|||
{
|
||||
vtkDebugMacro(<<"RequestInformation");
|
||||
|
||||
if (Foam::vtkPV4Foam::debug)
|
||||
if (Foam::vtkPVFoam::debug)
|
||||
{
|
||||
cout<<"REQUEST_INFORMATION\n";
|
||||
}
|
||||
|
@ -162,7 +163,7 @@ int vtkPV4FoamReader::RequestInformation
|
|||
|
||||
int nInfo = outputVector->GetNumberOfInformationObjects();
|
||||
|
||||
if (Foam::vtkPV4Foam::debug)
|
||||
if (Foam::vtkPVFoam::debug)
|
||||
{
|
||||
cout<<"RequestInformation with " << nInfo << " item(s)\n";
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
|
@ -173,7 +174,7 @@ int vtkPV4FoamReader::RequestInformation
|
|||
|
||||
if (!foamData_)
|
||||
{
|
||||
foamData_ = new Foam::vtkPV4Foam(FileName, this);
|
||||
foamData_ = new Foam::vtkPVFoam(FileName, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -210,7 +211,7 @@ int vtkPV4FoamReader::RequestInformation
|
|||
timeRange[0] = timeSteps[0];
|
||||
timeRange[1] = timeSteps[nTimeSteps-1];
|
||||
|
||||
if (Foam::vtkPV4Foam::debug > 1)
|
||||
if (Foam::vtkPVFoam::debug > 1)
|
||||
{
|
||||
cout<<"nTimeSteps " << nTimeSteps << "\n"
|
||||
<<"timeRange " << timeRange[0] << " to " << timeRange[1]
|
||||
|
@ -240,7 +241,7 @@ int vtkPV4FoamReader::RequestInformation
|
|||
|
||||
|
||||
// Set the output info
|
||||
int vtkPV4FoamReader::RequestData
|
||||
int vtkPVFoamReader::RequestData
|
||||
(
|
||||
vtkInformation* vtkNotUsed(request),
|
||||
vtkInformationVector** vtkNotUsed(inputVector),
|
||||
|
@ -264,7 +265,7 @@ int vtkPV4FoamReader::RequestData
|
|||
|
||||
int nInfo = outputVector->GetNumberOfInformationObjects();
|
||||
|
||||
if (Foam::vtkPV4Foam::debug)
|
||||
if (Foam::vtkPVFoam::debug)
|
||||
{
|
||||
cout<<"RequestData with " << nInfo << " item(s)\n";
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
|
@ -282,7 +283,7 @@ int vtkPV4FoamReader::RequestData
|
|||
// taking port0 as the lead for other outputs would be nice, but fails when
|
||||
// a filter is added - we need to check everything
|
||||
// but since PREVIOUS_UPDATE_TIME_STEPS() is protected, relay the logic
|
||||
// to the vtkPV4Foam::setTime() method
|
||||
// to the vtkPVFoam::setTime() method
|
||||
for (int infoI = 0; infoI < nInfo; ++infoI)
|
||||
{
|
||||
vtkInformation *outInfo = outputVector->GetInformationObject(infoI);
|
||||
|
@ -314,7 +315,7 @@ int vtkPV4FoamReader::RequestData
|
|||
)
|
||||
);
|
||||
|
||||
if (Foam::vtkPV4Foam::debug)
|
||||
if (Foam::vtkPVFoam::debug)
|
||||
{
|
||||
cout<< "update output with "
|
||||
<< output->GetNumberOfBlocks() << " blocks\n";
|
||||
|
@ -342,7 +343,7 @@ int vtkPV4FoamReader::RequestData
|
|||
output->ShallowCopy(output0_);
|
||||
}
|
||||
|
||||
if (Foam::vtkPV4Foam::debug)
|
||||
if (Foam::vtkPVFoam::debug)
|
||||
{
|
||||
if (needsUpdate)
|
||||
{
|
||||
|
@ -362,7 +363,7 @@ int vtkPV4FoamReader::RequestData
|
|||
|
||||
#else
|
||||
|
||||
#ifdef VTKPV4FOAM_DUALPORT
|
||||
#ifdef VTKPVFOAM_DUALPORT
|
||||
foamData_->Update
|
||||
(
|
||||
output,
|
||||
|
@ -396,7 +397,7 @@ int vtkPV4FoamReader::RequestData
|
|||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::addPatchNamesToView()
|
||||
void vtkPVFoamReader::addPatchNamesToView()
|
||||
{
|
||||
pqApplicationCore* appCore = pqApplicationCore::instance();
|
||||
|
||||
|
@ -416,7 +417,7 @@ void vtkPV4FoamReader::addPatchNamesToView()
|
|||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::removePatchNamesFromView()
|
||||
void vtkPVFoamReader::removePatchNamesFromView()
|
||||
{
|
||||
pqApplicationCore* appCore = pqApplicationCore::instance();
|
||||
|
||||
|
@ -436,7 +437,7 @@ void vtkPV4FoamReader::removePatchNamesFromView()
|
|||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::PrintSelf(ostream& os, vtkIndent indent)
|
||||
void vtkPVFoamReader::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
vtkDebugMacro(<<"PrintSelf");
|
||||
|
||||
|
@ -453,7 +454,7 @@ void vtkPV4FoamReader::PrintSelf(ostream& os, vtkIndent indent)
|
|||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetTimeStep()
|
||||
int vtkPVFoamReader::GetTimeStep()
|
||||
{
|
||||
return foamData_ ? foamData_->timeIndex() : -1;
|
||||
}
|
||||
|
@ -462,35 +463,35 @@ int vtkPV4FoamReader::GetTimeStep()
|
|||
// ----------------------------------------------------------------------
|
||||
// Parts selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV4FoamReader::GetPartSelection()
|
||||
vtkDataArraySelection* vtkPVFoamReader::GetPartSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartSelection");
|
||||
return PartSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetNumberOfPartArrays()
|
||||
int vtkPVFoamReader::GetNumberOfPartArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfPartArrays");
|
||||
return PartSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV4FoamReader::GetPartArrayName(int index)
|
||||
const char* vtkPVFoamReader::GetPartArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartArrayName");
|
||||
return PartSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetPartArrayStatus(const char* name)
|
||||
int vtkPVFoamReader::GetPartArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPartArrayStatus");
|
||||
return PartSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::SetPartArrayStatus(const char* name, int status)
|
||||
void vtkPVFoamReader::SetPartArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetPartArrayStatus");
|
||||
if (status)
|
||||
|
@ -507,35 +508,35 @@ void vtkPV4FoamReader::SetPartArrayStatus(const char* name, int status)
|
|||
// ----------------------------------------------------------------------
|
||||
// volField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV4FoamReader::GetVolFieldSelection()
|
||||
vtkDataArraySelection* vtkPVFoamReader::GetVolFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldSelection");
|
||||
return VolFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetNumberOfVolFieldArrays()
|
||||
int vtkPVFoamReader::GetNumberOfVolFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfVolFieldArrays");
|
||||
return VolFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV4FoamReader::GetVolFieldArrayName(int index)
|
||||
const char* vtkPVFoamReader::GetVolFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldArrayName");
|
||||
return VolFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetVolFieldArrayStatus(const char* name)
|
||||
int vtkPVFoamReader::GetVolFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetVolFieldArrayStatus");
|
||||
return VolFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::SetVolFieldArrayStatus(const char* name, int status)
|
||||
void vtkPVFoamReader::SetVolFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetVolFieldArrayStatus");
|
||||
if (status)
|
||||
|
@ -552,35 +553,35 @@ void vtkPV4FoamReader::SetVolFieldArrayStatus(const char* name, int status)
|
|||
// ----------------------------------------------------------------------
|
||||
// pointField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV4FoamReader::GetPointFieldSelection()
|
||||
vtkDataArraySelection* vtkPVFoamReader::GetPointFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldSelection");
|
||||
return PointFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetNumberOfPointFieldArrays()
|
||||
int vtkPVFoamReader::GetNumberOfPointFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfPointFieldArrays");
|
||||
return PointFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV4FoamReader::GetPointFieldArrayName(int index)
|
||||
const char* vtkPVFoamReader::GetPointFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldArrayName");
|
||||
return PointFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetPointFieldArrayStatus(const char* name)
|
||||
int vtkPVFoamReader::GetPointFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetPointFieldArrayStatus");
|
||||
return PointFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::SetPointFieldArrayStatus(const char* name, int status)
|
||||
void vtkPVFoamReader::SetPointFieldArrayStatus(const char* name, int status)
|
||||
{
|
||||
vtkDebugMacro(<<"SetPointFieldArrayStatus");
|
||||
if (status)
|
||||
|
@ -597,35 +598,35 @@ void vtkPV4FoamReader::SetPointFieldArrayStatus(const char* name, int status)
|
|||
// ----------------------------------------------------------------------
|
||||
// lagrangianField selection list control
|
||||
|
||||
vtkDataArraySelection* vtkPV4FoamReader::GetLagrangianFieldSelection()
|
||||
vtkDataArraySelection* vtkPVFoamReader::GetLagrangianFieldSelection()
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldSelection");
|
||||
return LagrangianFieldSelection;
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetNumberOfLagrangianFieldArrays()
|
||||
int vtkPVFoamReader::GetNumberOfLagrangianFieldArrays()
|
||||
{
|
||||
vtkDebugMacro(<<"GetNumberOfLagrangianFieldArrays");
|
||||
return LagrangianFieldSelection->GetNumberOfArrays();
|
||||
}
|
||||
|
||||
|
||||
const char* vtkPV4FoamReader::GetLagrangianFieldArrayName(int index)
|
||||
const char* vtkPVFoamReader::GetLagrangianFieldArrayName(int index)
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldArrayName");
|
||||
return LagrangianFieldSelection->GetArrayName(index);
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::GetLagrangianFieldArrayStatus(const char* name)
|
||||
int vtkPVFoamReader::GetLagrangianFieldArrayStatus(const char* name)
|
||||
{
|
||||
vtkDebugMacro(<<"GetLagrangianFieldArrayStatus");
|
||||
return LagrangianFieldSelection->ArrayIsEnabled(name);
|
||||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::SetLagrangianFieldArrayStatus
|
||||
void vtkPVFoamReader::SetLagrangianFieldArrayStatus
|
||||
(
|
||||
const char* name,
|
||||
int status
|
||||
|
@ -645,7 +646,7 @@ void vtkPV4FoamReader::SetLagrangianFieldArrayStatus
|
|||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
void vtkPV4FoamReader::SelectionModifiedCallback
|
||||
void vtkPVFoamReader::SelectionModifiedCallback
|
||||
(
|
||||
vtkObject*,
|
||||
unsigned long,
|
||||
|
@ -653,18 +654,18 @@ void vtkPV4FoamReader::SelectionModifiedCallback
|
|||
void*
|
||||
)
|
||||
{
|
||||
static_cast<vtkPV4FoamReader*>(clientdata)->SelectionModified();
|
||||
static_cast<vtkPVFoamReader*>(clientdata)->SelectionModified();
|
||||
}
|
||||
|
||||
|
||||
void vtkPV4FoamReader::SelectionModified()
|
||||
void vtkPVFoamReader::SelectionModified()
|
||||
{
|
||||
vtkDebugMacro(<<"SelectionModified");
|
||||
Modified();
|
||||
}
|
||||
|
||||
|
||||
int vtkPV4FoamReader::FillOutputPortInformation
|
||||
int vtkPVFoamReader::FillOutputPortInformation
|
||||
(
|
||||
int port,
|
||||
vtkInformation* info
|
|
@ -1,7 +1,7 @@
|
|||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
Module: $RCSfile: vtkPV4FoamReader.h,v $
|
||||
Module: $RCSfile: vtkPVFoamReader.h,v $
|
||||
|
||||
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||||
All rights reserved.
|
||||
|
@ -12,19 +12,19 @@
|
|||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
// .NAME vtkPV4FoamReader - reads a dataset in OpenFOAM format
|
||||
// .NAME vtkPVFoamReader - reads a dataset in OpenFOAM format
|
||||
// .SECTION Description
|
||||
// vtkPV4FoamReader creates an multiblock dataset.
|
||||
// vtkPVFoamReader creates an multiblock dataset.
|
||||
// It uses the OpenFOAM infrastructure (fvMesh, etc) to
|
||||
// handle mesh and field data.
|
||||
|
||||
#ifndef __vtkPV4FoamReader_h
|
||||
#define __vtkPV4FoamReader_h
|
||||
#ifndef __vtkPVFoamReader_h
|
||||
#define __vtkPVFoamReader_h
|
||||
|
||||
// Foam forward declarations
|
||||
namespace Foam
|
||||
{
|
||||
class vtkPV4Foam;
|
||||
class vtkPVFoam;
|
||||
}
|
||||
|
||||
// VTK includes
|
||||
|
@ -37,18 +37,18 @@ class vtkCallbackCommand;
|
|||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkPV4FoamReader Declaration
|
||||
Class vtkPVFoamReader Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class vtkPV4FoamReader
|
||||
class vtkPVFoamReader
|
||||
:
|
||||
public vtkMultiBlockDataSetAlgorithm
|
||||
{
|
||||
public:
|
||||
vtkTypeMacro(vtkPV4FoamReader, vtkMultiBlockDataSetAlgorithm);
|
||||
vtkTypeMacro(vtkPVFoamReader, vtkMultiBlockDataSetAlgorithm);
|
||||
void PrintSelf(ostream&, vtkIndent);
|
||||
|
||||
static vtkPV4FoamReader* New();
|
||||
static vtkPVFoamReader* New();
|
||||
|
||||
// Description:
|
||||
// Get the current timestep and the timestep range.
|
||||
|
@ -74,6 +74,11 @@ public:
|
|||
vtkSetMacro(ExtrapolatePatches, int);
|
||||
vtkGetMacro(ExtrapolatePatches, int);
|
||||
|
||||
// Description:
|
||||
// FOAM use vtkPolyhedron instead of decomposing polyhedra
|
||||
vtkSetMacro(UseVTKPolyhedron, int);
|
||||
vtkGetMacro(UseVTKPolyhedron, int);
|
||||
|
||||
// FOAM read sets control
|
||||
vtkSetMacro(IncludeSets, int);
|
||||
vtkGetMacro(IncludeSets, int);
|
||||
|
@ -141,10 +146,10 @@ public:
|
|||
protected:
|
||||
|
||||
//- Construct null
|
||||
vtkPV4FoamReader();
|
||||
vtkPVFoamReader();
|
||||
|
||||
//- Destructor
|
||||
~vtkPV4FoamReader();
|
||||
~vtkPVFoamReader();
|
||||
|
||||
//- Return information about mesh, times, etc without loading anything
|
||||
virtual int RequestInformation
|
||||
|
@ -174,10 +179,10 @@ protected:
|
|||
private:
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
vtkPV4FoamReader(const vtkPV4FoamReader&);
|
||||
vtkPVFoamReader(const vtkPVFoamReader&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const vtkPV4FoamReader&);
|
||||
void operator=(const vtkPVFoamReader&);
|
||||
|
||||
//- Add patch names to the view
|
||||
void addPatchNamesToView();
|
||||
|
@ -189,6 +194,7 @@ private:
|
|||
int CacheMesh;
|
||||
|
||||
int ExtrapolatePatches;
|
||||
int UseVTKPolyhedron;
|
||||
int IncludeSets;
|
||||
int IncludeZones;
|
||||
int ShowPatchNames;
|
||||
|
@ -205,7 +211,7 @@ private:
|
|||
vtkMultiBlockDataSet* output0_;
|
||||
|
||||
//BTX
|
||||
Foam::vtkPV4Foam* foamData_;
|
||||
Foam::vtkPVFoam* foamData_;
|
||||
//ETX
|
||||
};
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
vtkPVFoam.C
|
||||
vtkPVFoamFields.C
|
||||
vtkPVFoamMesh.C
|
||||
vtkPVFoamMeshLagrangian.C
|
||||
vtkPVFoamMeshPatch.C
|
||||
vtkPVFoamMeshSet.C
|
||||
vtkPVFoamMeshVolume.C
|
||||
vtkPVFoamMeshZone.C
|
||||
vtkPVFoamUpdateInfo.C
|
||||
vtkPVFoamUtilities.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libvtkPVFoam
|
|
@ -0,0 +1,21 @@
|
|||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(PARAVIEW_INCLUDE_DIR) \
|
||||
-I$(PARAVIEW_INCLUDE_DIR)/vtkkwiml \
|
||||
-I../PVFoamReader \
|
||||
$(shell \
|
||||
test -f $(PARAVIEW_INCLUDE_DIR)/vtkPolyhedron.h && \
|
||||
echo "-DHAS_VTK_POLYHEDRON" || echo "-UHAS_VTK_POLYHEDRON" \
|
||||
) \
|
||||
$(shell \
|
||||
[ $(PARAVIEW_MAJOR_VERSION) = '5' ] && echo "-std=c++11" \
|
||||
)
|
||||
|
||||
LIB_LIBS = \
|
||||
-l$(WM_PROJECT) \
|
||||
-lfiniteVolume \
|
||||
-llagrangian \
|
||||
-lmeshTools \
|
||||
$(GLIBS)
|
|
@ -22,7 +22,7 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
|
@ -23,8 +23,8 @@ License
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
#include "vtkPV3FoamReader.h"
|
||||
#include "vtkPVFoam.H"
|
||||
#include "vtkPVFoamReader.h"
|
||||
|
||||
// Foam includes
|
||||
#include "fvMesh.H"
|
||||
|
@ -40,14 +40,14 @@ License
|
|||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(Foam::vtkPV3Foam, 0);
|
||||
defineTypeNameAndDebug(Foam::vtkPVFoam, 0);
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
#include "vtkPV3FoamAddToSelection.H"
|
||||
#include "vtkPV3FoamUpdateInfoFields.H"
|
||||
#include "vtkPVFoamAddToSelection.H"
|
||||
#include "vtkPVFoamUpdateInfoFields.H"
|
||||
|
||||
void Foam::vtkPV3Foam::resetCounters()
|
||||
void Foam::vtkPVFoam::resetCounters()
|
||||
{
|
||||
// Reset mesh part ids and sizes
|
||||
partInfoVolume_.reset();
|
||||
|
@ -62,7 +62,7 @@ void Foam::vtkPV3Foam::resetCounters()
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::reduceMemory()
|
||||
void Foam::vtkPVFoam::reduceMemory()
|
||||
{
|
||||
forAll(regionPolyDecomp_, i)
|
||||
{
|
||||
|
@ -89,11 +89,11 @@ void Foam::vtkPV3Foam::reduceMemory()
|
|||
|
||||
|
||||
|
||||
int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[])
|
||||
int Foam::vtkPVFoam::setTime(int nRequest, const double requestTimes[])
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::setTime(";
|
||||
Info<< "<beg> Foam::vtkPVFoam::setTime(";
|
||||
for (int requestI = 0; requestI < nRequest; ++requestI)
|
||||
{
|
||||
if (requestI)
|
||||
|
@ -157,7 +157,7 @@ int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[])
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::setTime() - selectedTime="
|
||||
Info<< "<end> Foam::vtkPVFoam::setTime() - selectedTime="
|
||||
<< Times[nearestIndex].name() << " index=" << timeIndex_
|
||||
<< "/" << Times.size()
|
||||
<< " meshChanged=" << Switch(meshChanged_)
|
||||
|
@ -168,11 +168,11 @@ int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[])
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateMeshPartsStatus()
|
||||
void Foam::vtkPVFoam::updateMeshPartsStatus()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateMeshPartsStatus" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::updateMeshPartsStatus" << endl;
|
||||
}
|
||||
|
||||
vtkDataArraySelection* selection = reader_->GetPartSelection();
|
||||
|
@ -209,16 +209,16 @@ void Foam::vtkPV3Foam::updateMeshPartsStatus()
|
|||
}
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateMeshPartsStatus" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::updateMeshPartsStatus" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkPV3Foam::vtkPV3Foam
|
||||
Foam::vtkPVFoam::vtkPVFoam
|
||||
(
|
||||
const char* const FileName,
|
||||
vtkPV3FoamReader* reader
|
||||
vtkPVFoamReader* reader
|
||||
)
|
||||
:
|
||||
reader_(reader),
|
||||
|
@ -241,7 +241,7 @@ Foam::vtkPV3Foam::vtkPV3Foam
|
|||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkPV3Foam::vtkPV3Foam - " << FileName << endl;
|
||||
Info<< "Foam::vtkPVFoam::vtkPVFoam - " << FileName << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -325,11 +325,11 @@ Foam::vtkPV3Foam::vtkPV3Foam
|
|||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vtkPV3Foam::~vtkPV3Foam()
|
||||
Foam::vtkPVFoam::~vtkPVFoam()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::~vtkPV3Foam" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::~vtkPVFoam" << endl;
|
||||
}
|
||||
|
||||
delete meshPtr_;
|
||||
|
@ -338,11 +338,11 @@ Foam::vtkPV3Foam::~vtkPV3Foam()
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkPV3Foam::updateInfo()
|
||||
void Foam::vtkPVFoam::updateInfo()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateInfo"
|
||||
Info<< "<beg> Foam::vtkPVFoam::updateInfo"
|
||||
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] timeIndex="
|
||||
<< timeIndex_ << endl;
|
||||
}
|
||||
|
@ -395,17 +395,17 @@ void Foam::vtkPV3Foam::updateInfo()
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateInfo" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::updateInfo" << endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::updateFoamMesh()
|
||||
void Foam::vtkPVFoam::updateFoamMesh()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::updateFoamMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::updateFoamMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -449,13 +449,13 @@ void Foam::vtkPV3Foam::updateFoamMesh()
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::updateFoamMesh" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::updateFoamMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::Update
|
||||
void Foam::vtkPVFoam::Update
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
vtkMultiBlockDataSet* lagrangianOutput
|
||||
|
@ -463,7 +463,7 @@ void Foam::vtkPV3Foam::Update
|
|||
{
|
||||
if (debug)
|
||||
{
|
||||
cout<< "<beg> Foam::vtkPV3Foam::Update - output with "
|
||||
cout<< "<beg> Foam::vtkPVFoam::Update - output with "
|
||||
<< output->GetNumberOfBlocks() << " and "
|
||||
<< lagrangianOutput->GetNumberOfBlocks() << " blocks\n";
|
||||
output->Print(cout);
|
||||
|
@ -504,7 +504,7 @@ void Foam::vtkPV3Foam::Update
|
|||
reader_->UpdateProgress(0.7);
|
||||
}
|
||||
|
||||
#ifdef VTKPV3FOAM_DUALPORT
|
||||
#ifdef VTKPVFOAM_DUALPORT
|
||||
// restart port1 at block=0
|
||||
blockNo = 0;
|
||||
#endif
|
||||
|
@ -522,7 +522,7 @@ void Foam::vtkPV3Foam::Update
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::CleanUp()
|
||||
void Foam::vtkPVFoam::CleanUp()
|
||||
{
|
||||
// reclaim some memory
|
||||
reduceMemory();
|
||||
|
@ -530,7 +530,7 @@ void Foam::vtkPV3Foam::CleanUp()
|
|||
}
|
||||
|
||||
|
||||
double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps)
|
||||
double* Foam::vtkPVFoam::findTimes(int& nTimeSteps)
|
||||
{
|
||||
int nTimes = 0;
|
||||
double* tsteps = NULL;
|
||||
|
@ -589,7 +589,7 @@ double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps)
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
|
||||
void Foam::vtkPVFoam::addPatchNames(vtkRenderer* renderer)
|
||||
{
|
||||
// Remove any patch names previously added to the renderer
|
||||
removePatchNames(renderer);
|
||||
|
@ -608,7 +608,7 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::addPatchNames" << nl
|
||||
Info<< "<beg> Foam::vtkPVFoam::addPatchNames" << nl
|
||||
<<"... add patches: " << selectedPatches << endl;
|
||||
}
|
||||
|
||||
|
@ -787,12 +787,12 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::addPatchNames" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::addPatchNames" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::removePatchNames(vtkRenderer* renderer)
|
||||
void Foam::vtkPVFoam::removePatchNames(vtkRenderer* renderer)
|
||||
{
|
||||
forAll(patchTextActorsPtrs_, patchI)
|
||||
{
|
||||
|
@ -803,7 +803,7 @@ void Foam::vtkPV3Foam::removePatchNames(vtkRenderer* renderer)
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::PrintSelf(ostream& os, vtkIndent indent) const
|
||||
void Foam::vtkPVFoam::PrintSelf(ostream& os, vtkIndent indent) const
|
||||
{
|
||||
os << indent << "Number of nodes: "
|
||||
<< (meshPtr_ ? meshPtr_->nPoints() : 0) << "\n";
|
|
@ -22,40 +22,40 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::vtkPV4Foam
|
||||
Foam::vtkPVFoam
|
||||
|
||||
Description
|
||||
Provides a reader interface for FOAM to VTK interaction.
|
||||
|
||||
SourceFiles
|
||||
vtkPV4Foam.C
|
||||
vtkPV4Foam.H
|
||||
vtkPV4FoamI.H
|
||||
vtkPV4FoamFields.C
|
||||
vtkPV4FoamMesh.C
|
||||
vtkPV4FoamMeshLagrangian.C
|
||||
vtkPV4FoamMeshPatch.C
|
||||
vtkPV4FoamMeshSet.C
|
||||
vtkPV4FoamMeshVolume.C
|
||||
vtkPV4FoamMeshZone.C
|
||||
vtkPV4FoamFaceField.H
|
||||
vtkPV4FoamLagrangianFields.H
|
||||
vtkPV4FoamPatchField.H
|
||||
vtkPV4FoamPointFields.H
|
||||
vtkPV4FoamPoints.H
|
||||
vtkPV4FoamUpdateInfo.C
|
||||
vtkPV4FoamUpdateInfoFields.H
|
||||
vtkPV4FoamUtilities.C
|
||||
vtkPV4FoamVolFields.H
|
||||
vtkPV4FoamAddToSelection.H
|
||||
vtkPVFoam.C
|
||||
vtkPVFoam.H
|
||||
vtkPVFoamI.H
|
||||
vtkPVFoamFields.C
|
||||
vtkPVFoamMesh.C
|
||||
vtkPVFoamMeshLagrangian.C
|
||||
vtkPVFoamMeshPatch.C
|
||||
vtkPVFoamMeshSet.C
|
||||
vtkPVFoamMeshVolume.C
|
||||
vtkPVFoamMeshZone.C
|
||||
vtkPVFoamFaceField.H
|
||||
vtkPVFoamLagrangianFields.H
|
||||
vtkPVFoamPatchField.H
|
||||
vtkPVFoamPointFields.H
|
||||
vtkPVFoamPoints.H
|
||||
vtkPVFoamUpdateInfo.C
|
||||
vtkPVFoamUpdateInfoFields.H
|
||||
vtkPVFoamUtilities.C
|
||||
vtkPVFoamVolFields.H
|
||||
vtkPVFoamAddToSelection.H
|
||||
|
||||
// Needed by VTK:
|
||||
vtkDataArrayTemplateImplicit.txx
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4Foam_H
|
||||
#define vtkPV4Foam_H
|
||||
#ifndef vtkPVFoam_H
|
||||
#define vtkPVFoam_H
|
||||
|
||||
// do not include legacy strstream headers
|
||||
#ifndef VTK_EXCLUDE_STRSTREAM_HEADERS
|
||||
|
@ -70,14 +70,14 @@ SourceFiles
|
|||
#include "PrimitivePatchInterpolationTemplate.H"
|
||||
#include "volPointInterpolation.H"
|
||||
|
||||
#undef VTKPV4FOAM_DUALPORT
|
||||
#undef VTKPVFOAM_DUALPORT
|
||||
|
||||
// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * //
|
||||
|
||||
class vtkDataArraySelection;
|
||||
class vtkDataSet;
|
||||
class vtkPoints;
|
||||
class vtkPV4FoamReader;
|
||||
class vtkPVFoamReader;
|
||||
class vtkRenderer;
|
||||
class vtkTextActor;
|
||||
class vtkMultiBlockDataSet;
|
||||
|
@ -103,10 +103,10 @@ template<class Type> class IOField;
|
|||
template<class Type> class List;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class vtkPV4Foam Declaration
|
||||
Class vtkPVFoam Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class vtkPV4Foam
|
||||
class vtkPVFoam
|
||||
{
|
||||
// Private classes
|
||||
|
||||
|
@ -249,8 +249,8 @@ class vtkPV4Foam
|
|||
|
||||
// Private Data
|
||||
|
||||
//- Access to the controlling vtkPV4FoamReader
|
||||
vtkPV4FoamReader* reader_;
|
||||
//- Access to the controlling vtkPVFoamReader
|
||||
vtkPVFoamReader* reader_;
|
||||
|
||||
//- Foam time control
|
||||
autoPtr<Time> dbPtr_;
|
||||
|
@ -668,32 +668,32 @@ class vtkPV4Foam
|
|||
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
vtkPV4Foam(const vtkPV4Foam&);
|
||||
vtkPVFoam(const vtkPVFoam&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const vtkPV4Foam&);
|
||||
void operator=(const vtkPVFoam&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Static data members
|
||||
|
||||
ClassName("vtkPV4Foam");
|
||||
ClassName("vtkPVFoam");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
(
|
||||
const char* const FileName,
|
||||
vtkPV4FoamReader* reader
|
||||
vtkPVFoamReader* reader
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
|
||||
~vtkPV4Foam();
|
||||
~vtkPVFoam();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
@ -750,7 +750,7 @@ public:
|
|||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
# include "vtkPV4FoamI.H"
|
||||
# include "vtkPVFoamI.H"
|
||||
|
||||
#endif
|
||||
|
|
@ -23,8 +23,8 @@ License
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4FoamAddToSelection_H
|
||||
#define vtkPV4FoamAddToSelection_H
|
||||
#ifndef vtkPVFoamAddToSelection_H
|
||||
#define vtkPVFoamAddToSelection_H
|
||||
|
||||
// FOAM includes
|
||||
#include "IOobjectList.H"
|
||||
|
@ -36,7 +36,7 @@ License
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
Foam::label Foam::vtkPV4Foam::addToSelection
|
||||
Foam::label Foam::vtkPVFoam::addToSelection
|
||||
(
|
||||
vtkDataArraySelection *select,
|
||||
const IOobjectList& objectLst,
|
|
@ -22,12 +22,12 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4FoamFaceField_H
|
||||
#define vtkPV4FoamFaceField_H
|
||||
#ifndef vtkPVFoamFaceField_H
|
||||
#define vtkPVFoamFaceField_H
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellData.h"
|
||||
|
@ -40,7 +40,7 @@ InClass
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertFaceField
|
||||
void Foam::vtkPVFoam::convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
|
@ -121,7 +121,7 @@ void Foam::vtkPV4Foam::convertFaceField
|
|||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertFaceField
|
||||
void Foam::vtkPVFoam::convertFaceField
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
|
@ -25,11 +25,11 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "IOobjectList.H"
|
||||
#include "vtkPV4FoamReader.h"
|
||||
#include "vtkPVFoamReader.h"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
|
@ -38,12 +38,12 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
#include "vtkPV4FoamVolFields.H"
|
||||
#include "vtkPV4FoamPointFields.H"
|
||||
#include "vtkPV4FoamLagrangianFields.H"
|
||||
#include "vtkPVFoamVolFields.H"
|
||||
#include "vtkPVFoamPointFields.H"
|
||||
#include "vtkPVFoamLagrangianFields.H"
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::pruneObjectList
|
||||
void Foam::vtkPVFoam::pruneObjectList
|
||||
(
|
||||
IOobjectList& objects,
|
||||
const wordHashSet& selected
|
||||
|
@ -66,7 +66,7 @@ void Foam::vtkPV4Foam::pruneObjectList
|
|||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertVolFields
|
||||
void Foam::vtkPVFoam::convertVolFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
|
@ -95,7 +95,7 @@ void Foam::vtkPV4Foam::convertVolFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertVolFields" << nl
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertVolFields" << nl
|
||||
<< "converting Foam volume fields" << endl;
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
|
@ -145,13 +145,13 @@ void Foam::vtkPV4Foam::convertVolFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertVolFields" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertVolFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertPointFields
|
||||
void Foam::vtkPVFoam::convertPointFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
|
@ -180,7 +180,7 @@ void Foam::vtkPV4Foam::convertPointFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertPointFields" << nl
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertPointFields" << nl
|
||||
<< "converting Foam volume fields" << endl;
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
|
@ -221,13 +221,13 @@ void Foam::vtkPV4Foam::convertPointFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertPointFields" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertPointFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV4Foam::convertLagrangianFields
|
||||
void Foam::vtkPVFoam::convertLagrangianFields
|
||||
(
|
||||
vtkMultiBlockDataSet* output
|
||||
)
|
||||
|
@ -247,7 +247,7 @@ void Foam::vtkPV4Foam::convertLagrangianFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::convertLagrangianFields" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertLagrangianFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -316,7 +316,7 @@ void Foam::vtkPV4Foam::convertLagrangianFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::convertLagrangianFields" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertLagrangianFields" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ License
|
|||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
inline Foam::word Foam::vtkPV4Foam::getFirstWord(const char* str)
|
||||
inline Foam::word Foam::vtkPVFoam::getFirstWord(const char* str)
|
||||
{
|
||||
if (str)
|
||||
{
|
|
@ -22,12 +22,12 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4FoamLagrangianFields_H
|
||||
#define vtkPV4FoamLagrangianFields_H
|
||||
#ifndef vtkPVFoamLagrangianFields_H
|
||||
#define vtkPVFoamLagrangianFields_H
|
||||
|
||||
#include "CloudTemplate.H"
|
||||
|
||||
|
@ -36,7 +36,7 @@ InClass
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertLagrangianFields
|
||||
void Foam::vtkPVFoam::convertLagrangianFields
|
||||
(
|
||||
const IOobjectList& objects,
|
||||
vtkMultiBlockDataSet* output,
|
||||
|
@ -58,7 +58,7 @@ void Foam::vtkPV4Foam::convertLagrangianFields
|
|||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertLagrangianField
|
||||
void Foam::vtkPVFoam::convertLagrangianField
|
||||
(
|
||||
const IOField<Type>& tf,
|
||||
vtkMultiBlockDataSet* output,
|
|
@ -25,14 +25,14 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "cellSet.H"
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "fvMeshSubset.H"
|
||||
#include "vtkPV3FoamReader.h"
|
||||
#include "vtkPVFoamReader.h"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkDataArraySelection.h"
|
||||
|
@ -42,7 +42,7 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshVolume
|
||||
void Foam::vtkPVFoam::convertMeshVolume
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -58,7 +58,7 @@ void Foam::vtkPV3Foam::convertMeshVolume
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshVolume" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshVolume" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -96,13 +96,13 @@ void Foam::vtkPV3Foam::convertMeshVolume
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshVolume" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshVolume" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshLagrangian
|
||||
void Foam::vtkPVFoam::convertMeshLagrangian
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -115,7 +115,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshLagrangian" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshLagrangian" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -147,13 +147,13 @@ void Foam::vtkPV3Foam::convertMeshLagrangian
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshLagrangian" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshLagrangian" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshPatches
|
||||
void Foam::vtkPVFoam::convertMeshPatches
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -167,7 +167,7 @@ void Foam::vtkPV3Foam::convertMeshPatches
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshPatches" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshPatches" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -206,13 +206,13 @@ void Foam::vtkPV3Foam::convertMeshPatches
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshPatches" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshPatches" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshCellZones
|
||||
void Foam::vtkPVFoam::convertMeshCellZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -233,7 +233,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshCellZones" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshCellZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -307,13 +307,13 @@ void Foam::vtkPV3Foam::convertMeshCellZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshCellZones" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshCellZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshCellSets
|
||||
void Foam::vtkPVFoam::convertMeshCellSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -329,7 +329,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshCellSets" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshCellSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -402,13 +402,13 @@ void Foam::vtkPV3Foam::convertMeshCellSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshCellSets" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshCellSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshFaceZones
|
||||
void Foam::vtkPVFoam::convertMeshFaceZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -426,7 +426,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshFaceZones" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshFaceZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -465,13 +465,13 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshFaceZones" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshFaceZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshFaceSets
|
||||
void Foam::vtkPVFoam::convertMeshFaceSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -484,7 +484,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshFaceSets" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshFaceSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -522,13 +522,13 @@ void Foam::vtkPV3Foam::convertMeshFaceSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshFaceSets" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshFaceSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshPointZones
|
||||
void Foam::vtkPVFoam::convertMeshPointZones
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -541,7 +541,7 @@ void Foam::vtkPV3Foam::convertMeshPointZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshPointZones" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshPointZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -577,14 +577,14 @@ void Foam::vtkPV3Foam::convertMeshPointZones
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshPointZones" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshPointZones" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Foam::vtkPV3Foam::convertMeshPointSets
|
||||
void Foam::vtkPVFoam::convertMeshPointSets
|
||||
(
|
||||
vtkMultiBlockDataSet* output,
|
||||
int& blockNo
|
||||
|
@ -597,7 +597,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::convertMeshPointSets" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::convertMeshPointSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -635,7 +635,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::convertMeshPointSets" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::convertMeshPointSets" << endl;
|
||||
printMemory();
|
||||
}
|
||||
}
|
|
@ -25,14 +25,14 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "CloudTemplate.H"
|
||||
#include "fvMesh.H"
|
||||
#include "IOobjectList.H"
|
||||
#include "passiveParticle.H"
|
||||
#include "vtkPV4FoamPoints.H"
|
||||
#include "vtkPVFoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
|
@ -41,7 +41,7 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::lagrangianVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::lagrangianVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const word& cloudName
|
||||
|
@ -51,7 +51,7 @@ vtkPolyData* Foam::vtkPV4Foam::lagrangianVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::lagrangianVTKMesh - timePath "
|
||||
Info<< "<beg> Foam::vtkPVFoam::lagrangianVTKMesh - timePath "
|
||||
<< mesh.time().timePath()/cloud::prefix/cloudName << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ vtkPolyData* Foam::vtkPV4Foam::lagrangianVTKMesh
|
|||
vtkIdType particleId = 0;
|
||||
forAllConstIter(Cloud<passiveParticle>, parcels, iter)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, iter().position());
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, iter().position());
|
||||
|
||||
vtkcells->InsertNextCell(1, &particleId);
|
||||
particleId++;
|
||||
|
@ -100,7 +100,7 @@ vtkPolyData* Foam::vtkPV4Foam::lagrangianVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::lagrangianVTKMesh" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::lagrangianVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
|
@ -25,12 +25,12 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "polyPatch.H"
|
||||
#include "primitivePatch.H"
|
||||
#include "vtkPV3FoamPoints.H"
|
||||
#include "vtkPVFoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
|
@ -39,7 +39,7 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::patchVTKMesh
|
||||
(
|
||||
const polyPatch& p
|
||||
)
|
||||
|
@ -48,7 +48,7 @@ vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::patchVTKMesh - " << p.name() << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::patchVTKMesh - " << p.name() << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh
|
|||
vtkpoints->Allocate( points.size() );
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
|
@ -88,7 +88,7 @@ vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::patchVTKMesh - " << p.name() << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::patchVTKMesh - " << p.name() << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
|
@ -25,12 +25,12 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV4Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "vtkPV4FoamPoints.H"
|
||||
#include "vtkPVFoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkPoints.h"
|
||||
|
@ -39,7 +39,7 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::faceSetVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::faceSetVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const faceSet& fSet
|
||||
|
@ -49,7 +49,7 @@ vtkPolyData* Foam::vtkPV4Foam::faceSetVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::faceSetVTKMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::faceSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ vtkPolyData* Foam::vtkPV4Foam::faceSetVTKMesh
|
|||
vtkpoints->Allocate( points.size() );
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
@ -102,7 +102,7 @@ vtkPolyData* Foam::vtkPV4Foam::faceSetVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::faceSetVTKMesh" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::faceSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@ vtkPolyData* Foam::vtkPV4Foam::faceSetVTKMesh
|
|||
}
|
||||
|
||||
|
||||
vtkPolyData* Foam::vtkPV4Foam::pointSetVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::pointSetVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const pointSet& pSet
|
||||
|
@ -120,7 +120,7 @@ vtkPolyData* Foam::vtkPV4Foam::pointSetVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV4Foam::pointSetVTKMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::pointSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ vtkPolyData* Foam::vtkPV4Foam::pointSetVTKMesh
|
|||
|
||||
forAllConstIter(pointSet, pSet, iter)
|
||||
{
|
||||
vtkPV4FoamInsertNextPoint(vtkpoints, meshPoints[iter.key()]);
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, meshPoints[iter.key()]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
|
@ -139,7 +139,7 @@ vtkPolyData* Foam::vtkPV4Foam::pointSetVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV4Foam::pointSetVTKMesh" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::pointSetVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
|
@ -0,0 +1,455 @@
|
|||
#include "vtkPVFoam.H"
|
||||
#include "vtkPVFoamReader.h"
|
||||
|
||||
// FOAM includes
|
||||
#include "fvMesh.H"
|
||||
#include "cellModeller.H"
|
||||
#include "vtkPVFoamPoints.H"
|
||||
#include "Swap.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellArray.h"
|
||||
#include "vtkIdTypeArray.h"
|
||||
#include "vtkUnstructuredGrid.h"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkUnstructuredGrid* Foam::vtkPVFoam::volumeVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
polyDecomp& decompInfo
|
||||
)
|
||||
{
|
||||
const cellModel& tet = *(cellModeller::lookup("tet"));
|
||||
const cellModel& pyr = *(cellModeller::lookup("pyr"));
|
||||
const cellModel& prism = *(cellModeller::lookup("prism"));
|
||||
const cellModel& wedge = *(cellModeller::lookup("wedge"));
|
||||
const cellModel& tetWedge = *(cellModeller::lookup("tetWedge"));
|
||||
const cellModel& hex = *(cellModeller::lookup("hex"));
|
||||
|
||||
vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPVFoam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
const cellShapeList& cellShapes = mesh.cellShapes();
|
||||
|
||||
// Number of additional points needed by the decomposition of polyhedra
|
||||
label nAddPoints = 0;
|
||||
|
||||
// Number of additional cells generated by the decomposition of polyhedra
|
||||
label nAddCells = 0;
|
||||
|
||||
// face owner is needed to determine the face orientation
|
||||
const labelList& owner = mesh.faceOwner();
|
||||
|
||||
labelList& superCells = decompInfo.superCells();
|
||||
labelList& addPointCellLabels = decompInfo.addPointCellLabels();
|
||||
|
||||
// Scan for cells which need to be decomposed and count additional points
|
||||
// and cells
|
||||
if (!reader_->GetUseVTKPolyhedron())
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... scanning for polyhedra" << endl;
|
||||
}
|
||||
|
||||
forAll(cellShapes, celli)
|
||||
{
|
||||
const cellModel& model = cellShapes[celli].model();
|
||||
|
||||
if
|
||||
(
|
||||
model != hex
|
||||
&& model != wedge
|
||||
&& model != prism
|
||||
&& model != pyr
|
||||
&& model != tet
|
||||
&& model != tetWedge
|
||||
)
|
||||
{
|
||||
const cell& cFaces = mesh.cells()[celli];
|
||||
|
||||
forAll(cFaces, cFacei)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFacei]];
|
||||
|
||||
label nQuads = 0;
|
||||
label nTris = 0;
|
||||
f.nTrianglesQuads(mesh.points(), nTris, nQuads);
|
||||
|
||||
nAddCells += nQuads + nTris;
|
||||
}
|
||||
|
||||
nAddCells--;
|
||||
nAddPoints++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set size of additional point addressing array
|
||||
// (from added point to original cell)
|
||||
addPointCellLabels.setSize(nAddPoints);
|
||||
|
||||
// Set size of additional cells mapping array
|
||||
// (from added cell to original cell)
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<<" mesh nCells = " << mesh.nCells() << nl
|
||||
<<" nPoints = " << mesh.nPoints() << nl
|
||||
<<" nAddCells = " << nAddCells << nl
|
||||
<<" nAddPoints = " << nAddPoints << endl;
|
||||
}
|
||||
|
||||
superCells.setSize(mesh.nCells() + nAddCells);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting points" << endl;
|
||||
}
|
||||
|
||||
// Convert OpenFOAM mesh vertices to VTK
|
||||
vtkPoints* vtkpoints = vtkPoints::New();
|
||||
vtkpoints->Allocate(mesh.nPoints() + nAddPoints);
|
||||
|
||||
const Foam::pointField& points = mesh.points();
|
||||
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "... converting cells" << endl;
|
||||
}
|
||||
|
||||
vtkmesh->Allocate(mesh.nCells() + nAddCells);
|
||||
|
||||
// Set counters for additional points and additional cells
|
||||
label addPointi = 0, addCelli = 0;
|
||||
|
||||
// Create storage for points - needed for mapping from OpenFOAM to VTK
|
||||
// data types - max 'order' = hex = 8 points
|
||||
vtkIdType nodeIds[8];
|
||||
|
||||
// face-stream for a polyhedral cell
|
||||
// [numFace0Pts, id1, id2, id3, numFace1Pts, id1, id2, id3, ...]
|
||||
DynamicList<vtkIdType> faceStream(256);
|
||||
|
||||
forAll(cellShapes, celli)
|
||||
{
|
||||
const cellShape& cellShape = cellShapes[celli];
|
||||
const cellModel& cellModel = cellShape.model();
|
||||
|
||||
superCells[addCelli++] = celli;
|
||||
|
||||
if (cellModel == tet)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == pyr)
|
||||
{
|
||||
for (int j = 0; j < 5; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == prism)
|
||||
{
|
||||
// VTK has a different node order for VTK_WEDGE
|
||||
// their triangles point outwards!
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[2];
|
||||
nodeIds[2] = cellShape[1];
|
||||
nodeIds[3] = cellShape[3];
|
||||
nodeIds[4] = cellShape[5];
|
||||
nodeIds[5] = cellShape[4];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == tetWedge && !reader_->GetUseVTKPolyhedron())
|
||||
{
|
||||
// Treat as squeezed prism (VTK_WEDGE)
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[2];
|
||||
nodeIds[2] = cellShape[1];
|
||||
nodeIds[3] = cellShape[3];
|
||||
nodeIds[4] = cellShape[4];
|
||||
nodeIds[5] = cellShape[3];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_WEDGE,
|
||||
6,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == wedge)
|
||||
{
|
||||
// Treat as squeezed hex
|
||||
|
||||
nodeIds[0] = cellShape[0];
|
||||
nodeIds[1] = cellShape[1];
|
||||
nodeIds[2] = cellShape[2];
|
||||
nodeIds[3] = cellShape[2];
|
||||
nodeIds[4] = cellShape[3];
|
||||
nodeIds[5] = cellShape[4];
|
||||
nodeIds[6] = cellShape[5];
|
||||
nodeIds[7] = cellShape[6];
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (cellModel == hex)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
nodeIds[j] = cellShape[j];
|
||||
}
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_HEXAHEDRON,
|
||||
8,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
else if (reader_->GetUseVTKPolyhedron())
|
||||
{
|
||||
// Polyhedral cell - use VTK_POLYHEDRON
|
||||
const labelList& cFaces = mesh.cells()[celli];
|
||||
|
||||
#ifdef HAS_VTK_POLYHEDRON
|
||||
vtkIdType nFaces = cFaces.size();
|
||||
vtkIdType nLabels = nFaces;
|
||||
|
||||
// count size for face stream
|
||||
forAll(cFaces, cFacei)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFacei]];
|
||||
nLabels += f.size();
|
||||
}
|
||||
|
||||
// build face-stream
|
||||
// [numFace0Pts, id1, id2, id3, numFace1Pts, id1, id2, id3, ...]
|
||||
// point Ids are global
|
||||
faceStream.clear();
|
||||
faceStream.reserve(nLabels + nFaces);
|
||||
|
||||
forAll(cFaces, cFacei)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFacei]];
|
||||
const bool isOwner = (owner[cFaces[cFacei]] == celli);
|
||||
const label nFacePoints = f.size();
|
||||
|
||||
// number of labels for this face
|
||||
faceStream.append(nFacePoints);
|
||||
|
||||
if (isOwner)
|
||||
{
|
||||
forAll(f, fp)
|
||||
{
|
||||
faceStream.append(f[fp]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// fairly immaterial if we reverse the list
|
||||
// or use face::reverseFace()
|
||||
forAllReverse(f, fp)
|
||||
{
|
||||
faceStream.append(f[fp]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vtkmesh->InsertNextCell(VTK_POLYHEDRON, nFaces, faceStream.data());
|
||||
#else
|
||||
// this is a horrible substitute
|
||||
// but avoids crashes when there is no vtkPolyhedron support
|
||||
|
||||
// establish unique node ids used
|
||||
HashSet<vtkIdType, Hash<label>> hashUniqId(2*256);
|
||||
|
||||
forAll(cFaces, cFacei)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFacei]];
|
||||
|
||||
forAll(f, fp)
|
||||
{
|
||||
hashUniqId.insert(f[fp]);
|
||||
}
|
||||
}
|
||||
|
||||
// use face stream to store unique node ids:
|
||||
faceStream = hashUniqId.sortedToc();
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_CONVEX_POINT_SET,
|
||||
vtkIdType(faceStream.size()),
|
||||
faceStream.data()
|
||||
);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
// Polyhedral cell. Decompose into tets + prisms.
|
||||
|
||||
// Mapping from additional point to cell
|
||||
addPointCellLabels[addPointi] = celli;
|
||||
|
||||
// The new vertex from the cell-centre
|
||||
const label newVertexLabel = mesh.nPoints() + addPointi;
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, mesh.C()[celli]);
|
||||
|
||||
// Whether to insert cell in place of original or not.
|
||||
bool substituteCell = true;
|
||||
|
||||
const labelList& cFaces = mesh.cells()[celli];
|
||||
forAll(cFaces, cFacei)
|
||||
{
|
||||
const face& f = mesh.faces()[cFaces[cFacei]];
|
||||
const bool isOwner = (owner[cFaces[cFacei]] == celli);
|
||||
|
||||
// Number of triangles and quads in decomposition
|
||||
label nTris = 0;
|
||||
label nQuads = 0;
|
||||
f.nTrianglesQuads(mesh.points(), nTris, nQuads);
|
||||
|
||||
// Do actual decomposition into triFcs and quadFcs.
|
||||
faceList triFcs(nTris);
|
||||
faceList quadFcs(nQuads);
|
||||
label trii = 0;
|
||||
label quadi = 0;
|
||||
f.trianglesQuads(mesh.points(), trii, quadi, triFcs, quadFcs);
|
||||
|
||||
forAll(quadFcs, quadI)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCelli++] = celli;
|
||||
}
|
||||
|
||||
const face& quad = quadFcs[quadI];
|
||||
|
||||
// Ensure we have the correct orientation for the
|
||||
// base of the primitive cell shape.
|
||||
// If the cell is face owner, the orientation needs to be
|
||||
// flipped.
|
||||
// At the moment, VTK doesn't actually seem to care if
|
||||
// negative cells are defined, but we'll do it anyhow
|
||||
// (for safety).
|
||||
if (isOwner)
|
||||
{
|
||||
nodeIds[0] = quad[3];
|
||||
nodeIds[1] = quad[2];
|
||||
nodeIds[2] = quad[1];
|
||||
nodeIds[3] = quad[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeIds[0] = quad[0];
|
||||
nodeIds[1] = quad[1];
|
||||
nodeIds[2] = quad[2];
|
||||
nodeIds[3] = quad[3];
|
||||
}
|
||||
nodeIds[4] = newVertexLabel;
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_PYRAMID,
|
||||
5,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
|
||||
forAll(triFcs, triI)
|
||||
{
|
||||
if (substituteCell)
|
||||
{
|
||||
substituteCell = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
superCells[addCelli++] = celli;
|
||||
}
|
||||
|
||||
const face& tri = triFcs[triI];
|
||||
|
||||
// See note above about the orientation.
|
||||
if (isOwner)
|
||||
{
|
||||
nodeIds[0] = tri[2];
|
||||
nodeIds[1] = tri[1];
|
||||
nodeIds[2] = tri[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeIds[0] = tri[0];
|
||||
nodeIds[1] = tri[1];
|
||||
nodeIds[2] = tri[2];
|
||||
}
|
||||
nodeIds[3] = newVertexLabel;
|
||||
|
||||
vtkmesh->InsertNextCell
|
||||
(
|
||||
VTK_TETRA,
|
||||
4,
|
||||
nodeIds
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
addPointi++;
|
||||
}
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
vtkpoints->Delete();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPVFoam::volumeVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
return vtkmesh;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
|
@ -25,10 +25,10 @@ Description
|
|||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "vtkPV3Foam.H"
|
||||
#include "vtkPVFoam.H"
|
||||
|
||||
// Foam includes
|
||||
#include "vtkPV3FoamPoints.H"
|
||||
#include "vtkPVFoamPoints.H"
|
||||
|
||||
// VTK includes
|
||||
#include "vtkPoints.h"
|
||||
|
@ -37,7 +37,7 @@ Description
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::faceZoneVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const labelList& faceLabels
|
||||
|
@ -47,7 +47,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::faceZoneVTKMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::faceZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh
|
|||
vtkpoints->Allocate(points.size());
|
||||
forAll(points, i)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, points[i]);
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, points[i]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
|
@ -111,7 +111,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<end> Foam::vtkPV3Foam::faceZoneVTKMesh" << endl;
|
||||
Info<< "<end> Foam::vtkPVFoam::faceZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh
|
|||
}
|
||||
|
||||
|
||||
vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh
|
||||
vtkPolyData* Foam::vtkPVFoam::pointZoneVTKMesh
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const labelList& pointLabels
|
||||
|
@ -129,7 +129,7 @@ vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::pointZoneVTKMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::pointZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh
|
|||
|
||||
forAll(pointLabels, pointI)
|
||||
{
|
||||
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[pl[pointI]]);
|
||||
vtkPVFoamInsertNextPoint(vtkpoints, meshPoints[pl[pointI]]);
|
||||
}
|
||||
|
||||
vtkmesh->SetPoints(vtkpoints);
|
||||
|
@ -162,7 +162,7 @@ vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "<beg> Foam::vtkPV3Foam::pointZoneVTKMesh" << endl;
|
||||
Info<< "<beg> Foam::vtkPVFoam::pointZoneVTKMesh" << endl;
|
||||
printMemory();
|
||||
}
|
||||
|
|
@ -22,12 +22,12 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4FoamPatchField_H
|
||||
#define vtkPV4FoamPatchField_H
|
||||
#ifndef vtkPVFoamPatchField_H
|
||||
#define vtkPVFoamPatchField_H
|
||||
|
||||
// VTK includes
|
||||
#include "vtkCellData.h"
|
||||
|
@ -41,7 +41,7 @@ InClass
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertPatchField
|
||||
void Foam::vtkPVFoam::convertPatchField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& ptf,
|
||||
|
@ -83,7 +83,7 @@ void Foam::vtkPV4Foam::convertPatchField
|
|||
|
||||
// as above, but with PointData()
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertPatchPointField
|
||||
void Foam::vtkPVFoam::convertPatchPointField
|
||||
(
|
||||
const word& name,
|
||||
const Field<Type>& pptf,
|
|
@ -22,12 +22,12 @@ License
|
|||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
InClass
|
||||
vtkPV4Foam
|
||||
vtkPVFoam
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef vtkPV4FoamPointFields_H
|
||||
#define vtkPV4FoamPointFields_H
|
||||
#ifndef vtkPVFoamPointFields_H
|
||||
#define vtkPVFoamPointFields_H
|
||||
|
||||
// Foam includes
|
||||
#include "interpolatePointToCell.H"
|
||||
|
@ -37,7 +37,7 @@ InClass
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertPointFields
|
||||
void Foam::vtkPVFoam::convertPointFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const pointMesh& pMesh,
|
||||
|
@ -62,7 +62,7 @@ void Foam::vtkPV4Foam::convertPointFields
|
|||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Foam::vtkPV4Foam::convertPointFields : "
|
||||
Info<< "Foam::vtkPVFoam::convertPointFields : "
|
||||
<< fieldName << endl;
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ void Foam::vtkPV4Foam::convertPointFields
|
|||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertPointFieldBlock
|
||||
void Foam::vtkPVFoam::convertPointFieldBlock
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
vtkMultiBlockDataSet* output,
|
||||
|
@ -163,7 +163,7 @@ void Foam::vtkPV4Foam::convertPointFieldBlock
|
|||
|
||||
|
||||
template<class Type>
|
||||
void Foam::vtkPV4Foam::convertPointField
|
||||
void Foam::vtkPVFoam::convertPointField
|
||||
(
|
||||
const GeometricField<Type, pointPatchField, pointMesh>& ptf,
|
||||
const GeometricField<Type, fvPatchField, volMesh>& tf,
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue