From 50160baa9c425ff37f22facc5f6d87964939fc0e Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Tue, 23 Mar 2010 13:53:40 +0000 Subject: [PATCH] gamg on cyclics working again --- TODO | 5 +- .../foamUpgradeCyclics/Make/options | 1 - etc/apps/ensight/cshrc | 6 +- etc/cshrc | 75 +++--- etc/settings.csh | 99 ++++---- src/OpenFOAM/Make/files | 6 +- .../constraint/cyclic/cyclicPointPatchField.C | 2 +- .../processor/processorPointPatchField.C | 88 +++---- .../processorCyclicPointPatchField.C | 155 +++--------- .../processorCyclicPointPatchField.H | 14 +- .../lduInterface/cyclicLduInterface.C | 8 +- .../lduInterface/cyclicLduInterface.H | 32 +-- .../GAMGAgglomerateLduAddressing.C | 2 + .../cyclicGAMGInterfaceField.H | 4 +- .../processorGAMGInterfaceField.H | 2 +- .../interfaces/GAMGInterface/GAMGInterface.H | 30 ++- .../GAMGInterface/newGAMGInterface.C | 4 + .../cyclicGAMGInterface/cyclicGAMGInterface.C | 225 +++++++++++------- .../cyclicGAMGInterface/cyclicGAMGInterface.H | 39 ++- .../processorGAMGInterface.C | 9 +- .../processorGAMGInterface.H | 10 +- .../constraint/cyclic/cyclicPointPatch.C | 31 +-- .../constraint/cyclic/cyclicPointPatch.H | 8 +- .../processor/processorPointPatch.C | 52 +--- .../processor/processorPointPatch.H | 6 +- .../processorCyclicPointPatch.H | 10 +- .../derived/coupled/coupledFacePointPatch.H | 4 +- .../polyMesh/globalMeshData/globalPoints.C | 1 + .../polyMesh/globalMeshData/globalPoints.H | 4 - .../constraint/cyclic/cyclicPolyPatch.H | 6 +- src/finiteVolume/Make/files | 12 +- .../constraint/cyclic/cyclicFvPatch.H | 24 +- 32 files changed, 468 insertions(+), 506 deletions(-) diff --git a/TODO b/TODO index 09132f1213f..c2fd049c26a 100644 --- a/TODO +++ b/TODO @@ -20,7 +20,10 @@ OK - parallel finite volume with processorCyclic: channelFoam OK - preProcessing/foamUpgradeCyclics -- amg +OK - amg. +Tested on unitTestCases/singleCyclic/ + +- initTransfer in GAMGprocessorInterfaces using nonblocking+tags - test createPatch pointSync - pointFields on cyclics. volPointInterpolation. - jumpCyclics diff --git a/applications/utilities/preProcessing/foamUpgradeCyclics/Make/options b/applications/utilities/preProcessing/foamUpgradeCyclics/Make/options index ac444f6f838..93ae287538b 100644 --- a/applications/utilities/preProcessing/foamUpgradeCyclics/Make/options +++ b/applications/utilities/preProcessing/foamUpgradeCyclics/Make/options @@ -1,5 +1,4 @@ EXE_INC = \ - -DFULLDEBUG -g -O0 \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ diff --git a/etc/apps/ensight/cshrc b/etc/apps/ensight/cshrc index 0126a8ea500..36f4dac0760 100644 --- a/etc/apps/ensight/cshrc +++ b/etc/apps/ensight/cshrc @@ -22,7 +22,7 @@ # along with OpenFOAM; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# Script +# File # ensight/cshrc # # Description @@ -40,11 +40,11 @@ if ( -r $CEI_HOME ) then # special treatment for 32bit OpenFOAM and 64bit Ensight if ($WM_ARCH == linux && `uname -m` == x86_64) then - setenv CEI_ARCH linux_2.6_32 + setenv CEI_ARCH linux_2.6_32 endif # add to path - set path=($CEI_HOME/bin $path) + setenv PATH ${CEI_HOME}/bin:${PATH} setenv ENSIGHT9_INPUT dummy setenv ENSIGHT9_READER $FOAM_LIBBIN diff --git a/etc/cshrc b/etc/cshrc index 9ef6fb2d068..fd3e7d68344 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -22,7 +22,7 @@ # along with OpenFOAM; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# Script +# File # etc/cshrc # # Description @@ -35,13 +35,13 @@ setenv WM_PROJECT OpenFOAM if ( ! $?WM_PROJECT_VERSION ) setenv WM_PROJECT_VERSION 1.6 ################################################################################ -# USER EDITABLE PART +# USER EDITABLE PART. Note changes made here may be lost with the next upgrade # # either setenv FOAM_INST_DIR before sourcing this file or set # foamInstall below to where OpenFOAM is installed # -# Location of FOAM installation -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Location of the OpenFOAM installation +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ set foamInstall = $HOME/$WM_PROJECT # set foamInstall = ~$WM_PROJECT # set foamInstall = /usr/local/$WM_PROJECT @@ -64,12 +64,22 @@ setenv WM_PROJECT_INST_DIR $FOAM_INST_DIR setenv WM_PROJECT_DIR $WM_PROJECT_INST_DIR/$WM_PROJECT-$WM_PROJECT_VERSION setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION - # Location of third-party software # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION +# Source files, possibly with some verbosity +alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Sourcing: \!*"; source \!*' + +# Add in preset user or site preferences: +set foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh` +if ( $status == 0 ) then + _foamSource $foamPrefs +endif +unset foamPrefs + + # Operating System/Platform # ~~~~~~~~~~~~~~~~~~~~~~~~~ # WM_OSTYPE = POSIX | ???? @@ -199,68 +209,63 @@ default: endsw -# Clean standard environment variables (path/PATH, LD_LIBRARY_PATH, MANPATH) +# Clean standard environment variables (PATH, LD_LIBRARY_PATH, MANPATH) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -set cleanProg=$WM_PROJECT_DIR/bin/foamCleanPath +set foamClean=$WM_PROJECT_DIR/bin/foamCleanPath -if (! $?LD_LIBRARY_PATH ) then - setenv LD_LIBRARY_PATH '' -endif -if (! $?MANPATH) then - setenv MANPATH '' -endif +if (! $?LD_LIBRARY_PATH ) setenv LD_LIBRARY_PATH '' +if (! $?MANPATH) setenv MANPATH '' -#- Clean path/PATH -set colonPath=`echo "$path" | sed -e 's/ /:/g'` -set cleanEnv=`$cleanProg "$colonPath" "$foamOldDirs"` +#- Clean PATH (path) +set cleaned=`$foamClean "$PATH" "$foamOldDirs"` if ( $status == 0 ) then - set path=`echo "$cleanEnv" | sed -e 's/:/ /g'` + unset PATH + setenv PATH $cleaned endif #- Clean LD_LIBRARY_PATH -setenv LD_LIBRARY_PATH `$cleanProg "$LD_LIBRARY_PATH" "$foamOldDirs"` +set cleaned=`$foamClean "$LD_LIBRARY_PATH" "$foamOldDirs"` +if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned #- Clean MANPATH -setenv MANPATH `$cleanProg "$MANPATH" "$foamOldDirs"` +set cleaned=`$foamClean "$MANPATH" "$foamOldDirs"` +if ( $status == 0 ) setenv MANPATH $cleaned # Source project setup files # ~~~~~~~~~~~~~~~~~~~~~~~~~~ -alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Executing: \!*"; source \!*' - _foamSource $WM_PROJECT_DIR/etc/settings.csh _foamSource $WM_PROJECT_DIR/etc/aliases.csh # Source user setup files for optional packages # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# _foamSource $WM_PROJECT_DIR/etc/apps/paraview/cshrc _foamSource $WM_PROJECT_DIR/etc/apps/paraview3/cshrc # _foamSource $WM_PROJECT_DIR/etc/apps/ensight/cshrc # Clean environment paths again. Only remove duplicates # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -#- Clean path/PATH -set colonPath=`echo "$path" | sed -e 's/ /:/g'` -set cleanEnv=`$cleanProg "$colonPath"` -if ( $status == 0 ) then - set path=`echo "$cleanEnv" | sed -e 's/:/ /g'` -endif +#- Clean PATH (path) +set cleaned=`$foamClean "$PATH"` +if ( $status == 0 ) setenv PATH $cleaned #- Clean LD_LIBRARY_PATH -setenv LD_LIBRARY_PATH `$cleanProg "$LD_LIBRARY_PATH"` +set cleaned=`$foamClean "$LD_LIBRARY_PATH"` +if ( $status == 0 ) setenv LD_LIBRARY_PATH $cleaned -#- Clean MANPATH -setenv MANPATH `$cleanProg "$MANPATH"`: +#- Clean MANPATH (trailing ':' to find system pages) +set cleaned=`$foamClean "$MANPATH"`: +if ( $status == 0 ) setenv MANPATH "$cleaned" #- Clean LD_PRELOAD if ( $?LD_PRELOAD ) then - setenv LD_PRELOAD `$cleanProg "$LD_PRELOAD"` + set cleaned=`$foamClean "$LD_PRELOAD"` + if ( $status == 0 ) setenv LD_PRELOAD $cleaned endif # cleanup environment: # ~~~~~~~~~~~~~~~~~~~~ -unset cleanEnv cleanProg colonPath foamInstall foamOldDirs +unset cleaned foamClean foamInstall foamOldDirs unalias _foamSource -# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------- end-of-file diff --git a/etc/settings.csh b/etc/settings.csh index 78fd05490f2..5d2950662c7 100644 --- a/etc/settings.csh +++ b/etc/settings.csh @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -22,7 +22,7 @@ # along with OpenFOAM; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# Script +# File # etc/settings.csh # # Description @@ -32,11 +32,11 @@ #------------------------------------------------------------------------------ # prefix to PATH -alias _foamAddPath 'set path=(\!* $path)' +alias _foamAddPath 'setenv PATH \!*\:${PATH}' # prefix to LD_LIBRARY_PATH alias _foamAddLib 'setenv LD_LIBRARY_PATH \!*\:${LD_LIBRARY_PATH}' # prefix to MANPATH -alias _foamAddManPath 'setenv MANPATH \!*\:${MANPATH}' +alias _foamAddMan 'setenv MANPATH \!*\:${MANPATH}' # location of the jobControl directory setenv FOAM_JOB_DIR $WM_PROJECT_INST_DIR/jobControl @@ -68,41 +68,35 @@ setenv FOAM_SOLVERS $FOAM_APP/solvers setenv FOAM_RUN $WM_PROJECT_USER_DIR/run # add OpenFOAM scripts and wmake to the path -set path=($WM_DIR $WM_PROJECT_DIR/bin $path) +setenv PATH ${WM_DIR}:${WM_PROJECT_DIR}/bin:${PATH} -_foamAddPath $FOAM_APPBIN -_foamAddPath $FOAM_SITE_APPBIN -_foamAddPath $FOAM_USER_APPBIN -_foamAddLib $FOAM_LIBBIN -_foamAddLib $FOAM_SITE_LIBBIN -_foamAddLib $FOAM_USER_LIBBIN +_foamAddPath ${FOAM_USER_APPBIN}:${FOAM_SITE_APPBIN}:${FOAM_APPBIN} + # Make sure to pick up dummy versions of external libraries last +_foamAddLib ${FOAM_USER_LIBBIN}:${FOAM_SITE_LIBBIN}:${FOAM_LIBBIN}:${FOAM_LIBBIN}/dummy # Select compiler installation # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# compilerInstall = OpenFOAM | System -set compilerInstall=OpenFOAM +# compilerInstall = OpenFOAM | system +if ( ! $?compilerInstall ) set compilerInstall=OpenFOAM switch ("$compilerInstall") case OpenFOAM: switch ("$WM_COMPILER") case Gcc: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.4.3/platforms/$WM_ARCH$WM_COMPILER_ARCH - _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib - _foamAddLib $WM_THIRD_PARTY_DIR/gmp-5.0.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib + setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gcc-4.4.3 + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/mpfr-2.4.2/lib + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gmp-5.0.1/lib breaksw case Gcc442: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH - _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib - _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib + setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gcc-4.4.2 + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/mpfr-2.4.1/lib + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gmp-4.2.4/lib breaksw case Gcc43: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.3.3/platforms/$WM_ARCH$WM_COMPILER_ARCH - _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib - _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib - breaksw - case Gcc42: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH + setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gcc-4.3.3 + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/mpfr-2.4.1/lib + _foamAddLib $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/gmp-4.2.4/lib breaksw endsw @@ -112,14 +106,13 @@ case OpenFOAM: echo "Warning in $WM_PROJECT_DIR/etc/settings.csh:" echo " Cannot find $WM_COMPILER_DIR installation." echo " Please install this compiler version or if you wish to use the system compiler," - echo " change the 'compilerInstall' setting to 'System' in this file" + echo " change the 'compilerInstall' setting to 'system' in this file" echo endif _foamAddPath ${WM_COMPILER_DIR}/bin - _foamAddLib ${WM_COMPILER_DIR}/lib${WM_COMPILER_LIB_ARCH} - _foamAddLib ${WM_COMPILER_DIR}/lib - _foamAddManPath ${WM_COMPILER_DIR}/man + _foamAddLib ${WM_COMPILER_DIR}/lib${WM_COMPILER_LIB_ARCH}:${WM_COMPILER_DIR}/lib + _foamAddMan ${WM_COMPILER_DIR}/man breaksw endsw @@ -128,33 +121,30 @@ endsw # Communications library # ~~~~~~~~~~~~~~~~~~~~~~ -unset MPI_ARCH_PATH +unsetenv MPI_ARCH_PATH MPI_HOME switch ("$WM_MPLIB") case OPENMPI: set mpi_version=openmpi-1.4.1 - setenv MPI_HOME $WM_THIRD_PARTY_DIR/$mpi_version - setenv MPI_ARCH_PATH $MPI_HOME/platforms/$WM_OPTIONS + setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mpi_version # Tell OpenMPI where to find its install directory setenv OPAL_PREFIX $MPI_ARCH_PATH _foamAddPath $MPI_ARCH_PATH/bin _foamAddLib $MPI_ARCH_PATH/lib - _foamAddManPath $MPI_ARCH_PATH/man + _foamAddMan $MPI_ARCH_PATH/man setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/$mpi_version unset mpi_version breaksw case SYSTEMOPENMPI: - # This uses the installed openmpi. It needs mpicc installed! - set mpi_version=openmpi-system # Set compilation flags here instead of in wmake/rules/../mplibSYSTEMOPENMPI - setenv PINC `mpicc --showme:compile` + setenv PINC `mpicc --showme:compile` setenv PLIBS `mpicc --showme:link` set libDir=`echo "$PLIBS" | sed -e 's/.*-L\([^ ]*\).*/\1/'` @@ -165,7 +155,7 @@ case SYSTEMOPENMPI: echo " libmpi dir : $libDir" endif - _foamAddLib $libDir + _foamAddLib $libDir setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/$mpi_version unset mpi_version libDir @@ -174,11 +164,11 @@ case SYSTEMOPENMPI: case MPICH: set mpi_version=mpich2-1.1.1p1 setenv MPI_HOME $WM_THIRD_PARTY_DIR/$mpi_version - setenv MPI_ARCH_PATH $MPI_HOME/platforms/$WM_OPTIONS + setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mpi_version _foamAddPath $MPI_ARCH_PATH/bin _foamAddLib $MPI_ARCH_PATH/lib - _foamAddManPath $MPI_ARCH_PATH/share/man + _foamAddMan $MPI_ARCH_PATH/share/man setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/$mpi_version unset mpi_version @@ -189,9 +179,9 @@ case MPICH-GM: setenv MPICH_PATH $MPI_ARCH_PATH setenv GM_LIB_PATH /opt/gm/lib64 - _foamAddPath $MPI_ARCH_PATH/bin - _foamAddLib $MPI_ARCH_PATH/lib - _foamAddLib $GM_LIB_PATH + _foamAddPath $MPI_ARCH_PATH/bin + _foamAddLib $MPI_ARCH_PATH/lib + _foamAddLib $GM_LIB_PATH setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/mpich-gm breaksw @@ -233,18 +223,18 @@ case MPI: case FJMPI: setenv MPI_ARCH_PATH /opt/FJSVmpi2 setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/mpi - _foamAddPath $MPI_ARCH_PATH/bin - _foamAddLib $MPI_ARCH_PATH/lib/sparcv9 - _foamAddLib /opt/FSUNf90/lib/sparcv9 - _foamAddLib /opt/FJSVpnidt/lib + _foamAddPath $MPI_ARCH_PATH/bin + _foamAddLib $MPI_ARCH_PATH/lib/sparcv9 + _foamAddLib /opt/FSUNf90/lib/sparcv9 + _foamAddLib /opt/FJSVpnidt/lib breaksw case QSMPI: setenv MPI_ARCH_PATH /usr/lib/mpi setenv FOAM_MPI_LIBBIN FOAM_LIBBIN/qsmpi - _foamAddPath $MPI_ARCH_PATH/bin - _foamAddLib $MPI_ARCH_PATH/lib + _foamAddPath $MPI_ARCH_PATH/bin + _foamAddLib $MPI_ARCH_PATH/lib breaksw @@ -258,7 +248,7 @@ _foamAddLib $FOAM_MPI_LIBBIN # Set the minimum MPI buffer size (used by all platforms except SGI MPI) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -set minBufferSize=20000000 +if ( ! $?minBufferSize ) set minBufferSize=20000000 if ( $?MPI_BUFFER_SIZE ) then if ( $MPI_BUFFER_SIZE < $minBufferSize ) then @@ -276,8 +266,8 @@ if ( $?CGAL_LIB_DIR ) then endif -# Switch on the hoard memory allocator if available -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Enable the hoard memory allocator if available +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #if ( -f $FOAM_LIBBIN/libhoard.so ) then # setenv LD_PRELOAD $FOAM_LIBBIN/libhoard.so:${LD_PRELOAD} #endif @@ -285,8 +275,7 @@ endif # cleanup environment: # ~~~~~~~~~~~~~~~~~~~~ -unalias _foamAddPath -unalias _foamAddLib -unset minBufferSize +unalias _foamAddPath _foamAddLib _foamAddMan +unset compilerInstall minBufferSize -# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------- end-of-file diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 7aa89c629fb..26dd4cd6774 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -252,19 +252,18 @@ $(lduInterfaceFields)/lduInterfaceField/lduInterfaceField.C $(lduInterfaceFields)/processorLduInterfaceField/processorLduInterfaceField.C $(lduInterfaceFields)/cyclicLduInterfaceField/cyclicLduInterfaceField.C -/* GAMG = $(lduMatrix)/solvers/GAMG +/* +*/ $(GAMG)/GAMGSolver.C $(GAMG)/GAMGSolverAgglomerateMatrix.C $(GAMG)/GAMGSolverScalingFactor.C $(GAMG)/GAMGSolverSolve.C - GAMGInterfaces = $(GAMG)/interfaces $(GAMGInterfaces)/GAMGInterface/GAMGInterface.C $(GAMGInterfaces)/GAMGInterface/newGAMGInterface.C $(GAMGInterfaces)/processorGAMGInterface/processorGAMGInterface.C $(GAMGInterfaces)/cyclicGAMGInterface/cyclicGAMGInterface.C - GAMGInterfaceFields = $(GAMG)/interfaceFields $(GAMGInterfaceFields)/GAMGInterfaceField/GAMGInterfaceField.C $(GAMGInterfaceFields)/GAMGInterfaceField/newGAMGInterfaceField.C @@ -284,7 +283,6 @@ $(pairGAMGAgglomeration)/pairGAMGAgglomerationCombineLevels.C algebraicPairGAMGAgglomeration = $(GAMGAgglomerations)/algebraicPairGAMGAgglomeration $(algebraicPairGAMGAgglomeration)/algebraicPairGAMGAgglomeration.C -*/ meshes/lduMesh/lduMesh.C diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.C index 0bacb377984..e0724eceefe 100644 --- a/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.C +++ b/src/OpenFOAM/fields/pointPatchFields/constraint/cyclic/cyclicPointPatchField.C @@ -155,7 +155,7 @@ void cyclicPointPatchField<Type>::swapAddSeparated } } - addToInternalField(pField, pf, cyclicPatch_.separatedPoints()); + addToInternalField(pField, pf); } diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.C index f6d8444e56a..6030e48040e 100644 --- a/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.C +++ b/src/OpenFOAM/fields/pointPatchFields/constraint/processor/processorPointPatchField.C @@ -103,27 +103,27 @@ void processorPointPatchField<Type>::initSwapAddSeparated ) const { - if (Pstream::parRun()) - { - // Get internal field into correct order for opposite side - Field<Type> pf - ( - this->patchInternalField - ( - pField, - procPatch_.reverseMeshPoints() - ) - ); - - OPstream::write - ( - commsType, - procPatch_.neighbProcNo(), - reinterpret_cast<const char*>(pf.begin()), - pf.byteSize(), - procPatch_.tag() - ); - } +// if (Pstream::parRun()) +// { +// // Get internal field into correct order for opposite side +// Field<Type> pf +// ( +// this->patchInternalField +// ( +// pField, +// procPatch_.reverseMeshPoints() +// ) +// ); +// +// OPstream::write +// ( +// commsType, +// procPatch_.neighbProcNo(), +// reinterpret_cast<const char*>(pf.begin()), +// pf.byteSize(), +// procPatch_.tag() +// ); +// } } @@ -134,29 +134,29 @@ void processorPointPatchField<Type>::swapAddSeparated Field<Type>& pField ) const { - if (Pstream::parRun()) - { - Field<Type> pnf(this->size()); - - IPstream::read - ( - commsType, - procPatch_.neighbProcNo(), - reinterpret_cast<char*>(pnf.begin()), - pnf.byteSize(), - procPatch_.tag() - ); - - if (doTransform()) - { - const processorPolyPatch& ppp = procPatch_.procPolyPatch(); - const tensor& forwardT = ppp.forwardT(); - - transform(pnf, forwardT, pnf); - } - - addToInternalField(pField, pnf, procPatch_.separatedPoints()); - } +// if (Pstream::parRun()) +// { +// Field<Type> pnf(this->size()); +// +// IPstream::read +// ( +// commsType, +// procPatch_.neighbProcNo(), +// reinterpret_cast<char*>(pnf.begin()), +// pnf.byteSize(), +// procPatch_.tag() +// ); +// +// if (doTransform()) +// { +// const processorPolyPatch& ppp = procPatch_.procPolyPatch(); +// const tensor& forwardT = ppp.forwardT(); +// +// transform(pnf, forwardT, pnf); +// } +// +// addToInternalField(pField, pnf, procPatch_.separatedPoints()); +// } } diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.C index 3034a595f1f..4a6e93db2bb 100644 --- a/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.C +++ b/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.C @@ -96,17 +96,27 @@ processorCyclicPointPatchField<Type>::~processorCyclicPointPatchField() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -void processorCyclicPointPatchField<Type>::initSwapAdd(Field<Type>& pField) -const +void processorCyclicPointPatchField<Type>::initSwapAddSeparated +( + const Pstream::commsTypes commsType, + Field<Type>& pField +) const { if (Pstream::parRun()) { - // Get internal field into my point order - Field<Type> pf(this->patchInternalField(pField)); + // Get internal field into correct order for opposite side + Field<Type> pf + ( + this->patchInternalField + ( + pField, + procPatch_.reverseMeshPoints() + ) + ); OPstream::write ( - Pstream::blocking, + commsType, procPatch_.neighbProcNo(), reinterpret_cast<const char*>(pf.begin()), pf.byteSize(), @@ -117,7 +127,11 @@ const template<class Type> -void processorCyclicPointPatchField<Type>::swapAdd(Field<Type>& pField) const +void processorCyclicPointPatchField<Type>::swapAddSeparated +( + const Pstream::commsTypes commsType, + Field<Type>& pField +) const { if (Pstream::parRun()) { @@ -125,7 +139,7 @@ void processorCyclicPointPatchField<Type>::swapAdd(Field<Type>& pField) const IPstream::read ( - Pstream::blocking, + commsType, procPatch_.neighbProcNo(), reinterpret_cast<char*>(pnf.begin()), pnf.byteSize(), @@ -134,129 +148,14 @@ void processorCyclicPointPatchField<Type>::swapAdd(Field<Type>& pField) const if (doTransform()) { - procPatch_.procPolyPatch().transform(pnf); - - //const processorPolyPatch& ppp = procPatch_.procPolyPatch(); - //const labelList& nonGlobalPatchPoints = - // procPatch_.nonGlobalPatchPoints(); - // - //// Mark patch that transformed point: - //// -3 : global patch point so handled in different patch - //// -2 : nonGlobalPatchPoints, initial value - //// -1 : originating from internal face, no transform necessary - //// >=0 : originating from coupled patch - //labelList hasTransformed(ppp.nPoints(), -3); - //forAll(nonGlobalPatchPoints, i) - //{ - // hasTransformed[nonGlobalPatchPoints[i]] = -2; - //} - // - //forAll(ppp.patchIDs(), subI) - //{ - // label patchI = ppp.patchIDs()[subI]; - // - // if (patchI == -1) - // { - // for - // ( - // label faceI = ppp.starts()[subI]; - // faceI < ppp.starts()[subI+1]; - // faceI++ - // ) - // { - // const face& f = ppp.localFaces()[faceI]; - // - // forAll(f, fp) - // { - // label pointI = f[fp]; - // - // if (hasTransformed[pointI] == -3) - // { - // // special point, handled elsewhere - // } - // else if (hasTransformed[pointI] == -2) - // { - // // first visit. Just mark. - // hasTransformed[pointI] = patchI; - // } - // else if (hasTransformed[pointI] == patchI) - // { - // // already done - // } - // else - // { - // FatalErrorIn - // ( - // "processorCyclicPointPatchField<Type>::" - // "swapAdd(Field<Type>& pField) const" - // ) << "Point " << pointI - // << " on patch " << ppp.name() - // << " already transformed by patch " - // << hasTransformed[pointI] - // << abort(FatalError); - // } - // } - // } - // } - // else if - // ( - // !refCast<const coupledPolyPatch> - // ( - // ppp.boundaryMesh()[patchI] - // ).parallel() - // ) - // { - // const tensor& T = refCast<const coupledPolyPatch> - // ( - // ppp.boundaryMesh()[patchI] - // ).forwardT(); - // - // for - // ( - // label faceI = ppp.starts()[subI]; - // faceI < ppp.starts()[subI+1]; - // faceI++ - // ) - // { - // const face& f = ppp.localFaces()[faceI]; - // - // forAll(f, fp) - // { - // label pointI = f[fp]; - // - // if (hasTransformed[pointI] == -3) - // { - // // special point, handled elsewhere - // } - // else if (hasTransformed[pointI] == -2) - // { - // pnf[pointI] = transform(T, pnf[pointI]); - // - // hasTransformed[pointI] = patchI; - // } - // else if (hasTransformed[pointI] == patchI) - // { - // // already done - // } - // else - // { - // FatalErrorIn - // ( - // "processorCyclicPointPatchField<Type>::" - // "swapAdd(Field<Type>& pField) const" - // ) << "Point " << pointI - // << " on patch " << ppp.name() - // << " subPatch " << patchI - // << " already transformed by patch " - // << hasTransformed[pointI] - // << abort(FatalError); - // } - // } - // } - // } - //} + const processorCyclicPolyPatch& ppp = + procPatch_.procCyclicPolyPatch(); + const tensor& forwardT = ppp.forwardT(); + + transform(pnf, forwardT, pnf); } + // All points are separated addToInternalField(pField, pnf); } } diff --git a/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.H index d0ece8d33ac..6b5f9b3377f 100644 --- a/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.H +++ b/src/OpenFOAM/fields/pointPatchFields/constraint/processorCyclic/processorCyclicPointPatchField.H @@ -169,11 +169,19 @@ public: ) {} - //- Initialise swap of patch point values - virtual void initSwapAdd(Field<Type>&) const; + //- Initialise swap of non-collocated patch point values + virtual void initSwapAddSeparated + ( + const Pstream::commsTypes commsType, + Field<Type>& + ) const; //- Complete swap of patch point values and add to local values - virtual void swapAdd(Field<Type>&) const; + virtual void swapAddSeparated + ( + const Pstream::commsTypes commsType, + Field<Type>& + ) const; }; diff --git a/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.C b/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.C index 11716ab844b..4d601781106 100644 --- a/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.C +++ b/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.C @@ -37,9 +37,11 @@ namespace Foam // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cyclicLduInterface::cyclicLduInterface(const label neighbPatchID) -: - neighbPatchID_(neighbPatchID) +//Foam::cyclicLduInterface::cyclicLduInterface(const label neighbPatchID) +//: +// neighbPatchID_(neighbPatchID) +//{} +Foam::cyclicLduInterface::cyclicLduInterface() {} diff --git a/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.H b/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.H index 21b70b59bed..26e104e3a08 100644 --- a/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.H +++ b/src/OpenFOAM/matrices/lduMatrix/lduAddressing/lduInterface/cyclicLduInterface.H @@ -52,8 +52,8 @@ class cyclicLduInterface { // Private data - //- Coupled patch - const label neighbPatchID_; +// //- Coupled patch +// const label neighbPatchID_; // const cyclicLduInterface* neighbPatch_; @@ -64,8 +64,11 @@ public: // Constructors - //- Construct from components - cyclicLduInterface(const label neighbPatchID); +// //- Construct from components +// cyclicLduInterface(const label neighbPatchID); + + //- Construct null + cyclicLduInterface(); // Destructor @@ -76,22 +79,13 @@ public: // Access + //- Return neighbour + virtual label neighbPatchID() const = 0; + + virtual bool owner() const = 0; + //- Return processor number - label neighbPatchID() const - { - return neighbPatchID_; - } - -// //- Return processor number -// const cyclicLduInterface& neighbPatch() const -// { -// if (!neighbPatch_) -// { -// FatalErrorIn("cyclicLduInterface::neighbPatch() const") -// << "Not owner." << abort(FatalError); -// } -// return neighbPatchID_; -// } + virtual const cyclicLduInterface& neighbPatch() const = 0; //- Return face transformation tensor virtual const tensor& forwardT() const = 0; diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomerateLduAddressing.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomerateLduAddressing.C index 8530c936ff9..c132994ec71 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomerateLduAddressing.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomerateLduAddressing.C @@ -246,6 +246,8 @@ void Foam::GAMGAgglomeration::agglomerateLduAddressing inti, GAMGInterface::New ( + inti, + coarseInterfaces, fineInterfaces[inti], fineInterfaces[inti].interfaceInternalField(restrictMap), fineInterfaces[inti].internalFieldTransfer diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/cyclicGAMGInterfaceField/cyclicGAMGInterfaceField.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/cyclicGAMGInterfaceField/cyclicGAMGInterfaceField.H index f316be43b19..6cd8dd0dda6 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/cyclicGAMGInterfaceField/cyclicGAMGInterfaceField.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/cyclicGAMGInterfaceField/cyclicGAMGInterfaceField.H @@ -130,13 +130,13 @@ public: } //- Return face transformation tensor - virtual const tensorField& forwardT() const + virtual const tensor& forwardT() const { return cyclicInterface_.forwardT(); } //- Return neighbour-cell transformation tensor - virtual const tensorField& reverseT() const + virtual const tensor& reverseT() const { return cyclicInterface_.reverseT(); } diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/processorGAMGInterfaceField/processorGAMGInterfaceField.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/processorGAMGInterfaceField/processorGAMGInterfaceField.H index a39de1c764b..6027f5f36e8 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/processorGAMGInterfaceField/processorGAMGInterfaceField.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaceFields/processorGAMGInterfaceField/processorGAMGInterfaceField.H @@ -153,7 +153,7 @@ public: } //- Return face transformation tensor - virtual const tensorField& forwardT() const + virtual const tensor& forwardT() const { return procInterface_.forwardT(); } diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/GAMGInterface.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/GAMGInterface.H index 0e701d157d7..3f4cafffb36 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/GAMGInterface.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/GAMGInterface.H @@ -37,8 +37,9 @@ SourceFiles #ifndef GAMGInterface_H #define GAMGInterface_H -#include "lduInterface.H" +//#include "lduInterface.H" #include "autoPtr.H" +#include "lduInterfacePtrsList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,6 +59,12 @@ protected: // Protected data + //- My index in coarseInterfaces + const label index_; + + //- All interfaces + const lduInterfacePtrsList& coarseInterfaces_; + //- Face-cell addressing labelField faceCells_; @@ -90,11 +97,15 @@ public: GAMGInterface, lduInterface, ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing ), ( + index, + coarseInterfaces, fineInterface, localRestrictAddressing, neighbourRestrictAddressing @@ -108,6 +119,8 @@ public: // the fine interface static autoPtr<GAMGInterface> New ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing @@ -120,10 +133,15 @@ public: // local and neighbour restrict addressing GAMGInterface ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface&, const labelField&, const labelField& ) + : + index_(index), + coarseInterfaces_(coarseInterfaces) {} @@ -137,6 +155,16 @@ public: return faceCells_.size(); } + virtual label index() const + { + return index_; + } + + virtual const lduInterfacePtrsList& coarseInterfaces() const + { + return coarseInterfaces_; + } + //- Return faceCell addressing virtual const unallocLabelList& faceCells() const { diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/newGAMGInterface.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/newGAMGInterface.C index 7cb1ecf147b..1c2cc33de6b 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/newGAMGInterface.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/GAMGInterface/newGAMGInterface.C @@ -32,6 +32,8 @@ License Foam::autoPtr<Foam::GAMGInterface> Foam::GAMGInterface::New ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing @@ -60,6 +62,8 @@ Foam::autoPtr<Foam::GAMGInterface> Foam::GAMGInterface::New ( cstrIter() ( + index, + coarseInterfaces, fineInterface, localRestrictAddressing, neighbourRestrictAddressing diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.C index a7ef01306c7..8b2b66ec046 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.C @@ -46,23 +46,37 @@ namespace Foam Foam::cyclicGAMGInterface::cyclicGAMGInterface ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing ) : - cyclicLduInterface - ( - refCast<const cyclicLduInterface>(fineInterface).neighbPatchID() - ), GAMGInterface ( + index, + coarseInterfaces, fineInterface, localRestrictAddressing, neighbourRestrictAddressing ), fineCyclicInterface_(refCast<const cyclicLduInterface>(fineInterface)) { +// //if (debug) +// { +// Pout<< "On fineInterface " << index << " with faceCells:" +// << fineInterface.faceCells() << endl; +// forAll(localRestrictAddressing, ffi) +// { +// Pout<< " local face " << ffi +// << " is on agglom cell " << localRestrictAddressing[ffi] +// << " nbr face on agglom cell " +// << neighbourRestrictAddressing[ffi] +// << endl; +// } +// } + // Make a lookup table of entries for owner/neighbour Map<SLList<label> > neighboursTable ( @@ -77,20 +91,32 @@ Foam::cyclicGAMGInterface::cyclicGAMGInterface label nCoarseFaces = 0; - label sizeBy2 = localRestrictAddressing.size()/2; - - for (label ffi=0; ffi<sizeBy2; ffi++) + forAll (localRestrictAddressing, ffi) { - label curMaster = localRestrictAddressing[ffi]; - label curSlave = localRestrictAddressing[ffi + sizeBy2]; + label curMaster = -1; + label curSlave = -1; + + // Do switching on master/slave indexes based on the owner/neighbour of + // the processor index such that both sides get the same answer. + if (owner()) + { + // Master side + curMaster = localRestrictAddressing[ffi]; + curSlave = neighbourRestrictAddressing[ffi]; + } + else + { + // Slave side + curMaster = neighbourRestrictAddressing[ffi]; + curSlave = localRestrictAddressing[ffi]; + } // Look for the master cell. If it has already got a face, - // add the coefficient to the face. If not, create a new - // face. + // add the coefficient to the face. If not, create a new face. if (neighboursTable.found(curMaster)) { - // Check all current neighbours to see if the current - // slave already exists. If so, add the coefficient. + // Check all current neighbours to see if the current slave already + // exists and if so, add the fine face to the agglomeration. SLList<label>& curNbrs = neighboursTable.find(curMaster)(); @@ -141,81 +167,110 @@ Foam::cyclicGAMGInterface::cyclicGAMGInterface } // end for all fine faces - faceCells_.setSize(2*nCoarseFaces, -1); - faceRestrictAddressing_.setSize(localRestrictAddressing.size(), -1); + + //faceCells_.setSize(nCoarseFaces, -1); + faceCells_.setSize(2*nCoarseFaces); + faceRestrictAddressing_.setSize(localRestrictAddressing.size()); labelList contents = neighboursTable.toc(); // Reset face counter for re-use nCoarseFaces = 0; - // On master side, the owner addressing is stored in table of contents - forAll (contents, masterI) +// if (owner()) { - SLList<label>& curNbrs = neighboursTable.find(contents[masterI])(); + // On master side, the owner addressing is stored in table of contents + forAll (contents, masterI) + { + SLList<label>& curNbrs = neighboursTable.find(contents[masterI])(); - SLList<SLList<label> >& curFaceFaces = - faceFaceTable.find(contents[masterI])(); + SLList<SLList<label> >& curFaceFaces = + faceFaceTable.find(contents[masterI])(); - SLList<label>::iterator nbrsIter = curNbrs.begin(); - SLList<SLList<label> >::iterator faceFacesIter = curFaceFaces.begin(); + SLList<label>::iterator nbrsIter = curNbrs.begin(); - for - ( - ; - nbrsIter != curNbrs.end(), faceFacesIter != curFaceFaces.end(); - ++nbrsIter, ++faceFacesIter - ) - { - faceCells_[nCoarseFaces] = contents[masterI]; + SLList<SLList<label> >::iterator faceFacesIter = + curFaceFaces.begin(); for ( - SLList<label>::iterator facesIter = faceFacesIter().begin(); - facesIter != faceFacesIter().end(); - ++facesIter + ; + nbrsIter != curNbrs.end(), faceFacesIter != curFaceFaces.end(); + ++nbrsIter, ++faceFacesIter ) { - faceRestrictAddressing_[facesIter()] = nCoarseFaces; - } + faceCells_[nCoarseFaces] = contents[masterI]; + + for + ( + SLList<label>::iterator facesIter = faceFacesIter().begin(); + facesIter != faceFacesIter().end(); + ++facesIter + ) + { + faceRestrictAddressing_[facesIter()] = nCoarseFaces; + } - nCoarseFaces++; + nCoarseFaces++; + } } } - - // On slave side, the owner addressing is stored in linked lists - forAll (contents, masterI) +// else { - SLList<label>& curNbrs = neighboursTable.find(contents[masterI])(); + // On slave side, the owner addressing is stored in linked lists + forAll (contents, masterI) + { + SLList<label>& curNbrs = neighboursTable.find(contents[masterI])(); - SLList<SLList<label> >& curFaceFaces = - faceFaceTable.find(contents[masterI])(); + SLList<SLList<label> >& curFaceFaces = + faceFaceTable.find(contents[masterI])(); - SLList<label>::iterator nbrsIter = curNbrs.begin(); - SLList<SLList<label> >::iterator faceFacesIter = curFaceFaces.begin(); + SLList<label>::iterator nbrsIter = curNbrs.begin(); - for - ( - ; - nbrsIter != curNbrs.end(), faceFacesIter != curFaceFaces.end(); - ++nbrsIter, ++faceFacesIter - ) - { - faceCells_[nCoarseFaces] = nbrsIter(); + SLList<SLList<label> >::iterator faceFacesIter = + curFaceFaces.begin(); for ( - SLList<label>::iterator facesIter = faceFacesIter().begin(); - facesIter != faceFacesIter().end(); - ++facesIter + ; + nbrsIter != curNbrs.end(), faceFacesIter != curFaceFaces.end(); + ++nbrsIter, ++faceFacesIter ) { - faceRestrictAddressing_[facesIter() + sizeBy2] = nCoarseFaces; - } + faceCells_[nCoarseFaces] = nbrsIter(); + + for + ( + SLList<label>::iterator facesIter = faceFacesIter().begin(); + facesIter != faceFacesIter().end(); + ++facesIter + ) + { + faceRestrictAddressing_[facesIter()] = nCoarseFaces; + } - nCoarseFaces++; + nCoarseFaces++; + } } } + + +// //if (debug) +// { +// Pout<< "On fineInterface " << index << " with faceCells:" +// << fineInterface.faceCells() << endl; +// forAll(faceRestrictAddressing_, ffi) +// { +// Pout<< " local face " << ffi +// << " gets agglomerated into coarse local face " +// << faceRestrictAddressing_[ffi] +// << " with coarse cells:" << endl; +// forAll(faceCells_, i) +// { +// Pout<< " " << faceCells_[i] << endl; +// } +// } +// } } @@ -227,28 +282,28 @@ Foam::cyclicGAMGInterface::~cyclicGAMGInterface() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::tmp<Foam::labelField> Foam::cyclicGAMGInterface::transfer -( - const Pstream::commsTypes, - const unallocLabelList& interfaceData -) const -{ - notImplemented("cyclicGAMGInterface::transfer(..)"); - -//XXXXX to be done - tmp<labelField> tpnf(new labelField(size())); - labelField& pnf = tpnf(); - - label sizeby2 = size()/2; - - for (label facei=0; facei<sizeby2; facei++) - { - pnf[facei] = interfaceData[facei + sizeby2]; - pnf[facei + sizeby2] = interfaceData[facei]; - } - - return tpnf; -} +//Foam::tmp<Foam::labelField> Foam::cyclicGAMGInterface::transfer +//( +// const Pstream::commsTypes, +// const unallocLabelList& interfaceData +//) const +//{ +// notImplemented("cyclicGAMGInterface::transfer(..)"); +// +////XXXXX to be done +// tmp<labelField> tpnf(new labelField(size())); +// labelField& pnf = tpnf(); +// +// label sizeby2 = size()/2; +// +// for (label facei=0; facei<sizeby2; facei++) +// { +// pnf[facei] = interfaceData[facei + sizeby2]; +// pnf[facei + sizeby2] = interfaceData[facei]; +// } +// +// return tpnf; +//} Foam::tmp<Foam::labelField> Foam::cyclicGAMGInterface::internalFieldTransfer @@ -257,16 +312,18 @@ Foam::tmp<Foam::labelField> Foam::cyclicGAMGInterface::internalFieldTransfer const unallocLabelList& iF ) const { - notImplemented("cyclicGAMGInterface::internalFieldTransfer(..)"); + const cyclicGAMGInterface& nbr = dynamic_cast<const cyclicGAMGInterface&> + ( + neighbPatch() + ); + const unallocLabelList& nbrFaceCells = nbr.faceCells(); -//XXXXX to be done tmp<labelField> tpnf(new labelField(size())); labelField& pnf = tpnf(); forAll(pnf, facei) { - pnf[facei] = iF[faceCells_[facei + sizeby2]]; - pnf[facei + sizeby2] = iF[faceCells_[facei]]; + pnf[facei] = iF[nbrFaceCells[facei]]; } return tpnf; diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.H index 3bdeab73382..3b12da74f96 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/cyclicGAMGInterface/cyclicGAMGInterface.H @@ -81,6 +81,8 @@ public: // local and neighbour restrict addressing cyclicGAMGInterface ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& restrictAddressing, const labelField& neighbourRestrictAddressing @@ -96,12 +98,12 @@ public: // Interface transfer functions - //- Transfer and return neighbour field - virtual tmp<labelField> transfer - ( - const Pstream::commsTypes commsType, - const unallocLabelList& interfaceData - ) const; +// //- Transfer and return neighbour field +// virtual tmp<labelField> transfer +// ( +// const Pstream::commsTypes commsType, +// const unallocLabelList& interfaceData +// ) const; //- Transfer and return internal field adjacent to the interface virtual tmp<labelField> internalFieldTransfer @@ -113,6 +115,31 @@ public: //- Cyclic interface functions +// //- Return my index +// virtual label patchID() const +// { +// return fineCyclicInterface_.patchID(); +// } + + //- Return neigbour processor number + virtual label neighbPatchID() const + { + return fineCyclicInterface_.neighbPatchID(); + } + + virtual bool owner() const + { + return fineCyclicInterface_.owner(); + } + + virtual const cyclicLduInterface& neighbPatch() const + { + return dynamic_cast<const cyclicLduInterface&> + ( + coarseInterfaces_[neighbPatchID()] + ); + } + //- Return face transformation tensor virtual const tensor& forwardT() const { diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.C index cd0857925b7..e822992798c 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.C @@ -26,6 +26,7 @@ License #include "processorGAMGInterface.H" #include "addToRunTimeSelectionTable.H" +#include "Map.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -45,6 +46,8 @@ namespace Foam Foam::processorGAMGInterface::processorGAMGInterface ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing @@ -52,6 +55,8 @@ Foam::processorGAMGInterface::processorGAMGInterface : GAMGInterface ( + index, + coarseInterfaces, fineInterface, localRestrictAddressing, neighbourRestrictAddressing @@ -59,13 +64,13 @@ Foam::processorGAMGInterface::processorGAMGInterface fineProcInterface_(refCast<const processorLduInterface>(fineInterface)) { // Make a lookup table of entries for owner/neighbour - HashTable<SLList<label>, label, Hash<label> > neighboursTable + Map<SLList<label> > neighboursTable ( localRestrictAddressing.size() ); // Table of face-sets to be agglomerated - HashTable<SLList<SLList<label> >, label, Hash<label> > faceFaceTable + Map<SLList<SLList<label> > > faceFaceTable ( localRestrictAddressing.size() ); diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.H index fd885ed9bd2..7f97c51e17e 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/interfaces/processorGAMGInterface/processorGAMGInterface.H @@ -81,6 +81,8 @@ public: // local and neighbour restrict addressing processorGAMGInterface ( + const label index, + const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& restrictAddressing, const labelField& neighbourRestrictAddressing @@ -140,10 +142,16 @@ public: } //- Return face transformation tensor - virtual const tensorField& forwardT() const + virtual const tensor& forwardT() const { return fineProcInterface_.forwardT(); } + + //- Return message tag used for sending + virtual int tag() const + { + return fineProcInterface_.tag(); + } }; diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C index e25244da12c..ac4b79159fc 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C @@ -54,28 +54,7 @@ void Foam::cyclicPointPatch::initGeometry(PstreamBuffers&) void Foam::cyclicPointPatch::calcGeometry(PstreamBuffers&) -{ - const edgeList& cp = cyclicPolyPatch_.coupledPoints(); - const labelList& mp = cyclicPolyPatch_.meshPoints(); - - DynamicList<label> separated; - forAll(cp, i) - { - const edge& coupledSet = cp[i]; - - // Assume all points are separated. - separated.append(coupledSet[0]); - separated.append(coupledSet[1]); - } - separatedPoints_.transfer(separated); - - if (debug) - { - Pout<< "cyclic:" << cyclicPolyPatch_.name() - << " separated:" << separatedPoints_.size() - << " out of points:" << mp.size() << endl; - } -} +{} void cyclicPointPatch::initMovePoints(PstreamBuffers&, const pointField&) @@ -127,10 +106,10 @@ const edgeList& cyclicPointPatch::transformPairs() const } -const labelList& cyclicPointPatch::separatedPoints() const -{ - return separatedPoints_; -} +//const labelList& cyclicPointPatch::separatedPoints() const +//{ +// return separatedPoints_; +//} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H index 6677c7de6cd..1642d81f06b 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H @@ -58,8 +58,8 @@ class cyclicPointPatch //- Local reference cast into the cyclic patch const cyclicPolyPatch& cyclicPolyPatch_; - //- List of local points that are not collocated - mutable labelList separatedPoints_; +// //- List of local points that are not collocated +// mutable labelList separatedPoints_; // Private Member Functions @@ -156,8 +156,8 @@ public: // neighbour patch. virtual const edgeList& transformPairs() const; - //- List of separated coupled points - virtual const labelList& separatedPoints() const; +// //- List of separated coupled points +// virtual const labelList& separatedPoints() const; }; diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C index 7f6c3f571fb..e1c081a5a56 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C @@ -77,51 +77,7 @@ void Foam::processorPointPatch::initGeometry(PstreamBuffers& pBufs) void Foam::processorPointPatch::calcGeometry(PstreamBuffers& pBufs) -{ - if (Pstream::parRun()) - { - const boolList& collocated = procPolyPatch_.collocated(); - - if (collocated.size() == 0) - { - separatedPoints_.setSize(0); - } - else if (collocated.size() == 1) - { - // Uniformly - if (collocated[0]) - { - separatedPoints_.setSize(0); - } - else - { - separatedPoints_ = identity(size()); - } - } - else - { - // Per face collocated or not. - const labelListList& pointFaces = procPolyPatch_.pointFaces(); - - DynamicList<label> separated; - forAll(pointFaces, pfi) - { - if (!collocated[pointFaces[pfi][0]]) - { - separated.append(pfi); - } - } - separatedPoints_.transfer(separated); - } - } - - if (debug) - { - Pout<< "processor:" << name() - << " separated:" << separatedPoints_.size() - << " out of points:" << size() << endl; - } -} +{} void processorPointPatch::initMovePoints(PstreamBuffers&, const pointField&) @@ -173,12 +129,6 @@ const labelList& processorPointPatch::reverseMeshPoints() const } -const labelList& processorPointPatch::separatedPoints() const -{ - return separatedPoints_; -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H index 0bfdbafe555..e0a4c31aae8 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H @@ -66,7 +66,7 @@ class processorPointPatch mutable labelList reverseMeshPoints_; - mutable labelList separatedPoints_; +// mutable labelList separatedPoints_; // Private Member Functions @@ -170,8 +170,8 @@ public: //- Return mesh points in the correct order for the receiving side const labelList& reverseMeshPoints() const; - //- List of separated coupled points - virtual const labelList& separatedPoints() const; +// //- List of separated coupled points +// virtual const labelList& separatedPoints() const; }; diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processorCyclic/processorCyclicPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processorCyclic/processorCyclicPointPatch.H index 71f8bbc50cb..9363e5096c9 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processorCyclic/processorCyclicPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processorCyclic/processorCyclicPointPatch.H @@ -137,11 +137,11 @@ public: // return !isMaster(); // } // -// //- Return the underlying processorPolyPatch -// const processorPolyPatch& procPolyPatch() const -// { -// return procPolyPatch_; -// } + //- Return the underlying processorCyclicPolyPatch + const processorCyclicPolyPatch& procCyclicPolyPatch() const + { + return procCycPolyPatch_; + } }; diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H index 5b37f6a3ada..ef6f67035de 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H @@ -110,8 +110,8 @@ public: return true; } - //- List of separated coupled points - virtual const labelList& separatedPoints() const = 0; + ////- List of separated coupled points + //virtual const labelList& separatedPoints() const = 0; }; diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C index 00577cdbbfc..96a97707cf9 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C @@ -26,6 +26,7 @@ License #include "globalPoints.H" #include "processorPolyPatch.H" +#include "processorCyclicPolyPatch.H" #include "cyclicPolyPatch.H" #include "polyMesh.H" diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H index 43c0d179408..f050a4368a2 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H @@ -159,10 +159,6 @@ class globalPoints // Private Member Functions - //- Return per point collocated status - static PackedBoolList collocatedPoints(const coupledPolyPatch&); - - // Wrappers around global point numbering to add collocated bit //- Convert into globalIndices and add collocated bit diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H index ce8f3e1982c..a81546ee572 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H @@ -325,7 +325,7 @@ public: } //- Neighbour patchID. - label neighbPatchID() const + virtual label neighbPatchID() const { if (neighbPatchID_ == -1) { @@ -345,12 +345,12 @@ public: return neighbPatchID_; } - bool owner() const + virtual bool owner() const { return index() < neighbPatchID(); } - bool neighbour() const + virtual bool neighbour() const { return !owner(); } diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 668e6b6e728..1747695bf52 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -178,10 +178,8 @@ fields/surfaceFields/surfaceFields.C fvMatrices/fvMatrices.C fvMatrices/fvScalarMatrix/fvScalarMatrix.C -/* fvMatrices/solvers/MULES/MULES.C fvMatrices/solvers/GAMGSymSolver/GAMGAgglomerations/faceAreaPairGAMGAgglomeration/faceAreaPairGAMGAgglomeration.C -*/ interpolation = interpolation/interpolation $(interpolation)/interpolation/interpolations.C @@ -218,7 +216,6 @@ $(schemes)/localBlended/localBlended.C $(schemes)/localMax/localMax.C $(schemes)/localMin/localMin.C -/* $(schemes)/linearFit/linearFit.C $(schemes)/biLinearFit/biLinearFit.C $(schemes)/quadraticLinearFit/quadraticLinearFit.C @@ -227,9 +224,10 @@ $(schemes)/quadraticFit/quadraticFit.C $(schemes)/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C $(schemes)/quadraticUpwindFit/quadraticUpwindFit.C $(schemes)/cubicUpwindFit/cubicUpwindFit.C +/* $(schemes)/quadraticLinearPureUpwindFit/quadraticLinearPureUpwindFit.C -$(schemes)/linearPureUpwindFit/linearPureUpwindFit.C */ +$(schemes)/linearPureUpwindFit/linearPureUpwindFit.C limitedSchemes = $(surfaceInterpolation)/limitedSchemes $(limitedSchemes)/limitedSurfaceInterpolationScheme/limitedSurfaceInterpolationSchemes.C @@ -260,7 +258,6 @@ multivariateSchemes = $(surfaceInterpolation)/multivariateSchemes $(multivariateSchemes)/multivariateSurfaceInterpolationScheme/multivariateSurfaceInterpolationSchemes.C $(multivariateSchemes)/multivariateSelectionScheme/multivariateSelectionSchemes.C $(multivariateSchemes)/upwind/multivariateUpwind.C -/* $(multivariateSchemes)/Gamma/multivariateGamma.C $(multivariateSchemes)/vanLeer/multivariateVanLeer.C $(multivariateSchemes)/Minmod/multivariateMinmod.C @@ -268,7 +265,6 @@ $(multivariateSchemes)/SuperBee/multivariateSuperBee.C $(multivariateSchemes)/MUSCL/multivariateMUSCL.C $(multivariateSchemes)/limitedLinear/multivariateLimitedLinear.C $(multivariateSchemes)/limitedCubic/multivariateLimitedCubic.C -*/ finiteVolume/fv/fv.C finiteVolume/fvSchemes/fvSchemes.C @@ -297,21 +293,17 @@ gradSchemes = finiteVolume/gradSchemes $(gradSchemes)/gradScheme/gradSchemes.C $(gradSchemes)/gaussGrad/gaussGrads.C -/* $(gradSchemes)/leastSquaresGrad/leastSquaresVectors.C $(gradSchemes)/leastSquaresGrad/leastSquaresGrads.C $(gradSchemes)/extendedLeastSquaresGrad/extendedLeastSquaresVectors.C $(gradSchemes)/extendedLeastSquaresGrad/extendedLeastSquaresGrads.C $(gradSchemes)/fourthGrad/fourthGrads.C -*/ limitedGradSchemes = $(gradSchemes)/limitedGradSchemes -/* $(limitedGradSchemes)/faceLimitedGrad/faceLimitedGrads.C $(limitedGradSchemes)/cellLimitedGrad/cellLimitedGrads.C $(limitedGradSchemes)/faceMDLimitedGrad/faceMDLimitedGrads.C $(limitedGradSchemes)/cellMDLimitedGrad/cellMDLimitedGrads.C -*/ snGradSchemes = finiteVolume/snGradSchemes $(snGradSchemes)/snGradScheme/snGradSchemes.C diff --git a/src/finiteVolume/fvMesh/fvPatches/constraint/cyclic/cyclicFvPatch.H b/src/finiteVolume/fvMesh/fvPatches/constraint/cyclic/cyclicFvPatch.H index c096563b2ee..0bf2d5d4f43 100644 --- a/src/finiteVolume/fvMesh/fvPatches/constraint/cyclic/cyclicFvPatch.H +++ b/src/finiteVolume/fvMesh/fvPatches/constraint/cyclic/cyclicFvPatch.H @@ -83,10 +83,6 @@ public: cyclicFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm) : coupledFvPatch(patch, bm), - cyclicLduInterface - ( - refCast<const cyclicPolyPatch>(patch).neighbPatchID() - ), cyclicPolyPatch_(refCast<const cyclicPolyPatch>(patch)) {} @@ -101,6 +97,26 @@ public: return cyclicPolyPatch_; } + //- Return neighbour + virtual label neighbPatchID() const + { + return cyclicPolyPatch_.neighbPatchID(); + } + + virtual bool owner() const + { + return cyclicPolyPatch_.owner(); + } + + //- Return processor number + virtual const cyclicLduInterface& neighbPatch() const + { + return refCast<const cyclicFvPatch> + ( + this->boundaryMesh()[cyclicPolyPatch_.neighbPatchID()] + ); + } + //- Are the cyclic planes parallel virtual bool parallel() const { -- GitLab