CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   codedFixedValue boundaries in parallel (http://www.cfd-online.com/Forums/openfoam/123674-codedfixedvalue-boundaries-parallel.html)

Hiroshiman September 18, 2013 11:15

codedFixedValue boundaries in parallel
 
Hello,
I'm using the codedFixedValue to set the pressure on the outlet on my case (flowRate at the inlet, pressure on the outlets).
I used the flowRate on the outlets to set the pressure. When the run is sequential, everything works fine but in parallel, the pressure isn't applied correctly.

My codeDict:
Code:


//reading the pressure on the considered patch     
        const volScalarField& p = db().lookupObject<volScalarField>("p");
        const fvPatchField<scalar>& pip = patch().patchField<volScalarField, scalar>(p);

//reading the flowRate on the considered patch     
        const surfaceScalarField& phi = db().lookupObject<surfaceScalarField>("phi");
        const fvsPatchField<scalar>& phip = patch().patchField<surfaceScalarField, scalar>(phi);


        int k=0;
        dimensionedScalar h("h",dimless, tstep.value());
        dimensionedScalar pp("pp",dimless, average(pip));    //average pressure on the patch
        dimensionedScalar res("res",dimless,1E6);
        dimensionedScalar p0("p0",dimless, 1E6);     
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

      pp += h * sum(phip); //test

        (*this)==(pp.value());
        #};

The average of the pressure isn't working well in parallel as it tries to do it where there the patch area is null:
Code:

--> FOAM Warning :
    From function average(const UList<Type>&)
    in file /home/apps/Logiciels/OpenFOAM/OpenFOAM-2.2.x/src/OpenFOAM/lnInclude/FieldFunctions.C at line 467
    empty field, returning zero


I guess I'm reading and writing the pressure and flowRate correctly but I don't really know what to do.



edit : I think the problem is only the access of the data on the processor patch and not the whole BC ; how can I get these data ?
If someone is able to help, thank you a lot.

Florian

jherb September 19, 2013 04:47

I think you have to use the OpenFOAM reduce functions to collect the data of all processors. These examples should help:
http://www.cfd-online.com/Forums/ope...tml#post429245
https://github.com/OpenFOAM/OpenFOAM...patchAverage.C

Hiroshiman September 19, 2013 13:45

Thank you for the answer.
Actually, I'm a bit lost :
I'm using the codedFixedValue BC and the structure of the code is quite different from what I see in the "real" BCs codes.
For example, to get the patch area, I do :
Code:

dimensionedScalar area("area",dimless, gSum(patch().magSf()));
and even if the patch is shared between several cpus, the area is ok. However, the pressure applied is not ok (several different values on the patch, dependant on the cpu).
I tried to assign on cpu for each outlets but it simply crashes...

gschaider September 19, 2013 19:58

Quote:

Originally Posted by Hiroshiman (Post 452594)
Thank you for the answer.
Actually, I'm a bit lost :
I'm using the codedFixedValue BC and the structure of the code is quite different from what I see in the "real" BCs codes.
For example, to get the patch area, I do :
Code:

dimensionedScalar area("area",dimless, gSum(patch().magSf()));
and even if the patch is shared between several cpus, the area is ok. However, the pressure applied is not ok (several different values on the patch, dependant on the cpu).
I tried to assign on cpu for each outlets but it simply crashes...

It never occurred to you that there might be a difference between gSum and sum (which you're using in your BC)?

Hiroshiman September 19, 2013 20:52

Ahem, I totally missed that obviously... Thank you for noticing, I'll try with the global sum and see how it behaves.

----------

edit
Thank you very much, my results are identical between sequential and parallel runs.

Best regards,

Florian


All times are GMT -4. The time now is 09:27.