|
[Sponsors] |
February 9, 2013, 13:04 |
adding a new wall function to RAS in OF2.1.1
|
#1 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
How exactly do I build a new wall function to it is recognized by a solver? I have the function (.C and .H files) in the correct place in my <user> folder structure (under src/turbulenceModels/... and so on) but when I run my solver it says my new wall function is unknown. How do I build it so it is recognized?
Best, NG |
|
February 9, 2013, 16:59 |
|
#2 |
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 257
Blog Entries: 10
Rep Power: 17 |
Hi NG
You need to read chapter 3 of the user manual: http://www.openfoam.org/docs/user/co...p#x10-690003.2 some OpenFOAM programming tutorials from Chalmers university are also helpful (Google ) Best H |
|
February 9, 2013, 17:20 |
|
#3 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Thank you for the advice, Hisham!
I have read that chapter, but when I try wmake to build my new wall function, it returns a "no rule to make target <function_name> needed by <function_name>.dep", or something to that effect (I don't have it in front of my right at this instance). This is where I am stuck. How exactly do I set up the files in my make folder in my <user>-2.1.1/src/turbulenceModels/incompressible/RAS/ so that is builds my new function in a manner that is accessible by my solver? I would be happy to look through those programming tutorials for insight. I will google them. -NG |
|
February 9, 2013, 17:38 |
|
#4 |
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 257
Blog Entries: 10
Rep Power: 17 |
First you should make a copy of the code you want to modify into your user folder, for example to:
Code:
~/OpenFOAM/NG-2.1.x/newWallFunction Code:
File1.C File2.C etc, LIB = $(FOAM_USER_LIBBIN)/libmyNewWall No rule to compile means you're missing the Make folder! Have a nice weekend! Hisham |
|
February 10, 2013, 08:33 |
|
#5 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Ok, here is a more detailed description of what I did and how it is not working:
What I did (note I am running OF-2.1.1): I have two new files for my new wall function. Its name is really long so for brevity here I will just call this "newWF". Making my new function: First, I created a newWFFvPatchScalarField.C and a newWFFvPatchScalarField.H file. As my function is just a variation on an existing one, I used the existing wall function .C and .H files as templates, made changes where I needed them, and called it good. Putting my new wall function in the proper place: I was not 100% sure where these should do in my file structure, so I used the OpenFOAM instal as a guide. As such, both of these files were placed in the following location (note the "newWF at the end here is a new folder I created): <user>-2.1.1/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/newWFs Making my new wmake files: Next I created a a new "files" and a new "options" file. The "files" file is as follows: " wallFunctions = derivedFvPatchFields/wallFunctions newW = $(wallFunctions)/newW $(newW)/newWF/newWFFvPatchScalarField.C LIB=$(FOAM_USER_LIBBIN)/libuserincompressibleRASModels " The "options" file is as follows: " EXE_INC = \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/transport/Models \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ LIB_LIBS = \ -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ " I am a little shaky on whether or not I have everything in this "options" file that I need, so I could have an issue there. Placing the Make folder: lastly, I created a "Make" folder in the following location: <user>-2.1.1/src/turbulenceModels/incompressible/RAS/Make and I put these two files in it. When I tried to build I did it as follows: <user>-2.1.1/src/turbulenceModels/incompressible/RAS/ wmake And here is what I get (note the actual name is "DxtJayatillekeWallFunction"): " nick@ubuntu:~/OpenFOAM/nick-2.1.1/src/turbulenceModels/incompressible/RAS$ wmake Making dependency list for source file derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C could not open file RASModel.H for source file derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C SOURCE=derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-100 -I/opt/openfoam211/src/turbulenceModels -I/opt/openfoam211/src/transportModels -I/opt/openfoam211/src/finiteVolume/lnInclude -I/opt/openfoam211/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam211/src/OpenFOAM/lnInclude -I/opt/openfoam211/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/DxtJayatillekeWallFunctionFvPatchScalarField.o derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C:27: 22: fatal error: RASModel.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/DxtJayatillekeWallFunctionFvPatchScalarField.o] Error 1 " So as you can see, it can't locate "RASModel.H". This comes from a instance of: "#include RASModel.H" in line 27 of "newWFFvPatchScalarField.C". In response, I made a copy of the "RASModel" folder containing RASModel.C and RASModel.H, placed it here: <user>-2.1.1/src/turbulenceModels/incompressible/RAS/ and tried again. I got the following: " SOURCE=derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-100 -I/opt/openfoam211/src/turbulenceModels -I/opt/openfoam211/src/transportModels -I/opt/openfoam211/src/finiteVolume/lnInclude -I/opt/openfoam211/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam211/src/OpenFOAM/lnInclude -I/opt/openfoam211/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/DxtJayatillekeWallFunctionFvPatchScalarField.o derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C:27: 22: fatal error: RASModel.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/DxtJayatillekeWallFunctionFvPatchScalarField.o] Error 1 " So I lose the first instance of "can't find RASModel.H" but still have the second. Any ideas? Thanks! NG |
|
February 10, 2013, 11:16 |
|
#6 | |
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 257
Blog Entries: 10
Rep Power: 17 |
Quote:
First, you don't need to put the new library files inside the source files of OpenFOAM. All you should do is simply: Code:
mkdir /home/nick/OpenFOAM/nick-2.1.1/DxtJayatillekeWallFunction cd /home/nick/OpenFOAM/nick-2.1.1/DxtJayatillekeWallFunction Hisham |
||
February 10, 2013, 12:15 |
|
#7 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Hisham,
Ok, to simplify things I followed your advice and the new folder structure for all of this is: <user>-2.1.1/DxtJayatillekeWallFunction/... ...DxtJayatillekeWallFunctionFvPatchScalarField.H ...DxtJayatillekeWallFunctionFvPatchScalarField.H ...Make/... ...files ...options Thanks for the tip, this makes navigation less tedious. This change led to a simplified "files" file as follows: " DxtJayatillekeWallFunctionFvPatchScalarField.C LIB = $(FOAM_USER_LIBBIN)/libuserIncompressibleRASModels " Also, as per your advice I tried adding a reference to the location of the RASModel.H file to my "options" file so it could find it. In response to your suggestion that I dig up the original Make file for the function I am basing my modified function off, that is in fact what I did originally. The "options" file as it appears in my last post was just that file. I thought maybe that this line: " -I$(LIB_SRC)/turbulenceModels \ " covered the RAS model .H as it is located under: " openfoam211/src/turbulenceModels/incompressible/RAS/RASModel & openfoam211/src/turbulenceModels/incompressible/RAS/lnInclude As such I read "-I$(LIB_SRC)/turbulenceModels \" to reference everything within the "turbulenceModels" folder in the "openfoam211/src" folders. Anyway, so I tried two different versions of a new options file as follows: " EXE_INC = \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/transport/Models \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ LIB_LIBS = \ -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ " & " EXE_INC = \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/transport/Models \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ LIB_LIBS = \ -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ The result was the same as the shown at the end of my previous post, which ended as follows: " derivedFvPatchFields/wallFunctions/DxtWallFunctions/DxtJayatillekeWallFunction/DxtJayatillekeWallFunctionFvPatchScalarField.C:27: 22: fatal error: RASModel.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/DxtJayatillekeWallFunctionFvPatchScalarField.o] Error 1 " My new question then is other than making a direct reference to a containing folder under my "EXE_INC =" list in my options file as I have here done, how to I tell it where to look for RASModel.H? Also, do I need to add something to my "LIB_LIBS =" to this end? And finally, you said in your response: "Also do not forget to add the name in the runtime table so you don't have to include the library and recompile all solvers." I am not sure what you are referring to here/how to do this. Any further information would be much appreciated. Best, NG |
|
February 10, 2013, 14:59 |
|
#8 |
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 257
Blog Entries: 10
Rep Power: 17 |
You have not linked the RAS models library. Looking at options file of pisoFoam, you need to add:
Code:
-lincompressibleRASModels To use your compiled library, you either have to include it statically and recompile the solver (not a nice way to do it) or add it to run time table: change the name of the original model in lines such as (something like): Code:
defineTypeNameAndDebug(LienLeschzinerLowRe, 0); addToRunTimeSelectionTable(RASModel, LienLeschzinerLowRe, dictionary); Then you would need to dynamically link the library in the "system/controlDict" file. Hisham |
|
February 10, 2013, 15:18 |
|
#9 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Hisham,
First you're a God-Sent with this input. Thank you so much. 1) When I get a chance to work on it again I will add the LIB_LIBS addition you mention. 2) I am still not fully following on the second point. Let me ask this: When you say "change the name of the original model", what/where is the "original model"? What specific files am I looking for when I am changing these lines? And am I making copies in my <user>-2.1.1 based folders for this? Like if I alter the RASModel say, would I first make a copy of the RASModel .C and .H files into my user area and edit there? I appreciate your patience! Best, Nick Last edited by NJG; February 10, 2013 at 15:37. |
|
February 10, 2013, 15:35 |
|
#10 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Let me clarify question 2) just a bit:
I just looked in the RASModel.C file and found instances of both things you have there. But I would leave this unchanged, right? I have made no edits to the RASModel. Within my new wallFunction file DxtJAYAtillekeWallFunctionFvPatchScalarField.C however I already have: " #include "addtoRunTimeSelectionTable.H " This is in there as I used another very similar wall function as a template and it had the same thing. Am I all set then? Best, NG |
|
February 10, 2013, 21:48 |
|
#11 |
Member
Nick Gutschow
Join Date: Jan 2013
Posts: 36
Rep Power: 13 |
Hisham,
I added the new "-lincompressibleRASModels" to the LIB_LIBS list with no change in error. It still gives me the "No such file or directory" on the file "RASModel.H". Best, NG |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Radiation interface | hinca | CFX | 15 | January 26, 2014 17:11 |
Implementation of wall function | mantec | Main CFD Forum | 0 | July 19, 2012 09:18 |
About the nut wall function in RAS | spwater | OpenFOAM | 1 | October 28, 2011 10:37 |
Need some wall function approaches! | yka8150 | Main CFD Forum | 0 | September 21, 2009 23:08 |
Wall function in adverse pressure gradients | stephane baralon | Main CFD Forum | 11 | September 2, 1999 04:05 |