Ignore:
Timestamp:
Dec 17, 2025, 7:33:39 PM (2 weeks ago)
Author:
yann meurdesoif
Message:

Separate pbl_surface into 3 subroutines for GPU port

pbl_surface_uncompress_pre : prepare computation for sub subsurface before compressing
pbl_surface_subsrf : each sub-surface is called one after other (horizontal = knon)
pbl_surface_uncompress_post : sub-surface are uncompressed, computation is done on whole domain (horizontal = klon)

pbl_surface_main becomes the driver, calling pbl_surface_uncompress_pre, and then looping under sub-surface (and calling pbl_surface_subsrf) and then calling pbl_surface_uncompress_post.

merge of commit r5868

YM

File:
1 edited

Legend:

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

    r5301 r5942  
    318318                           n2mout)
    319319!
     320      USE indice_sol_mod, ONLY : nbsrf
    320321      USE yomcst_mod_h
    321322      USE ioipsl_getin_p_mod, ONLY : getin_p
    322323      USE yoethf_mod_h
    323324      USE flux_arp_mod_h
     325      USE lmdz_checksum
    324326      IMPLICIT NONE
    325327!-------------------------------------------------------------------------
     
    370372      REAL, dimension(klon), intent(out) :: t_2m, q_2m, ustar
    371373      REAL, dimension(klon), intent(out) :: u_10m, t_10m, q_10m
    372       INTEGER, dimension(klon, 6), intent(out) :: n2mout
     374      INTEGER, dimension(klon, nbsrf, 6), intent(out) :: n2mout
    373375!
    374376      REAL, dimension(klon) :: u_2m
     
    431433      INTEGER, dimension(klon, 6) :: n10mout
    432434
     435      CALL checksum("u1", u1)
     436      CALL checksum("v1", v1)
     437      CALL checksum("t1", t1)
     438      CALL checksum("q1", q1)
     439      CALL checksum("z1", z1)
     440      CALL checksum("ts1", ts1)
     441      CALL checksum("qsurf", qsurf)
     442      CALL checksum("z0m", z0m)
     443      CALL checksum("z0h", z0h)
     444      CALL checksum("psol", psol)
     445      CALL checksum("pat1", pat1)
     446      CALL checksum("t_2m", t_2m)
     447      CALL checksum("q_2m", q_2m)
     448      CALL checksum("t_10m", t_10m)
     449      CALL checksum("q_10m", q_10m)
     450      CALL checksum("u_10m", u_10m)
     451      CALL checksum("ustar", ustar)
     452      CALL checksum("s_pblh", s_pblh)
     453      CALL checksum("prain", prain)
     454      CALL checksum("tsol", tsol)
     455
    433456!-------------------------------------------------------------------------
    434457      CEPDUE=0.1
     
    439462!          [tsurf, temp], [qsurf, q1] ou [0, speed]
    440463!
    441       n2mout(:,:)=0
    442       n10mout(:,:)=0
     464      n2mout(:, nsrf, :)=0
     465      n10mout(:, :)=0
    443466     
    444467      DO i=1, knon
     
    503526!
    504527         IF(ok_t2m_toosmall(i).OR.ok_t2m_toobig(i)) THEN
    505              n2mout(i,1)=n2mout(i,1)+1
     528             n2mout(i, nsrf, 1)=n2mout(i, nsrf, 1)+1
    506529         ENDIF
    507530         IF(ok_q2m_toosmall(i).OR.ok_q2m_toobig(i)) THEN
    508              n2mout(i,3)=n2mout(i,3)+1
     531             n2mout(i, nsrf, 3)=n2mout(i, nsrf, 3)+1
    509532         ENDIF
    510533         IF(ok_u2m_toobig(i)) THEN
    511              n2mout(i,5)=n2mout(i,5)+1
     534             n2mout(i, nsrf, 5)=n2mout(i, nsrf, 5)+1
    512535         ENDIF
    513536!
     
    567590!
    568591          IF(ok_t2m_toosmall(i).OR.ok_t2m_toobig(i)) THEN
    569               n2mout(i,2)=n2mout(i,2)+1
     592              n2mout(i, nsrf, 2)=n2mout(i, nsrf, 2)+1
    570593          ENDIF
    571594          IF(ok_q2m_toosmall(i).OR.ok_q2m_toobig(i)) THEN
    572               n2mout(i,4)=n2mout(i,4)+1
     595              n2mout(i, nsrf, 4)=n2mout(i, nsrf, 4)+1
    573596          ENDIF
    574597          IF(ok_u2m_toobig(i)) THEN
    575               n2mout(i,6)=n2mout(i,6)+1
     598              n2mout(i, nsrf, 6)=n2mout(i, nsrf, 6)+1
    576599          ENDIF
    577600!
     
    750773      ENDDO
    751774!
     775      CALL checksum("u1", u1)
     776      CALL checksum("v1", v1)
     777      CALL checksum("t1", t1)
     778      CALL checksum("q1", q1)
     779      CALL checksum("z1", z1)
     780      CALL checksum("ts1", ts1)
     781      CALL checksum("qsurf", qsurf)
     782      CALL checksum("z0m", z0m)
     783      CALL checksum("z0h", z0h)
     784      CALL checksum("psol", psol)
     785      CALL checksum("pat1", pat1)
     786      CALL checksum("t_2m", t_2m)
     787      CALL checksum("q_2m", q_2m)
     788      CALL checksum("t_10m", t_10m)
     789      CALL checksum("q_10m", q_10m)
     790      CALL checksum("u_10m", u_10m)
     791      CALL checksum("ustar", ustar)
     792      CALL checksum("s_pblh", s_pblh)
     793      CALL checksum("prain", prain)
     794      CALL checksum("tsol", tsol)
    752795      RETURN
    753796      END subroutine stdlevvarn
Note: See TracChangeset for help on using the changeset viewer.