Deprecate Vector implicit conversion to double*

This commit is contained in:
Will Pazner
2022-09-06 13:05:38 -07:00
parent 502d2f5dc7
commit 5a455dd141
21 changed files with 250 additions and 230 deletions
+19 -19
View File
@@ -618,7 +618,7 @@ void InvertLinearTrans(ElementTransformation &trans,
double store[3];
Vector v(store, x.Size());
pt.Get(v, x.Size());
pt.Get(v.HostReadWrite(), x.Size());
v -= x;
trans.InverseJacobian().Mult(v, x);
@@ -955,7 +955,7 @@ void VectorFiniteElement::Project_RT(
Trans.SetIntPoint(&Nodes.IntPoint(k));
// dof_k = nk^t adj(J) xk
Vector vk(vc.GetData()+k*sdim, sdim);
dofs(k) = Trans.AdjugateJacobian().InnerProduct(vk, nk + d2n[k]*dim);
dofs(k) = Trans.AdjugateJacobian().InnerProduct(vk.HostRead(), nk + d2n[k]*dim);
if (!square_J) { dofs(k) /= Trans.Weight(); }
}
}
@@ -978,7 +978,7 @@ void VectorFiniteElement::ProjectMatrixCoefficient_RT(
T.SetIntPoint(&Nodes.IntPoint(k));
mc.Eval(MQ, T, Nodes.IntPoint(k));
// nk_phys = adj(J)^t nk
T.AdjugateJacobian().MultTranspose(nk + d2n[k]*dim, nk_phys);
T.AdjugateJacobian().MultTranspose(nk + d2n[k]*dim, nk_phys.HostWrite());
if (!square_J) { nk_phys /= T.Weight(); }
MQ.Mult(nk_phys, dofs_k);
for (int r = 0; r < MQ.Height(); r++)
@@ -1053,7 +1053,7 @@ void VectorFiniteElement::Project_RT(
// Compute fe basis functions in physical space
fe.CalcVShape(Trans, vshape);
// Project fe basis functions onto transformed face normals
vshape.Mult(vk, vshapenk);
vshape.Mult(vk, vshapenk.HostWrite());
if (!square_J) { vshapenk /= Trans.Weight(); }
for (int j=0; j<vshapenk.Size(); j++)
{
@@ -1082,7 +1082,7 @@ void VectorFiniteElement::ProjectGrad_RT(
fe.CalcDShape(Nodes.IntPoint(k), dshape);
tk[0] = nk[d2n[k]*dim+1];
tk[1] = -nk[d2n[k]*dim];
dshape.Mult(tk, grad_k);
dshape.Mult(tk, grad_k.HostWrite());
for (int j = 0; j < grad_k.Size(); j++)
{
grad(k,j) = (fabs(grad_k(j)) < 1e-12) ? 0.0 : grad_k(j);
@@ -1120,7 +1120,7 @@ void VectorFiniteElement::ProjectCurl_ND(
fe.CalcCurlShape(ip, curlshape);
Mult(curlshape, JtJ, curlshape_J);
curlshape_J.Mult(tk + d2t[k]*dim, curl_k);
curlshape_J.Mult(tk + d2t[k]*dim, curl_k.HostWrite());
for (int j = 0; j < curl_k.Size(); j++)
{
curl(k,j) = (fabs(curl_k(j)) < 1e-12) ? 0.0 : curl_k(j);
@@ -1139,7 +1139,7 @@ void VectorFiniteElement::ProjectCurl_RT(
for (int k = 0; k < dof; k++)
{
fe.CalcCurlShape(Nodes.IntPoint(k), curl_shape);
curl_shape.Mult(nk + d2n[k]*dim, curl_k);
curl_shape.Mult(nk + d2n[k]*dim, curl_k.HostWrite());
for (int j = 0; j < curl_k.Size(); j++)
{
curl(k,j) = (fabs(curl_k(j)) < 1e-12) ? 0.0 : curl_k(j);
@@ -1173,7 +1173,7 @@ void VectorFiniteElement::Project_ND(
Trans.SetIntPoint(&Nodes.IntPoint(k));
Vector vk(vc.GetData()+k*dim, dim);
// dof_k = xk^t J tk
dofs(k) = Trans.Jacobian().InnerProduct(tk + d2t[k]*dim, vk);
dofs(k) = Trans.Jacobian().InnerProduct(tk + d2t[k]*dim, vk.HostRead());
}
}
@@ -1194,7 +1194,7 @@ void VectorFiniteElement::ProjectMatrixCoefficient_ND(
T.SetIntPoint(&Nodes.IntPoint(k));
mc.Eval(MQ, T, Nodes.IntPoint(k));
// tk_phys = J tk
T.Jacobian().Mult(tk + d2t[k]*dim, tk_phys);
T.Jacobian().Mult(tk + d2t[k]*dim, tk_phys.HostWrite());
MQ.Mult(tk_phys, dofs_k);
for (int r = 0; r < MQ.Height(); r++)
{
@@ -1267,7 +1267,7 @@ void VectorFiniteElement::Project_ND(
// Compute fe basis functions in physical space
fe.CalcVShape(Trans, vshape);
// Project fe basis functions onto transformed edge tangents
vshape.Mult(vk, vshapetk);
vshape.Mult(vk, vshapetk.HostWrite());
for (int j=0; j<vshapetk.Size(); j++)
{
I(k, j) = vshapetk(j);
@@ -1289,7 +1289,7 @@ void VectorFiniteElement::ProjectGrad_ND(
for (int k = 0; k < dof; k++)
{
fe.CalcDShape(Nodes.IntPoint(k), dshape);
dshape.Mult(tk + d2t[k]*dim, grad_k);
dshape.Mult(tk + d2t[k]*dim, grad_k.HostWrite());
for (int j = 0; j < grad_k.Size(); j++)
{
grad(k,j) = (fabs(grad_k(j)) < 1e-12) ? 0.0 : grad_k(j);
@@ -1320,7 +1320,7 @@ void VectorFiniteElement::LocalL2Projection_RT(
double w = ip.weight;
this->CalcVShape(ip, fine_shape);
Trans.Transform(ip, v);
tr_ip.Set(v, dim);
tr_ip.Set(v.HostRead(), dim);
cfe.CalcVShape(tr_ip, coarse_shape);
AddMult_a_AAt(w, fine_shape, fine_mass);
@@ -1407,7 +1407,7 @@ void VectorFiniteElement::LocalL2Projection_ND(
const IntegrationPoint &ip = ir.IntPoint(i);
this->CalcVShape(ip, fine_shape);
Trans.Transform(ip, v);
tr_ip.Set(v, dim);
tr_ip.Set(v.HostRead(), dim);
cfe.CalcVShape(tr_ip, coarse_shape);
AddMult_a_AAt(ip.weight, fine_shape, fine_mass);
@@ -1625,7 +1625,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u) const
{
case ChangeOfBasis:
{
CalcBasis(Ai.Width() - 1, y, x);
CalcBasis(Ai.Width() - 1, y, x.HostWrite());
Ai.Mult(x, u);
break;
}
@@ -1670,7 +1670,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u) const
break;
}
case Positive:
CalcBernstein(x.Size() - 1, y, u);
CalcBernstein(x.Size() - 1, y, u.HostWrite());
break;
case Integrated:
auxiliary_basis->Eval(y, u_aux, d_aux);
@@ -1686,7 +1686,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u, Vector &d) const
{
case ChangeOfBasis:
{
CalcBasis(Ai.Width() - 1, y, x, w);
CalcBasis(Ai.Width() - 1, y, x.HostWrite(), w.HostWrite());
Ai.Mult(x, u);
Ai.Mult(w, d);
break;
@@ -1749,7 +1749,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u, Vector &d) const
break;
}
case Positive:
CalcBernstein(x.Size() - 1, y, u, d);
CalcBernstein(x.Size() - 1, y, u.HostWrite(), d.HostWrite());
break;
case Integrated:
auxiliary_basis->Eval(y, u_aux, d_aux, d2_aux);
@@ -1770,7 +1770,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u, Vector &d,
{
case ChangeOfBasis:
{
CalcBasis(Ai.Width() - 1, y, x, w);
CalcBasis(Ai.Width() - 1, y, x.HostWrite(), w.HostWrite());
Ai.Mult(x, u);
Ai.Mult(w, d);
// set d2 (not implemented yet)
@@ -1842,7 +1842,7 @@ void Poly_1D::Basis::Eval(const double y, Vector &u, Vector &d,
break;
}
case Positive:
CalcBernstein(x.Size() - 1, y, u, d);
CalcBernstein(x.Size() - 1, y, u.HostWrite(), d.HostWrite());
break;
case Integrated:
MFEM_ABORT("Integrated basis must be evaluated with EvalIntegrated");