update to Array.hpp
This commit is contained in:
parent
3303efae8f
commit
f461bb4852
@ -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] );
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user