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

Last change on this file since 2056 was 1910, checked in by Laurent Fairhead, 11 years ago

Merged trunk changes r1860:1909 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
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  USE indice_sol_mod
28
29!
30! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
31! slab or couple). The calculation of rugosity for the sea-ice surface is also done
32! in here because it is the same calculation for the different modes of ocean.
33!
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.