Commit Graph

25381 Commits

Author SHA1 Message Date
Mark Olesen
d38de84d21 ENH: bundle Pstream:: AllGather methods
- bundles frequently used 'gather/scatter' patterns more consistently.

  - combineAllGather     -> combineGather + broadcast
  - listCombineAllGather -> listCombineGather + broadcast
  - mapCombineAllGather  -> mapCombineGather + broadcast
  - allGatherList        -> gatherList + scatterList
  - reduce               -> gather + broadcast (ie, allreduce)

- The allGatherList currently wraps gatherList/scatterList, but may be
  replaced with a different algorithm in the future.

STYLE: PstreamCombineReduceOps.H is mostly unneeded now
2022-03-31 15:56:04 +02:00
Mark Olesen
e98acdc4fc ENH: extend type aliases to include geometric boundary fields (#2348)
STYLE: LduInterfaceFieldPtrsList as alias instead of a class

STYLE: define patch lists typedefs when defining the base patch

- eg, polyPatchList typedef within polyPatch.H

INT: relocate GeometricField::Boundary -> GeometricBoundaryField

- was internal to GeometricField but moving it outside simplifies
  forward declarations etc. Code adapted from openfoam.org
2022-03-30 16:36:03 +02:00
mattijs
39064f65e9 ENH: snappyHexMesh: consistent trigger logic. See #2379 2022-03-30 14:56:55 +01:00
sergio
35fef5faa6 STY: Updating headers 2022-03-25 11:09:18 -07:00
Andrew Heather
7ad164d535 TUT: Keyword updates 2022-03-24 14:07:16 +00:00
Andrew Heather
1ed88ddc3a STYLE: distributionModels - corrected compat version 2022-03-24 13:47:02 +00:00
Andrew Heather
5157016b23 ENH: Added missing turbulence switch 2022-03-24 13:36:33 +00:00
Andrew Heather
529f6aa022 COMP: Resolved compiler warnings 2022-03-24 13:36:06 +00:00
mattijs
aa9e870f28 STYLE: cpuCabinet: remove excess entries 2022-03-23 17:37:03 +00:00
mattijs
2ee0757364 BUG: processorLOD: handle 0 cells. Fixes #2421 2022-03-23 10:31:35 +00:00
mattijs
ea2bf0414d COMP: PatchTools: unused typedef 2022-03-17 16:01:23 +00:00
mattijs
9c7d265e4b ENH: distributedTriSurfaceMesh: work with flipped shells. Fixes #2405
Two problems:
- flipping inside snappyHexMesh is not done in a parallel
consistent way. So e.g. the octree-cached inside/outside information
has already been calculated. For now flipping of
distributedTriSurfaceMesh is disabled.
- octree-cached inside/outside information was using already
cached information and would only work for outwards pointing
volumes
2022-03-17 15:57:03 +00:00
Mark Olesen
55f287cd83 ENH: limitVelocity, report count and percent of cells/faces (#2414)
- percent of cells is taken relative to selection size.
- percent of faces is taken relative to the number of boundary faces
  that do not fix velocity themselves.

ENH: avoid correctBoundaryConditions() if values were not limited
2022-03-16 17:16:13 +01:00
Mark Olesen
4495db0302 ENH: avoid redundant IOobjectList use
- areaWrite and fileFieldSelection
2022-03-16 14:06:46 +01:00
Mark Olesen
24c0b30d48 ENH: mergePoints and patch gatherAndMerge improvements (#2402)
- when writing surface formats (eg, vtk, ensight etc) the sampled
  surfaces merge the faces/points originating from different
  processors into a single surface (ie, patch gatherAndMerge).

  Previous versions of mergePoints simply merged all points possible,
  which proves to be rather slow for larger meshes. This has now been
  modified to only consider boundary points, which reduces the number
  of points to consider. As part of this change, the reference point
  is now always equivalent to the min of the bounding box, which
  reduces the number of search loops. The merged points retain their
  original order.

- inplaceMergePoints version to simplify use and improve code
  robustness and efficiency.

ENH: make PrimitivePatch::boundaryPoints() less costly

- if edge addressing does not already exist, it will now simply walk
  the local face edges directly to define the boundary points.

  This avoids a rather large overhead of the full faceFaces,
  edgeFaces, faceEdges addressing.

  This operation is now more important since it is used in the revised
  patch gatherAndMerge.

ENH: topological merge for mesh-based surfaces in surfaceFieldValue
2022-03-16 13:44:58 +01:00
Mark Olesen
bf46b589cf ENH: add CircularBuffer container 2022-03-15 14:04:34 +01:00
Mark Olesen
079d5f2771 ENH: add triFace valid() method
- similar to edge valid(), true if vertices are unique, non-negative
2022-03-15 14:02:19 +01:00
Mark Olesen
46a1e7e21e GIT: missed change (rebase) to ensight manifold cell handling (#2396) 2022-03-13 22:53:33 +01:00
Mark Olesen
a22784ef52 CONFIG: set API level to 2202
- Pstream changes, coordSetWriters etc.
2022-03-13 22:38:26 +01:00
Mark Olesen
fd2544b27e Merge remote-tracking branch 'origin/master' into develop 2022-03-13 22:37:22 +01:00
Mark Olesen
963c98a65e SUBMODULE: update for external-solver (PETSc) compilation issues 2022-03-13 22:35:25 +01:00
Mark Olesen
327c43f3e8 ENH: identityOp as equivalent to std::identity (C++20)
- similar to how noOp was defined, but with perfect forwarding

STYLE: combine Swap into stdFoam

STYLE: capitalize FileOp, NegateOp template parameters
2022-03-13 22:35:18 +01:00
Mark Olesen
ed73bcbc33 TUT: update keywords, fix spurious annotated dictionary item (#2401) 2022-03-13 22:34:57 +01:00
Mark Olesen
f7cbb0672b ENH: globalIndex gather for PatchTools::gatherAndMerge (#2402)
- lower memory overhead, simpler code and eliminates need for
  ListListOps::combineOffset()

- optional handling of local faces/points for re-using in different
  contexts

STYLE: labelUList instead of labelList for globalMesh mergePoints

STYLE: adjust verbose information from mergePoints

- also report the current new-point location
2022-03-13 22:34:52 +01:00
Mark Olesen
6e509c10fc ENH: handle manifold cells in VTK, Ensight output (#2396)
- also disables PointData if manifold cells are detected.
  This is a partial workaround for volPointInterpolation problems
  with handling manifold cells.
2022-03-12 21:16:30 +01:00
mattijs
2d7f2c26be ENH: MeshObject for handling manifold mesh connectivity (#2396) 2022-03-12 21:16:30 +01:00
Mark Olesen
c4d4becbac ENH: -exclude-fields, -no-fields options for foamToEnsight, foamToVTK
- additional verbosity option for conversions

- ignore old `-finite-area` option and always convert available
  finiteArea mesh/fields unless `-no-finite-area` is specified (#2374)

ENH: simplify point offset handling for ensight output

- extend writing to include compact face/cell lists
2022-03-12 21:16:30 +01:00
Mark Olesen
730ce92b68 ENH: handle try-construct faMesh (#2399)
- a try/catch approach is not really robust enough (or even possible)
  since read failures likely do not occur on all ranks simultaneously.
  This leads to situations where the master has thrown an exception
  (and thus exiting the current routine) while other ranks are still
  waiting to receive data and the program blocks completely.

  Since this primarily affects data conversion routines such as
  foamToEnsight etc, treat similarly to lagrangian: check for the
  existence of essential files before proceeding or not. This is
  wrapped into a TryNew factory method:

      autoPtr<faMesh> faMeshPtr(faMesh::TryNew(mesh));
      if (faMeshPtr) ...
2022-03-12 21:16:30 +01:00
Mark Olesen
62fc3bbc33 STYLE: broadcast instead of combineScatter/listCombineScatter/mapCombineScatter
- these are the same thing now and 'broadcast' expresses the intention
  more directly/consistently
2022-03-12 21:16:30 +01:00
Mark Olesen
de8ef5332d ENH: additional gather/scatter modes for PstreamBuffers
- gather/scatter types of operations can avoid AllToAll communication
  and use simple MPI gather (or scatter) to establish the receive sizes.

  New methods: finishedGathers() / finishedScatters()
2022-03-12 21:16:30 +01:00
Mark Olesen
a674c9d373 ENH: use broadcasting streams to distribute uniform file content
BUG: masterUncollatedFileOperation checking of file-size

- used Foam:fileSize check to decide on scheduled/nonBlocking but this
  was being done on all ranks and subsequently broadcast.
  Now avoid unnecessary filesystem access on non-master ranks.
2022-03-12 21:16:30 +01:00
Mark Olesen
e9dbe60b60 ENH: improve read handling of schemes/solution
- both schemes and solutions data are treated as MUST_READ_IF_MODIFIED
  even if the requested readOption is nominally MUST_READ or
  READ_IF_PRESENT, but now delay this change.
2022-03-12 21:16:30 +01:00
Mark Olesen
e59ca1226e ENH: interface consistency in CStringList
- in preparation for broadcasting versions
2022-03-12 21:16:30 +01:00
Mark Olesen
71772f17ab ENH: use PstreamBuffers for finiteArea handling (as per volume) 2022-03-12 21:16:30 +01:00
Mark Olesen
0e2ef5db3b ENH: support finiteArea patch groups and constraint types (#2397)
- allows simpler handling of processor conditions etc.

ENH: modernize constructor for better alignment with polyPatch
2022-03-12 21:16:30 +01:00
Mark Olesen
bd37f0b441 ENH: reduce duplicate code for float/double Vector/Tensor
STYLE: pass value not reference to pTraits for basic types

STYLE: add solveVector typedef to vector.H
2022-03-12 21:16:29 +01:00
Mark Olesen
42fe95a6a9 ENH: minor de-clutter of List, DynamicList, DynamicField (#2385)
- do not need contruct or move assign from SortableList.
  Rarely (never) used and can simply treat like a normal list
  by applying shrink beforehand.

- make append() methods return void instead of returning self, which
  makes it easier to derive from. Having them return self was a bit of
  an original design mistake.
  Chaining appends do not actually occur anywhere. Even if they were
  to be used, would not want to rely on them (fear of slicing on any
  derived classes).

BUG: IndirectList iterator comparison loses constness
2022-03-12 21:16:29 +01:00
Mark Olesen
47cd988296 ENH: eliminate code duplication in Circulator/ConstCirculator 2022-03-12 21:16:29 +01:00
Mark Olesen
c1eb5413d5 ENH: IOobject hasHeaderClassName() method
- simple wrapper for (!headerClassName().empty()) when checking if
  reading was successful.
2022-03-12 21:16:29 +01:00
Mark Olesen
323daeda3c ENH: update CompactListList code
- eliminate redundant size_ accounting

- drop extra 'Container' template parameter and replace functionality
  with more flexible pack/unpack methods.
  There is also a pack() method that handles indirect lists of lists
  that can be used, for example, to pack a patch slice of faces.

  Drop the 'operator()' method in favour of unpack to expose and properly
  document the conversion. Should revisit the corresponding code in
  some places for optimization potential.

- align some method names with globalIndex:
  totalSize(), maxSize() etc
2022-03-12 21:16:29 +01:00
Mark Olesen
0cf02eb384 ENH: globalIndex with direct gather/broadcast
- less communication than gatherList/scatterList

ENH: refine send granularity in Pstream::exchange

STYLE: ensure PstreamBuffers and defaultCommsType agree

- simpler loops for lduSchedule
2022-03-12 21:16:29 +01:00
Mark Olesen
b8c3dc4e49 ENH: selection mechanism for cloudInfo function object (#2390)
- can restrict calculation of D32 and other spray properties to a
  subset of parcels. Uses a predicate selection mechanism similar to
  vtkCloud etc.

ENH: code cleanup in scalar predicates

- pass by value not reference in predicates
- additional assign() method to refactor common code
2022-03-12 21:16:29 +01:00
sergio
3ea8492a7c ENH: Adding hTabulated solid thermo 2022-03-11 10:58:44 -08:00
Andrew Heather
3f586f76f3 Merge branch 'feature-coordSets' into 'develop'
refactor coordSet writers (#2347)

See merge request Development/openfoam!524
2022-03-10 19:36:00 +00:00
Mark Olesen
010ebadb68 ENH: support 'probes' style of ensemble output for sampledSets (#2389)
- with the special setFormat "probes", all of the sampled sets are
  treated more similarly to probes, with an ensemble output to raw
  probed format.

  This is of course less useful when the number of sampled points
  becomes very large.
2022-03-10 19:45:20 +01:00
Mark Olesen
8a7221cf50 TUT: update tutorials to use dictionary-style sets
- can now specify sampled sets as dictionary entries instead of a list
  entry.
    can now use:  sets { ... }
    instead of:   sets ( ... );

  This is similar to sampled surfaces and makes it easier to
  manage with dictionary manipulation tools.

TUT: update to use writeTime instead of outputTime
2022-03-10 19:45:20 +01:00
Mark Olesen
87db3ce4d4 ENH: ensemble results for sampleSets (#2388)
- in v2112 the functionObject results were only delivering values from
  the last set listed (ie, overwritten).

  Now that the values are properly scoped by the name of the set itself
  Eg, `average(lines,p)` for the average for 'lines' set, existing
  workflows will break.

  It thus makes reasonble sense to also handle results without a
  qualifier as ensemble values.

      average(p)    // Ensemble average of all listed sets
2022-03-10 19:45:20 +01:00
Mark Olesen
c3e14ffdd5 ENH: refactor coordSet writers (#2347)
- the very old 'writer' class was fully stateless and always templated
  on an particular output type.

  This is now replaced with a 'coordSetWriter' with similar concepts
  as previously introduced for surface writers (#1206).

  - writers change from being a generic state-less set of routines to
    more properly conforming to the normal notion of a writer.

  - Parallel data is done *outside* of the writers, since they are used
    in a wide variety of contexts and the caller is currently still in
    a better position for deciding how to combine parallel data.

ENH: update sampleSets to sample on per-field basis (#2347)

- sample/write a field in a single step.

- support for 'sampleOnExecute' to obtain values at execution
  intervals without writing.

- support 'sets' input as a dictionary entry (as well as a list),
  which is similar to the changes for sampled-surface and permits use
  of changeDictionary to modify content.

- globalIndex for gather to reduce parallel communication, less code

- qualify the sampleSet results (properties) with the name of the set.
  The sample results were previously without a qualifier, which meant
  that only the last property value was actually saved (previous ones
  overwritten).

  For example,
  ```
    sample1
    {
        scalar
        {
            average(line,T) 349.96521;
            min(line,T)     349.9544281;
            max(line,T)     350;
            average(cells,T) 349.9854619;
            min(cells,T)    349.6589286;
            max(cells,T)    350.4967271;
            average(line,epsilon) 0.04947733869;
            min(line,epsilon) 0.04449639927;
            max(line,epsilon) 0.06452856475;
        }
        label
        {
            size(line,T)    79;
            size(cells,T)   1720;
            size(line,epsilon) 79;
        }
    }
  ```

ENH: update particleTracks application

- use globalIndex to manage original parcel addressing and
  for gathering. Simplify code by introducing a helper class,
  storing intermediate fields in hash tables instead of
  separate lists.

ADDITIONAL NOTES:

- the regionSizeDistribution largely retains separate writers since
  the utility of placing sum/dev/count for all fields into a single file
  is questionable.

- the streamline writing remains a "soft" upgrade, which means that
  scalar and vector fields are still collected a priori and not
  on-the-fly.  This is due to how the streamline infrastructure is
  currently handled (should be upgraded in the future).
2022-03-10 19:41:22 +01:00
mattijs
8a9ae839ce ENH: snappyHexMesh: leak closure testcase 2022-03-10 15:50:46 +00:00
mattijs
7fab29c8b1 BUG: snappyHexMesh: distributedTriSurfaceMesh. Fixes #2405 2022-03-10 14:49:50 +00:00