setting pressure boundary conditions

Help
2012-06-02
2012-12-21
  • Hon Fai Choi

    Hon Fai Choi - 2012-06-02

    Hi,

    I have a problem with understanding how the boundary conditions can be modified. I am trying to apply the potentialFlux solver on a unit rectangular domain of which I have created a mesh using Gmsh. First I applied a uniform pressure difference between two opposing sides (labeled as "inflow" and "outflow") as boundary condition (uniform fixedValue ), while a zeroGradient boundary condition was applied on the two other sides. This case runs ok, but when I tried to apply a nonuniform fixedValue boundary condition on the "inflow" side, I get a weird result. Using the face centre coordinates of the "inflow" patch, I tried to apply a linearly varying pressure over the "inflow" patch. But when I look at the result, the pressure does not vary linearly over the "inflow" patch and the values don't match with my input values. I manipulated the boundary condition as follow:       

    {
    in_bnd = p.ext_boundaryField()[inflow_ind]
    in_centres = foam_vector2numpy(in_bnd.patch().Cf())
    in_inds = numpy.argsort(in_centres[:,1])
    ref_coords = np.linspace(0.0,1.0,51)
    ref_vals = np.linspace(0.0,5.0,51)
    new_in_vals = numpy.interp(numpy.sort(in_centres[:,1]),ref_coords,ref_vals)[in_inds]
    for ind in range(in_bnd.size()): 
         in_bnd[ind] = 10.0 + new_in_vals[ind]
    }
    

    where 'foam_vector2numpy' is a function that I wrote to transfer an OpenFOAM vector List to a numpy array. I must be modifying the boundary conditions wrongly, otherwise I don't know how to explain the results. Is this a legitimated way of accessing and modifying the boundary conditions?

    thanks,
    Hon Fai

     
  • Alexey Petrov

    Alexey Petrov - 2012-06-02

    Dear Hon Fai,

    Can you get the desired results if you would write in C++?

    pythonFlu is able to simplify C++ coding, but it basically does not perform any magic and redirect all its calls to corresponding C++ functionality. So, if you could express your thoughts in terms of the OpenFOAM C++ API, then it will be easier for me to help your in translating your ideas into Python.

    By the way, I think that the right solution for you need will be the definition of a new boundary condition.
    pythonFlu contains an example of how to do it properly in Python, look -
      http://github.com/asimurzin/chtMultiRegionFlux/blob/master/chtMultiRegionFlux/r1_5/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.py

    Best regards,
    Alexey

     
  • Hon Fai Choi

    Hon Fai Choi - 2012-06-02

    Hi Alexey,

    I am not so familiar with the OpenFOAM C++ API, especially with how the datastructures work together. Most of the documentation deals with setting up the input files to run cases,
    while I could find hardly any on how the data is actually stored and passed on during a simulation. I am not trying to implement a new boundary condition,
    I just simply want to change the values in a fixedValue boundary condition assigned to a certain boundary patch, depending on the location of the face in the patch.
    In the case I am trying (potentialFoam to solve the Poisson equation), I initiate the data structures with input files. The p and U input files were set as follow:

    the p file:

    dimensions      [0 2 -2 0 0 0 0];
    internalField   uniform 0;
    boundaryField
    {
        inflow
        {
          type  fixedValue;
          value  1.0;
        }
        outflow
        {
          type fixedValue;
          value uniform 0.0;
        }
        side
        {
            type            zeroGradient;
        }
        defaultFaces
        {
            type            empty;
        }
    }
    

    the U file:

    dimensions      ;

    internalField   uniform (0 0 0);

    boundaryField
    {   
        inflow
        {
          type   calculated;
        }

        outflow
        {
          type calculated;
        }
       
        side
        {
          type            zeroGradient;
        }

        defaultFaces
        {
            type            empty;
        }
    }

    I can of course use the input files to define a nonuniform fixedValue boundary condition with a List<scalar> containing the values.
    The problem is that I don't know a priori how the faces are ordered in the patch so I don't know how to order the values in the List<scalar>.
    Moreover, I am trying to construct an algorithm in which the boundary values are varied in an optimization routine, so I would like to change the boundary values interactively,  which I tried using the code as described in my previous post.    

    I hope it is clear what it is that I am trying to do. I checked several times whether I assigned the right value to the right face, based on the coordinates of the face centres.

    I am not sure what I am doing wrong. I assumed it should be possible to change the values in a boundary patch after initialization from file. Do I need to change anything else or call an update function?
    Or do I really need to implement a new boundary condition? How would this be different from what I am doing now?

    many thanks,
    Hon Fai

     
  • Hon Fai Choi

    Hon Fai Choi - 2012-06-02

    Sorry,

    I just saw a typo in my previous post.
    the inflow boundary condition in the p file should be:

    inflow
    {
      type fixedValue;
      value uniform 1.0;
    }
    

    sorry,
    Hon Fai

     
  • Hon Fai Choi

    Hon Fai Choi - 2012-06-04

    Ok, I figured out what went wrong. I got the indexing wrong after all plus I got mislead by the visualization in vtk. I had to use the 'vtkCellDataToPointData' class to convert the cell data to point data before I could use the stream tracer in vtk. This is apparently done by averaging between neighbouring cells, which results in different values at the boundaries than what I defined and hence expected.
    What I am trying works: the boundary values can be easily updated in pythonFlu, which I was looking for.

    Many thanks and sorry again for the confusion,
    Hon Fai 

     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks