1. 31 Jan, 2019 2 commits
    • Mark Olesen's avatar
      ENH: add clip() method to GeometricField · 27981d42
      Mark Olesen authored
      27981d42
    • Mark Olesen's avatar
      ENH: minMax, minMaxMag as functions and field functions · c6ee663e
      Mark Olesen authored
      - Global functions are unary or combining binary functions, which are
        defined in MinMax.H (MinMaxOps.H).
      
        There are also global reduction functions (gMinMax, gMinMaxMag)
        as well as supporting 'Op' classes:
      
        - minMaxOp, minMaxEqOp, minMaxMagOp, minMaxMagEqOp
      
        Since the result of the functions represents a content reduction
        into a single MinMax<T> value (a min/max pair), field operations
        returning a field simply do not make sense.
      
      - Implemented for lists, fields, field-fields, DimensionedField,
        GeometricField (parallel reducing, with boundaries).
      
      - Since the minMax evaluates during its operation, this makes it more
        efficient for cases where both min/max values are required since it
        avoids looping twice through the data.
      
        * Changed GeometricField writeMinMax accordingly.
      
      ENH: clip as field function
      
      - clipping provides a more efficient, single-pass operation to apply
        lower/upper limits on single or multiple values.
      
        Examples,
      
          scalarMinMax limiter(0, 1);
      
          limiter.clip(value)
      
             -> returns a const-ref to the value if within the range, or else
                returns the appropriate lower/upper limit
      
          limiter.inplaceClip(value)
      
             -> Modifies the value if necessary to be within lower/upper limit
      
        Function calls
      
          clip(value, limiter)
      
             -> returns a copy after applying lower/upper limit
      
          clip(values, limiter)
      
             -> returns a tmp<Field> of clipped values
      c6ee663e
  2. 25 Jan, 2019 1 commit
  3. 16 Jan, 2019 1 commit
  4. 27 Nov, 2018 1 commit
    • Mark Olesen's avatar
      ENH: add non-const field access without triggering update counter (#1081) · 9935c9b7
      Mark Olesen authored
      - can now things like ref(), boundaryFieldRef(), primitiveFieldRef()
        with an optional argument that avoids triggering any update events
      
        Instead of
      
            Field<Type>& iF = const_cast<Field<Type>&>(fld.primitiveField());
      
        can now write
      
            Field<Type>& iF = fld.primitiveFieldRef(false);
      
        or simply
      
            auto& iF = fld.primitiveFieldRef(false);
      9935c9b7
  5. 12 Oct, 2018 1 commit
  6. 09 Oct, 2018 1 commit
  7. 05 Oct, 2018 2 commits
  8. 03 Apr, 2018 1 commit
    • Mark Olesen's avatar
      STYLE: more consistent use of dimensioned Zero · 5632ef2d
      Mark Olesen authored
      - when constructing dimensioned fields that are to be zero-initialized,
        it is preferrable to use a form such as
      
            dimensionedScalar(dims, Zero)
            dimensionedVector(dims, Zero)
      
        rather than
      
            dimensionedScalar("0", dims, 0)
            dimensionedVector("zero", dims, vector::zero)
      
        This reduces clutter and also avoids any suggestion that the name of
        the dimensioned quantity has any influence on the field's name.
      
        An even shorter version is possible. Eg,
      
            dimensionedScalar(dims)
      
        but reduces the clarity of meaning.
      
      - NB: UniformDimensionedField is an exception to these style changes
        since it does use the name of the dimensioned type (instead of the
        regIOobject).
      5632ef2d
  9. 07 Mar, 2018 1 commit
    • Mark Olesen's avatar
      ENH: cleanup tmp class (issue #639) · 96d45486
      Mark Olesen authored
      Improve alignment of its behaviour with std::shared_ptr
      
        - element_type typedef
        - swap, reset methods
      
      * additional reference access methods:
      
      cref()
          returns a const reference, synonymous with operator().
          This provides a more verbose alternative to using the '()' operator
          when that is desired.
      
              Mnemonic: a const form of 'ref()'
      
      constCast()
          returns a non-const reference, regardless if the underlying object
          itself is a managed pointer or a const object.
          This is similar to ref(), but more permissive.
      
              Mnemonic: const_cast<>
      
          Using the constCast() method greatly reduces the amount of typing
          and reading. And since the data type is already defined via the tmp
          template parameter, the type deduction is automatically known.
      
          Previously,
      
              const tmp<volScalarField>& tfld;
      
              const_cast<volScalarField&>(tfld()).rename("name");
              volScalarField& fld = const_cast<volScalarField&>(tfld());
      
          Now,
      
              tfld.constCast().rename("name");
              auto& fld = tfld.constCast();
      
      --
      
      BUG: attempts to move tmp value that may still be shared.
      
      - old code simply checked isTmp() to decide if the contents could be
        transfered. However, this means that the content of a shared tmp
        would be removed, leaving other instances without content.
      
      * movable() method checks that for a non-null temporary that is
        unique (not shared).
      96d45486
  10. 22 Sep, 2017 3 commits
    • Henry Weller's avatar
      reactingMultiphaseEulerFoam: Limited phase-fractions · 82ed8758
      Henry Weller authored
      for consistency with reactingTwoPhaseEulerFoam and to ensure correct operation
      of models requiring formal boundedness of phase-fractions.
      
      Resolves bug-report https://bugs.openfoam.org/view.php?id=2589
      82ed8758
    • Henry Weller's avatar
      made the clone function pure virtual · 1cd76515
      Henry Weller authored
      Avoids potential problems with derived classes which do not define a clone function.
      1cd76515
    • Andrew Heather's avatar
      INT: Integration of Mattijs' collocated parallel IO additions · 85f12ff5
      Andrew Heather authored
      Original commit message:
      ------------------------
      
      Parallel IO: New collated file format
      
      When an OpenFOAM simulation runs in parallel, the data for decomposed fields and
      mesh(es) has historically been stored in multiple files within separate
      directories for each processor.  Processor directories are named 'processorN',
      where N is the processor number.
      
      This commit introduces an alternative "collated" file format where the data for
      each decomposed field (and mesh) is collated into a single file, which is
      written and read on the master processor.  The files are stored in a single
      directory named 'processors'.
      
      The new format produces significantly fewer files - one per field, instead of N
      per field.  For large parallel cases, this avoids the restriction on the number
      of open files imposed by the operating system limits.
      
      The file writing can be threaded allowing the simulation to continue running
      while the data is being written to file.  NFS (Network File System) is not
      needed when using the the collated format and additionally, there is an option
      to run without NFS with the original uncollated approach, known as
      "masterUncollated".
      
      The controls for the file handling are in the OptimisationSwitches of
      etc/controlDict:
      
      OptimisationSwitches
      {
          ...
      
          //- Parallel IO file handler
          //  uncollated (default), collated or masterUncollated
          fileHandler uncollated;
      
          //- collated: thread buffer size for queued file writes.
          //  If set to 0 or not sufficient for the file size threading is not used.
          //  Default: 2e9
          maxThreadFileBufferSize 2e9;
      
          //- masterUncollated: non-blocking buffer size.
          //  If the file exceeds this buffer size scheduled transfer is used.
          //  Default: 2e9
          maxMasterFileBufferSize 2e9;
      }
      
      When using the collated file handling, memory is allocated for the data in the
      thread.  maxThreadFileBufferSize sets the maximum size of memory in bytes that
      is allocated.  If the data exceeds this size, the write does not use threading.
      
      When using the masterUncollated file handling, non-blocking MPI communication
      requires a sufficiently large memory buffer on the master node.
      maxMasterFileBufferSize sets the maximum size in bytes of the buffer.  If the
      data exceeds this size, the system uses scheduled communication.
      
      The installation defaults for the fileHandler choice, maxThreadFileBufferSize
      and maxMasterFileBufferSize (set in etc/controlDict) can be over-ridden within
      the case controlDict file, like other parameters.  Additionally the fileHandler
      can be set by:
      - the "-fileHandler" command line argument;
      - a FOAM_FILEHANDLER environment variable.
      
      A foamFormatConvert utility allows users to convert files between the collated
      and uncollated formats, e.g.
          mpirun -np 2 foamFormatConvert -parallel -fileHandler uncollated
      
      An example case demonstrating the file handling methods is provided in:
      $FOAM_TUTORIALS/IO/fileHandling
      
      The work was undertaken by Mattijs Janssens, in collaboration with Henry Weller.
      85f12ff5
  11. 29 Jun, 2017 1 commit
  12. 21 Jun, 2017 2 commits
  13. 26 May, 2017 1 commit
  14. 24 Apr, 2017 1 commit
  15. 22 Feb, 2017 1 commit
  16. 20 Dec, 2016 1 commit
  17. 05 Aug, 2016 1 commit
  18. 30 Apr, 2016 3 commits
    • Henry Weller's avatar
      GeometricField: Renamed internalField() -> primitiveField() and... · fe43b805
      Henry Weller authored
      GeometricField: Renamed internalField() -> primitiveField() and dimensionedInternalField() -> internalField()
      
      These new names are more consistent and logical because:
      
      primitiveField():
      primitiveFieldRef():
          Provides low-level access to the Field<Type> (primitive field)
          without dimension or mesh-consistency checking.  This should only be
          used in the low-level functions where dimensional consistency is
          ensured by careful programming and computational efficiency is
          paramount.
      
      internalField():
      internalFieldRef():
          Provides access to the DimensionedField<Type, GeoMesh> of values on
          the internal mesh-type for which the GeometricField is defined and
          supports dimension and checking and mesh-consistency checking.
      fe43b805
    • Henry Weller's avatar
      GeometricField::dimensionedInteralFieldRef() -> GeometricField::ref() · 68fb9a2b
      Henry Weller authored
      In order to simplify expressions involving dimensioned internal field it
      is preferable to use a simpler access convention.  Given that
      GeometricField is derived from DimensionedField it is simply a matter of
      de-referencing this underlying type unlike the boundary field which is
      peripheral information.  For consistency with the new convention in
      "tmp"  "dimensionedInteralFieldRef()" has been renamed "ref()".
      68fb9a2b
    • Henry Weller's avatar
      GeometricField::internalField() -> GeometricField::internalFieldRef() · e1e99674
      Henry Weller authored
      Non-const access to the internal field now obtained from a specifically
      named access function consistent with the new names for non-canst access
      to the boundary field boundaryFieldRef() and dimensioned internal field
      dimensionedInternalFieldRef().
      
      See also commit a4e2afa4
      e1e99674
  19. 28 Apr, 2016 1 commit
    • Henry Weller's avatar
      GeometricField::GeometricBoundaryField -> GeometricField::Boundary · 75ea7618
      Henry Weller authored
      When the GeometricBoundaryField template class was originally written it
      was a separate class in the Foam namespace rather than a sub-class of
      GeometricField as it is now.  Without loss of clarity and simplifying
      code which access the boundary field of GeometricFields it is better
      that GeometricBoundaryField be renamed Boundary for consistency with the
      new naming convention for the type of the dimensioned internal field:
      Internal, see commit a25a449c
      
      This is a very simple text substitution change which can be applied to
      any code which compiles with the OpenFOAM-dev libraries.
      75ea7618
  20. 27 Apr, 2016 1 commit
    • Henry Weller's avatar
      GeometricField: Rationalized and simplified access to the dimensioned internal field · a25a449c
      Henry Weller authored
      Given that the type of the dimensioned internal field is encapsulated in
      the GeometricField class the name need not include "Field"; the type
      name is "Internal" so
      
      volScalarField::DimensionedInternalField -> volScalarField::Internal
      
      In addition to the ".dimensionedInternalField()" access function the
      simpler "()" de-reference operator is also provided to greatly simplify
      FV equation source term expressions which need not evaluate boundary
      conditions.  To demonstrate this kEpsilon.C has been updated to use
      dimensioned internal field expressions in the k and epsilon equation
      source terms.
      a25a449c
  21. 26 Apr, 2016 1 commit
  22. 25 Apr, 2016 2 commits
  23. 23 Apr, 2016 1 commit
    • Henry Weller's avatar
      GeometricField: New non-const access function boundaryFieldRef() · c25b48a7
      Henry Weller authored
      There is a need to specify const or non-const access to a non-const
      object which is not currently possible with the "boundaryField()" access
      function the const-ness of the return of which is defined by the
      const-ness of the object for which it is called.  For consistency with
      the latest "tmp" storage class in which non-const access is obtained
      with the "ref()" function it is proposed to replace the non-const form
      of "boundaryField()" with "boundaryFieldRef()".
      
      Thanks to Mattijs Janssens for starting the process of migration to
      "boundaryFieldRef()" and providing a patch for the OpenFOAM and
      finiteVolume libraries.
      c25b48a7
  24. 24 Feb, 2016 1 commit
    • Henry Weller's avatar
      tmp: Improved reference count checks to provide better error diagnostics · 3a56ebf3
      Henry Weller authored
      in case of tmp misuse.
      
      Simplified tmp reuse pattern in field algebra to use tmp copy and
      assignment rather than the complex delayed call to 'ptr()'.
      
      Removed support for unused non-const 'REF' storage of non-tmp objects due to C++
      limitation in constructor overloading: if both tmp(T&) and tmp(const T&)
      constructors are provided resolution is ambiguous.
      
      The turbulence libraries have been upgraded and '-DCONST_TMP' option
      specified in the 'options' file to switch to the new 'tmp' behavior.
      3a56ebf3
  25. 12 Feb, 2016 1 commit
  26. 25 Jan, 2016 1 commit
    • mattijs's avatar
      ENH: glboal file handling: initial commit · c7848a72
      mattijs authored
      Moved file path handling to regIOobject and made it type specific so
      now every object can have its own rules. Examples:
      - faceZones are now processor local (and don't search up anymore)
      - timeStampMaster is now no longer hardcoded inside IOdictionary
        (e.g. uniformDimensionedFields support it as well)
      - the distributedTriSurfaceMesh is properly processor-local; no need
        for fileModificationChecking manipulation.
      c7848a72
  27. 20 Jan, 2016 1 commit
  28. 11 Jan, 2016 1 commit
  29. 10 Jan, 2016 1 commit
  30. 17 Nov, 2015 3 commits
    • mattijs's avatar
      ENH: parallel: overhaul of parallel mapping · 6e28b7fa
      mattijs authored
      - redistributePar to have almost (complete) functionality of decomposePar+reconstructPar
      - low-level distributed Field mapping
      - support for mapping surfaceFields (including flipping faces)
      - support for decomposing/reconstructing refinement data
      6e28b7fa
    • mattijs's avatar
      ENH: parallel: overhaul of parallel mapping · 1fe1f26c
      mattijs authored
      - redistributePar to have almost (complete) functionality of decomposePar+reconstructPar
      - low-level distributed Field mapping
      - support for mapping surfaceFields (including flipping faces)
      - support for decomposing/reconstructing refinement data
      1fe1f26c
    • mattijs's avatar
      ENH: parallel: overhaul of parallel mapping · 2f752590
      mattijs authored
      - redistributePar to have almost (complete) functionality of decomposePar+reconstructPar
      - low-level distributed Field mapping
      - support for mapping surfaceFields (including flipping faces)
      - support for decomposing/reconstructing refinement data
      2f752590