|
[Sponsors] |
May 15, 2005, 00:31 |
Evaluating Cell Quality
|
#1 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
I am undertaking a PhD at Monash University in Australia developing a novel shape optimisation method. I am looking to develop a stricter halt criteria involving various measures of model quality, including cell field gradients and cell quality.
I have modified the analyticalCylinder tutorial example to calculate the following:
I am having trouble, however, in getting the cellQuality class to compile. I keep getting the following error: "undefined reference to 'Foam::cellQuality::cellQuality(Foam::polyMesh const&)' I have attached the code and has been extensively commented. I was wondering if someone could please identify my error. analyticalCylinder.C createGradFields.H createCellQualityFields.H |
|
May 15, 2005, 03:22 |
You probably need to link the
|
#2 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
You probably need to link the dynamic mesh library - that's where the cellQuality class has been defined.
Edit the Make/options and under EXE_LIBS add -ldynamicMesh There may be some other libraries missing when you do that (maybe meshTools or cfdTools); the procedure is the same. Enjoy, Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
May 15, 2005, 07:25 |
Thank you Hrvoje,
You were
|
#3 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Thank you Hrvoje,
You were right, I hadn't included the libraries properly. Now that this component is working, I can send the data to Info, but I am not sure how to write the data to file. In "createGradFields.H" I initialised the volScalarField and volVectorField types using IOobject and was able to write the data to file. I attempted to do the same thing in "createCellQualityFields.H", but the compiler returned the following error message: no matching function for call to 'Foam::tmp<foam::field<foam::scalar> >::tmp(Foam::IOobject)' Some possible alternative functions are then proposed from "tmpI.H". I have reattached the files with some minor modifications from the previous message. I would greatly appreciate it if you could help me again with this query. |
|
May 15, 2005, 07:27 |
Thank you Hrvoje,
You were
|
#4 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Thank you Hrvoje,
You were right, I hadn't included the libraries properly. Now that this component is working, I can send the data to Info, but I am not sure how to write the data to file. In "createGradFields.H" I initialised the volScalarField and volVectorField types using IOobject and was able to write the data to file. I attempted to do the same thing in "createCellQualityFields.H", but the compiler returned the following error message: no matching function for call to 'Foam::tmp<foam::field<foam::scalar> >::tmp(Foam::IOobject)' Some possible alternative functions are then proposed from "tmpI.H". I have reattached the files with some minor modifications from the previous message. I would greatly appreciate it if you could help me again with this query. analyticalCylinder.C createGradFields.H createCellQualityFields.H |
|
May 15, 2005, 07:57 |
Two errors:
1) You are tryi
|
#5 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
Two errors:
1) You are trying to create tmp<scalarfield> in createCellQualityFields.H, which does not make sense: tmp is a wrapper that allows you to "copy" field (and other) objects without actually copying the data. What you want to create are scalar fields that can write themselves out, right. If so, you need to use scalarIOField. Funnily enough, the rest of the statement is OK! :-) scalarIOField cellSkewness ( IOobject ( "cellSkewness", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ) ); 2) main code, line 99. You said cellQuality.write(), but cellQuality is a class. This is probably a typo, I bet you wanted: cellNonOrthogonality.write(); I loke the code organisation and use of field algebra - well done. You should also try to indent the code according to the rules and it will be very nice indeed! Enjoy, Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
May 16, 2005, 01:23 |
Cheers Hrvoje,
That worked
|
#6 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Cheers Hrvoje,
That worked and I could write the information to file. I have a couple more questions though if it is ok. I am using paraView to view the data and hense, I am running the foamToVTK utility. This utility, however, does not convert the cellSkewness and cellQuality files. I modified the output files to be identical to the formats generated from the volScalarField type. This worked and foamToVTK then converted these files as well. I then tried replacing the scalarIOField type name for volScalarField but received the following error and provides some possible function candidates. no match for 'operator=' in 'cellskewness = Foam::cellQuality::skewness() const()' I was wondering if there is a way to initialise the cellSkewness and cellNonOrthogonality variables as volScalarFields to ensure the data is written in a format that the foamToVTK utility can convert. Unless there is a meas to convert the scalarIOField output to VTK format somehow. Also I have a separate question, still related to mesh quality. Is there a utility to calculate the geometric volume of a cell, as I want to be able to capture cell volume gradients? Cheers Vassili |
|
May 16, 2005, 06:24 |
I would suggest making volScal
|
#7 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
I would suggest making volScalarFields to start with. You can do the op = as follows:
cellSkewness.internalField() = qualityCheck.skewness(); Ditto for cell volumes. A word of warning: if you want grad of cell volumes, you need to say something about boundary conditions, i.e. whether you want the volume on the boundary to be zero or zero gradient. By default, the constructor for volScalarField (and other geometric fields) will take a "calculated" b.c., so if you do (sorry, different names): volScalarField vols ( IOobject ( "vols", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedScalar("zero", dimVolume, 0.0) ); you get zeros on the boundary, which affects the gradient (and probably in the right way! but you'll know whether that's what you want). :-) Here's an example with zeroGradient boundaries: volScalarField A ( IOobject ( "A", runTime.timeName(), mesh ), mesh, dimensionedScalar("A", dimless/dimTime, 1), zeroGradientFvPatchScalarField::typeName ); You will need an include file for zeroGradient: #include "zeroGradientFvPatchFields.H" Aha, volumes: vols.internalField() = mesh.V(); (and then if you want): vols.correctBoundaryConditions(); Isn't FOAM nice! Enjoy, Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
May 16, 2005, 22:50 |
Thanks Hrvoje,
I have made
|
#8 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Thanks Hrvoje,
I have made those modifications and uploaded the final files for anyone else that might want to utilise the code. One note, however, in my mesh the nonOrthogonality function returned "nan" instead of a numerical result for a handful of cells in my mesh. Not sure why as these cells were not excessively nonOrthogonal or orthogonal for that matter. analyticalCylinder.C createAnalyticalFields.H createGradFields.H createCellQualityFields.H files options Cheers Vas |
|
May 17, 2005, 06:07 |
Hi Vassili,
The nan is usua
|
#9 |
Senior Member
Mattijs Janssens
Join Date: Mar 2009
Posts: 1,419
Rep Power: 26 |
Hi Vassili,
The nan is usually caused by a division by zero somewhere. If you rerun with environment variables FOAM_SIGFPE FOAM_ABORT all set (to a non-empty value) the code should fall over immediately and you can use a debugger to look at where it goes wrong. |
|
May 18, 2005, 06:45 |
Thanks Hrvoje,
I'll give th
|
#10 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Thanks Hrvoje,
I'll give that a go. I have also been reading through the discussion board and there are various mentions of your thesis and the error estimation tools. I have been playing around with these FOAM functions and I would appreciate some further reading on the rational behind these functions. I was wondering if you have a soft copy of your thesis that you could forward me. It would be much appreciated. My email address is vassili_kitsios@yahoo.com Cheers Vas |
|
May 18, 2005, 06:58 |
Sorry Hrvoje,
I found the l
|
#11 |
New Member
Vassili Kitsios
Join Date: Mar 2009
Location: Melbourne, Victoria, Australia
Posts: 7
Rep Power: 17 |
Sorry Hrvoje,
I found the location your paper on the web from another area in the discussion group. I will go through it and possibly get back to you later. Cheers Vas |
|
May 18, 2005, 10:30 |
Hello Vassili,
No problem -
|
#12 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
Hello Vassili,
No problem - actually, a list of all my papers, including my PhD work on error estimation and adaptive meshing + FV discretisation etc. are available on my private web page: http://www.h.jasak.dial.pipex.com/ All the research + code development has been done in FOAM over the last 12 years. If you want any of the papers that you cannot find on the web, please let me know. I usually put my presentation slides there as well - you may find some interesting info on FOAM structure etc. This may not be the best place for it, but what started as a private home page now looks like FOAM-related data repository. :-) I will probably have to move it to a more sensible web address but that will be announced here. As for talking about the work - I'd be delighted. Please feel free to contact me by E-mail. Have fun, Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
January 9, 2008, 06:15 |
Hi,
I tried to use the code a
|
#13 |
Member
David Segersson
Join Date: Mar 2009
Posts: 39
Rep Power: 17 |
Hi,
I tried to use the code attached above and found that it is out of date (think it's from OF 1.2). Is there a recommended way to locate cells with low quality in OF? checkMesh writes a faceSet with nonOrthoFaces and I was thinking about writing a scalar field marking the cells containing these faces. It seems like this must have been done by a lot of users before. Is there anybody who can give me the steps to take or maybe send a code snippet? Regards David |
|
January 9, 2008, 06:41 |
Much easier that that: use set
|
#14 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
Much easier that that: use setSet. A Help will give you an idea on how to use it - here's a little snippet I use often when dealing with poor meshes:
cellSet cellSet0 new faceToCell wrongOrientedFaces any Got the gist? Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
January 9, 2008, 07:13 |
Thanks Hrvoje,
I'm trying to
|
#15 |
Member
David Segersson
Join Date: Mar 2009
Posts: 39
Rep Power: 17 |
Thanks Hrvoje,
I'm trying to compile setSet by running the Allwmake script and have trouble with: .../libreadline.a: No such file or directory Any hint on this as well? David |
|
January 9, 2008, 07:33 |
Some care required - follow th
|
#16 |
Senior Member
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,907
Rep Power: 33 |
Some care required - follow the Allwmake script by hand (with understanding - the "parrot mode" will not work). You need to compile readline, adjust paths and variables to get it right and read messages about missed paths and libraries.
I have tried to get this sorted out but it seems the libraries never end up in consistent places between various linux flavours. Works on my machine though... Hrv
__________________
Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk |
|
June 23, 2008, 11:54 |
The problem lies in the fact t
|
#17 |
Senior Member
Eugene de Villiers
Join Date: Mar 2009
Posts: 725
Rep Power: 21 |
The problem lies in the fact that skewness is a face based property. The cellQuality.skewness() call returns a field of size nCells where the "cell" value is the max of all faces bordering a particular cell. If you want to change this behavior, call the faceSkewness function and create the cell-skewness field the way you want to.
I guess the cell-based return type is nice for post-processing, but it is also misleading if you are not aware of the implementation. |
|
July 29, 2008, 10:38 |
Hi,
Does anyone know the d
|
#18 |
Senior Member
Frank Bos
Join Date: Mar 2009
Location: The Netherlands
Posts: 340
Rep Power: 18 |
Hi,
Does anyone know the difference between cellQuality.skewnewss() and mesh.checkFaceSkewness(). I mean, I get different maximal values while monitoring..... Frank
__________________
Frank Bos |
|
August 1, 2008, 14:49 |
Anyone?
What's the differen
|
#19 |
Senior Member
Frank Bos
Join Date: Mar 2009
Location: The Netherlands
Posts: 340
Rep Power: 18 |
Anyone?
What's the difference between cellQuality.skewnewss() and mesh.checkFaceSkewness(). Thanks, Frank
__________________
Frank Bos |
|
August 1, 2008, 17:17 |
The one from checkFaceSkewness
|
#20 |
Senior Member
Mattijs Janssens
Join Date: Mar 2009
Posts: 1,419
Rep Power: 26 |
The one from checkFaceSkewness tries to include a measure of the 'height' of the face in the direction of the face centre. Gives more reasonably values for high aspect ratio faces.
|
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[snappyHexMesh] very bad quality snapped mesh | federicabi | OpenFOAM Meshing & Mesh Conversion | 18 | September 26, 2018 11:33 |
Fluent UDF wrong number of cells in parallel - correct in serial | dralexpe | Fluent UDF and Scheme Programming | 7 | May 17, 2018 09:26 |
Particle tracking error | alchem | OpenFOAM Bugs | 5 | May 6, 2017 17:30 |
[Commercial meshers] Trimmed cell and embedded refinement mesh conversion issues | michele | OpenFOAM Meshing & Mesh Conversion | 2 | July 15, 2005 05:15 |
cell to cell relation | CMB | Siemens | 1 | December 4, 2003 05:05 |