tutorial to set up a case for chtmultiregionfoam in openfoam 2.0.0

24
Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0 Arpit Singhal University of Luxembourg March 3, 2014 The OpenFOAM-solver chtMultiRegionFoam is meant to be used for heat- transfer between a solid and a fluid originally. As it does work with different regions of different properties, the setup is therefore different from the other OpenFOAM cases. This tutorial is written for setting up a basic case for chtMultiRegionFoam (cMRF) in an Openfoam. tutorial

Upload: arpit-singhal

Post on 19-Jun-2015

4.925 views

Category:

Software


41 download

DESCRIPTION

Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0

TRANSCRIPT

  • 1. Tutorial to set up a case for chtMultiRegionFoam in OpenFOAM 2.0.0 Arpit Singhal University of Luxembourg March 3, 2014 The OpenFOAM-solver chtMultiRegionFoam is meant to be used for heat- transfer between a solid and a uid originally. As it does work with dierent regions of dierent properties, the setup is therefore dierent from the other OpenFOAM cases. This tutorial is written for setting up a basic case for chtMultiRegionFoam (cMRF) in an Openfoam. tutorial

2. Contents 1 Contents 1 Introduction 2 2 Basic Workow 3 3 chtMRF Case Setup 4 3.1 Geometry and Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 Creating the Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2.1 Declaring the Regions . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2.2 Dening the Region by Zones . . . . . . . . . . . . . . . . . . . . 6 3.3 Splitting the Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.4 Necessary Files and Folders . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.4.1 Files setup by the user . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4.2 Files setup by OpenFOAM utilities . . . . . . . . . . . . . . . . . 15 4 Running the case 18 5 Using scripting 18 6 Appendice 21 tutorial 3. 1 Introduction 2 1 Introduction What is meant by multiregion multi physics modeling? It is inherently-coupled physics on disparate continua (e.g. uid, solid, dierent solids). In multiregion multi physics separate governing equations for each continuum/region are solved, as shown in 1.1 seperate governing equations will be solved for Region 1 and Region 2 depending upon their phase and represents a region interface. A region can be dened as coherent continum of the same phase. Figure 1.1: Example Generally two dierent approaches to solving such problems are distinguished: Monolithic: use same primitive variables, cast governing equations in terms of these variables, solve a single coupled matrix equation system Partitioned: separate governing equations, solve separate matrix equation systems, couple at the boundary interface, sub-iterate until coupled convergence is reached Here, we focus on partitioned approaches using OpenFOAMs multiregion function- ality (conjugate heat/mass transfer). For a multiregion partitioned solver the working steps are as follows: 1. Dene multiple meshes, one for each region 2. Create eld variables on each mesh 3. Solve separate governing equations on each mesh 4. Multiregion coupling at the boundary interface between regions 5. Subiterate until fully-coupled solution is reached tutorial 4. 2 Basic Workow 3 2 Basic Workow The basic work ow for a case setup is explained in g. 2.1. Create a Mesh of the full domain Dene regions inside the domain by selecting cells (using cellSet) Create cell zones from the created cellSets Split mesh into regions according to dened zones Basic work ow of a chtMultiRegion case Run case Prepare a general OpenFoam Case Create patches and elds for all regions changeDict Dene coupled patches Dene boundary conditions Dene region properties Figure 2.1: The case visualization in 2D tutorial 5. 3 chtMRF Case Setup 4 3 chtMRF Case Setup In this case we have four dierent regions (Air1, Air2, Solid1 and Solid2). The case is a simple set up with warm solid parts (Solid1 and Solid2), which are subjected to uid parts (Air1 and Air2). In this case we are not taking into account any airow (i.e. there is no inlet or outlet airow) but the buoyancy eects are considered, while solving the case. There will be heat transfer taking place between the warm solid parts and the uid parts. 3.1 Geometry and Mesh A graphical representation of the geometry can be seen in Fig. 3.1. The geometry is dened and then meshed using the OpenFOAM blockMesh tool. After Air2_to_Air1 Air1_to_Solid1 Air2_to_Solid2Solid1_to_Solid2 minX maxY maxX minY x y z Air1_to_Solid2 Figure 3.1: The case visualization in 2D running the blockMesh utility by typing $ blockMesh tutorial 6. 3.2 Creating the Regions 5 the mesh is created as depicted in g.3.2. Figure 3.2: Mesh of the full domain 3.2 Creating the Regions The regions are created in the domain depending upon their phases and they are created on the basis of the zones dened. 3.2.1 Declaring the Regions The regions and their property type are given in table 3.1. Table 3.1: Table for region properties Region Type Air1 uid Solid1 solid Air2 uid Solid2 solid Every region has several patches for which boundary or coupling conditions have to be specied. Thus, a patch can be of the following two types: boundary patch tutorial 7. 3.2 Creating the Regions 6 coupling patch A boundary patch is a regular type patch for which the user may dene any possible boundary condition available in OpenFOAM. Coupling patches are those patches where the solutions of the dierent regions are coupled. A coupling patch belongs to a so- called coupled patch pair. Such a pair consists of coinciding patches, one associated with each region. Table 3.2 lists all patches, the region they belong to and their type for the presented case. Table 3.2: Table of patches Patch Regions Type minX Air1, Solid1 boundary patch maxX Air2, Solid2 boundary patch minY Solid1, Solid2 boundary patch maxY Air1, Air2 boundary patch minZ Air1, Air2, Solid1, Solid2 boundary patch maxZ Air1, Air2, Solid1, Solid2 boundary patch Solid1 to Solid2 Solid1, Solid2 coupling patch Air1 to Solid1 Solid1, Air1 coupling patch Air1 to Solid2 Air1, Solid2 coupling patch Air1 to Air2 Air1, Air2 coupling patch Air2 to Solid2 Air2, Solid2 coupling patch 3.2.2 Dening the Region by Zones In the presented case the following regions must be created: Air1, Air2, Solid1 and Solid2. In order to create these regions the domain is divided into zones. To do so a subset of cells within the domain is selected to form a so-called cellSet. A cellSet is a random selection of cells from the domain, whereas a zone is a coherent subset of cells which nally can be used to dene a region. According to the cellSets four zones are dened which mark the dierent regions. In order to dene cellSets and cellZones a OpenFOAM commandline utility called setSet (topoSet in newer versions of OpenFOAM) is used. This tool requires a dictionary-le as input. Thus, within the case folder a le ending with .setSet must exist, which contains the settings used to dene the dierent cellSets/cellZones/regions in the domain. The following command starts the utility with the dictionary le that contains the commands to be executed. tutorial 8. 3.3 Splitting the Mesh 7 $ setSet batch makeCellSets . setSet An example of the dictionary le of the presented case is attached for simplicity (Listing 1). Listing 1: Extract from makeCellSets.setSet 1 c e l l S e t Solid1 new boxToCell (0 0 0 )(10 0.3 1) cellZoneSet Solid1 new setToCellZone Solid1 c e l l S e t Solid2 new boxToCell (10 0 0 )(20 0.5 1) 5 cellZoneSet Solid2 new setToCellZone Solid2 c e l l S e t Air1 new boxToCell (0 0.3 0 )(10 1 1) cellZoneSet Air1 new setToCellZone Air1 10 c e l l S e t Air2 new boxToCell (10 0.5 0 )(20 1 1) cellZoneSet Air2 new setToCellZone Air2 The rst two lines used in the .setSet le are briey explained as: c e l l S e t Solid1 new boxToCell (0 0 0) (10 0.3 1) This creates a new cellSet from a selection of cells. The new action shows it will be a new set. The name of the cellSet is Solid1 and the source for the cellSet-function is the boxToCell function. The numbers in brackets are parameters to the boxToCell- function: All cells contained within the rectangular box spanning between the points with coordinates (0 0 0) and (10 0.3 1) are selected for the cellSet Solid1. The line cellZoneSet Solid1 new setToCellZone Solid1 builds a cellZoneSet from an existing cellSet (here using Solid1). Thus, within the original domain a new zone has been created as depicted in g.3.3. This can be repeated in order to dene the desired zones representing regions within the domain. 3.3 Splitting the Mesh After the user has dened all necessary regions by creating zones for them as described in the previous section the mesh of the domain has to be split into several disjoint meshes. Note that the originally created mesh of the full domain will be used within the regions. tutorial 9. 3.4 Necessary Files and Folders 8 Figure 3.3: Zone created by cellZone from the entire domain Thus, proper grid resolution for the regional meshes must already be accounted for when creating the mesh of the full domain. $ splitMeshRegions cellZones overwrite The splitted mesh can be checked/visualized in paraview using the command as shown in the listing3.3 for Air1 $ paraFoam touch region Air1 Then in paraview, *.OpenFoam le should be loaded and can be visualized. The splitted mesh is shown in g. 3.4. 3.4 Necessary Files and Folders A typical OpenFOAM case directory consists of the following three folders: 0 constant system This general case structure is also kept for multiregion cases. The nal correct setup of a multiregion case is shown in g.3.5. Note that for each region a subdirectory containing tutorial 10. 3.4 Necessary Files and Folders 9 Figure 3.4: Splitted mesh the information for the particular region exists. Some of the les are manually created by the user while others are created by the OpenFOAM utilities. It is explained in the further sections in detail. In the following sections details about the individual directories will be given. 3.4.1 Files setup by the user When starting a new multiregion case the directories and their content highlighted in g. 3.6 must be created manually by the user according to the problem denition. 0 directory: First, manually bring in the necessary eld les as usual. For a chtMulti- RegionFoam case it is necessary to have les for:epsilon, k, p, p rgh, T, U, Ychar and Ypmma. These les are identical to what one would nd in any other chtMultiRegionFoam case /0-directory. For the solid regions:T, Ychar and Ypmma are necessary, whereas for the uid regions:epsilon, g, k, are the required les. constant directory: As is any standard OpenFOAM case, the constant folder must contain a standard polymesh directory, including a standard blockMeshDict-le, which tutorial 11. 3.4 Necessary Files and Folders 10 Figure 3.5: Final case structure of a multiregion case before running the solver tutorial 12. 3.4 Necessary Files and Folders 11 Files for all desired elds have to be created inside 0 directory by the user. Folders for each region must be created by the user. They should contain default les for any uid and solid. Denes the geometry and mesh the full domain. Denes desired regions and their property. Folders for each region must be created by the user. They should contain default les for any uid and solid. The user must add and edit the changeDictionaryDict Figure 3.6: Case structure as prepared by the user before running scripts tutorial 13. 3.4 Necessary Files and Folders 12 created by splitMesh: For each region a folder is created inside the 0 folder and all originally eld les from the 0 folder are copied into the region folders created by splitMesh: The mesh is splitted into the dierent regions and for every region a separate mesh is dened. created by changeDict: This le denes all the patches of a particular region. modied by changeDict: boundary, initial and coupling conditions for all elds are modied according to the changeDictionaryDict le of the region Figure 3.7: Files and directories created by OpenFOAM utilities tutorial 14. 3.4 Necessary Files and Folders 13 denes the full domain and its mesh. In contrast to a standard case, the les dening the other properties have to go into the dierent regional folders, i.e. transportProperties and thermophysicalProperties within the folders for uid regions and solidThermophysicalProperties within the folders for the solid regions as shown in listing3 and listing4 . Within the constant-folder it is necessary to produce all the region folders. Addition- ally within the constant folder it also is necessary to build (or copy from elsewhere) a le called regionProperties. This le assigns the physical phase to each region: Either uid or solid. An example for this le can be seen in the listing 2. Listing 2: Extract from regionProperties // // fluidRegionNames ( air1 air2 ) ; solidRegionNames ( s o l i d 1 s o l i d 2 ) ; // // Inside the solver fluidRegions and solidRegions are treated dierently by solving dierent governing equations for each phase. For the uid regions the default constant les should be included from any chtMulti- RegionFoam case/constant le. For the uid regions, the uid region should contain a thermophysicalProperties le containing the properties of the uid in the uid region. Like the Air1 thermophysicalProperties le contains: Listing 3: Extract from Air1 thermophysicalProperties le mixture { specie { nMoles 1; molWeight 2 8 . 9 ; } thermodynamics { tutorial 15. 3.4 Necessary Files and Folders 14 Cp 1000; Hf 0; } transport { mu 1.8 e 05; Pr 0 . 7 ; } } Similarly for solid regions a solidThermophysicalProperties must exist with the folder of the region, an example of such a solidThermophysicalProperties is given for Solid1: Listing 4: Extract from Solid1 solidThermophysicalProperties le constSolidThermoCoeffs { // thermo properties rho rho [1 3 0 0 0 0 0] 8000; Cp Cp [0 2 2 1 0 0 0] 450; K K [1 1 3 1 0 0 0] 80; // radiation properties kappa kappa [0 1 0 0 0 0 0] 0; sigmaS sigmaS [0 1 0 0 0 0 0] 0; emissivity emissivity [0 0 0 0 0 0 0] 0; // chemical properties Hf Hf [0 2 2 0 0 0 0] 0; } . . . . . . . . . . . } tutorial 16. 3.4 Necessary Files and Folders 15 system directory: In the system directory, once again set up the folders for the regions. In each region folder there should be a changeDictionaryDict le, which contains details about the necessary elds in the region like T, U, etc. Get a working controlDict file, for example from any tutorial into this folder. Af- terwards get a dummy fvSchemes file. This one is the same as any other fvSchemes, except for the dierent functions containing no values between the curly brackets. Fur- theron one has to get a fvSolution which only denes the outer correctors into this folder. It is optional to get a decomposeParDict le in case one opts for running parallel computations. For all of the dierent regional folders: Get a decomposeParDict file and get full fvSchemes and fvSolution les into the folders. For the latter ones, keep in mind that they will be dierent for the uids and for the solids. 3.4.2 Files setup by OpenFOAM utilities Most of the necessary case les and folder (This is highlighted in 3.7 for the dierent regions are created by automated generation using scripts and OpenFOAM utilities. The most important OpenFOAM utilities for a multiregion case are: splitMesh creates the polyMesh directories and their content within the constant/regionXYZ/ folders; additionally it creates 0/regionXYZ/ directories for all regions and copies all the eld les existing in the 0 directory into the 0/regionXYZ/ directories changeDictionary uses changeDictionaryDict les located in system/regionXYZ/ fold- ers to create initial, boundary and coupling conditions for all elds existing in 0/regionXYZ/ directory for all regions 0 directory: During execution of splitMesh the user created eld les are copied to the region subdirectories. As a next step unnecessary elds are removed for some regions (see extract given in Listing 5) and only those being part of the governing equations are kept (for example solids are assumed to be stationary, thus no velocity eld is required). Listing 5: Extract from Allrun script # remove f l u i d f i e l d s from s o l i d regions for i in s o l i d 1 s o l i d 2 do rm f 0/ $i /{mut , alphat , epsilon , k , p ,U, p rgh} tutorial 17. 3.4 Necessary Files and Folders 16 done # remove s o l i d f i e l d s from f l u i d regions for i in air1 air2 do rm f 0/ $i /{Ychar ,Ypmma} done Now the initial, boundary and coupling conditions for all elds in every region have to be specied appropriately. In order to do so the commandline utility changeDictionary is used. For example for the region Air1 the following line must be executed: $ changeDictionary region Air1 > log . changeDictionary . Air1 2>&1 The utility expects a le called changeDictionaryDict to exist within the folder system/Air/. Initial and coupling condition of the regions are dened with in changeDictionaryDict. Boundary conditions for the boundaries on the outside of the complete simulation do- main and boundary conditions or so-called coupling conditions for any of the coupling patches between the regions are built using the following scheme: For example for region Air1 in the changeDictionaryDict le contains the following code for the T eld: T { i n t e r n a l F i e l d uniform 300; boundaryField { . { type zeroGradient ; } a i r 1 t o . { type compressible : : turbulentTemperatureCoupledBaffleMixed ; neighbourFieldName T; . . . } tutorial 18. 3.4 Necessary Files and Folders 17 } } In this example the boundary patches are all treated the same (using a wildcard ".*") and are given the boundary conditions of type zeroGradient. For the coupling patch there is special kind of boundary condition required (here compressible::turbulentTemperatureCoupledBaffleMixed). The keyword neighbourFieldName indicates that the T eld of air1 is coupled to the T eld of the other regions. Similarly for all other regions, the initial, boundary and coupling conditions must be taken care of. In each of the region folders a le called cellToRegion is created during execution of the changeDictionaryDict command. The content of these les are like any other eld le but not associated to a specic eld. The BC type is either zeroGradient or calculated. Possibly other parameters would work as well, but only these have been tested. In any case every coupling patches to other regions have to be dened of type calculated whereas boundary patches (to outside of domain) are of type zeroGradient. for Air1 the entry used is shown by listing 6 Listing 6: Extract from cellToRegion boundaryField { maxY { type zeroGradient ; } minX { type zeroGradient ; } minZ { type zeroGradient ; } maxZ tutorial 19. 4 Running the case 18 { type zeroGradient ; } a i r 1 t o a i r 2 { type calculated ; value uniform 0; } a i r 1 t o s o l i d 2 { type calculated ; value uniform 0; } a i r 1 t o s o l i d 1 { type calculated ; value uniform 0; } } constant directory: In the constant folder, the splitMesh utility creates a seperate mesh for each region. This can be seen in the g. 3.7 4 Running the case After following each step as dened in the above tutorial. The case can be executed by using the command in the terminal as depicted in the listing. 4 $ chtMultiRegionFoam 5 Using scripting An Allrun can be explained as a script le which contains all the commands used to execute the case, for example in this case the Allrun used can be seen as in Listing tutorial 20. 5 Using scripting 19 shown in 5.1. So just executing the Allrun will now run the case, instead of typing each command seperately in the terminal. tutorial 21. 5 Using scripting 20 Figure 5.1: Allrun script tutorial 22. 6 Appendice 21 6 Appendice Listing 7: Extract from Allrun #!/bin/sh cd ${0%/} | | exit 1 # run from t h i s directory RUNPAR=YES ; # Source t u t o r i a l run functions . $WM PROJECT DIR/bin/ t o o l s /RunFunctions # (A) Defining geometry and mesh of f u l l domain runApplication blockMesh # (B) Creating the regions in two steps : # 1) defining c e l l S e t s # 2) creating cellZones which define the regions runApplication setSet batch makeCellSets . setSet # (C) S p l i t t i n g the mesh according to the defined regions runApplication splitMeshRegions cellZones overwrite exit # (D) Remove unnecessary f i e l d f i l e s from regions # # (D. 1 ) Remove f l u i d f i e l d s from s o l i d regions for i in s o l i d 1 s o l i d 2 do rm f 0/ $i /{mut , alphat , epsilon , k , p ,U, p rgh} done tutorial 23. 6 Appendice 22 # (D. 2 ) Remove s o l i d f i e l d s from f l u i d regions for i in air1 air2 do rm f 0/ $i /{Ychar ,Ypmma} done # (E) Define i n i t i a l , boundary and coupling conditions # for a l l f i e l d s # of a l l regions # # loop over regions for i in air1 air2 s o l i d 1 s o l i d 2 do changeDictionary region $i > log . changeDictionary . $i 2>&1 done # (F) RUN case # choose between PARALLEL or SEQUENTIAL RUN i f [ $RUNPAR = YES ] ; then echo Running in p a r a l l e l mode ; # Decompose for i in air1 air2 s o l i d 1 s o l i d 2 do decomposePar region $i > log . decomposePar . $i 2>&1 done # Run mpirun . openmpi np 4 chtMultiRegionFoam p a r a l l e l > log # Reconstruct for i in air1 air2 s o l i d 1 s o l i d 2 tutorial 24. 6 Appendice 23 do reconstructPar region $i > log . reconstructPar . $i2 >&1 done e l s e echo Running in sequential mode ; # Run on s i n g l e processor chtMultiRegionFoam > log f i echo echo creating f i l e s for paraview postprocessing echo for i in s o l i d 1 s o l i d 2 air1 air2 do paraFoam touch region $i done # endoff i l e tutorial