diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 80a4dc58e8ef8da4e481630185f6319600829108..42752388157aabe26cf316b9419bb15f544371d3 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C @@ -1111,6 +1111,11 @@ int main(int argc, char *argv[]) cellProcAddressing.writeOpt() = IOobject::NO_WRITE; } } + else + { + cellProcAddressing.writeOpt() = IOobject::NO_WRITE; + } + if (faceProcAddressing.headerOk()) { if (faceProcAddressing.size() == mesh.nFaces()) @@ -1146,6 +1151,11 @@ int main(int argc, char *argv[]) faceProcAddressing.writeOpt() = IOobject::NO_WRITE; } } + else + { + faceProcAddressing.writeOpt() = IOobject::NO_WRITE; + } + if (pointProcAddressing.headerOk()) { if (pointProcAddressing.size() == mesh.nPoints()) @@ -1160,20 +1170,30 @@ int main(int argc, char *argv[]) } else { - Info<< "Not writing consistent processor point decomposition" + Info<< "Not writing inconsistent processor point decomposition" << " map " << pointProcAddressing.filePath() << endl; pointProcAddressing.writeOpt() = IOobject::NO_WRITE; } } + else + { + pointProcAddressing.writeOpt() = IOobject::NO_WRITE; + } + if (boundaryProcAddressing.headerOk()) { if (boundaryProcAddressing.size() != mesh.boundaryMesh().size()) { - Info<< "Not writing consistent processor patch decomposition" + Info<< "Not writing inconsistent processor patch decomposition" << " map " << boundaryProcAddressing.filePath() << endl; boundaryProcAddressing.writeOpt() = IOobject::NO_WRITE; } } + else + { + boundaryProcAddressing.writeOpt() = IOobject::NO_WRITE; + } + diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict b/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict index c6321991cc8ce301ac84b6dc3a732689044db4ba..886285c9524ee6cf5e61e6ab2a4688247657bbab 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict @@ -16,7 +16,7 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Write maps from renumbered back to original mesh -writeMaps true; +writeMaps false; // Optional entry: sort cells on coupled boundaries to last for use with // e.g. nonBlockingGaussSeidel. diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C index aee47e55fd4ad525053f67a3965e8d180c182323..3c53c60c6a83fd05cecf8a10a33091944b5109b9 100644 --- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C +++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C @@ -2532,14 +2532,40 @@ int main(int argc, char *argv[]) bool haveAddressing = false; if (haveMesh[Pstream::myProcNo()]) { - haveAddressing = IOobject + // Read faces (just to know their size) + faceCompactIOList faces ( - "faceProcAddressing", - facesInstance, - meshSubDir, - runTime, - IOobject::READ_IF_PRESENT - ).typeHeaderOk<labelIOList>(true); + IOobject + ( + "faces", + facesInstance, + meshSubDir, + runTime, + IOobject::MUST_READ + ) + ); + + // Check faceProcAddressing + labelIOList faceProcAddressing + ( + IOobject + ( + "faceProcAddressing", + facesInstance, + meshSubDir, + runTime, + IOobject::READ_IF_PRESENT + ), + labelList(0) + ); + if + ( + faceProcAddressing.headerOk() + && faceProcAddressing.size() == faces.size() + ) + { + haveAddressing = true; + } } else { diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a85cff83f8b3f68d20dd7ea2c4e7995fdcd326a9..442eaf83e178b0f2826e3dd7d5cbe02e6e113927 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -1,5 +1,5 @@ #!/bin/sh -#---------------------------------*- sh -*------------------------------------- +#------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | @@ -26,7 +26,7 @@ # foamConfigurePaths # # Description -# Adjust hardcoded installation paths and versions +# Adjust hardcoded versions and installation paths (for bash, POSIX shell). # #------------------------------------------------------------------------------ usage() { @@ -35,47 +35,93 @@ usage() { cat<<USAGE usage: ${0##*/} - -foamInstall dir specify installation directory (e.g. /opt) - -projectName name specify project name (e.g. openfoam220) - -projectVersion ver specify project version (e.g. 2.2.0) - -archOption 32|64 specify architecture option - -label 32|64 specify label size + -foamInstall dir specify installation directory (eg, /opt) + -foamVersion ver specify project version (eg, 1612) + -projectName name specify project directory name (eg, openfoam1612) + -archOption 32|64 specify 'WM_ARCH_OPTION' architecture option + -int32 | -int64 specify 'WM_LABEL_SIZE' + -SP | -DP specify 'WM_PRECISION_OPTION' -system name specify 'system' compiler to be used - -thirdParty name specify 'ThirdParty' compiler to be used - - -boost ver specify boost_version - -boostArchPath dir specify BOOST_ARCH_PATH - -cgal ver specify cgal_version - -cgalArchPath dir specify CGAL_ARCH_PATH - -clang ver specify clang_version for ThirdParty Clang - -cmake ver specify cmake_version - -fftw ver specify fffw_version - -fftwArchPath dir specify FFTW_ARCH_PATH - -metis ver specify METIS_VERSION - -metisArchPath dir specify METIS_ARCH_PATH - -paraview ver specify ParaView_VERSION (e.g. 3.12.0) - -paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120) - -scotch ver specify SCOTCH_VERSION (e.g. 6.0.0) - -scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/) - -* Adjust hardcoded installation paths and versions + -third name specify 'ThirdParty' compiler to be used + -boost ver specify 'boost_version' + -boost-path dir specify 'BOOST_ARCH_PATH' + -cgal ver specify 'cgal_version' + -cgal-path dir specify 'CGAL_ARCH_PATH' + -clang ver specify 'clang_version' for ThirdParty Clang + -cmake ver specify 'cmake_version' + -fftw ver specify 'fffw_version' + -fftw-path dir specify 'FFTW_ARCH_PATH' + -metis ver specify 'METIS_VERSION' + -metis-path dir specify 'METIS_ARCH_PATH' + -paraview ver specify 'ParaView_VERSION' (eg, 5.0.1) + -paraview-path dir specify 'ParaView_DIR' (eg, /opt/paraviewopenfoam3120) + -openmpi ver specify ThirdParty openmpi version for 'FOAM_MPI' + -openmpi-system activate system openmpi + -openmpi-third activate ThirdParty openmpi (using default version) + -scotch ver specify 'SCOTCH_VERSION' (eg, scotch_6.0.4) + -scotch-path dir specify 'SCOTCH_ARCH_PATH' (eg, /opt/OpenFOAM-scotch_6.0.4) + -vtk ver specify 'vtk_version' (eg, VTK-7.1.0) + -mesa ver specify 'mesa_version' (eg, mesa-13.0.1) + -sigfpe | -no-sigfpe activate/deactivate FOAM_SIGFPE handling + gmp-VERSION for ThirdParty gcc (gmp-system for system library) + mpfr-VERSION for ThirdParty gcc (mpfr-system for system library) + mpc-VERSION for ThirdParty gcc (mpc-system for system library) + +* Adjust hardcoded versions and installation paths (for bash, POSIX shell). + +Equivalent options: + -foamInstall --foamInstall + -foamVersion --projectVersion + -projectName --projectName + -archOption --archOption + -third -ThirdParty + -paraview --paraviewVersion | -paraviewVersion + -paraview-path --paraviewInstall | -paraviewInstall + -scotch --scotchVersion | -scotchVersion + -scotch-path --scotchArchPath | -scotchArchPath USAGE exit 1 } +# Check that it appears to be an OpenFOAM installation +[ -f etc/bashrc -a -d etc/config.sh ] || \ + usage "Please run from top-level directory of installation" + + # Report error and exit die() { exec 1>&2 echo - echo "Error: see '${0##*/} -help' for usage" + echo "Error encountered:" while [ "$#" -ge 1 ]; do echo " $1"; shift; done echo + echo "See '${0##*/} -help' for usage" + echo exit 1 } +# Check if argument matches the expected input. Respects case. +# Uses sed for consistency with the replacement routines. +# +# _matches <arg> <matcher> [... <matcherN>] +# +_matches() +{ + local input="$1" + shift + local result + for regexp + do + result=$(echo "$input" | sed -n -e "/^$regexp"'$/p') + test -n "$result" && return 0 # successful match + done + return 1 +} + + # Function to do replacement on file. Checks if any replacement has been done. # _inlineSed <file> <regexp> <replacement> <msg> _inlineSed() @@ -96,7 +142,7 @@ _inlineSed() return 1 } - echo "Okay: $msg in $file" + echo " $msg ($file)" return 0 } @@ -122,16 +168,13 @@ replace() $file \ "$key=.*" \ "$key=$val" \ - "Replacing $key setting by '$val'" + "Replaced $key setting by '$val'" done } - -[ -f etc/bashrc ] || usage "Please run from top-level directory of installation" - #------------------------------------------------------------------------------ -unset adjusted +unset adjusted optMpi # Parse options while [ "$#" -gt 0 ] do @@ -139,6 +182,9 @@ do -h | -help | --help) usage ;; + '') + # Discard empty arguments + ;; -foamInstall | --foamInstall) # Replace FOAM_INST_DIR=... @@ -148,7 +194,7 @@ do etc/bashrc \ '\(.*BASH_SOURCE.*\)' \ '##\1' \ - "Removing default FOAM_INST_DIR setting" + "Removed default FOAM_INST_DIR setting" _inlineSed \ etc/bashrc \ '^ *FOAM_INST_DIR=.*' \ @@ -167,13 +213,13 @@ do etc/bashrc \ 'WM_PROJECT_DIR=.*' \ 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$projectName" \ - "Replacing WM_PROJECT_DIR setting by $projectName" + "Replaced WM_PROJECT_DIR setting by $projectName" adjusted=true shift ;; - -projectVersion | --projectVersion) + -foamVersion | --projectVersion) # Replace WM_PROJECT_VERSION=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/bashrc WM_PROJECT_VERSION "$2" @@ -184,24 +230,32 @@ do -archOption | --archOption) # Replace WM_ARCH_OPTION=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" - archOption="$2" - current="$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" - if [ "$archOption" = "$current" ] + _matches "$2" 32 64 || die "'$1' option has bad value: '$2'" + + optionValue="$2" + if [ "$optionValue" = "$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" ] then - echo "WM_ARCH_OPTION already set to $archOption" + echo "WM_ARCH_OPTION already set to $optionValue" + : ${adjusted:=false} else - replace etc/bashrc WM_ARCH_OPTION "$2" + replace etc/bashrc WM_ARCH_OPTION "$optionValue" + adjusted=true fi - adjusted=true shift ;; - -label) + -int32 | -int64) # Replace WM_LABEL_SIZE=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_LABEL_SIZE "$2" + optionValue="${1#-int}" + replace etc/bashrc WM_LABEL_SIZE "$optionValue" + adjusted=true + ;; + + -SP | -DP) + # Replace WM_PRECISION_OPTION=... + optionValue="${1#-}" + replace etc/bashrc WM_PRECISION_OPTION "$optionValue" adjusted=true - shift ;; -system) @@ -212,7 +266,7 @@ do shift ;; - -third[Pp]arty) + -third | -ThirdParty) # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/bashrc WM_COMPILER_TYPE ThirdParty WM_COMPILER "$2" @@ -220,7 +274,6 @@ do shift ;; - -boost) # Replace boost_version=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -229,7 +282,7 @@ do shift ;; - -boostArchPath) + -boost-path) # Replace BOOST_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/CGAL BOOST_ARCH_PATH "$2" @@ -245,7 +298,7 @@ do shift ;; - -cgalArchPath) + -cgal-path) # Replace CGAL_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/CGAL CGAL_ARCH_PATH "$2" @@ -261,7 +314,7 @@ do shift ;; - -fftwArchPath) + -fftw-path) # Replace FFTW_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/FFTW FFTW_ARCH_PATH "$2" @@ -285,15 +338,50 @@ do shift ;; + -openmpi) + # Replace FOAM_MPI=openmpi-<digits>.. and set to use third-party + # The edit is slightly fragile, but works + expected="openmpi-[1-9][.0-9]*" + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + optMpi="$2" + _matches "$optMpi" "$expected" || die "'$1' option has bad value: '$optMpi'" + + _inlineSed etc/config.sh/mpi \ + "FOAM_MPI=$expected" \ + "FOAM_MPI=$optMpi" \ + "Replaced 'FOAM_MPI=$expected' setting by 'FOAM_MPI=$optMpi'" + + replace etc/bashrc WM_MPLIB OPENMPI + adjusted=true + shift + ;; + + -openmpi-system) + # Explicitly set WM_MPLIB=SYSTEMOPENMPI + replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + optMpi=system + adjusted=true + ;; + + -openmpi-third) + # Explicitly set WM_MPLIB=OPENMPI, using default setting for openmpi + replace etc/bashrc WM_MPLIB OPENMPI + optMpi=third + adjusted=true + ;; + -paraview | -paraviewVersion | --paraviewVersion) # Replace ParaView_VERSION=... + expected="[5-9][.0-9]*" [ "$#" -ge 2 ] || die "'$1' option requires an argument" + _matches "$2" "$expected" || die "'$1' option has bad value: '$2'" + replace etc/config.sh/paraview ParaView_VERSION "$2" adjusted=true shift ;; - -paraviewInstall | --paraviewInstall) + -paraview-path | -paraviewInstall | --paraviewInstall) # Replace ParaView_DIR=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/paraview ParaView_DIR "$2" @@ -309,7 +397,7 @@ do shift ;; - -metisArchPath) + -metis-path) # Replace METIS_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/metis METIS_ARCH_PATH "$2" @@ -325,7 +413,7 @@ do shift ;; - -scotchArchPath | --scotchArchPath) + -scotch-path | -scotchArchPath | --scotchArchPath) # Replace SCOTCH_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$2" @@ -333,6 +421,56 @@ do shift ;; + -vtk) + # Replace vtk_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/vtk vtk_version "$2" + adjusted=true + shift + ;; + + -mesa) + # Replace mesa_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/vtk mesa_version "$2" + adjusted=true + shift + ;; + + gmp-[4-9]* | gmp-system) + # gcc-related package + replace etc/config.sh/compiler gmp_version "$1" + adjusted=true + ;; + + mpfr-[2-9]* | mpfr-system) + # gcc-related package + replace etc/config.sh/compiler mpfr_version "$1" + adjusted=true + ;; + + mpc-[0-9]* | mpc-system) + # gcc-related package + replace etc/config.sh/compiler mpc_version "$1" + adjusted=true + ;; + + -sigfpe) + # Enable FOAM_SIGFPE handling + _inlineSed etc/bashrc \ + "[a-z][a-z]* FOAM_SIGFPE.*" \ + "export FOAM_SIGFPE=" \ + "Activate FOAM_SIGFPE handling" + ;; + + -no-sigfpe) + # Disable FOAM_SIGFPE handling + _inlineSed etc/bashrc \ + "[a-z][a-z]* FOAM_SIGFPE.*" \ + "unset FOAM_SIGFPE" \ + "Deactivate FOAM_SIGFPE handling" + ;; + *) die "unknown option/argument: '$1'" ;; @@ -340,12 +478,13 @@ do shift done -[ -n "$adjusted" ] || die "Please specify at least one configure option" - -# Set WM_MPLIB=SYSTEMOPENMPI always -replace etc/bashrc WM_MPLIB SYSTEMOPENMPI - -## Set WM_COMPILER_TYPE=system always -# replace etc/bashrc WM_COMPILER_TYPE system +if [ "$adjusted" = false ] +then + echo "Nothing adjusted" + exit 0 +elif [ -z "$adjusted" ] +then + die "Please specify at least one configure option" +fi #------------------------------------------------------------------------------ diff --git a/etc/bashrc b/etc/bashrc index 0cdf4031ba80722aabce9603d5562d83d1406b55..3f5d04e83bf773635b3dedcefc2cf66cd16c6589 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -170,6 +170,7 @@ _foamSource $WM_PROJECT_DIR/etc/config.sh/aliases # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/paraview` +_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/vtk` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/ensight` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/gperftools` diff --git a/etc/config.csh/unset b/etc/config.csh/unset index 88bdd3454eff250015cf83b34161849ee94dded9..b423a53d98f3b88a6fbfa59f64454500fbb82726 100644 --- a/etc/config.csh/unset +++ b/etc/config.csh/unset @@ -124,6 +124,7 @@ unsetenv ParaView_INCLUDE_DIR unsetenv ParaView_MAJOR unsetenv ParaView_VERSION unsetenv PV_PLUGIN_PATH +unsetenv VTK_DIR #------------------------------------------------------------------------------ # unset other ThirdParty environment variables @@ -136,6 +137,7 @@ unsetenv FFTW_ARCH_PATH unsetenv GPERFTOOLS_ARCH_PATH unsetenv GMP_ARCH_PATH unsetenv MPFR_ARCH_PATH +unsetenv MESA_ARCH_PATH unsetenv METIS_ARCH_PATH unsetenv SCOTCH_ARCH_PATH diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk new file mode 100644 index 0000000000000000000000000000000000000000..d98dfb6ddbbfa785e249b37482cea5be037518e1 --- /dev/null +++ b/etc/config.csh/vtk @@ -0,0 +1,67 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM. +# +# OpenFOAM is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +# +# File +# etc/config.csh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-<VERSION>/etc/cshrc +# +# The library path is not adjusted with the paths specified here do not exist +# +# Note +# When building OpenFOAM, any changes made here MUST be made in the +# equivalent config.sh version too, since that is the one which will +# be used during the build process. +# +#------------------------------------------------------------------------------ + +set vtk_version=VTK-7.1.0 +set mesa_version=mesa-13.0.1 + +setenv VTK_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version +setenv MESA_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version + +#------------------------------------------------------------------------------ +if ($?FOAM_VERBOSE && $?prompt) then + echo "Using vtk ($vtk_version) -> $VTK_DIR" + echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" +endif + +# Set paths if binaries are present +if ( -r $VTK_DIR ) then + _foamAddLib $VTK_DIR/lib$WM_COMPILER_LIB_ARCH +else + unset VTK_DIR +endif + +if ( -r $MESA_ARCH_PATH ) then + _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH +else + unset MESA_ARCH_PATH +endif + +unset vtk_version mesa_version + +#------------------------------------------------------------------------------ diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview index a8df5e7d9c951d955a76cccb4c16543a64b0a601..188d505b0f182ca1ea3560c5c5a42ebbfbb31cdb 100644 --- a/etc/config.sh/paraview +++ b/etc/config.sh/paraview @@ -119,7 +119,7 @@ then export ParaView_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$pvName - # Set paths if binaries or source are present + # Set paths if binaries are present if [ -r $ParaView_DIR ] then pvLibDir=$ParaView_DIR/lib/$pvMajor diff --git a/etc/config.sh/unset b/etc/config.sh/unset index e7b834baeb784621e7d34587249c79f1b2c91e7f..6bc4a517ab84376a0e0341c0124d7cc91dbb3246 100644 --- a/etc/config.sh/unset +++ b/etc/config.sh/unset @@ -120,6 +120,7 @@ unset ParaView_INCLUDE_DIR unset ParaView_MAJOR unset ParaView_VERSION unset PV_PLUGIN_PATH +unset VTK_DIR #------------------------------------------------------------------------------ # unset other ThirdParty environment variables @@ -132,6 +133,7 @@ unset FFTW_ARCH_PATH unset GPERFTOOLS_ARCH_PATH unset GMP_ARCH_PATH unset MPFR_ARCH_PATH +unset MESA_ARCH_PATH unset METIS_ARCH_PATH unset SCOTCH_ARCH_PATH diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk new file mode 100644 index 0000000000000000000000000000000000000000..a0fa15f69311cefce498022a2835d349f6ab6d4c --- /dev/null +++ b/etc/config.sh/vtk @@ -0,0 +1,72 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM. +# +# OpenFOAM is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +# +# File +# etc/config.sh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-<VERSION>/etc/bashrc +# +# The library path is not adjusted with the paths specified here do not exist +# +# Note +# When _foamAddLib is unset +# - the vtk_version, mesa_version variables are retained. +#------------------------------------------------------------------------------ + +vtk_version=VTK-7.1.0 +mesa_version=mesa-13.0.1 + +export VTK_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version +export MESA_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version + +#------------------------------------------------------------------------------ +if [ "$FOAM_VERBOSE" -a "$PS1" ] +then + echo "Using vtk ($vtk_version) -> $VTK_DIR" 1>&2 + echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" 1>&2 +fi + +if type _foamAddLib > /dev/null 2>&1 # normal sourcing +then + + # Set paths if binaries are present + if [ -r $VTK_DIR ] + then + _foamAddLib $VTK_DIR/lib$WM_COMPILER_LIB_ARCH + else + unset VTK_DIR + fi + + if [ -r $MESA_ARCH_PATH ] + then + _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH + else + unset MESA_ARCH_PATH + fi + + unset vtk_version mesa_version +fi + +#------------------------------------------------------------------------------ diff --git a/etc/cshrc b/etc/cshrc index 54c74ad3f96899fd46d511391405c2d23eb66045..d5f315ee1628761c4b0c2aed36e6c0b70c5c0ccf 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -215,6 +215,7 @@ _foamSource $WM_PROJECT_DIR/etc/config.csh/aliases # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/paraview` +_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/vtk` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ensight` ##_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ADIOS` diff --git a/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C b/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C index bb19caf668807f03e89c3e3d84d392df6205425b..82de72d3d202bf678eb6acad842f56f8ce2a4dae 100644 --- a/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C +++ b/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,11 +29,30 @@ Description #include "IOobject.H" #include "objectRegistry.H" +#include "endian.H" +#include "label.H" +#include "scalar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // bool Foam::IOobject::writeHeader(Ostream& os, const word& type) const { + static std::string archHint; + + // Hint about machine endian, OpenFOAM label and scalar sizes + if (archHint.empty()) + { + #ifdef WM_LITTLE_ENDIAN + archHint.append("LSB;"); + #elif defined (WM_BIG_ENDIAN) + archHint.append("MSB;"); + #endif + archHint.append("label="); + archHint.append(std::to_string(8*sizeof(label))); + archHint.append(";scalar="); + archHint.append(std::to_string(8*sizeof(scalar))); + } + if (!os.good()) { InfoInFunction @@ -47,6 +66,7 @@ bool Foam::IOobject::writeHeader(Ostream& os, const word& type) const << "FoamFile\n{\n" << " version " << os.version() << ";\n" << " format " << os.format() << ";\n" + << " arch " << archHint << ";\n" << " class " << type << ";\n"; if (note().size()) diff --git a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H index d3b1da1344d434e3d043d0d30905b29a4e1b58ec..2057adcdf401a6aa7053de05c2b8db94706c5e20 100644 --- a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H +++ b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H @@ -23,11 +23,14 @@ License Class Foam::combustionModels::eddyDissipationDiffusionModel +Group + grpCombustionModels + Description Eddy dissipation model based on the principle of mixed is burnt. - The time scale is determined by the minimum between the turbulent - and diffusive time scales. + The time scale is determined by the minimum of the turbulence + and diffusion time scales. SourceFiles diff --git a/src/functionObjects/field/DESModelRegions/DESModelRegions.H b/src/functionObjects/field/DESModelRegions/DESModelRegions.H index c715d3710f429c86212c5fd14baa54bc7389b4ea..c10f9f0e51502523cc303d781a2547eedfe24b25 100644 --- a/src/functionObjects/field/DESModelRegions/DESModelRegions.H +++ b/src/functionObjects/field/DESModelRegions/DESModelRegions.H @@ -42,7 +42,7 @@ Usage DESModelRegions1 { type DESModelRegions; - libs ("libutilityFunctionObjects.so"); + libs ("libfieldFunctionObjects.so"); ... } \endverbatim diff --git a/src/functionObjects/field/PecletNo/PecletNo.H b/src/functionObjects/field/PecletNo/PecletNo.H index 7e474ad07a0b20c256e18126baf330b2f400aa60..bb6bf485970f5413503d2c6715b5f44f5c0f5740 100644 --- a/src/functionObjects/field/PecletNo/PecletNo.H +++ b/src/functionObjects/field/PecletNo/PecletNo.H @@ -36,7 +36,7 @@ Usage PecletNo1 { type PecletNo; - libs ("libutilityFunctionObjects.so"); + libs ("libfieldFunctionObjects.so"); ... } \endverbatim diff --git a/src/functionObjects/field/Q/Q.H b/src/functionObjects/field/Q/Q.H index ca753f641d5e73d3f579a8e216726bd54d0e6880..ca2cc1b7445447483ff3945b7c6d6d754d52f384 100644 --- a/src/functionObjects/field/Q/Q.H +++ b/src/functionObjects/field/Q/Q.H @@ -46,7 +46,7 @@ Usage Q1 { type Q; - libs ("libutilityFunctionObjects.so"); + libs ("libfieldFunctionObjects.so"); ... } \endverbatim diff --git a/src/functionObjects/field/components/componentsTemplates.C b/src/functionObjects/field/components/componentsTemplates.C index 7d56c3c41b92bb108c8c0e340b0562ff4d697cbf..a899a293a6781ac63ca70f987168ee7f79ec5eca 100644 --- a/src/functionObjects/field/components/componentsTemplates.C +++ b/src/functionObjects/field/components/componentsTemplates.C @@ -57,11 +57,11 @@ bool Foam::functionObjects::components::calcComponents() typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; - if (foundObject<VolFieldType>(fieldName_)) + if (foundObject<VolFieldType>(fieldName_, false)) { return calcFieldComponents<VolFieldType>(); } - else if (foundObject<SurfaceFieldType>(fieldName_)) + else if (foundObject<SurfaceFieldType>(fieldName_, false)) { return calcFieldComponents<SurfaceFieldType>(); } diff --git a/src/functionObjects/field/div/divTemplates.C b/src/functionObjects/field/div/divTemplates.C index 08d78e198fbbe801b00723955317e586240f606c..c13ec96c9fe9f3baa045621353766df788ad609d 100644 --- a/src/functionObjects/field/div/divTemplates.C +++ b/src/functionObjects/field/div/divTemplates.C @@ -30,7 +30,7 @@ License template<class FieldType> bool Foam::functionObjects::div::calcDiv() { - if (foundObject<FieldType>(fieldName_)) + if (foundObject<FieldType>(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.H b/src/functionObjects/field/fieldExpression/fieldExpression.H index 0ae69f8aecceeae105e7dd749c13150b3ecfc71d..8f1e263efc9de494cfa916b9fa9424039b8660a4 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpression.H +++ b/src/functionObjects/field/fieldExpression/fieldExpression.H @@ -77,7 +77,7 @@ protected: void setResultName(const word& typeName, const word& defaultArg); template<class Type> - bool foundObject(const word& name); + bool foundObject(const word& name, const bool verbose = true) const; private: diff --git a/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C index 442834b6e5d68f9d8196035dbf9729db58e10280..f2549fbf66d854fa140218ba8a16e565e26f7ff4 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C +++ b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C @@ -30,8 +30,9 @@ License template<class Type> bool Foam::functionObjects::fieldExpression::foundObject ( - const word& name -) + const word& name, + const bool verbose +) const { if (fvMeshFunctionObject::foundObject<Type>(name)) { @@ -39,10 +40,13 @@ bool Foam::functionObjects::fieldExpression::foundObject } else { - Warning - << " functionObjects::" << type() << " " << this->name() - << " cannot find required object " << name << " of type " - << Type::typeName << endl; + if (verbose) + { + Warning + << " functionObjects::" << type() << " " << this->name() + << " cannot find required object " << name << " of type " + << Type::typeName << endl; + } return false; } diff --git a/src/functionObjects/field/grad/gradTemplates.C b/src/functionObjects/field/grad/gradTemplates.C index d1ad033526adcb64e4396f88eb97fc88e66d597d..e7b6b812481d9045545f283c69963e6727cdf7ba 100644 --- a/src/functionObjects/field/grad/gradTemplates.C +++ b/src/functionObjects/field/grad/gradTemplates.C @@ -33,7 +33,7 @@ bool Foam::functionObjects::grad::calcGrad() typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; - if (foundObject<VolFieldType>(fieldName_)) + if (foundObject<VolFieldType>(fieldName_, false)) { return store ( @@ -42,7 +42,7 @@ bool Foam::functionObjects::grad::calcGrad() mesh_.changing() && mesh_.cache(resultName_) ); } - else if (foundObject<SurfaceFieldType>(fieldName_)) + else if (foundObject<SurfaceFieldType>(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/mag/magTemplates.C b/src/functionObjects/field/mag/magTemplates.C index dead35a360e6d65e1726e77b020f2853420872e4..a02d9a2ac67c0555815ddd4f3e124633a93acf97 100644 --- a/src/functionObjects/field/mag/magTemplates.C +++ b/src/functionObjects/field/mag/magTemplates.C @@ -36,7 +36,7 @@ bool Foam::functionObjects::mag::calcMag() typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; typedef DimensionedField<Type, surfGeoMesh> SurfFieldType; - if (foundObject<VolFieldType>(fieldName_)) + if (foundObject<VolFieldType>(fieldName_, false)) { return store ( @@ -44,7 +44,7 @@ bool Foam::functionObjects::mag::calcMag() Foam::mag(lookupObject<VolFieldType>(fieldName_)) ); } - else if (foundObject<SurfaceFieldType>(fieldName_)) + else if (foundObject<SurfaceFieldType>(fieldName_, false)) { return store ( @@ -52,7 +52,7 @@ bool Foam::functionObjects::mag::calcMag() Foam::mag(lookupObject<SurfaceFieldType>(fieldName_)) ); } - else if (foundObject<SurfFieldType>(fieldName_)) + else if (foundObject<SurfFieldType>(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/magSqr/magSqrTemplates.C b/src/functionObjects/field/magSqr/magSqrTemplates.C index a3fee019bb30614e410592ddd31a52919ec520ed..57a808ad9196a2ca0dbfbf477ed19d2f1fd8472d 100644 --- a/src/functionObjects/field/magSqr/magSqrTemplates.C +++ b/src/functionObjects/field/magSqr/magSqrTemplates.C @@ -36,7 +36,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr() typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; typedef DimensionedField<Type, surfGeoMesh> SurfFieldType; - if (foundObject<VolFieldType>(fieldName_)) + if (foundObject<VolFieldType>(fieldName_, false)) { return store ( @@ -44,7 +44,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr() Foam::magSqr(lookupObject<VolFieldType>(fieldName_)) ); } - else if (foundObject<SurfaceFieldType>(fieldName_)) + else if (foundObject<SurfaceFieldType>(fieldName_, false)) { return store ( @@ -52,7 +52,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr() Foam::magSqr(lookupObject<SurfaceFieldType>(fieldName_)) ); } - else if (foundObject<SurfFieldType>(fieldName_)) + else if (foundObject<SurfFieldType>(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/particleDistribution/particleDistribution.C b/src/functionObjects/field/particleDistribution/particleDistribution.C index 441afd29e351d8ee63c831d780515bc3bf896834..71919b0933bb20a092f08de3ce27f533e476f12c 100644 --- a/src/functionObjects/field/particleDistribution/particleDistribution.C +++ b/src/functionObjects/field/particleDistribution/particleDistribution.C @@ -46,6 +46,7 @@ namespace functionObjects } } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::functionObjects::particleDistribution::particleDistribution @@ -56,12 +57,12 @@ Foam::functionObjects::particleDistribution::particleDistribution ) : fvMeshFunctionObject(name, runTime, dict), - writeFile(runTime, name, typeName, dict), + writeFile(runTime, name), cloudName_("unknown-cloudName"), - fieldNames_(), - tagFieldName_("unknown-tagFieldName"), - distributionBinWidth_(0), - rndGen_(1234, -1) + nameVsBinWidth_(), + tagFieldName_("none"), + rndGen_(1234, -1), + writerPtr_(nullptr) { read(dict); } @@ -80,11 +81,12 @@ bool Foam::functionObjects::particleDistribution::read(const dictionary& dict) if (fvMeshFunctionObject::read(dict) && writeFile::read(dict)) { dict.lookup("cloud") >> cloudName_; - dict.lookup("fields") >> fieldNames_; - dict.lookup("tagField") >> tagFieldName_; - dict.lookup("distributionBinWidth") >> distributionBinWidth_; + dict.lookup("nameVsBinWidth") >> nameVsBinWidth_; + dict.readIfPresent("tagField", tagFieldName_); + word format(dict.lookup("setFormat")); + writerPtr_ = writer<scalar>::New(format); - Info<< type() << " " << name() << " output:" + Info<< type() << " " << name() << " output:" << nl << " Processing cloud : " << cloudName_ << nl << endl; @@ -107,9 +109,12 @@ bool Foam::functionObjects::particleDistribution::write() if (!mesh_.foundObject<cloud>(cloudName_)) { + wordList cloudNames(mesh_.names<cloud>()); + WarningInFunction << "Unable to find cloud " << cloudName_ - << " in the mesh database" << endl; + << " in the mesh database. Available clouds include:" + << cloudNames << endl; return false; } @@ -152,26 +157,26 @@ bool Foam::functionObjects::particleDistribution::write() } } + bool ok = false; - forAll(fieldNames_, i) + forAll(nameVsBinWidth_, i) { - const word fName = fieldNames_[i]; - ok = ok || processField<scalar>(cloudObr, fName, tagAddr); - ok = ok || processField<vector>(cloudObr, fName, tagAddr); - ok = ok || processField<tensor>(cloudObr, fName, tagAddr); - ok = ok || processField<sphericalTensor>(cloudObr, fName, tagAddr); - ok = ok || processField<symmTensor>(cloudObr, fName, tagAddr); - ok = ok || processField<tensor>(cloudObr, fName, tagAddr); + ok = false; + ok = ok || processField<scalar>(cloudObr, i, tagAddr); + ok = ok || processField<vector>(cloudObr, i, tagAddr); + ok = ok || processField<tensor>(cloudObr, i, tagAddr); + ok = ok || processField<sphericalTensor>(cloudObr, i, tagAddr); + ok = ok || processField<symmTensor>(cloudObr, i, tagAddr); + ok = ok || processField<tensor>(cloudObr, i, tagAddr); if (log && !ok) { WarningInFunction - << "Unable to find field " << fName << " in the " - << cloudName_ << " cloud database" << endl; + << "Unable to find field " << nameVsBinWidth_[i].first() + << " in the " << cloudName_ << " cloud database" << endl; } } - return true; } @@ -180,26 +185,53 @@ void Foam::functionObjects::particleDistribution::generateDistribution ( const word& fieldName, const scalarField& field, + const scalar binWidth, const label tag ) { - Ostream& os = file(); + if (field.empty()) + { + return; + } + word fName(fieldName); if (tag != -1) { - os << tag << token::TAB; + fName = fName + '_' + Foam::name(tag); } distributionModels::general distribution ( field, - distributionBinWidth_, + binWidth, rndGen_ ); - distribution.writeData(os); + const Field<scalar> distX(distribution.x()); + const Field<scalar> distY(distribution.y()); + + pointField xBin(distX.size(), Zero); + xBin.replace(0, distX); + const coordSet coords + ( + fName, + "x", + xBin, + distX + ); + + const wordList fieldNames(1, fName); + + fileName outputPath(baseTimeDir()); + mkDir(outputPath); + OFstream graphFile(outputPath/writerPtr_->getFileName(coords, fieldNames)); + + Log << " Writing distribution of " << fieldName + << " to " << graphFile.name() << endl; - os << endl; + List<const scalarField*> yPtrs(1); + yPtrs[0] = &distY; + writerPtr_->write(coords, fieldNames, yPtrs, graphFile); } diff --git a/src/functionObjects/field/particleDistribution/particleDistribution.H b/src/functionObjects/field/particleDistribution/particleDistribution.H index ea4f205a6514504cbf3530b48380e94269254ac7..fec579f1938dfe5c6f8af601f72153c3d910accc 100644 --- a/src/functionObjects/field/particleDistribution/particleDistribution.H +++ b/src/functionObjects/field/particleDistribution/particleDistribution.H @@ -28,7 +28,7 @@ Group grpFieldFunctionObjects Description - Generates a particle distrbution for lagrangian data. + Generates a particle distribution for lagrangian data at a given time. Usage \verbatim @@ -38,8 +38,12 @@ Usage libs ("libfieldFunctionObjects.so"); ... cloud "myCloud"; - field "d" - distributionBinWidth 0.1; + nameVsBinWidth + ( + (d 0.1) + (U 10) + ); + setFormat raw; } \endverbatim @@ -48,8 +52,9 @@ Usage Property | Description | Required | Default value type | Type name: particleDistribution | yes | cloud | Name of cloud to process | Yes | - field | Name of cloud field to process | Yes | - distributionBinWidth | Width of distribution bins | yes | + nameVsBinWidth | List of cloud field vs bin width | Yes | + tagField | Name of cloud field to use to group particles | no | none + setFormat | Output format | yes | \endtable See also @@ -69,6 +74,8 @@ SourceFiles #include "writeFile.H" #include "scalarField.H" #include "cachedRandom.H" +#include "Tuple2.H" +#include "writer.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -93,26 +100,27 @@ protected: //- Cloud name word cloudName_; - //- Field name - wordList fieldNames_; + //- List of field name vs. bin width + List<Tuple2<word, scalar>> nameVsBinWidth_; //- Tag field name - used to filter the particles into groups word tagFieldName_; - //- Distribution bin width - scalar distributionBinWidth_; - //- Random number generator - used by distribution models cachedRandom rndGen_; + //- Writer + autoPtr<writer<scalar>> writerPtr_; - // Private Member Functions + + // Protected Member Functions //- Generate the distribution void generateDistribution ( const word& fieldName, const scalarField& field, + const scalar binWidth, const label tag = -1 ); @@ -121,7 +129,7 @@ protected: bool processField ( const objectRegistry& obr, - const word& fieldName, + const label fieldi, const List<DynamicList<label>>& addr ); diff --git a/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C b/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C index 46cb2186933de7ed9f2b64651d404fa94519de4f..127ff11acc4a80c009246b9cf6dae6d695fa4d79 100644 --- a/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C +++ b/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C @@ -29,10 +29,13 @@ template<class Type> bool Foam::functionObjects::particleDistribution::processField ( const objectRegistry& obr, - const word& fieldName, + const label fieldi, const List<DynamicList<label>>& addr ) { + const word& fieldName = nameVsBinWidth_[fieldi].first(); + const scalar binWidth = nameVsBinWidth_[fieldi].second(); + if (obr.foundObject<IOField<Type>>(fieldName)) { const IOField<Type>& field = @@ -45,7 +48,13 @@ bool Foam::functionObjects::particleDistribution::processField const Field<Type> subField(field, addr[i]); for (direction d = 0; d < pTraits<Type>::nComponents; ++d) { - generateDistribution(fieldName, subField.component(d), i); + generateDistribution + ( + fieldName, + subField.component(d), + binWidth, + i + ); } } } @@ -53,7 +62,8 @@ bool Foam::functionObjects::particleDistribution::processField { for (direction d = 0; d < pTraits<Type>::nComponents; ++d) { - generateDistribution(fieldName, field.component(d)); + const word fName = fieldName + pTraits<Type>::componentNames[d]; + generateDistribution(fName, field.component(d), binWidth); } } diff --git a/src/functionObjects/field/randomise/randomiseTemplates.C b/src/functionObjects/field/randomise/randomiseTemplates.C index cf917c45f79c3fb86cd7f3dab46c32fa58b18c3b..a466ef3551033bdf244141de3e543421283eed63 100644 --- a/src/functionObjects/field/randomise/randomiseTemplates.C +++ b/src/functionObjects/field/randomise/randomiseTemplates.C @@ -33,11 +33,11 @@ bool Foam::functionObjects::randomise::calcRandomised() { typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; - if (foundObject<VolFieldType>(fieldName_)) + if (foundObject<VolFieldType>(fieldName_, false)) { const VolFieldType& field = lookupObject<VolFieldType>(fieldName_); - resultName_ = fieldName_ + "Random"; + resultName_ = fieldName_ & "Random"; tmp<VolFieldType> rfieldt(new VolFieldType(field)); VolFieldType& rfield = rfieldt.ref(); diff --git a/src/functionObjects/field/streamLine/streamLineBase.C b/src/functionObjects/field/streamLine/streamLineBase.C index 9b6daeee12c484a59d2d46a8b9b86e9115748915..3356524a06ef6b94167bbdb7da46e286dba5cea7 100644 --- a/src/functionObjects/field/streamLine/streamLineBase.C +++ b/src/functionObjects/field/streamLine/streamLineBase.C @@ -514,6 +514,8 @@ bool Foam::functionObjects::streamLineBase::read(const dictionary& dict) dict.lookup("fields") >> fields_; UName_ = dict.lookupOrDefault<word>("U", "U"); + Info<< " Employing velocity field " << UName_ << endl; + if (findIndex(fields_, UName_) == -1) { FatalIOErrorInFunction(dict) diff --git a/src/functionObjects/field/vorticity/vorticity.H b/src/functionObjects/field/vorticity/vorticity.H index dca18276f5e6ce9b8cb0c0d20a10abfb5d2ef62c..b4c308b878239caa7e6a098d0f240c502f0c5e0c 100644 --- a/src/functionObjects/field/vorticity/vorticity.H +++ b/src/functionObjects/field/vorticity/vorticity.H @@ -38,7 +38,7 @@ Usage vorticity1 { type vorticity; - libs ("libutilityFunctionObjects.so"); + libs ("libfieldFunctionObjects.so"); ... } \endverbatim diff --git a/src/functionObjects/field/yPlus/yPlus.H b/src/functionObjects/field/yPlus/yPlus.H index 7dcd64102831abfcd87e6de772f77ea3b49d04e9..76881db50e4f02fac311504250a1de0151125f43 100644 --- a/src/functionObjects/field/yPlus/yPlus.H +++ b/src/functionObjects/field/yPlus/yPlus.H @@ -39,7 +39,7 @@ Usage yPlus1 { type yPlus; - libs ("libutilityFunctionObjects.so"); + libs ("libfieldFunctionObjects.so"); ... } \endverbatim diff --git a/src/functionObjects/lagrangian/cloudInfo/postProcessingDict b/src/functionObjects/lagrangian/cloudInfo/postProcessingDict deleted file mode 100644 index 6ee7f9b6a827d308d00cf38a672bdaddb72d5229..0000000000000000000000000000000000000000 --- a/src/functionObjects/lagrangian/cloudInfo/postProcessingDict +++ /dev/null @@ -1,31 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object postProcessingDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -functions -{ - cloudInfo1 - { - type cloudInfo; - libs ("libcloudFunctionObjects.so"); - enabled true; - writeControl timeStep; - writeInterval 1; - - clouds (myCloud1); - } -} - -// ************************************************************************* // diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.H b/src/functionObjects/solvers/scalarTransport/scalarTransport.H index b06d6e88284910b9756359c2a6999bd6f92956ff..66b8f14790d03695a49ecc9f1c9c515ccfbe0e71 100644 --- a/src/functionObjects/solvers/scalarTransport/scalarTransport.H +++ b/src/functionObjects/solvers/scalarTransport/scalarTransport.H @@ -49,7 +49,7 @@ Usage scalar1 { type scalarTransport; - libs ("libutilityFunctionObjects.so"); + libs ("libsolverFunctionObjects.so"); resetOnStartUp no; region cabin; @@ -64,7 +64,7 @@ Usage } \endverbatim - Example of function object specification to solve a residency time + Example of function object specification to solve a residence time in a two phase flow: equation: \verbatim @@ -117,13 +117,13 @@ Usage rho | Name of density field | no | rho UPhi | Name of U to generate phi | no | none phase | Name of the phase name | no | none - nut | Name of the turbulence viscocity | no | none + nut | Name of the turbulence viscosity | no | none D | Diffusion coefficient | no | auto generated nCorr | Number of correctors | no | 0 resetOnStartUp | Reset scalar to zero on start-up | no | no schemesField | Name of field to specify schemes | no | fieldName fvOptions | List of scalar sources | no | - bounded01 | Bounds scalar betwee 0-1 for multiphase | no |true + bounded01 | Bounds scalar between 0-1 for multiphase | no |true phasePhiCompressed |Compressed flux for VOF | no | alphaPhiUn \endtable diff --git a/src/functionObjects/utilities/systemCall/Make/files b/src/functionObjects/utilities/systemCall/Make/files deleted file mode 100644 index 20bafa8dfa02102e3336118b2eeb385fff6114a5..0000000000000000000000000000000000000000 --- a/src/functionObjects/utilities/systemCall/Make/files +++ /dev/null @@ -1,4 +0,0 @@ -systemCall.C -systemCallFunctionObject.C - -LIB = $(FOAM_LIBBIN)/libsystemCall diff --git a/src/functionObjects/utilities/systemCall/Make/options b/src/functionObjects/utilities/systemCall/Make/options deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 0cf368a6ab526e3fce455c3ec2a300ee5c01aeac..87339642bf309e78dccdf806e06b4f820acedd26 100644 --- a/src/lagrangian/distributionModels/general/general.C +++ b/src/lagrangian/distributionModels/general/general.C @@ -42,6 +42,8 @@ namespace distributionModels void Foam::distributionModels::general::initialise() { + static scalar eps = ROOTVSMALL; + const label nEntries = xy_.size(); integral_.setSize(nEntries); @@ -50,7 +52,7 @@ void Foam::distributionModels::general::initialise() integral_[0] = 0.0; for (label i = 1; i < nEntries; i++) { - scalar k = (xy_[i][1] - xy_[i-1][1])/(xy_[i][0] - xy_[i-1][0]); + scalar k = (xy_[i][1] - xy_[i-1][1])/(xy_[i][0] - xy_[i-1][0] + eps); scalar d = xy_[i-1][1] - k*xy_[i-1][0]; scalar y1 = xy_[i][0]*(0.5*k*xy_[i][0] + d); scalar y0 = xy_[i-1][0]*(0.5*k*xy_[i-1][0] + d); @@ -61,12 +63,12 @@ void Foam::distributionModels::general::initialise() scalar sumArea = integral_.last(); - meanValue_ = sumArea/(maxValue() - minValue()); + meanValue_ = sumArea/(maxValue() - minValue() + eps); for (label i=0; i < nEntries; i++) { - xy_[i][1] /= sumArea; - integral_[i] /= sumArea; + xy_[i][1] /= sumArea + eps; + integral_[i] /= sumArea + eps; } } @@ -243,9 +245,10 @@ Foam::dictionary Foam::distributionModels::general::writeDict const word& dictName ) const { -// dictionary dict = distributionModel::writeDict(dictName); + // dictionary dict = distributionModel::writeDict(dictName); dictionary dict(dictName); - dict.add("distribution", xy_); + dict.add("x", x()); + dict.add("y", y()); return dict; } @@ -253,12 +256,49 @@ Foam::dictionary Foam::distributionModels::general::writeDict void Foam::distributionModels::general::readDict(const dictionary& dict) { -// distributionModel::readDict(dict); - dict.lookup("distribution") >> xy_; + // distributionModel::readDict(dict); + List<scalar> x(dict.lookup("x")); + List<scalar> y(dict.lookup("y")); + + xy_.setSize(x.size()); + forAll(xy_, i) + { + xy_[i][0] = x[i]; + xy_[i][1] = y[i]; + } + initialise(); } +Foam::tmp<Foam::Field<Foam::scalar>> +Foam::distributionModels::general::x() const +{ + tmp<Field<scalar>> tx(new Field<scalar>(xy_.size())); + scalarField& xi = tx.ref(); + forAll(xy_, i) + { + xi[i] = xy_[i][0]; + } + + return tx; +} + + +Foam::tmp<Foam::Field<Foam::scalar>> +Foam::distributionModels::general::y() const +{ + tmp<Field<scalar>> ty(new Field<scalar>(xy_.size())); + scalarField& yi = ty.ref(); + forAll(xy_, i) + { + yi[i] = xy_[i][1]; + } + + return ty; +} + + Foam::Ostream& Foam::operator<< ( Ostream& os, diff --git a/src/lagrangian/distributionModels/general/general.H b/src/lagrangian/distributionModels/general/general.H index 63d5d74d8911ddf614e35ded6781b23727a73d6e..db8a18194a411783329590075d82aea4eac8a105 100644 --- a/src/lagrangian/distributionModels/general/general.H +++ b/src/lagrangian/distributionModels/general/general.H @@ -38,6 +38,7 @@ SourceFiles #include "distributionModel.H" #include "Vector.H" #include "VectorSpace.H" +#include "Field.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -121,6 +122,12 @@ public: // Member Functions + //- Bin boundaries + virtual tmp<Field<scalar>> x() const; + + //- Probabilities + virtual tmp<Field<scalar>> y() const; + //- Sample the distributionModel virtual scalar sample() const; diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 1ff7e53ee74de1eca1632815ee6463abef8ee5d3..faed14eea6d9cb10253b93b666237274a2446954 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -589,7 +589,7 @@ void surfaceNoise::calculate() forAll(surfPrmsf, i) { - label freqI = i*fftWriteInterval_; + label freqI = (i + 1)*fftWriteInterval_ - 1; fOut[i] = freq1[freqI]; const word gName = "fft"; PrmsfAve[i] = writeSurfaceData diff --git a/src/waveModels/waveModel/waveModel.C b/src/waveModels/waveModel/waveModel.C index 01f5749b9b5ff7868ca5e2a9d2085f607a19886b..bb859aacda8463b83b65db48da9e2f3bca56e50e 100644 --- a/src/waveModels/waveModel/waveModel.C +++ b/src/waveModels/waveModel/waveModel.C @@ -147,8 +147,8 @@ Foam::tmp<Foam::scalarField> Foam::waveModel::waterLevel() const reduce(paddleMagSf[paddlei], sumOp<scalar>()); reduce(paddleWettedMagSf[paddlei], sumOp<scalar>()); level[paddlei] += - paddleWettedMagSf[paddlei] - /(paddleMagSf[paddlei]*zSpan_ + ROOTVSMALL); + paddleWettedMagSf[paddlei]*zSpan_ + /(paddleMagSf[paddlei] + ROOTVSMALL); } return tlevel; diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict index 6bd47f7e0338cd3e6a53465f0d1fd49209c7b043..d9b620638ab37f052228a816de511bcbad48248b 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict @@ -49,5 +49,22 @@ maxCo 0.1; runTimeModifiable yes; +functions +{ + distribtion1 + { + type particleDistribution; + libs ("libfieldFunctionObjects.so"); + writeControl writeTime; + cloud sprayCloud; + nameVsBinWidth + ( + (d 1e-5) + (U 10) + ); + setFormat raw; + } +} + // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution index a6d6b311547cc1a5887d044ac34d0f8bfb366a1a..859308b6fabab21be628e4f49871e8e0104adbe6 100644 --- a/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution @@ -22,16 +22,7 @@ solvers { nAlphaCorr 1; nAlphaSubCycles 3; - alphaOuterCorrectors yes; cAlpha 1; - - MULESCorr no; - nLimiterIter 3; - - solver smoothSolver; - smoother symGaussSeidel; - tolerance 1e-8; - relTol 0; } pcorr @@ -53,13 +44,7 @@ solvers p_rghFinal { solver GAMG; - smoother GaussSeidel; - nPreSweeps 0; - nPostSweeps 2; - cacheAgglomeration on; - agglomerator faceAreaPair; - nCellsInCoarsestLevel 10; - mergeLevels 1; + smoother DIC; tolerance 1e-7; relTol 0; } diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/fvSolution index a6d6b311547cc1a5887d044ac34d0f8bfb366a1a..859308b6fabab21be628e4f49871e8e0104adbe6 100644 --- a/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/fvSolution @@ -22,16 +22,7 @@ solvers { nAlphaCorr 1; nAlphaSubCycles 3; - alphaOuterCorrectors yes; cAlpha 1; - - MULESCorr no; - nLimiterIter 3; - - solver smoothSolver; - smoother symGaussSeidel; - tolerance 1e-8; - relTol 0; } pcorr @@ -53,13 +44,7 @@ solvers p_rghFinal { solver GAMG; - smoother GaussSeidel; - nPreSweeps 0; - nPostSweeps 2; - cacheAgglomeration on; - agglomerator faceAreaPair; - nCellsInCoarsestLevel 10; - mergeLevels 1; + smoother DIC; tolerance 1e-7; relTol 0; } diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/fvSolution index a6d6b311547cc1a5887d044ac34d0f8bfb366a1a..859308b6fabab21be628e4f49871e8e0104adbe6 100644 --- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/fvSolution @@ -22,16 +22,7 @@ solvers { nAlphaCorr 1; nAlphaSubCycles 3; - alphaOuterCorrectors yes; cAlpha 1; - - MULESCorr no; - nLimiterIter 3; - - solver smoothSolver; - smoother symGaussSeidel; - tolerance 1e-8; - relTol 0; } pcorr @@ -53,13 +44,7 @@ solvers p_rghFinal { solver GAMG; - smoother GaussSeidel; - nPreSweeps 0; - nPostSweeps 2; - cacheAgglomeration on; - agglomerator faceAreaPair; - nCellsInCoarsestLevel 10; - mergeLevels 1; + smoother DIC; tolerance 1e-7; relTol 0; } diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/fvSolution index a6d6b311547cc1a5887d044ac34d0f8bfb366a1a..859308b6fabab21be628e4f49871e8e0104adbe6 100644 --- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/fvSolution @@ -22,16 +22,7 @@ solvers { nAlphaCorr 1; nAlphaSubCycles 3; - alphaOuterCorrectors yes; cAlpha 1; - - MULESCorr no; - nLimiterIter 3; - - solver smoothSolver; - smoother symGaussSeidel; - tolerance 1e-8; - relTol 0; } pcorr @@ -53,13 +44,7 @@ solvers p_rghFinal { solver GAMG; - smoother GaussSeidel; - nPreSweeps 0; - nPostSweeps 2; - cacheAgglomeration on; - agglomerator faceAreaPair; - nCellsInCoarsestLevel 10; - mergeLevels 1; + smoother DIC; tolerance 1e-7; relTol 0; } diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/fvSolution index a6d6b311547cc1a5887d044ac34d0f8bfb366a1a..859308b6fabab21be628e4f49871e8e0104adbe6 100644 --- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/fvSolution @@ -22,16 +22,7 @@ solvers { nAlphaCorr 1; nAlphaSubCycles 3; - alphaOuterCorrectors yes; cAlpha 1; - - MULESCorr no; - nLimiterIter 3; - - solver smoothSolver; - smoother symGaussSeidel; - tolerance 1e-8; - relTol 0; } pcorr @@ -53,13 +44,7 @@ solvers p_rghFinal { solver GAMG; - smoother GaussSeidel; - nPreSweeps 0; - nPostSweeps 2; - cacheAgglomeration on; - agglomerator faceAreaPair; - nCellsInCoarsestLevel 10; - mergeLevels 1; + smoother DIC; tolerance 1e-7; relTol 0; }