Merge branch 'development' into bugfix/cumulativeBugFix

This commit is contained in:
Hrvoje Jasak 2017-02-10 10:09:20 +00:00
commit c8949a5f9e
299 changed files with 9724 additions and 3294 deletions

View file

@ -1,8 +1,8 @@
# -*- mode: org; -*-
#
#+TITLE: *Cumulative List of Contributors for foam-extend-3.0*
#+TITLE: *Cumulative List of Contributors for foam-extend
#+AUTHOR: Hrvoje Jasak.
#+DATE: 10 January 2014
#+DATE: 9 February 2017
#+LINK: http://foam-extend.org
#+OPTIONS: author:nil
@ -91,4 +91,7 @@ Contents:
Alexander Vakhrushev
Vuko Vukcevic
Niklas Wikstrom
Celio Fernandes
Luis Ferras
Manoel de Araujo
J.Miguel Nobrega

View file

@ -40,8 +40,8 @@
# Requirements:
# 1: Your foam-extend environment must be properly initialized
# 2: AllMake.stage1 if you are overriding your system compiler
# 3: The file etc/prefs.sh should be used for setting the variables enabling
# the compilation of the various packages
# 3: The file etc/prefs.sh should be used for setting the variables
# enabling the compilation of the various packages
#
# Author:
# Martin Beaudoin, Hydro-Quebec, (2015)
@ -104,6 +104,13 @@ then
( rpm_make -p openmpi-1.8.8 -s openmpi-1.8.8.spec -u http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.8.tar.gz \
-f --define '_configureAdditionalArgs "$WM_THIRD_PARTY_USE_OPENMPI_188_ConfigureAdditionalArgs"')
}
# mvipich2-2.2
#
[ ! -z "$WM_THIRD_PARTY_USE_MVAPICH2_22" ] && {
echo "Building mvapich2 2.2"
( rpm_make -p mvapich2-2.2 -s mvapich2-2.2.spec -u http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.2.tar.gz \
-f --define '_configureAdditionalArgs "$WM_THIRD_PARTY_USE_MVAPICH2_22_ConfigureAdditionalArgs"')
}
else
echo "Using system installed OpenMPI"
echo ""

View file

