@@ -117,7 +117,7 @@ namespace pfasst {
117117
118118 virtual void advance ()
119119 {
120- this -> set_state ( this -> get_end_state (), 0 );
120+ throw NotImplementedYet ( " sweeper " );
121121 }
122122
123123 virtual void integrate (time dt, vector<Encapsulation<scalar,time>*> dst) const
@@ -134,66 +134,67 @@ namespace pfasst {
134134
135135 virtual ~PolyInterpMixin () { }
136136
137- virtual void interpolate (ISweeper *DST , const ISweeper *SRC , bool initial)
137+ virtual void interpolate (ISweeper *dst , const ISweeper *src , bool initial)
138138 {
139- auto * dst = dynamic_cast <EncapSweeper<scalar,time>*>(DST );
140- auto * src = dynamic_cast <const EncapSweeper<scalar,time>*>(SRC );
139+ auto * fine = dynamic_cast <EncapSweeper<scalar,time>*>(dst );
140+ auto * crse = dynamic_cast <const EncapSweeper<scalar,time>*>(src );
141141
142142 if (tmat.size1 () == 0 )
143- tmat = pfasst::compute_interp<time>(dst ->get_nodes (), src ->get_nodes ());
143+ tmat = pfasst::compute_interp<time>(fine ->get_nodes (), crse ->get_nodes ());
144144
145- int ndst = dst ->get_nodes ().size ();
146- int nsrc = src ->get_nodes ().size ();
145+ int nfine = fine ->get_nodes ().size ();
146+ int ncrse = crse ->get_nodes ().size ();
147147
148- auto * crse_factory = src ->get_factory ();
149- auto * fine_factory = dst ->get_factory ();
148+ auto * crse_factory = crse ->get_factory ();
149+ auto * fine_factory = fine ->get_factory ();
150150
151- vector<Encapsulation<scalar,time>*> fine_q (ndst ), fine_tmp (nsrc );
151+ vector<Encapsulation<scalar,time>*> fine_state (nfine ), fine_delta (ncrse );
152152
153- for (int m=0 ; m<ndst ; m++) fine_q [m] = dst ->get_state (m);
154- for (int m=0 ; m<nsrc ; m++) fine_tmp [m] = fine_factory->create (solution);
153+ for (int m=0 ; m<nfine ; m++) fine_state [m] = fine ->get_state (m);
154+ for (int m=0 ; m<ncrse ; m++) fine_delta [m] = fine_factory->create (solution);
155155
156156 if (initial)
157- for (int m=1 ; m<ndst ; m++)
158- fine_q [m]->copy (fine_q [0 ]);
157+ for (int m=1 ; m<nfine ; m++)
158+ fine_state [m]->copy (fine_state [0 ]);
159159
160- auto * crse_tmp = crse_factory->create (solution);
161- for (int m=0 ; m<nsrc ; m++) {
162- crse_tmp ->copy (src ->get_state (m));
160+ auto * crse_delta = crse_factory->create (solution);
161+ for (int m=0 ; m<ncrse ; m++) {
162+ crse_delta ->copy (crse ->get_state (m));
163163 if (initial)
164- crse_tmp ->saxpy (-1.0 , src ->get_state (0 ));
164+ crse_delta ->saxpy (-1.0 , crse ->get_state (0 ));
165165 else
166- crse_tmp ->saxpy (-1.0 , src ->get_saved_state (m));
167- interpolate (fine_tmp [m], crse_tmp );
166+ crse_delta ->saxpy (-1.0 , crse ->get_saved_state (m));
167+ interpolate (fine_delta [m], crse_delta );
168168 }
169- delete crse_tmp ;
169+ delete crse_delta ;
170170
171- dst ->get_state (0 )->mat_apply (fine_q , 1.0 , tmat, fine_tmp , false );
171+ fine ->get_state (0 )->mat_apply (fine_state , 1.0 , tmat, fine_delta , false );
172172
173- for (int m=0 ; m<nsrc ; m++) delete fine_tmp [m];
174- for (int m=0 ; m<ndst ; m++) dst ->evaluate (m);
173+ for (int m=0 ; m<ncrse ; m++) delete fine_delta [m];
174+ for (int m=0 ; m<nfine ; m++) fine ->evaluate (m);
175175 }
176176
177- virtual void restrict (ISweeper *DST , const ISweeper *SRC )
177+ virtual void restrict (ISweeper *dst , const ISweeper *src, bool restrict_initial )
178178 {
179- auto * dst = dynamic_cast <EncapSweeper<scalar,time>*>(DST );
180- auto * src = dynamic_cast <const EncapSweeper<scalar,time>*>(SRC );
179+ auto * crse = dynamic_cast <EncapSweeper<scalar,time>*>(dst );
180+ auto * fine = dynamic_cast <const EncapSweeper<scalar,time>*>(src );
181181
182- auto dnodes = dst ->get_nodes ();
183- auto snodes = src ->get_nodes ();
182+ auto dnodes = crse ->get_nodes ();
183+ auto snodes = fine ->get_nodes ();
184184
185- int ndst = dst ->get_nodes ().size ();
186- int nsrc = src ->get_nodes ().size ();
185+ int ncrse = crse ->get_nodes ().size ();
186+ int nfine = fine ->get_nodes ().size ();
187187
188- int trat = (nsrc - 1 ) / (ndst - 1 );
188+ int trat = (nfine - 1 ) / (ncrse - 1 );
189189
190- for (int m=0 ; m<ndst; m++) {
190+ int m0 = restrict_initial ? 0 : 1 ;
191+ for (int m=m0; m<ncrse; m++) {
191192 if (dnodes[m] != snodes[m*trat])
192193 throw NotImplementedYet (" coarse nodes must be nested" );
193- this ->restrict (dst ->get_state (m), src ->get_state (m*trat));
194+ this ->restrict (crse ->get_state (m), fine ->get_state (m*trat));
194195 }
195196
196- for (int m=0 ; m<ndst ; m++) dst ->evaluate (m);
197+ for (int m=m0 ; m<ncrse ; m++) crse ->evaluate (m);
197198 }
198199
199200 virtual void fas (time dt, ISweeper *dst, const ISweeper *src)
0 commit comments