Changeset 5880


Ignore:
Timestamp:
Nov 21, 2025, 7:05:56 PM (4 weeks ago)
Author:
yann meurdesoif
Message:

GPU port of clim_qbs_up + clim_qbs_down
=> (untested for test case)
YM

Location:
LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/climb_qbs_mod.f90

    r5868 r5880  
    33! Module to solve the verctical diffusion of blowing snow;
    44!
    5   USE dimphy
    65
    76  IMPLICIT NONE
    87  SAVE
    98  PRIVATE
    10   PUBLIC :: climb_qbs_down, climb_qbs_up
     9  PUBLIC :: climb_qbs_down, climb_qbs_up, climb_qbs_init, climb_qbs_finalize
    1110
    1211  REAL, DIMENSION(:,:), ALLOCATABLE :: gamaqbs
     
    1918  !$OMP THREADPRIVATE(Kcoefqbs)
    2019
     20  LOGICAL, SAVE                            :: first=.TRUE.
     21  !$OMP THREADPRIVATE(first)
     22 
    2123CONTAINS
     24  SUBROUTINE climb_qbs_init
     25  USE dimphy, ONLY : klon, klev
     26  IMPLICIT NONE
     27    INTEGER :: ierr
     28!****************************************************************************************
     29! 1)
     30! Allocation at first time step only
     31!   
     32!****************************************************************************************
     33
     34    IF (first) THEN
     35       first=.FALSE.
     36       ALLOCATE(Ccoef_QBS(klon,klev), STAT=ierr)
     37       IF ( ierr /= 0 )  PRINT*,' pb in allloc Ccoef_QBS, ierr=', ierr
     38       Ccoef_QBS(:,:) = 0.
     39       
     40       ALLOCATE(Dcoef_QBS(klon,klev), STAT=ierr)
     41       IF ( ierr /= 0 )  PRINT*,' pb in allloc Dcoef_QBS, ierr=', ierr
     42       Dcoef_QBS(:,:) = 0.
     43
     44       ALLOCATE(Acoef_QBS(klon), Bcoef_QBS(klon), STAT=ierr)
     45       IF ( ierr /= 0 )  PRINT*,' pb in allloc Acoef_BS and Bcoef_BS, ierr=', ierr
     46       Acoef_QBS(:) = 0. ; Bcoef_QBS(:) = 0.
     47
     48       ALLOCATE(Kcoefqbs(klon,klev), STAT=ierr)
     49       IF ( ierr /= 0 )  PRINT*,' pb in allloc Kcoefqbs, ierr=', ierr
     50       Kcoefqbs(:,:) = 0.
     51
     52       ALLOCATE(gamaqbs(1:klon,2:klev), STAT=ierr)
     53       IF ( ierr /= 0 ) PRINT*,' pb in allloc gamaqbs, ierr=', ierr
     54       gamaqbs(:,:) = 0.
     55
     56    END IF
     57
     58  END SUBROUTINE climb_qbs_init
     59
     60  SUBROUTINE climb_qbs_finalize
     61  IMPLICIT NONE
     62  INTEGER :: ierr
     63    !****************************************************************************************
     64    ! Some deallocations
     65    !
     66    !****************************************************************************************
     67    DEALLOCATE(Ccoef_QBS, Dcoef_QBS,stat=ierr)   
     68    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Ccoef_QBS, Dcoef_QBS, ierr=', ierr
     69    DEALLOCATE(Acoef_QBS, Bcoef_QBS,stat=ierr)   
     70    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Acoef_QBS, Bcoef_QBS, ierr=', ierr
     71    DEALLOCATE(gamaqbs,stat=ierr)
     72    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate gamaqbs, ierr=', ierr
     73    DEALLOCATE(Kcoefqbs,stat=ierr)
     74    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Kcoefqbs, ierr=', ierr
     75
     76  END SUBROUTINE climb_qbs_finalize
     77
    2278!
    2379!****************************************************************************************
     
    2884       Kcoef_qbs_out, gama_qbs_out, &
    2985       Acoef_QBS_out, Bcoef_QBS_out)
     86!$gpum horizontal knon
    3087
    3188! This routine calculates recursivly the coefficients C and D
     
    3491USE yomcst_mod_h
    3592USE compbl_mod_h
     93USE dimphy, ONLY : klev
    3694! Input arguments
    3795!****************************************************************************************
     
    64122    REAL :: ygamaqbs(1:knon,2:klev)
    65123
    66     LOGICAL, SAVE                            :: first=.TRUE.
    67     !$OMP THREADPRIVATE(first)
    68124    REAL, DIMENSION(knon)                    :: psref
    69125    REAL                                     :: delz, pkh
    70126    INTEGER                                  :: k, i, j, ierr
    71 !****************************************************************************************
    72 ! 1)
    73 ! Allocation at first time step only
    74 !   
    75 !****************************************************************************************
    76 
    77     IF (first) THEN
    78        first=.FALSE.
    79        ALLOCATE(Ccoef_QBS(klon,klev), STAT=ierr)
    80        IF ( ierr /= 0 )  PRINT*,' pb in allloc Ccoef_QBS, ierr=', ierr
    81        
    82        ALLOCATE(Dcoef_QBS(klon,klev), STAT=ierr)
    83        IF ( ierr /= 0 )  PRINT*,' pb in allloc Dcoef_QBS, ierr=', ierr
    84        
    85        ALLOCATE(Acoef_QBS(klon), Bcoef_QBS(klon), STAT=ierr)
    86        IF ( ierr /= 0 )  PRINT*,' pb in allloc Acoef_BS and Bcoef_BS, ierr=', ierr
    87        
    88        ALLOCATE(Kcoefqbs(klon,klev), STAT=ierr)
    89        IF ( ierr /= 0 )  PRINT*,' pb in allloc Kcoefqbs, ierr=', ierr
    90        
    91        ALLOCATE(gamaqbs(1:klon,2:klev), STAT=ierr)
    92        IF ( ierr /= 0 ) PRINT*,' pb in allloc gamaqbs, ierr=', ierr
    93        
    94     END IF
     127
    95128
    96129!****************************************************************************************
     
    195228!
    196229  SUBROUTINE calc_coef_qbs(knon, Kcoef, gama, delp, X, Ccoef, Dcoef, Acoef, Bcoef)
     230!$gpum horizontal knon
    197231!
    198232! Calculate the coefficients C and D in : X(k) = C(k) + D(k)*X(k-1)
    199233! where X is QQBS, and k the vertical level k=1,klev
    200234USE yomcst_mod_h
     235USE dimphy, ONLY : klev
     236
    201237! Input arguments
    202238!****************************************************************************************
     
    266302       Kcoef_qbs_in, gama_qbs_in, &
    267303       flux_qbs, d_qbs)
     304!$gpum horizontal knon
    268305!
    269306! This routine calculates the flux and tendency of the specific content of blowing snow qbs
     
    274311USE yomcst_mod_h
    275312USE compbl_mod_h
     313USE dimphy, ONLY : klev
     314
    276315! Input arguments
    277316!****************************************************************************************
     
    302341    REAL :: ygamaqbs(1:knon,2:klev)
    303342
    304     LOGICAL, SAVE                            :: last=.FALSE.
    305 !$OMP THREADPRIVATE(last)
    306343    REAL, DIMENSION(knon,klev)               :: qbs_new
    307344    REAL, DIMENSION(knon)                    :: psref         
     
    407444      ENDDO
    408445    ENDDO
    409 !****************************************************************************************
    410 ! Some deallocations
    411 !
    412 !****************************************************************************************
    413     IF (last) THEN
    414        DEALLOCATE(Ccoef_QBS, Dcoef_QBS,stat=ierr)   
    415        IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Ccoef_QBS, Dcoef_QBS, ierr=', ierr
    416        DEALLOCATE(Acoef_QBS, Bcoef_QBS,stat=ierr)   
    417        IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Acoef_QBS, Bcoef_QBS, ierr=', ierr
    418        DEALLOCATE(gamaqbs,stat=ierr)
    419        IF ( ierr /= 0 )  PRINT*,' pb in dealllocate gamaqbs, ierr=', ierr
    420        DEALLOCATE(Kcoefqbs,stat=ierr)
    421        IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Kcoefqbs, ierr=', ierr
    422     END IF
     446
    423447  END SUBROUTINE climb_qbs_up
    424448!
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90

    r5879 r5880  
    111111    USE climb_hq_mod, ONLY : climb_hq_init
    112112    USE climb_wind_mod, ONLY : climb_wind_init
     113    USE climb_qbs_mod, ONLY : climb_qbs_init
     114
    113115    IMPLICIT NONE
    114116 
     
    267269    CALL climb_hq_init
    268270    CALL climb_wind_init
     271    CALL climb_qbs_init
    269272
    270273  END SUBROUTINE pbl_surface_init
Note: See TracChangeset for help on using the changeset viewer.