12 #include "../config/config.hpp"
42 int s1 = lelem_ldof.
Size(), s2 = nelem_ndof.
Size();
43 const int *I1 = lelem_ldof.
GetI(), *J1 = lelem_ldof.
GetJ();
44 const int *I2 = nelem_ndof.
GetI(), *J2 = nelem_ndof.
GetJ();
45 const int nnz1 = I1[s1], nnz2 = I2[s2];
47 elem_dof.
SetDims(s1 + s2, nnz1 + nnz2);
49 int *I = elem_dof.
GetI(), *J = elem_dof.
GetJ();
50 for (
int i = 0; i <= s1; i++)
52 for (
int j = 0; j < nnz1; j++)
54 for (
int i = 0; i <= s2; i++)
55 I[s1+i] = I2[i] + nnz1;
56 for (
int j = 0; j < nnz2; j++)
57 J[nnz1+j] = J2[j] +
height;
87 mfem::Mult(*face_lelem, lelem_ldof, face_ldof);
95 int *I = dof_dof.
GetI();
96 int *J = dof_dof.
GetJ();
97 int nrows = dof_dof.
Size();
98 double *data =
new double[I[nrows]];
112 if (
fbfi.Size() == 0)
127 for (
int i = 0; i < glob_J.Size(); i++)
129 glob_J[i] = J[i] + ldof_offset;
131 glob_J[i] = face_nbr_glob_ldof[J[i] - lvsize];
154 for (
int i = 0; i < nfaces; i++)
159 vdofs1.
Copy(vdofs_all);
160 for (
int j = 0; j < vdofs2.
Size(); j++)
163 for (
int k = 0; k <
fbfi.Size(); k++)
178 if (
mat == NULL &&
fbfi.Size() > 0)
193 MFEM_VERIFY(
fbfi.Size() == 0,
"the case of interior face integrators is not"
219 for (
int i = 0; i < m->
Height(); i++)
223 for (
int j = I[i]; j < I[i+1]; j++)
234 local.GetI(), local.GetJ(), local.GetData(),
249 int *row_starts, *col_starts;
250 if (HYPRE_AssumedPartitionCheck())
254 row_starts =
new int[n];
255 col_starts =
new int[n];
256 for (i = 0; i < n; i++)
265 for (
int bi = 0; bi < rdim; bi++)
266 for (
int bj = 0; bj < ddim; bj++)
268 int *I = lblocks(bi,bj)->GetI();
269 int *J = lblocks(bi,bj)->GetJ();
270 double *data = lblocks(bi,bj)->GetData();
275 for (i = 0; i < lblocks(bi,bj)->Height(); i++)
279 for (j = I[i]; j < I[i+1]; j++)
286 delete lblocks(bi,bj);
294 local.GetI(), local.GetJ(), local.GetData(),
295 row_starts, col_starts);
298 delete [] row_starts;
299 delete [] col_starts;
305 int *trial_dof_off =
trial_pfes -> GetDofOffsets();
306 int *test_dof_off =
test_pfes -> GetDofOffsets();
310 if (HYPRE_AssumedPartitionCheck())
HypreParMatrix * ParallelAssemble()
Returns the matrix "assembled" on the true dofs.
int Size() const
Logical size of the array.
virtual int NumNonZeroElems() const
Returns the number of the nonzero elements in the matrix.
void Mult(const Table &A, const Table &B, Table &C)
C = A * B (as boolean matrices)
int GetNSharedFaces() const
Return the number of shared faces (3D), edges (2D), vertices (1D)
void SetDims(int rows, int nnz)
void Copy(Array ©) const
Create a copy of the current array.
void BuildElementToDofTable()
void LoseData()
Call this if data has been stolen.
ParFiniteElementSpace * ParFESpace()
void GetFaceNbrElementVDofs(int i, Array< int > &vdofs) const
void SetSize(int m, int n)
int GetGlobalTDofNumber(int ldof)
Returns the global tdof number of the given local degree of freedom.
const FiniteElement * GetFaceNbrFE(int i) const
void ExchangeFaceNbrData()
int MultTranspose(HypreParVector &x, HypreParVector &y, double alpha=1.0, double beta=0.0)
Computes y = alpha * A^t * x + beta * y.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows.
int Append(const T &el)
Append element to array, resize if necessary.
Mesh * GetMesh() const
Returns the mesh.
HypreParMatrix * RAP(HypreParMatrix *A, HypreParMatrix *P)
Returns the matrix P^t * A * P.
void Transpose(const Table &A, Table &At, int _ncols_A)
Transpose a Table.
int GetLocalTDofNumber(int ldof)
int GetGlobalScalarTDofNumber(int sldof)
int Size() const
Returns the number of TYPE I elements.
int GetVDim() const
Returns vector dimension.
double * GetData() const
Return element data.
void AddSubMatrix(const Array< int > &rows, const Array< int > &cols, const DenseMatrix &subm, int skip_zeros=1)
int * GetI() const
Return the array I.
HypreParMatrix * Dof_TrueDof_Matrix()
The true dof-to-dof interpolation matrix.
ParFiniteElementSpace * domain_fes
virtual void Mult(const Vector &x, Vector &y) const
Matrix vector multiplication.
void GetElementVDofs(int i, Array< int > &dofs) const
Returns indexes of degrees of freedom in array dofs for i'th element.
void Distribute(const Vector *tv)
Table * GetFaceToElementTable() const
void Update(ParFiniteElementSpace *f)
Table face_nbr_element_dof
ParFiniteElementSpace * range_fes
const FiniteElement * GetFE(int i) const
Returns pointer to the FiniteElement associated with i'th element.
int * GetFaceNbrGlobalDofMap()
int * GetTrueDofOffsets()
int GetFaceNbrVSize() const
void GetParBlocks(Array2D< HypreParMatrix * > &blocks) const
const Table & GetElementToDofTable() const
Table * GetFaceToAllElementTable() const
FaceElementTransformations * GetSharedFaceTransformations(int)
Wrapper for hypre's ParCSR matrix class.
int * GetJ() const
Return the array J.
Class for parallel meshes.