37 unsigned int nvars = 1;
51 unsigned int nside = elem->n_sides();
54 unsigned int nsten = nside + 1;
57 std::vector<RealGradient> ugrad(
nvars, RealGradient(0., 0., 0.));
60 std::vector<Real> xc(nsten, 0.);
63 xc[0] = elem->vertex_average()(0);
66 std::vector<std::vector<Real>> ucell(nsten, std::vector<Real>(
nvars, 0.));
84 std::vector<std::vector<Real>> sigma(nsten, std::vector<Real>(
nvars, 0.));
94 unsigned int bflag = 0;
98 for (is = 0; is < nside; is++)
103 if (elem->neighbor_ptr(is) != NULL)
105 const Elem * neig = elem->neighbor_ptr(is);
106 if (this->
hasBlocks(neig->subdomain_id()))
108 xc[in] = neig->vertex_average()(0);
118 for (iv = 0; iv <
nvars; iv++)
119 sigma[in][iv] = (ucell[0][iv] - ucell[in][iv]) / (xc[0] - xc[in]);
148 for (iv = 0; iv <
nvars; iv++)
150 if ((sigma[1][iv] * sigma[2][iv]) > 0.)
152 if (std::abs(sigma[1][iv]) < std::abs(sigma[2][iv]))
153 ugrad[iv](0) = sigma[1][iv];
155 ugrad[iv](0) = sigma[2][iv];
168 for (iv = 0; iv <
nvars; iv++)
169 sigma[0][iv] = (ucell[1][iv] - ucell[2][iv]) / (xc[1] - xc[2]);
171 for (iv = 0; iv <
nvars; iv++)
173 if (sigma[0][iv] > 0. && sigma[1][iv] > 0. && sigma[2][iv] > 0.)
174 ugrad[iv](0) = std::min(sigma[0][iv], 2. * std::min(sigma[1][iv], sigma[2][iv]));
175 else if (sigma[0][iv] < 0. && sigma[1][iv] < 0. && sigma[2][iv] < 0.)
176 ugrad[iv](0) = std::max(sigma[0][iv], 2. * std::max(sigma[1][iv], sigma[2][iv]));
188 for (iv = 0; iv <
nvars; iv++)
194 if (sigma[2][iv] > 0. && sigma[1][iv] > 0.)
195 sigma1 = std::min(sigma[2][iv], 2. * sigma[1][iv]);
196 else if (sigma[2][iv] < 0. && sigma[1][iv] < 0.)
197 sigma1 = std::max(sigma[2][iv], 2. * sigma[1][iv]);
200 if (sigma[2][iv] > 0. && sigma[1][iv] > 0.)
201 sigma2 = std::min(2. * sigma[2][iv], sigma[1][iv]);
202 else if (sigma[2][iv] < 0. && sigma[1][iv] < 0.)
203 sigma2 = std::max(2. * sigma[2][iv], sigma[1][iv]);
206 if (sigma1 > 0. && sigma2 > 0.)
207 ugrad[iv](0) = std::max(sigma1, sigma2);
208 else if (sigma1 < 0. && sigma2 < 0.)
209 ugrad[iv](0) = std::min(sigma1, sigma2);
215 mooseError(
"Unknown 1D TVD-type slope limiter scheme");