This file is indexed.

/usr/include/palabos/boundaryCondition/neumannCondition3D.h is in libplb-dev 1.5~r1+repack1-2build2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/* This file is part of the Palabos library.
 *
 * Copyright (C) 2011-2015 FlowKit Sarl
 * Route d'Oron 2
 * 1010 Lausanne, Switzerland
 * E-mail contact: contact@flowkit.com
 *
 * The most recent release of Palabos can be downloaded at 
 * <http://www.palabos.org/>
 *
 * The library Palabos is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * The library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/** \file
 * Neumann and outflow boundary conditions -- header file.
 */
#ifndef NEUMANN_CONDITION_3D_H
#define NEUMANN_CONDITION_3D_H

#include "core/globalDefs.h"
#include "core/blockLatticeBase3D.h"
#include "atomicBlock/blockLattice3D.h"
#include "atomicBlock/dataProcessorWrapper3D.h"
#include "boundaryCondition/boundaryDynamics.h"

namespace plb {

template<typename T, template<typename U> class Descriptor, int direction, int orientation>
class CopyUnknownPopulationsFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyUnknownPopulationsFunctional3D<T,Descriptor,direction,orientation>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

template<typename T, template<typename U> class Descriptor, int normalX, int normalY, int normalZ>
class CopyAllPopulationsFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyAllPopulationsFunctional3D<T,Descriptor,normalX,normalY,normalZ>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

template<typename T, template<typename U> class Descriptor, int normalX, int normalY, int normalZ>
class CopyVelocityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyVelocityFunctional3D<T,Descriptor,normalX,normalY,normalZ>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

template<typename T, template<typename U> class Descriptor, int normalX, int normalY, int normalZ>
class CopyTangentialVelocityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyTangentialVelocityFunctional3D<T,Descriptor,normalX,normalY,normalZ>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

template<typename T, template<typename U> class Descriptor, int normalX, int normalY, int normalZ>
class CopyNormalVelocityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor> {
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyNormalVelocityFunctional3D<T,Descriptor,normalX,normalY,normalZ>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

template<typename T, template<typename U> class Descriptor, int normalX, int normalY, int normalZ>
class CopyDensityFunctional3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyDensityFunctional3D<T,Descriptor,normalX,normalY,normalZ>* clone() const;
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const;
    virtual BlockDomain::DomainT appliesTo() const;
};

/// Copy Unknown Populations Plus Impose Constant Pressure
template<typename T, template<typename U> class Descriptor, int direction, int orientation>
class FluidPressureOutlet3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual FluidPressureOutlet3D<T,Descriptor,direction,orientation>* clone() const {
        return new FluidPressureOutlet3D<T,Descriptor,direction,orientation>(*this);
    }
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const {
        modified[0] = modif::staticVariables;
    }
};


/// Copy Unknown Populations Plus Impose Constant Pressure
template<typename T, template<typename U> class Descriptor, int direction, int orientation>
class CopyUnknown3D : public BoxProcessingFunctional3D_L<T,Descriptor>
{
public:
    virtual void process(Box3D domain, BlockLattice3D<T,Descriptor>& lattice);
    virtual CopyUnknown3D<T,Descriptor,direction,orientation>* clone() const {
        return new CopyUnknown3D<T,Descriptor,direction,orientation>(*this);
    }
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const {
        modified[0] = modif::staticVariables;
    }
};


/// Outflow boundary condition that works with external rhoBar and J from the previous time step.
///     Caution is necessary with the usage of this data processor. The rhoBar and J provided,
///     must contain the values of the fields at the previous time step. This means that if
///     the "external-rhoBar-J-collide-and-stream" is used at a processor level 0, then
///     this data processor must be integrated at processor level 1, and the data processor
///     to recompute the new rhoBar and J should be integrated at processor level 2.
template<typename T, template<typename U> class Descriptor>
class VirtualOutlet : public BoxProcessingFunctional3D
{
public:
    /* Type 0: Close to FluidPressureOutlet3D (imposes a strict pressure).
     * Type 1: Laplacian filter / extrapolation on the pressure.
     **/
    VirtualOutlet(T outsideDensity_, Box3D globalDomain_, int type_=1);
    virtual void processGenericBlocks(Box3D domain, std::vector<AtomicBlock3D*> blocks);
    virtual VirtualOutlet<T,Descriptor>* clone() const
    {
        return new VirtualOutlet<T,Descriptor>(*this);
    }
    virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const
    {
        modified[0] = modif::staticVariables; // Block lattice.
        modified[1] = modif::nothing;         // RhoBar.
        modified[2] = modif::nothing;         // J.
    }
private:
    T outsideDensity;   // Boundary condition for the density (usually 1.0).
    Box3D globalDomain; // The globalDomain must be at most as big as the whole simulation
                        // domain for non-periodic problems, and bigger than the whole simulation
                        // domain plus the envelope (per periodic direction) for periodic problems.
    int type;           // If type = 0 then this is very close to FluidPressureOutlet3D.
                        // If type = 1 some times gives the best results.
};

template<typename T, template<typename U> class Descriptor, int direction, int orientation>
class VirtualOutletDynamics : public BoundaryCompositeDynamics<T,Descriptor>
{
public:
    /// Constructor
    VirtualOutletDynamics(Dynamics<T,Descriptor>* baseDynamics, bool automaticPrepareCollision = true);
    VirtualOutletDynamics(HierarchicUnserializer& unserializer);
    /// Clone the object on its dynamic type.
    virtual VirtualOutletDynamics<T, Descriptor, direction, orientation>* clone() const;
    virtual void serialize(HierarchicSerializer& serializer) const;
    virtual void unserialize(HierarchicUnserializer& unserializer);
    /// Return a unique ID for this class.
    virtual int getId() const;
    /// Execute completion scheme before base collision
    virtual void completePopulations(Cell<T,Descriptor>& cell) const;
    void saveData(Cell<T,Descriptor>& cell) const;
private:
    mutable std::vector<T> savedFneq;
    mutable Array<T,Descriptor<T>::d> savedJ;
    mutable T savedRhoBar;
    static int id;
};

}  // namespace plb

#endif  // NEUMANN_CONDITION_3D_H