Changeset 4370


Ignore:
Timestamp:
Jan 10, 2020 2:00:44 PM (4 years ago)
Author:
raasch
Message:

bugfixes for previous commit: unused variables removed, Temperton-fft usage on GPU, openacc porting of vector version of Obukhov length calculation, collective read switched off on NEC to avoid hanging; some vector directives added in prognostic equations to force vectorization on Intel19 compiler, configuration files for NEC Aurora added

Location:
palm/trunk
Files:
2 added
27 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SCRIPTS/create_basic_static_driver.py

    r4072 r4370  
    1414# PALM. If not, see <http://www.gnu.org/licenses/>.
    1515#
    16 # Copyright 1997-2019 Leibniz Universitaet Hannover
     16# Copyright 1997-2020 Leibniz Universitaet Hannover
    1717#------------------------------------------------------------------------------#
    1818
  • palm/trunk/SCRIPTS/document_changes

    r3802 r4370  
    1515# PALM. If not, see <http://www.gnu.org/licenses/>.
    1616#
    17 # Copyright 1997-2019 Leibniz Universitaet Hannover
     17# Copyright 1997-2020 Leibniz Universitaet Hannover
    1818#------------------------------------------------------------------------------#
    1919#
  • palm/trunk/SOURCE/bulk_cloud_model_mod.f90

    r4360 r4370  
    2525! -----------------
    2626! $Id$
     27! vector directives added to force vectorization on Intel19 compiler
     28!
     29! 4360 2020-01-07 11:25:50Z suehring
    2730! Introduction of wall_flags_total_0, which currently sets bits based on static
    2831! topography information used in wall_flags_static_0
     
    13971400          DO  i = nxl, nxr
    13981401             DO  j = nys, nyn
     1402                !following directive is required to vectorize on Intel19
     1403                !DIR$ IVDEP
    13991404                DO  k = nzb+1, nzt
    14001405                   qc_p(k,j,i) = qc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
     
    14871492          DO  i = nxl, nxr
    14881493             DO  j = nys, nyn
     1494                !following directive is required to vectorize on Intel19
     1495                !DIR$ IVDEP
    14891496                DO  k = nzb+1, nzt
    14901497                   nc_p(k,j,i) = nc(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
     
    15841591          DO  i = nxl, nxr
    15851592             DO  j = nys, nyn
     1593                !following directive is required to vectorize on Intel19
     1594                !DIR$ IVDEP
    15861595                DO  k = nzb+1, nzt
    15871596                   qr_p(k,j,i) = qr(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
     
    16741683          DO  i = nxl, nxr
    16751684             DO  j = nys, nyn
     1685                !following directive is required to vectorize on Intel19
     1686                !DIR$ IVDEP
    16761687                DO  k = nzb+1, nzt
    16771688                   nr_p(k,j,i) = nr(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
  • palm/trunk/SOURCE/chemistry_model_mod.f90

    r4346 r4370  
    2727! -----------------
    2828! $Id$
     29! vector directives added to force vectorization on Intel19 compiler
     30!
     31! 4346 2019-12-18 11:55:56Z motisi
    2932! Introduction of wall_flags_total_0, which currently sets bits based on static
    3033! topography information used in wall_flags_static_0
     
    27442747       DO  i = nxl, nxr
    27452748          DO  j = nys, nyn
     2749             !following directive is required to vectorize on Intel19
     2750             !DIR$ IVDEP
    27462751             DO  k = nzb+1, nzt
    27472752                chem_species(ilsp)%conc_p(k,j,i) =   chem_species(ilsp)%conc(k,j,i)                &
  • palm/trunk/SOURCE/fft_xy_mod.f90

    r4366 r4370  
    2525! -----------------
    2626! $Id$
     27! bugfix for Temperton-fft usage on GPU
     28!
     29! 4366 2020-01-09 08:12:43Z raasch
    2730! Vectorized Temperton-fft added
    2831!
     
    7679
    7780    PRIVATE
    78     PUBLIC fft_x, fft_x_1d, fft_y, fft_y_1d, fft_init, fft_x_m, fft_y_m, f_vec, temperton_fft_vec
     81    PUBLIC fft_x, fft_x_1d, fft_y, fft_y_1d, fft_init, fft_x_m, fft_y_m, f_vec_x, temperton_fft_vec
    7982
    8083    INTEGER(iwp), DIMENSION(:), ALLOCATABLE, SAVE ::  ifax_x  !<
     
    9295    REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  trigs_y  !<
    9396
    94     REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  f_vec
     97    REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  f_vec_x
    9598
    9699#if defined( __ibm )
     
    105108    REAL(wp), DIMENSION(nau1), SAVE ::  auy3  !<
    106109   
    107 #elif defined( __nec )
     110#elif defined( __nec_fft )
    108111    INTEGER(iwp), SAVE ::  nz1  !<
    109112   
     
    180183    SUBROUTINE fft_init
    181184
     185       USE pegrid,                                                                                 &
     186           ONLY:  pdims
     187
    182188       IMPLICIT NONE
    183189
     
    192198       REAL(wp), DIMENSION(nau2)   ::  aux4   !<
    193199       REAL(wp), DIMENSION(nau2)   ::  auy4   !<
    194 #elif defined( __nec )
     200#elif defined( __nec_fft )
    195201       REAL(wp), DIMENSION(0:nx+3,nz+1)   ::  work_x  !<
    196202       REAL(wp), DIMENSION(0:ny+3,nz+1)   ::  work_y  !<
     
    207213       ENDIF
    208214
     215#if defined( _OPENACC ) && defined( __cuda_fft )
     216       fft_method = 'system-specific'
     217#endif
     218
    209219!
    210220!--    Switch to tell the Poisson-solver that the vectorized version of Temperton-fft is to be used.
    211        IF ( fft_method == 'temperton-algorithm' .AND. loop_optimization == 'vector' )  THEN
     221       IF ( fft_method == 'temperton-algorithm'  .AND.  loop_optimization == 'vector'  .AND.       &
     222            pdims(1) /= 1  .AND.  pdims(2) /= 1 )  THEN
    212223          temperton_fft_vec = .TRUE.
    213224       ENDIF
    214 
    215 
    216 #if defined( _OPENACC ) && defined( __cuda_fft )
    217        fft_method = 'system-specific'
    218 #endif
    219225
    220226       IF ( fft_method == 'system-specific' )  THEN
     
    237243          CALL DCRFT( 1, worky, 1, worky, 1, ny+1, 1, -1, sqr_dny, auy3, nau1, &
    238244                      auy4, nau2 )
    239 #elif defined( __nec )
     245#elif defined( __nec_fft )
    240246          message_string = 'fft method "' // TRIM( fft_method) // &
    241247                           '" currently does not work on NEC'
     
    285291
    286292          IF ( temperton_fft_vec )  THEN
    287              ALLOCATE( f_vec((nyn_x-nys_x+1)*(nzt_x-nzb_x+1),0:nx+2) )
     293             ALLOCATE( f_vec_x((nyn_x-nys_x+1)*(nzt_x-nzb_x+1),0:nx+2) )
    288294          ENDIF
    289295
     
    361367       REAL(wp), DIMENSION(nau2) ::  aux2  !<
    362368       REAL(wp), DIMENSION(nau2) ::  aux4  !<
    363 #elif defined( __nec )
     369#elif defined( __nec_fft )
    364370       REAL(wp), DIMENSION(6*(nx+1)) ::  work2  !<
    365371#elif defined( __cuda_fft )
     
    475481                ALLOCATE( work_vec( (nyn_x-nys_x+1)*(nzt_x-nzb_x+1),nx+2) )
    476482!
    477 !--             f_vec is already set in transpose_zx
    478                 CALL fft991cy_vec( f_vec, work_vec, trigs_x, ifax_x, nx+1, -1 )
     483!--             f_vec_x is already set in transpose_zx
     484                CALL fft991cy_vec( f_vec_x, work_vec, trigs_x, ifax_x, nx+1, -1 )
    479485                DEALLOCATE( work_vec )
    480486
     
    485491                         mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    486492                         DO  i = 0, (nx+1)/2
    487                             ar_inv(j,k,i) = f_vec(mm,2*i)
     493                            ar_inv(j,k,i) = f_vec_x(mm,2*i)
    488494                         ENDDO
    489495                         DO  i = 1, (nx+1)/2-1
    490                             ar_inv(j,k,nx+1-i) = f_vec(mm,2*i+1)
     496                            ar_inv(j,k,nx+1-i) = f_vec_x(mm,2*i+1)
    491497                         ENDDO
    492498                      ENDDO
     
    499505                         mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    500506                         DO  i = 0, (nx+1)/2
    501                             ar(i,j,k) = f_vec(mm,2*i)
     507                            ar(i,j,k) = f_vec_x(mm,2*i)
    502508                         ENDDO
    503509                         DO  i = 1, (nx+1)/2-1
    504                             ar(nx+1-i,j,k) = f_vec(mm,2*i+1)
     510                            ar(nx+1-i,j,k) = f_vec_x(mm,2*i+1)
    505511                         ENDDO
    506512                      ENDDO
     
    546552                         mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    547553                         DO  i = 0, (nx+1)/2
    548                             f_vec(mm,2*i) = ar_inv(j,k,i)
     554                            f_vec_x(mm,2*i) = ar_inv(j,k,i)
    549555                         ENDDO
    550556                         DO  i = 1, (nx+1)/2-1
    551                             f_vec(mm,2*i+1) = ar_inv(j,k,nx+1-i)
     557                            f_vec_x(mm,2*i+1) = ar_inv(j,k,nx+1-i)
    552558                         ENDDO
    553559                      ENDDO
     
    560566                         mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    561567                         DO  i = 0, (nx+1)/2
    562                             f_vec(mm,2*i) = ar(i,j,k)
     568                            f_vec_x(mm,2*i) = ar(i,j,k)
    563569                         ENDDO
    564570                         DO  i = 1, (nx+1)/2-1
    565                             f_vec(mm,2*i+1) = ar(nx+1-i,j,k)
     571                            f_vec_x(mm,2*i+1) = ar(nx+1-i,j,k)
    566572                         ENDDO
    567573                      ENDDO
     
    569575
    570576                ENDIF
    571                 f_vec(:,1)    = 0.0_wp
    572                 f_vec(:,nx+2) = 0.0_wp
     577                f_vec_x(:,1)    = 0.0_wp
     578                f_vec_x(:,nx+2) = 0.0_wp
    573579
    574580                ALLOCATE( work_vec((nyn_x-nys_x+1)*(nzt_x-nzb_x+1),nx+2) )
    575                 CALL fft991cy_vec( f_vec, work_vec, trigs_x, ifax_x, nx+1, 1 )
     581                CALL fft991cy_vec( f_vec_x, work_vec, trigs_x, ifax_x, nx+1, 1 )
    576582                DEALLOCATE( work_vec )
    577583
     
    707713          ENDIF
    708714
    709 #elif defined( __nec )
     715#elif defined( __nec_fft )
    710716
    711717          IF ( forward_fft )  THEN
     
    842848       REAL(wp), DIMENSION(nau2) ::  aux2       !<
    843849       REAL(wp), DIMENSION(nau2) ::  aux4       !<
    844 #elif defined( __nec )
     850#elif defined( __nec_fft )
    845851       REAL(wp), DIMENSION(6*(nx+1)) ::  work2  !<
    846852#endif
     
    989995
    990996          ENDIF
    991 #elif defined( __nec )
     997#elif defined( __nec_fft )
    992998          IF ( forward_fft )  THEN
    993999
     
    10721078       REAL(wp), DIMENSION(ny+2)   ::  work1  !<
    10731079       
    1074        REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f_vec
     1080       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f_vec_y
    10751081       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  work_vec
    10761082
     
    10841090       REAL(wp), DIMENSION(nau2) ::  auy2  !<
    10851091       REAL(wp), DIMENSION(nau2) ::  auy4  !<
    1086 #elif defined( __nec )
     1092#elif defined( __nec_fft )
    10871093       REAL(wp), DIMENSION(6*(ny+1)) ::  work2  !<
    10881094#elif defined( __cuda_fft )
     
    11941200!
    11951201!--             Vector version of Temperton-fft. Computes multiple 1-D FFT's.
    1196                 ALLOCATE( f_vec((nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),0:ny+2) )
     1202                ALLOCATE( f_vec_y((nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),0:ny+2) )
    11971203
    11981204                mm = 1
    11991205                DO  k = nzb_y, nzt_y
    12001206                   DO  i = nxl_y_l, nxr_y_l
    1201                       f_vec(mm,0:nx) = ar(0:nx,i,k)
     1207                      f_vec_y(mm,0:nx) = ar(0:nx,i,k)
    12021208                      mm = mm+1
    12031209                   ENDDO
     
    12051211
    12061212                ALLOCATE( work_vec( (nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),ny+2) )
    1207                 CALL fft991cy_vec( f_vec, work_vec, trigs_y, ifax_y, ny+1, -1 )
     1213                CALL fft991cy_vec( f_vec_y, work_vec, trigs_y, ifax_y, ny+1, -1 )
    12081214                DEALLOCATE( work_vec )
    12091215
     
    12141220                         mm = i-nxl_y_l+1+(k-nzb_y)*(nxr_y_l-nxl_y_l+1)
    12151221                         DO  j = 0, (ny+1)/2
    1216                             ar_inv(i,k,j) = f_vec(mm,2*j)
     1222                            ar_inv(i,k,j) = f_vec_y(mm,2*j)
    12171223                         ENDDO
    12181224                         DO  j = 1, (ny+1)/2 - 1
    1219                             ar_inv(i,k,ny+1-j) = f_vec(mm,2*j+1)
     1225                            ar_inv(i,k,ny+1-j) = f_vec_y(mm,2*j+1)
    12201226                         ENDDO
    12211227                      ENDDO
     
    12281234                         mm = i-nxl_y_l+1+(k-nzb_y)*(nxr_y_l-nxl_y_l+1)
    12291235                         DO  j = 0, (ny+1)/2
    1230                             ar(j,i,k) = f_vec(mm,2*j)
     1236                            ar(j,i,k) = f_vec_y(mm,2*j)
    12311237                         ENDDO
    12321238                         DO  j = 1, (ny+1)/2 - 1
    1233                             ar(ny+1-j,i,k) = f_vec(mm,2*j+1)
     1239                            ar(ny+1-j,i,k) = f_vec_y(mm,2*j+1)
    12341240                         ENDDO
    12351241                      ENDDO
     
    12381244                ENDIF
    12391245
    1240                 DEALLOCATE( f_vec )
     1246                DEALLOCATE( f_vec_y )
    12411247
    12421248             ENDIF
     
    12691275             ELSE
    12701276
    1271                 ALLOCATE( f_vec((nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),0:ny+2) )
     1277                ALLOCATE( f_vec_y((nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),0:ny+2) )
    12721278
    12731279                IF ( PRESENT( ar_inv ) )  THEN
     
    12771283                         mm = i-nxl_y_l+1+(k-nzb_y)*(nxr_y_l-nxl_y_l+1)
    12781284                         DO  j = 0, (ny+1)/2
    1279                             f_vec(mm,2*j) = ar_inv(i,k,j)
     1285                            f_vec_y(mm,2*j) = ar_inv(i,k,j)
    12801286                         ENDDO
    12811287                         DO  j = 1, (ny+1)/2 - 1
    1282                             f_vec(mm,2*j+1) = ar_inv(i,k,ny+1-j)
     1288                            f_vec_y(mm,2*j+1) = ar_inv(i,k,ny+1-j)
    12831289                         ENDDO
    12841290                      ENDDO
     
    12911297                         mm = i-nxl_y_l+1+(k-nzb_y)*(nxr_y_l-nxl_y_l+1)
    12921298                         DO  j = 0, (ny+1)/2
    1293                             f_vec(mm,2*j) = ar(j,i,k)
     1299                            f_vec_y(mm,2*j) = ar(j,i,k)
    12941300                         ENDDO
    12951301                         DO  j = 1, (ny+1)/2 - 1
    1296                             f_vec(mm,2*j+1) = ar(ny+1-j,i,k)
     1302                            f_vec_y(mm,2*j+1) = ar(ny+1-j,i,k)
    12971303                         ENDDO
    12981304                      ENDDO
     
    13011307                ENDIF
    13021308
    1303                 f_vec(:,1)    = 0.0_wp
    1304                 f_vec(:,ny+2) = 0.0_wp
     1309                f_vec_y(:,1)    = 0.0_wp
     1310                f_vec_y(:,ny+2) = 0.0_wp
    13051311
    13061312                ALLOCATE( work_vec((nxr_y_l-nxl_y_l+1)*(nzt_y-nzb_y+1),ny+2) )
    1307                 CALL fft991cy_vec( f_vec, work_vec, trigs_y, ifax_y, ny+1, 1 )
     1313                CALL fft991cy_vec( f_vec_y, work_vec, trigs_y, ifax_y, ny+1, 1 )
    13081314                DEALLOCATE( work_vec )
    13091315
     
    13111317                DO  k = nzb_y, nzt_y
    13121318                   DO  i = nxl_y_l, nxr_y_l
    1313                       ar(0:ny,i,k) = f_vec(mm,0:ny)
     1319                      ar(0:ny,i,k) = f_vec_y(mm,0:ny)
    13141320                      mm = mm+1
    13151321                   ENDDO
    13161322                ENDDO
    13171323
    1318                 DEALLOCATE( f_vec )
     1324                DEALLOCATE( f_vec_y )
    13191325
    13201326             ENDIF
     
    14231429
    14241430          ENDIF
    1425 #elif defined( __nec )
     1431#elif defined( __nec_fft )
    14261432          IF ( forward_fft )  THEN
    14271433
     
    15561562       REAL(wp), DIMENSION(nau2) ::  auy2  !<
    15571563       REAL(wp), DIMENSION(nau2) ::  auy4  !<
    1558 #elif defined( __nec )
     1564#elif defined( __nec_fft )
    15591565       REAL(wp), DIMENSION(6*(ny+1)) ::  work2  !<
    15601566#endif
     
    17051711
    17061712          ENDIF
    1707 #elif defined( __nec )
     1713#elif defined( __nec_fft )
    17081714          IF ( forward_fft )  THEN
    17091715
     
    17601766       INTEGER(iwp) ::  k     !<
    17611767       INTEGER(iwp) ::  siza  !<
    1762 #if defined( __nec )
     1768#if defined( __nec_fft )
    17631769       INTEGER(iwp) ::  sizw
    17641770#endif
     
    17681774       REAL(wp), DIMENSION(6*(nx+4),nz+1) ::  work1  !<
    17691775       
    1770 #if defined( __nec )
     1776#if defined( __nec_fft )
    17711777       COMPLEX(wp), DIMENSION(:,:), ALLOCATABLE ::  work
    17721778#endif
     
    18131819       ELSEIF ( fft_method == 'system-specific' )  THEN
    18141820
    1815 #if defined( __nec )
     1821#if defined( __nec_fft )
    18161822          ALLOCATE( work((nx+4)/2+1,nz+1) )
    18171823          siza = SIZE( ai, 1 )
     
    18961902       INTEGER(iwp) ::  ny1   !<
    18971903       INTEGER(iwp) ::  siza  !<
    1898 #if defined( __nec )
     1904#if defined( __nec_fft )
    18991905       INTEGER(iwp) ::  sizw
    19001906#endif
     
    19041910       REAL(wp), DIMENSION(6*(ny+4),nz+1) ::  work1  !<
    19051911
    1906 #if defined( __nec )
     1912#if defined( __nec_fft )
    19071913       COMPLEX(wp), DIMENSION(:,:), ALLOCATABLE ::  work
    19081914#endif
     
    19501956       ELSEIF ( fft_method == 'system-specific' )  THEN
    19511957
    1952 #if defined( __nec )
     1958#if defined( __nec_fft )
    19531959          ALLOCATE( work((ny+4)/2+1,nz+1) )
    19541960          siza = SIZE( ai, 1 )
  • palm/trunk/SOURCE/netcdf_data_input_mod.f90

    r4362 r4370  
    2525! -----------------
    2626! $Id$
     27! collective read switched off on NEC Aurora to avoid hang situations
     28!
     29! 4362 2020-01-07 17:15:02Z suehring
    2730! Input of plant canopy variables from static driver moved to plant-canopy
    2831! model
     
    41354138          collective_read = .FALSE.
    41364139       ELSE
     4140#if defined( __nec )
     4141          collective_read = .FALSE.   ! collective read causes hang situations on NEC Aurora
     4142#else
    41374143          collective_read = .TRUE.
     4144#endif
    41384145       ENDIF
    41394146#else
  • palm/trunk/SOURCE/ocean_mod.f90

    r4346 r4370  
    2525! -----------------
    2626! $Id$
     27! vector directives added to force vectorization on Intel19 compiler
     28!
     29! 4346 2019-12-18 11:55:56Z motisi
    2730! Introduction of wall_flags_total_0, which currently sets bits based on static
    2831! topography information used in wall_flags_static_0
     
    16791682       DO  i = nxl, nxr
    16801683          DO  j = nys, nyn
     1684             !following directive is required to vectorize on Intel19
     1685             !DIR$ IVDEP
    16811686             DO  k = nzb+1, nzt
    16821687                sa_p(k,j,i) = sa(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +            &
  • palm/trunk/SOURCE/prognostic_equations.f90

    r4360 r4370  
    2525! -----------------
    2626! $Id$
     27! vector directives added to force vectorization on Intel19 compiler
     28!
     29! 4360 2020-01-07 11:25:50Z suehring
    2730! Introduction of wall_flags_total_0, which currently sets bits based on static
    2831! topography information used in wall_flags_static_0
     
    936939    DO  i = nxlu, nxr
    937940       DO  j = nys, nyn
     941          !following directive is required to vectorize on Intel19
     942          !DIR$ IVDEP
    938943          DO  k = nzb+1, nzt
    939944             u_p(k,j,i) = u(k,j,i) + ( dt_3d * ( tsc(2) * tend(k,j,i) +          &
     
    10391044    DO  i = nxl, nxr
    10401045       DO  j = nysv, nyn
     1046          !following directive is required to vectorize on Intel19
     1047          !DIR$ IVDEP
    10411048          DO  k = nzb+1, nzt
    10421049             v_p(k,j,i) = v(k,j,i) + ( dt_3d * ( tsc(2) * tend(k,j,i) +        &
     
    11381145    DO  i = nxl, nxr
    11391146       DO  j = nys, nyn
     1147          !following directive is required to vectorize on Intel19
     1148          !DIR$ IVDEP
    11401149          DO  k = nzb+1, nzt-1
    11411150             w_p(k,j,i) = w(k,j,i) + ( dt_3d * ( tsc(2) * tend(k,j,i) +        &
     
    12771286       DO  i = nxl, nxr
    12781287          DO  j = nys, nyn
     1288             !following directive is required to vectorize on Intel19
     1289             !DIR$ IVDEP
    12791290             DO  k = nzb+1, nzt
    12801291                pt_p(k,j,i) = pt(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +      &
     
    14001411       DO  i = nxl, nxr
    14011412          DO  j = nys, nyn
     1413             !following directive is required to vectorize on Intel19
     1414             !DIR$ IVDEP
    14021415             DO  k = nzb+1, nzt
    14031416                q_p(k,j,i) = q(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +        &
     
    15201533       DO  i = nxl, nxr
    15211534          DO  j = nys, nyn
     1535             !following directive is required to vectorize on Intel19
     1536             !DIR$ IVDEP
    15221537             DO  k = nzb+1, nzt
    15231538                s_p(k,j,i) = s(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +        &
  • palm/trunk/SOURCE/surface_layer_fluxes_mod.f90

    r4366 r4370  
    2626! -----------------
    2727! $Id$
     28! bugfix: openacc porting for vector version of OL calculation added
     29!
     30! 4366 2020-01-09 08:12:43Z raasch
    2831! vector version for calculation of Obukhov length via Newton iteration added
    2932!
     
    863866
    864867       LOGICAL, DIMENSION(surf%ns) ::  convergence_reached  !< convergence switch for vectorization
     868       !$ACC DECLARE CREATE( convergence_reached )
    865869
    866870       REAL(wp)     :: f,      & !< Function for Newton iteration: f = Ri - [...]/[...]^2 = 0
     
    873877       REAL(wp), DIMENSION(surf%ns) ::  ol_old_vec  !< temporary array required for vectorization
    874878       REAL(wp), DIMENSION(surf%ns) ::  z_mo_vec    !< temporary array required for vectorization
     879       !$ACC DECLARE CREATE( ol_old_vec, z_mo_vec )
    875880
    876881!
     
    10631068!--       Calculate the Obukhov length using Newton iteration
    10641069!--       First set arrays required for vectorization
     1070          !$ACC PARALLEL LOOP &
     1071          !$ACC PRESENT(surf)
    10651072          DO  m = 1, surf%ns
    10661073
     
    10771084                IF ( surf%rib(m) < 0.0_wp ) surf%ol(m) = -0.01_wp
    10781085             ENDIF
     1086!
     1087!--          Initialize convergence flag
     1088             convergence_reached(m) = .FALSE.
    10791089
    10801090          ENDDO
     
    10821092!
    10831093!--       Iteration to find Obukhov length
    1084           convergence_reached(:) = .FALSE.
    10851094          iter = 0
    10861095          DO
     
    10901099!--          In case of divergence, use the value(s) of the previous time step
    10911100             IF ( iter > 1000 )  THEN
     1101                !$ACC PARALLEL LOOP &
     1102                !$ACC PRESENT(surf)
    10921103                DO  m = 1, surf%ns
    1093                    IF ( .NOT. convergence_reached(m) )  surf%ol(1:surf%ns) = ol_old
     1104                   IF ( .NOT. convergence_reached(m) )  surf%ol(m) = ol_old_vec(m)
    10941105                ENDDO
    10951106                EXIT
    10961107             ENDIF
    10971108
    1098 
     1109             !$ACC PARALLEL LOOP PRIVATE(ol_m, ol_l, ol_u, f, f_d_ol) &
     1110             !$ACC PRESENT(surf)
    10991111             DO  m = 1, surf%ns
    11001112
     
    11821194!
    11831195!--          Assure that Obukhov length does not become zero
     1196             !$ACC PARALLEL LOOP &
     1197             !$ACC PRESENT(surf)
    11841198             DO  m = 1, surf%ns
    11851199                IF ( convergence_reached(m) )  CYCLE
  • palm/trunk/SOURCE/temperton_fft_mod.f90

    r4366 r4370  
    99! -----------------
    1010! $Id$
     11! unused variables removed
     12!
     13! 4366 2020-01-09 08:12:43Z raasch
    1114! vectorized routines added
    1215!
     
    22452248    INTEGER(iwp) ::  j      !<
    22462249    INTEGER(iwp) ::  jbase  !<
    2247     INTEGER(iwp) ::  jj     !<
    22482250    INTEGER(iwp) ::  k      !<
    22492251    INTEGER(iwp) ::  la     !<
    2250     INTEGER(iwp) ::  nb     !<
    2251     INTEGER(iwp) ::  nblox  !<
    22522252    INTEGER(iwp) ::  nfax   !<
    22532253    INTEGER(iwp) ::  nvex   !<
    22542254    INTEGER(iwp) ::  nx     !<
    2255     INTEGER(iwp) ::  mm     !<
    22562255
    22572256
     
    22642263    nx   = n + 1
    22652264    IF ( MOD(n,2) == 1 )  nx = n
    2266     nblox = 1
    22672265    nvex = 1
    22682266
  • palm/trunk/SOURCE/transpose.f90

    r4366 r4370  
    2525! -----------------
    2626! $Id$
     27! vector array renamed
     28!
     29! 4366 2020-01-09 08:12:43Z raasch
    2730! modifications for NEC vectorization
    2831!
     
    270273
    271274    USE fft_xy,                                                                &
    272         ONLY:  f_vec, temperton_fft_vec
     275        ONLY:  f_vec_x, temperton_fft_vec
    273276
    274277    USE indices,                                                               &
     
    307310!
    308311!--    Reorder input array for transposition. Data from the vectorized Temperton-fft is stored in
    309 !--    different array format (f_vec).
     312!--    different array format (f_vec_x).
    310313       IF ( temperton_fft_vec )  THEN
    311314
     
    316319                   DO  j = nys_x, nyn_x
    317320                      mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    318                       work(j,i-xs+1,k,l) = f_vec(mm,i)
     321                      work(j,i-xs+1,k,l) = f_vec_x(mm,i)
    319322                   ENDDO
    320323                ENDDO
     
    862865
    863866    USE fft_xy,                                                                &
    864         ONLY:  f_vec, temperton_fft_vec
     867        ONLY:  f_vec_x, temperton_fft_vec
    865868
    866869    USE indices,                                                               &
     
    944947!
    945948!--    Reorder transposed array.
    946 !--    Data for the vectorized Temperton-fft is stored in different array format (f_vec) which saves
    947 !--    additional data copy in fft_x.
     949!--    Data for the vectorized Temperton-fft is stored in different array format (f_vec_x) which
     950!--    saves additional data copy in fft_x.
    948951       IF ( temperton_fft_vec )  THEN
    949952
     
    954957                   DO  j = nys_x, nyn_x
    955958                      mm = j-nys_x+1+(k-nzb_x)*(nyn_x-nys_x+1)
    956                       f_vec(mm,i) = work(j,i-xs+1,k,l)
     959                      f_vec_x(mm,i) = work(j,i-xs+1,k,l)
    957960                   ENDDO
    958961                ENDDO
  • palm/trunk/SOURCE/turbulence_closure_mod.f90

    r4346 r4370  
    2525! -----------------
    2626! $Id$
     27! vector directives added to force vectorization on Intel19 compiler
     28!
     29! 4346 2019-12-18 11:55:56Z motisi
    2730! Introduction of wall_flags_total_0, which currently sets bits based on static
    2831! topography information used in wall_flags_static_0
     
    22722275       DO  i = nxl, nxr
    22732276          DO  j = nys, nyn
     2277             !following directive is required to vectorize on Intel19
     2278             !DIR$ IVDEP
    22742279             DO  k = nzb+1, nzt
    22752280                e_p(k,j,i) = e(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +        &
  • palm/trunk/TUTORIALS/cases/dispersion_eulerian_and_lpm_extended/USER_CODE/user_module.f90

    r4002 r4370  
    1515! PALM. If not, see <http://www.gnu.org/licenses/>.
    1616!
    17 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     17! Copyright 1997-2020 Leibniz Universitaet Hannover
    1818!------------------------------------------------------------------------------!
    1919!
  • palm/trunk/TUTORIALS/cases/lsm_short/USER_CODE/user_module.f90

    r4222 r4370  
    1515! PALM. If not, see <http://www.gnu.org/licenses/>.
    1616!
    17 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     17! Copyright 1997-2020 Leibniz Universitaet Hannover
    1818!------------------------------------------------------------------------------!
    1919!
  • palm/trunk/UTIL/agent_preprocessing/agent_preprocessing.f90

    r3665 r4370  
    1515! PALM. If not, see <http://www.gnu.org/licenses/>.
    1616!
    17 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     17! Copyright 1997-2020 Leibniz Universitaet Hannover
    1818!------------------------------------------------------------------------------!
    1919!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/kpp4palm/templates/module_header

    r3833 r4370  
    3737! PALM. If not, see <http://www.gnu.org/licenses/>.
    3838!
    39 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     39! Copyright 1997-2020 Leibniz Universitaet Hannover
    4040!--------------------------------------------------------------------------------!
    4141!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_cbm4/chem_gasphase_mod.f90

    r3944 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_passive/chem_gasphase_mod.f90

    r3833 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_passive1/chem_gasphase_mod.f90

    r3944 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_phstat/chem_gasphase_mod.f90

    r3944 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_phstatp/chem_gasphase_mod.f90

    r3944 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_salsa+phstat/chem_gasphase_mod.f90

    r3949 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_salsa+simple/chem_gasphase_mod.f90

    r4016 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_salsagas/chem_gasphase_mod.f90

    r3944 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_simple/chem_gasphase_mod.f90

    r4016 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_simplep/chem_gasphase_mod.f90

    r4016 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
  • palm/trunk/UTIL/chemistry/gasphase_preproc/mechanisms/def_smog/chem_gasphase_mod.f90

    r3833 r4370  
    4141! PALM. If not,see <http://www.gnu.org/licenses/>.
    4242!
    43 ! Copyright 1997-2019 Leibniz Universitaet Hannover
     43! Copyright 1997-2020 Leibniz Universitaet Hannover
    4444!--------------------------------------------------------------------------------!
    4545!
Note: See TracChangeset for help on using the changeset viewer.