CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Native Meshers: blockMesh

Writing a blockMeshDict file with variables

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   December 23, 2015, 08:39
Default Writing a blockMeshDict file with variables
  #1
Member
 
Ariel Edesess
Join Date: Aug 2015
Posts: 45
Rep Power: 2
arieljeds is on a distinguished road
Hi there,
I'm trying to write a blockmesh file using variables for the vertices and the number of cells but I'm not quite sure how to do this. At the moment, I'm trying this:

Code:
convertToMeters 1;

x   20.0;	// Length of tank
y1  -3.0;	// Width of tank/2
y2   3.0;	// Width of tank/2
zf  -0.4;	// Water depth 
za   0.2;    	// Distance above free surface
L    3.6942;    // Wavelength 
n    5;	        // Number of cells per wavelength 

xn   ($x/$L)*$n;	// Calculating the number of cells
//yn    
//zn 

vertices        
(
    ( 0   $y1  $zf )	 // 0		
    ( $x  $y1  $zf )     // 1
    ( $x  $y2  $zf )	 // 2
    ( 0   $y2  $zf )	 // 3
   
    ( 0   $y1  $za )	 // 4 
    ( $x  $y1  $za )	 // 5
    ( $x  $y2  $za )	 // 6
    ( 0   $y2  $za )	 // 7    
);

blocks 
         
(
  hex (0 1 2 3 4 5 6 7) ($xn 10 10) simpleGrading (1 1 1) //(1 10 0.1)
);

edges           
(
);

