@@ -15,25 +15,39 @@ public:
1515 using MF = typename R2C<T>::MF;
1616 using cMF = typename R2C<T>::cMF;
1717
18+ explicit OpenBCSolver (Box const & domain);
19+
1820 template <class F >
19- OpenBCSolver (Box const & domain, F const & greens_function);
21+ void setGreensFunction ( F const & greens_function);
2022
2123 void solve (MF& phi, MF const & rho);
2224
25+ [[nodiscard]] Box const & Domain () const { return m_domain; }
26+
2327private:
28+ Box m_domain;
2429 R2C<T> m_r2c;
2530 cMF m_G_fft;
2631};
2732
33+ template <typename T>
34+ OpenBCSolver<T>::OpenBCSolver (Box const & domain)
35+ : m_domain(domain),
36+ m_r2c (Box(domain.smallEnd(), domain.bigEnd()+domain.length(), domain.ixType()))
37+ {
38+ auto [sd, ord] = m_r2c.getSpectralData ();
39+ amrex::ignore_unused (ord);
40+ m_G_fft.define (sd->boxArray (), sd->DistributionMap (), 1 , 0 );
41+ }
42+
2843template <typename T>
2944template <class F >
30- OpenBCSolver<T>::OpenBCSolver (Box const & domain, F const & greens_function)
31- : m_r2c(Box(domain.smallEnd(), domain.bigEnd()+domain.length(), domain.ixType()))
45+ void OpenBCSolver<T>::setGreensFunction (F const & greens_function)
3246{
3347 auto * infab = detail::get_fab (m_r2c.m_rx );
34- auto const & lo = domain .smallEnd ();
48+ auto const & lo = m_domain .smallEnd ();
3549 auto const & lo3 = lo.dim3 ();
36- auto const & len = domain .length3d ();
50+ auto const & len = m_domain .length3d ();
3751 if (infab) {
3852 auto const & a = infab->array ();
3953 auto box = infab->box ();
@@ -76,7 +90,6 @@ OpenBCSolver<T>::OpenBCSolver (Box const& domain, F const& greens_function)
7690
7791 auto [sd, ord] = m_r2c.getSpectralData ();
7892 amrex::ignore_unused (ord);
79- m_G_fft.define (sd->boxArray (), sd->DistributionMap (), 1 , 0 );
8093 auto const * srcfab = detail::get_fab (*sd);
8194 if (srcfab) {
8295 auto * dstfab = detail::get_fab (m_G_fft);
0 commit comments