CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Continuity equation in coupledFvMatrix (http://www.cfd-online.com/Forums/openfoam-programming-development/76897-continuity-equation-coupledfvmatrix.html)

bastil June 8, 2010 03:51

Continuity equation in coupledFvMatrix
 
HI all,

I try to write a coupled solver that uses continuity equation. I tried to do it that way:

Code:

        coupledFvScalarMatrix coupledEqns(1);

        coupledEqns.set
            (   
            0,
            new volScalarField
            (
                fvc::div(phi)
            )
        );

Does not seem to work that way. Do I need to convert to fvScalarMatrix? How? Thanks.

Regards Bastian

l_r_mcglashan June 9, 2010 04:07

Just make it of type fvScalarMatrix:

Code:

coupledFvScalarMatrix coupledEqns(1);

coupledEqns.set
(   
  0,
  new fvScalarMatrix
  (
      fvm::ddt(rho)
      fvc::div(phi)
  )
);

where phi = rho*U interpolated to the cell faces. You can't solve what you had previously because fvc::grad calculates the gradient explicitly; there is no variable to solve for!

bastil June 9, 2010 09:40

Thanks Laurence,

since my code is steady-state and incompressible I do not really need fvm::ddt(rho). So I tried:

Code:

coupledFvScalarMatrix coupledEqns(1);

coupledEqns.set
(   
  0,
  new fvScalarMatrix
  (
      fvc::div(phi)
  )
);

This throws an error:

Code:

Making dependency list for source file coupledFoam.C
SOURCE=coupledFoam.C ;  g++ -m64 -Dlinux64 -DDP -DFOAM_DEV_REVISION_NUMBER=1716 -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3  -DNoRepository -ftemplate-depth-40 -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/turbulenceModels/RAS -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/coupledMatrix/lnInclude -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/transportModels -IlnInclude -I. -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/OpenFOAM/lnInclude -I/opt/OpenFOAM/OpenFOAM-1.5-dev/src/OSspecific/Unix/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/coupledFoam.o
In file included from coupledFoam.C:65:
coupledEqn.H: In function ‘int main(int, char**)’:
coupledEqn.H:14: error: no matching function for call to ‘Foam::fvMatrix<double>::fvMatrix(Foam::tmp<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> >)’
/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude/fvMatrix.C:327: note: candidates are: Foam::fvMatrix<Type>::fvMatrix(Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>&, Foam::Istream&) [with Type = double]
/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude/fvMatrix.C:266: note:                Foam::fvMatrix<Type>::fvMatrix(const Foam::tmp<Foam::fvMatrix<Type> >&) [with Type = double]
/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude/fvMatrix.C:235: note:                Foam::fvMatrix<Type>::fvMatrix(const Foam::fvMatrix<Type>&) [with Type = double]
/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude/fvMatrix.C:188: note:                Foam::fvMatrix<Type>::fvMatrix(Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>&, const Foam::dimensionSet&) [with Type = double]
/opt/OpenFOAM/OpenFOAM-1.5-dev/src/finiteVolume/lnInclude/initContinuityErrs.H:38: warning: unused variable ‘cumulativeContErr’
make: *** [Make/linux64GccDPOpt/coupledFoam.o] Error 1

I don't really understand why.

hjasak June 9, 2010 12:15

Easy - you are trying to make a matrix and you are only giving it a field: fvc::div(phi).

That has no matrix coefficients - how do you expect to solve the system of equations that says

[0] * [x] = [b]

Hrv

bastil June 9, 2010 17:33

Quote:

Originally Posted by hjasak (Post 262323)

That has no matrix coefficients - how do you expect to solve the system of equations that says

[0] * [x] = [b]

Thanks Hrv,

that makes sence. I am not yet deep enough in it. So how is the correct formulation of the continuity equation?

mikeP February 10, 2012 08:40

Hello Mr. Jasak,

This is interesting. Could you also explain this code (fvm::div(phi, U) == 0) in the matrix form, similar to what you have written before as [0] * [x] = [b] ?

All the best

mikeP February 10, 2012 10:24

another question - how is this possible? divergence of a scalar?

fvc::div(phi)

T.D. October 13, 2014 09:05

Hi
 
Hi,

fvm: (div,phi) == 0

Briefly explaining,

fvm: stands for implicit. A discretization in space is done first (via the FVM) and in time if necessary and all the coeffs. are placed in a matrix form [O], then the resultant of the discretization of the source terms are placed to the right hand side of the equation in a vector [S].where the unknowns are the velocity field vector components on the mesh.
All above, are such that [O]*[U] = [S] which is solved to find [U] vector field components.

For the scalar issue: you should see 4.4.5 in:
http://www.openfoam.org/docs/user/fvSchemes.php

Regards,

T.D.


All times are GMT -4. The time now is 20:51.