
[Sponsors] 
[blockMesh] Writing a blockMeshDict file with variables 

LinkBack  Thread Tools  Search this Thread  Display Modes 
December 23, 2015, 08:39 
Writing a blockMeshDict file with variables

#1 
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 10 
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 ) ); } Thanks in advance for any advice 

December 23, 2015, 08:44 

#2 
Senior Member

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: 127
Rep Power: 10 
@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: 127
Rep Power: 10 
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

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. 

December 23, 2015, 09:17 

#6 
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 10 
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) } ... 

December 23, 2015, 09:34 

#7 
Senior Member

Just
Code:
std::floor($xn) Code:
test #calc "std::floor($halfAngle/4)"; #calc "Info<< $test << endl"; Code:
... codeStream object compilation output ... 11 Creating curved edges Creating topology blocks ... 

December 23, 2015, 09:35 

#8 
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 10 
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 

December 14, 2016, 12:25 

#9 
New Member
Luca Franceschini
Join Date: Aug 2012
Posts: 29
Rep Power: 13 
Hello,
I was trying to implement something similar, but i have problems with negative variables. It seems i can decleare them but as soon i use them in the calc expression the blockMesh gives me an error. So in Code:
x1 30; //x1 30; x2 50; dx #calc "$x1"; //dx 10; If x1 is declared as negative and dx =10 , everything is ok. if x1 is declared as negative and dx as ´ #calc "$x1";´ i get an error. Does anybody knows the reason and a work around? Note that the real operation that i would like to do is something like Code:
nx #calc "std::floor( ($x2$x1)*$n )"; Thank you in advance. 

December 14, 2016, 22:17 

#10 
Senior Member
Join Date: Aug 2013
Posts: 407
Rep Power: 15 
Hi,
You need to have a space between the variables and the operator for it to recognize it as subtraction. Instead of: $x2$x1 So it should be: $x2  $x1 Not sure if this is documented, but this was what I found out when I was playing around with this feature. Hope this helps. Cheers, Antimony 

December 15, 2016, 06:47 

#11 
New Member
Luca Franceschini
Join Date: Aug 2012
Posts: 29
Rep Power: 13 
Correct,
This worked. Thank you 

July 20, 2017, 20:21 
Using Regular C++ syntax to write Blockmesh file

