Skip to content

Latest commit

 

History

History
194 lines (157 loc) · 5.05 KB

README.md

File metadata and controls

194 lines (157 loc) · 5.05 KB

dynamicAMR

Descrition

dynamic meshing with load balancing for hexahedral meshes in 3D and 2D

Library is based on:

Rettenmaier, Daniel, et al. "Load balanced 2D and 3D adaptive mesh refinement in OpenFOAM." SoftwareX 10 (2019): 100317.

link: https://www.sciencedirect.com/science/article/pii/S2352711018301699

port to the OpenFOAM+ version v1812 and v2006,v2012

refinement selection algoritm is based on foam extended 4.1

Getting Started

install OpenFOAM v1812

compile the library

./Allwmake

in case of v2006, v2012:

git checkout v2012
./Allwmake

Prerequisites

Requires OpenFOAM v1812 or v2006,v2012:

https://www.openfoam.com/download/release-history.php

Installing

 git clone https://github.com/HenningScheufler/multiDimAMR
 cd multiDimAMR
 ./Allwmake

Usage

add following lines to the contolDict:

libs
(
   "libdynamicLoadBalanceFvMesh.so"
);
or depending on the openfoam version
libs
(
   dynamicLoadBalanceFvMesh
);

cat decomposeParDict

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                   |
|   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

numberOfSubdomains 4;

method          scotch;

constraints
{
    refinementHistoryMultiDim
    {
        //- Decompose cells such that all cell originating from single cell
        //  end up on same processor
        type    refinementHistoryMultiDim;
    }
}

cat balanceParDict:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      balanceParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

numberOfSubdomains 4;

method          ptscotch; //clsutered //scotch

constraints
{
    refinementHistoryMultiDim
    {
        //- Decompose cells such that all cell originating from single cell
        //  end up on same processor
        type    refinementHistoryMultiDim;
    }
}
// ************************************************************************* //

refinement selection

the cells to refine are specified in the adaptCriteria dictionary

adaptCriteria
{
    type fieldBounds; // options fieldBounds geometric
    fieldName alpha.water;
    lowerBound 0.001;
    upperBound 0.999;
    nLayer 2; // extends refinement zone by two layers
    maxCellLevel 2; // default value very high number limits the maxium refinement level
    minCellLevel 0; // default value 0 specify minimum refinement level
    negate false; // default false // negates the selection
}

the composedAdaptCriteria enables us to combine the simple functions above by logial operator:

adaptCriteria
{

    type composedAdaptCriteria;
    operation or; // and or xor
    criteria
    (
        interface // refine to the maxRefinement
        {
            type fieldBounds;
            fieldName alpha.water;
            lowerBound 0.01;
            upperBound 0.99;
            nLayer     2;
        }
        fluid // refLvl 2 in fluid
        {
            type fieldBounds;
            fieldName alpha.water;
            lowerBound 0.01;
            upperBound 2;
            maxCellLevel 2;
        }
    );
}

This way we can specify a higher refinement level at the interface than in the fluid or in combination with the geometric refinement option chose only to refine in a given region. Note that the composedAdaptCriteria can also consists of multiple composedAdaptCriteria

Known Issues

  • boundary condition that use function e.g. uniformFixedValue crash if the table function is used see issue #2

    Solution: the issue can be resolved by switching to v2012

  • the load balancing crashes if a domain with no cells is created

    Solution: use more cells or try a different method in balanceParDict kahip seems to work better than ptscotch I

License

This project is licensed under the GPL v3 License - see the LICENSE.md file for details

Acknowledgments