1. 29 Jun, 2020 1 commit
  2. 24 Jun, 2020 1 commit
  3. 17 Jun, 2020 1 commit
  4. 02 Jun, 2020 1 commit
    • Mark Olesen's avatar
      ENH: unify use of dictionary method names · 3e43edf0
      Mark Olesen authored
      - previously introduced `getOrDefault` as a dictionary _get_ method,
        now complete the transition and use it everywhere instead of
        `lookupOrDefault`. This avoids mixed usage of the two methods that
        are identical in behaviour, makes for shorter names, and promotes
        the distinction between "lookup" access (ie, return a token stream,
        locate and return an entry) and "get" access (ie, the above with
        conversion to concrete types such as scalar, label etc).
      3e43edf0
  5. 06 May, 2020 1 commit
    • Mark Olesen's avatar
      COMP: use -iquotedir for including the local '.' directory · 595579e0
      Mark Olesen authored
      - adds into the include-quoted search list instead the general (-Idir)
        search list.
      
        * makes it less subject to ordering (since it will now generally be
          searched first) and makes it less subject to how duplicate removal
          is implemented. In some compilers (#1627), the last instance of
          a duplicate directory would be used and not the first instance.
      
        * removes clutter in some Make/options files
      
      COMP: add missing linkage libraries
      595579e0
  6. 19 Dec, 2019 2 commits
  7. 12 Dec, 2019 1 commit
    • Vaggelis Papoutsis's avatar
      ENH: New adjont shape optimisation functionality · b8632543
      Vaggelis Papoutsis authored
      The adjoint library is enhanced with new functionality enabling
      automated shape optimisation loops.  A parameterisation scheme based on
      volumetric B-Splines is introduced, the control points of which act as
      the design variables in the optimisation loop [1, 2].  The control
      points of the volumetric B-Splines boxes can be defined in either
      Cartesian or cylindrical coordinates.
      
      The entire loop (solution of the flow and adjoint equations, computation
      of sensitivity derivatives, update of the design variables and mesh) is
      run within adjointOptimisationFoam. A number of methods to update the
      design variables are implemented, including popular Quasi-Newton methods
      like BFGS and methods capable of handling constraints like loop using
      the SQP or constraint projection.
      
      The software was developed by PCOpt/NTUA and FOSS GP, with contributions from
      
      Dr. Evangelos Papoutsis-Kiachagias,
      Konstantinos Gkaragounis,
      Professor Kyriakos Giannakoglou,
      Andy Heather
      
      [1] E.M. Papoutsis-Kiachagias, N. Magoulas, J. Mueller, C. Othmer,
      K.C.  Giannakoglou: 'Noise Reduction in Car Aerodynamics using a
      Surrogate Objective Function and the Continuous  Adjoint Method with
      Wall Functions', Computers & Fluids, 122:223-232, 2015
      
      [2] E. M. Papoutsis-Kiachagias, V. G. Asouti, K. C. Giannakoglou,
      K.  Gkagkas, S. Shimokawa, E. Itakura: ‘Multi-point aerodynamic shape
      optimization of cars based on continuous adjoint’, Structural and
      Multidisciplinary Optimization, 59(2):675–694, 2019
      b8632543
  8. 11 Dec, 2019 1 commit
    • Andrew Heather's avatar
      ENH: add selectable update control/interval to pimpleFoam, rhoPimpleFoam · 87bba9ae
      Andrew Heather authored
      - Allows user-defined control of when the mesh motion occurs,
        which can be especially useful in situations where the mesh motion
        is much slower than any of the fluid physics.
      
        For example, in constant/dynamicMeshDict:
      
            updateControl   runTime;
            updateInterval  0.5;
      
        to have mesh motion triggered every 1/2 second.
      
        Note that the _exact_ time that the mesh motion actually occurs may
        be slightly differently since the "runTime" triggering is fuzzy in
        nature. It will trigger when the threshold has been crossed, which
        will depend on the current time-step size.
      87bba9ae
  9. 31 Oct, 2019 1 commit
  10. 16 Jul, 2019 1 commit
  11. 26 Jun, 2019 1 commit
  12. 17 Jun, 2019 1 commit
    • Vaggelis Papoutsis's avatar
      CONTRIB: New adjoint optimisation and tools · ecc1fb5e
      Vaggelis Papoutsis authored
      A set of libraries and executables creating a workflow for performing
      gradient-based optimisation loops. The main executable (adjointOptimisationFoam)
      solves the flow (primal) equations, followed by the adjoint equations and,
      eventually, the computation of sensitivity derivatives.
      
      Current functionality supports the solution of the adjoint equations for
      incompressible turbulent flows, including the adjoint to the Spalart-Allmaras
      turbulence model and the adjoint to the nutUSpaldingWallFunction, [1], [2].
      
      Sensitivity derivatives are computed with respect to the normal displacement of
      boundary wall nodes/faces (the so-called sensitivity maps) following the
      Enhanced Surface Integrals (E-SI) formulation, [3].
      
      The software was developed by PCOpt/NTUA and FOSS GP, with contributions from
      
      Dr. Evangelos Papoutsis-Kiachagias,
      Konstantinos Gkaragounis,
      Professor Kyriakos Giannakoglou,
      Andy Heather
      
      and contributions in earlier version from
      
      Dr. Ioannis Kavvadias,
      Dr. Alexandros Zymaris,
      Dr. Dimitrios Papadimitriou
      
      [1] A.S. Zymaris, D.I. Papadimitriou, K.C. Giannakoglou, and C. Othmer.
      Continuous adjoint approach to the Spalart-Allmaras turbulence model for
      incompressible flows. Computers & Fluids, 38(8):1528–1538, 2009.
      
      [2] E.M. Papoutsis-Kiachagias and K.C. Giannakoglou. Continuous adjoint methods
      for turbulent flows, applied to shape and topology optimization: Industrial
      applications. 23(2):255–299, 2016.
      
      [3] I.S. Kavvadias, E.M. Papoutsis-Kiachagias, and K.C. Giannakoglou. On the
      proper treatment of grid sensitivities in continuous adjoint methods for shape
      optimization. Journal of Computational Physics, 301:1–18, 2015.
      
      Integration into the official OpenFOAM release by OpenCFD
      ecc1fb5e
  13. 28 Apr, 2019 1 commit
  14. 03 Apr, 2019 1 commit
  15. 06 Feb, 2019 1 commit
  16. 11 Dec, 2018 2 commits
  17. 13 Dec, 2018 1 commit
    • Mark Olesen's avatar
      ENH: consolidate handling of mandatory/optional command arguments · 5d9e278e
      Mark Olesen authored
      - for some special cases we wish to mark command-line arguments as
        being optional, in order to do our own treatment. For example,
        when an arbitrary number of arguments should be allowed.
      
        Now tag this situation with argList::noMandatoryArgs().
        The argList::argsMandatory() query can then be used in any further
        logic, including the standard default argument checking.
      
      - with the new default check, can consolidate the special-purpose
      
            "setRootCaseNonMandatoryArgs.H"
      
        into the regular
      
            "setRootCase.H"
      
      - revert to a simple "setRootCase.H" and move all the listing related
        bits to a "setRootCaseLists.H" file. This leaves the information
        available for solvers, or whoever else wishes, without being
        introduced everywhere.
      
      - add include guards and scoping to the listing files and rename to
        something less generic.
      
           listOptions.H -> setRootCaseListOptions.H
           listOutput.H  -> setRootCaseListOutput.H
      5d9e278e
  18. 20 Nov, 2018 1 commit
    • Mark Olesen's avatar
      ENH: add read guard for dimensionedType constructors (#762) · dd87c983
      Mark Olesen authored
      - deprecate dimensionedType constructors using an Istream in favour of
        versions accepting a keyword and a dictionary.
      
        Dictionary entries are almost the exclusive means of read
        constructing a dimensionedType. By construct from the dictionary
        entry instead of doing a lookup() first, we can detect possible
        input errors such as too many tokens as a result of a input syntax
        error.
      
        Constructing a dimensionedType from a dictionary entry now has
        two forms.
      
        1.  dimensionedType(key, dims, dict);
      
            This is the constructor that will normally be used.
      
            It accepts entries with optional leading names and/or
            dimensions. If the entry contains dimensions, they are
            verified against the expected dimensions and an IOError is
            raised if they do not correspond. On conclusion, checks the
            token stream for any trailing rubbish.
      
        2.  dimensionedType(key, dict);
      
            This constructor is used less frequently.
      
            ...
      dd87c983
  19. 17 Oct, 2018 1 commit
    • sergio's avatar
      ENH: · 5daa38d5
      sergio authored
      Update of overRhoPimpleDyMFoam and overInterDyMFoam solvers.
      Adding corresponding tutorials with best possible settings
      The main effort was put on reducing pressure spikes as the
      stencil change with hole cells on the background mesh.
      5daa38d5
  20. 05 Oct, 2018 1 commit
  21. 04 Oct, 2018 1 commit
  22. 02 Oct, 2018 1 commit
  23. 27 Aug, 2018 1 commit
  24. 09 Aug, 2018 1 commit
  25. 25 Jul, 2018 1 commit
    • Mark Olesen's avatar
      ENH: fvMeshSubset improvements (issue #951) · dbe0db1d
      Mark Olesen authored
      - what was previously termed 'setLargeCellSubset()' is now simply
        'setCellSubset()' and supports memory efficient interfaces.
      
        The new parameter ordering avoids ambiguities caused by default
        parameters.
      
        Old parameter order:
      
            setLargeCellSubset
            (
                const labelList& region,
                const label currentRegion,
                const label patchID = -1,
                const bool syncCouples = true
            );
      
        New parameter order:
      
            setCellSubset
            (
                const label regioni,
                const labelUList& regions,
                const label patchID = -1,
                const bool syncCouples = true
            );
      
         And without ambiguity:
      
            setCellSubset
            (
                const labelUList& selectedCells,
                const label patchID = -1,
                const bool syncCouples = true
            );
      
      - support bitSet directly for specifying the selectedCells for
        memory efficiency and ease of use.
      
      - Additional constructors to perform setCellSubset() immediately,
        which simplifies coding.
      
        For example,
      
            meshParts.set
            (
                zonei,
                new fvMeshSubset(mesh, selectedCells)
            );
      
        Or even
      
            return autoPtr<fvMeshSubset>::New(mesh, selectedCells);
      dbe0db1d
  26. 05 Oct, 2018 1 commit
  27. 19 Jun, 2018 1 commit
  28. 10 Aug, 2018 1 commit
  29. 21 Jun, 2018 1 commit
  30. 20 Jun, 2018 1 commit
  31. 01 Jun, 2018 1 commit
    • Mark Olesen's avatar
      STYLE: reduced usage of Switch · 84b10921
      Mark Olesen authored
      - Since 'bool' and 'Switch' use the _identical_ input mechanism
        (ie, both accept true/false, on/off, yes/no, none, 1/0), the main
        reason to prefer one or the other is the output.
      
        The output for Switch is as text (eg, "true"), whereas for bool
        it is label (0 or 1). If the output is required for a dictionary,
        Switch may be appropriate. If the output is not required, or is only
        used for Pstream exchange, bool can be more appropriate.
      84b10921
  32. 21 Dec, 2017 1 commit
  33. 19 Dec, 2017 1 commit
  34. 27 Apr, 2018 1 commit
    • Mark Olesen's avatar
      ENH: make format of ExecutionTime = ... output configurable (issue #788) · dd8341f6
      Mark Olesen authored
      - controlled by the the 'printExecutionFormat' InfoSwitch in
        etc/controlDict
      
            // Style for "ExecutionTime = " output
            // - 0 = seconds (with trailing 's')
            // - 1 = day-hh:mm:ss
      
         ExecutionTime = 112135.2 s  ClockTime = 113017 s
      
         ExecutionTime = 1-07:08:55.20  ClockTime = 1-07:23:37
      
      - Callable via the new Time::printExecutionTime() method,
        which also helps to reduce clutter in the applications.
        Eg,
      
           runTime.printExecutionTime(Info);
      
        vs
      
           Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
               << "  ClockTime = " << runTime.elapsedClockTime() << " s"
               << nl << endl;
      
      --
      
      ENH: return elapsedClockTime() and clockTimeIncrement as double
      
      - previously returned as time_t, which is less portable.
      dd8341f6
  35. 28 Mar, 2018 1 commit
  36. 16 Mar, 2018 1 commit
    • Mark Olesen's avatar
      STYLE: more consistent use of dimensioned Zero · 2f86cdc7
      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).
      2f86cdc7
  37. 13 Mar, 2018 1 commit
    • Mark Olesen's avatar
      ENH: code reduction in PackedList, PackedBoolList (issue #751) · 5d1fb235
      Mark Olesen authored
      - eliminate iterators from PackedList since they were unused, had
        lower performance than direct access and added unneeded complexity.
      
      - eliminate auto-vivify for the PackedList '[] operator.
        The set() method provides any required auto-vivification and
        removing this ability from the '[]' operator allows for a lower
        when accessing the values. Replaced the previous cascade of iterators
        with simpler reference class.
      
      PackedBoolList:
      
      - (temporarily) eliminate logic and addition operators since
        these contained partially unclear semantics.
      
      - the new test() method tests the value of a single bit position and
        returns a bool without any ambiguity caused by the return type
        (like the get() method), nor the const/non-const access (like
        operator[] has). The name corresponds to what std::bitset uses.
      
      - more consistent use of PackedBoolList test(), set(), unset() methods
        for fewer operation and clearer code. Eg,
      
            if (list.test(index)) ...    |  if (list[index]) ...
            if (!list.test(index)) ...   |  if (list[index] == 0u) ...
            list.set(index);             |  list[index] = 1u;
            list.unset(index);           |  list[index] = 0u;
      
      - deleted the operator=(const labelUList&) and replaced with a setMany()
        method for more clarity about the intended operation and to avoid any
        potential inadvertent behaviour.
      5d1fb235
  38. 07 Mar, 2018 1 commit
    • Mark Olesen's avatar
      ENH: new bitSet class and improved PackedList class (closes #751) · bac943e6
      Mark Olesen authored
      - The bitSet class replaces the old PackedBoolList class.
        The redesign provides better block-wise access and reduced method
        calls. This helps both in cases where the bitSet may be relatively
        sparse, and in cases where advantage of contiguous operations can be
        made. This makes it easier to work with a bitSet as top-level object.
      
        In addition to the previously available count() method to determine
        if a bitSet is being used, now have simpler queries:
      
          - all()  - true if all bits in the addressable range are empty
          - any()  - true if any bits are set at all.
          - none() - true if no bits are set.
      
        These are faster than count() and allow early termination.
      
        The new test() method tests the value of a single bit position and
        returns a bool without any ambiguity caused by the return type
        (like the get() method), nor the const/non-const access (like
        operator[] has). The name corresponds to what std::bitset uses.
      
        The new find_first(), find_last(), find_next() methods provide a faster
        means of searching for bits that are set.
      
        This can be especially useful when using a bitSet to control an
        conditional:
      
        OLD (with macro):
      
            forAll(selected, celli)
            {
                if (selected[celli])
                {
                    sumVol += mesh_.cellVolumes()[celli];
                }
            }
      
        NEW (with const_iterator):
      
            for (const label celli : selected)
            {
                sumVol += mesh_.cellVolumes()[celli];
            }
      
            or manually
      
            for
            (
                label celli = selected.find_first();
                celli != -1;
                celli = selected.find_next()
            )
            {
                sumVol += mesh_.cellVolumes()[celli];
            }
      
      - When marking up contiguous parts of a bitset, an interval can be
        represented more efficiently as a labelRange of start/size.
        For example,
      
        OLD:
      
            if (isA<processorPolyPatch>(pp))
            {
                forAll(pp, i)
                {
                    ignoreFaces.set(i);
                }
            }
      
        NEW:
      
            if (isA<processorPolyPatch>(pp))
            {
                ignoreFaces.set(pp.range());
            }
      bac943e6