From 3f362fd7ec3314968440f55a6caf87f281498e16 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 16 Dec 2016 08:17:29 +0100 Subject: [PATCH 01/17] CONFIG: add config files for VTK, MESA - sometimes used for off-screen rendering. Only add to library-path when they are actually available --- bin/tools/foamConfigurePaths | 35 ++++++++++++++---- etc/bashrc | 1 + etc/config.csh/unset | 2 + etc/config.csh/vtk | 67 +++++++++++++++++++++++++++++++++ etc/config.sh/paraview | 2 +- etc/config.sh/unset | 2 + etc/config.sh/vtk | 72 ++++++++++++++++++++++++++++++++++++ etc/cshrc | 1 + 8 files changed, 174 insertions(+), 8 deletions(-) create mode 100644 etc/config.csh/vtk create mode 100644 etc/config.sh/vtk diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a85cff83f8..a27cb37219 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -53,13 +53,17 @@ usage: ${0##*/} -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/) + -paraview ver specify ParaView_VERSION (eg, 5.0.1) + -paraviewInstall dir specify ParaView_DIR (eg, /opt/paraviewopenfoam3120) + -scotch ver specify SCOTCH_VERSION (eg, scotch_6.0.4) + -scotchArchPath 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) * Adjust hardcoded installation paths and versions +- unless otherwise specified, the default mpi is SYSTEMOPENMPI + USAGE exit 1 } @@ -69,9 +73,11 @@ 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 } @@ -212,7 +218,7 @@ do shift ;; - -third[Pp]arty) + -[Tt]hird[Pp]arty | -[Tt]hird) # 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 +226,6 @@ do shift ;; - -boost) # Replace boost_version=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -333,6 +338,22 @@ 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 + ;; + *) die "unknown option/argument: '$1'" ;; diff --git a/etc/bashrc b/etc/bashrc index 0cdf4031ba..3f5d04e83b 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 88bdd3454e..b423a53d98 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 0000000000..bd39d000ec --- /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 . +# +# File +# etc/config.csh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-/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_ARCH_PATH" + 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 a8df5e7d9c..188d505b0f 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 e7b834baeb..6bc4a517ab 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 0000000000..67ce07dfc7 --- /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 . +# +# File +# etc/config.sh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-/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_ARCH_PATH" 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 54c74ad3f9..d5f315ee16 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` From 9b1fcb0f7312a10d4b4db2e3995a50a3c90a5b7b Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 16 Dec 2016 08:17:38 +0100 Subject: [PATCH 02/17] ENH: increase coverage for foamConfigurePaths script - can adjust many more values --- bin/tools/foamConfigurePaths | 238 ++++++++++++++++++++++++++--------- 1 file changed, 178 insertions(+), 60 deletions(-) diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a27cb37219..442eaf83e1 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,39 +35,60 @@ usage() { cat< [... ] +# +_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 _inlineSed() @@ -102,7 +142,7 @@ _inlineSed() return 1 } - echo "Okay: $msg in $file" + echo " $msg ($file)" return 0 } @@ -128,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 @@ -145,6 +182,9 @@ do -h | -help | --help) usage ;; + '') + # Discard empty arguments + ;; -foamInstall | --foamInstall) # Replace FOAM_INST_DIR=... @@ -154,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=.*' \ @@ -173,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" @@ -190,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) @@ -218,7 +266,7 @@ do shift ;; - -[Tt]hird[Pp]arty | -[Tt]hird) + -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" @@ -234,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" @@ -250,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" @@ -266,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" @@ -290,15 +338,50 @@ do shift ;; + -openmpi) + # Replace FOAM_MPI=openmpi-.. 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" @@ -314,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" @@ -330,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" @@ -354,6 +437,40 @@ do 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'" ;; @@ -361,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 #------------------------------------------------------------------------------ From 901ee4482729a4406508b29606d09418896e68cf Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 16 Dec 2016 19:53:57 +0000 Subject: [PATCH 03/17] BUG: Re-applying commit e73d2c5d --- .../noise/noiseModels/surfaceNoise/surfaceNoise.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 1ff7e53ee7..faed14eea6 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 From 8b86d8b1b2d9b3b992ca018309b744e1f434adc0 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 16 Dec 2016 20:23:47 +0000 Subject: [PATCH 04/17] BUG: waveMOdels - corrected error introduced in commit 95f3adb1 --- src/waveModels/waveModel/waveModel.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/waveModels/waveModel/waveModel.C b/src/waveModels/waveModel/waveModel.C index 01f5749b9b..bb859aacda 100644 --- a/src/waveModels/waveModel/waveModel.C +++ b/src/waveModels/waveModel/waveModel.C @@ -147,8 +147,8 @@ Foam::tmp Foam::waveModel::waterLevel() const reduce(paddleMagSf[paddlei], sumOp()); reduce(paddleWettedMagSf[paddlei], sumOp()); level[paddlei] += - paddleWettedMagSf[paddlei] - /(paddleMagSf[paddlei]*zSpan_ + ROOTVSMALL); + paddleWettedMagSf[paddlei]*zSpan_ + /(paddleMagSf[paddlei] + ROOTVSMALL); } return tlevel; From f41c88000f7a09ace2617c24d2d6b36bbbb5bb35 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 16 Dec 2016 20:24:02 +0000 Subject: [PATCH 05/17] ENH: Tutorial updates --- .../waveExampleCnoidal/system/fvSolution | 17 +---------------- .../waveExampleSolitary/system/fvSolution | 17 +---------------- .../waveExampleStokesI/system/fvSolution | 17 +---------------- .../waveExampleStokesII/system/fvSolution | 17 +---------------- .../waveExampleStokesV/system/fvSolution | 17 +---------------- 5 files changed, 5 insertions(+), 80 deletions(-) diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/fvSolution index a6d6b31154..859308b6fa 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 a6d6b31154..859308b6fa 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 a6d6b31154..859308b6fa 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 a6d6b31154..859308b6fa 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 a6d6b31154..859308b6fa 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; } From 16f1d748ec9d9ef1b42542e7f02c95ef49f09162 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 16 Dec 2016 20:45:13 +0000 Subject: [PATCH 06/17] BUG: Corrected function object usage documentation. Fixes #349 --- .../field/DESModelRegions/DESModelRegions.H | 2 +- src/functionObjects/field/PecletNo/PecletNo.H | 2 +- src/functionObjects/field/Q/Q.H | 2 +- .../field/vorticity/vorticity.H | 2 +- src/functionObjects/field/yPlus/yPlus.H | 2 +- .../lagrangian/cloudInfo/postProcessingDict | 31 ------------------- 6 files changed, 5 insertions(+), 36 deletions(-) delete mode 100644 src/functionObjects/lagrangian/cloudInfo/postProcessingDict diff --git a/src/functionObjects/field/DESModelRegions/DESModelRegions.H b/src/functionObjects/field/DESModelRegions/DESModelRegions.H index c715d3710f..c10f9f0e51 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 7e474ad07a..bb6bf48597 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 ca753f641d..ca2cc1b744 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/vorticity/vorticity.H b/src/functionObjects/field/vorticity/vorticity.H index dca18276f5..b4c308b878 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 7dcd641028..76881db50e 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 6ee7f9b6a8..0000000000 --- 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); - } -} - -// ************************************************************************* // From db0d8de75628f0e34f3a56682fffbc3e04e499c7 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 16 Dec 2016 20:59:13 +0000 Subject: [PATCH 07/17] ENH: Streamline function object - report velocity field being employed - see #323 --- src/functionObjects/field/streamLine/streamLineBase.C | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/functionObjects/field/streamLine/streamLineBase.C b/src/functionObjects/field/streamLine/streamLineBase.C index 9b6daeee12..3356524a06 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("U", "U"); + Info<< " Employing velocity field " << UName_ << endl; + if (findIndex(fields_, UName_) == -1) { FatalIOErrorInFunction(dict) From 7acef189cf21b09f379d93d45198a417b4def74d Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Sun, 18 Dec 2016 01:43:58 +0100 Subject: [PATCH 08/17] ENH: provide machine/OpenFOAM architecture hint in output files (issue #271) FoamFile { version 2.0; format binary; arch "LSB;label=32;scalar=64"; class vectorField; object points; } There is otherwise no simple indication in any of the files as to the sizes used (Int32 vs Int64, SP vs DP). This makes it difficult for the end-user and also for any third-party consumers. -- The architecture information contains three items in the following format: (LSB|MSB);label=(32|64);scalar=(32|64) - The endian value always appears first, without any leading space. This make it trivial to check later. Either the first 3 letters (LSB vs MSB) or even just the first letter ('L' vs 'M'). - Subsequent key=value pairs for 'label' and 'scalar' are separated by semicolons. The ordering of label vs scalar is not specified. Note that this 'arch' information is purely informational. It is currently not used by the OpenFOAM input mechanism itself. --- .../db/IOobject/IOobjectWriteHeader.C | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C b/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C index bb19caf668..82de72d3d2 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()) From 23dfba2f6421c7ee77f4f816f66a3bbd165adb5f Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Sun, 18 Dec 2016 21:25:12 +0000 Subject: [PATCH 09/17] STYLE: Updated header documentation --- .../solvers/scalarTransport/scalarTransport.H | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/functionObjects/solvers/scalarTransport/scalarTransport.H b/src/functionObjects/solvers/scalarTransport/scalarTransport.H index b06d6e8828..66b8f14790 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 From 03e1f9c433f4076dbcf644575439bb311ade6431 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Sun, 18 Dec 2016 21:28:35 +0000 Subject: [PATCH 10/17] ENH: Removed unused files --- src/functionObjects/utilities/systemCall/Make/files | 4 ---- src/functionObjects/utilities/systemCall/Make/options | 0 2 files changed, 4 deletions(-) delete mode 100644 src/functionObjects/utilities/systemCall/Make/files delete mode 100644 src/functionObjects/utilities/systemCall/Make/options diff --git a/src/functionObjects/utilities/systemCall/Make/files b/src/functionObjects/utilities/systemCall/Make/files deleted file mode 100644 index 20bafa8dfa..0000000000 --- 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 e69de29bb2..0000000000 From 519248d3f47e9fd82359b2851ae9e525e1e76ca1 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Sun, 18 Dec 2016 21:44:25 +0000 Subject: [PATCH 11/17] ENH: fieldExpression - added verbose flag to foundObject --- .../field/components/componentsTemplates.C | 4 ++-- src/functionObjects/field/div/divTemplates.C | 2 +- .../field/fieldExpression/fieldExpression.H | 2 +- .../fieldExpression/fieldExpressionTemplates.C | 16 ++++++++++------ src/functionObjects/field/grad/gradTemplates.C | 4 ++-- src/functionObjects/field/mag/magTemplates.C | 6 +++--- .../field/magSqr/magSqrTemplates.C | 6 +++--- .../field/randomise/randomiseTemplates.C | 4 ++-- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/functionObjects/field/components/componentsTemplates.C b/src/functionObjects/field/components/componentsTemplates.C index 7d56c3c41b..a899a293a6 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 VolFieldType; typedef GeometricField SurfaceFieldType; - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { return calcFieldComponents(); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return calcFieldComponents(); } diff --git a/src/functionObjects/field/div/divTemplates.C b/src/functionObjects/field/div/divTemplates.C index 08d78e198f..c13ec96c9f 100644 --- a/src/functionObjects/field/div/divTemplates.C +++ b/src/functionObjects/field/div/divTemplates.C @@ -30,7 +30,7 @@ License template bool Foam::functionObjects::div::calcDiv() { - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.H b/src/functionObjects/field/fieldExpression/fieldExpression.H index 0ae69f8aec..8f1e263efc 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 - 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 442834b6e5..f2549fbf66 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C +++ b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C @@ -30,8 +30,9 @@ License template bool Foam::functionObjects::fieldExpression::foundObject ( - const word& name -) + const word& name, + const bool verbose +) const { if (fvMeshFunctionObject::foundObject(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 d1ad033526..e7b6b81248 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 VolFieldType; typedef GeometricField SurfaceFieldType; - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { return store ( @@ -42,7 +42,7 @@ bool Foam::functionObjects::grad::calcGrad() mesh_.changing() && mesh_.cache(resultName_) ); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/mag/magTemplates.C b/src/functionObjects/field/mag/magTemplates.C index dead35a360..a02d9a2ac6 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 SurfaceFieldType; typedef DimensionedField SurfFieldType; - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { return store ( @@ -44,7 +44,7 @@ bool Foam::functionObjects::mag::calcMag() Foam::mag(lookupObject(fieldName_)) ); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return store ( @@ -52,7 +52,7 @@ bool Foam::functionObjects::mag::calcMag() Foam::mag(lookupObject(fieldName_)) ); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/magSqr/magSqrTemplates.C b/src/functionObjects/field/magSqr/magSqrTemplates.C index a3fee019bb..57a808ad91 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 SurfaceFieldType; typedef DimensionedField SurfFieldType; - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { return store ( @@ -44,7 +44,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr() Foam::magSqr(lookupObject(fieldName_)) ); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return store ( @@ -52,7 +52,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr() Foam::magSqr(lookupObject(fieldName_)) ); } - else if (foundObject(fieldName_)) + else if (foundObject(fieldName_, false)) { return store ( diff --git a/src/functionObjects/field/randomise/randomiseTemplates.C b/src/functionObjects/field/randomise/randomiseTemplates.C index cf917c45f7..a466ef3551 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 VolFieldType; - if (foundObject(fieldName_)) + if (foundObject(fieldName_, false)) { const VolFieldType& field = lookupObject(fieldName_); - resultName_ = fieldName_ + "Random"; + resultName_ = fieldName_ & "Random"; tmp rfieldt(new VolFieldType(field)); VolFieldType& rfield = rfieldt.ref(); From 1422c1aa3a50df79f69c3245130c1b2324398aad Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 19 Dec 2016 10:01:31 +0000 Subject: [PATCH 12/17] BUG: etc: use of wrong variable name --- etc/config.csh/vtk | 2 +- etc/config.sh/vtk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk index bd39d000ec..d98dfb6ddb 100644 --- a/etc/config.csh/vtk +++ b/etc/config.csh/vtk @@ -45,7 +45,7 @@ setenv MESA_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_v #------------------------------------------------------------------------------ if ($?FOAM_VERBOSE && $?prompt) then - echo "Using vtk ($vtk_version) -> $VTK_ARCH_PATH" + echo "Using vtk ($vtk_version) -> $VTK_DIR" echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" endif diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk index 67ce07dfc7..a0fa15f693 100644 --- a/etc/config.sh/vtk +++ b/etc/config.sh/vtk @@ -44,7 +44,7 @@ export MESA_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_v #------------------------------------------------------------------------------ if [ "$FOAM_VERBOSE" -a "$PS1" ] then - echo "Using vtk ($vtk_version) -> $VTK_ARCH_PATH" 1>&2 + echo "Using vtk ($vtk_version) -> $VTK_DIR" 1>&2 echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" 1>&2 fi From 23a6cadfa68f412b14f67e679c253faaeec0b056 Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 19 Dec 2016 12:58:49 +0000 Subject: [PATCH 13/17] BUG: redistributePar: remove inconsistent *ProcAddressing. Fixes #351. --- .../manipulation/renumberMesh/renumberMesh.C | 24 ++++++++++- .../renumberMesh/renumberMeshDict | 2 +- .../redistributePar/redistributePar.C | 40 +++++++++++++++---- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 80a4dc58e8..4275238815 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 c6321991cc..886285c952 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 aee47e55fd..3c53c60c6a 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(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 { From ebb2ec504c3b96e4749f53820d55a22ea03aa8a9 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Mon, 19 Dec 2016 14:16:13 +0000 Subject: [PATCH 14/17] STYLE: Updated header documentation --- .../eddyDissipationDiffusionModel.H | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H index d3b1da1344..2057adcdf4 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 From 75e86eb41330ce4ef4e140cc3f51d655388baede Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Mon, 19 Dec 2016 14:17:07 +0000 Subject: [PATCH 15/17] ENH: particleDistribution function object - updated output --- .../particleDistribution.C | 79 +++++++++++++------ .../particleDistribution.H | 29 ++++--- .../particleDistributionTemplates.C | 16 +++- .../distributionModels/general/general.C | 37 +++++++-- 4 files changed, 116 insertions(+), 45 deletions(-) diff --git a/src/functionObjects/field/particleDistribution/particleDistribution.C b/src/functionObjects/field/particleDistribution/particleDistribution.C index 441afd29e3..0cd7827c25 100644 --- a/src/functionObjects/field/particleDistribution/particleDistribution.C +++ b/src/functionObjects/field/particleDistribution/particleDistribution.C @@ -46,6 +46,29 @@ namespace functionObjects } } + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::functionObjects::particleDistribution::writeFileHeader +( + Ostream& os +) const +{ + writeHeader(os, "Particle distribution"); + writeHeaderValue(os, "Cloud", cloudName_); + forAll(nameVsBinWidth_, i) + { + writeHeaderValue + ( + os, + "Field:" + nameVsBinWidth_[i].first(), + nameVsBinWidth_[i].second() + ); + } + os << endl; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::functionObjects::particleDistribution::particleDistribution @@ -58,12 +81,12 @@ Foam::functionObjects::particleDistribution::particleDistribution fvMeshFunctionObject(name, runTime, dict), writeFile(runTime, name, typeName, dict), cloudName_("unknown-cloudName"), - fieldNames_(), - tagFieldName_("unknown-tagFieldName"), - distributionBinWidth_(0), + nameVsBinWidth_(), + tagFieldName_("none"), rndGen_(1234, -1) { read(dict); + writeFileHeader(file()); } @@ -80,11 +103,10 @@ 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_); - Info<< type() << " " << name() << " output:" + Info<< type() << " " << name() << " output:" << nl << " Processing cloud : " << cloudName_ << nl << endl; @@ -107,9 +129,12 @@ bool Foam::functionObjects::particleDistribution::write() if (!mesh_.foundObject(cloudName_)) { + wordList cloudNames(mesh_.names()); + WarningInFunction << "Unable to find cloud " << cloudName_ - << " in the mesh database" << endl; + << " in the mesh database. Available clouds include:" + << cloudNames << endl; return false; } @@ -152,25 +177,31 @@ bool Foam::functionObjects::particleDistribution::write() } } + file() << "# Time: " << mesh_.time().timeName() << nl; + bool ok = false; - forAll(fieldNames_, i) + forAll(nameVsBinWidth_, i) { - const word fName = fieldNames_[i]; - ok = ok || processField(cloudObr, fName, tagAddr); - ok = ok || processField(cloudObr, fName, tagAddr); - ok = ok || processField(cloudObr, fName, tagAddr); - ok = ok || processField(cloudObr, fName, tagAddr); - ok = ok || processField(cloudObr, fName, tagAddr); - ok = ok || processField(cloudObr, fName, tagAddr); + ok = false; + ok = ok || processField(cloudObr, i, tagAddr); + ok = ok || processField(cloudObr, i, tagAddr); + ok = ok || processField(cloudObr, i, tagAddr); + ok = ok || processField(cloudObr, i, tagAddr); + ok = ok || processField(cloudObr, i, tagAddr); + ok = ok || processField(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; } } + if (ok) + { + file() << nl; + } return true; } @@ -180,9 +211,15 @@ void Foam::functionObjects::particleDistribution::generateDistribution ( const word& fieldName, const scalarField& field, + const scalar binWidth, const label tag ) { + if (field.empty()) + { + return; + } + Ostream& os = file(); if (tag != -1) @@ -193,13 +230,11 @@ void Foam::functionObjects::particleDistribution::generateDistribution distributionModels::general distribution ( field, - distributionBinWidth_, + binWidth, rndGen_ ); - distribution.writeData(os); - - os << endl; + os << fieldName << distribution.writeDict(mesh_.time().timeName()); } diff --git a/src/functionObjects/field/particleDistribution/particleDistribution.H b/src/functionObjects/field/particleDistribution/particleDistribution.H index ea4f205a65..37ece3aeb9 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 distrbution for lagrangian data at a given time. Usage \verbatim @@ -38,8 +38,11 @@ Usage libs ("libfieldFunctionObjects.so"); ... cloud "myCloud"; - field "d" - distributionBinWidth 0.1; + nameVsBinWidth + ( + (d 0.1) + (U 10) + ); } \endverbatim @@ -48,8 +51,8 @@ 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 \endtable See also @@ -69,6 +72,7 @@ SourceFiles #include "writeFile.H" #include "scalarField.H" #include "cachedRandom.H" +#include "Tuple2.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -93,26 +97,24 @@ protected: //- Cloud name word cloudName_; - //- Field name - wordList fieldNames_; + //- List of field name vs. bin width + List> 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_; - // 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 +123,7 @@ protected: bool processField ( const objectRegistry& obr, - const word& fieldName, + const label fieldi, const List>& addr ); @@ -131,6 +133,9 @@ protected: //- Disallow default bitwise assignment void operator=(const particleDistribution&) = delete; + //- Output file header information + virtual void writeFileHeader(Ostream& os) const; + public: diff --git a/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C b/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C index 46cb218693..127ff11acc 100644 --- a/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C +++ b/src/functionObjects/field/particleDistribution/particleDistributionTemplates.C @@ -29,10 +29,13 @@ template bool Foam::functionObjects::particleDistribution::processField ( const objectRegistry& obr, - const word& fieldName, + const label fieldi, const List>& addr ) { + const word& fieldName = nameVsBinWidth_[fieldi].first(); + const scalar binWidth = nameVsBinWidth_[fieldi].second(); + if (obr.foundObject>(fieldName)) { const IOField& field = @@ -45,7 +48,13 @@ bool Foam::functionObjects::particleDistribution::processField const Field subField(field, addr[i]); for (direction d = 0; d < pTraits::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::nComponents; ++d) { - generateDistribution(fieldName, field.component(d)); + const word fName = fieldName + pTraits::componentNames[d]; + generateDistribution(fName, field.component(d), binWidth); } } diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 0cf368a6ab..052bfbd1fb 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,19 @@ 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_); + List data(xy_.size()); + forAll(data, i) + { + data[i] = xy_[i][0]; + } + dict.add("x", data); + forAll(data, i) + { + data[i] = xy_[i][1]; + } + dict.add("y", data); return dict; } @@ -253,8 +265,17 @@ 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 x(dict.lookup("x")); + List y(dict.lookup("y")); + + xy_.setSize(x.size()); + forAll(xy_, i) + { + xy_[i][0] = x[i]; + xy_[i][1] = y[i]; + } + initialise(); } From a529ced4737a0d23e9e7ba3d9ad0957488815a5f Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Mon, 19 Dec 2016 14:24:35 +0000 Subject: [PATCH 16/17] ENH: Aachen bomb tutorial - added example of particleSistribution function object --- .../sprayFoam/aachenBomb/system/controlDict | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict index 6bd47f7e03..b5bb535898 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) + ); + distributionBinWidth 1e-5; + } +} + // ************************************************************************* // From c537e4e8acea94de1529628327942623208c8792 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Mon, 19 Dec 2016 20:38:27 +0000 Subject: [PATCH 17/17] ENH: Updated output to use the writer class --- .../particleDistribution.C | 67 +++++++++---------- .../particleDistribution.H | 11 +-- .../distributionModels/general/general.C | 41 +++++++++--- .../distributionModels/general/general.H | 7 ++ .../sprayFoam/aachenBomb/system/controlDict | 2 +- 5 files changed, 77 insertions(+), 51 deletions(-) diff --git a/src/functionObjects/field/particleDistribution/particleDistribution.C b/src/functionObjects/field/particleDistribution/particleDistribution.C index 0cd7827c25..71919b0933 100644 --- a/src/functionObjects/field/particleDistribution/particleDistribution.C +++ b/src/functionObjects/field/particleDistribution/particleDistribution.C @@ -47,28 +47,6 @@ namespace functionObjects } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Foam::functionObjects::particleDistribution::writeFileHeader -( - Ostream& os -) const -{ - writeHeader(os, "Particle distribution"); - writeHeaderValue(os, "Cloud", cloudName_); - forAll(nameVsBinWidth_, i) - { - writeHeaderValue - ( - os, - "Field:" + nameVsBinWidth_[i].first(), - nameVsBinWidth_[i].second() - ); - } - os << endl; -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::functionObjects::particleDistribution::particleDistribution @@ -79,14 +57,14 @@ Foam::functionObjects::particleDistribution::particleDistribution ) : fvMeshFunctionObject(name, runTime, dict), - writeFile(runTime, name, typeName, dict), + writeFile(runTime, name), cloudName_("unknown-cloudName"), nameVsBinWidth_(), tagFieldName_("none"), - rndGen_(1234, -1) + rndGen_(1234, -1), + writerPtr_(nullptr) { read(dict); - writeFileHeader(file()); } @@ -105,6 +83,8 @@ bool Foam::functionObjects::particleDistribution::read(const dictionary& dict) dict.lookup("cloud") >> cloudName_; dict.lookup("nameVsBinWidth") >> nameVsBinWidth_; dict.readIfPresent("tagField", tagFieldName_); + word format(dict.lookup("setFormat")); + writerPtr_ = writer::New(format); Info<< type() << " " << name() << " output:" << nl << " Processing cloud : " << cloudName_ << nl @@ -177,7 +157,6 @@ bool Foam::functionObjects::particleDistribution::write() } } - file() << "# Time: " << mesh_.time().timeName() << nl; bool ok = false; forAll(nameVsBinWidth_, i) @@ -198,11 +177,6 @@ bool Foam::functionObjects::particleDistribution::write() } } - if (ok) - { - file() << nl; - } - return true; } @@ -220,11 +194,10 @@ void Foam::functionObjects::particleDistribution::generateDistribution return; } - Ostream& os = file(); - + word fName(fieldName); if (tag != -1) { - os << tag << token::TAB; + fName = fName + '_' + Foam::name(tag); } distributionModels::general distribution @@ -234,7 +207,31 @@ void Foam::functionObjects::particleDistribution::generateDistribution rndGen_ ); - os << fieldName << distribution.writeDict(mesh_.time().timeName()); + const Field distX(distribution.x()); + const Field 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; + + List 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 37ece3aeb9..fec579f193 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 at a given time. + Generates a particle distribution for lagrangian data at a given time. Usage \verbatim @@ -43,6 +43,7 @@ Usage (d 0.1) (U 10) ); + setFormat raw; } \endverbatim @@ -53,6 +54,7 @@ Usage cloud | Name of cloud to process | 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 @@ -73,6 +75,7 @@ SourceFiles #include "scalarField.H" #include "cachedRandom.H" #include "Tuple2.H" +#include "writer.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -106,6 +109,9 @@ protected: //- Random number generator - used by distribution models cachedRandom rndGen_; + //- Writer + autoPtr> writerPtr_; + // Protected Member Functions @@ -133,9 +139,6 @@ protected: //- Disallow default bitwise assignment void operator=(const particleDistribution&) = delete; - //- Output file header information - virtual void writeFileHeader(Ostream& os) const; - public: diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 052bfbd1fb..87339642bf 100644 --- a/src/lagrangian/distributionModels/general/general.C +++ b/src/lagrangian/distributionModels/general/general.C @@ -247,17 +247,8 @@ Foam::dictionary Foam::distributionModels::general::writeDict { // dictionary dict = distributionModel::writeDict(dictName); dictionary dict(dictName); - List data(xy_.size()); - forAll(data, i) - { - data[i] = xy_[i][0]; - } - dict.add("x", data); - forAll(data, i) - { - data[i] = xy_[i][1]; - } - dict.add("y", data); + dict.add("x", x()); + dict.add("y", y()); return dict; } @@ -280,6 +271,34 @@ void Foam::distributionModels::general::readDict(const dictionary& dict) } +Foam::tmp> +Foam::distributionModels::general::x() const +{ + tmp> tx(new Field(xy_.size())); + scalarField& xi = tx.ref(); + forAll(xy_, i) + { + xi[i] = xy_[i][0]; + } + + return tx; +} + + +Foam::tmp> +Foam::distributionModels::general::y() const +{ + tmp> ty(new Field(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 63d5d74d89..db8a18194a 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> x() const; + + //- Probabilities + virtual tmp> y() const; + //- Sample the distributionModel virtual scalar sample() const; diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict index b5bb535898..d9b620638a 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict @@ -62,7 +62,7 @@ functions (d 1e-5) (U 10) ); - distributionBinWidth 1e-5; + setFormat raw; } }