CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Programming & Development

surface and volume fields multiplication

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   March 2, 2011, 20:10
Default surface and volume fields multiplication
  #1
New Member
 
Ivan
Join Date: Sep 2010
Location: Russia , Moscow.
Posts: 13
Rep Power: 6
Zato_Ichi is on a distinguished road
Greetings !

I have two fields: volVectorField X and surfaceScalarField M. Is there any method to multiply them to get volume field on new time step like that :
X(n+1,i) = X(n,i-1)*M(n,1-1/2)-X(n,i+1)*M(n,i+1/2)
there n timestep index and i index of a cell. i+1/2 - right face of a cell i-1/2 - left face.

I assumed that this will look like interpolate(interpolate(X)*M) with upwind interpolation schemes, but as i know there is no method for interpolating face field onto cell volumes.
Is there any way to make such construction in solver ?

Best regards !
Zato_Ichi is offline   Reply With Quote

Old   March 7, 2011, 13:10
Default
  #2
Member
 
Ivor Clifford
Join Date: Mar 2009
Location: Switzerland
Posts: 91
Rep Power: 8
cliffoi is on a distinguished road
Something along these lines should do the trick. You're going to have to sort out the the discretization and mathematical correctness of it all. Since the mesh is unstructured you'll probably need to use the face normal vector or something to get the direction. Also take a look at finiteVolume/finiteVolume/fvc/fvcReconstruct.C, which does something similar.
Code:
    vectorField& Xi = X.internalField();
    const vectorField& X0i = X.oldTime().internalField();
    const scalarField& M0i = M.oldTime().internalField();

    const unallocLabelList& owner = mesh.owner();
    const unallocLabelList& neighbour = mesh.neighbour();

    Xi = vector::zero;
    
    forAll(owner, faceI)
    {
        label P = owner[faceI];
        label N = neighbour[faceI];

        // You're gonna have to sort out the sign issue here
        // This will probably need the face normal
        Xi[P] += X0i[N]*M0i[faceI];
        Xi[N] -= X0i[P]*M0i[faceI];
    }

    forAll(mesh.boundaryMesh(), patchI)
    {
        fvPatchVectorField& pf = X.boundaryField()[patchI];
        const fvPatchVectorField& pf0 = X.oldTime().boundaryField()[patchI];
        const fvsPatchScalarField& psf = M.oldTime().boundaryField()[patchI];

        const unallocLabelList& faceCells = mesh.boundaryMesh()[patchI].faceCells();

        if (pf.coupled())
        {
            // I'm going to leave this one up to you
        }
        else
        {
            forAll(pf, faceI)
            {
                Xi[faceCells[faceI]] += pf0[faceI]*psf[faceI];
            }
        }        
    }

    X.correctBoundaryConditions();

Last edited by cliffoi; March 7, 2011 at 13:21. Reason: Forgot the boundaries
cliffoi is offline   Reply With Quote

Old   March 7, 2011, 13:25
Default
  #3
Member
 
Ivor Clifford
Join Date: Mar 2009
Location: Switzerland
Posts: 91
Rep Power: 8
cliffoi is on a distinguished road
This might be a much simpler alternative. Again, you need to sort out the discretization and mathematical correctness.
X = fvc::surfaceSum(fvc::interpolate(X.oldTime())*M.ol dTime())
cliffoi is offline   Reply With Quote

Old   March 7, 2011, 18:44
Default
  #4
New Member
 
Ivan
Join Date: Sep 2010
Location: Russia , Moscow.
Posts: 13
Rep Power: 6
Zato_Ichi is on a distinguished road
Hi Ivor , thank you very much for your reply !

It was really helpful for me. I'm trying to add some another algorithms in OpenFoam like FLIC or Big particles method, but there is a very little information about classes and methods in OpenFoam and tutorials for their usage, except Doxygen documentation. Construction proposed by you in your second post looks to be that i need. I used it for coding 3rd step in FLIC method and solver is compiling well now. I will try to solve some test cases and work out correctness issue.

Best regards !
Zato_Ichi is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Error : Self intersecting surface mesh, computing intersections & Error : Impossible velan Open Source Meshers: Gmsh, Netgen, CGNS, ... 1 July 14, 2015 05:54
Problem with Gmsh nishant_hull Open Source Meshers: Gmsh, Netgen, CGNS, ... 18 April 22, 2015 08:43
Hex with transfinite Volume Mjoelnir Open Source Meshers: Gmsh, Netgen, CGNS, ... 7 May 12, 2014 18:00
boundaries with gmshToFoam‏ ouafa Open Source Meshers: Gmsh, Netgen, CGNS, ... 7 May 21, 2010 12:43
CuBit t42 OpenFOAM Meshing & Mesh Conversion 6 July 10, 2008 07:51


All times are GMT -4. The time now is 01:58.