File: findCloudFields.H

package info (click to toggle)
openfoam 1812%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 220,284 kB
  • sloc: cpp: 1,038,902; sh: 14,536; ansic: 8,240; lex: 657; xml: 387; python: 300; awk: 212; makefile: 94; sed: 88; csh: 3
file content (94 lines) | stat: -rw-r--r-- 2,474 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// check all time directories for the following:

// The fields for each cloud:
HashTable<HashTable<word>> cloudFields;

// Identify if lagrangian data exist at any time step.
if (timeDirs.size() && doLagrangian)
{
    const fileName& baseDir = mesh.time().path();
    const fileName cloudPrefix(regionPrefix/cloud::prefix);

    Info<< "Searching for lagrangian ... " << flush;

    for (const instant& inst : timeDirs)
    {
        const word& timeName = inst.name();

        // DO NOT USE -->>  runTime.setTime(timeDirs[timeI], timeI);  <<--
        // It incurs a large overhead when done so frequently.

        fileNameList cloudDirs
        (
            readDir
            (
                baseDir/timeName/cloudPrefix,
                fileName::DIRECTORY
            )
        );

        for (fileName& cloudDir : cloudDirs)
        {
            const word cloudName(std::move(cloudDir));

            IOobjectList cloudObjs
            (
                mesh,
                timeName,
                cloudPrefix/cloudName
            );

            // Clouds require "coordinates".
            // The "positions" are for v1706 and lower.
            // - detect and remove since these are treated specially

            bool isCloud = false;
            if (cloudObjs.erase("coordinates"))
            {
                isCloud = true;
            }
            if (cloudObjs.erase("positions"))
            {
                isCloud = true;
            }

            if (isCloud)
            {
                // Save the cloud fields on a per cloud basis
                auto& fieldsPerCloud = cloudFields(cloudName);

                forAllConstIters(cloudObjs, fieldIter)
                {
                    const IOobject* io = *fieldIter;

                    // Field name/type
                    fieldsPerCloud.insert(io->name(), io->headerClassName());
                }
            }
        }
    }

    if (Pstream::parRun())
    {
        Pstream::mapCombineGather(cloudFields, HashTableOps::plusEqOp<word>());
        Pstream::mapCombineScatter(cloudFields);
    }

    if (cloudFields.empty())
    {
        Info<< "none detected." << endl;
    }
}


// Sorted list of cloud names
const wordList cloudNames(cloudFields.sortedToc());

if (cloudNames.size())
{
    // Complete the echo information - as flatOutput
    cloudNames.writeList(Info) << endl;
}


// ************************************************************************* //