@@ -351,8 +351,22 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
351351{
352352 int stH = mSampleH ;
353353 int stV = mSampleV ;
354+ vector < int > hh (mEW -> mNumberOfGrids , 1 );
354355 double my_z , up_z , down_z , up_v , down_v ;
355356
357+ // Calculate horizontal factor of each grid for topo data access
358+ for (int i = mEW -> mNumberOfGrids - 2 ; i >= 0 ; i -- ) {
359+ // No h increase from Cartesian to Curvilinear
360+ if (i == mEW -> mNumberOfCartesianGrids - 1 )
361+ hh [i ] = hh [i + 1 ];
362+ else
363+ hh [i ] = hh [i + 1 ] * 2 ;
364+ }
365+
366+ // debug
367+ /* int myRank; */
368+ /* MPI_Comm_rank( mEW->m_1d_communicator, &myRank); */
369+
356370 /* if (mMode== RHO && m_parallel_io[0]->proc_zero()) { */
357371 /* for( int g=mEW->mNumberOfCartesianGrids ; g < mEW->mNumberOfGrids ; g++ ) { */
358372 /* cout << "g="<< g << ", a_Z.m_kb="<< a_Z[g].m_kb << ", a_Z.m_ke=" << a_Z[g].m_ke << ", gz=" << mWindow[g][5] << endl; */
@@ -390,15 +404,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
390404
391405 if ( mMode == RHO || mMode == QP || mMode == QS ) { // these modes just copy the values straight from the array
392406 if ( m_double ) {
393- #pragma omp parallel for
407+ /* #pragma omp parallel for */
394408 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
395409 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
396410 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
397411 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
398412 if (g < mEW -> mNumberOfCartesianGrids )
399413 m_doubleField [g ][ind ] = (double )((* data1 )(1 ,i ,j ,k ));
400414 else {
401- double z_kl = - mEW -> mTopo (i ,j ,1 );
415+ double z_kl = a_Z [ gz ] (i ,j ,kl );
402416 double z_ku = a_Z [gz ](i ,j ,ku );
403417 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
404418 int t = 1 ;
@@ -415,16 +429,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
415429 }
416430 }
417431 else {
418- #pragma omp parallel for
432+ /* #pragma omp parallel for */
419433 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
420434 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
421435 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
422436 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
423437 if (g < mEW -> mNumberOfCartesianGrids )
424438 m_floatField [g ][ind ] = (float )((* data1 )(1 ,i ,j ,k ));
425439 else {
426- // debug
427- double z_kl = - mEW -> mTopo (i ,j ,1 );
440+ double z_kl = a_Z [gz ](i ,j ,kl );
428441 double z_ku = a_Z [gz ](i ,j ,ku );
429442 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
430443 int t = 1 ;
@@ -443,15 +456,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
443456 }
444457 else if ( mMode == P ) {
445458 if ( m_double ) {
446- #pragma omp parallel for
459+ /* #pragma omp parallel for */
447460 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
448461 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
449462 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
450463 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
451464 if (g < mEW -> mNumberOfCartesianGrids )
452465 m_doubleField [g ][ind ] = (double )sqrt ((2 * ((* data2 )(1 ,i ,j ,k )) + ((* data3 )(1 ,i ,j ,k )))/((* data1 )(1 ,i ,j ,k )));
453466 else {
454- double z_kl = - mEW -> mTopo (i ,j ,1 );
467+ double z_kl = a_Z [ gz ] (i ,j ,kl );
455468 double z_ku = a_Z [gz ](i ,j ,ku );
456469 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
457470 int t = 1 ;
@@ -477,15 +490,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
477490 }
478491 }
479492 else {
480- #pragma omp parallel for
493+ /* #pragma omp parallel for */
481494 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
482495 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
483496 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
484497 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
485498 if (g < mEW -> mNumberOfCartesianGrids )
486499 m_floatField [g ][ind ] = (float )sqrt ((2.0 * ((* data2 )(1 ,i ,j ,k )) + ((* data3 )(1 ,i ,j ,k )))/((* data1 )(1 ,i ,j ,k )));
487500 else {
488- double z_kl = - mEW -> mTopo (i ,j ,1 );
501+ double z_kl = a_Z [ gz ] (i ,j ,kl );
489502 double z_ku = a_Z [gz ](i ,j ,ku );
490503 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
491504 int t = 1 ;
@@ -520,15 +533,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
520533 }
521534 else if ( mMode == S ) {
522535 if ( m_double ) {
523- #pragma omp parallel for
536+ /* #pragma omp parallel for */
524537 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
525538 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
526539 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
527540 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
528541 if (g < mEW -> mNumberOfCartesianGrids )
529542 m_doubleField [g ][ind ] = (double )sqrt (((* data2 )(1 ,i ,j ,k ))/((* data1 )(1 ,i ,j ,k )));
530543 else {
531- double z_kl = - mEW -> mTopo (i ,j ,1 );
544+ double z_kl = a_Z [ gz ] (i ,j ,kl );
532545 double z_ku = a_Z [gz ](i ,j ,ku );
533546 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
534547 int t = 1 ;
@@ -553,15 +566,15 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
553566 }
554567 }
555568 else {
556- #pragma omp parallel for
569+ /* #pragma omp parallel for */
557570 for ( int k = mWindow [g ][4 ] ; k <= mWindow [g ][5 ] ; k += stV )
558571 for ( int j = mWindow [g ][2 ] ; j <= mWindow [g ][3 ] ; j += stH )
559572 for ( int i = mWindow [g ][0 ] ; i <= mWindow [g ][1 ] ; i += stH ) {
560573 size_t ind = (k - mWindow [g ][4 ])/stV + nkw * (j - mWindow [g ][2 ])/stH + njkw * (i - mWindow [g ][0 ])/stH ;
561574 if (g < mEW -> mNumberOfCartesianGrids )
562575 m_floatField [g ][ind ] = (float )sqrt (((* data2 )(1 ,i ,j ,k ))/((* data1 )(1 ,i ,j ,k )));
563576 else {
564- double z_kl = - mEW -> mTopo (i ,j ,1 );
577+ double z_kl = a_Z [ gz ] (i ,j ,kl );
565578 double z_ku = a_Z [gz ](i ,j ,ku );
566579 my_z = z_kl + (z_ku - z_kl )* (k - 1 )/(double )(ku - 1 );
567580 int t = 1 ;
@@ -627,7 +640,7 @@ void SfileOutput::compute_image( vector<Sarray>& a_U, vector<Sarray>& a_Rho,
627640 }
628641 }
629642 }
630- }
643+ }// End for g < mEW->mNumberOfGrids
631644}
632645
633646//-----------------------------------------------------------------------
@@ -894,7 +907,7 @@ void SfileOutput::write_image(const char *fname, std::vector<Sarray>& a_Z )
894907 int nj = (int )(mWindow [real_g ][3 ]- mWindow [real_g ][2 ])/stH + 1 ;
895908 int nk = mWindow [real_g ][5 ];
896909 float * zfp = new float [npts ];
897- #pragma omp parallel for
910+ /* #pragma omp parallel for */
898911 for ( int j = mWindow [real_g ][2 ] ; j <= mWindow [real_g ][3 ] ; j += stH )
899912 for ( int i = mWindow [real_g ][0 ] ; i <= mWindow [real_g ][1 ] ; i += stH ) {
900913 size_t ind = (size_t )(j - mWindow [real_g ][2 ])/stH + nj * (i - mWindow [real_g ][0 ])/stH ;
0 commit comments