Commit 016526ba authored by sergio's avatar sergio Committed by Andrew Heather
Browse files

Merge branch 'develop' of develop.openfoam.com:Development/OpenFOAM-plus into develop

parents 1bd2ef7c fa8ab2d5
Test-copyFile.C
EXE = $(FOAM_USER_APPBIN)/Test-copyFile
/* EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude */
/* EXE_LIBS = -lfiniteVolume */
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2019 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Test atomic copyFile as per timeActivatedFileUpdate
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "OSspecific.H"
#include "Switch.H"
using namespace Foam;
#ifdef _WIN32
#undef DebugInfo // Windows name clash with OpenFOAM messageStream
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
// Prefix '\\?\' for extended-length path
inline std::string longName(const std::string& file)
{
std::string longName;
longName.reserve(4 + file.length());
longName.append("\\\\?\\");
longName.append(file);
return longName;
}
bool win_cp(const fileName& src, const fileName& dst)
{
const std::string srcName(longName(src));
const std::string dstName(longName(dst));
return ::CopyFile(srcName.c_str(), dstName.c_str(), false);
}
bool win_mv(const fileName& src, const fileName& dst)
{
const std::string srcName(longName(src));
const std::string dstName(longName(dst));
return ::MoveFile(srcName.c_str(), dstName.c_str());
}
#else
bool win_cp(const fileName& src, const fileName& dst)
{
Info<< "No Windows cp, using Foam::cp" << nl;
return Foam::cp(src, dst);
}
bool win_mv(const fileName& src, const fileName& dst)
{
Info<< "No Windows mv, using Foam::mv" << nl;
return Foam::mv(src, dst);
}
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
argList::noBanner();
argList::noParallel();
argList::noFunctionObjects();
argList::addNote("Test atomic copyFile methods");
#ifdef _WIN32
argList::addBoolOption("win1", "Foam cp, Windows mv");
argList::addBoolOption("win2", "Windows cp, Foam mv");
argList::addBoolOption("win3", "Windows cp, Windows mv");
#endif
argList::addArgument("srcFile");
argList::addArgument("dstFile");
#include "setRootCase.H"
const fileName srcFile(fileName::validate(args[1]));
const fileName dstFile(fileName::validate(args[2]));
const fileName tmpFile(dstFile + Foam::name(pid()));
Info<< "src : " << srcFile << nl
<< "tmp : " << tmpFile << nl
<< "dst : " << dstFile << nl
<< nl;
bool cpOk = false, mvOk = false;
if (args.found("win1"))
{
const auto usage = argList::optionUsage.cfind("win1");
if (usage.good())
{
Info<< " " << (*usage).c_str() << nl;
}
cpOk = Foam::cp(srcFile, tmpFile);
mvOk = win_mv(tmpFile, dstFile);
}
else if (args.found("win2"))
{
const auto usage = argList::optionUsage.cfind("win2");
if (usage.good())
{
Info<< " " << (*usage).c_str() << nl;
}
cpOk = win_cp(srcFile, tmpFile);
mvOk = Foam::mv(tmpFile, dstFile);
}
else if (args.found("win3"))
{
const auto usage = argList::optionUsage.cfind("win3");
if (usage.good())
{
Info<< " " << (*usage).c_str() << nl;
}
cpOk = win_cp(srcFile, tmpFile);
mvOk = win_mv(tmpFile, dstFile);
}
else
{
Info<< " Foam cp, Foam mv" << nl;
cpOk = Foam::cp(srcFile, tmpFile);
mvOk = Foam::mv(tmpFile, dstFile);
}
Info<< nl
<< "cp: " << Switch(cpOk) << nl
<< "mv: " << Switch(mvOk) << nl;
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //
......@@ -952,7 +952,7 @@ bool Foam::Time::stopAt(const stopAtControls stopCtrl) const
bool Foam::Time::isAdjustTimeStep() const
{
return controlDict_.lookupOrDefault("adjustTimeStep", false) ? true : false;
return controlDict_.lookupOrDefault("adjustTimeStep", false);
}
......
......@@ -41,12 +41,9 @@ boundaryField
}
inlet
{
type turbulentDFSEMInlet;
delta 2;
nCellPerEddy 1;
mapMethod nearestCell;
value uniform (0 0 0);
}
#include "inlet/U"
outlet
{
type inletOutlet;
......
......@@ -10,52 +10,16 @@ FoamFile
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
inlet
{
bottomWall
{
type fixedValue;
value uniform (0 0 0);
}
topWall
{
type fixedValue;
value uniform (0 0 0);
}
sides_half0
{
type cyclic;
}
sides_half1
{
type cyclic;
}
inlet
{
type turbulentDigitalFilterInlet;
variant digitalFilter;
planeDivisions ( 64 70 );
L ( 0.78035508 0.31085352 0.342261 0.1728125 0.171875
0.22459375 0.172787596 0.171889998 0.224578995 );
patchNormalSpeed 20.133;
value uniform (0 0 0);
}
outlet
{
type inletOutlet;
inletValue uniform (0 0 0);
value uniform (0 0 0);
}
type turbulentDFSEMInlet;
delta 2;
nCellPerEddy 1;
mapMethod nearestCell;
}
// ************************************************************************* //
......@@ -10,52 +10,18 @@ FoamFile
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
inlet
{
bottomWall
{
type fixedValue;
value uniform (0 0 0);
}
topWall
{
type fixedValue;
value uniform (0 0 0);
}
sides_half0
{
type cyclic;
}
sides_half1
{
type cyclic;
}
inlet
{
type turbulentDigitalFilterInlet;
variant reducedDigitalFilter;
planeDivisions ( 64 70 );
L ( 0.78035508 0.31085352 0.342261 0.1728125 0.171875
0.22459375 0.172787596 0.171889998 0.224578995 );
patchNormalSpeed 20.133;
value uniform (0 0 0);
}
outlet
{
type inletOutlet;
inletValue uniform (0 0 0);
value uniform (0 0 0);
}
type turbulentDigitalFilterInlet;
variant digitalFilter;
planeDivisions ( 64 70 );
L ( 0.78035508 0.31085352 0.342261 0.1728125 0.171875
0.22459375 0.172787596 0.171889998 0.224578995 );
patchNormalSpeed 20.133;
}
// ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1906 |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
inlet
{
type turbulentDigitalFilterInlet;
variant reducedDigitalFilter;
planeDivisions ( 64 70 );
L ( 0.78035508 0.31085352 0.342261 0.1728125 0.171875
0.22459375 0.172787596 0.171889998 0.224578995 );
patchNormalSpeed 20.133;
}
// ************************************************************************* //
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
cleanCase0
\rm -rf results
\rm -rf constant/boundaryData/inlet 2>/dev/null
\rm -rf results 2>/dev/null
#------------------------------------------------------------------------------
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
# Compute test case with different synthetic inflow models
declare -a Models=(
"reducedDigitalFilter"
"digitalFilter"
"DFSEM"
)
# Test with different synthetic inflow models
modelTypes="reducedDigitalFilter digitalFilter DFSEM"
# Collect data in 'results' directory
[ -d "results" ] || mkdir results
restore0Dir
runApplication blockMesh
restore0Dir
# Compute (serial) and collect data
for modelType in $modelTypes
do
echo
echo "Running with model: $modelType"
(cd 0 && ln -sf "inlet.$modelType" inlet)
(cd constant/boundaryData && ln -sf "inlet.$modelType" inlet)
runApplication -s "$modelType" pimpleFoam
./createGraphs
# Collect data in 'results' directory
results="results/$modelType"
echo "Placing summary in $results"
mkdir -p "$results"
mv -f log.* *.png postProcessing "$results" 2>/dev/null
# Compute and collect data
for val in ${Models[@]}; do
echo "Running the case with the model: $val"
\cp 0/U.$val 0/U
\rm -rf constant/boundaryData/inlet
\cp -r constant/boundaryData/inlet.$val constant/boundaryData/inlet
runApplication pimpleFoam
gnuplot plot.patch
gnuplot plot.cell
mv postProcessing results/postProcessing.$val
mv stress* results/postProcessing.$val/.
mv log* results/postProcessing.$val/.
cleanTimeDirectories
cleanTimeDirectories
\rm -rf processor* >/dev/null 2>&1
done
#------------------------------------------------------------------------------
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
# Compute test case with different synthetic inflow models
declare -a Models=(
"reducedDigitalFilter"
"digitalFilter"
"DFSEM"
)
# Test with different synthetic inflow models
modelTypes="reducedDigitalFilter digitalFilter DFSEM"
# Collect data in 'results' directory
[ -d "results" ] || mkdir results
restore0Dir
runApplication blockMesh
restore0Dir
# Compute parallel and collect data
for val in ${Models[@]}; do
echo "Running the case with the model: $val"
\rm -f 0/U*
\cp 0.orig/U.$val 0/U
\rm -rf constant/boundaryData/inlet
\cp -r constant/boundaryData/inlet.$val constant/boundaryData/inlet
runApplication decomposePar
runParallel pimpleFoam
gnuplot plot.patch
gnuplot plot.cell
mv postProcessing results/postProcessing.$val
mv stress* results/postProcessing.$val/.
mv log* results/postProcessing.$val/.
cleanTimeDirectories
\rm -rf processor* > /dev/null 2>&1
# Compute (parallel) and collect data
for modelType in $modelTypes
do
echo
echo "Running with model: $modelType"
(cd 0 && ln -sf "inlet.$modelType" inlet)
(cd constant/boundaryData && ln -sf "inlet.$modelType" inlet)
runApplication -s "$modelType" decomposePar
runParallel -s "$modelType" pimpleFoam
./createGraphs
# Collect data in 'results' directory
results="results/$modelType"
echo "Placing summary in $results"
mkdir -p "$results"
mv -f log.* *.png postProcessing "$results" 2>/dev/null
cleanTimeDirectories
\rm -rf processor* >/dev/null 2>&1
done
#------------------------------------------------------------------------------
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
# Require gnuplot
command -v gnuplot >/dev/null 2>&1 || {
echo "gnuplot not found - skipping graph creation" 1>&2
exit 1
}
# The latestTime in postProcessing/inletSampling
timeDir=$(foamListTimes -case postProcessing/inletSampling -latestTime 2>/dev/null)
[ -n "$timeDir" ] || {
echo "No postProcessing/inletSampling found - skipping graph creation" 1>&2
exit 2
}
timeDir="postProcessing/inletSampling/$timeDir"
echo "Creating graphs"
gnuplot<<GNUPLOT
set terminal png size 1000,800 enhanced font "Helvetica,24"
set output 'stress-patch.png'
set xrange [0:1]
set yrange [-1:8]
......@@ -19,8 +42,26 @@ set linetype 6 lc rgb 'red' pi -8 pt 4 ps 1.5
set linetype 7 lc rgb 'blue' pi -8 pt 4 ps 1.5
set linetype 8 lc rgb 'green' pi -8 pt 4 ps 1.5
set title "Stress in cell"
input = "$timeDir/inletCell_UPrime2Mean.xy"
set output 'stress-cell.png'
plot \
input u 1:2 w lines t "<uu>" lt 1, \
input u 1:5 w lines t "<vv>" lt 2, \
input u 1:7 w lines t "<ww>" lt 3, \
input u 1:3 w lines t "<uv>" lt 4
set title "Stress on patch"
input = "$timeDir/inletPatch_UPrime2Mean.xy"
set output 'stress-patch.png'
plot \
"postProcessing/inletSampling/85/inletPatch_UPrime2Mean.xy" u 1:2 w lines t "<uu>" lt 1, \
"postProcessing/inletSampling/85/inletPatch_UPrime2Mean.xy" u 1:5 w lines t "<vv>" lt 2, \
"postProcessing/inletSampling/85/inletPatch_UPrime2Mean.xy" u 1:7 w lines t "<ww>" lt 3, \
"postProcessing/inletSampling/85/inletPatch_UPrime2Mean.xy" u 1:3 w lines t "<uv>" lt 4
input u 1:2 w lines t "<uu>" lt 1, \
input u 1:5 w lines t "<vv>" lt 2, \
input u 1:7 w lines t "<ww>" lt 3, \
input u 1:3 w lines t "<uv>" lt 4
GNUPLOT
#------------------------------------------------------------------------------
set terminal png size 1000,800 enhanced font "Helvetica,24"
set output 'stress-cell.png'
set xrange [0:1]
set yrange [-1:8]
set xlabel "Channel height"
set ylabel "<u_i u_i>"
set offset .05, .05
set style data linespoints
set grid
set linetype 1 lc rgb 'black' lw 2
set linetype 2 lc rgb 'red' lw 2
set linetype 3 lc rgb 'blue' lw 2
set linetype 4 lc rgb 'green' lw 2
set linetype 5 lc rgb 'black' pi -8 pt 4 ps 1.5
set linetype 6 lc rgb 'red' pi -8 pt 4 ps 1.5
set linetype 7 lc rgb 'blue' pi -8 pt 4 ps 1.5
set linetype 8 lc rgb 'green' pi -8 pt 4 ps 1.5
plot \
"postProcessing/inletSampling/85/inletCell_UPrime2Mean.xy" u 1:2 w lines t "<uu>" lt 1, \
"postProcessing/inletSampling/85/inletCell_UPrime2Mean.xy" u 1:5 w lines t "<vv>" lt 2, \
"postProcessing/inletSampling/85/inletCell_UPrime2Mean.xy" u 1:7 w lines t "<ww>" lt 3, \
"postProcessing/inletSampling/85/inletCell_UPrime2Mean.xy" u 1:3 w lines t "<uv>" lt 4
......@@ -45,59 +45,14 @@ timePrecision 8;
runTimeModifiable false;
adjustTimeStep false;
adjustTimeStep false;
// Allow 10% run-up before calculating mean
timeStart #calc #{ 0.1 * ${/endTime} #};
functions
{
fieldAverage1
{
type fieldAverage;
libs ("libfieldFunctionObjects.so");
enabled true;
writeControl writeTime;
timeStart 8.5;
restartOnRestart false;
fields
(
U
{
mean on;
prime2Mean on;
base time;
}
);
}
inletSampling