139 {
140 auto psi = cell.template getField<descriptors::PSI>();
141 auto psi0 = cell.template getField<descriptors::PSI0>();
142 auto epsilon =
parameters.template get<descriptors::EPSILON>();
143 Vector<T,DESCRIPTOR::d> gradPsi{};
144 T normGradPsi = 1.;
146 T a = psi - cell.neighbor({-1,0}).template getField<descriptors::PSI>();
147 T b = cell.neighbor({1,0}).template getField<descriptors::PSI>() - psi;
148 T
c = psi - cell.neighbor({0,-1}).
template getField<descriptors::PSI>();
149 T
d = cell.neighbor({0,1}).
template getField<descriptors::PSI>() - psi;
150 if (xNormal == 1) b = a;
151 else if (xNormal == -1) a = b;
152 if (yNormal == 1)
d =
c;
153 else if (yNormal == -1)
c =
d;
154 T gradX, gradY;
155 if (psi0 > 0) {
156 if (a<0) a = 0;
157 if (b>0) b = 0;
160 gradX = a;
161 if (b*b>a*a) gradX = b;
163 if (d*d>c*c) gradY =
d;
164 normGradPsi =
util::sqrt(gradX*gradX+gradY*gradY);
165 }
166 else if (psi0 < 0) {
167 if (a>0) a = 0;
168 if (b<0) b = 0;
171 gradX = a;
172 if (b*b>a*a) gradX = b;
174 if (d*d>c*c) gradY =
d;
175 normGradPsi =
util::sqrt(gradX*gradX+gradY*gradY);
176 }
177 else {}
178 cell.template setField<descriptors::NORMGRADPSI>(normGradPsi);
179 } else {
180 cell.template setField<descriptors::NORMGRADPSI>(normGradPsi);
181 }
182 }
platform_constant int c[Q][D]
constexpr int d() any_platform
meta::list< descriptors::EPSILON > parameters