#12 
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 10 
hello everyone,
if i wanted to use regular C++ or objective C syntax to organize my code could I do that? for example Code:
class cPlane { // whatever you need }; class cSphere { int MyVariable; // whatever else you need }; class cObject { cPlane MyPlane; cSphere MySphere; // whetever else you need }; int main() { cObject MyObjects[99]; // whatever you need } i want to get practice writing in C++11 so that I can more easily ready the source code. I am working on a pretty complex blockmesh right now and would like to use oop in my code to try to help organize the shapes. Has anyone done this? Would I use #codestream for this. I am working my way through the manual. But found the codestream section a bit confusing... 

August 22, 2017, 23:38 

#13 
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 10 
Figured out how to do this. #include. The of manual says it all
Sent from my SMG930V using CFD Online Forum mobile app 

November 12, 2018, 11:56 
Error while using calc

#14 
Member
Join Date: Feb 2016
Posts: 32
Rep Power: 10 
Hi everyone!
I'm having lots of trouble with this functionality...Can someone help me please? I started with a very basic expression: xA 30; xU 20; acaso #calc "xA + xU"; and it gives the following error: Creating block mesh from "/home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/system/blockMeshDict" Using #calcEntry at line 33 in file "/home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/system/blockMeshDict" Using #codeStream with "/home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/dynamicCode/platforms/linux64GccDPInt32Opt/lib/libcodeStream_a9cfc2467f9de95ca529e46e98786f31497c cff1.so" Creating new library in "dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1/platforms/linux64GccDPInt32Opt/lib/libcodeStream_a9cfc2467f9de95ca529e46e98786f31497c cff1.so" Invoking "wmake s libso /home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1" wmake libso /home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1 /opt/openfoam6/wmake/wmake: riga 410: make: command not found /opt/openfoam6/wmake/wmake: riga 413: make: command not found wmake error: file 'Make/linux64GccDPInt32Opt/sourceFiles' could not be created in /home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1 > FOAM FATAL IO ERROR: Failed wmake "dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1/platforms/linux64GccDPInt32Opt/lib/libcodeStream_a9cfc2467f9de95ca529e46e98786f31497c cff1.so" file: /home/laj/OpenFOAM/laj6/run/interFoam/expo/expoBCTest/system/blockMeshDict from line 17 to line 32. From function static void (* Foam::functionEntries::codeStream::getFunction(con st Foam::dictionary&, const Foam::dictionary&))(Foam::Ostream&, const Foam::dictionary&) in file db/dictionary/functionEntries/codeStream/codeStream.C at line 218. FOAM exiting Any clue? Thank you very much!
__________________
Omnia per ipsum facta sunt, et sine ipso factum est nihil, quod factum est 

November 13, 2018, 02:40 

#15  
Senior Member
Zander Meiring
Join Date: Jul 2018
Posts: 125
Rep Power: 7 
Quote:
you need a dollar sign before all your variables when you call them, so: Code:
xA 30; xU 20; acaso #calc "$xA + $xU"; 

November 13, 2018, 05:55 
I tried but...

#16 
Member
Join Date: Feb 2016
Posts: 32
Rep Power: 10 
Hello!
I tried but it gave me the same error...Anyother ideas?
__________________
Omnia per ipsum facta sunt, et sine ipso factum est nihil, quod factum est 

April 2, 2019, 23:36 

#17 
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 10 
Make sure 2 add spaces aroundathematical characters such as +×÷/.


April 18, 2019, 22:06 
Creating a parametric array of geometries

#18 
New Member
pooyan
Join Date: Mar 2013
Location: Boston, US
Posts: 6
Rep Power: 12 
Hi everyone,
I am relatively new to OpenFOAM. I want to create an array of rectangular grooves in my geometry that are defined by some parameters (width, height, and spacing). From what I learned in this thread, I am able to use a while loop to create the required vertices for the grooves. However, I am having some issues when intend to create the blocks using hex inside a while loop. Below is my code; Code:
convertToMeters 0.001; plate_length 96; domain_height 30; a 1; //defines the spacing between each two grooves b 7; // defines the width of the grooves c 2; // defines the height of the grooves vertices ( (0 0 0) ($plate_length 0 0) ($plate_length $domain_height 0) (0 $domain_height 0) (0 0 1) ($plate_length 0 1) ($plate_length $domain_height 1) (0 $domain_height 1) #codeStream { codeInclude #{ #include "pointField.H" #}; code #{ label trenchNo =1; while (trenchNo <= $plate_length/($a+$b)) //the total number of the grooves is equal to $plate_length/($a+$b) { os << point ((trenchNo1)*($a+$b)+$a, 0, 0) << endl; os << point (trenchNo*($a+$b), 0, 0) << endl; os << point (trenchNo*($a+$b), $c, 0) << endl; os << point ((trenchNo1)*($a+$b)+$a, $c, 0) << endl; os << point ((trenchNo1)*($a+$b)+$a, 0, 1) << endl; os << point (trenchNo*($a+$b), 0, 1) << endl; os << point (trenchNo*($a+$b), $c, 1) << endl; os << point ((trenchNo1)*($a+$b)+$a, $c, 1) << endl; ++trenchNo; } #}; } ); blocks ( hex (0 1 2 3 4 5 6 7) (100 100 1) simpleGrading (1 1 1) #codeStream { codeInclude #{ #include "pointField.H" #}; code #{ label trenchNo = 1; while (trenchNo <= $plate_length/($a+$b)) //Here I want to create the block of each groove { label vertexNo {(trenchNo1)*8 + 8}; hex (vertexNo, vertexNo+1, vertexNo+2, vertexNo+3, vertexNo+4, vertexNo+5, vertexNo+6, vertexNo+7) (10 10 1) simpleGrading (1 1 1) ++trenchNo; } #}; } ); Code:
error: invalid initialization of reference of type ‘Foam::IOstream&’ from expression of type ‘Foam::label {aka int}’ In file included from /opt/openfoam6/src/OpenFOAM/lnInclude/Ostream.H:39:0, from /opt/openfoam6/src/OpenFOAM/lnInclude/UILListIO.C:27, from /opt/openfoam6/src/OpenFOAM/lnInclude/UILList.C:91, from /opt/openfoam6/src/OpenFOAM/lnInclude/UILList.H:383, from /opt/openfoam6/src/OpenFOAM/lnInclude/ILList.H:39, from /opt/openfoam6/src/OpenFOAM/lnInclude/IDLList.H:35, from /opt/openfoam6/src/OpenFOAM/lnInclude/entry.H:45, from /opt/openfoam6/src/OpenFOAM/lnInclude/dictionary.H:53, from codeStreamTemplate.C:29: /opt/openfoam6/src/OpenFOAM/lnInclude/IOstream.H:565:18: note: in passing argument 1 of ‘Foam::IOstream& Foam::hex(Foam::IOstream&)’ inline IOstream& hex(IOstream& io) ^~~ /home/pooyanni/OpenFOAM/pooyanni6/run/a1b1c1/system/blockMeshDict.#codeStream:101:107: error: expected ‘)’ before numeric constant /opt/openfoam6/wmake/rules/General/transform:25: recipe for target 'Make/linux64GccDPInt32Opt/codeStreamTemplate.o' failed make: *** [Make/linux64GccDPInt32Opt/codeStreamTemplate.o] Error 1 > FOAM FATAL IO ERROR: Failed wmake "dynamicCode/_7bf46a550e1a99fa827dba743e26405dd82708a9/platforms/linux64GccDPInt32Opt/lib/libcodeStream_7bf46a550e1a99fa827dba743e26405dd82708a9.so" file: /home/pooyanni/OpenFOAM/pooyanni6/run/a1b1c1/system/blockMeshDict from line 17 to line 73. From function static void (* Foam::functionEntries::codeStream::getFunction(const Foam::dictionary&, const Foam::dictionary&))(Foam::Ostream&, const Foam::dictionary&) in file db/dictionary/functionEntries/codeStream/codeStream.C at line 218. FOAM exiting 

Tags 
blockmeshdict, variable definition 
Thread Tools  Search this Thread 
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Custom Thermophysical Properties  wsmith02  OpenFOAM  4  June 1, 2023 15:30 
[Other] Adding solvers from DensityBasedTurbo to foamextend 3.0  Seroga  OpenFOAM Community Contributions  9  June 12, 2015 18:18 
SparceImage v1.7.x Issue on MAC OS X  rcarmi  OpenFOAM Installation  4  August 14, 2014 07:42 
[OpenFOAM] Annoying issue of automatic "Rescale to Data Range " with paraFoam/paraview 3.12  keepfit  ParaView  60  September 18, 2013 04:23 
OpenFOAM on MinGW crosscompiler hosted on Linux  allenzhao  OpenFOAM Installation  127  January 30, 2009 20:08 