Skip to content
Snippets Groups Projects
  1. Dec 18, 2023
    • Vaggelis Papoutsis's avatar
      ENH: added the option to stop the normalisation · e5d5e7b0
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      of the objective and constraint gradients in MMA, at a specific
      optimisation cycle
      e5d5e7b0
    • Vaggelis Papoutsis's avatar
      ENH: nullSpace will now perturb the design variables · bf18fb75
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      by a small amount, if all of them lay on the lower or upper bounds at
      the beginning of the optimisation, to avoid singular matrices when
      computing the update of the design variables.
      bf18fb75
    • Vaggelis Papoutsis's avatar
      ENH: flowRate and flowRatePartition objectives are now computed · e764f7b5
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      based on phi, instead of U & Sf
      e764f7b5
    • Vaggelis Papoutsis's avatar
      b5b48b66
    • Vaggelis Papoutsis's avatar
      74152080
    • Vaggelis Papoutsis's avatar
      8947735b
    • Vaggelis Papoutsis's avatar
      ENH: adjointRASModel will not crash if set to laminar · 2ad6c9f5
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      and the Jacobian of the objective function wrt the turbulence variables
      is called (rare/unorthodox case).
      
      Additionally, objectivePowerDissipation dissipation can now be used in
      topology optimisation, adding the necessary blockage dependency to it.
      2ad6c9f5
    • Vaggelis Papoutsis's avatar
      ENH: changes in topOVariablesBase and derived classes · 753a5343
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      - Building the iso-surface spliting fluid and solid parts in topology
        optimisation has been re-worked to obtain an iso-surface with unique
        point numbering
      - The mechanism behind marchingCells for dynamicTopODesignVariables has
        been slightly reworked
      753a5343
    • Vaggelis Papoutsis's avatar
      ENH: added a variant of betaMax that computes it · f35b4cc3
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      based on the product of the Reynolds and Darcy numbers
      f35b4cc3
    • Vaggelis Papoutsis's avatar
      29270158
    • Vaggelis Papoutsis's avatar
      ENH: added a normalisation mechanism in MMA · 6020fabc
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      The derivatives of the objective and constraint functions can optionally
      be normalised in each optimisation cycle, so that MMA does not put an
      excesive stress on the constraints, which can negatively affect the
      course of the optimisation
      6020fabc
    • Andrew Heather's avatar
      INT: integration updates · adaac725
      Andrew Heather authored and Andrew Heather's avatar Andrew Heather committed
      - Minor code style
      - virtual functions
      - added some noexcept
      adaac725
    • Vaggelis Papoutsis's avatar
      ENH: added references to topology optimisation headers · bd84860e
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      bd84860e
    • Vaggelis Papoutsis's avatar
      ENH: getters in objective are now const · 50d13c62
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      50d13c62
    • Vaggelis Papoutsis's avatar
    • Vaggelis Papoutsis's avatar
      TUT: added tutorials for topology optimisation · b435feff
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      A 1-Inlet-2-Outlet geometry is showcased for laminar and turbulent
      flows, set-up with different variants of porosity-based and
      level-set-based topology optimisation
      b435feff
    • Vaggelis Papoutsis's avatar
      ENH: added adjoint-based topology optimisation (topO) capabilities · b23b09fd
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      Both porosity-based and level-set-based topO frameworks are included
      through the topO and levelSet designVariables, respectively.
      
      Both frameworks work by manipulating an underlying field of design
      variables, defined in all cells of the computational domain. That field
      is then regularised through a Helmholtz-like filter, before being
      processed in a different way from the two topO frameworks (the
      porosity-based topO sharpens/projects it while the level-set-based topO
      computes signed distances around its zero iso-surface). The result of
      this processing is then fed into functions that define source terms to
      be added to the mean flow and turbulence model equations, to block
      off/solidify parts of the mesh that are counterproductive with respect
      to the objective function. These source terms are added through
      fvOptions.
      
      Since the designed walls are only simulated through source terms, the
      outcome of topO should be re-analyzed on a body-fitted grid, to quantify
      the actual gain in the objective function. Both topO frameworks output
      the designed wall in STL format which can be used, for instance with
      snappyHexMesh, to construct such a body fitted grid.
      b23b09fd
    • Vaggelis Papoutsis's avatar
      ENH: added an optional argument to the constructor of patchWave · 2b2c7830
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      This provides a list of faces (can be internal ones) to act as
      additional seeds for the wave algorithm. The default argument provides
      an empty list, so the behaviour of patchWave should not change.
      
      Useful in topology optimisation, for propagating the active design
      variables from the seed faces to the interior, with a given number of
      cells at a time.
      2b2c7830
    • Vaggelis Papoutsis's avatar
      ENH: changes in advectionDiffusionPatchDistMethod · 59bf69b9
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      - advectionDiffusion is frequently used within optimisation loops since
        it is differentiable. In shape optimisation, the re-computation of
        mesh distances is performed at the very beginning of a new
        optimisation cycle, due to inheriting from MeshObject. If the mesh
        quality is poor enough, the advectionDiffusion PDE might diverge and
        crash the run, before the problematic mesh is written to files for
        inspection. The default behaviour now is to check the mesh before
        solving the advectionDiffusion PDE and write the mesh points if some
        mesh check fails.
      - fvOptions can now be included in advectionDiffusion (necessary for
        topology optimisation of turbulent flows for models that include the
        distance field)
      - Minor changes in the numerical treatment of the diffusion term, to
        enhance stability
      59bf69b9
    • Vaggelis Papoutsis's avatar
      ENH: extened fvOptions to support sensitivity derivative · 58cfb58b
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      computations necessary in topology optimisation
      58cfb58b
    • Vaggelis Papoutsis's avatar
      ENH: overhaul of the adjoint optimisation library · b6a30fae
      Vaggelis Papoutsis authored and Andrew Heather's avatar Andrew Heather committed
      Parts of the adjoint optimisation library were re-designed to generalise
      the way sensitivity derivatives (SDs) are computed and to allow easier
      extension to primal problems other than the ones governed by
      incompressible flows. In specific:
      - the adjoint solver now holds virtual functions returning the part of
        SDs that depends only on the primal and the adjoint fields.
      - a new class named designVariables was introduced which, apart from
        defining the design variables of the optimisation problem and
        providing hooks for updating them in an optimisation loop, provides
        the part of the SDs that affects directly the flow residuals (e.g.
        geometric variations in shape optimisation, derivatives of source
        terms in topology optimisation, etc). The final assembly of the SDs
        happens here, with the updated sensitivity class acting as an
        intermediate.
      
      With the new structure, when the primal problem changes (for instance,
      passive scalars are included), the same design variables and sensitivity
      classes can be re-used for all physics, with additional contributions to
      the SDs being limited (and contained) to the new adjoint solver to be
      implemented. The old code structure would require new SD classes for
      each additional primal problem.
      
      As a side-effect, setting up a case has arguably become a bit easier and
      more intuitive.
      
      Additional changes include:
      ---------------------------
      
      - Changes in the formulation and computation of shape sensitivity derivatives
        using the E-SI approach. The latter is now derived directly from the
        FI approach, with proper discretization for the terms and boundary
        conditions that emerge from applying the Gauss divergence theorem used
        to transition from FI to E-SI. When E-SI and FI are based on the same
        Laplace grid displacement model, they are now numerically equivalent
        (the previous formulation proved the theoretical equivalence of the
        two approaches but numerical results could differ, depending on the
        case).
      - Sensitivity maps at faces are now computed based (and are deriving
        from) sensitivity maps at points, with a constistent point-to-face
        interpolation (requires the differentiation of volPointInterpolation).
      - The objective class now allocates only the member pointers that
        correspond to the non-zero derivatives of the objective w.r.t. the
        flow and geometric quantities, leading to a reduced memory footprint.
        Additionally, contributions from volume-based objectives to the
        adjoint equations have been re-worked, removing the need for
        objectiveManager to be virtual.
      - In constrained optimisation, an adjoint solver needs to be present for
        each constraint function. For geometric constraints though, no adjoint
        equations need to solved. This is now accounted for through the null
        adjoint solver and the geometric objectives which do not allocate
        adjoint fields for this kind of constraints, reducing memory
        requirements and file clutter.
      - Refactoring of the updateMethod to collaborate with the new
        designVariables. Additionally, all updateMethods can now read and
        write restart data in binary, facilitating exact continuation.
        Furthermore, code shared by various quasi-Newton methods (BFGS, DBFGS,
        LBFGS, SR1) has been organised in the namesake class. Over and above,
        an SQP variant capable of tackling inequality constraints has been
        added (ISQP, with I indicating that the QP problem in the presence of
        inequality constraints is solved through an interior point method).
        Inequality constraints can be one-sided (constraint < upper-value)
        or double-sided (lower-value < constraint < upper-value).
      - Bounds can now be defined for the design variables.
        For volumetricBSplines in specific, these can be computed as the
        mid-points of the control points and their neighbouring ones. This
        usually leads to better-defined optimisation problems and reduces the
        chances of an invalid mesh during optimisation.
      - Convergence criteria can now be defined for the optimisation loop
        which will stop if the relative objective function reduction over
        the last objective value is lower than a given threshold and
        constraints are satisfied within a give tolerance. If no criteria are
        defined, the optimisation will run for the max. given number of cycles
        provided in controlDict.
      - Added a new grid displacement method based on the p-Laplacian
        equation, which seems to outperform other PDE-based approaches.
      
      TUT: updated the shape optimisation tutorials and added a new one
      showcasing the use of double-sided constraints, ISQP, applying
      no-overlapping constraints to volumetric B-Splines control points
      and defining convergence criteria for the optimisation loop.
      b6a30fae
    • mattijs's avatar
      BUG: cyclicAMI: missing autoMap,rmap · ae8b654a
      mattijs authored
      ae8b654a
    • Andrew Heather's avatar
      Merge branch 'feature-fileOperation-nProcs' into 'develop' · dbacd7bc
      Andrew Heather authored
      ENH: fileOperation: fix fileOperation::nProcs to handle multiple candidates
      
      See merge request Development/openfoam!653
      dbacd7bc
    • Mattijs Janssens's avatar
    • Andrew Heather's avatar
      Merge branch 'feature-nonblockingGAMG' into 'develop' · 577f5844
      Andrew Heather authored
      ENH: cyclicAMI: add non-blocking for GAMG
      
      See merge request Development/openfoam!651
      577f5844
    • Mattijs Janssens's avatar
      ENH: cyclicAMI: add non-blocking for GAMG · 7a9dd4c0
      Mattijs Janssens authored and Andrew Heather's avatar Andrew Heather committed
      7a9dd4c0
    • Kutalmış Berçin's avatar
      80d7227c
  2. Dec 15, 2023
  3. Dec 13, 2023
  4. Dec 12, 2023