Changeset 4132


Ignore:
Timestamp:
Apr 20, 2022, 6:35:42 PM (2 years ago)
Author:
Laurent Fairhead
Message:

Modifications to code to start using openacc directives
LF

Location:
LMDZ6/branches/Portage_acc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Portage_acc/bld.cfg

    r4087 r4132  
    100100bld::excl_dep        use::ifile_attr
    101101bld::excl_dep        use::ixml_tree
     102bld::excl_dep        use::openacc
    102103
    103104# Don't generate interface files
  • LMDZ6/branches/Portage_acc/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90

    r4127 r4132  
    4848  USE ioipsl_getin_p_mod, ONLY: getin_p
    4949  USE slab_heat_transp_mod, ONLY: ini_slab_transp_geom
    50   IMPLICIT NONE
     50#ifdef _OPENACC
     51    USE openacc
     52#endif
     53    IMPLICIT NONE
    5154
    5255  ! =======================================================================
     
    97100#endif
    98101
     102#ifdef _OPENACC
     103    INTEGER :: numdev
     104
     105    !$acc init
     106
     107    ! get the number of NVIDIA devices on this node
     108    numdev = acc_get_num_devices(ACC_DEVICE_NVIDIA)
     109    PRINT *, 'init_physics : number of available GPU devices', numdev
     110    IF (numdev < 1) STOP "Error: there are no devices available on this host. ABORTING"
     111    CALL acc_init(ACC_DEVICE_NVIDIA)
     112    numdev = acc_get_device_num(ACC_DEVICE_NVIDIA)
     113    PRINT *, 'init_physics : GPU device id = ', numdev
     114#endif
     115
     116
     117
     118
     119
    99120  ! --> initialize physics distribution, global fields and geometry
    100121  ! (i.e. things in phy_common or dynphy_lonlat)
  • LMDZ6/branches/Portage_acc/libf/phylmd/ajsec.F90

    r2346 r4132  
    11
    2 ! $Header$
     2! $Id$
    33
    44SUBROUTINE ajsec(paprs, pplay, t, q, limbas, d_t, d_q)
     
    3434  INTEGER i, k, k1, k2
    3535
     36  !$acc data create (zh, zho, zq,zpk,zpkdp,modif) &
     37  !$acc &    copyin (paprs, pplay, t , q, limbas) &
     38  !$acc &    copyout (d_t, d_q)                   &
     39  !$acc &
     40 
    3641  ! Initialisation:
    3742
     
    3944  limhau = klev
    4045
     46  !$acc kernels default(none) async
    4147  DO k = 1, klev
    4248    DO i = 1, klon
     
    7177    END DO
    7278  END DO
     79  !$acc end kernels
    7380  ! ------------------------------------- correction des profils instables
     81  !$acc kernels default(none) async
    7482  DO i = 1, klon
    7583    IF (modif(i)) THEN
     
    114122    END IF
    115123  END DO
    116 
     124  !$acc end kernels
     125
     126  !$acc kernels default(none) async
    117127  DO k = 1, limhau
    118128    DO i = 1, klon
     
    121131    END DO
    122132  END DO
     133  !$acc end kernels
    123134
    124135  ! FH : les d_q et d_t sont maintenant calcules de facon a valoir
     
    144155
    145156  IF (.NOT. mixq) THEN
     157    !$acc kernels default(none) async
    146158    DO k = 1, klev
    147159      DO i = 1, klon
     
    149161      END DO
    150162    END DO
     163    !$acc end kernels
    151164  END IF
     165  !$acc end data
    152166
    153167  RETURN
     168
    154169END SUBROUTINE ajsec
    155170
     
    187202  INTEGER i, k, k1, k2
    188203
     204  !$acc data create (zh, zq, zpk, zpkdp, modif) &
     205  !$acc & copyin (paprs, pplay, t , q) &
     206  !$acc & copyout (d_t, d_q)
     207
    189208  ! Initialisation:
    190209
     
    193212  limhau = klev
    194213
     214  !$acc kernels default(none) async
    195215  DO k = 1, klev
    196216    DO i = 1, klon
     
    199219    END DO
    200220  END DO
     221  !$acc end kernels
     222
    201223  ! ------------------------------------- detection des profils a modifier
     224  !$acc kernels default(none) async
    202225  DO k = limbas, limhau
    203226    DO i = 1, klon
     
    224247    END DO
    225248  END DO
     249  !$acc end kernels
    226250  ! ------------------------------------- correction des profils instables
     251  !$acc kernels default(none) async
    227252  DO i = 1, klon
    228253    IF (modif(i)) THEN
     
    267292    END IF
    268293  END DO
    269 
     294  !$acc end kernels
     295
     296  !$acc kernels default(none) async
    270297  DO k = limbas, limhau
    271298    DO i = 1, klon
     
    274301    END DO
    275302  END DO
     303  !$acc end kernels
    276304
    277305  IF (limbas>1) THEN
     306  !$acc kernels default(none) async
    278307    DO k = 1, limbas - 1
    279308      DO i = 1, klon
     
    282311      END DO
    283312    END DO
     313  !$acc end kernels
    284314  END IF
    285315
    286316  IF (limhau<klev) THEN
     317  !$acc kernels default(none) async
    287318    DO k = limhau + 1, klev
    288319      DO i = 1, klon
     
    291322      END DO
    292323    END DO
     324  !$acc end kernels
    293325  END IF
    294326
    295327  IF (.NOT. mixq) THEN
     328  !$acc kernels default(none) async
    296329    DO k = 1, klev
    297330      DO i = 1, klon
     
    299332      END DO
    300333    END DO
     334  !$acc end kernels
    301335  END IF
    302336
     337  !$acc end data
     338
    303339  RETURN
     340
     341
    304342END SUBROUTINE ajsec_convv2
    305343SUBROUTINE ajsec_old(paprs, pplay, t, d_t)
     
    324362  LOGICAL modif(klon), down
    325363  INTEGER i, l, l1, l2
     364
     365  !$acc data create (local_h, modif) &
     366  !$acc & copyin (paprs, pplay, t) &
     367  !$acc & copyout (d_t)
     368
    326369  ! ------------------------------------- detection des profils a modifier
     370  !$acc kernels default(none) async
    327371  DO i = 1, klon
    328372    modif(i) = .FALSE.
     
    344388    END DO
    345389  END DO
     390  !$acc end kernels
    346391  ! ------------------------------------- correction des profils instables
     392  !$acc kernels default(none) async
    347393  DO i = 1, klon
    348394    IF (modif(i)) THEN
     
    387433    END IF
    388434  END DO
    389 
     435  !$acc end kernels
     436
     437  !$acc kernels default(none) async
    390438  DO l = 1, klev
    391439    DO i = 1, klon
     
    393441    END DO
    394442  END DO
     443  !$acc end kernels
     444  !$acc end data
    395445
    396446  RETURN
     447
     448
    397449END SUBROUTINE ajsec_old
  • LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_main.F90

    r4094 r4132  
    136136!   ---------------
    137137!
    138     print*,'NEW THERMCELL cool'
    139 
    140138
    141139   fm=0. ; entr=0. ; detr=0.
Note: See TracChangeset for help on using the changeset viewer.