# Writing a blockMeshDict file with variables

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

 December 23, 2015, 08:39 Writing a blockMeshDict file with variables #1 Senior Member   ArielJ Join Date: Aug 2015 Posts: 116 Rep Power: 3 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

 December 23, 2015, 08:44 #2 Senior Member   Alexey Matveichev Join Date: Aug 2011 Location: Nancy, France Posts: 1,423 Rep Power: 25 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"; ...```

 December 23, 2015, 08:49 #3 Senior Member   ArielJ Join Date: Aug 2015 Posts: 116 Rep Power: 3 @alexeym - Thanks a lot. That's what I was looking for

 December 23, 2015, 08:58 #4 Senior Member   ArielJ Join Date: Aug 2015 Posts: 116 Rep Power: 3 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!

 December 23, 2015, 09:11 #5 Senior Member   Alexey Matveichev Join Date: Aug 2011 Location: Nancy, France Posts: 1,423 Rep Power: 25 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.

 December 23, 2015, 09:17 #6 Senior Member   ArielJ Join Date: Aug 2015 Posts: 116 Rep Power: 3 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?

 December 23, 2015, 09:34 #7 Senior Member   Alexey Matveichev Join Date: Aug 2011 Location: Nancy, France Posts: 1,423 Rep Power: 25 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. Mojtaba.a and Milica like this.

 December 23, 2015, 09:35 #8 Senior Member   ArielJ Join Date: Aug 2015 Posts: 116 Rep Power: 3 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

 Tags blockmeshdict, variable definition

 Thread Tools Display Modes Linear Mode

 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 OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post gschaider OpenFOAM Installation on Windows, Mac and other Unsupported Platforms 134 December 5, 2015 04:30 Detian Liu OpenFOAM Meshing & Mesh Conversion 4 November 3, 2015 04:04 Seroga OpenFOAM Installation 9 June 12, 2015 17:18 sawyer86 OpenFOAM Running, Solving & CFD 21 February 7, 2012 12:44 allenzhao OpenFOAM Installation 127 January 30, 2009 20:08

All times are GMT -4. The time now is 10:26.