CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   CFX (http://www.cfd-online.com/Forums/cfx/)
-   -   CFX-Post Macros (http://www.cfd-online.com/Forums/cfx/22854-cfx-post-macros.html)

 Felix July 17, 2006 14:09

CFX-Post Macros

Hi everyone,

Many of you are probably familiar with the use of macros to post-process CFX results and I need a little help to get me started. I have little experience with CFX but I'm slowly improving my skills!

I'm actually trying to use the "Solution variables" available in CFX-Post but I don't understand how to do it properly. To give you and idea, I've written a small macro to calculate the Reynolds number. The 6th line from the end starting with "!Reynolds =..." isn't working since the variables "Density" and "Dynamic Viscosity" are not recognized. Anyone know how I should do it? I would prefer not to create another user scalar variable since it wouldn't work for all the things I want to evaluate!

Also, if you know where I could find good documentation on macros it would be of great help.

Thanks a lot to you all! Felix

_______________________________________

# Macro GUI begin

# macro name = Reynolds tests

# macro subroutine = losses

# macro report file = losses.dat

# macro parameter = Diameter [m]

# type = float

# default = 0.383

# Macro GUI end

>variables Boundary Values = Conservative

# Macro in pearl

! sub losses {

! (\$dia)=@_;

USER SCALAR VARIABLE:Rvar

Recipe = Expression

Expression = sqrt(x^2+y^2)

User Units = m

END

USER SCALAR VARIABLE:ThetaVar

Recipe = Expression

Expression = atan2(y,x)

User Units =

END

USER SCALAR VARIABLE:Vr

Recipe = Expression

Expression = Velocity u*cos(ThetaVar)+Velocity v*sin (ThetaVar)

User Units =

END

USER SCALAR VARIABLE:Vm

Recipe = Expression

Expression = sqrt(Vr*Vr + Velocity w * Velocity w)

User Units =

END

! \$Reynolds = \$Density * ave("Vm", "Inlet") * \$dia / \$Dynamic Viscosity;

! open (MYFILE, ">Reynolds.dat");

! print MYFILE "Reynolds number:\t\t\$Reynolds\n";

! print MYFILE "\n";

! close (MYFILE);

! } # end subroutine

 Felix July 18, 2006 08:28

Re: CFX-Post Macros - Problem solved

Hi there,

I thought of something this morning and it seems like I've solved my problem. It might help someone to know how to do it. Although the variables "Density" and "Dynamic Viscosity" are constant in my problem, I do have to define where to evaluate them. So the problematic line should be written as follow (or in a similar way):

! \$Reynolds = ave("Density", "Inlet") * ave("Vm", "Inlet") * \$dia / ave("Dynamic Viscosity", "Inlet") ;

I hope it will help someone! And again, if you know where I could find good documentation on macros, just let me know!

Thanks

Felix

 Robin July 18, 2006 08:32

Re: CFX-Post Macros

Hi Felix,

I think you have misunderstood how Perl interacts with Post. You should do all of your calculations in CEL, then use the evaluate() function to get the results of expression. Post variables are not otherwise available to the Perl interpreter as variables. Also, your expression should include call backs at specific locations to return a single value, as opposed to a variable.
To write this as an expression, then use the 'evaluate()' function to get the value of your expression do the following :
EXPRESSIONS:
Reynolds Number = massFlowAve(Density)@Inlet * massFlowAve(Vm)@Inlet * \$dia / massFlowAve(Dynamic Viscosity)@Inlet
END

!(\$ReynoldsNumber, \$ReynoldsNumber_units)=evaluate('Reynolds Number');
Note that you could also calculate your hydraulic diameter as:

InletDiameter = sqrt(4*area()@Inlet/pi)

The other way Perl and Post interact is that the Perl interpreter will evaluate Perl scalars (which may be numbers or strings) before sending CCL to Post Engine. As a simple example, here is how you could make the averaging type an option in your macro. Add a header for the option:
# macro parameter = Averaging type
# type = list
# list = massFlowAve, areaAve, ave
# default = massFlowAve
...
Dumpt this to the appropriate Perl variable, say \$aveType, then write your expressions as:
EXPRESSIONS:
Reynolds Number = \$aveType(Density)@Inlet * \$aveType(Vm)@Inlet * \$dia / \$aveType(Dynamic Viscosity)@Inlet
END
In the above example, the Perl interpreter will replace \$aveType with the string entered above before processing the expression in the engine. This is a simple example, but it should demonstrate how Post and Perl interact.

Note that you should rarely use 'ave' as this is a simple arithmetic average of the nodal values. It is generally better to use mass or area weighted averaging. Which to use when is another topic.

Regards,
Robin

 Robin July 18, 2006 08:35

Re: CFX-Post Macros - Problem solved

Hi Felix,

I don't recommend doing it this way, althoug it will work. For more info on macros, have a look at the Tech Tips on the CFX Community Site. There is a very good tech tip from a few years ago name "Creating CFX Pist Macros" at http://www-waterloo.ansys.com/commun...A-AF758934B6D1. You should find this useful.

Regards, Robin

 Felix July 18, 2006 09:32

Re: CFX-Post Macros

Hi Robin,

Thanks a lot for your tips, I truly appreciate. I actually am working with an existing macro and trying to add a few components on it and you're absolutely right, the interaction between Perl and Post isn't completely clear for me.

I will try your way of programming the macro right away but can you tell me why you don't recommend doing it my way?

Thanks again,

Felix

 Robin July 18, 2006 10:38

Re: CFX-Post Macros

Hi Felix,

If you write it as an expression, it will be available in Post as well. Also, it's generally easier to write the CEL expressions in Post.

Regards, Robin

 alac1407 September 29, 2010 00:31

I have a problem with this code :

LIBRARY:
CEL:
EXPRESSIONS:
S = 0.0815 [m]
n = 6000
tStep = 0.005 [s]
tTotal = 10 [s]
Vinlet = (S/2) * (n*pi/30) * (sin(n*pi*t/30) + 0.5 * (1/3.2) * sin(n*pi*t/15 ))
END
END
END

But it did not work and have a error
" ERROR The dimensions of the argument to function 'sin' are inconsistent with expected dimensions.
Argument dimensions resolve to 's'; expected 'rad'. "

Thank you very much in advance ! :)

 Lance September 29, 2010 02:37

 alac1407 September 29, 2010 03:01

I see...:p
I got it ! Thank you ver much :)

 alac1407 September 30, 2010 02:42