boundary         
( 
   inlet
   {
       type patch;
       faces
   	(
       	 ( 0 3 7 4 )
   	);
   }
   
   outlet
   {
       type patch; 
       faces
   	(
          ( 1 2 6 5 )
   	);
   }
   
   atmosphere
   {
       type patch;
       faces
   	(
          ( 4 5 6 7 )
   	);
   }
   
   front
   {
       type symmetryPlane;
       faces
  	(
       	  ( 3 2 6 7 )
        );
   }
Perhaps unsurprisingly, I'm running into problems with the line where I am attempting to calculate xn. Does anyone know the syntax how I can do this? Or if it's possible at all to do a simple calculation in the blockMeshDict?

Thanks in advance for any advice
arieljeds is offline   Reply With Quote

Old   December 23, 2015, 08:44
Default
  #2
Senior Member
 
Alexey Matveichev
Join Date: Aug 2011
Location: Nancy, France
Posts: 1,301
Rep Power: 23
alexeym will become famous soon enoughalexeym will become famous soon enough
Hi,

Code:
$ cd $FOAM_TUTORIALS
$ grep -r '#calc' *
incompressible/simpleFoam/pipeCyclic/system/blockMeshDict:radHalfAngle    #calc "degToRad($halfAngle)";
incompressible/simpleFoam/pipeCyclic/system/blockMeshDict:y               #calc "$radius*sin($radHalfAngle)";
incompressible/simpleFoam/pipeCyclic/system/blockMeshDict:minY            #calc "-1.0*$y";
incompressible/simpleFoam/pipeCyclic/system/blockMeshDict:z               #calc "$radius*cos($radHalfAngle)";
incompressible/simpleFoam/pipeCyclic/system/blockMeshDict:minZ            #calc "-1.0*$z";
multiphase/interDyMFoam/ras/floatingObject/constant/dynamicMeshDict:    mass            #calc "$rho*$Lx*$Ly*$Lz";
$ less incompressible/simpleFoam/pipeCyclic/system/blockMeshDict
...
//- Half angle of wedge in degrees
halfAngle 45.0;

//- Radius of pipe [m]
radius 0.5;


radHalfAngle    #calc "degToRad($halfAngle)";
y               #calc "$radius*sin($radHalfAngle)";
minY            #calc "-1.0*$y";
z               #calc "$radius*cos($radHalfAngle)";
minZ            #calc "-1.0*$z";
...
alexeym is offline   Reply With Quote

Old   December 23, 2015, 08:49
Default
  #3
Member
 
Ariel Edesess
Join Date: Aug 2015
Posts: 45
Rep Power: 2
arieljeds is on a distinguished road
@alexeym - Thanks a lot. That's what I was looking for
arieljeds is offline   Reply With Quote

Old   December 23, 2015, 08:58
Default
  #4
Member
 
Ariel Edesess
Join Date: Aug 2015
Posts: 45
Rep Power: 2
arieljeds is on a distinguished road
Ok one more question on this.. Because the calculation I am making is going to be for the number of cells, I need to convert it to an integer. I'm having trouble finding an example of how to do this.

Any ideas?

Thanks again!
arieljeds is offline   Reply With Quote

Old   December 23, 2015, 09:11
Default
  #5
Senior Member
 
Alexey Matveichev
Join Date: Aug 2011
Location: Nancy, France
Posts: 1,301
Rep Power: 23
alexeym will become famous soon enoughalexeym will become famous soon enough
Well, if you take a look into src/OpenFOAM/db/dictionary/functionEntries/calcEntry/calcEntry.H, there is a note:

Code:
Note
    Internally this is just a wrapper around codeStream functionality - the
    #calc string gets used to construct a dictionary for codeStream.
So you can use usual C++ functions, for example, std::floor or std::ceil.
alexeym is offline   Reply With Quote

Old   December 23, 2015, 09:17
Default
  #6
Member
 
Ariel Edesess
Join Date: Aug 2015
Posts: 45
Rep Power: 2
arieljeds is on a distinguished road
Hi Alexey, thanks again for getting back to me so quickly. Ok so as I'm understanding it, the use of calc would be:

Code:
x     20.0; 
n = 5; 
L = 3.69;

xn  #calc "($x/$L)*n";
xn1 #calc "std::floor(float $xn)"; 

...

blocks 
{
    hex ( 0 1 2 3 4 5 6 7 ) (xn1 10 10) simpleGrading (1 1 1)
}

...
Is this correct?
arieljeds is offline   Reply With Quote

Old   December 23, 2015, 09:34
Default
  #7
Senior Member
 
Alexey Matveichev
Join Date: Aug 2011
Location: Nancy, France
Posts: 1,301
Rep Power: 23
alexeym will become famous soon enoughalexeym will become famous soon enough
Just

Code:
std::floor($xn)
If we take an example from tutorials (incompressible/simpleFoam/pipeCyclic) and add the lines:

Code:
test            #calc "std::floor($halfAngle/4)";
#calc "Info<< $test << endl";
output of blockMesh would be

Code:
... codeStream object compilation output ...
11
Creating curved edges
Creating topology blocks
...
So in your expressions you forget $ before n and used unnecessary float in function call.
alexeym is offline   Reply With Quote

Old   December 23, 2015, 09:35
Default
  #8
Member
 
Ariel Edesess
Join Date: Aug 2015
Posts: 45
Rep Power: 2
arieljeds is on a distinguished road
Hi Alexey,

I should've written back quicker... I messed around with it a bit and found my way to that syntax and have it working now.

thanks a lot again for your help!

Ariel
arieljeds is offline   Reply With Quote

Reply

Tags
blockmeshdict, variable definition

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Patches to compile OpenFOAM 2.2 on Mac OS X gschaider OpenFOAM Installation on Windows, Mac and other Unsupported Platforms 134 December 5, 2015 04:30
How to use finite area method in official OpenFOAM 2.2.0? Detian Liu OpenFOAM Meshing & Mesh Conversion 4 November 3, 2015 04:04
Adding solvers from DensityBasedTurbo to foam-extend 3.0 Seroga OpenFOAM Installation 9 June 12, 2015 17:18
"parabolicVelocity" in OpenFoam 2.1.0 ? sawyer86 OpenFOAM Running, Solving & CFD 21 February 7, 2012 12:44
OpenFOAM on MinGW crosscompiler hosted on Linux allenzhao OpenFOAM Installation 127 January 30, 2009 20:08


All times are GMT -4. The time now is 02:11.