Skip to content
Snippets Groups Projects
openfoam.md 6.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    OpenFOAM
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ========
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ##A free, open source CFD software package
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Introduction
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ----------------
    
    OpenFOAM is a free, open source CFD software package developed by [**OpenCFD Ltd**](http://www.openfoam.com/about)![external](../../img/external.png) at [**ESI Group**](http://www.esi-group.com/)![external](../../img/external.png) and distributed by the [**OpenFOAM Foundation **](http://www.openfoam.org/)![external](../../img/external.png). It has a large user base across most areas of engineering and science, from both commercial and academic organisations.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Homepage: <http://www.openfoam.com/>![external](../../img/external.png)
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ###Installed version
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Currently, several version compiled by GCC/ICC compilers in single/double precision with several version of openmpi are available on Anselm.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    For example syntax of available OpenFOAM module is:
    
    &lt; openfoam/2.2.1-icc-openmpi1.6.5-DP &gt;
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    this means openfoam version 2.2.1 compiled by ICC compiler with openmpi1.6.5 in double precision.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Naming convection of the installed versions is following:
    
    openfoam/&lt;>VERSION>&gt;-&lt;>COMPILER<span>&gt;-&lt;</span><span>openmpiVERSION</span><span>&gt;-&lt;</span><span>PRECISION</span><span>&gt;</span>
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    -   &lt;VERSION>&gt; - version of openfoam
    -   &lt;COMPILER&gt; - version of used compiler
    -   &lt;openmpiVERSION&gt; - version of used openmpi/impi
    -   &lt;PRECISION&gt; - DP/SP – double/single precision
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ###Available OpenFOAM modules
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    To check available modules use
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ module avail
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    In /opt/modules/modulefiles/engineering you can see installed engineering softwares:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        ------------------------------------ /opt/modules/modulefiles/engineering -------------------------------------------------------------
        ansys/14.5.x               matlab/R2013a-COM                                openfoam/2.2.1-icc-impi4.1.1.036-DP
        comsol/43b-COM             matlab/R2013a-EDU                                openfoam/2.2.1-icc-openmpi1.6.5-DP
        comsol/43b-EDU             openfoam/2.2.1-gcc481-openmpi1.6.5-DP            paraview/4.0.1-gcc481-bullxmpi1.2.4.1-osmesa10.0
        lsdyna/7.x.x               openfoam/2.2.1-gcc481-openmpi1.6.5-SP
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    For information how to use modules please [look here](../environment-and-modules/ "Environment and Modules ").
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Getting Started
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    -------------------
    
    To create OpenFOAM environment on ANSELM give the commands:
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ module load openfoam/2.2.1-icc-openmpi1.6.5-DP
    
        $ source $FOAM_BASHRC
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    !!! Note "Note"
    	Please load correct module with your requirements “compiler - GCC/ICC, precision - DP/SP”.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Create a project directory within the $HOME/OpenFOAM directory named >&lt;USER&gt;-&lt;OFversion&gt; and create a directory named run within it, e.g. by typing:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ mkdir -p $FOAM_RUN
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Project directory is now available by typing:
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ cd /home/<USER>/OpenFOAM/<USER>-<OFversion>/run
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    &lt;OFversion&gt; - for example &lt;2.2.1&gt;
    
    or
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ cd $FOAM_RUN
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Copy the tutorial examples directory in the OpenFOAM distribution to the run directory:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ cp -r $FOAM_TUTORIALS $FOAM_RUN
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Now you can run the first case for example incompressible laminar flow in a cavity.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Running Serial Applications
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    -------------------------------
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Create a Bash script >test.sh
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        #!/bin/bash
        module load openfoam/2.2.1-icc-openmpi1.6.5-DP
        source $FOAM_BASHRC
    
        # source to run functions
        . $WM_PROJECT_DIR/bin/tools/RunFunctions
    
        cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity
    
        runApplication blockMesh
        runApplication icoFoam
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Job submission
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ qsub -A OPEN-0-0 -q qprod -l select=1:ncpus=16,walltime=03:00:00 test.sh
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    For information about job submission please [look here](../resource-allocation-and-job-execution/job-submission-and-execution/ "Job submission").
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Running applications in parallel
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    -------------------------------------------------
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    Run the second case for example external incompressible turbulent flow - case - motorBike.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    First we must run serial application bockMesh and decomposePar for preparation of parallel computation.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    !!! Note "Note"
    	Create a Bash scrip test.sh:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        #!/bin/bash
        module load openfoam/2.2.1-icc-openmpi1.6.5-DP
        source $FOAM_BASHRC
    
        # source to run functions
        . $WM_PROJECT_DIR/bin/tools/RunFunctions
    
        cd $FOAM_RUN/tutorials/incompressible/simpleFoam/motorBike
    
        runApplication blockMesh
        runApplication decomposePar
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Job submission
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ qsub -A OPEN-0-0 -q qprod -l select=1:ncpus=16,walltime=03:00:00 test.sh
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    This job create simple block mesh and domain decomposition. Check your decomposition, and submit parallel computation:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    !!! Note "Note"
    	Create a PBS script testParallel.pbs:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        #!/bin/bash
        #PBS -N motorBike
        #PBS -l select=2:ncpus=16
        #PBS -l walltime=01:00:00
        #PBS -q qprod
        #PBS -A OPEN-0-0
    
        module load openfoam/2.2.1-icc-openmpi1.6.5-DP
        source $FOAM_BASHRC
    
        cd $FOAM_RUN/tutorials/incompressible/simpleFoam/motorBike
    
        nproc = 32
    
        mpirun -hostfile ${PBS_NODEFILE} -np $nproc snappyHexMesh -overwrite -parallel | tee snappyHexMesh.log
    
        mpirun -hostfile ${PBS_NODEFILE} -np $nproc potentialFoam -noFunctionObject-writep -parallel | tee potentialFoam.log
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        mpirun -hostfile ${PBS_NODEFILE} -np $nproc simpleFoam -parallel | tee simpleFoam.log
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    nproc – number of subdomains
    
    Job submission
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ qsub testParallel.pbs
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    Compile your own solver
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ----------------------------------------
    
    Initialize OpenFOAM environment before compiling your solver
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ module load openfoam/2.2.1-icc-openmpi1.6.5-DP
        $ source $FOAM_BASHRC
        $ cd $FOAM_RUN/
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Create directory applications/solvers in user directory
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ mkdir -p applications/solvers
        $ cd applications/solvers
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Copy icoFoam solver’s source files
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ cp -r $FOAM_SOLVERS/incompressible/icoFoam/ My_icoFoam
        $ cd My_icoFoam
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Rename icoFoam.C to My_icoFOAM.C
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ mv icoFoam.C My_icoFoam.C
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    Edit >*files* file in *Make* directory:
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        icoFoam.C
        EXE = $(FOAM_APPBIN)/icoFoam
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    and change to:
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
        My_icoFoam.C
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        EXE = $(FOAM_USER_APPBIN)/My_icoFoam
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    In directory My_icoFoam give the compilation command:
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```bash
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        $ wmake
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    ------------------------------------------------------------------------
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
     **Have a fun with OpenFOAM :)**