OpenFOAM has this cool feature
OpenFOAM has this cool feature named functionObjects of which the only incarnation I've seen so far is the probesFunctionObject. functionObject enables the user to "add" code to the solver at runtime (without recompiling it) that is executed at every time-step.
I have published a collection of such function objects on http://openfoamwiki.net/index.php/Co...unctionObjects that do simple evaluations that are sometimes useful like averages, integrals, forces, mass-flows on patches and/or volumes. The actual library can be downloaded via subversion: svn checkout https://openfoam-extend.svn.sourceforge.net/svnroot/openfoam-extend/trunk/Breede r/libraries/simpleFunctionObjects/ If anyone has * ideas for extensions (a liftDrag-FunctionObject comes to mind) * bugfixes/stylistic suggestions (and there are bound to be some) she/he is welcome to contribute these via the technical wonder that is called subversion (you'll just need write access to the svn) Bernhard |
This looks interesting.
Tha
This looks interesting.
Thanks! |
Hello,
Maybe this is also o
Hello,
Maybe this is also of interest for someone: I have wrapped the code of the sampleSurface tool into a function object. Together with an additional writer for the PlotMTV-Format (PlotMTV is a very lightweight contour plot program), this makes it possible to get insight into the fields without always copying files and loading the whole case into Paraview. I find this especially useful for large, parallelized cases (no reconstruction is needed, this is done for the sample planes on the fly). The code is in our SVN-repository: https://janus.fms.uni-rostock.de/svn/repository/OpenFOAM/trunk/LTTRostockExtensi ons Username is "gast" with blank password. Best regards, Hannes |
Hannes,
Does plotmtv requir
Hannes,
Does plotmtv require regular distances between data points, or does it perform its own kriging? /mark |
Hi Mark,
PlotMTV can interp
Hi Mark,
PlotMTV can interpolate in unstructured triangulated surfaces. The data is written out that way. But it is limited to planar surfaces and the writer currently only supports "interpolatedPlane"s Hannes |
Hi Hannes!
That is really a
Hi Hannes!
That is really a nice one. But is my impression correct that currently each time it writes out the sampled surfaces for one timestep all the previous outputs get erased? I had to comment out the lines in the sampleSurfaceProbesFunctionObject::execute()-method that erased sampleSurfaces-directory in order to get time-series Bernhard |
Hi Bernhard,
yes, you are r
Hi Bernhard,
yes, you are right. Initially, I also used it without deleting the directories. But since I usually write out samples pretty often and do not want to end up with lots of data garbage, I put it in again. I have inserted a switch for that right now ("deleteOutputDirectory") , which defaults to "yes" Hannes |
Hi Hannes!
Cool. I know thi
Hi Hannes!
Cool. I know this is becoming annoying BUT: 1. I think the setting outputInterval should be called outputInterleave because setting it to 1 outputs every second timeStep. Setting it to 0 switches the output of (this is obviously intended). So it is not possible to output every timestep. Initializing the timeSteps_ variable to 1 instead of 0 (I think in 3 places in the code) would give the behaviour I would expect 2. If deleteOutputDirectory==No removing the directory in the start-method would give a behaviour that is semantically similar to what the original probes does 3. I know this is asking much: would it be possible to factor this thing out into a separate library? Right now I've got to edit Make/options and Make/files to get it to compile (the chemistry-stuff). And while you're at it: would you consider putting it on openfoam-extend (just this sampleSurface-stuff)? Bernhard |
Hi Bernhard,
Please feel fr
Hi Bernhard,
Please feel free to improve the code as you want. I would add that stuff e.g. to the "simpleFunctionObjects" library and remove it from our lib. But I guess I need write access to the sourceforge repository to do so (my sourceforge username is "hanneskroeger"). Hannes |
Hi Hannes!
Great. I added y
Hi Hannes!
Great. I added you to the users with svn write access and prepared a directory "sampling". Just put your stuff there (in such a way that if someone else feels like adding a sample-functionObject, it can live in parallel to your stuff) and add yourself as a contributor to the README-file. Just one question? Did you have to do any changes to the original sampleSurface-stuff you're using? If not, it should be possible to modify the Make/files to sampleSurface=$(FOAM_UTILITIES)/postProcessing/miscellaneous/sampleSurface $(sampleSurface)/surfaces/surface/surface.C ..... thus pulling in the original stuff (and not adding it to the repository) and only add the new stuff (the MTV-writer) from that hierarchy Bernhard |
Hi Bernhard,
I have done as
Hi Bernhard,
I have done as you suggested and added all the sampleSurface-stuff to Make/files at their original location. Unfortunately, there might be problems due to the *.dep files in $(FOAM_UTILITIES)/postProcessing/miscellaneous/sampleSurface. After compilation of the sampleSurface utility, they contain relative paths. So you might consider doing a "wclean" in $(FOAM_UTILITIES)/postProcessing/miscellaneous/sampleSurface to delete all *.dep files first, before building the library. After building the library, the *.dep files contain absolute paths. Hannes |
Hi Hannes!
I noticed so, to
Hi Hannes!
I noticed so, too. It's especially inconvenient for people who don't have write-rights on their OF-installation. I'll think of a fix Bernhard |
Hi Hannes!
I "fixed" the pr
Hi Hannes!
I "fixed" the problem with the external dependencies some time ago (maybe you noticed in the SVN), but forgot to mention it here: the fix consists of a script that copies the external dependencies to the compilation directory (it is described in the README) Bernhard PS: the real reason why I'm writing here is that I added a new functionObject (panicDump) to the library and wanted to advertise it. It checks whether the values in a field are inside certain bounds and if they are outside writes all fields to disk and exits. The purpose of this FO is to gracefully stop simulations that are obviously going to explode while the fields still might be useful for post-mortem analysis (not full of NaNs or 1e43) |
When I try to compile the simp
When I try to compile the simpleFunctionObjects at /utilities/simpleFunctionObjects with
wmake libso I get the error message make: *** No rule to make target `externalStuff/surfaces/surface/surface.dep', needed by `Make/linuxGccDPOpt/dependencies'. Stop. I'm using 1.4.1, GCC 4.2.1 and Binutils 2.18 Could anyone give me guidance on how to get it to compile? |
Hi Juho!
Please do the foll
Hi Juho!
Please do the following (just to make sure we're starting off the same version). In the directory - do a "svn update" - remove externalStuff - do "wclean" and "rmdepall" Then set up the externalStuff as described in the README and retry Bernhard |
Oh, there's a README...
Com
Oh, there's a README...
Compiled without complaints! Thank you for the help and sorry for the stupid question! |
Could you point me in a direct
Could you point me in a direction for modifying the output of patchFieldFlow in a way that it could be used as an input for timeVaryingUniformFixedValue boundary condition?
Only thing the output would need is brackets around the values. ie. ( 1 0 2 1 3 1 4 10 5 1 ) |
The first bracket was easy, ju
The first bracket was easy, just added it to timelineFunctionObject.C
|
compilation error
Hi Bernhard,
Thank you for this cool tool. I have OF 1.5. When I tried to compile using wmake libso, I got a compilation error. Let me paste the last few lines of the compilation output: SOURCE=trackDictionary/trackDictionaryFunctionObject.C ; g++ -m32 -Dlinux -DDP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/meshTools/lnInclude -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/sampling/lnInclude -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/triSurface/lnInclude -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/lagrangian/basic/lnInclude -IlnInclude -I. -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude -I/home/rwdi-india/OpenFOAM/OpenFOAM-1.5/src/OSspecific/Unix/lnInclude -fPIC -pthread -c $SOURCE -o Make/linuxGccDPOpt/trackDictionaryFunctionObject.o trackDictionary/trackDictionaryFunctionObject.C: In member function ‘void Foam::trackDictionaryFunctionObject::echoSwitchesV alues()’: trackDictionary/trackDictionaryFunctionObject.C:201: error: ‘tolerances’ is not a member of ‘Foam::debug’ make: *** [Make/linuxGccDPOpt/trackDictionaryFunctionObject.o] Error 1 And then compilation exits. I am not able to use the functions after this. Is that a bug or am I doing something wrong here? Thank you Prapanj. |
My mistake,
I published a new functionObject this week on openfoam-extend, and this code was developed for 1.5-dev. The "tolerances" switches are available only under the dev version of OpenFOAM. I will fix this shortly. Martin Quote:
|
The problem is fixed.
Just update your svn working copy for Breeder_1.5, and recompile the library. Also make sure the environment variable FOAM_DEV is not defined when compiling the library for the OpenCFD version. Martin Quote:
|
Dear all,
How can I create my own functionObject ? my purpose is to extract a plane data of internal domain in every time step, and save to disk. I noticed "surfaces functionObject" can do the similar thing, so I want to modify surfaces functionObject.I found it belongs to sampling, So I copy src/sampling directory to another position. I changed the name to LIB = $(FOAM_USER_LIBBIN)/libmysampling. in sampling\sampledSurface\sampledSurfaces, I found 2 places had name "surfaces", *.H file: public: //- Runtime type information TypeName("surfaces"); *.C文file: PtrList<sampledSurface> newList ( dict.lookup("surfaces"), sampledSurface::iNew(mesh_) ); I changed these "surfaces" to "mysurfaces", and compiled, no problem. but when I used, had the following mistake, Starting time loop --> FOAM Warning : From function dlLibraryTable::open(const dictionary& dict, const word& libsEntry, const TablePtr tablePtr) in file lnInclude/dlLibraryTableTemplates.C at line 68 library "libmysampling.so" did not introduce any new entries Unknown function type mysurfaces Valid functions are : 5 ( surfaces fieldAverage fieldMinMax sets probes ) From function functionObject::New(const word& name, const Time&, const dictionary&) in file db/functionObjects/functionObject/functionObject.C at line 89. FOAM exiting It seems that my modified name haven't been registed in functionObject. Could anyone can give me some help ? Thanks. I am using like this in my controlDict file: extraction { type mysurfaces; functionObjectLibs ("libmysampling.so"); enabled true; outputControl timeStep; outputInterval 1; surfaceFormat foamFile; interpolationScheme cellPointFace; fields ( U T ); mysurfaces ( aplane { type plane; basePoint (-0.4 0 0.5); normalVector (1.0 0 0); } ); } |
Quote:
Hi Bernhard, Is it possible to use panicDump to monitor and act on the mass flow through a patch? I would like my simulation to finish and end reasonably gracefully when the mass flow on a particular patch reaches a specified value. I am using the patchMassFlow function object to monitor the mass flow, which is great, but a mechanism for automatically stopping the run when the specified patchMassFlow value is reached would be even better. If this is possible, how do I go about setting it up? The code for panicDump is looking for a fieldName_ - Can I just insert the massFlow identifier here, or do I need to make some deeper modifications to the code? Also, what is the syntax fro the panicDump function? I have tried this: Code:
Any assistance would be gratefully received... R |
Quote:
Bernhard |
Quote:
I think that is probably beyond my level of programming, so i will look at another way of doing this. Cheers, R |
Hi,
I actually managed to solve my problem just before posting a question. Someone may have a hard time on this one in the future so I post it anyway. It took me a while to guess the correct syntax to specify a region for simpleFunctionObjects. My solver was chtMultiRegionSimpleFoam with correct region naming (fluid and solid) and I needed the average temperature of the solid. The correct region specification can be found below. Code:
T_average @controlDict: regions ( solid01 solid02 ); @logfile: Average of T : solid01 = 300 solid02 = 273 |
Quote:
Quote:
One workaround would be to use the variable replacement of OF to safe typing (this only works if functions is a dictionary, not a list): Code:
T_average1 You can write a feature request about the region-list too, but I don't think it is very likely that I'll do it as a) it is quite time consuming b) has the possibility to introduce a number of weird bugs Bernhard |
Hi Bernhard,
thank you for the detailed explanation. I have registered at sourceforge but somehow when I click the submit error button the page goes to a blank one and I get no confirmation about the successful report, and my report won't show up on the report page. It's maybe related to the fact that I cannot choose from a category under the Enter Report Details. It's required but no options show up, just the default (select). Maybe I have to make a bug report about the bug trucker as well?! :D |
Quote:
Seriously. I'm afraid there is not much I can do about this problem. The missing Category isn't the problem. Sounds more like a "didn't redirect the https to the right server in the server-farm"-problem at Sourceforge (possibly combined with a restrictive company firewall at your place) Could you try it again and see if it is reproducible? I know this is frustrating if you lost a quarter of an hour of work because you wrote a detailed bug-report. So just fill out the basics: Title and in the description a link to this conversation. You can always add a note later on if the server accepts the bug report If it doesn't work for you reproducible then I'll open the report and will add you (so that you get updates) |
1 Attachment(s)
Hi,
really appreciate your efforts! My issue won't go away, really strange, indeed. Code:
report the region on which the actual calculation is evaluated Thanks! |
Quote:
Will add the feature request to the local bug-database and get to it (probably the output will only occur for non-default regions. That way it won't break old customRegexp that I (and possibly other people) rely on) |
Quote:
I copy/pasted your information into the form and saw the behaviour you described (plain white window). Then I removed the additional information (desired input/output) from the form and it worked. Adding the information afterwards was not a problem. My guess is that some of the "weird" characters threw the application into an undefined state Bernhard |
Thank you, have added myself to the issue!
|
Bernhard,
thank you for your time and patience, I have updated swak and everything works. :) |
Dear Bernhard,
Thanks, it looks like your simpleFunctionObjects are exactly what I need. However, when I follow the instructions for compilation (wmake libso), I get an error similar to the one Juho mentioned (May 27, 2008): make: *** No rule to make target `/home/ahm_ubuntu/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/UPstream.H', needed by `trackDictionary/trackDictionaryFunctionObject.dep'. Stop. As you can see in the error message, I use OpenFOAM-1.6-ext. The simpleFunctionObjects I'm trying to compile are those intended for OpenFOAM-1.6. Does anyone know what I should do to fix this error? Thanks in advance! Sita |
Quote:
|
Thanks, that seems to help, but now I get new errors... Allwclean doesn't work (Allwclean: command not found), but wclean simpleFunctionObjects does. Also rmdepall worked.
The errors I get now are: /home/ahm_ubuntu/OpenFOAM/OpenFOAM-1.6-ext/ThirdParty/packages/gcc-4.5.2/platforms/linux64GccDPOpt/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.5.2/include-fixed/features.h:338:25: fatal error: sys/cdefs.h: No such file or directory compilation terminated. compilation terminated. make: *** [Make/linux64GccDPOpt/simpleFunctionObject.o] Error 1 make: *** [Make/linux64GccDPOpt/simpleDataFunctionObject.o] Error 1 make: *** [Make/linux64GccDPOpt/timelineFunctionObject.o] Error 1 Something wrong with my ThirdParty directory? |
Quote:
sys/cdefs.h: that is a problem of your installation and in no way related to SFO |
Hmm… I think I'll just upgrade to foam-extend-3.0 and try again. Thanks for your help!
|
Which variables?
I find this thread the best place to ask this question:
I am looking for a list of variables I can do field operations on, e. g. fieldAverage, fieldMinMax, etc. I found some information about the new features added for version 2.2, but I have no idea what possibilities are available. |
All times are GMT -4. The time now is 14:15. |