Ignore:
Timestamp:
Dec 4, 2025, 1:38:46 PM (3 weeks ago)
Author:
yann meurdesoif
Message:

gpu port of surf_landice

YM

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

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/fonte_neige_mod.F90

    r5889 r5908  
    237237#endif
    238238     &   )
    239 !$gpum horizontal knon
     239!$gpum horizontal knon klon
    240240    USE indice_sol_mod
    241241#ifdef ISO
     
    446446          j = knindex(i)
    447447          !--temporal filtering
    448           run_off_lic(i)   = coeff_rel*fqcalving(i) + (1.-coeff_rel)*run_off_lic_0(j)
    449           run_off_lic_0(j) = run_off_lic(i)
     448          run_off_lic(j)   = coeff_rel*fqcalving(i) + (1.-coeff_rel)*run_off_lic_0(j)
     449          run_off_lic_0(j) = run_off_lic(j)
    450450          !--add melting snow and liquid precip to runoff of ice cap
    451           run_off_lic(i)   = run_off_lic(i) + fqfonte(i) + precip_rain(i)
     451          run_off_lic(j)   = run_off_lic(j) + fqfonte(i) + precip_rain(i)
    452452       ENDDO
    453453    ENDIF
     
    455455#ifdef ISO
    456456    DO i = 1, knon   
    457       run_off_lic_diag(i) = run_off_lic(i)
     457      run_off_lic_diag(i) = run_off_lic(knindex(i))
    458458    ENDDO ! DO i = 1, knon   
    459459#endif
     
    472472    IF (nisurf == is_lic) THEN
    473473    DO i = 1, knon
    474        runofflic_global(knindex(i)) = run_off_lic(i)
     474       runofflic_global(knindex(i)) = run_off_lic(knindex(i))
    475475    ENDDO
    476476    ENDIF
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90

    r5889 r5908  
    597597
    598598  END SUBROUTINE pbl_surface_newfrac
     599
     600  SUBROUTINE pbl_surface_precall
     601  USE surf_landice_mod, ONLY : surf_landice_precall
     602  IMPLICIT NONE
     603    CALL surf_landice_precall
     604  END SUBROUTINE pbl_surface_precall
     605
     606  SUBROUTINE pbl_surface_postcall
     607  USE surf_landice_mod, ONLY : surf_landice_postcall
     608  IMPLICIT NONE
     609    CALL surf_landice_postcall
     610  END SUBROUTINE pbl_surface_postcall
    599611
    600612
     
    11911203      CALL checksum("n2mout", n2mout)
    11921204      CALL checksum("n2mout_x", n2mout_x)
     1205   
     1206    CALL pbl_surface_precall
    11931207
    11941208    CALL pbl_surface_uncompress_pre( &
     
    12521266      ENDIF
    12531267    ENDDO
    1254 
     1268   
    12551269    CALL pbl_surface_subsrf( nsrf, knon, ni(1:knon),  &
    12561270       dtime,     date0,     itap,     jour,          &
     
    13441358#endif     
    13451359     &   )
     1360
     1361      CALL pbl_surface_postcall
    13461362
    13471363      IF (is_master) WRITE(lunout,*) "****************** CHECKSUM OUT ****************************"
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/surf_landice_mod.F90

    r5889 r5908  
    33 
    44  IMPLICIT NONE
     5  PRIVATE
     6
     7   REAL,SAVE :: alb_vis_sno_lic
     8  !$OMP THREADPRIVATE(alb_vis_sno_lic)
     9   REAL,SAVE :: alb_nir_sno_lic
     10  !$OMP THREADPRIVATE(alb_nir_sno_lic)
     11 
     12  LOGICAL, SAVE :: firstcall = .TRUE.
     13  !$OMP THREADPRIVATE(firstcall)
     14
     15
     16  PUBLIC :: surf_landice_init, surf_landice, surf_landice_precall, surf_landice_postcall
    517
    618CONTAINS
     
    820!****************************************************************************************
    921!
     22  SUBROUTINE surf_landice_init
     23  USE ioipsl_getin_p_mod, ONLY : getin_p
     24  IMPLICIT NONE
     25 
     26    alb_vis_sno_lic=0.77
     27    CALL getin_p('alb_vis_sno_lic',alb_vis_sno_lic)
     28    PRINT*, 'alb_vis_sno_lic',alb_vis_sno_lic
     29    alb_nir_sno_lic=0.77
     30    CALL getin_p('alb_nir_sno_lic',alb_nir_sno_lic)
     31    PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
     32
     33  END SUBROUTINE surf_landice_init
     34
     35
     36  SUBROUTINE surf_landice_precall
     37  IMPLICIT NONE
     38
     39  END SUBROUTINE surf_landice_precall
     40
     41
     42  SUBROUTINE surf_landice_postcall
     43  IMPLICIT NONE
     44    IF (firstcall) firstcall=.FALSE.
     45  END SUBROUTINE surf_landice_postcall
     46 
     47
     48
    1049  SUBROUTINE surf_landice(itime, dtime, knon, knindex, &
    1150       rlon, rlat, debut, lafin, &
     
    2968#endif               
    3069           &    )
    31 
     70!$gpum horizontal knon klon 
    3271    USE dimphy
    3372    USE geometry_mod,     ONLY : longitude,latitude
     
    5089    USE clesphys_mod_h
    5190    USE yomcst_mod_h
    52     USE ioipsl_getin_p_mod, ONLY : getin_p
    5391    USE lmdz_blowing_snow_ini, ONLY : c_esalt_bs, zeta_bs, pbst_bs, prt_bs, rhoice_bs, rhohard_bs
    5492    USE lmdz_blowing_snow_ini, ONLY : rhofresh_bs, tau_eqsalt_bs, tau_dens0_bs, tau_densmin_bs
     
    194232    LOGICAL, DIMENSION(knon) :: ok_remaining_freshsnow
    195233    REAL  :: ta1, ta2, ta3, z01, z02, z03, coefa, coefb, coefc, coefd
     234    REAl :: lon(knon), lat(knon)   ! for indexation
     235
    196236
    197237
     
    200240!FC
    201241!FC
    202    REAL,SAVE :: alb_vis_sno_lic
    203   !$OMP THREADPRIVATE(alb_vis_sno_lic)
    204    REAL,SAVE :: alb_nir_sno_lic
    205   !$OMP THREADPRIVATE(alb_nir_sno_lic)
    206   LOGICAL, SAVE :: firstcall = .TRUE.
    207   !$OMP THREADPRIVATE(firstcall)
     242
    208243
    209244
     
    223258
    224259  IF (firstcall) THEN
    225   alb_vis_sno_lic=0.77
    226   CALL getin_p('alb_vis_sno_lic',alb_vis_sno_lic)
    227            PRINT*, 'alb_vis_sno_lic',alb_vis_sno_lic
    228   alb_nir_sno_lic=0.77
    229   CALL getin_p('alb_nir_sno_lic',alb_nir_sno_lic)
    230            PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
    231  
    232   DO j=1,knon
     260 
     261    DO j=1,knon
    233262       i = knindex(j)
    234263       tempsmoothlic(i) = temp_air(j)
    235   ENDDO
    236   firstcall=.false.
     264    ENDDO
     265 
    237266  ENDIF
    238267!******************************************************************************************
     
    313342            lafin_is=.true.
    314343          END IF
    315 
     344         
     345          !ym surf_inlandsis not ported on gpu for now
     346          !$gpum nocall
    316347          CALL surf_inlandsis(knon, rlon, rlat, knindex, itime, dtis, debut_is, lafin_is,&
    317348            rmu0, swdown, lwdown, albedo, pexner, ps, p1lay, precip_rain, precip_snow,   &
     
    361392    ! use soil model and recalculate properly cal
    362393    IF (soil_model) THEN
     394       lon(1:knon) = longitude(knindex(1:knon))
     395       lat(1:knon) = latitude(knindex(1:knon))
    363396       CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, &
    364         & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
     397        & lon, lat, tsoil, soilcap, soilflux)
    365398       cal(1:knon) = RCPD / soilcap(1:knon)
    366399       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
     
    662695       ENDDO
    663696
     697       !$gpum nocall
    664698       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac)
    665699    ENDIF
    666700
    667701 ! transfer runoff rate [kg/m2/s](!) to physiq for output
    668     runoff(1:knon)=run_off_lic(1:knon)/dtime
     702    runoff(1:knon)=run_off_lic(knindex(1:knon))/dtime
    669703
    670704!ym WARNING snow_o, zfrac_o => en klon !!!
Note: See TracChangeset for help on using the changeset viewer.