I am simulating for venturi tube
But I don't know my simualtion setting is right or not ??? :( Escpecially in setting Solver Manager - Transient model !
Here is Command Editor :

" &replace FLOW: Flow Analysis 1
ANALYSIS TYPE:
Option = Transient
EXTERNAL SOLVER COUPLING:
Option = None
END
INITIAL TIME:
Option = Automatic with Value
Time = 0 [s]
END
TIME DURATION:
Option = Time per run
Time per run = 500 [s]
END
TIME STEPS:
Option = Timesteps
Timesteps = 1e-005 [s]

END
END
DOMAIN: Default
Coord Frame = Coord 0
Domain Type = Fluid
Location = part_1
BOUNDARY: Default Default
Boundary Type = WALL
Create Other Side = Off
Interface Boundary = Off
Location = wall part_1
BOUNDARY CONDITIONS:
HEAT TRANSFER:
END
MASS AND MOMENTUM:
Option = No Slip Wall
END
WALL ROUGHNESS:
Option = Smooth Wall
END
END
END
BOUNDARY: Inlet
Boundary Type = INLET
Interface Boundary = Off
Location = inlet
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
HEAT TRANSFER:
Option = Static Temperature
Static Temperature = 298 [K]
END
MASS AND MOMENTUM:
Normal Speed = Vinlet
Option = Normal Speed
END
TURBULENCE:
Option = Medium Intensity and Eddy Viscosity Ratio
END
END
END
BOUNDARY: Outlet
Boundary Type = OUTLET
Interface Boundary = Off
Location = outlet
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
MASS AND MOMENTUM:
Option = Average Static Pressure
Pressure Profile Blend = 0.05
Relative Pressure = 0 [Pa]
END
PRESSURE AVERAGING:
Option = Average Over Whole Outlet
END
END
END
DOMAIN MODELS:
BUOYANCY MODEL:
Option = Non Buoyant
END
DOMAIN MOTION:
Option = Stationary
END
MESH DEFORMATION:
Option = None
END
REFERENCE PRESSURE:
Reference Pressure = 1 [atm]
END
END
FLUID DEFINITION: Fluid 1
Material = Air at 25 C
Option = Material Library
MORPHOLOGY:
Option = Continuous Fluid
END
END
FLUID MODELS:
COMBUSTION MODEL:
Option = None
END
HEAT TRANSFER MODEL:
Option = Thermal Energy
END
Option = None
END
TURBULENCE MODEL:
Option = k epsilon
END
TURBULENT WALL FUNCTIONS:
Option = Scalable
END
END
INITIALISATION:
Option = Automatic
INITIAL CONDITIONS:
Velocity Type = Cartesian
CARTESIAN VELOCITY COMPONENTS:
Option = Automatic
END
STATIC PRESSURE:
Option = Automatic
END
TEMPERATURE:
Option = Automatic
END
TURBULENCE INITIAL CONDITIONS:
Option = k and Epsilon
EPSILON:
Option = Automatic
END
K:
Option = Automatic
END
END
END
END
END
OUTPUT CONTROL:
RESULTS:
File Compression Level = Default
Option = Standard
END
END
SOLUTION UNITS:
Length Units = [m]
Mass Units = [kg]
Solid Angle Units = [sr]
Temperature Units = [K]
Time Units = [s]
END
SOLVER CONTROL:
Turbulence Numerics = First Order
Option = High Resolution
END
CONVERGENCE CONTROL:
Maximum Number of Coefficient Loops = 3
Minimum Number of Coefficient Loops = 1
Timescale Control = Coefficient Loops
END
CONVERGENCE CRITERIA:
Residual Target = 1.E-4
Residual Type = RMS
END
TRANSIENT SCHEME:
Option = Second Order Backward Euler
TIMESTEP INITIALISATION:
Option = Automatic
END
END
END
END
"
Thank you very much!

 Lance September 30, 2010 02:53

I dont see how your post is related to CFX Macros, please dont hijack other (unrelated) threads! It seems that you will need to do a bunch of tutorials on transient simulations, with the current settings you will do 500[s]/1e-005 [s] = 50 million time steps.

 cuteapathy March 14, 2012 11:22

Hi,

I have the same question as alac1407 at first. I set Expression:
Boundary X Velocity sin(x)*cos(y)*exp(-2*t) and the system showed the same error message as alac1407's to me. After I changed my Expression:
Boundary X Velocity sin(x[m])*cos(y[m])*exp(-2*t) and the system showed me another error message:

Bad expression value 'Boundary X Velocity' detected in parameter 'U'
in object '/FLOW:Flow Analysis 1/DOMAIN:Default
Domain/BOUNDARY:Outlet1/BOUNDARY CONDITIONS/MASS AND MOMENTUM'.
CEL error:
Error at position 6. Units ([m]) are associated with a term that is
not dimensionless.

I have no idea how I could revise my expression here. Could anyone help me out? Thank you.

 Lance March 14, 2012 11:28

Quote:
 Originally Posted by Lance (Post 277041) Make the sin function dimensionless: sin(n*pi*t/30[s]), otherwise the argument dimension will resolve to [s] instead of [rad], just as the error message says.
sin(x[m]) has dimension [m] in the argument. Make it dimensionless.

Also, I believe that you have put the name of the expression in the input box in cfx-pre. See the tutorials on how to create expressions.

 cuteapathy March 14, 2012 11:53

Dear Lance,

When I use Boundary X Velocity sin(x)*cos(y)*exp(-2*t), I got the error message:

Bad expression value 'Boundary X Velocity' detected in parameter 'U'
in object '/FLOW:Flow Analysis 1/DOMAIN:Default
Domain/BOUNDARY:Outlet1/BOUNDARY CONDITIONS/MASS AND MOMENTUM'.
CEL error:
The dimensions of the argument to function 'sin' are inconsistent with
expected dimensions.
Argument dimensions resolve to 'm'; expected 'rad'.

I am new to CFX so I am sorry to ask these stupid questions. I do not understand about what you said:have put the name of the expression in the input box in cfx-pre. Do you think I use the wrong way to create expressions?

Thank you for the response

 Lance March 14, 2012 11:56

Quote:
 Originally Posted by cuteapathy (Post 349447) Dear Lance, When I use Boundary X Velocity sin(x)*cos(y)*exp(-2*t), I got the error message: Bad expression value 'Boundary X Velocity' detected in parameter 'U' in object '/FLOW:Flow Analysis 1/DOMAIN:Default Domain/BOUNDARY:Outlet1/BOUNDARY CONDITIONS/MASS AND MOMENTUM'. CEL error: The dimensions of the argument to function 'sin' are inconsistent with expected dimensions. Argument dimensions resolve to 'm'; expected 'rad'. I am new to CFX so I am sorry to ask these stupid questions. I do not understand about what you said:have put the name of the expression in the input box in cfx-pre. Do you think I use the wrong way to create expressions? Thank you for the response
I might have misunderstood how you enter your expression, but have you even tried to make the arguments dimensionless?
sin(x/1[m]) and so on?

 cuteapathy March 14, 2012 12:12

Dear Lane,

It did not show the error message when I changed it to sin(x/1[m]). Another error message showed up:

Expression resolves to invalid units ('dimensionless') in value set
for parameter 'Relative Pressure' in object '/FLOW:Flow Analysis
1/DOMAIN:Default Domain/BOUNDARY:Inlet1/BOUNDARY CONDITIONS/MASS AND
MOMENTUM'. Expected units: 'kg m^-1 s^-2'.

Does this mean I need to give the units to my expressions? Thank you

 Lance March 14, 2012 12:17

Well, if the solver wants an expression that has a unit, you better give it one, dont you think?

The solver have no way of knowing if you want your expression to be in [Pa], [Bar], [Psi], or [mmHg], etc.

I strongly suggest to do a bunch of tutorials.

 cuteapathy March 15, 2012 02:39

Dear Lance,

Thank you for your response. I will check the tutorials. I appreciate your help.

 All times are GMT -4. The time now is 22:31.