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 { diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a85cff83f8..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,47 +35,93 @@ usage() { cat<&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 [... ] +# +_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() @@ -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-.. 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 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..d98dfb6ddb --- /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_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 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..a0fa15f693 --- /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_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 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` 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()) 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 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/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/particleDistribution/particleDistribution.C b/src/functionObjects/field/particleDistribution/particleDistribution.C index 441afd29e3..71919b0933 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::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(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,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(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; } } - 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 distX(distribution.x()); + const Field distY(distribution.y()); - os << endl; + 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 ea4f205a65..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. + 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> 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> 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>& addr ); 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/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(); 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) 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); - } -} - -// ************************************************************************* // 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 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 diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 0cf368a6ab..87339642bf 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 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(); } +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/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 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; diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict index 6bd47f7e03..d9b620638a 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 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; }