Ignore:
Timestamp:
Dec 17, 2025, 7:33:39 PM (3 months 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/inlandsis/surf_inlandsis_mod.f90

    r5296 r5942  
    6565        LOGICAL, INTENT(IN) :: lafin     ! true if last step
    6666
    67         INTEGER, DIMENSION(klon), INTENT(IN) :: ikl2i     ! Index Decompression
     67        INTEGER, DIMENSION(knon), INTENT(IN) :: ikl2i     ! Index Decompression
    6868        REAL, DIMENSION(klon), INTENT(IN) :: rlon, rlat
    69         REAL, DIMENSION(klon), INTENT(IN) :: rmu0      ! cos sol. zenith angle
    70         REAL, DIMENSION(klon), INTENT(IN) :: swdown    !
    71         REAL, DIMENSION(klon), INTENT(IN) :: lwdown    !
    72         REAL, DIMENSION(klon), INTENT(IN) :: albedo_old
    73         REAL, DIMENSION(klon), INTENT(IN) :: pexner    ! Exner potential
    74         REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow
    75         REAL, DIMENSION(klon), INTENT(IN) :: zsl_height, wind_velo
    76         REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum, ps, p1lay
    77         REAL, DIMENSION(klon), INTENT(IN) :: dens_air, tsurf
    78         REAL, DIMENSION(klon), INTENT(IN) :: rugos
    79         REAL, DIMENSION(klon), INTENT(IN) :: snow_cont_air
    80         REAL, DIMENSION(klon), INTENT(IN) :: alb_soil, slope
    81         REAL, DIMENSION(klon), INTENT(IN) :: alt       ! surface elevation
    82         REAL, DIMENSION(klon), INTENT(IN) :: cloudf
    83         REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ
    84         REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ
    85         REAL, DIMENSION(klon), INTENT(IN) :: cdragm, cdragh
    86         REAL, DIMENSION(klon), INTENT(IN) :: ustar   ! friction velocity
     69        REAL, DIMENSION(knon), INTENT(IN) :: rmu0      ! cos sol. zenith angle
     70        REAL, DIMENSION(knon), INTENT(IN) :: swdown    !
     71        REAL, DIMENSION(knon), INTENT(IN) :: lwdown    !
     72        REAL, DIMENSION(knon), INTENT(IN) :: albedo_old
     73        REAL, DIMENSION(knon), INTENT(IN) :: pexner    ! Exner potential
     74        REAL, DIMENSION(knon), INTENT(IN) :: precip_rain, precip_snow
     75        REAL, DIMENSION(knon), INTENT(IN) :: zsl_height, wind_velo
     76        REAL, DIMENSION(knon), INTENT(IN) :: temp_air, spechum, ps, p1lay
     77        REAL, DIMENSION(knon), INTENT(IN) :: dens_air, tsurf
     78        REAL, DIMENSION(knon), INTENT(IN) :: rugos
     79        REAL, DIMENSION(knon), INTENT(IN) :: snow_cont_air
     80        REAL, DIMENSION(knon), INTENT(IN) :: alb_soil, slope
     81        REAL, DIMENSION(knon), INTENT(IN) :: alt       ! surface elevation
     82        REAL, DIMENSION(knon), INTENT(IN) :: cloudf
     83        REAL, DIMENSION(knon), INTENT(IN) :: AcoefH, AcoefQ
     84        REAL, DIMENSION(knon), INTENT(IN) :: BcoefH, BcoefQ
     85        REAL, DIMENSION(knon), INTENT(IN) :: cdragm, cdragh
     86        REAL, DIMENSION(knon), INTENT(IN) :: ustar   ! friction velocity
    8787
    8888        ! Variables exchanged between LMDZ and SISVAT
    89         REAL, DIMENSION(klon), INTENT(IN) :: radsol    ! Surface absorbed rad.
    90         REAL, DIMENSION(klon), INTENT(INOUT) :: snow      ! Tot snow mass [kg/m2]
    91         REAL, DIMENSION(klon), INTENT(INOUT) :: zfra      ! snwo surface fraction [0-1]
    92         REAL, DIMENSION(klon, nsoilmx), INTENT(OUT) :: tsoil ! Soil Temperature
    93         REAL, DIMENSION(klon), INTENT(OUT) :: qsol      ! Soil Water Content
    94         REAL, DIMENSION(klon), INTENT(INOUT) :: z0m    ! Momentum Roughn Lgt
    95         REAL, DIMENSION(klon), INTENT(INOUT) :: z0h    ! Momentum Roughn Lgt
     89        REAL, DIMENSION(knon), INTENT(IN) :: radsol    ! Surface absorbed rad.
     90        REAL, DIMENSION(knon), INTENT(INOUT) :: snow      ! Tot snow mass [kg/m2]
     91        REAL, DIMENSION(knon), INTENT(INOUT) :: zfra      ! snwo surface fraction [0-1]
     92        REAL, DIMENSION(knon, nsoilmx), INTENT(OUT) :: tsoil ! Soil Temperature
     93        REAL, DIMENSION(knon), INTENT(OUT) :: qsol      ! Soil Water Content
     94        REAL, DIMENSION(knon), INTENT(INOUT) :: z0m    ! Momentum Roughn Lgt
     95        REAL, DIMENSION(knon), INTENT(INOUT) :: z0h    ! Momentum Roughn Lgt
    9696
    9797        ! Output Variables for LMDZ
    98         REAL, DIMENSION(klon), INTENT(OUT) :: alb1      ! Albedo SW
    99         REAL, DIMENSION(klon), INTENT(OUT) :: alb2, alb3 ! Albedo NIR and LW
    100         REAL, DIMENSION(klon,6), INTENT(OUT) :: alb6 ! 6 band Albedo
    101         REAL, DIMENSION(klon), INTENT(OUT) :: emis_new  ! Surface Emissivity
    102         REAL, DIMENSION(klon), INTENT(OUT) :: runoff_lic ! Runoff
    103         REAL, DIMENSION(klon), INTENT(OUT) :: ffonte    ! enthalpy flux due to surface melting
    104         REAL, DIMENSION(klon), INTENT(OUT) :: fqfonte   ! water flux due to surface melting
    105         REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s   ! d/dT sens. ht flux
    106         REAL, DIMENSION(klon), INTENT(OUT) :: dflux_l   ! d/dT latent ht flux
    107         REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens  ! Sensible ht flux
    108         REAL, DIMENSION(klon), INTENT(OUT) :: fluxlat   ! Latent heat flux
    109         REAL, DIMENSION(klon), INTENT(OUT) :: evap      ! Evaporation
    110         REAL, DIMENSION(klon), INTENT(OUT) :: erod      ! Erosion of surface snow (flux)
    111         REAL, DIMENSION(klon), INTENT(OUT) :: agesno    ! Snow age (top layer)
    112         REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new ! Surface Temperature
    113         REAL, DIMENSION(klon), INTENT(OUT) :: qsurf     ! Surface Humidity
     98        REAL, DIMENSION(knon), INTENT(OUT) :: alb1      ! Albedo SW
     99        REAL, DIMENSION(knon), INTENT(OUT) :: alb2, alb3 ! Albedo NIR and LW
     100        REAL, DIMENSION(knon,6), INTENT(OUT) :: alb6 ! 6 band Albedo
     101        REAL, DIMENSION(knon), INTENT(OUT) :: emis_new  ! Surface Emissivity
     102        REAL, DIMENSION(knon), INTENT(OUT) :: runoff_lic ! Runoff
     103        REAL, DIMENSION(knon), INTENT(OUT) :: ffonte    ! enthalpy flux due to surface melting
     104        REAL, DIMENSION(knon), INTENT(OUT) :: fqfonte   ! water flux due to surface melting
     105        REAL, DIMENSION(knon), INTENT(OUT) :: dflux_s   ! d/dT sens. ht flux
     106        REAL, DIMENSION(knon), INTENT(OUT) :: dflux_l   ! d/dT latent ht flux
     107        REAL, DIMENSION(knon), INTENT(OUT) :: fluxsens  ! Sensible ht flux
     108        REAL, DIMENSION(knon), INTENT(OUT) :: fluxlat   ! Latent heat flux
     109        REAL, DIMENSION(knon), INTENT(OUT) :: evap      ! Evaporation
     110        REAL, DIMENSION(knon), INTENT(OUT) :: erod      ! Erosion of surface snow (flux)
     111        REAL, DIMENSION(knon), INTENT(OUT) :: agesno    ! Snow age (top layer)
     112        REAL, DIMENSION(knon), INTENT(OUT) :: tsurf_new ! Surface Temperature
     113        REAL, DIMENSION(knon), INTENT(OUT) :: qsurf     ! Surface Humidity
    114114
    115115        ! Specific INLANDIS outputs
    116         REAL, DIMENSION(klon), INTENT(OUT) :: qsnow     ! Total H2O snow[kg/m2]
    117         REAL, DIMENSION(klon), INTENT(OUT) :: snowhgt   ! Snow height (m)
    118         REAL, DIMENSION(klon), INTENT(OUT) :: to_ice    ! Snow passed to ice
    119         REAL, DIMENSION(klon), INTENT(OUT) :: sissnow   ! Snow in model (kg/m2)
     116        REAL, DIMENSION(knon), INTENT(OUT) :: qsnow     ! Total H2O snow[kg/m2]
     117        REAL, DIMENSION(knon), INTENT(OUT) :: snowhgt   ! Snow height (m)
     118        REAL, DIMENSION(knon), INTENT(OUT) :: to_ice    ! Snow passed to ice
     119        REAL, DIMENSION(knon), INTENT(OUT) :: sissnow   ! Snow in model (kg/m2)
    120120
    121121        ! +--Internal  Variables
     
    485485            INQUIRE(FILE = "startsis.nc", EXIST = file_exists)
    486486            IF (file_exists) THEN
    487                 CALL sisvatetat0("startsis.nc", ikl2i)
     487                CALL sisvatetat0("startsis.nc", knon, ikl2i)
    488488            END IF
    489489
     
    732732        IF (lafin) THEN
    733733            fichnom = "restartsis.nc"
    734             CALL sisvatredem("restartsis.nc", ikl2i, rlon, rlat)
     734            CALL sisvatredem("restartsis.nc", knon, ikl2i, rlon, rlat)
    735735
    736736            IF (ok_outfor) THEN
     
    10271027    !***************************************************************************
    10281028
    1029     SUBROUTINE sisvatetat0 (fichnom, ikl2i)
     1029    SUBROUTINE sisvatetat0 (fichnom, knon, ikl2i)
    10301030        USE clesphys_mod_h
    10311031        USE dimphy
     
    10481048
    10491049        CHARACTER(LEN = *) :: fichnom
    1050 
    1051         INTEGER, DIMENSION(klon), INTENT(IN) :: ikl2i
     1050        INTEGER, INTENT(IN) :: knon
     1051        INTEGER, DIMENSION(knon), INTENT(IN) :: ikl2i
    10521052        REAL, DIMENSION(klon) :: rlon
    10531053        REAL, DIMENSION(klon) :: rlat
     
    11911191        ! Compress restart file variables for SISVAT
    11921192
    1193         DO  ikl = 1, klon
     1193        DO  ikl = 1, knon
    11941194            i = ikl2i(ikl)
    11951195            IF (i > 0) THEN
     
    12561256
    12571257    !======================================================================
    1258     SUBROUTINE sisvatredem (fichnom, ikl2i, rlon, rlat)
     1258    SUBROUTINE sisvatredem (fichnom, knon, ikl2i, rlon, rlat)
    12591259
    12601260
     
    12811281
    12821282        CHARACTER(LEN = *) :: fichnom
    1283         INTEGER, DIMENSION(klon), INTENT(IN) :: ikl2i
     1283        INTEGER, INTENT(IN) :: knon
     1284        INTEGER, DIMENSION(knon), INTENT(IN) :: ikl2i
    12841285        REAL, DIMENSION(klon), INTENT(IN) :: rlon
    12851286        REAL, DIMENSION(klon), INTENT(IN) :: rlat
     
    13321333        ! Uncompress SISVAT output variables for storage
    13331334
    1334         DO  ikl = 1, klon
     1335        DO  ikl = 1, knon
    13351336            i = ikl2i(ikl)
    13361337            IF (i > 0) THEN
Note: See TracChangeset for help on using the changeset viewer.