51 const int nConvectiveFields,
const int nSpaceDim,
59 std::shared_ptr<LocalRegions::ExpansionVector> traceExp =
61 int ntotTrac = (*traceExp).size();
62 int nTracePnts = tracelist->GetTotPoints();
63 int nTracPnt, nTracCoef;
73 for (
int nelmt = 0; nelmt < ntotTrac; nelmt++)
75 nTracCoef = (*traceExp)[nelmt]->GetNcoeffs();
76 nTracPnt = (*traceExp)[nelmt]->GetTotPoints();
83 std::shared_ptr<LocalRegions::ExpansionVector> fieldExp =
85 int nTotElmt = (*fieldExp).size();
86 int nElmtPnt, nElmtCoef;
93 for (
int nelmt = 0; nelmt < nTotElmt; nelmt++)
95 nElmtCoef = (*fieldExp)[nelmt]->GetNcoeffs();
96 nElmtPnt = (*fieldExp)[nelmt]->GetTotPoints();
101 nElmtCoef, nElmtCoef, 0.0);
104 bool TracePntJacGradflag =
true;
107 for (
int i = 0; i < 2; i++)
112 if (0 == TracePntJacGrad.size())
114 TracePntJacGradflag =
false;
117 for (
int m = 0; m < nConvectiveFields; m++)
119 for (
int n = 0; n < nConvectiveFields; n++)
122 for (
int nelmt = 0; nelmt < nTotElmt; nelmt++)
124 (*ElmtJacCoef[nelmt]) = 0.0;
125 (*ElmtJacQuad[nelmt]) = 0.0;
128 if (TracePntJacGradflag)
131 for (
int ndir = 0; ndir < nSpaceDim; ndir++)
134 for (
int nelmt = 0; nelmt < nTotElmt; nelmt++)
136 (*ElmtJacQuad[nelmt]) = 0.0;
138 int ngrad = n * nSpaceDim + ndir;
141 TracePntJacGradSign, TraceJacFwd,
143 pFields[0]->AddTraceJacToElmtJac(TraceJacFwd, TraceJacBwd,
146 pFields[0]->AddRightIPTPhysDerivBase(ndir, ElmtJacQuad,
149 for (
int nelmt = 0; nelmt < nTotElmt; nelmt++)
151 nElmtCoef = (*fieldExp)[nelmt]->GetNcoeffs();
152 if (SymmMatData.size() < nElmtCoef)
157 MatData1 = ElmtJacCoef[nelmt]->GetPtr();
158 for (
int i = 0; i < nElmtCoef; i++)
161 &SymmMatData[i], nElmtCoef);
163 Vmath::Vadd(nElmtCoef * nElmtCoef, SymmMatData, 1, MatData1,
169 TraceJacConsSign, TraceJacFwd, TraceJacBwd);
171 pFields[0]->AddTraceJacToElmtJac(TraceJacFwd, TraceJacBwd,
174 pFields[0]->AddRightIPTBaseMatrix(ElmtJacQuad, ElmtJacCoef);
177 for (
int nelmt = 0; nelmt < nTotElmt; nelmt++)
179 tmp2Add = ElmtJacCoef[nelmt];
180 MatData0 = gmtxarray[m][n]->GetBlock(nelmt, nelmt)->GetPtr();
181 MatData1 = tmp2Add->GetPtr();
182 for (
int i = 0; i < MatData0.size(); i++)
184 MatData0[i] += DataType(MatData1[i]);
218 std::shared_ptr<LocalRegions::ExpansionVector> traceExp =
220 int ntotTrac = (*traceExp).size();
221 int nTracPnt, noffset, pntoffset;
227 for (
int nelmt = 0; nelmt < ntotTrac; nelmt++)
229 nTracPnt = (*traceExp)[nelmt]->GetTotPoints();
230 tracepnts[nelmt] = nTracPnt;
237 for (
int nelmt = 0; nelmt < ntotTrac; nelmt++)
239 nTracPnt = tracepnts[nelmt];
240 noffset = tracelist->GetPhys_Offset(nelmt);
241 for (
int npnt = 0; npnt < nTracPnt; npnt++)
243 pntoffset = noffset + npnt;
244 ftmp = (*PntJac[0]->GetBlock(pntoffset, pntoffset))(m, n);
245 JacFwd[nelmt][npnt] =
NekDouble(PntJacSign[0][pntoffset] * ftmp);
247 btmp = (*PntJac[1]->GetBlock(pntoffset, pntoffset))(m, n);
248 JacBwd[nelmt][npnt] =
NekDouble(PntJacSign[1][pntoffset] * btmp);
251 tracelist->GetDiagMatIpwrtBase(JacFwd, TraceJacFwd);
252 tracelist->GetDiagMatIpwrtBase(JacBwd, TraceJacBwd);