172 const LFSU& lfsu_s,
const X& x_s,
const X& z_s,
const LFSV& lfsv_s,
173 const LFSU& lfsu_n,
const X& x_n,
const X& z_n,
const LFSV& lfsv_n,
174 Y& y_s, Y& y_n)
const
176 using R =
typename X::value_type;
179 auto m_s=lfsv_s.
size();
180 auto m_n=lfsv_n.size();
181 auto n_s=lfsu_s.size();
182 auto n_n=lfsu_n.size();
188 ResidualVector down_s(y_s.size()),up_s(y_s.size());
189 auto downview_s = down_s.weightedAccumulationView(1.0);
190 auto upview_s = up_s.weightedAccumulationView(1.0);
192 ResidualVector down_n(y_n.size()),up_n(y_n.size());
193 auto downview_n = down_n.weightedAccumulationView(1.0);
194 auto upview_n = up_n.weightedAccumulationView(1.0);
197 asImp().alpha_skeleton(
ig,lfsu_s,u_s,lfsv_s,lfsu_n,u_n,lfsv_n,downview_s,downview_n);
200 for (
decltype(n_s) j = 0; j < n_s; ++j)
205 R delta = epsilon*(1.0 + abs(u_s(lfsu_s,j)));
206 u_s(lfsu_s,j) += delta;
207 asImp().alpha_skeleton(
ig,lfsu_s,u_s,lfsv_s,lfsu_n,u_n,lfsv_n,upview_s,upview_n);
208 for (
decltype(m_s) i = 0; i < m_s; ++i)
209 y_s.accumulate(lfsv_s,i,((up_s(lfsv_s,i)-down_s(lfsv_s,i))/delta)*z_s(lfsu_s,j));
210 for (
decltype(m_n) i = 0; i < m_n; i++)
211 y_n.accumulate(lfsv_n,i,((up_n(lfsv_n,i)-down_n(lfsv_n,i))/delta)*x_s(lfsu_s,j));
212 u_s(lfsu_s,j) = x_s(lfsu_s,j);
216 for (
decltype(n_n) j = 0; j < n_n; ++j)
221 R delta = epsilon*(1.0+abs(u_n(lfsu_n,j)));
222 u_n(lfsu_n,j) += delta;
223 asImp().alpha_skeleton(
ig,lfsu_s,u_s,lfsv_s,lfsu_n,u_n,lfsv_n,upview_s,upview_n);
224 for (
decltype(m_s) i = 0; i < m_s; ++i)
225 y_s.accumulate(lfsv_s,i,((up_s(lfsv_s,i)-down_s(lfsv_s,i))/delta)*z_n(lfsu_n,j));
226 for (
decltype(m_n) i = 0; i < m_n; ++i)
227 y_n.accumulate(lfsv_n,i,((up_n(lfsv_n,i)-down_n(lfsv_n,i))/delta)*x_n(lfsu_n,j));
228 u_n(lfsu_n,j) = x_n(lfsu_n,j);