Changeset 5480 for LMDZ6


Ignore:
Timestamp:
Jan 16, 2025, 6:32:38 PM (7 hours ago)
Author:
yann meurdesoif
Message:

For GPU porting :

  • add wrapper for source to source tools
  • Separate initialization phase of lscp_old (firstilp), SAVE variable in compute subroutine cannot be managed properly.

YM

Location:
LMDZ6/trunk/libf/phylmd
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_old.f90

    r5285 r5480  
    33!
    44MODULE lmdz_lscp_old
     5  PRIVATE
     6
     7  INTEGER, PARAMETER :: ninter=5 ! sous-intervals pour la precipitation
     8  LOGICAL, PARAMETER :: cpartiel=.TRUE. ! condensation partielle
     9  REAL, PARAMETER :: t_coup=234.0
     10  REAL, PARAMETER :: DDT0=.01
     11  REAL, PARAMETER :: ztfondue=278.15
     12
     13  LOGICAL, SAVE :: appel1er=.TRUE.
     14  !$OMP THREADPRIVATE(appel1er)
     15 
     16  PUBLIC fisrtilp_first, fisrtilp
     17
    518CONTAINS
     19
     20! firstilp first call part
     21SUBROUTINE fisrtilp_first(klon, klev, dtime, pfrac_nucl, pfrac_1nucl, pfrac_impa)
     22USE lmdz_lscp_ini, ONLY: prt_level, lunout
     23IMPLICIT NONE
     24  REAL, INTENT(IN)     :: dtime  ! intervalle du temps (s)
     25  INTEGER, INTENT(IN)  :: klon, klev
     26  INTEGER :: i, k
     27
     28  !AA
     29  ! Coeffients de fraction lessivee : pour OFF-LINE
     30  !
     31  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: pfrac_nucl
     32  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: pfrac_1nucl
     33  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: pfrac_impa
     34
     35  IF (appel1er) THEN
     36    WRITE(lunout,*) 'fisrtilp, ninter:', ninter
     37    WRITE(lunout,*) 'fisrtilp, cpartiel:', cpartiel
     38    WRITE(lunout,*) 'FISRTILP VERSION LUDO'
     39     
     40    IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
     41     WRITE(lunout,*) 'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
     42     WRITE(lunout,*) 'Je prefere un sous-intervalle de 6 minutes'
     43     !         CALL abort
     44    ENDIF
     45    !
     46    !cdir collapse
     47    DO k = 1, klev
     48      DO i = 1, klon
     49        pfrac_nucl(i,k)=1.
     50        pfrac_1nucl(i,k)=1.
     51        pfrac_impa(i,k)=1.
     52      ENDDO
     53    ENDDO
     54    appel1er = .FALSE.
     55  ENDIF
     56 
     57END SUBROUTINE fisrtilp_first
     58
    659SUBROUTINE fisrtilp(klon,klev,dtime,paprs,pplay,t,q,ptconv,ratqs,sigma_qtherm, &
    760     d_t, d_q, d_ql, d_qi, rneb,rneblsvol,radliq, rain, snow,          &
     
    117170  REAL :: smallestreal
    118171
    119   INTEGER, PARAMETER :: ninter=5 ! sous-intervals pour la precipitation
    120   LOGICAL, PARAMETER :: cpartiel=.TRUE. ! condensation partielle
    121   REAL, PARAMETER :: t_coup=234.0
    122   REAL, PARAMETER :: DDT0=.01
    123   REAL, PARAMETER :: ztfondue=278.15
    124   ! --------------------------------------------------------------------------------
     172 ! --------------------------------------------------------------------------------
    125173  !
    126174  ! Variables locales:
     
    142190
    143191  REAL, DIMENSION(klon) :: zpdf_sig,zpdf_k,zpdf_delta, Zpdf_a,zpdf_b,zpdf_e1,zpdf_e2, qcloud
    144   REAL :: erf   
    145192 
    146193  REAL :: zqev, zqevt, zqev0,zqevi, zqevti, zdelq
     
    165212  REAL, DIMENSION(klon) :: zmqc
    166213  !
    167   LOGICAL, SAVE :: appel1er=.TRUE.
    168   !$OMP THREADPRIVATE(appel1er)
    169214  !
    170215! iflag_oldbug_fisrtilp=0 enleve le BUG par JYG : tglace_min -> tglace_max
     
    196241  REAL, DIMENSION(klon) :: zlh_solid
    197242  REAL :: zm_solid
     243  REAL :: tmp_var1d(klon) ! temporary variable for call site
    198244
    199245
     
    218264
    219265  if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM'
    220   IF (appel1er) THEN
    221      WRITE(lunout,*) 'fisrtilp, ninter:', ninter
    222      WRITE(lunout,*) 'fisrtilp, cpartiel:', cpartiel
    223      WRITE(lunout,*) 'FISRTILP VERSION LUDO'
    224      
    225      IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
    226         WRITE(lunout,*) 'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
    227         WRITE(lunout,*) 'Je prefere un sous-intervalle de 6 minutes'
    228         !         CALL abort
    229      ENDIF
    230      appel1er = .FALSE.
    231      !
    232      !cdir collapse
    233      DO k = 1, klev
    234         DO i = 1, klon
    235            pfrac_nucl(i,k)=1.
    236            pfrac_1nucl(i,k)=1.
    237            pfrac_impa(i,k)=1.
    238            beta(i,k)=0.  !RomP initialisation
    239         ENDDO
    240      ENDDO
    241 
    242   ENDIF          !  test sur appel1er
     266
     267  beta(:,:)=0.  !RomP initialisation => ym : could be probably removed but keept by security
     268
    243269  !
    244270  !MAf Initialisation a 0 de zoliq
     
    954980                 ! --------------------------
    955981                 if (iflag_t_glace.ge.1) then
    956                  CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:))
     982                   tmp_var1d(:) = pplay(:,k)/paprs(:,1)
     983                   CALL icefrac_lsc(klon, zt(:), tmp_var1d, zfice(:))
    957984                 endif
    958985
     
    11231150     ELSE
    11241151         if (iflag_t_glace.ge.1) then
    1125             CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:))
     1152            tmp_var1d(:) = pplay(:,k)/paprs(:,1)
     1153            CALL icefrac_lsc(klon,zt(:),tmp_var1d,zfice(:))
    11261154         endif
    11271155         if (iflag_fisrtilp_qsat.lt.1) then
     
    12421270         ENDDO
    12431271       ELSE ! of IF (iflag_t_glace.EQ.0)
    1244          CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:))
     1272         tmp_var1d(:) = pplay(:,k)/paprs(:,1)
     1273         CALL icefrac_lsc(klon,zt(:), tmp_var1d, zfice(:))
    12451274!         DO i = 1, klon
    12461275!            IF (rneb(i,k).GT.0.0) THEN
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r5474 r5480  
    7777    USE lmdz_lscp, ONLY : lscp
    7878    USE lmdz_call_cloud_optics_prop, ONLY : call_cloud_optics_prop
    79     USE lmdz_lscp_old, ONLY : fisrtilp
     79    USE lmdz_lscp_old, ONLY : fisrtilp, fisrtilp_first
    8080    USE lmdz_call_blowing_snow, ONLY : call_blowing_snow_sublim_sedim
    8181    USE lmdz_wake_ini, ONLY : wake_ini
     
    374374       USE phys_output_write_spl_mod, ONLY: phys_output_write_spl
    375375       USE phytracr_spl_mod, ONLY: phytracr_spl_out_init, phytracr_spl
     376       USE s2s, ONLY : s2s_initialize
    376377    IMPLICIT NONE
    377378    !>======================================================================
     
    13461347
    13471348    IF (first) THEN
     1349       
     1350        CALL s2s_initialize     ! initialization of source to source tools
     1351       
    13481352!       CALL init_etat0_limit_unstruct
    13491353!       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    38963900
    38973901    ELSE
    3898 
     3902   
     3903    CALL fisrtilp_first(klon, klev, phys_tstep, pfrac_impa, pfrac_nucl, pfrac_1nucl)
    38993904    CALL fisrtilp(klon,klev,phys_tstep,paprs,pplay, &
    39003905         t_seri, q_seri,ptconv,ratqs,sigma_qtherm, &
Note: See TracChangeset for help on using the changeset viewer.