ENH: add filtering version of dictionary copy

- can be useful when extracting portions of larger field files
This commit is contained in:
Mark Olesen
2021-04-07 14:45:59 +02:00
parent 100ae5c2bd
commit bb86eecdc4
7 changed files with 240 additions and 0 deletions

View File

@ -0,0 +1,3 @@
Test-dictionaryCopy.C
EXE = $(FOAM_USER_APPBIN)/Test-dictionaryCopy

View File

@ -0,0 +1 @@
EXE_INC =

View File

@ -0,0 +1,98 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
Application
Test-dictionaryCopy
Description
Test copying a dictionary with filtering
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "IOobject.H"
#include "IOstreams.H"
#include "IFstream.H"
#include "dictionaryContent.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
argList::noParallel();
argList::addArgument("dict .. dictN");
argList args(argc, argv, false, true);
const wordRes allow;
const wordRes deny
({
wordRe("boundary.*", wordRe::REGEX)
});
Info<< nl
<< "allow: " << flatOutput(allow) << nl
<< "deny: " << flatOutput(deny) << nl << nl;
if (args.size() <= 1)
{
const string dictFile = "testDictCopy";
IFstream is(dictFile);
dictionary input(is);
dictionary copied
(
dictionaryContent::copyDict
(
input,
allow,
deny
)
);
IOobject::writeDivider(Info);
input.writeEntry("input", Info);
copied.writeEntry("copied", Info);
}
for (label argi=1; argi < args.size(); ++argi)
{
const string& dictFile = args[argi];
IFstream is(dictFile);
dictionary input(is);
dictionary copied
(
dictionaryContent::copyDict
(
input,
allow,
deny
)
);
IOobject::writeDivider(Info);
input.writeEntry("input", Info);
copied.writeEntry("copied", Info);
}
IOobject::writeEndDivider(Info);
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,27 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2012 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object testDictCopy;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [ 1 2 -2 0 0 0 0 ];
internalField uniform 1;
boundaryField
{
inlet_1 { type patch; }
inlet_2 { type patch; }
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //