CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   Using Octave/MatLab functions to set border conditions? (http://www.cfd-online.com/Forums/openfoam/89006-using-octave-matlab-functions-set-border-conditions.html)

homerun4711 June 1, 2011 08:30

Using Octave/MatLab functions to set border conditions?
 
Hello!

I have a question and hope that you can help me.

My company is searching for a software to calculate heat flux
through a concrete wall of a tower due to solar radiation.
(will be 2D-model in the first case)

We were doing one such calculation before using Autodesk Multiphysics (Algor).
But since there is no possibility to automate data in- and output and do other scripting stuff
we have to switch to another software or I will go crazy because of all that repetitive GUI clicking :)

While searching for different software packages to compare
OpenFOAM caught my eye, because it looks quite complete and is open source.

In our problem the solar radiation and ambient temperature are used as border conditions
and we have Octave/MatLab functions that return these values.

Is it possible and easy to use these returned values as input for OpenFOAM?

Pseudo-code maybe would be
-----
include "octave.h" or
include "matlab.h"
border_condition_wall(time) = MATLABFUNCTION.solarirradiation(time, date, weather, airmass)
-----

Kind regards,
Walter

alexey2petrov June 1, 2011 09:38

Hi Walter!

Quote:

Originally Posted by homerun4711 (Post 310121)
we have to switch to another software or I will go crazy because of all that repetitive GUI clicking

Might be pythonFlu - "a Python wrapping for OpenFOAM C++ API" - could suite you even better?

First, pythonFlu initially comes with the automation capabilities you are looking for (you can easily bind corresponding pythonFlu based code with your specific application, look).

Second, Python has a lot of libraries that could easily satisfy all your "Matlab / Octave like" needs (NumPy and SciPy, for example).

And, might be, the third, there is a living example who uses pythonFlu in the way you are interested in.

Best regards,
Alexey

homerun4711 June 2, 2011 04:02

Hi!

Thanks for your answer. pythonFlu looks quite interesting. I also read a presentation about pyFoam. What is the difference between the two?

But since I usually write C++ code I would rather use it instead of Python to glue OpenFOAM to Octave/MatLab. Has someone of you ever done this and can show me a small piece of code how this could be done?

Kind regards,
Walter

alexey2petrov June 2, 2011 09:42

Hi Walter,

Quote:

Originally Posted by homerun4711 (Post 310235)
pythonFlu looks quite interesting. I also read a presentation about PyFoam. What is the difference between the two?

Well, I will try demonstrate their difference on the following examples.

You said, that Octave so suitable for you, that you are going to invest your time and energy for embedding it into the target C++ solver.
Now, imagine, that the OpenFOAM solver itself could be written completely in Octave. Would you still like to implement your solver in C++?
And this is the pythonFlu case - "solver as any other user specific code could be written and communicated directly in Python without any loss in clarity and performance"

Also, imagine, you need to add some automation features in your OpenFOAM calculation environment. Something like, parameter variation, conditional running and so on. As we know, Octave will come first in your mind (you are going to use it at any case). Ok, then you decide to implement such stuff through Octave - that is PyFoam case. I mean, that you still have two different beasts - C++, for solver implementation and Python, for its automation.

Quote:

Originally Posted by homerun4711 (Post 310235)
But since I usually write C++ code I would rather use it instead of Python to glue OpenFOAM to Octave/MatLab. Has someone of you ever done this and can show me a small piece of code how this could be done?

I have googled a little bit and find something you might be looking for -"GNU Octave for C++: How to start?"

By the way, while I were trying to find out the proper answer on your last question I have bumped on the list of the existing Octave front-ends, namely Perl, Tcl and Java. I started to wonder, why there is no Python among them? Actually, I have found Pytave, but it seems has been abandoned long ago (the latest modifications were done at 2008). So, I started to wonder once again, why?! The answer was actually straightforward -
Existing NumPy and SciPy libraries cover all aspects of Octave functionality and made it no sense to invent any Python Octave front-end at all
So, if you would like to use something as flexible as Octave, but are going to base your solver implementation on OpenFOAM ... you know the right solution ;)

Best regards,
Alexey

homerun4711 June 2, 2011 18:26

Hi!

Thanks for the explanation, I get the difference now :)

pythonFlu seems to be a good solution for some situations,
but I am still not convinced... :)
And since we need this in our company for important calculations
I would rather stick to the well-known and mature OpenFOAM
and our working Octave-functions.

Well, until now there is no answer from people that could give some lines
of C++ code showing how difficult or easy it is to glue OpenFOAM to MatLab
or Octave. Maybe my question is not clear enough...

I need to set transient border conditions, and in the end I do not
care about how these are set, I just do not want to do it manually :)
And I do not want to completly rewrite a solver until implementing
transient border conditions is a really really easy job. Is it?

My idea was just to call a MatLab-function from a C++ program,
which is quite an easy job to do. But is it easy to put the
returned values into into the solver? Or is this not
possible at all?

I read about the possibility to use

---
type timeVaryingUniformFixedValue;
timeDataFileName "inlet.dat";
---

to use transient border conditions. Well, this seems to be quite easy.
So I got an idea and please tell me if this is completly nonsense:

I have to set border conditions on the outside of a 2D-circle.
This simulates sunshine onto the tower. The circle has to be
discretized. So I will subdivide it into 1 pieces. Each of
this subdividions will receive different and transient border
conditions.

To achieve this I will use Octave and OpenFOAM separatly.
An Octave function will write the mesh-file using for-loops creating
the 360 Physical Surfaces and assign their names, e.g. Face001 - Face360.
I am not familiar with blockMesh's file format, but thinking of gmsh's
syntax seems this is quite an easy job.

And the Octave function calls the sun-position-function and writes the
results to 360 different text files,e.g."Face001.dat" that are called
by that are called by using

---
type timeVaryingUniformFixedValue;
timeDataFileName "Face001.dat";
....
type timeVaryingUniformFixedValue;
timeDataFileName "Face002.dat";
---

and so on...

Well, I need a second opinion - does this sound like complete nonsense???
Or is it easier to glue OpenFOAM to MatLab/Octave directly?

Kind regards,
Walter

Logan Page June 4, 2011 08:57

Hi

Im not sure if this will help at all, but here goes.

My programming skills in anything other than octave is limited at best, and thus I've opted to use octave scripts to do the following for me:

1) update gmsh geometry file
2) call gmsh to create mesh
3) call convert mesh to OpenFOAM
4) update velocity boundary conditions
5) call OpenFOAM to solve case
6) read cost function value/s into optimisation script
7) optimise geometry variables
8) loop from 1

This doesnt really "glue" octave and OpenFOAM together, but rather uses OpenFOAM as a tool inside octave. I wont even begin to claim that this is a good way to do things, but its the best I could come up with.

homerun4711 June 5, 2011 02:38

Hi!

This sounds quite good from my point of view since it looks
like you used octave to script all the way from automated mesh
creation to solving the case.
And since for my case I need about 360 faces to form a circle,
each of them having different BCs, scripting sounds great.

So, if you do not mind, I would really like to see some scripts
you wrote :)

Kind regards,
Walter

Logan Page June 5, 2011 07:26

Hi Walter

No problem. Send me your email address and we can discuss further.

Regards
Logan

elvis June 5, 2011 16:47

If you want to do optimisation many consulting companies (ICON, Engys, etc.) use DAKOTA http://dakota.sandia.gov/software.html

Read the post by Paolo Geremia http://www.extend-project.de/compone...=6&start=6#187
(to read you have to register)

Logan Page June 5, 2011 16:59

Thanks for the info. It is useful to know.

For now I will be sticking to an optimisation algorithm developed at the university (DYNAMIC-Q), If I dont come right I'll look at this as an alternative.

Regards

francois June 20, 2011 06:29

Quote:

Originally Posted by Logan Page (Post 310485)
Hi

Im not sure if this will help at all, but here goes.

My programming skills in anything other than octave is limited at best, and thus I've opted to use octave scripts to do the following for me:

1) update gmsh geometry file
2) call gmsh to create mesh
3) call convert mesh to OpenFOAM
4) update velocity boundary conditions
5) call OpenFOAM to solve case
6) read cost function value/s into optimisation script
7) optimise geometry variables
8) loop from 1

This doesnt really "glue" octave and OpenFOAM together, but rather uses OpenFOAM as a tool inside octave. I wont even begin to claim that this is a good way to do things, but its the best I could come up with.

Walter,

Of course you can do that easier with pythonFlu ! :D
Cheers

Francois


All times are GMT -4. The time now is 17:43.