source: LMDZ4/trunk/libf/phylmd/surf_seaice_mod.F90 @ 5306

Last change on this file since 5306 was 1072, checked in by Laurent Fairhead, 16 years ago

Oublis lors du passage CVS -> svn
FH/LF

  • 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
27
[781]28!
29! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
30! slab or couple). The calculation of rugosity for the sea-ice surface is also done
31! in here because it is the same calculation for the different modes of ocean.
32!
[793]33    INCLUDE "indicesol.h"
[781]34    INCLUDE "dimsoil.h"
35
36! Input arguments
37!****************************************************************************************
38    INTEGER, INTENT(IN)                      :: itime, jour, knon
39    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
[1067]40    LOGICAL, INTENT(IN)                      :: lafin
[781]41    REAL, INTENT(IN)                         :: dtime
42    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
[888]43    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
44    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
45    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
[781]46    REAL, DIMENSION(klon), INTENT(IN)        :: fder
47    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
48    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
[1072]49    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
[781]50    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
51    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
[1067]52    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
53    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
[781]54    REAL, DIMENSION(klon), INTENT(IN)        :: ps
[1067]55    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1
[781]56    REAL, DIMENSION(klon), INTENT(IN)        :: rugoro
57    REAL, DIMENSION(klon,nbsrf), INTENT(IN)  :: pctsrf
58
59! In/Output arguments
60!****************************************************************************************
61    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
62    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
63    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
64
65! Output arguments
66!****************************************************************************************
67    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
[888]68    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
69    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
[781]70    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
[888]71    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
[781]72    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
[1067]73    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
[781]74
[888]75! Local arguments
76!****************************************************************************************
77    REAL, DIMENSION(klon)  :: radsol
[1067]78
[888]79!
[781]80! End definitions
81!****************************************************************************************
82
[888]83
[781]84!****************************************************************************************
[888]85! Calculate total net radiance at surface
86!
87!****************************************************************************************
88    radsol(:) = 0.0
89    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
90
91!****************************************************************************************
[781]92! Switch according to type of ocean (couple, slab or forced)
93!
94!****************************************************************************************
[996]95    IF (type_ocean == 'couple') THEN
96       
[781]97       CALL ocean_cpl_ice( &
[996]98            rlon, rlat, swnet, lwnet, alb1, &
99            fder, &
100            itime, dtime, knon, knindex, &
101            lafin,&
[1067]102            p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
103            AcoefH, AcoefQ, BcoefH, BcoefQ, &
104            AcoefU, AcoefV, BcoefU, BcoefV, &
105            ps, u1, v1, pctsrf, &
[996]106            radsol, snow, qsurf, &
[1067]107            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]108            tsurf_new, dflux_s, dflux_l)
109       
110    ELSE IF (type_ocean == 'force' .OR. (type_ocean == 'slab' .AND. version_ocean=='sicOBS')) THEN
[1067]111       CALL ocean_forced_ice( &
112            itime, dtime, jour, knon, knindex, &
113            tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
114            AcoefH, AcoefQ, BcoefH, BcoefQ, &
115            AcoefU, AcoefV, BcoefU, BcoefV, &
116            ps, u1, v1, &
[996]117            radsol, snow, qsol, agesno, tsoil, &
[1067]118            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]119            tsurf_new, dflux_s, dflux_l)
[781]120
[996]121    ELSE IF (type_ocean == 'slab') THEN
122!!$       CALL ocean_slab_ice( &
123!!$          itime, dtime, jour, knon, knindex, &
124!!$          debut, &
[1067]125!!$          tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, spechum,&
126!!$          AcoefH, AcoefQ, BcoefH, BcoefQ, &
127!!$          ps, u1, v1, pctsrf, &
[996]128!!$          radsol, snow, qsurf, qsol, agesno, tsoil, &
129!!$          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
130!!$          tsurf_new, dflux_s, dflux_l)
131
132    END IF
133
[781]134!****************************************************************************************
135! Calculate rugosity
136!
137!****************************************************************************************
138    z0_new = 0.002
139    z0_new = SQRT(z0_new**2+rugoro**2)
140
141  END SUBROUTINE surf_seaice
142!
143!****************************************************************************************
144!
145END MODULE surf_seaice_mod
146
Note: See TracBrowser for help on using the repository browser.