|
[Sponsors] |
May 29, 2008, 09:50 |
Hi Bernhard
Thanks for the
|
#21 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
Thanks for the fast reply That will certainly give a smoother surface. Will try it out and report any success / failure / etc. - Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
May 29, 2008, 10:31 |
Hi Niels. Just discovered that
|
#22 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Hi Niels. Just discovered that I was bragging. There are essential things missing for that to work
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
May 29, 2008, 10:53 |
Okay.
With respect to the v
|
#23 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Okay.
With respect to the volume section, I found the following: http://www.cfd-online.com/Wiki/Arbit...yhedral_Volume With that in place, I will begin considering how to make the implementation - actually the recent f(x) = 0 posted by Hrv could come handy. Best regards, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
May 29, 2008, 14:00 |
Now it works (new version just
|
#24 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Now it works (new version just went to the SVN. Get it from there)
The expression would be: "average(fpos().y < surf(0.) ? surf(1.) : surf(0.))" The surf-functions generates surface-fields.
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
May 30, 2008, 04:45 |
Hi Bernhard
Thanks, it work
|
#25 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
Thanks, it works right out of the box. Though the expression in itself still gives rise to almost the same pattern, i.e. surface waves will still be present - see attached: Thanks for your help! / Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
May 30, 2008, 05:35 |
I think waves like that can no
|
#26 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
I think waves like that can not fully be avoided as long as you don't align the grid with the surface of the initial conditions.
The particular pattern in your picture seems to come from the fact that the faces are sharply switched (the way cells were before that). Try experimenting with a function that has a trancition area in the order of the cell size where faces get a value between 0 and 1 (that might even work for cell centers). The tools are there (have fun with the ?:-expressions) Bernhard
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
May 30, 2008, 05:54 |
Yeah, I actually had the same
|
#27 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Yeah, I actually had the same thought that I needed to have the grid aligned like that, but I would like to avoid such extra considerations in the grid-generation.
The transition thought might be helpful. Thanks, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
May 30, 2008, 05:54 |
Something else Niels: "I'll wa
|
#28 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Something else Niels: "I'll wash your hands, you wash mine"
Should you get a satisfactory result using funkySF, could you add it to the section "Usage examples" on the Wiki page?
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
May 30, 2008, 06:15 |
Of course ... and if I at some
|
#29 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Of course ... and if I at some point make a routine which calculates the fraction of water / air in each cell, would you be interested in the code to be implemented in FSF as an alternative way of setting the field?
Enjoy your weekend, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 9, 2008, 13:37 |
Hi Bernhard
I have been loo
|
#30 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
I have been looking at a way of making these more refined weighting functions, and it seems that I need one more piece of information, which I do not know how to retrieve. So I hope you can help me. The needed information is an approximate extend of the individual cell in the three dimensions. I think a reasonably approximation could be achieved by something like this (even though somewhat crude): len = vector(max(fpos.x) - min(fpos.x),max(fpos.y) - min(fpos.y),max(fpos.z) - min(fpos.z)) Actually I only need the y-component. Hope you can help me. Thanks for your help, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 11, 2008, 16:36 |
Hi Niels!
I think this won'
|
#31 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Hi Niels!
I think this won't work the way you want to. You want the max/min of the faces on a cell. But what you get is the total max/min. Something that might work with the existing facilities (but I havn't tried, so it might give similar patterns to your last pictur) might be: average(interpolate(pos().y<0 ? 1 : 0)) the conversion cellValue->faceValue->cellValue might blur out the border a bit Bernhard
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
June 11, 2008, 16:40 |
Hi!
One last thing (and the
|
#32 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Hi!
One last thing (and then I will shut up). If you can assume that the cells are approximately cubes then you might get their characteristic length with "pow(vol(),0.3333)" Bernhard
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
June 11, 2008, 16:58 |
Hi Bernhard
Oh, I sincerely
|
#33 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
Oh, I sincerely appreciate you talking, thus you don't have to shut up I have been around the cube-assumption, but my mesh is far from having uniform cells and the ratios of the characteristic lengths varies from cell to cell, thus it would not work (and would prefer a more genenic formulation). Since writing you last time I have been looking into the code, and I have come up with a more clear and robust formulation of my problem. What I actually needs is the maximum projection of the face extend in the three cartesian coordinates. I will try to make an implementation of such a projection and if I get it to work post the code-snippet and make the wiki. Because assuming edges aligned with the 'z'-axis, completely valid for 2D and also for my 3D-problems, the local ratio of intersected faces is easily written as (fpos().y - 0.5 * proj().y) / proj().y where proj is the projected face-extend and the surface is placed at y=0. Keep you posted and thanks for your help, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 13, 2008, 05:48 |
Hi Bernhard
I have made a s
|
#34 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
I have made a small 'reverse-engineering' and implemented a new part which gives the projection of the individual face. It looks like this: Foam::surfaceVectorField *ValueExpressionDriver::makeFaceProjectionField() { Foam::dimensionSet nullDim(0,0,0,0,0); Foam::surfaceVectorField *f=new Foam::surfaceVectorField( Foam::IOobject ( "fproj", time, mesh, Foam::IOobject::NO_READ, Foam::IOobject::NO_WRITE ), mesh, Foam::vector(0,0,0) ); f->dimensions().reset(mesh.Cf().dimensions()); Foam::vector fmin(0,0,0); Foam::vector fmax(0,0,0); forAll(*f,faceI) { const Foam::face &fProp = mesh.faces()[faceI]; fmin = mesh.points()[fProp[0]]; fmax = fmin; forAll(fProp,pointI) { forAll(mesh.points()[0],compI) { if(mesh.points()[fProp[pointI]].component(compI) < fmin.component(compI)) fmin.component(compI) = mesh.points()[fProp[pointI]].component(compI); if(mesh.points()[fProp[pointI]].component(compI) > fmax.component(compI)) fmax.component(compI) = mesh.points()[fProp[pointI]].component(compI); } } (*f)[faceI] = fmax - fmin; } f->dimensions().reset(nullDim); return f; } It works perfectly when multiplying, addition and substraction, but dividing fails. The part which fails is: ... : (fproj().y <= surf(0.00001) ? surf(0.5) : (surf(0.5) - fpos().y / fproj().y))))" It fails with a floating point exception, thus my guess is that I am somehow dividing by 0, even though I have my fail-safe, where I specify the value if the projected value is to small. I am a little bit in the dark here, so I would appreciate your help. Have a nice weekend, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 13, 2008, 08:47 |
Hi Niels!
The problem ist t
|
#35 |
Assistant Moderator
Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,225
Rep Power: 51 |
Hi Niels!
The problem ist the following: for the ?:-operator FSF evaluates all three fields (the condition, the true and the false-value) and then chooses the value for each cell according to the value of the condition in that cell. The only fix I can think of is to add a very small value to the divisor. For large values it won't matter, for small values it will be abandoned anyway. Fixing it in FSF would mean a major rewrite, I think Once you got it successfully tested would you commit the changed files to the SVN-repository (in other words: are you configured for write access to the SVN? If no: could you send me an EMail with the name of your sourceforge-account and I'll add you) Bernhard
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request |
|
June 13, 2008, 09:56 |
Hi Bernhard,
It solved it,
|
#36 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard,
It solved it, thanks So now I can bring a small comparison. In the picture below the top figure is a setField equivalent, the middle it using the approach suggested by you the 29th of May and the bottom figure is where the length of the face above and below the waterline is taken into consideration. Not surprisingly, the more information used the better the result. I will verify my implementation and return to you. Enjoy, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 13, 2008, 10:48 |
Wiki updated.
/ Niels
|
#37 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Wiki updated.
/ Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 16, 2008, 11:03 |
Hi
I actually thought that
|
#38 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi
I actually thought that I had it figured out, and I did for the internal faces. The boundary faces on the other hand is not treated in the loop. Therefor I have made an extra loop which loops over boundary-patches and faces in these. All works well, but I do not know how to assign the calculated value to the boundaryField. I would very much appreciate any help in how to assign values to a boundaryPatch in a face per face approch. Thanks, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 17, 2008, 06:57 |
Hi Bernhard
The functionali
|
#39 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Bernhard
The functionality fproj has now been tested. I cannot see your email-address. My address is ngj@mek.dtu.dk. Best regards, Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request. |
|
June 28, 2008, 05:42 |
Hi, i used seccessfully funkys
|
#40 |
New Member
Carlo De Angelis
Join Date: Mar 2009
Posts: 10
Rep Power: 17 |
Hi, i used seccessfully funkysetFields to set an initial gamma field, but I would like to know if it's possible to set even an initial hydrostatic pressure field, something like pd=pd*rho*pos().z.
Someone could help me? thank you very much |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[swak4Foam] groovyBC and funkySetFields married and got a kid named swak4Foam | gschaider | OpenFOAM Community Contributions | 169 | August 10, 2023 10:01 |
[swak4Foam] how to use funkySetFields function in muliregion case | bryant_k | OpenFOAM Community Contributions | 15 | October 15, 2021 03:50 |
[swak4Foam] funkySetFields and funkySetBoundaryFields | zxj160 | OpenFOAM Community Contributions | 19 | February 14, 2018 20:07 |
[swak4Foam] funkySetFields: problem with processor boundary | nmikhailov | OpenFOAM Community Contributions | 4 | May 26, 2015 10:48 |
[swak4Foam] numerical beach with funkySetFields?! | maxonline | OpenFOAM Community Contributions | 6 | June 17, 2011 05:59 |