From ef8d15267c7b326dbd3bec5edbf67258217d2384 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Thu, 14 Mar 2019 18:33:33 -0700 Subject: Initialization of the filter is working (and verified) for 2d and 3d --- Source/Initialization/WarpXInitData.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Source/Initialization/WarpXInitData.cpp') diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index ff5442b00..3b9fcdb65 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -6,6 +6,7 @@ #include #include +#include #ifdef BL_USE_SENSEI_INSITU #include @@ -38,6 +39,11 @@ WarpX::InitData () WarpX::InitNCICorrector(); } + Print()<<"HERE I AM\n"; + if (WarpX::use_filter) { + WarpX::InitFilter(); + } + BuildBufferMasks(); InitDiagnostics(); @@ -177,6 +183,14 @@ WarpX::InitNCICorrector () } } +void +WarpX::InitFilter (){ + if (WarpX::use_filter){ + WarpX::bilinear_filter.npass_each_dir = WarpX::filter_npass_each_dir; + WarpX::bilinear_filter.ComputeStencils(); + } +} + void WarpX::PostRestart () { -- cgit v1.2.3 From 5ba52fe850624317746d49e2a5ca3d847213078b Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 19 Mar 2019 13:13:48 -0700 Subject: minor cleaning --- Source/Filter/BilinearFilter.cpp | 2 +- Source/Initialization/WarpXInitData.cpp | 1 - Source/Parallelization/WarpXComm.cpp | 1 + Source/WarpX.H | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) (limited to 'Source/Initialization/WarpXInitData.cpp') diff --git a/Source/Filter/BilinearFilter.cpp b/Source/Filter/BilinearFilter.cpp index d4016a7dc..8f0747afb 100644 --- a/Source/Filter/BilinearFilter.cpp +++ b/Source/Filter/BilinearFilter.cpp @@ -82,7 +82,7 @@ BilinearFilter::ApplyStencil (MultiFab& dstmf, const MultiFab& srcmf, int scomp, tmpfab.setVal(0.0, gbx, 0, ncomp); const Box& ibx = gbx & srcfab.box(); tmpfab.copy(srcfab, ibx, scomp, ibx, 0, ncomp); - filter_2d(tbx, gbx, tmpfab, dstfab, dcomp, ncomp); + Filter2d(tbx, gbx, tmpfab, dstfab, dcomp, ncomp); } } } diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 3b9fcdb65..55df6db9c 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -39,7 +39,6 @@ WarpX::InitData () WarpX::InitNCICorrector(); } - Print()<<"HERE I AM\n"; if (WarpX::use_filter) { WarpX::InitFilter(); } diff --git a/Source/Parallelization/WarpXComm.cpp b/Source/Parallelization/WarpXComm.cpp index dd9ab7142..51a5e64de 100644 --- a/Source/Parallelization/WarpXComm.cpp +++ b/Source/Parallelization/WarpXComm.cpp @@ -387,6 +387,7 @@ WarpX::SyncCurrent () j_fp[lev][idim].reset(new MultiFab(current_fp[lev][idim]->boxArray(), current_fp[lev][idim]->DistributionMap(), 1, ng)); + // applyFilter(*j_fp[lev][idim], *current_fp[lev][idim]); bilinear_filter.ApplyStencil(*j_fp[lev][idim], *current_fp[lev][idim]); std::swap(j_fp[lev][idim], current_fp[lev][idim]); } diff --git a/Source/WarpX.H b/Source/WarpX.H index 6f0d49e24..b24d0a44a 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -139,7 +139,6 @@ public: } static amrex::IntVect filter_npass_each_dir; - // static amrex::Vector filter_npass_each_dir; BilinearFilter bilinear_filter; void ComputeDt (); -- cgit v1.2.3 From 10968a084ad9fb7d398aeee768d334750caf3ad8 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Tue, 19 Mar 2019 17:35:02 -0700 Subject: implemented and tested in 2d and 3d. must check performance --- Source/Filter/BilinearFilter.H | 3 ++- Source/Filter/BilinearFilter.cpp | 41 +++++++++++++++++++++++++++++---- Source/Initialization/WarpXInitData.cpp | 2 +- Source/WarpX.cpp | 4 ++++ 4 files changed, 44 insertions(+), 6 deletions(-) (limited to 'Source/Initialization/WarpXInitData.cpp') diff --git a/Source/Filter/BilinearFilter.H b/Source/Filter/BilinearFilter.H index ada0f9e74..334d8fd69 100644 --- a/Source/Filter/BilinearFilter.H +++ b/Source/Filter/BilinearFilter.H @@ -8,7 +8,8 @@ public: void ComputeStencils(); void ApplyStencil(amrex::MultiFab& dstmf, const amrex::MultiFab& srcmf, int scomp=0, int dcomp=0, int ncomp=10000); - void Filter2d(const amrex::Box& tbx, const amrex::Box& gbx, amrex::FArrayBox &tmpfab, amrex::FArrayBox &dstfab, int dcomp=0, int ncomp=10000); + void Filter2d(const amrex::Box& tbx, amrex::FArrayBox &tmpfab, amrex::FArrayBox &dstfab); + void Filter3d(const amrex::Box& tbx, amrex::FArrayBox &tmpfab, amrex::FArrayBox &dstfab); amrex::IntVect npass_each_dir; amrex::IntVect stencil_length_each_dir; diff --git a/Source/Filter/BilinearFilter.cpp b/Source/Filter/BilinearFilter.cpp index 8f0747afb..dd77889c0 100644 --- a/Source/Filter/BilinearFilter.cpp +++ b/Source/Filter/BilinearFilter.cpp @@ -70,8 +70,11 @@ BilinearFilter::ApplyStencil (MultiFab& dstmf, const MultiFab& srcmf, int scomp, #pragma omp parallel #endif { - //Print()<<"stencil_x: "; for(int i=0; i0!"); FArrayBox tmpfab; for (MFIter mfi(dstmf,true); mfi.isValid(); ++mfi){ const auto& srcfab = srcmf[mfi]; @@ -82,15 +85,21 @@ BilinearFilter::ApplyStencil (MultiFab& dstmf, const MultiFab& srcmf, int scomp, tmpfab.setVal(0.0, gbx, 0, ncomp); const Box& ibx = gbx & srcfab.box(); tmpfab.copy(srcfab, ibx, scomp, ibx, 0, ncomp); - Filter2d(tbx, gbx, tmpfab, dstfab, dcomp, ncomp); +#if (AMREX_SPACEDIM == 3) + Filter3d(tbx, tmpfab, dstfab); +#elif (AMREX_SPACEDIM == 2) + Filter2d(tbx, tmpfab, dstfab); +#endif } } } -void BilinearFilter::Filter2d(const Box& tbx, const Box& gbx, FArrayBox &tmpfab, FArrayBox &dstfab, int dcomp, int ncomp) +void BilinearFilter::Filter2d(const Box& tbx, FArrayBox &tmpfab, FArrayBox &dstfab) { const int* loVector = tbx.loVect(); const int* hiVector = tbx.hiVect(); + // const int* loVectorg = gbx.loVect(); + // const int* hiVectorg = gbx.hiVect(); Array4 const& tmparr = tmpfab.array(); Array4 const& dstarr = dstfab.array(); for(int i=loVector[0]; i<=hiVector[0]; i++){ @@ -104,3 +113,27 @@ void BilinearFilter::Filter2d(const Box& tbx, const Box& gbx, FArrayBox &tmpfab, } } } + +void BilinearFilter::Filter3d(const Box& tbx, FArrayBox &tmpfab, FArrayBox &dstfab) +{ + const int* loVector = tbx.loVect(); + const int* hiVector = tbx.hiVect(); + // const int* loVectorg = gbx.loVect(); + // const int* hiVectorg = gbx.hiVect(); + Array4 const& tmparr = tmpfab.array(); + Array4 const& dstarr = dstfab.array(); + for(int i=loVector[0]; i<=hiVector[0]; i++){ + for(int j=loVector[1]; j<=hiVector[1]; j++){ + for(int k=loVector[2]; k<=hiVector[2]; k++){ + dstarr(i,j,k) = 0.; + for (int ix=-stencil_length_each_dir[0]+1; ix