Commit Graph

457 Commits

Author SHA1 Message Date
50baac3c45 ENH: construct string types from Istream now explicit (#1033)
- this helps for trapping unguarded dictionary lookups.
2018-11-03 20:24:34 +01:00
f5af16d968 ENH: extractEulerianParticles - refactoring and robustness improvements 2018-11-02 11:22:17 +00:00
30dcac006f COMP: Allwmake: make -q work 2018-11-01 14:12:52 +00:00
07dafe7b0b STYLE: use range-for when looping dictionary entries.
- as part of the cleanup of dictionary access methods (c6520033c9)
  made the dictionary class single inheritance from IDLList<entry>.

  This eliminates any ambiguities for iterators and allows
  for simple use of range-for looping.

  Eg,
      for (const entry& e : topDict))
      {
          Info<< "entry:" << e.keyword() << " is dict:" << e.isDict() << nl;
      }

   vs

      forAllConstIter(dictionary, topDict, iter))
      {
          Info<< "entry:" << iter().keyword()
              << " is dict:" << iter().isDict() << nl;
      }
2018-10-19 13:08:24 +02:00
3b74512231 ENH: cleanup of Enum class
- more dictionary-like methods, enforce keyType::LITERAL for all
  lookups to avoid any spurious keyword matching.

- new readEntry, readIfPresent methods

- The get() method replaces the now deprecate lookup() method.

- Deprecate lookupOrFailsafe()
  Failsafe behaviour is now an optional parameter for lookupOrDefault,
  which makes it easier to tailor behaviour at runtime.

- output of the names is now always flatted without line-breaks.
  Thus,

     os << flatOutput(someEnumNames.names()) << nl;
     os << someEnumNames << nl;

  both generate the same output.

- Constructor now uses C-string (const char*) directly instead of
  Foam::word in its initializer_list.

- Remove special enum + initializer_list constructor form since
  it can create unbounded lookup indices.

- Removd old hasEnum, hasName forms that were provided during initial
  transition from NamedEnum.

- Added static_assert on Enum contents to restrict to enum or
  integral values.  Should not likely be using this class to enumerate
  other things since it internally uses an 'int' for its values.

  Changed volumeType accordingly to enumerate on its type (enum),
  not the class itself.
