@@ -33,13 +33,16 @@ namespace LIB {
3333// Tearing Algorithm ---------------------------------------------
3434// //////////////////////////////////////////////////////////////////////////////
3535
36- TearingV1::TearingV1 (SCCPtr sccAlgorithm) : dsbg_(), finalDSBG(), tearIOMap_ (PW_FACT .createPWMap()),sccAlgorithm_(std::move(sccAlgorithm)) {}
36+ TearingV1::TearingV1 (SCCPtr sccAlgorithm) : dsbg_(), finalDSBG(), tearIOMap_ (PW_FACT .createPWMap()),
37+ finalMapB (PW_FACT .createPWMap()), finalMapD(PW_FACT .createPWMap()), sccAlgorithm_(std::move(sccAlgorithm)) {}
3738
3839
3940void TearingV1::init (const DSBG & dsbg)
4041{
4142 dsbg_ = dsbg;
4243 finalDSBG = dsbg;
44+ finalMapB = dsbg.mapB ();
45+ finalMapD = dsbg.mapD ();
4346 return ;
4447}
4548
@@ -53,34 +56,34 @@ TearingData TearingV1::calculate(const DSBG& dsbg)
5356 MD_NAT maxOffset = dsbg_.V ().maxElem ();
5457 SCCData result = sccAlgorithm_->calculate (dsbg_);
5558 PWMap rmap_ = result.rmap ();
56- PWMap finalMapB = dsbg_.mapB ();
57- PWMap finalMapD = dsbg_.mapD ();
5859 Set e_notscc = result.Ediff ();
5960 Set e_scc = dsbg_.E ().difference (e_notscc);
6061 Set v_tear = rmap_.image (rmap_.dom ().difference (rmap_.fixedPoints ()));
62+
6163 while (!v_tear.isEmpty ()) {
6264 PWMap rmap = result.rmap ();
6365 PWMap tearIOMap = PW_FACT .createPWMap (v_tear).offsetImage (maxOffset);
6466 finalDSBG = finalDSBG.addSV (tearIOMap.image ());
6567 maxOffset = finalDSBG.V ().maxElem ();
6668 tearIOMap_ = tearIOMap.combine (tearIOMap_);
67- rmap = rmap.combine (tearIOMap.inverse ()); // Separar
69+ rmap = rmap.combine (tearIOMap.inverse ());
6870 rmap_ = rmap_.combine (rmap);
71+
6972 Set e_tear_scc = dsbg_.mapD ().restrict (e_scc).preImage (v_tear);
7073 Set e_tear_notscc = dsbg_.mapB ().restrict (e_notscc).preImage (v_tear);
71- // PWMap mapB_scc = dsbg_.mapB().restrict(e_scc).composition(rmap); // Necessary?
7274 PWMap mapD_scc = tearIOMap.composition (dsbg_.mapD ().restrict (e_tear_scc));
7375 PWMap mapB_notscc = tearIOMap.composition (dsbg_.mapB ().restrict (e_tear_notscc));
74- // PWMap mapD_notscc = dsbg_.mapD().restrict(e_notscc).composition(rmap); // Necessary?
76+
7577 finalMapB = mapB_notscc.combine (finalMapB);
7678 finalMapD = mapD_scc.combine (finalMapD);
77- dsbg_ = DSBG (finalDSBG.V ().compact (), finalDSBG.Vmap ().compact ()
78- , finalMapB.compact (), finalMapD.compact (), finalDSBG.Emap ().compact (), finalDSBG.subEmap ().compact ());
79+
80+ dsbg_ = DSBG (finalDSBG.V ().compact (), finalDSBG.Vmap ().compact (),
81+ finalMapB.compact (), finalMapD.compact (), finalDSBG.Emap ().compact (), finalDSBG.subEmap ().compact ());
82+
7983 result = sccAlgorithm_->calculate (dsbg_);
8084 e_notscc = result.Ediff ();
8185 e_scc = e_scc.difference (e_notscc);
82- rmap = result.rmap ();
83- v_tear = rmap.image ().difference (rmap.fixedPoints ());
86+ v_tear = rmap_.image (rmap_.dom ().difference (rmap_.fixedPoints ()));
8487 }
8588
8689 finalDSBG = dsbg_;
0 commit comments