Ignore:
Timestamp:
07/15/19 12:29:31 (5 years ago)
Author:
adurocher
Message:

trunk : Added metric terms to kernels parameters to avoid Host/GPU transferts

Metric terms are now subroutine parameters instead of module variables in kernel subroutines. Dummy arguments for metric terms are now defined as fixed-size arrays, and arrays dimensions are well known when entering an 'acc data' region. Array descriptors are no longer transferred form host to device each time the data region is executed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/dynamics/caldyn_kernels_hevi.F90

    r953 r954  
    2020CONTAINS 
    2121 
    22   SUBROUTINE compute_theta(ps,theta_rhodz, rhodz,theta) 
    23     USE disvert_mod, ONLY : mass_dbk, mass_dak 
     22  SUBROUTINE compute_theta(ps,theta_rhodz, rhodz,theta, mass_dak, mass_dbk) 
    2423    REAL(rstd),INTENT(IN)    :: ps(iim*jjm) 
    2524    REAL(rstd),INTENT(IN)    :: theta_rhodz(iim*jjm,llm,nqdyn) 
    2625    REAL(rstd),INTENT(INOUT) :: rhodz(iim*jjm,llm) 
    2726    REAL(rstd),INTENT(OUT)   :: theta(iim*jjm,llm,nqdyn) 
     27    REAL(rstd),INTENT(IN)    :: mass_dak(llm) 
     28    REAL(rstd),INTENT(IN)    :: mass_dbk(llm) 
    2829    INTEGER :: ij,l,iq 
    2930    REAL(rstd) :: m 
     
    5960  END SUBROUTINE compute_theta 
    6061 
    61   SUBROUTINE compute_pvort_only(u,rhodz,qu,qv) 
    62     USE geometry, ONLY : Av, Riv2, fv 
     62  SUBROUTINE compute_pvort_only(u,rhodz,qu,qv,Av,Riv2,fv) 
    6363    REAL(rstd),INTENT(IN)  :: u(iim*3*jjm,llm) 
    6464    REAL(rstd),INTENT(INOUT) :: rhodz(iim*jjm,llm) 
    6565    REAL(rstd),INTENT(OUT) :: qu(iim*3*jjm,llm) 
    6666    REAL(rstd),INTENT(OUT) :: qv(iim*2*jjm,llm) 
     67    REAL(rstd),INTENT(IN)  :: Av(2*iim*jjm) 
     68    REAL(rstd),INTENT(IN)  :: Riv2(iim*jjm,6) 
     69    REAL(rstd),INTENT(IN)  :: fv(2*iim*jjm) 
    6770 
    6871    INTEGER :: ij,l 
     
    551554  END SUBROUTINE compute_caldyn_fast 
    552555     
    553   SUBROUTINE compute_caldyn_Coriolis(hflux,theta,qu, convm,dtheta_rhodz,du) 
    554     USE geometry, ONLY : Ai, wee 
     556  SUBROUTINE compute_caldyn_Coriolis(hflux,theta,qu, convm,dtheta_rhodz,du,Ai,wee) 
    555557    REAL(rstd),INTENT(IN)  :: hflux(3*iim*jjm,llm)  ! hflux in kg/s 
    556558    REAL(rstd),INTENT(IN)  :: theta(iim*jjm,llm,nqdyn) ! active scalars 
     
    559561    REAL(rstd),INTENT(OUT) :: dtheta_rhodz(iim*jjm,llm,nqdyn) 
    560562    REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 
     563    REAL(rstd),INTENT(IN)  :: Ai(iim*jjm) 
     564    REAL(rstd),INTENT(IN)  :: wee(3*iim*jjm,5,2) 
    561565     
    562566    REAL(rstd) :: Ftheta(3*iim*jjm,llm)  ! potential temperature flux 
     
    730734  END SUBROUTINE compute_caldyn_Coriolis 
    731735 
    732   SUBROUTINE compute_caldyn_slow_hydro(u,rhodz,hflux,du,zero) 
    733     USE geometry, ONLY : Ai, le_de 
     736  SUBROUTINE compute_caldyn_slow_hydro(u,rhodz,hflux,du,Ai,le_de,zero) 
    734737    LOGICAL, INTENT(IN) :: zero 
    735738    REAL(rstd),INTENT(IN)  :: u(3*iim*jjm,llm)    ! prognostic "velocity" 
     
    737740    REAL(rstd),INTENT(OUT) :: hflux(3*iim*jjm,llm) ! hflux in kg/s 
    738741    REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 
     742    REAL(rstd),INTENT(IN)  :: Ai(iim*jjm) 
     743    REAL(rstd),INTENT(IN)  :: le_de(3*iim*jjm) 
    739744     
    740745    REAL(rstd) :: berni(iim*jjm,llm)  ! Bernoulli function 
Note: See TracChangeset for help on using the changeset viewer.