source: LMDZ5/branches/testing/libf/phylmd/surf_seaice_mod.F90 @ 2220

Last change on this file since 2220 was 2220, checked in by Laurent Fairhead, 10 years ago

Merged trunk changes -r2186:2216 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
RevLine 
[781]1!
2MODULE surf_seaice_mod
3
4  IMPLICIT NONE
5
6CONTAINS
7!
8!****************************************************************************************
9!
10  SUBROUTINE surf_seaice( &
[888]11       rlon, rlat, swnet, lwnet, alb1, fder, &
[781]12       itime, dtime, jour, knon, knindex, &
[1067]13       lafin, &
14       tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
15       AcoefH, AcoefQ, BcoefH, BcoefQ, &
16       AcoefU, AcoefV, BcoefU, BcoefV, &
17       ps, u1, v1, rugoro, pctsrf, &
[888]18       snow, qsurf, qsol, agesno, tsoil, &
19       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
[1067]20       tsurf_new, dflux_s, dflux_l, &
21       flux_u1, flux_v1)
22
23  USE dimphy
24  USE surface_data
25  USE ocean_forced_mod, ONLY : ocean_forced_ice
26  USE ocean_cpl_mod, ONLY    : ocean_cpl_ice
[2220]27  USE ocean_slab_mod, ONLY   : ocean_slab_ice
[1795]28  USE indice_sol_mod
[1067]29
[781]30!
31! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
32! slab or couple). The calculation of rugosity for the sea-ice surface is also done
33! in here because it is the same calculation for the different modes of ocean.
34!
35    INCLUDE "dimsoil.h"
36
37! Input arguments
38!****************************************************************************************
39    INTEGER, INTENT(IN)                      :: itime, jour, knon
40    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
[1067]41    LOGICAL, INTENT(IN)                      :: lafin
[781]42    REAL, INTENT(IN)                         :: dtime
43    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
[888]44    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
45    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
46    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
[781]47    REAL, DIMENSION(klon), INTENT(IN)        :: fder
48    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
49    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
[1072]50    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
[781]51    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
52    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
[1067]53    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
54    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
[781]55    REAL, DIMENSION(klon), INTENT(IN)        :: ps
[1067]56    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1
[781]57    REAL, DIMENSION(klon), INTENT(IN)        :: rugoro
58    REAL, DIMENSION(klon,nbsrf), INTENT(IN)  :: pctsrf
59
60! In/Output arguments
61!****************************************************************************************
62    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
63    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
64    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
65
66! Output arguments
67!****************************************************************************************
68    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
[888]69    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
70    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
[781]71    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
[888]72    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
[781]73    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
[1067]74    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
[781]75
[888]76! Local arguments
77!****************************************************************************************
78    REAL, DIMENSION(klon)  :: radsol
[1067]79
[888]80!
[781]81! End definitions
82!****************************************************************************************
83
[888]84
[781]85!****************************************************************************************
[888]86! Calculate total net radiance at surface
87!
88!****************************************************************************************
89    radsol(:) = 0.0
90    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
91
92!****************************************************************************************
[781]93! Switch according to type of ocean (couple, slab or forced)
94!
95!****************************************************************************************
[996]96    IF (type_ocean == 'couple') THEN
97       
[781]98       CALL ocean_cpl_ice( &
[996]99            rlon, rlat, swnet, lwnet, alb1, &
100            fder, &
101            itime, dtime, knon, knindex, &
102            lafin,&
[1067]103            p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
104            AcoefH, AcoefQ, BcoefH, BcoefQ, &
105            AcoefU, AcoefV, BcoefU, BcoefV, &
106            ps, u1, v1, pctsrf, &
[996]107            radsol, snow, qsurf, &
[1067]108            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]109            tsurf_new, dflux_s, dflux_l)
110       
[2220]111    ELSE IF (type_ocean == 'slab'.AND.version_ocean=='sicINT') THEN
112       CALL ocean_slab_ice( &
113          itime, dtime, jour, knon, knindex, &
114          tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
115          AcoefH, AcoefQ, BcoefH, BcoefQ, &
116            AcoefU, AcoefV, BcoefU, BcoefV, &
117          ps, u1, v1, &
118          radsol, snow, qsurf, qsol, agesno, &
119          alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
120          tsurf_new, dflux_s, dflux_l, swnet)
121
[2073]122      ELSE ! type_ocean=force or slab +sicOBS or sicNO
[1067]123       CALL ocean_forced_ice( &
124            itime, dtime, jour, knon, knindex, &
125            tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
126            AcoefH, AcoefQ, BcoefH, BcoefQ, &
127            AcoefU, AcoefV, BcoefU, BcoefV, &
128            ps, u1, v1, &
[996]129            radsol, snow, qsol, agesno, tsoil, &
[1067]130            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]131            tsurf_new, dflux_s, dflux_l)
[781]132
[996]133    END IF
134
[781]135!****************************************************************************************
136! Calculate rugosity
137!
138!****************************************************************************************
139    z0_new = 0.002
140    z0_new = SQRT(z0_new**2+rugoro**2)
141
142  END SUBROUTINE surf_seaice
143!
144!****************************************************************************************
145!
146END MODULE surf_seaice_mod
147
Note: See TracBrowser for help on using the repository browser.