2018-10-18 12:57:32 +02:00
14a39405c2 ENH: simple dataCloud function object (issue #1044)
- writes positions and a single field (eg, diameter) in plain ASCII files,
  suitable for importing in a spreadsheet or manipulation with
  scripting tools.

- code integrated from
  https://develop.openfoam.com/Community/OpenFOAM-addOns
2018-10-17 17:37:23 +02:00
8fabc32539 ENH: simplify objectRegistry access names (issue #322)
New name:  findObject(), cfindObject()
  Old name:  lookupObjectPtr()

      Return a const pointer or nullptr on failure.

  New name:  findObject()
  Old name:  --

      Return a non-const pointer or nullptr on failure.

  New name:  getObjectPtr()
  Old name:  lookupObjectRefPtr()

      Return a non-const pointer or nullptr on failure.
      Can be called on a const object and it will perform a
      const_cast.

- use these updated names and functionality in more places

NB: The older methods names are deprecated, but continue to be defined.
2018-10-17 16:44:10 +02:00
1eba709319 ENH: Added new fieldExtents function object
Description
    Calculates the spatial minimum and maximum extents of a field

    The extents are derived from the bound box limits after identifying
    the locations where field values exceed the user-supplied threshold
    value.

Usage
    Example of function object specification:

    fieldExtents1
    {
        type        fieldExtents;
        libs        ("libfieldFunctionObjects.so");
        ...
        writeToFile yes;
        log         yes;
        fields      (alpha);
        threshold   0.5;
        patches     ();
    }

    Where the entries comprise:

        Property      | Description              | Required   | Default
        type          | type name: fieldExtents  | yes        |
        writeToFile   | write extents data to file | no       | yes
        log           | write extents data to standard output | no | yes
        internalField | Process the internal field | no       | yes
        threshold     | Field value to identify extents boundary | yes |
        referencePosition | Reference position   | no         | (0 0 0)
        fields        | list of fields to process | yes       |
        patches       | list of patches to process | no       | <all>

    Output data is written to the file \<timeDir\>/fieldExtents.dat

Note
    For non-scalar fields, the magnitude of the field is employed and
    compared to the threshold value.
2018-10-16 13:01:15 +01:00
873b2f0a9f STYLE: use explicit dictionary access for dictionaryEntry
- clarifies the meanings of get<T> etc, avoids later ambiguities.

ENH: simplify phaseProperties construction, add input checks
2018-10-16 09:58:49 +02:00
5c8a1b746d STYLE: use <case> instead of $FOAM_CASE expansion in more places 2018-10-15 21:19:13 +02:00
c6520033c9 ENH: rationalize dictionary access methods
- use keyType::option enum to consolidate searching options.
  These enumeration names should be more intuitive to use
  and improve code readability.

    Eg,   lookupEntry(key, keyType::REGEX);
    vs    lookupEntry(key, false, true);

  or

    Eg,   lookupEntry(key, keyType::LITERAL_RECURSIVE);
    vs    lookupEntry(key, true, false);

- new findEntry(), findDict(), findScoped() methods with consolidated
  search options for shorter naming and access names more closely
  aligned with other components. Behave simliarly to the
  methods lookupEntryPtr(), subDictPtr(), lookupScopedEntryPtr(),
  respectively. Default search parameters consistent with lookupEntry().

    Eg, const entry* e = dict.findEntry(key);
    vs  const entry* e = dict.lookupEntryPtr(key, false, true);

- added '*' and '->' dereference operators to dictionary searchers.
2018-10-15 16:16:12 +02:00
8eddcc072a ENH: avoid readScalar, readLabel etc from dictionary (#762, #1033)
- use the dictionary 'get' methods instead of readScalar for
  additional checking

     Unchecked:  readScalar(dict.lookup("key"));
     Checked:    dict.get<scalar>("key");

- In templated classes that also inherit from a dictionary, an additional
  'template' keyword will be required. Eg,

     this->coeffsDict().template get<scalar>("key");

  For this common use case, the predefined getXXX shortcuts may be
  useful. Eg,

     this->coeffsDict().getScalar("key");
2018-10-12 08:14:47 +02:00
fdf19d67a4 Merge branch 'feature-coordinateSystem' into 'develop'
coordinate system improvements

See merge request Development/OpenFOAM-plus!211
2018-10-11 16:32:03 +01:00
8d6f83e666 ENH: isLiteral() method for keyType and wordRe
- same as !isPattern(), but can be more readable.

- add wordRe enum state 'UNKNOWN', which has the identical value as
  'DETECT' but used for a return value.
2018-10-07 17:28:11 +02:00
6697bb4735 ENH: improve, simplify, rationalize coordinate system handling (issue #863)
Previously the coordinate system functionality was split between
coordinateSystem and coordinateRotation. The coordinateRotation stored
the rotation tensor and handled all tensor transformations.

The functionality has now been revised and consolidated into the
coordinateSystem classes. The sole purpose of coordinateRotation
is now just to provide a selectable mechanism of how to define the
rotation tensor (eg, axis-angle, euler angles, local axes) for user
input, but after providing the appropriate rotation tensor it has
no further influence on the transformations.

--

The coordinateSystem class now contains an origin and a base rotation
tensor directly and various transformation methods.

  - The origin represents the "shift" for a local coordinate system.

  - The base rotation tensor represents the "tilt" or orientation
    of the local coordinate system in general (eg, for mapping
    positions), but may require position-dependent tensors when
    transforming vectors and tensors.

For some coordinate systems (currently the cylindrical coordinate system),
the rotation tensor required for rotating a vector or tensor is
position-dependent.

The new coordinateSystem and its derivates (cartesian, cylindrical,
indirect) now provide a uniform() method to define if the rotation
tensor is position dependent/independent.

The coordinateSystem transform and invTransform methods are now
available in two-parameter forms for obtaining position-dependent
rotation tensors. Eg,

      ... = cs.transform(globalPt, someVector);

In some cases it can be useful to use query uniform() to avoid
storage of redundant values.

      if (cs.uniform())
      {
          vector xx = cs.transform(someVector);
      }
      else
      {
          List<vector> xx = cs.transform(manyPoints, someVector);
      }

Support transform/invTransform for common data types:
   (scalar, vector, sphericalTensor, symmTensor, tensor).

====================
  Breaking Changes
====================

- These changes to coordinate systems and rotations may represent
  a breaking change for existing user coding.

- Relocating the rotation tensor into coordinateSystem itself means
  that the coordinate system 'R()' method now returns the rotation
  directly instead of the coordinateRotation. The method name 'R()'
  was chosen for consistency with other low-level entities (eg,
  quaternion).

  The following changes will be needed in coding:

      Old:  tensor rot = cs.R().R();
      New:  tensor rot = cs.R();

      Old:  cs.R().transform(...);
      New:  cs.transform(...);

  Accessing the runTime selectable coordinateRotation
  has moved to the rotation() method:

      Old:  Info<< "Rotation input: " << cs.R() << nl;
      New:  Info<< "Rotation input: " << cs.rotation() << nl;

- Naming consistency changes may also cause code to break.

      Old:  transformVector()
      New:  transformPrincipal()

  The old method name transformTensor() now simply becomes transform().

====================
  New methods
====================

For operations requiring caching of the coordinate rotations, the
'R()' method can be used with multiple input points:

       tensorField rots(cs.R(somePoints));

   and later

       Foam::transformList(rots, someVectors);

The rotation() method can also be used to change the rotation tensor
via a new coordinateRotation definition (issue #879).

The new methods transformPoint/invTransformPoint provide
transformations with an origin offset using Cartesian for both local
and global points. These can be used to determine the local position
based on the origin/rotation without interpreting it as a r-theta-z
value, for example.

================
  Input format
================

- Streamline dictionary input requirements

  * The default type is cartesian.
  * The default rotation type is the commonly used axes rotation
    specification (with e1/e2/3), which is assumed if the 'rotation'
    sub-dictionary does not exist.

    Example,

    Compact specification:

        coordinateSystem
        {
            origin  (0 0 0);
            e2      (0 1 0);
            e3      (0.5 0 0.866025);
        }

    Full specification (also accepts the longer 'coordinateRotation'
    sub-dictionary name):

        coordinateSystem
        {
            type    cartesian;
            origin  (0 0 0);

            rotation
            {
                type    axes;
                e2      (0 1 0);
                e3      (0.5 0 0.866025);
            }
        }

   This simplifies the input for many cases.

- Additional rotation specification 'none' (an identity rotation):

      coordinateSystem
      {
          origin  (0 0 0);
          rotation { type none; }
      }

- Additional rotation specification 'axisAngle', which is similar
  to the -rotate-angle option for transforming points (issue #660).
  For some cases this can be more intuitive.

  For example,

      rotation
      {
          type    axisAngle;
          axis    (0 1 0);
          angle   30;
      }
  vs.
      rotation
      {
          type    axes;
          e2      (0 1 0);
          e3      (0.5 0 0.866025);
      }

- shorter names (or older longer names) for the coordinate rotation
  specification.

     euler         EulerRotation
     starcd        STARCDRotation
     axes          axesRotation

================
  Coding Style
================
- use Foam::coordSystem namespace for categories of coordinate systems
  (cartesian, cylindrical, indirect). This reduces potential name
  clashes and makes a clearer declaration. Eg,

      coordSystem::cartesian csys_;

  The older names (eg, cartesianCS, etc) remain available via typedefs.

- added coordinateRotations namespace for better organization and
  reduce potential name clashes.
2018-10-01 13:54:10 +02:00
6627515838 ENH: fieldMinMax function object - updated for case where there are no cells on a local processor, e.g. CHT 2018-10-03 13:06:31 +01:00
69f6f63810 ENH: add globalPath() to argList and TimePaths
- simply combines (rootPath()/globalCaseName())
2018-09-28 15:24:59 +02:00
3a641275d3 COMP: Allwmake: pass through targetType 2018-09-26 14:32:32 +01:00
54457c68b6 Merge remote-tracking branch 'origin/master' into develop 2018-09-21 16:01:16 +01:00
7ab57cc5d0 DEFEATURE: remove CloudToVTK function object (issue #985)
- superseded by the vtkCloud function object, which provides
  significantly more functionality and more versatile output
  (using the vtp format).
2018-09-19 21:13:13 +02:00
5f3f101b4e BUG: Doxygen corrections 2018-09-11 12:13:19 +01:00
065daa20ae STYLE: incorrect doxygen grouping for vtkCloud function object 2018-09-10 17:22:27 +02:00
1b76ff6001 BUG: vtkCloud suppresses output for empty clouds (closes #866)
- the original intention was to avoid vtp output when the clouds are
  empty anyhow. However, it is useful for post-processing to have
  clouds with zero parcels (eg, before the start of injection).

  Pruning of empty clouds is now an option in the vtkCloud dictionary
  controls, with the default being false (no pruning). This represents
  a non-breaking change in behaviour since it generates more output
  than previously.

  Example,
  {
      type    vtkCloud;
      //- Suppress writing of empty clouds (default: false)
      prune   true;
  }
2018-07-11 07:53:51 +02:00
6e35bcda70 ENH: Updated config for release v1806 2018-06-28 12:56:00 +01:00
ddd176bc1a ENH: Corrected header documentation 2018-06-26 17:33:00 +01:00
30b4eda7a4 TUT: update some old keywords found in tutorials
- functionObjectLibs -> libs
- redirectType -> name
- change deprecated writeCompression flags types to Switch.

- cleanup some trailing ';;' from some dictionaries
2018-06-26 14:18:52 +02:00
a410f52e6d COMP: handle unset WM_OSTYPE for cmake targets (issue #909)
- regularise referencing of OpenFOAM env variables, sources etc.
2018-06-26 09:48:57 +02:00
3d22c5c265 STYLE: use fileName::expand() instead of stringOps::inplaceExpand
- do not need the stringOps version if there is no dictionary context
2018-06-23 16:40:51 +02:00
45f4a8b9c5 ENH: bounding box clipping for ensightWrite function object (issue #973)
- for larger problems with a smaller region of interest, can apply a
  bounding to limit the size of the ensight geometry and fields created.

  Since the implementation uses a fvMeshSubset, there is an additional
  per-process memory overhead.

  A high output frequency should be avoided with moving meshes, since
  this indirectly forces a frequent update of the submesh.
2018-08-14 11:50:53 +02:00
c1964d7807 ENH: distinguish between face areaNormal/unitNormal in the code 2018-08-10 15:43:06 +02:00
1036cf9612 ENH: avoid raw dictionary lookup in functionObjects (issue #762)
Style changes:
    - use lookupObjectRef instead of using const_cast
    - use tmp::New factory
2018-08-04 00:23:18 +02:00
f8bf897ca3 STYLE: stabilityBlending: typos; line length. See also #875. 2018-06-21 11:55:10 +01:00
cbb1ff8680 STYLE: residuals function object - added header documentation 2018-06-20 12:26:49 +01:00
017213deca Merge branch 'develop-pre-release' of develop.openfoam.com:Development/OpenFOAM-plus into develop-pre-release 2018-06-20 16:44:35 -07:00
649149f9de ENH: Improvements to the log format and fix write function 2018-06-20 16:43:00 -07:00
f15be4d0b0 BUG: bad indexing in regionSizeDistribution function object (closes #888) 2018-06-20 13:51:30 +02:00
ca2a83d532 Merge remote-tracking branch 'origin/develop' into develop-pre-release 2018-06-20 01:56:41 +02:00
7bf7aaea91 ENH: Further enhancements to stabilizationSchemes 2018-06-19 12:04:27 -07:00
9001aa2440 Merge branch 'develop-pre-release' of develop.openfoam.com:Development/OpenFOAM-plus into develop-pre-release 2018-06-19 11:23:36 -07:00
a3a6768608 ENH: Adding additional entry to stabilizationSchemes.
Correcting tutorial and expanding documentation
2018-06-19 11:21:56 -07:00
5cd6e4bed4 ENH: report the function object name that causes the FatalError 2018-06-19 19:14:16 +02:00
0289582a75 Merge remote-tracking branch 'origin/master' into develop 2018-06-19 18:39:10 +02:00
18f3fadf9c STYLE: restrict vtkCloud output names to use time-index (issue #866)
- this provides easily sortable names.

  The time information is available via the corresponding .series
  file, which can also be loaded directly with ParaView 5.5 or later.

  For further redundancy, time information is saved in the first XML
  comment inside of the .vtp files. For example,

      <!-- cloud=limestoneCloud1 time=0.005 index=200 -->
2018-06-19 17:08:25 +02:00
5390c48b2d BUG: dictionary lookup of embedded coordinateSystem fails (fixes #879)
- also fix incorrect documentation in forces functionObject and
  interRegionExplicitPorositySource fvOption.
2018-06-16 00:29:41 +02:00
f9fe71815a STYLE: consistent use of '= delete' for removed constructors/assignments
- make the purpose more explicit, and reduces some work for the
  compiler as well.
2018-05-30 12:03:17 +02:00
6b6b36afd3 STYLE: revert bitSet/HashSet setMany() to set() method (issue #837)
- improves backward compatibility and more naming consistency.
  Retain setMany(iter1, iter2) to avoid ambiguity with the
  PackedList::set(index, value) method.
2018-05-29 17:38:02 +02:00
417a2f6a73 BUG: reference FO: allocate interpolator on all processors. Fixes #823. 2018-05-24 09:52:33 +01:00
8716ca25c0 ENH: sixDoFRigidBodyState relocated and code improvements. Fixes #711 2018-01-18 09:26:22 +00:00
73ce0ccbef DOC: Documentation updates 2018-01-11 14:32:39 +00:00
65833e6c22 BUG: pressure: generate calculated bcs early. Fixes #685. Ep 581. 2017-12-28 12:07:37 +00:00