message: Adding DofTransformations in PrefinementOperator::Mult/MultTranspose
diff: @@ -961,8 +961,8 @@ void PRefinementTransferOperator::Mult(const Vector& x, Vector& y) const
  for (int i = 0; i < mesh->GetNE(); i++)
  {
  - hFESpace.GetElementDofs(i, h_dofs);
  - lFESpace.GetElementDofs(i, l_dofs);
  + DofTransformation * doftrans_h = hFESpace.GetElementDofs(i, h_dofs);
  + DofTransformation * doftrans_l = lFESpace.GetElementDofs(i, l_dofs);
  const Geometry::Type geom = mesh->GetElementBaseGeometry(i);
  if (geom != cached_geom)
  @@ -982,7 +982,15 @@ void PRefinementTransferOperator::Mult(const Vector& x, Vector& y) const
  h_dofs.Copy(h_vdofs);
  hFESpace.DofsToVDofs(vd, h_vdofs);
  x.GetSubVector(l_vdofs, subX);
  + if (doftrans_l)
  + {
  + doftrans_l->InvTransformPrimal(subX);
  + }
  loc_prol.Mult(subX, subY);
  + if (doftrans_h)
  + {
  + doftrans_h->TransformPrimal(subY);
  + }
  y.SetSubVector(h_vdofs, subY);
  }
  }
  @@ -1010,8 +1018,8 @@ void PRefinementTransferOperator::MultTranspose(const Vector& x,
  for (int i = 0; i < mesh->GetNE(); i++)
  {
  - hFESpace.GetElementDofs(i, h_dofs);
  - lFESpace.GetElementDofs(i, l_dofs);
  + DofTransformation * doftrans_h = hFESpace.GetElementDofs(i, h_dofs);
  + DofTransformation * doftrans_l = lFESpace.GetElementDofs(i, l_dofs);
  const Geometry::Type geom = mesh->GetElementBaseGeometry(i);
  if (geom != cached_geom)
  @@ -1033,6 +1041,10 @@ void PRefinementTransferOperator::MultTranspose(const Vector& x,
  hFESpace.DofsToVDofs(vd, h_vdofs);
  x.GetSubVector(h_vdofs, subX);
  + if (doftrans_h)
  + {
  + doftrans_h->InvTransformDual(subX);
  + }
  for (int p = 0; p < h_dofs.Size(); ++p)
  {
  if (processed[lFESpace.DecodeDof(h_dofs[p])])
  @@ -1042,6 +1054,10 @@ void PRefinementTransferOperator::MultTranspose(const Vector& x,
  }
  loc_prol.Mult(subX, subY);
  + if (doftrans_l)
  + {
  + doftrans_l->TransformDual(subY);
  + }
  y.AddElementVector(l_vdofs, subY);
  }
  