|
[Sponsors] | |||||
[blockMesh] Writing a blockMeshDict file with variables |
24Likes
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
|
|
|
#1 |
|
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 12 ![]() |
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 |
|
|
|
|
|
|
|
|
#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"; ... |
|
|
|
|
|
|
|
|
#3 |
|
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 12 ![]() |
@alexeym - Thanks a lot. That's what I was looking for
|
|
|
|
|
|
|
|
|
#4 |
|
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 12 ![]() |
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! |
|
|
|
|
|
|
|
|
#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.
|
|
|
|
|
|
|
|
|
#6 |
|
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 12 ![]() |
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)
}
...
|
|
|
|
|
|
|
|
|
#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 ... |
|
|
|
|
|
|
|
|
#8 |
|
Senior Member
ArielJ
Join Date: Aug 2015
Posts: 127
Rep Power: 12 ![]() |
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 |
|
|
|
|
|
|
|
|
#9 |
|
New Member
Luca Franceschini
Join Date: Aug 2012
Posts: 29
Rep Power: 15 ![]() |
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. |
|
|
|
|
|
|
|
|
#10 |
|
Senior Member
Join Date: Aug 2013
Posts: 407
Rep Power: 17 ![]() |
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 |
|
|
|
|
|
|
|
|
#11 |
|
New Member
Luca Franceschini
Join Date: Aug 2012
Posts: 29
Rep Power: 15 ![]() |
Correct,
This worked. Thank you |
|
|
|
|
|
|
|
|
#12 |
|
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 11 ![]() |
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... |
|
|
|
|
|
|
|
|
#13 |
|
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 11 ![]() |
Figured out how to do this. #include. The of manual says it all
Sent from my SM-G930V using CFD Online Forum mobile app |
|
|
|
|
|
|
|
|
#14 |
|
Member
Join Date: Feb 2016
Posts: 32
Rep Power: 11 ![]() |
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/laj-6/run/interFoam/expo/expoBCTest/system/blockMeshDict" Using #calcEntry at line 33 in file "/home/laj/OpenFOAM/laj-6/run/interFoam/expo/expoBCTest/system/blockMeshDict" Using #codeStream with "/home/laj/OpenFOAM/laj-6/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/laj-6/run/interFoam/expo/expoBCTest/dynamicCode/_a9cfc2467f9de95ca529e46e98786f31497ccff1" wmake libso /home/laj/OpenFOAM/laj-6/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/laj-6/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/laj-6/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 |
|
|
|
|
|
|
|
|
#15 | |
|
Senior Member
Zander Meiring
Join Date: Jul 2018
Posts: 125
Rep Power: 9 ![]() |
Quote:
you need a dollar sign before all your variables when you call them, so: Code:
xA 30; xU 20; acaso #calc "$xA + $xU"; |
||
|
|
|
||
|
|
|
#16 |
|
Member
Join Date: Feb 2016
Posts: 32
Rep Power: 11 ![]() |
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 |
|
|
|
|
|
|
|
|
#17 |
|
Member
Join Date: Feb 2016
Posts: 41
Rep Power: 11 ![]() |
Make sure 2 add spaces aroundathematical characters such as -+×÷/.
|
|
|
|
|
|
|
|
|
#18 |
|
New Member
pooyan
Join Date: Mar 2013
Location: Boston, US
Posts: 6
Rep Power: 14 ![]() |
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 ((trenchNo-1)*($a+$b)+$a, 0, 0) << endl;
os << point (trenchNo*($a+$b), 0, 0) << endl;
os << point (trenchNo*($a+$b), -$c, 0) << endl;
os << point ((trenchNo-1)*($a+$b)+$a, -$c, 0) << endl;
os << point ((trenchNo-1)*($a+$b)+$a, 0, 1) << endl;
os << point (trenchNo*($a+$b), 0, 1) << endl;
os << point (trenchNo*($a+$b), -$c, 1) << endl;
os << point ((trenchNo-1)*($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 {(trenchNo-1)*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/pooyanni-6/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/pooyanni-6/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 foam-extend 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 |