Changeset 4141


Ignore:
Timestamp:
May 2, 2022, 11:26:48 AM (2 years ago)
Author:
Laurent Fairhead
Message:

Outillage de physiq_mod.F90 en directives openacc pour prendre en compte le portage de ajsec.F90

Location:
LMDZ6/branches/Portage_acc/libf/phylmd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Portage_acc/libf/phylmd/phys_state_var_mod.F90

    r4088 r4141  
    274274      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
    275275!$OMP THREADPRIVATE(wake_deltaq)
     276!$acc declare create( wake_deltat, wake_deltaq)     
    276277#ifdef ISO
    277278      REAL, ALLOCATABLE, SAVE :: wake_deltaxt(:,:,:)
     
    280281      REAL,ALLOCATABLE,SAVE :: wake_s(:)
    281282!$OMP THREADPRIVATE(wake_s)
     283!$acc declare create(wake_s)     
    282284      REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
    283285!$OMP THREADPRIVATE(awake_dens, wake_dens)
  • LMDZ6/branches/Portage_acc/libf/phylmd/physiq_mod.F90

    r4137 r4141  
    3737         boundslon,boundslat, dx, dy, ind_cell_glo
    3838    USE indice_sol_mod, ONLY: nbsrf,is_ave, is_ter, is_oce, is_lic, is_sic
    39     USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
    40          histwrite, ju2ymds, ymds2ju
     39!    USE ioipsl, ONLY : histbeg, histvert, histdef, histend, histsync
     40!    USE ioipsl, ONLY : histwrite, ju2ymds, ymds2ju
     41    USE ioipsl, ONLY :  ymds2ju
    4142    USE ioipsl_getin_p_mod, ONLY : getin_p
    4243!    USE indice_sol_mod
     
    525526!JLD    REAL znivsig(klev)
    526527!JLD    real pir
    527 
     528   
    528529    REAL u(klon,klev)
    529530    REAL v(klon,klev)
     
    12631264    REAL pi
    12641265
     1266    !$acc data copyin (paprs, pplay)  &
     1267    !$acc &    create(t_w, q_w, limbas, d_t_adjwk, d_q_adjwk) &
     1268    !$acc &    create(t_x, q_x) &
     1269    !$acc &    present(wake_s, wake_deltat, wake_deltaq, t_seri,q_seri) &
     1270    !$acc &
     1271
     1272   
    12651273    pi = 4. * ATAN(1.)
    12661274
     
    19391947             d_deltat_the(:,:) = 0.
    19401948             d_deltaq_the(:,:) = 0.
     1949             !$acc kernels default(none)
    19411950             d_deltat_ajs_cv(:,:) = 0.
    19421951             d_deltaq_ajs_cv(:,:) = 0.
     1952             !$acc end kernels
    19431953             d_s_wk(:) = 0.
    19441954             d_dens_wk(:) = 0.
     
    29542964       !t_w et t_x: si pas de poches froides, t_w=t_x=t_seri
    29552965       IF (iflag_wake>=1) THEN
    2956          DO k=1,klev
     2966          !$acc kernels default(none) async
     2967          DO k=1,klev
    29572968            DO i=1,klon
    29582969                t_w(i,k) = t_seri(i,k) + (1-wake_s(i))*wake_deltat(i,k)
     
    29622973            ENDDO
    29632974         ENDDO
    2964        ELSE
    2965                 t_w(:,:) = t_seri(:,:)
    2966                 q_w(:,:) = q_seri(:,:)
    2967                 t_x(:,:) = t_seri(:,:)
    2968                 q_x(:,:) = q_seri(:,:)
     2975         !$acc end kernels
     2976      ELSE
     2977          !$acc kernels default(none) async
     2978          DO k=1,klev
     2979            DO i=1,klon
     2980                t_w(i,k) = t_seri(i,k)
     2981                q_w(i,k) = q_seri(i,k)
     2982                t_x(i,k) = t_seri(i,k)
     2983                q_x(i,k) = q_seri(i,k)
     2984            ENDDO
     2985         ENDDO
     2986         !$acc end kernels
    29692987       ENDIF
    29702988       !
     
    29762994          IF (iflag_adjwk >= 1) THEN
    29772995             limbas(:) = 1
     2996             !$acc update device(limbas)
    29782997             CALL ajsec(paprs, pplay, t_w, q_w, limbas, &
    29792998                  d_t_adjwk, d_q_adjwk)
     2999             !$acc update self(d_t_adjwk, d_q_adjwk)
    29803000             !
    2981              DO k=1,klev
    2982                 DO i=1,klon
    2983                    IF (wake_s(i) .GT. 1.e-3) THEN
     3001             IF (wake_s(i) .GT. 1.e-3) THEN
     3002                !$acc kernels default(none) async
     3003                DO k=1,klev
     3004                   DO i=1,klon
    29843005                      t_w(i,k) = t_w(i,k) + d_t_adjwk(i,k)
    29853006                      q_w(i,k) = q_w(i,k) + d_q_adjwk(i,k)
    29863007                      d_deltat_ajs_cv(i,k) = d_t_adjwk(i,k)
    29873008                      d_deltaq_ajs_cv(i,k) = d_q_adjwk(i,k)
    2988                    ELSE
    2989                       d_deltat_ajs_cv(i,k) = 0.
    2990                       d_deltaq_ajs_cv(i,k) = 0.
    2991                    ENDIF
     3009                   ENDDO
    29923010                ENDDO
    2993              ENDDO
     3011                !$acc end kernels
     3012             ELSE
     3013                !$acc kernels default(none)
     3014                d_deltat_ajs_cv(i,k) = 0.
     3015                d_deltaq_ajs_cv(i,k) = 0.
     3016                !$acc end kernels
     3017             ENDIF
     3018             !$acc update self(d_deltat_ajs_cv,d_deltaq_ajs_cv)               
    29943019             IF (iflag_adjwk == 2) THEN
    29953020               CALL add_wake_tend &
     
    30463071          !jyg   iflag_con est dans clesphys
    30473072          !c          CALL concvl (iflag_con,iflag_clos,
     3073!$acc update host(t_w, q_w)
    30483074          CALL concvl (iflag_clos, &
    30493075               phys_tstep, paprs, pplay, k_upper_cv, t_x,q_x, &
     
    35913617          ELSE IF (iflag_thermals>0) THEN
    35923618             ! Calling adjustment above the top of thermal plumes
     3619             !$acc update device(limbas)
    35933620             CALL ajsec(paprs, pplay, t_seri,q_seri,limbas &
    35943621                  , d_t_ajsb, d_q_ajsb)
     
    35973624          !--------------------------------------------------------------------
    35983625          ! ajout des tendances de l'ajustement sec ou des thermiques
     3626          !$acc update host (d_t_ajsb, d_q_ajsb)
    35993627          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
    36003628               'ajsb',abortphy,flag_inhib_tend,itap,0)
     
    54245452
    54255453    !      first=.false.
    5426 
     5454   
     5455  !$acc end data
    54275456  END SUBROUTINE physiq
    54285457
Note: See TracChangeset for help on using the changeset viewer.