update to Array.hpp

This commit is contained in:
James E McClure 2018-06-06 04:11:23 -04:00
parent 3303efae8f
commit f461bb4852
2 changed files with 14 additions and 14 deletions

View File

@ -1064,16 +1064,15 @@ Array<TYPE, FUN> Array<TYPE, FUN>::reverseDim() const
template<class TYPE, class FUN>
Array<TYPE, FUN> Array<TYPE, FUN>::coarsen( const Array<TYPE, FUN> &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<TYPE, FUN> 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<TYPE, FUN> 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<class TYPE, class FUN>
Array<TYPE, FUN> Array<TYPE, FUN>::coarsen(
const std::vector<size_t> &ratio, std::function<TYPE( const Array<TYPE, FUN> & )> 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] );

View File

@ -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<size_t> ratio = {4,4,4};
std::vector<int> 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<float>(Dm[i]->Comm,Dm[i]->rank_info,Nx[i],Ny[i],Nz[i],1,1,1,0,1) );
fillChar[i].reset(new fillHalo<char>(Dm[i]->Comm,Dm[i]->rank_info,Nx[i],Ny[i],Nz[i],1,1,1,0,1) );
fillFloat[i].reset(new fillHalo<float>(Dm[i]->Comm,Dm[i]->rank_info,{Nx[i],Ny[i],Nz[i]},{1,1,1},0,1) );
fillChar[i].reset(new fillHalo<char>(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