MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / updateSolver

Method updateSolver

source/MRMesh/MRLaplacian.cpp:179–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179void Laplacian::updateSolver()
180{
181 if ( solver_ )
182 return;
183
184 MR_TIMER;
185
186 const auto sz = freeVerts_.count();
187 if ( sz <= 0 )
188 return;
189
190 fillVectorWithSeqNums( freeVerts_, freeVert2id_ );
191
192 assert( !fixedSharpVertices_.intersects( freeVerts_ ) );
193 firstLayerFixedVerts_ = freeVerts_;
194 expand( topology_, firstLayerFixedVerts_ );
195 firstLayerFixedVerts_ -= fixedSharpVertices_;
196 [[maybe_unused]] const auto numSmoothVerts = firstLayerFixedVerts_.count();
197 firstLayerFixedVerts_ -= freeVerts_;
198
199 std::vector< Eigen::Triplet<double> > mTriplets;
200 // equations for free vertices
201 int n = 0;
202 for ( auto v : freeVerts_ )
203 {
204 assert( n == freeVert2id_[v] );
205 int eqN = regionVert2id_[v];
206 const auto eq = equations_[eqN];
207 mTriplets.emplace_back( n, n, eq.centerCoeff );
208 const auto lastElem = equations_[eqN+1].firstElem;
209 for ( int ei = eq.firstElem; ei < lastElem; ++ ei )
210 {
211 const auto el = nonZeroElements_[ei];
212 if ( freeVerts_.test( el.neiVert ) )
213 mTriplets.emplace_back( n, freeVert2id_[el.neiVert], el.coeff );
214 }
215 ++n;
216 }
217
218 // equations for free neighbors of smooth fixed vertices
219 for ( auto v : firstLayerFixedVerts_ )
220 {
221 int eqN = regionVert2id_[v];
222 const auto eq = equations_[eqN];
223 const auto lastElem = equations_[eqN+1].firstElem;
224 for ( int ei = eq.firstElem; ei < lastElem; ++ ei )
225 {
226 const auto el = nonZeroElements_[ei];
227 if ( freeVerts_.test( el.neiVert ) )
228 mTriplets.emplace_back( n, freeVert2id_[el.neiVert], el.coeff );
229 }
230 ++n;
231 }
232
233 // equations for attractors
234 for ( const auto & a : attractors_ )
235 {
236 const auto vs = a.p.getWeightedVerts( topology_ );

Callers

nothing calls this directly

Calls 7

fillVectorWithSeqNumsFunction · 0.85
expandFunction · 0.85
countMethod · 0.80
getWeightedVertsMethod · 0.80
intersectsMethod · 0.45
testMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected