From b940b99cab575ade776e6f8630e1ae7c522dc784 Mon Sep 17 00:00:00 2001 From: Johannes Spazier Date: Thu, 6 Mar 2014 21:15:01 +0000 Subject: [PATCH] - The reading of ASCII grid input files that was broken in previous revisions has been fixed. - Flushing the output explicitly. --- code/branches/multi-gpu/EasyWave.cu | 4 +- code/branches/multi-gpu/ewGrid.cpp | 69 +++++++++++++++++++---------- 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/code/branches/multi-gpu/EasyWave.cu b/code/branches/multi-gpu/EasyWave.cu index 11ba455..1d7b424 100644 --- a/code/branches/multi-gpu/EasyWave.cu +++ b/code/branches/multi-gpu/EasyWave.cu @@ -134,7 +134,9 @@ int main( int argc, char **argv ) lastPropagation = 0; } } - + + fflush(stdout); + if( Par.outDump ) { if( (elapsed-lastDump) >= Par.outDump ) { Node.copyIntermediate(); diff --git a/code/branches/multi-gpu/ewGrid.cpp b/code/branches/multi-gpu/ewGrid.cpp index aeffaa3..9601909 100644 --- a/code/branches/multi-gpu/ewGrid.cpp +++ b/code/branches/multi-gpu/ewGrid.cpp @@ -79,7 +79,7 @@ int ewLoadBathymetry() } // try to allocate memory for GRIDNODE structure and for caching arrays - printf_v("Size: %d %d %luMB\n", NLon, NLat, sizeof(float)*MAX_VARS_PER_NODE*NLon*NLat/1024/1024); + printf_v("Size: %d %d %luMB\n", NLon, NLat, sizeof(float)*MAX_VARS_PER_NODE*NLon*NLat/1024/1024); if( Node.mallocMem() ) return Err.post( Err.msgAllocateMem() ); if( isBin ) { @@ -99,36 +99,59 @@ int ewLoadBathymetry() Dx = Re * g2r( DLon ); // in m along the equator Dy = Re * g2r( DLat ); - /* NOTE: optimal would be reading everything in one step, but that does not work because rows and columns are transposed - * (only possible with binary data at all) - use temporary buffer for now (consumes additional memory!) */ - float *buf = new float[ NLat*NLon ]; - ierr = fread( buf, sizeof(float), NLat*NLon, fp ); + if( isBin ) { - for( i=1; i<=NLon; i++ ) { - for( j=1; j<=NLat; j++ ) { + /* NOTE: optimal would be reading everything in one step, but that does not work because rows and columns are transposed + * (only possible with binary data at all) - use temporary buffer for now (consumes additional memory!) */ + float *buf = new float[ NLat*NLon ]; + ierr = fread( buf, sizeof(float), NLat*NLon, fp ); - m = idx(j,i); + for( i=1; i<=NLon; i++ ) { + for( j=1; j<=NLat; j++ ) { + + m = idx(j,i); - if( isBin ) - fval = buf[ (j-1) * NLon + (i-1) ]; - //ierr = fread( &fval, sizeof(float), 1, fp ); - else - ierr = fscanf( fp, " %f ", &fval ); + if( isBin ) + fval = buf[ (j-1) * NLon + (i-1) ]; + //ierr = fread( &fval, sizeof(float), 1, fp ); - Node(m, iTopo) = fval; - Node(m, iTime) = -1; - Node(m, iD) = -fval; + Node(m, iTopo) = fval; + Node(m, iTime) = -1; + Node(m, iD) = -fval; - if( Node(m, iD) < 0 ) { - Node(m, iD) = 0.0f; - } else if( Node(m, iD) < Par.dmin ) { - Node(m, iD) = Par.dmin; + if( Node(m, iD) < 0 ) { + Node(m, iD) = 0.0f; + } else if( Node(m, iD) < Par.dmin ) { + Node(m, iD) = Par.dmin; + } + + } } - } - } + delete[] buf; + + } else { - delete[] buf; + for( j=1; j<=NLat; j++ ) { + for( i=1; i<=NLon; i++ ) { + + m = idx(j,i); + ierr = fscanf( fp, " %f ", &fval ); + + Node(m, iTopo) = fval; + Node(m, iTime) = -1; + Node(m, iD) = -fval; + + if( Node(m, iD) < 0 ) { + Node(m, iD) = 0.0f; + } else if( Node(m, iD) < Par.dmin ) { + Node(m, iD) = Par.dmin; + } + + } + + } + } for( k=1; k