Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Modularity

A modular way to proceed during the study, especially when a list of commands starts to be extentive is to use the make utility instead of creating a bash script. First, we have to write the case inside a Makefile at the root of our project similarly to:

All: mesh parprep run reconstruct view
mesh: baseMesh regionMesh electrolyteMesh splitMesh

###############

clean:
        (rm -rf *.log [1-9]* error output proc* 0 time *.foam log stop);
        (./src/Allclean)
###############

baseMesh:
        # snappyHexMesh for mesh generation
        (blockMesh)
        (surfaceFeatureExtract)
        (snappyHexMesh -overwrite)

        # redefine zones
        (rm -f constant/polyMesh/sets/*)
        (topoSet -dict system/topoSetDict.cellZones)
        (rm -f constant/polyMesh/*Zones)
        (setsToZones)

regionMesh:
        # split mesh
        (splitMeshRegions -cellZonesOnly -overwrite)

        # copy submeshes...
        (cp -r constant/air/polyMesh subRegions/air/constant/.)
        (cp -r constant/fuel/polyMesh subRegions/fuel/constant/.)
        (cp -r constant/interconnect0/polyMesh subRegions/interconnect0/constant/.)
        (cp -r constant/interconnect1/polyMesh subRegions/interconnect1/constant/.)

        # give space for electrolyte region
        (transformPoints -translate '(0 0  2e-5)' -case "subRegions/air")
        (transformPoints -translate '(0 0 -2e-5)' -case "subRegions/fuel")
        (transformPoints -translate '(0 0  2e-5)' -case "subRegions/interconnect0")
        (transformPoints -translate '(0 0 -2e-5)' -case "subRegions/interconnect1")

electrolyteMesh:
        # generate electrolyte region
        (extrudeMesh)
        (topoSet -dict system/topoSetDict.faceSets)
        (createPatch -overwrite -dict system/createPatchDict.electrolyte)
        (rm -f constant/polyMesh/sets/*)
        (topoSet -dict system/topoSetDict.electrolyte)
        (rm -f constant/polyMesh/*Zones)
        (setsToZones)
        (rm -f constant/polyMesh/sets/*)

        # merge mesh
        (mergeMeshes . subRegions/air -overwrite)
        (mergeMeshes . subRegions/fuel -overwrite)
        (mergeMeshes . subRegions/interconnect1 -overwrite)
        (mergeMeshes . subRegions/interconnect0 -overwrite)

        (rm -rf 0)

        # stitch mesh
        (stitchMesh -perfect interconnect1_to_fuel fuel_to_interconnect1 -overwrite)
        (stitchMesh -perfect interconnect0_to_air air_to_interconnect0 -overwrite)
        (stitchMesh -perfect fuel_to_air electrolyte_to_fuel -overwrite)
        (stitchMesh -perfect air_to_fuel electrolyte_to_air -overwrite)

        (rm -rf 0)

        (attachMesh)

splitMesh:
        (rm -f constant/polyMesh/sets/*)
        (topoSet -dict system/topoSetDict.splitMesh)
        (rm -f constant/polyMesh/*Zones)
        (setsToZones)

        (topoSet -dict system/topoSetDict.inletOutlet)
        (createPatch -overwrite -dict system/createPatchDict.inletOutlet)

        (splitMeshRegions -cellZonesOnly -overwrite)

        # air region
        #
        (topoSet -region air)
        (setsToZones -region air)

        # fuel region
        #
        (topoSet -region fuel)
        (setsToZones -region fuel)

        # electrolyte region
        #
        (topoSet -region electrolyte)
        (setsToZones -region electrolyte)

        (topoSet -dict system/topoSetDict.noCut)

        # delete
        #
        (rm -rf constant/interconnect0)
        (rm -rf constant/interconnect1)

        (rm -rf system/interconnect0)
        (rm -rf system/interconnect1)

        # mv 0 back
        (rm -rf 0)
        (cp -r src/0 .)

parallelPreparation:
        (rm -fr proc*)
        (./src/parallelPreparation.sh | tee log.parallelPreparation);

#############

parallelRun:
        (./src/parallelRun | tee log.parallelRun);
singleProcessRun:
        (fuelCellFoam | tee log.srun);

#############

reconstruct:
        (reconstructParMesh);
        (reconstructParMesh -region air -constant);
        (reconstructParMesh -region fuel -constant);
        (reconstructParMesh -region electrolyte -constant);
        (reconstructParMesh -region interconnect -constant);
        (reconstructPar);
        (reconstructPar -region air);
        (reconstructPar -region fuel);
        (reconstructPar -region electrolyte);
        (reconstructPar -region interconnect);
#############

view:
        (foamToVTK -latestTime);
        (foamToVTK -latestTime -region air);
        (foamToVTK -latestTime -region fuel);
        (foamToVTK -latestTime -region electrolyte);
        (foamToVTK -latestTime -region interconnect);
viewAll:
        (foamToVTK);
        (foamToVTK -region air);
        (foamToVTK -region fuel);
        (foamToVTK -region electrolyte);
        (foamToVTK -region interconnect);

It is possible to execute all the commands at once with:

make All

Otherwise, only portion of the study can be executed such as:

make baseMesh