@ -0,0 +1,268 @@
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | foam-extend: Open Source CFD
# \\ / O peration |
# \\ / A nd | For copyright notice see file Copyright
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
# This file is part of foam-extend.
#
# foam-extend is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# foam-extend is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
#
# Script
# RPM spec file for mvapich2-2.2
#
# Description
# RPM spec file for creating a relocatable RPM
#
# Author:
# Martin Beaudoin, Hydro-Quebec, (2015)
#
#------------------------------------------------------------------------------
# We grab the value of WM_THIRD_PARTY and WM_OPTIONS from the environment variable
%{expand:%%define _WM_THIRD_PARTY_DIR %(echo $WM_THIRD_PARTY_DIR)}
%{expand:%%define _WM_OPTIONS %(echo $WM_OPTIONS)}
# Disable the generation of debuginfo packages
%define debug_package %{nil}
# The topdir needs to point to the $WM_THIRD_PARTY/rpmbuild directory
%define _topdir %{_WM_THIRD_PARTY_DIR}/rpmBuild
%define _tmppath %{_topdir}/tmp
# Will install the package directly $WM_THIRD_PARTY_DIR
# Some comments about package relocation:
# By using this prefix for the Prefix: parameter in this file, you will make this
# package relocatable.
#
# This is fine, as long as your software is itself relocatable.
#
# Simply take note that libraries built with libtool are not relocatable because the
# prefix we specify will be hard-coded in the library .la files.
# Ref: http://sourceware.org/autobook/autobook/autobook_80.html
#
# In that case, if you ever change the value of the $WM_THIRD_PARTY_DIR, you will
# not be able to reutilize this RPM, even though it is relocatable. You will need to
# regenerate the RPM.
#
%define _prefix %{_WM_THIRD_PARTY_DIR}
%define name mvapich2
%define release %{_WM_OPTIONS}
%define version 2.2
%define buildroot %{_topdir}/BUILD/%{name}-%{version}-root
BuildRoot: %{buildroot}
Summary: mvapich2
License: BSD
Name: %{name}
Version: %{version}
Release: %{release}
URL: http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/
Source: %url/%{name}-%{version}.tar.gz
Prefix: %{_prefix}
Group: Development/Tools
%define _installPrefix %{_prefix}/packages/%{name}-%{version}/platforms/%{_WM_OPTIONS}
#--------------------------------------------------------------------------
#
# Here, we define default compiling options for mvapich2
#
# One can override the option on the commande line : --define='MACRO EXPR'
#
%{!?_configureAdditionalArgs: %define _configureAdditionalArgs Undefined}
%description
%{summary}
%prep
%setup -q
%build
# export WM settings in a form that GNU configure recognizes
[ -n "$WM_CC" ] && export CC="$WM_CC"
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
set +x
echo ""
echo "Compilation options:"
echo " _configureAdditionalArgs : %{_configureAdditionalArgs}"
echo ""
set -x
unset mpiWith
# Enable GridEngine if it appears to be in use
# If you don't want any integration with SGE, simply unset the SGE
# environment variable
if [ -n "$SGE_ROOT" ]
then
mpiWith="$mpiWith --with-sge"
else
mpiWith="$mpiWith --without-sge"
mpiWith="$mpiWith --enable-mca-no-build=ras-gridengine,pls-gridengine"
fi
# Infiniband support
# Adjust according to your local paths
# if [ -d /usr/local/ofed -a -d /usr/local/ofed/lib64 ]
# then
# mpiWith="$mpiWith --with-openib=/usr/local/ofed"
# mpiWith="$mpiWith --with-openib-libdir=/usr/local/ofed/lib64"
# fi
# NOTE. Option --disable-mcast disables Infiniband when libs are not present
./configure \
--prefix=%{_installPrefix} \
--exec_prefix=%{_installPrefix} \
--enable-mpirun-prefix-by-default \
--enable-orterun-prefix-by-default \
--enable-shared \
--enable-mpi-cxx \
--disable-static \
--disable-mpi-f77 \
--disable-mpi-f90 \
--without-slurm \
--enable-mpi-profile $mpiWith \
--disable-vt \
echo %{?_configureAdditionalArgs}`
[ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1
make -j $WM_NCOMPPROCS
%install
make install DESTDIR=$RPM_BUILD_ROOT
# Creation of foam-extend specific .csh and .sh files"
echo ""
echo "Generating foam-extend specific .csh and .sh files for the package %{name}-%{version}"
echo ""
#
# Generate package specific .sh file for foam-extend
#
mkdir -p $RPM_BUILD_ROOT/%{_installPrefix}/etc
cat << DOT_SH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.sh
# Load %{name}-%{version} libraries and binaries
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export MVAPICH2_DIR=\$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
export MVAPICH2_BIN_DIR=\$MVAPICH2_DIR/bin
export MVAPICH2_LIB_DIR=\$MVAPICH2_DIR/lib
# Enable access to the package runtime applications and libraries
[ -d \$MVAPICH2_BIN_DIR ] && _foamAddPath \$MVAPICH2_BIN_DIR
[ -d \$MVAPICH2_LIB_DIR ] && _foamAddLib \$MVAPICH2_LIB_DIR
export MPI_HOME=\$MVAPICH2_DIR
export MPI_ARCH_PATH=\$MPI_HOME
export OPAL_PREFIX=\$MPI_ARCH_PATH
# We initialize the rest of the environment using mpicc --showme:
# This does not work with MVAPICH2
#export MVAPICH2_INCLUDE_DIR="\`mpicc --showme:incdirs\`"
#export MVAPICH2_COMPILE_FLAGS="\`mpicc --showme:compile\`"
#export MVAPICH2_LINK_FLAGS="\`mpicc --showme:link\`"
# Set the foam-extend compilation flags
export PINC=\$MVAPICH2_COMPILE_FLAGS
export PLIBS=\$MVAPICH2_LINK_FLAGS
if [ "\$FOAM_VERBOSE" -a "\$PS1" ]
then
echo " Environment variables defined for OpenMPI:"
echo " MVAPICH2_BIN_DIR : \$MVAPICH2_BIN_DIR"
echo " MVAPICH2_LIB_DIR : \$MVAPICH2_LIB_DIR"
echo " MVAPICH2_INCLUDE_DIR : \$MVAPICH2_INCLUDE_DIR"
echo " MVAPICH2_COMPILE_FLAGS : \$MVAPICH2_COMPILE_FLAGS"
echo " MVAPICH2_LINK_FLAGS : \$MVAPICH2_LINK_FLAGS"
echo ""
echo " MPI_HOME : \$MPI_HOME"
echo " MPI_ARCH_PATH : \$MPI_ARCH_PATH"
echo " OPAL_PREFIX : \$OPAL_PREFIX"
echo " PINC : \$PINC"
echo " PLIBS : \$PLIBS"
fi
DOT_SH_EOF
#
# Generate package specific .csh file for foam-extend
#
cat << DOT_CSH_EOF > $RPM_BUILD_ROOT/%{_installPrefix}/etc/%{name}-%{version}.csh
# Load %{name}-%{version} libraries and binaries
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
setenv MVAPICH2_DIR \$WM_THIRD_PARTY_DIR/packages/%{name}-%{version}/platforms/\$WM_OPTIONS
setenv MVAPICH2_BIN_DIR \$MVAPICH2_DIR/bin
setenv MVAPICH2_LIB_DIR \$MVAPICH2_DIR/lib
# Enable access to the package runtime applications and libraries
if ( -e \$MVAPICH2_BIN_DIR ) then
_foamAddPath \$MVAPICH2_BIN_DIR
endif
if ( -e \$MVAPICH2_LIB_DIR ) then
_foamAddLib \$MVAPICH2_LIB_DIR
endif
setenv MPI_HOME \$MVAPICH2_DIR
setenv MPI_ARCH_PATH \$MPI_HOME
setenv OPAL_PREFIX \$MPI_ARCH_PATH
# We initialize the rest of the environment using mpicc --showme:
setenv MVAPICH2_INCLUDE_DIR "\`mpicc --showme:incdirs\`"
setenv MVAPICH2_COMPILE_FLAGS "\`mpicc --showme:compile\`"
setenv MVAPICH2_LINK_FLAGS "\`mpicc --showme:link\`"
# Set the foam-extend compilation flags
setenv PINC "\$MVAPICH2_COMPILE_FLAGS"
setenv PLIBS "\$MVAPICH2_LINK_FLAGS"
if (\$?FOAM_VERBOSE && \$?prompt) then
echo " Environment variables defined for OpenMPI:"
echo " MVAPICH2_BIN_DIR : \$MVAPICH2_BIN_DIR"
echo " MVAPICH2_LIB_DIR : \$MVAPICH2_LIB_DIR"
echo " MVAPICH2_INCLUDE_DIR : \$MVAPICH2_INCLUDE_DIR"
echo " MVAPICH2_COMPILE_FLAGS : \$MVAPICH2_COMPILE_FLAGS"
echo " MVAPICH2_LINK_FLAGS : \$MVAPICH2_LINK_FLAGS"
echo ""
echo " MPI_HOME : \$MPI_HOME"
echo " MPI_ARCH_PATH : \$MPI_ARCH_PATH"
echo " OPAL_PREFIX : \$OPAL_PREFIX"
echo " PINC : \$PINC"
echo " PLIBS : \$PLIBS"
endif
DOT_CSH_EOF
#finally, generate a .tgz file for systems where using rpm for installing packages
# as a non-root user might be a problem.
(mkdir -p %{_topdir}/TGZS/%{_target_cpu}; cd $RPM_BUILD_ROOT/%{_prefix}; tar -zcvf %{_topdir}/TGZS/%{_target_cpu}/%{name}-%{version}.tgz packages/%{name}-%{version})
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root)
%{_installPrefix}

View file

@ -138,7 +138,7 @@ Group: Development/Tools
--enable-orterun-prefix-by-default \
--enable-shared \
--enable-mpi-cxx \
--disable-static \
--disable-static \
--disable-mpi-f77 \
--disable-mpi-f90 \
--without-slurm \

View file

@ -82,6 +82,7 @@ rpm_make()
echo "Package name : $_PACKAGE"
echo "Package URL : $_PACKAGE_URL"
echo "RPM spec file name: $_SPECFILE"
echo "RPM file name : $_RPMFILENAME"
echo "Additional flags : $_ADDITIONALFLAGS"
# Shift options

View file

@ -13,7 +13,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
label inertIndex = -1;
volScalarField Yt("Yt", 0.0*Y[0]);
for (label i=0; i<Y.size(); i++)
for (label i = 0; i < Y.size(); i++)
{
if (Y[i].name() != inertSpecie)
{

View file

@ -3,6 +3,9 @@ rho = thermo.rho();
volScalarField rUA = 1.0/UEqn().A();
U = rUA*UEqn().H();
// Update boundary velocity for consistency with the flux
mrfZones.correctBoundaryVelocity(U);
if (pimple.nCorrPISO() <= 1)
{
UEqn.clear();

View file

@ -13,7 +13,7 @@
U = rUA*UEqn.H();
// Calculate phi for boundary conditions
phi = rhof*fvc::interpolate(U) & mesh.Sf();
phi = rhof*(fvc::interpolate(U) & mesh.Sf());
surfaceScalarField phid2 = rhoReff/rhof*phi;

View file

@ -12,6 +12,9 @@
{
U = rUA*UEqn.H();
// Update boundary velocity for consistency with the flux
mrfZones.correctBoundaryVelocity(U);
// Calculate phi for boundary conditions
phi = rhof*fvc::interpolate(U) & mesh.Sf();

View file

@ -12,6 +12,9 @@
{
U = rUA*UEqn.H();
// Update boundary velocity for consistency with the flux
mrfZones.correctBoundaryVelocity(U);
// Calculate phi for boundary conditions
phi = rhof*fvc::interpolate(U) & mesh.Sf();

View file

@ -1,13 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
set -x
wmake libso conjugateHeatTransfer
wmake blockCoupledScalarTransportFoam
wmake conjugateHeatFoam
wmake conjugateHeatSimpleFoam
wmake pUCoupledFoam
wmake MRFPorousFoam
# ----------------------------------------------------------------- end-of-file

View file

@ -81,16 +81,39 @@ int main(int argc, char *argv[])
# include "couplingTerms.H"
// Solve the block matrix
maxResidual = cmptMax(UpEqn.solve().initialResidual());
residual = UpEqn.solve();
maxResidual = cmptMax(residual.initialResidual());
// Retrieve solution
UpEqn.retrieveSolution(0, U.internalField());
UpEqn.retrieveSolution(3, p.internalField());
// Check for divergence
if (mag(residual.finalResidual() - residual.initialResidual()) > 1)
{
Info<< "DIVERGENCE: rescue step" << endl;
U.correctBoundaryConditions();
p.correctBoundaryConditions();
// Solving potential flow equation and correcting velocities
phi = (fvc::interpolate(U) & mesh.Sf());
phi = (fvc::interpolate(U) & mesh.Sf()) + tpEqn().flux() + tpresSource;
solve
(
tpEqn
==
- fvc::div(U)
);
phi += tpEqn().flux() + tpresSource;
U = fvc::reconstruct(phi);
}
else
{
// Retrieve solution
UpEqn.retrieveSolution(0, U.internalField());
UpEqn.retrieveSolution(3, p.internalField());
U.correctBoundaryConditions();
p.correctBoundaryConditions();
phi = (fvc::interpolate(U) & mesh.Sf()) + tpEqn().flux() + tpresSource;
}
// Make flux relative in rotating zones
mrfZones.relativeFlux(phi);

View file

@ -5,6 +5,9 @@
fvc::div(phi)
);
// Update boundary velocity for consistency with the flux
mrfZones.correctBoundaryVelocity(U);
// Momentum equation
fvVectorMatrix UEqn
(
@ -49,9 +52,7 @@
trAU().rename("rAU");
}
// Insert the additional components. Note this will destroy the H and A
UEqn += fvm::SuSp(-divPhi, U) + divPhi*U;
// Under-relax momentum. Note this will destroy the H and A
UEqn.relax();
// Insert momentum equation
@ -67,28 +68,38 @@
const scalarField& V = mesh.V().field();
// Note: this insertion should only happen in porous cell zones
// A rewrite of the porousZones class interface is needed.
// Note: insertion should only happen in porous cell zones
// HJ, 14/Mar/2016
forAll (TUIn, cellI)
register label cellI;
forAll (pZones, pZoneI)
{
const scalar& cellV = V[cellI];
const labelList& curZoneCells = pZones[pZoneI].zone();
const tensor& cellTU = TUIn[cellI];
// Loop over all cells in the zone
forAll (curZoneCells, zcI)
{
cellI = curZoneCells[zcI];
CoeffField<vector4>::squareType& cellDD = DD[cellI];
const scalar& cellV = V[cellI];
cellDD(0, 0) += cellV*cellTU.xx();
cellDD(0, 1) += cellV*cellTU.xy();
cellDD(0, 2) += cellV*cellTU.xz();
const tensor& cellTU = TUIn[cellI];
cellDD(1, 0) += cellV*cellTU.yx();
cellDD(1, 1) += cellV*cellTU.yy();
cellDD(2, 2) += cellV*cellTU.yz();
CoeffField<vector4>::squareType& cellDD = DD[cellI];
cellDD(2, 0) += cellV*cellTU.zx();
cellDD(2, 1) += cellV*cellTU.zy();
cellDD(2, 2) += cellV*cellTU.zz();
cellDD(0, 0) += cellV*cellTU.xx();
cellDD(0, 1) += cellV*cellTU.xy();
cellDD(0, 2) += cellV*cellTU.xz();
cellDD(1, 0) += cellV*cellTU.yx();
cellDD(1, 1) += cellV*cellTU.yy();
cellDD(2, 2) += cellV*cellTU.yz();
cellDD(2, 0) += cellV*cellTU.zx();
cellDD(2, 1) += cellV*cellTU.zy();
cellDD(2, 2) += cellV*cellTU.zz();
}
}
}
}

View file

@ -1,4 +1,5 @@
// initialize values for convergence checks
// initialize values for convergence checks
BlockSolverPerformance<vector4> residual;
scalar maxResidual = 0;
scalar convergenceCriterion = 0;

View file

@ -1,5 +1,4 @@
EXE_INC = \
-I../conjugateHeatTransfer/lnInclude \
-I$(LIB_SRC)/turbulenceModels \
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
@ -7,8 +6,9 @@ EXE_INC = \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/coupledMatrix/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude
-I$(LIB_SRC)/conjugateHeatTransfer/lnInclude
EXE_LIBS = \
-lincompressibleTurbulenceModel \

View file

@ -14,15 +14,12 @@
+ fvm::div(phi, T)
)
- fvm::laplacian(kappaEff, T)
==
==
radiation->Ru()
- fvm::Sp(4.0*radiation->Rp()*pow3(T), T)
+ 3.0*radiation->Rp()*pow4(T)
);
//Done automatically in 1.6.1-ext
//TFluidEqn->boundaryManipulate(T.boundaryField());
fvScalarMatrix* TSolidEqn = new fvScalarMatrix
(
fvm::ddt(rhoCpsolid, Tsolid)
@ -30,10 +27,6 @@
+ fvm::SuSp(-solidThermo.S()/Tsolid, Tsolid)
);
//Done automatically in 1.6.1-ext
//TSolidEqn->boundaryManipulate(Tsolid.boundaryField());
// Add fluid equation
TEqns.set(0, TFluidEqn);

View file

@ -1,5 +1,4 @@
EXE_INC = \
-I../conjugateHeatTransfer/lnInclude \
-I$(LIB_SRC)/turbulenceModels \
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
@ -7,8 +6,9 @@ EXE_INC = \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/coupledMatrix/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude
-I$(LIB_SRC)/conjugateHeatTransfer/lnInclude
EXE_LIBS = \
-lincompressibleTurbulenceModel \

View file

@ -14,7 +14,7 @@
+ fvm::SuSp(-fvc::div(phi), T)
)
- fvm::laplacian(kappaEff, T)
==
==
radiation->Ru()
- fvm::Sp(4.0*radiation->Rp()*pow3(T), T)
+ 3.0*radiation->Rp()*pow4(T)

View file

@ -14,9 +14,7 @@
rAU = 1.0/UEqn.A();
// Insert the additional components. Note this will destroy the H and A
UEqn += fvm::SuSp(-divPhi, U) + divPhi*U;
// Under-relax momentum. Note this will destroy the H and A
UEqn.relax();
UpEqn.insertEquation(0, UEqn);

View file

@ -1,69 +1,71 @@
Info << "Reading field p\n" << endl;
volScalarField p
(
IOobject
Info << "Reading field p\n" << endl;
volScalarField p
(
"p",
runTime.timeName(),
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info << "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
# include "createPhi.H"
singlePhaseTransportModel laminarTransport(U, phi);
autoPtr<incompressible::RASModel> turbulence
(
incompressible::RASModel::New(U, phi, laminarTransport)
);
// Block vector field for velocity (first entry) and pressure (second
// entry).
Info << "Creating field Up\n" << endl;
volVector4Field Up
(
IOobject
(
"Up",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
dimensionedVector4("zero", dimless, vector4::zero)
);
Info << "Reading field U\n" << endl;
volVectorField U
(
IOobject
Info<< "Creating field rAU\n" << endl;
volScalarField rAU
(
"U",
runTime.timeName(),
IOobject
(
"rAU",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
runTime.deltaT()
);
#include "createPhi.H"
singlePhaseTransportModel laminarTransport(U, phi);
autoPtr<incompressible::RASModel> turbulence
(
incompressible::RASModel::New(U, phi, laminarTransport)
);
// Block vector field for velocity (first entry) and pressure (second
// entry).
Info << "Creating field Up\n" << endl;
volVector4Field Up
(
IOobject
(
"Up",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedVector4("zero", dimless, vector4::zero)
);
Info<< "Creating field rAU\n" << endl;
volScalarField rAU
(
IOobject
(
"rAU",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
runTime.deltaT()
);
mesh.schemesDict().setFluxRequired(p.name());
mesh.schemesDict().setFluxRequired(p.name());
mesh.schemesDict().setFluxRequired("pcorr");

View file

@ -61,54 +61,14 @@ int main(int argc, char *argv[])
// Pressure-velocity SIMPLE corrector
{
// Momentum predictor
tmp<fvVectorMatrix> UEqn
(
fvm::div(phi, U)
+ turbulence->divDevReff()
);
mrfZones.addCoriolis(UEqn());
UEqn().relax();
solve(UEqn() == -fvc::grad(p));
volScalarField rAU = 1.0/UEqn().A();
U = rAU*UEqn().H();
UEqn.clear();
phi = fvc::interpolate(U, "interpolate(HbyA)") & mesh.Sf();
mrfZones.relativeFlux(phi);
adjustPhi(phi, U, p);
// Non-orthogonal pressure corrector loop
while (simple.correctNonOrthogonal())
{
fvScalarMatrix pEqn
(
fvm::laplacian(rAU, p) == fvc::div(phi)
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
if (simple.finalNonOrthogonalIter())
{
phi -= pEqn.flux();
}
}
# include "continuityErrs.H"
// Explicitly relax pressure for momentum corrector
p.relax();
// Momentum corrector
U -= rAU*fvc::grad(p);
U.correctBoundaryConditions();
# include "UEqn.H"
# include "pEqn.H"
}
// Calculate relative velocity
Urel == U;
mrfZones.relativeVelocity(Urel);
turbulence->correct();
runTime.write();

View file

@ -0,0 +1,19 @@
// Solve the momentum equation
tmp<fvVectorMatrix> HUEqn
(
fvm::div(phi, U)
+ turbulence->divDevReff()
);
mrfZones.addCoriolis(HUEqn());
// Get under-relaxation factor
const scalar UUrf = mesh.solutionDict().equationRelaxationFactor(U.name());
// Momentum solution
solve
(
relax(HUEqn(), UUrf)
==
-fvc::grad(p)
);

View file

@ -44,3 +44,19 @@
MRFZones mrfZones(mesh);
mrfZones.correctBoundaryVelocity(U);
// Create Urel as a permanent field to make it available for on-the-fly
// post-processing operations
volVectorField Urel
(
IOobject
(
"Urel",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
U
);
mrfZones.relativeVelocity(Urel);

View file

@ -0,0 +1,54 @@
{
p.boundaryField().updateCoeffs();
// Prepare clean 1/Ap without contribution from under-relaxation
// HJ, 26/Oct/2015
volScalarField rAU
(
"(1|A(U))",
1/HUEqn().A()
);
// Update boundary velocity for consistency with the flux
// This is needed for a ramped MRF
mrfZones.correctBoundaryVelocity(U);
// Store velocity under-relaxation point before using U for
// the flux precursor
U.storePrevIter();
U = rAU*HUEqn().H();
HUEqn.clear();
phi = fvc::interpolate(U) & mesh.Sf();
mrfZones.relativeFlux(phi);
adjustPhi(phi, U, p);
// Non-orthogonal pressure corrector loop
while (simple.correctNonOrthogonal())
{
fvScalarMatrix pEqn
(
fvm::laplacian(rAU, p) == fvc::div(phi)
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
if (simple.finalNonOrthogonalIter())
{
phi -= pEqn.flux();
}
}
# include "continuityErrs.H"
// Explicitly relax pressure for momentum corrector
p.relax();
// Momentum corrector
// Note: since under-relaxation does not change aU, H/a in U can be
// re-used. HJ, 22/Jan/2016
U = UUrf*(U - rAU*fvc::grad(p)) + (1 - UUrf)*U.prevIter();
U.correctBoundaryConditions();
}

View file

@ -1,8 +1,9 @@
{
p.boundaryField().updateCoeffs();
// Prepare clean 1/Ap without contribution from under-relaxation
// HJ, 26/Oct/2015
volScalarField rUA
volScalarField rAU
(
"(1|A(U))",
1/HUEqn().A()
@ -12,8 +13,9 @@
// the flux precursor
U.storePrevIter();
U = rUA*HUEqn().H();
U = rAU*HUEqn().H();
HUEqn.clear();
phi = fvc::interpolate(U) & mesh.Sf();
adjustPhi(phi, U, p);
@ -22,7 +24,7 @@
{
fvScalarMatrix pEqn
(
fvm::laplacian(rUA, p) == fvc::div(phi)
fvm::laplacian(rAU, p) == fvc::div(phi)
);
pEqn.setReference(pRefCell, pRefValue);
@ -43,6 +45,6 @@
// Momentum corrector
// Note: since under-relaxation does not change aU, H/a in U can be
// re-used. HJ, 22/Jan/2016
U = UUrf*(U - rUA*fvc::grad(p)) + (1 - UUrf)*U.prevIter();
U = UUrf*(U - rAU*fvc::grad(p)) + (1 - UUrf)*U.prevIter();
U.correctBoundaryConditions();
}

View file

@ -4,6 +4,9 @@
U = rUA*UEqn.H();
// Update boundary velocity for consistency with the flux
mrfZones.correctBoundaryVelocity(U);
surfaceScalarField phiU
(
"phiU",

View file

@ -314,6 +314,26 @@ int main(int argc, char *argv[])
}
}
if (args.optionFound("addEmptyPatch"))
{
word emptyPatchName(args.optionLookup("addEmptyPatch")());
dictionary emptyPatchDict;
emptyPatchDict.add("type", "empty");
emptyPatchDict.add("edgeLabels", labelList());
emptyPatchDict.add("ngbPolyPatchIndex", -1);
faPatchLst.append
(
faPatch::New
(
emptyPatchName,
emptyPatchDict,
faPatchLst.size(),
areaMesh.boundary()
).ptr()
);
}
Info << "Add faPatches ... ";
areaMesh.addFaPatches(List<faPatch*>(faPatchLst));
Info << "Done" << endl;

View file

@ -119,12 +119,12 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
Foam::word regionName = polyMesh::defaultRegion;
word regionName = polyMesh::defaultRegion;
if (args.optionReadIfPresent("region", regionName))
{
Info<< "Selecting region " << regionName << " for time = "
<< runTime.timeName() << Foam::nl << Foam::endl;
<< runTime.timeName() << nl << endl;
}
// Set all times on processor meshes equal to reconstructed mesh

View file

@ -46,7 +46,6 @@ int main(int argc, char *argv[])
FatalError.exit();
}
dimensionedScalar rhoRef
(
"rhoRef",

View file

@ -53,6 +53,21 @@ for i in range(1,len(t)):
my[i] += mvy[i]
mz[i] += mvz[i]
# write clean data file
outForces=open('forces.dat','w')
for data in zip(t,fx,fy,fz):
outForces.write(' '.join([str(d) for d in data])+'\n')
outForces.close()
outMoments=open('moments.dat','w')
for data in zip(t,mx,my,mz):
outMoments.write(' '.join([str(d) for d in data])+'\n')
outMoments.close()
# plot forces
import pylab
pylab.xlabel('iteration')

View file

@ -62,6 +62,7 @@ for line in lines:
tepsilon.append(iepsilon)
epsilon.append(float(matchepsilon.group(2)))
# write clean data file
outfile=open('residual.dat','w')
if iomega > 0:

View file

@ -91,11 +91,11 @@ export WM_THIRD_PARTY_DIR=$WM_PROJECT_DIR/ThirdParty
# Use 'set' and 'unset' to adjust for your environent
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# For AllMake.stage1
export WM_THIRD_PARTY_USE_CMAKE_322=1
#export WM_THIRD_PARTY_USE_CMAKE_322=1
#
# For AllMake.stage2
export WM_THIRD_PARTY_USE_OPENMPI_165=1
export WM_THIRD_PARTY_USE_OPENMPI_188=1
#
# For AllMake.stage3

View file

@ -943,7 +943,7 @@ Tolerances
slidingEdgeEndCutoffTol 0.0001;
slidingEdgeCoPlanarTol 0.8;
GGIAreaErrorTol 1e-8;
GGIAreaErrorTol 1e-8;
}
DimensionedConstants

View file

@ -77,11 +77,11 @@ setenv WM_THIRD_PARTY_DIR $WM_PROJECT_DIR/ThirdParty
# This can be overriden in prefs.sh
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# For AllMake.stage1
setenv WM_THIRD_PARTY_USE_CMAKE_322 1
#setenv WM_THIRD_PARTY_USE_CMAKE_322 1
#
# For AllMake.stage2
setenv WM_THIRD_PARTY_USE_OPENMPI_165 1
setenv WM_THIRD_PARTY_USE_OPENMPI_188 1
#
# For AllMake.stage3
@ -152,7 +152,7 @@ if ( ! $?WM_PRECISION_OPTION ) setenv WM_PRECISION_OPTION DP
# WM_COMPILE_OPTION = Opt | Debug | Prof
if ( ! $?WM_COMPILE_OPTION ) setenv WM_COMPILE_OPTION Opt
#setenv WM_COMPILE_OPTION Opt
setenv WM_COMPILE_OPTION Opt
#setenv WM_COMPILE_OPTION Debug
# WM_MPLIB = SYSTEMOPENMPI | OPENMPI | MPICH | MPICH-GM | HPMPI | GAMMA | MPI | QSMPI | MVAPICH2

View file

@ -210,6 +210,9 @@ setenv WM_THIRD_PARTY_USE_OPENMPI_188 1
#setenv WM_THIRD_PARTY_USE_OPENMPI_15 1
#setenv WM_THIRD_PARTY_USE_OPENMPI_143 1
#setenv WM_THIRD_PARTY_USE_OPENMPI_141 1
#setenv WM_THIRD_PARTY_USE_MVAPICH2_22 1
#setenv WM_THIRD_PARTY_USE_MVAPICH2_22_ConfigureAdditionalArgs '--disable-mcast'
#
# For AllMake.stage3

View file

@ -220,6 +220,9 @@ export WM_THIRD_PARTY_USE_OPENMPI_188=1
#export WM_THIRD_PARTY_USE_OPENMPI_15=1
#export WM_THIRD_PARTY_USE_OPENMPI_143=1
#export WM_THIRD_PARTY_USE_OPENMPI_141=1
#export WM_THIRD_PARTY_USE_MVAPICH2_22=1
#export WM_THIRD_PARTY_USE_MVAPICH2_22_ConfigureAdditionalArgs='--disable-mcast'
#
# For AllMake.stage3

View file

@ -173,7 +173,7 @@ case OPENMPI:
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using openmpi-1.8.8 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
endif
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
else if ($?WM_THIRD_PARTY_USE_OPENMPI_165 != 0 && -d $WM_THIRD_PARTY_DIR/packages/openmpi-1.6.5/platforms/$WM_OPTIONS ) then
set mpi_version=openmpi-1.6.5
@ -181,7 +181,7 @@ case OPENMPI:
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using openmpi-1.6.5 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
endif
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
else if ($?WM_THIRD_PARTY_USE_OPENMPI_143 != 0 && -d $WM_THIRD_PARTY_DIR/packages/openmpi-1.4.3/platforms/$WM_OPTIONS ) then
set mpi_version=openmpi-1.4.3
@ -189,7 +189,7 @@ case OPENMPI:
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using openmpi-1.4.3 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
endif
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
else if ($?WM_THIRD_PARTY_USE_OPENMPI_143 != 0 && -d $WM_THIRD_PARTY_DIR/packages/openmpi-1.5/platforms/$WM_OPTIONS ) then
set mpi_version=openmpi-1.5
@ -197,7 +197,7 @@ case OPENMPI:
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using openmpi-1.5 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
endif
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.csh
endif
unset mpi_version
@ -576,8 +576,8 @@ endif
# zoltan
# ~~~~~
if ( $?ZOLTAN_SYSTEM == 0 && $?WM_THIRD_PARTY_USE_ZOLTAN_36 != 0 && -e "$WM_THIRD_PARTY_DIR"/packages/zoltan-3.6/platforms/$WM_OPTIONS ) then
_foamSource $WM_THIRD_PARTY_DIR/packages/zoltan-3.6/platforms/$WM_OPTIONS/etc/zoltan-3.6.csh
if ( $?ZOLTAN_SYSTEM == 0 && $?WM_THIRD_PARTY_USE_ZOLTAN_35 != 0 && -e "$WM_THIRD_PARTY_DIR"/packages/zoltan-3.5/platforms/$WM_OPTIONS ) then
_foamSource $WM_THIRD_PARTY_DIR/packages/zoltan-3.5/platforms/$WM_OPTIONS/etc/zoltan-3.5.csh
endif
# Python

View file

@ -220,7 +220,7 @@ OPENMPI)
then
echo "Using openmpi-1.8.8 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
fi
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
elif [ ! -z $WM_THIRD_PARTY_USE_OPENMPI_165 ] && [ -e $WM_THIRD_PARTY_DIR/packages/openmpi-1.6.5/platforms/$WM_OPTIONS ]
then
@ -229,7 +229,7 @@ OPENMPI)
then
echo "Using openmpi-1.6.5 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
fi
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
elif [ ! -z $WM_THIRD_PARTY_USE_OPENMPI_143 ] && [ -e $WM_THIRD_PARTY_DIR/packages/openmpi-1.4.3/platforms/$WM_OPTIONS ]
then
@ -238,7 +238,7 @@ OPENMPI)
then
echo "Using openmpi-1.4.3 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
fi
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
elif [ ! -z $WM_THIRD_PARTY_USE_OPENMPI_15 ] && [ -e $WM_THIRD_PARTY_DIR/packages/openmpi-1.5/platforms/$WM_OPTIONS ]
then
@ -247,7 +247,7 @@ OPENMPI)
then
echo "Using openmpi-1.5 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
fi
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
fi
# On Windows set mpi_version from value defined in bashrc.mingw:
@ -375,22 +375,16 @@ SYSTEMOPENMPI)
unset mpi_version
;;
MVAPICH2)
mpi_version=mvapich2
if [ -n "${MVAPICH2_BIN_DIR}" ] && [ -d "${MVAPICH2_BIN_DIR}" ]
then
_foamAddPath $MVAPICH2_BIN_DIR
else
MVAPICH2_BIN_DIR=$(dirname `which mpicc`)
fi
if which mpicc >/dev/null
then
mpicc -v 2>/dev/null | grep -q "mpicc for MVAPICH2" ||
echo "Warning: `which mpicc` does not appear to be for MVAPICH2"
else
echo "Warning: mpicc not available"
mpi_version=mvapich2-2.2
if [ ! -z $WM_THIRD_PARTY_USE_MVAPICH2_20 ] && [ -e $WM_THIRD_PARTY_DIR/packages/mvapich2-2.2/platforms/$WM_OPTIONS ]
then
if [ "$FOAM_VERBOSE" -a "$PS1" ]
then
echo "Using mvapich2 from the ThirdParty package: $WM_THIRD_PARTY_DIR/packages/$mpi_version"
fi
_foamSource $WM_THIRD_PARTY_DIR/packages/$mpi_version/platforms/$WM_OPTIONS/etc/$mpi_version.sh
fi
export MPI_HOME=`dirname $MVAPICH2_BIN_DIR`

View file

@ -59,6 +59,8 @@ thermophysicalModels/Allwmake
transportModels/Allwmake
turbulenceModels/Allwmake
lagrangian/Allwmake
wmake libso conjugateHeatTransfer
postProcessing/Allwmake
conversion/Allwmake

View file

@ -598,7 +598,7 @@ void Foam::sixDOFqODE::relaxAcceleration
const scalar maxRelFactor
)
{
if (minRelFactor - maxRelFactor < SMALL)
if (mag(minRelFactor - maxRelFactor) < SMALL)
{
// Fixed relaxation
relaxFactorT_ = minRelFactor;

View file

@ -47,7 +47,7 @@ namespace Foam
{
/*---------------------------------------------------------------------------*\
Class chtRcTemperatureFvPatchScalarField Declaration
Class chtRcTemperatureFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/
class chtRcTemperatureFvPatchScalarField
@ -60,7 +60,7 @@ class chtRcTemperatureFvPatchScalarField
word kName_;
//- Take radiation into account for this patch
bool radiation_;
Switch radiation_;
public:
@ -86,7 +86,8 @@ public:
const dictionary&
);
//- Construct by mapping given chtRcTemperatureFvPatchScalarField onto a new patch
//- Construct by mapping given chtRcTemperatureFvPatchScalarField
// onto a new patch
chtRcTemperatureFvPatchScalarField
(
const chtRcTemperatureFvPatchScalarField&,
@ -128,8 +129,26 @@ public:
// Access functions
//- Return kName
const word& kName() const
{
return kName_;
}
//- Return access to kName
word& kName()
{
return kName_;
}
//- Return radiation
bool radiation() const
const Switch& radiation() const
{
return radiation_;
}
//- Return access to radiation
Switch& radiation()
{
return radiation_;
}
@ -158,7 +177,6 @@ public:
//- Write
virtual void write(Ostream&) const;
};

View file

@ -36,14 +36,10 @@ Author
#include "radiationConstants.H"
#include "VectorN.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarField
Foam::chtRcThermalDiffusivityFvPatchScalarField::
chtRcThermalDiffusivityFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
@ -53,7 +49,8 @@ chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarF
{}
chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarField
Foam::chtRcThermalDiffusivityFvPatchScalarField::
chtRcThermalDiffusivityFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
@ -64,7 +61,8 @@ chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarF
{}
chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarField
Foam::chtRcThermalDiffusivityFvPatchScalarField::
chtRcThermalDiffusivityFvPatchScalarField
(
const chtRcThermalDiffusivityFvPatchScalarField& ptf,
const fvPatch& p,
@ -76,7 +74,8 @@ chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarF
{}
chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarField
Foam::chtRcThermalDiffusivityFvPatchScalarField::
chtRcThermalDiffusivityFvPatchScalarField
(
const chtRcThermalDiffusivityFvPatchScalarField& ptf,
const DimensionedField<scalar, volMesh>& iF
@ -88,7 +87,7 @@ chtRcThermalDiffusivityFvPatchScalarField::chtRcThermalDiffusivityFvPatchScalarF
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void chtRcThermalDiffusivityFvPatchScalarField::evaluate
void Foam::chtRcThermalDiffusivityFvPatchScalarField::evaluate
(
const Pstream::commsTypes
)
@ -97,7 +96,7 @@ void chtRcThermalDiffusivityFvPatchScalarField::evaluate
}
void chtRcThermalDiffusivityFvPatchScalarField::updateCoeffs()
void Foam::chtRcThermalDiffusivityFvPatchScalarField::updateCoeffs()
{
if (updated())
{
@ -109,16 +108,18 @@ void chtRcThermalDiffusivityFvPatchScalarField::updateCoeffs()
void
chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity
Foam::chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity
(
chtRegionCoupleBase& owner,
const chtRegionCoupleBase& neighbour
) const
{
if(debug)
if (debug)
{
Info << "In chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity on "
<< this->dimensionedInternalField().name()
InfoIn
(
"chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity"
) << "for field " << this->dimensionedInternalField().name()
<< " in " << this->patch().boundaryMesh().mesh().name()
<< endl;
}
@ -158,19 +159,19 @@ chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity
const scalarField& lfNei = neighbour.originalPatchField();
scalarField lTcNei = TwOwn.shadowPatchField().patchInternalField();
forAll(lData, facei)
forAll (lData, facei)
{
lData[facei][0] = lTcNei[facei];
lData[facei][1] = lfNei[facei];
}
if(TwOwn.shadowPatchField().radiation())
if (TwOwn.shadowPatchField().radiation())
{
const scalarField& lQrNei =
owner.lookupShadowPatchField<volScalarField, scalar>("Qr");
const scalarField& lTwNei = TwOwn.shadowPatchField();
forAll(lData, facei)
forAll (lData, facei)
{
lData[facei][2] = lTwNei[facei];
lData[facei][3] = lQrNei[facei];
@ -180,15 +181,15 @@ chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity
const Field<VectorN<scalar, 4> > iData =
owner.regionCouplePatch().interpolate(lData);
forAll(iData, facei)
forAll (iData, facei)
{
TcNei[facei] = iData[facei][0];
fNei[facei] = iData[facei][1];
}
if(TwOwn.shadowPatchField().radiation())
if (TwOwn.shadowPatchField().radiation())
{
forAll(iData, facei)
forAll (iData, facei)
{
Qr[facei] += iData[facei][3];
fourQro[facei] +=
@ -205,46 +206,35 @@ chtRcThermalDiffusivityFvPatchScalarField::calcThermalDiffusivity
const scalarField kOwn = fOwn/(1.0 - p.weights())/mld.magDelta(p.index());
const scalarField kNei = fNei/p.weights()/mld.magDelta(p.index());
//Info << "kOwn = " << kOwn << endl;
//Info << "kNei = " << kNei << endl;
//Info << "TcOwn = " << TcOwn << endl;
//Info << "TcNei = " << TcNei << endl;
//Info << "DeltaT = " << TcNei - TcOwn << endl;
//Info << "Qr = " << Qr << endl;
//Info << "kOwn + kNei = " << (kOwn + kNei) << endl;
//Info << "k = " << k << endl;
k = kOwn*(TwOwn*(kNei*(TcNei - TcOwn) + Qr + fourQro) - TcOwn*fourQro);
k /= stabilise((fourQro + TwOwn*(kOwn + kNei))*(TcNei - TcOwn), SMALL);
k /= p.deltaCoeffs();
//Info << "k = " << k << endl;
forAll(k, facei)
forAll (k, facei)
{
k[facei] = max(min(k[facei], 100*kHarm[facei]), 0.01*kHarm[facei]);
}
//Info << "k = " << k << endl;
owner.fvPatchScalarField::updateCoeffs();
}
void
chtRcThermalDiffusivityFvPatchScalarField::calcTemperature
Foam::chtRcThermalDiffusivityFvPatchScalarField::calcTemperature
(
chtRcTemperatureFvPatchScalarField& TwOwn,
const chtRcTemperatureFvPatchScalarField& neighbour,
const chtRegionCoupleBase& ownerK
) const
{
if(debug)
if (debug)
{
Info << "In chtRcThermalDiffusivityFvPatchScalarField::calcTemperature on "
<< this->dimensionedInternalField().name()
InfoIn
(
"chtRcThermalDiffusivityFvPatchScalarField::calcTemperature"
) << "for field " << this->dimensionedInternalField().name()
<< " in " << this->patch().boundaryMesh().mesh().name()
<< endl;
}
@ -280,19 +270,19 @@ chtRcThermalDiffusivityFvPatchScalarField::calcTemperature
scalarField lTcNei =
TwOwn.shadowPatchField().patchInternalField();
forAll(lData, facei)
forAll (lData, facei)
{
lData[facei][0] = lTcNei[facei];
lData[facei][1] = lfNei[facei];
}
if(TwOwn.shadowPatchField().radiation())
if (TwOwn.shadowPatchField().radiation())
{
const scalarField& lTwNei = TwOwn.shadowPatchField();
const scalarField& lQrNei =
TwOwn.lookupShadowPatchField<volScalarField, scalar>("Qr");
forAll(lData, facei)
forAll (lData, facei)
{
lData[facei][2] = lTwNei[facei];
lData[facei][3] = lQrNei[facei];
@ -302,15 +292,15 @@ chtRcThermalDiffusivityFvPatchScalarField::calcTemperature
const Field<VectorN<scalar, 4> > iData =
TwOwn.regionCouplePatch().interpolate(lData);
forAll(iData, facei)
forAll (iData, facei)
{
TcNei[facei] = iData[facei][0];
fNei[facei] = iData[facei][1];
}
if(TwOwn.shadowPatchField().radiation())
if (TwOwn.shadowPatchField().radiation())
{
forAll(iData, facei)
forAll (iData, facei)
{
fourQro[facei] +=
4.0*radiation::sigmaSB.value()*pow4(iData[facei][2]);
@ -322,29 +312,15 @@ chtRcThermalDiffusivityFvPatchScalarField::calcTemperature
const scalarField kOwn = fOwn/(1.0 - p.weights())/mld.magDelta(p.index());
const scalarField kNei = fNei/p.weights()/mld.magDelta(p.index());
//Info << "kOwn = " << kOwn << endl;
//Info << "kNei = " << kNei << endl;
//Info << "TcOwn = " << TcOwn << endl;
//Info << "TcNei = " << TcNei << endl;
//Info << "Qr = " << Qr << " Sum = " << sum(Qr*p.magSf()) << endl;
TwOwn *=
(fourQro + Qr + kOwn*TcOwn + kNei*TcNei)
/(TwOwn*(kOwn + kNei) + fourQro);
//Info << "TwOwn = " << TwOwn << endl;
//scalarField q1 = (TwOwn - TcOwn)*kOwn;
//Info << "q1 = " << q1 << " Sum = " << sum(q1*p.magSf()) << endl;
//scalarField q2 = (TcNei - TcOwn)*ownerK*p.deltaCoeffs();
//Info << "q2 = " << q2 << " Sum = " << sum(q2*p.magSf()) << endl;
TwOwn.fvPatchScalarField::updateCoeffs();
}
void chtRcThermalDiffusivityFvPatchScalarField::write(Ostream& os) const
void Foam::chtRcThermalDiffusivityFvPatchScalarField::write(Ostream& os) const
{
fvPatchScalarField::write(os);
os.writeKeyword("remoteField")
@ -353,19 +329,18 @@ void chtRcThermalDiffusivityFvPatchScalarField::write(Ostream& os) const
}
//- Specify data associated with VectorN<scalar, 4> type is contiguous
template<>
inline bool contiguous<VectorN<scalar, 4> >() {return true;}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
(
fvPatchScalarField,
chtRcThermalDiffusivityFvPatchScalarField
);
namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
chtRcThermalDiffusivityFvPatchScalarField
);
} // End namespace Foam
// ************************************************************************* //

View file

@ -25,10 +25,12 @@ Class
chtRcThermalDiffusivityFvPatchScalarField
Description
Region couple patch field taking radiation into account
Diffusivity for the region couple patch field taking radiation into account
Master side
Author
Henrik Rusche, Wikki GmbH. All rights reserved
Cleaned up by Hrvoje Jasak
SourceFiles
chtRcThermalDiffusivityFvPatchScalarField.C
@ -46,16 +48,13 @@ namespace Foam
{
/*---------------------------------------------------------------------------*\
Class chtRcThermalDiffusivityFvPatchScalarField Declaration
Class chtRcThermalDiffusivityFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/
class chtRcThermalDiffusivityFvPatchScalarField
:
public chtRegionCoupleBase
{
// Private data
public:
//- Runtime type information
@ -79,7 +78,8 @@ public:
const dictionary&
);
//- Construct by mapping given chtRcThermalDiffusivityFvPatchScalarField onto a new patch
//- Construct by mapping given
// chtRcThermalDiffusivityFvPatchScalarField onto a new patch
chtRcThermalDiffusivityFvPatchScalarField
(
const chtRcThermalDiffusivityFvPatchScalarField&,
@ -119,9 +119,6 @@ public:
// Member functions
// Access
// Evaluation functions
//- Evaluate the patch field
@ -148,7 +145,6 @@ public:
//- Write
virtual void write(Ostream&) const;
};

View file

@ -31,14 +31,10 @@ Author
#include "fvPatchFieldMapper.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPatchScalarField
Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::
chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
@ -48,7 +44,8 @@ chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPa
{}
chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPatchScalarField
Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::
chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
@ -59,7 +56,19 @@ chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPa
{}
chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPatchScalarField
Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::
chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const chtRcThermalDiffusivitySlaveFvPatchScalarField& ptf,
const DimensionedField<scalar, volMesh>& iF
)
:
chtRegionCoupleBase(ptf, iF)
{}
Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::
chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const chtRcThermalDiffusivitySlaveFvPatchScalarField& ptf,
const fvPatch& p,
@ -71,20 +80,10 @@ chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPa
{}
chtRcThermalDiffusivitySlaveFvPatchScalarField::chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const chtRcThermalDiffusivitySlaveFvPatchScalarField& ptf,
const DimensionedField<scalar, volMesh>& iF
)
:
chtRegionCoupleBase(ptf, iF)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const chtRegionCoupleBase&
chtRcThermalDiffusivitySlaveFvPatchScalarField::shadowPatchField() const
const Foam::chtRegionCoupleBase&
Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::shadowPatchField() const
{
return dynamic_cast<const chtRegionCoupleBase&>
(
@ -93,7 +92,7 @@ chtRcThermalDiffusivitySlaveFvPatchScalarField::shadowPatchField() const
}
void chtRcThermalDiffusivitySlaveFvPatchScalarField::evaluate
void Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::evaluate
(
const Pstream::commsTypes
)
@ -102,7 +101,7 @@ void chtRcThermalDiffusivitySlaveFvPatchScalarField::evaluate
}
void chtRcThermalDiffusivitySlaveFvPatchScalarField::updateCoeffs()
void Foam::chtRcThermalDiffusivitySlaveFvPatchScalarField::updateCoeffs()
{
if (updated())
{
@ -115,12 +114,16 @@ void chtRcThermalDiffusivitySlaveFvPatchScalarField::updateCoeffs()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
(
fvPatchScalarField,
chtRcThermalDiffusivitySlaveFvPatchScalarField
);
namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
chtRcThermalDiffusivitySlaveFvPatchScalarField
);
} // End namespace Foam
// ************************************************************************* //

View file

@ -25,10 +25,12 @@ Class
chtRcThermalDiffusivitySlaveFvPatchScalarField
Description
Region couple patch field taking radiation into account
Diffusivity for the region couple patch field taking radiation into account
Slave side
Author
Henrik Rusche, Wikki GmbH. All rights reserved
Cleaned up by Hrvoje Jasak
SourceFiles
chtRcThermalDiffusivitySlaveFvPatchScalarField.C
@ -49,15 +51,13 @@ class chtThermalDiffusivityRegionCoupleFvPatchScalarField;
class chtTemperatureRegionCoupleFvPatchScalarField;
/*---------------------------------------------------------------------------*\
Class chtRcThermalDiffusivitySlaveFvPatchScalarField Declaration
Class chtRcThermalDiffusivitySlaveFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/
class chtRcThermalDiffusivitySlaveFvPatchScalarField
:
public chtRegionCoupleBase
{
// Private data
public:
//- Runtime type information
@ -81,7 +81,8 @@ public:
const dictionary&
);
//- Construct by mapping given chtRcThermalDiffusivitySlaveFvPatchScalarField onto a new patch
//- Construct by mapping given
// chtRcThermalDiffusivitySlaveFvPatchScalarField onto a new patch
chtRcThermalDiffusivitySlaveFvPatchScalarField
(
const chtRcThermalDiffusivitySlaveFvPatchScalarField&,

Some files were not shown because too many files have changed in this diff Show more