/usr/include/trilinos/Epetra_FEVector.h is in libtrilinos-dev 10.4.0.dfsg-1ubuntu2.
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 | //@HEADER
/*
************************************************************************
Epetra: Linear Algebra Services Package
Copyright (2001) Sandia Corporation
Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
license for use of this work by or on behalf of the U.S. Government.
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
Questions? Contact Michael A. Heroux (maherou@sandia.gov)
************************************************************************
*/
//@HEADER
#ifndef EPETRA_FEVECTOR_H
#define EPETRA_FEVECTOR_H
#include <Epetra_CombineMode.h>
#include <Epetra_Map.h>
#include <Epetra_MultiVector.h>
class Epetra_IntSerialDenseVector;
class Epetra_SerialDenseVector;
/** Epetra Finite-Element Vector. This class inherits Epetra_MultiVector
and thus provides all Epetra_MultiVector functionality.
The added functionality provided by Epetra_FEVector is the ability to
perform finite-element style vector assembly. It accepts sub-vector
contributions, such as those that would come from element-load vectors, etc.,
and these sub-vectors need not be owned by the local processor. In other
words, the user can assemble overlapping data (e.g., corresponding to shared
finite-element nodes). When the user is finished assembling their vector
data, they then call the method Epetra_FEVector::GlobalAssemble() which
gathers the overlapping data (all non-local data that was input on each
processor) into the data-distribution specified by the map that the
Epetra_FEVector is constructed with.
*/
class EPETRA_LIB_DLL_EXPORT Epetra_FEVector : public Epetra_MultiVector {
public:
/** Constructor that requires a map specifying a non-overlapping
data layout.
@param Map Map describing a non-overlapping distribution for the
underlying Epetra_MultiVector that this Epetra_FEVector will
be funnelling data into.
@param numVectors Optional argument, default value is 1. (See the
documentation for Epetra_MultiVector for the meaning of this
argument.
@param ignoreNonLocalEntries Optional argument, default value is false.
Under certain special circumstances it is desirable to have
non-local contributions ignored rather than saving them for
the GlobalAssemble step.
*/
Epetra_FEVector(const Epetra_BlockMap& Map,
int numVectors=1,
bool ignoreNonLocalEntries=false);
/** Copy constructor. */
Epetra_FEVector(const Epetra_FEVector& source);
/** Destructor */
virtual ~Epetra_FEVector();
/** Accumulate values into the vector, adding them to any values that
already exist for the specified indices.
*/
int SumIntoGlobalValues(int numIDs,
const int* GIDs, const double* values,
int vectorIndex=0);
/** Accumulate values into the vector, adding them to any values that
already exist for the specified GIDs.
@param GIDs List of global ids. Must be the same length as the
accompanying list of values.
@param values List of coefficient values. Must be the same length as
the accompanying list of GIDs.
*/
int SumIntoGlobalValues(const Epetra_IntSerialDenseVector& GIDs,
const Epetra_SerialDenseVector& values,
int vectorIndex=0);
/** Copy values into the vector overwriting any values that already exist
for the specified indices.
*/
int ReplaceGlobalValues(int numIDs, const int* GIDs, const double* values,
int vectorIndex=0);
/** Copy values into the vector, replacing any values that
already exist for the specified GIDs.
@param GIDs List of global ids. Must be the same length as the
accompanying list of values.
@param values List of coefficient values. Must be the same length as
the accompanying list of GIDs.
*/
int ReplaceGlobalValues(const Epetra_IntSerialDenseVector& GIDs,
const Epetra_SerialDenseVector& values,
int vectorIndex=0);
int SumIntoGlobalValues(int numIDs,
const int* GIDs,
const int* numValuesPerID,
const double* values,
int vectorIndex=0);
int ReplaceGlobalValues(int numIDs, const int* GIDs,
const int* numValuesPerID,
const double* values,
int vectorIndex=0);
/** Gather any overlapping/shared data into the non-overlapping partitioning
defined by the Map that was passed to this vector at construction time.
Data imported from other processors is stored on the owning processor
with a "sumInto" or accumulate operation.
This is a collective method -- every processor must enter it before any
will complete it.
*/
int GlobalAssemble(Epetra_CombineMode mode = Add);
/** Set whether or not non-local data values should be ignored.
*/
void setIgnoreNonLocalEntries(bool flag) {
ignoreNonLocalEntries_ = flag;
}
Epetra_FEVector& operator=(const Epetra_FEVector& source);
private:
int inputValues(int numIDs,
const int* GIDs, const double* values,
bool suminto,
int vectorIndex);
int inputValues(int numIDs,
const int* GIDs, const int* numValuesPerID,
const double* values,
bool suminto,
int vectorIndex);
int inputNonlocalValue(int GID, double value, bool suminto,
int vectorIndex);
int inputNonlocalValues(int GID, int numValues, const double* values,
bool suminto, int vectorIndex);
void destroyNonlocalData();
int myFirstID_;
int myNumIDs_;
int* nonlocalIDs_;
int* nonlocalElementSize_;
int numNonlocalIDs_;
int numNonlocalIDsAlloc_;
double** nonlocalCoefs_;
int numNonlocalCoefs_;
int numNonlocalCoefsAlloc_;
bool ignoreNonLocalEntries_;
};
#endif
|