Ignore:
Timestamp:
Dec 17, 2025, 7:33:39 PM (4 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/surf_land_mod.F90

    r5927 r5942  
    2626       ,xtprecip_rain, xtprecip_snow,xtspechum, &
    2727       xtsnow, xtsol,xtevap,h1, &
    28        runoff_diag,xtrunoff_diag,Rland_ice, &
    29        xtriverflow, xtcoastalflow, Rsol &
     28       runoff_diag,xtrunoff_diag,Rland_ice &
    3029#endif               
    3130               )
     
    8786!****************************************************************************************
    8887    INTEGER, INTENT(IN)                     :: itime, jour, knon
    89     INTEGER, DIMENSION(klon), INTENT(IN)    :: knindex
     88    INTEGER, DIMENSION(knon), INTENT(IN)    :: knindex
    9089    REAL, INTENT(IN)                        :: date0
    9190    REAL, DIMENSION(klon), INTENT(IN)       :: rlon, rlat
    92     REAL, DIMENSION(klon), INTENT(IN)       :: yrmu0  ! cosine of solar zenith angle
     91    REAL, DIMENSION(knon), INTENT(IN)       :: yrmu0  ! cosine of solar zenith angle
    9392    LOGICAL, INTENT(IN)                     :: debut, lafin
    9493    REAL, INTENT(IN)                        :: dtime
    95     REAL, DIMENSION(klon), INTENT(IN)       :: ccanopy
    96     REAL, DIMENSION(klon), INTENT(IN)       :: swnet, lwnet
    97     REAL, DIMENSION(klon), INTENT(IN)       :: albedo  ! albedo for whole short-wave interval
    98     REAL, DIMENSION(klon), INTENT(IN)       :: tsurf
    99     REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
    100     REAL, DIMENSION(klon), INTENT(IN)       :: cdragh, cdragm
    101     REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
    102     REAL, DIMENSION(klon), INTENT(IN)       :: temp_air, spechum
    103     REAL, DIMENSION(klon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
    104     REAL, DIMENSION(klon), INTENT(IN)       :: AcoefU, AcoefV, BcoefU, BcoefV
    105     REAL, DIMENSION(klon), INTENT(IN)       :: pref   ! pressure reference
    106     REAL, DIMENSION(klon), INTENT(IN)       :: u1, v1, gustiness
    107     REAL, DIMENSION(klon), INTENT(IN)       :: rugoro
     94    REAL, DIMENSION(knon), INTENT(IN)       :: ccanopy
     95    REAL, DIMENSION(knon), INTENT(IN)       :: swnet, lwnet
     96    REAL, DIMENSION(knon), INTENT(IN)       :: albedo  ! albedo for whole short-wave interval
     97    REAL, DIMENSION(knon), INTENT(IN)       :: tsurf
     98    REAL, DIMENSION(knon), INTENT(IN)       :: p1lay
     99    REAL, DIMENSION(knon), INTENT(IN)       :: cdragh, cdragm
     100    REAL, DIMENSION(knon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
     101    REAL, DIMENSION(knon), INTENT(IN)       :: temp_air, spechum
     102    REAL, DIMENSION(knon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
     103    REAL, DIMENSION(knon), INTENT(IN)       :: AcoefU, AcoefV, BcoefU, BcoefV
     104    REAL, DIMENSION(knon), INTENT(IN)       :: pref   ! pressure reference
     105    REAL, DIMENSION(knon), INTENT(IN)       :: u1, v1, gustiness
     106    REAL, DIMENSION(knon), INTENT(IN)       :: rugoro
    108107    REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf
    109     REAL, DIMENSION(klon), INTENT(IN)       :: lwdown_m  ! downwelling longwave radiation at mean surface
     108    REAL, DIMENSION(knon), INTENT(IN)       :: lwdown_m  ! downwelling longwave radiation at mean surface
    110109                                                         ! corresponds to previous sollwdown
    111     REAL, DIMENSION(klon), INTENT(IN)       :: q2m, t2m
     110    REAL, DIMENSION(knon), INTENT(IN)       :: q2m, t2m
    112111    REAL, DIMENSION(klon, nbtersrf), INTENT(IN) :: tsurf_tersrf
    113112#ifdef ISO
    114     REAL, DIMENSION(ntiso,klon), INTENT(IN)       :: xtprecip_rain, xtprecip_snow
    115     REAL, DIMENSION(ntiso,klon), INTENT(IN)       :: xtspechum
     113    REAL, DIMENSION(ntiso,knon), INTENT(IN)       :: xtprecip_rain, xtprecip_snow
     114    REAL, DIMENSION(ntiso,knon), INTENT(IN)       :: xtspechum
    116115#endif
    117116! In/Output variables
    118117!****************************************************************************************
    119     REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
    120     REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
    121     REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
    122     REAL, DIMENSION(klon), INTENT(INOUT)          :: zlev
     118    REAL, DIMENSION(knon), INTENT(INOUT)          :: snow, qsol
     119    REAL, DIMENSION(knon), INTENT(INOUT)          :: agesno
     120    REAL, DIMENSION(knon, nsoilmx), INTENT(INOUT) :: tsoil
     121    REAL, DIMENSION(knon), INTENT(INOUT)          :: zlev
    123122    REAL, DIMENSION(klon, nsoilmx, nbtersrf), INTENT(INOUT) :: tsoil_tersrf
    124123#ifdef ISO
    125     REAL, DIMENSION(niso,klon), INTENT(INOUT)    :: xtsnow, xtsol
    126     REAL, DIMENSION(niso,klon), INTENT(INOUT)    :: Rsol
     124    REAL, DIMENSION(niso,knon), INTENT(INOUT)    :: xtsnow, xtsol
    127125#endif
    128126
    129127! Output variables
    130128!****************************************************************************************
    131     REAL, DIMENSION(klon), INTENT(OUT)       :: z0m, z0h
     129    REAL, DIMENSION(knon), INTENT(OUT)       :: z0m, z0h
    132130!albedo SB >>>
    133131!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new ! albdeo for shortwave interval 1(visible)
    134132!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new ! albedo for shortwave interval 2(near infrared)
    135133    REAL, DIMENSION(6), INTENT(IN) :: SFRWL
    136     REAL, DIMENSION(klon,nsw), INTENT(OUT)       :: alb_dir_new,alb_dif_new
     134    REAL, DIMENSION(knon,nsw), INTENT(OUT)       :: alb_dir_new,alb_dif_new
    137135!albedo SB <<<
    138     REAL, DIMENSION(klon), INTENT(OUT)       :: evap
    139     REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
    140     REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    141     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    142     REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    143     REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1  ! flux for U and V at first model level
    144     REAL, DIMENSION(klon,nvm_lmdz), INTENT(OUT) :: veget,lai
    145     REAL, DIMENSION(klon,nvm_lmdz), INTENT(OUT) :: height
     136    REAL, DIMENSION(knon), INTENT(OUT)       :: evap
     137    REAL, DIMENSION(knon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
     138    REAL, DIMENSION(knon), INTENT(OUT)       :: qsurf
     139    REAL, DIMENSION(knon), INTENT(OUT)       :: tsurf_new
     140    REAL, DIMENSION(knon), INTENT(OUT)       :: dflux_s, dflux_l     
     141    REAL, DIMENSION(knon), INTENT(OUT)       :: flux_u1, flux_v1  ! flux for U and V at first model level
     142    REAL, DIMENSION(knon,nvm_lmdz), INTENT(OUT) :: veget,lai
     143    REAL, DIMENSION(knon,nvm_lmdz), INTENT(OUT) :: height
    146144! AM
    147145    REAL, DIMENSION(klon, nbtersrf), INTENT(OUT) :: tsurf_new_tersrf
     
    154152    REAL, DIMENSION(klon, nbtersrf), INTENT(OUT) :: fluxlat_tersrf
    155153#ifdef ISO
    156     REAL, DIMENSION(ntiso,klon), INTENT(OUT)     :: xtevap
    157     REAL, DIMENSION(klon), INTENT(OUT)           :: h1
    158     REAL, DIMENSION(klon), INTENT(OUT)           :: runoff_diag
    159     REAL, DIMENSION(niso,klon), INTENT(OUT)      :: xtrunoff_diag
    160     REAL, DIMENSION(niso,klon), INTENT(IN)       :: Rland_ice
    161     REAL, DIMENSION(niso,klon),  INTENT(OUT)     :: xtriverflow
    162     REAL, DIMENSION(niso,klon),  INTENT(OUT)     :: xtcoastalflow
     154    REAL, DIMENSION(ntiso,knon), INTENT(OUT)      :: xtevap
     155    REAL, DIMENSION(knon), INTENT(OUT)      :: h1
     156    REAL, DIMENSION(niso,knon), INTENT(OUT)      :: xtrunoff_diag
     157    REAL, DIMENSION(knon), INTENT(OUT)      :: runoff_diag
     158    REAL, DIMENSION(niso,knon), INTENT(IN)        :: Rland_ice
    163159#endif
    164160
    165161! Local variables
    166162!****************************************************************************************
    167     REAL, DIMENSION(klon) :: p1lay_tmp
    168     REAL, DIMENSION(klon) :: pref_tmp
    169     REAL, DIMENSION(klon) :: swdown     ! downwelling shortwave radiation at land surface
    170     REAL, DIMENSION(klon) :: epot_air           ! potential air temperature
    171     REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    172     REAL, DIMENSION(klon) :: u0, v0     ! surface speed
    173     REAL, DIMENSION(klon) :: precip_totsnow     ! total solid precip
     163    REAL, DIMENSION(knon) :: p1lay_tmp
     164    REAL, DIMENSION(knon) :: pref_tmp
     165    REAL, DIMENSION(knon) :: swdown     ! downwelling shortwave radiation at land surface
     166    REAL, DIMENSION(knon) :: epot_air           ! potential air temperature
     167    REAL, DIMENSION(knon) :: tsol_rad, emis_new ! output from interfsol not used
     168    REAL, DIMENSION(knon) :: u0, v0     ! surface speed
     169    REAL, DIMENSION(knon) :: precip_totsnow     ! total solid precip
    174170    INTEGER               :: i,j
    175171    CHARACTER (len = 20)  :: modname = 'surf_land'
     
    182178#ifdef ISO       
    183179      real, parameter :: t_coup = 273.15
    184       real, dimension(klon) :: fqfonte_diag
    185       real, dimension(klon) :: snow_evap_diag
    186       real, dimension(klon) :: fqcalving_diag
     180      real, dimension(knon) :: fqfonte_diag
     181      real, dimension(knon) :: snow_evap_diag
     182      real, dimension(knon) :: fqcalving_diag
    187183      integer :: ixt
    188184#endif
     
    249245       END DO
    250246
    251 !!SN LMDZORISO
    252 !#ifdef ISO
    253 !      CALL abort_physic('surf_land_mod 220','isos pas prevus dans orchidee',1)
    254 !#endif
     247#ifdef ISO
     248      CALL abort_physic('surf_land_mod 220','isos pas prevus dans orchidee',1)
     249#endif
     250
    255251       ! temporary for keeping same results using lwdown_m instead of lwdown
    256252       CALL surf_land_orchidee(itime, dtime, date0, knon, &
     
    265261            emis_new, z0m, z0h, qsurf, &
    266262            veget, lai, height &
    267 #ifdef ISO
    268             ,xtprecip_rain, xtprecip_snow, &
    269              xtriverflow, xtcoastalflow, xtevap, Rsol &
    270 #endif
     263!#ifdef ISO
     264!            , xtprecip_rain, xtprecip_snow, xtspechum, xtevap &
     265!#endif
    271266            )                 
    272267
     
    408403    INTEGER, INTENT(IN)                       :: knon         
    409404    REAL, DIMENSION(klon), INTENT(IN)         :: rlon, rlat
    410     REAL, DIMENSION(klon), INTENT(INOUT)      :: qsol
    411     INTEGER, DIMENSION(klon), INTENT(IN)      :: knindex   
    412     REAL, DIMENSION(niso,klon), INTENT(INOUT) :: xtsol
     405    REAL, DIMENSION(knon), INTENT(INOUT)      :: qsol
     406    INTEGER, DIMENSION(knon), INTENT(IN)      :: knindex   
     407    REAL, DIMENSION(niso,knon), INTENT(INOUT) :: xtsol
    413408    REAL :: lat_min_nudge_qsol,lat_max_nudge_qsol
    414409    REAL :: lon_min_nudge_qsol,lon_max_nudge_qsol
Note: See TracChangeset for help on using the changeset viewer.