source: trunk/libf/phylmd/surf_seaice_mod.F90 @ 1

Last change on this file since 1 was 1, checked in by emillour, 14 years ago

Import initial LMDZ5

File size: 6.1 KB
Line 
1!
2MODULE surf_seaice_mod
3
4  IMPLICIT NONE
5
6CONTAINS
7!
8!****************************************************************************************
9!
10  SUBROUTINE surf_seaice( &
11       rlon, rlat, swnet, lwnet, alb1, fder, &
12       itime, dtime, jour, knon, knindex, &
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, &
18       snow, qsurf, qsol, agesno, tsoil, &
19       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
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
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!
33    INCLUDE "indicesol.h"
34    INCLUDE "dimsoil.h"
35
36! Input arguments
37!****************************************************************************************
38    INTEGER, INTENT(IN)                      :: itime, jour, knon
39    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
40    LOGICAL, INTENT(IN)                      :: lafin
41    REAL, INTENT(IN)                         :: dtime
42    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
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
46    REAL, DIMENSION(klon), INTENT(IN)        :: fder
47    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
48    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
49    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
50    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
51    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
52    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
53    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
54    REAL, DIMENSION(klon), INTENT(IN)        :: ps
55    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1
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
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
70    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
71    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
72    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
73    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
74
75! Local arguments
76!****************************************************************************************
77    REAL, DIMENSION(klon)  :: radsol
78
79!
80! End definitions
81!****************************************************************************************
82
83
84!****************************************************************************************
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!****************************************************************************************
92! Switch according to type of ocean (couple, slab or forced)
93!
94!****************************************************************************************
95    IF (type_ocean == 'couple') THEN
96       
97       CALL ocean_cpl_ice( &
98            rlon, rlat, swnet, lwnet, alb1, &
99            fder, &
100            itime, dtime, knon, knindex, &
101            lafin,&
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, &
106            radsol, snow, qsurf, &
107            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
108            tsurf_new, dflux_s, dflux_l)
109       
110    ELSE IF (type_ocean == 'force' .OR. (type_ocean == 'slab' .AND. version_ocean=='sicOBS')) THEN
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, &
117            radsol, snow, qsol, agesno, tsoil, &
118            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
119            tsurf_new, dflux_s, dflux_l)
120
121    ELSE IF (type_ocean == 'slab') THEN
122!!$       CALL ocean_slab_ice( &
123!!$          itime, dtime, jour, knon, knindex, &
124!!$          debut, &
125!!$          tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, spechum,&
126!!$          AcoefH, AcoefQ, BcoefH, BcoefQ, &
127!!$          ps, u1, v1, pctsrf, &
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
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.