From f461bb485203cb7da540d1a7c08d04ceda56aef1 Mon Sep 17 00:00:00 2001 From: James E McClure Date: Wed, 6 Jun 2018 04:11:23 -0400 Subject: [PATCH] update to Array.hpp --- common/Array.hpp | 23 +++++++++++------------ tests/lbpm_uCT_pp.cpp | 5 +++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/common/Array.hpp b/common/Array.hpp index 1bdb33a5..60a8987c 100644 --- a/common/Array.hpp +++ b/common/Array.hpp @@ -1064,16 +1064,15 @@ Array Array::reverseDim() const template Array Array::coarsen( const Array &filter ) const { - auto S2 = size(); - for ( size_t i = 0; i < S2.size(); i++ ) { - size_t S2_i=S2[i]; - S2_i /= filter.size( i ); - if ( S2_i * filter.size( i ) != size( i ) ) - throw std::invalid_argument( "Array must be multiple of filter size" ); - } - Array y( S2 ); - if ( d_size.ndim() <= 3 ) - throw std::logic_error( "Function programmed for more than 3 dimensions" ); + auto S2 = size(); + for ( size_t i = 0; i < S2.size(); i++ ) { + S2.resize( i, S2[i] / filter.size(i) ); + if ( S2[i] * filter.size( i ) != size( i ) ) + throw std::invalid_argument( "Array must be multiple of filter size" ); + } + Array y( S2 ); + if ( d_size.ndim() <= 3 ) + throw std::logic_error( "Function programmed for more than 3 dimensions" ); const auto& Nh = filter.d_size; for ( size_t k1 = 0; k1 < y.d_size[2]; k1++ ) { for ( size_t j1 = 0; j1 < y.d_size[1]; j1++ ) { @@ -1097,8 +1096,8 @@ template Array Array::coarsen( const std::vector &ratio, std::function & )> filter ) const { - if ( ratio.size() != d_size.ndim() ) - throw std::logic_error( "ratio size does not match ndim" ); + //if ( ratio.size() != d_size.ndim() ) + // throw std::logic_error( "ratio size does not match ndim" ); auto S2 = size(); for ( size_t i = 0; i < S2.size(); i++ ) { S2.resize( i, S2[i] / ratio[i] ); diff --git a/tests/lbpm_uCT_pp.cpp b/tests/lbpm_uCT_pp.cpp index 0361c0ff..752f8d62 100644 --- a/tests/lbpm_uCT_pp.cpp +++ b/tests/lbpm_uCT_pp.cpp @@ -92,6 +92,7 @@ int main(int argc, char **argv) // Determine the maximum number of levels for the desired coarsen ratio int ratio[3] = {4,4,4}; + //std::vector ratio = {4,4,4}; std::vector Nx(1,nx), Ny(1,ny), Nz(1,nz); while ( Nx.back()%ratio[0]==0 && Nx.back()>8 && Ny.back()%ratio[1]==0 && Ny.back()>8 && @@ -140,8 +141,8 @@ int main(int argc, char **argv) MultiScaleSmooth[i].fill(0); Mean[i].fill(0); NonLocalMean[i].fill(0); - fillFloat[i].reset(new fillHalo(Dm[i]->Comm,Dm[i]->rank_info,Nx[i],Ny[i],Nz[i],1,1,1,0,1) ); - fillChar[i].reset(new fillHalo(Dm[i]->Comm,Dm[i]->rank_info,Nx[i],Ny[i],Nz[i],1,1,1,0,1) ); + fillFloat[i].reset(new fillHalo(Dm[i]->Comm,Dm[i]->rank_info,{Nx[i],Ny[i],Nz[i]},{1,1,1},0,1) ); + fillChar[i].reset(new fillHalo(Dm[i]->Comm,Dm[i]->rank_info,{Nx[i],Ny[i],Nz[i]},{1,1,1},0,1) ); } // Read the subvolume of interest on each processor