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

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

Modifications sur l'albedo JG
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.9 KB
Line 
1!
2! $Header$
3!
4MODULE surf_seaice_mod
5
6  USE dimphy
7  USE surface_data, ONLY     : ocean
8  USE ocean_slab_mod, ONLY   : ocean_slab_ice
9  USE ocean_forced_mod, ONLY : ocean_forced_ice
10  USE ocean_cpl_mod, ONLY    : ocean_cpl_ice
11  IMPLICIT NONE
12
13CONTAINS
14!
15!****************************************************************************************
16!
17  SUBROUTINE surf_seaice( &
18       rlon, rlat, swnet, lwnet, alb1, fder, &
19       itime, dtime, jour, knon, knindex, &
20       debut, lafin, &
21       tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
22       petAcoef, peqAcoef, petBcoef, peqBcoef, &
23       ps, u1_lay, v1_lay, rugoro, pctsrf, &
24       snow, qsurf, qsol, agesno, tsoil, &
25       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
26       tsurf_new, dflux_s, dflux_l, pctsrf_sic)
27!
28! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
29! slab or couple). The calculation of rugosity for the sea-ice surface is also done
30! in here because it is the same calculation for the different modes of ocean.
31!
32    INCLUDE "indicesol.h"
33    INCLUDE "dimsoil.h"
34
35! Input arguments
36!****************************************************************************************
37    INTEGER, INTENT(IN)                      :: itime, jour, knon
38    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
39    LOGICAL, INTENT(IN)                      :: debut, lafin
40    REAL, INTENT(IN)                         :: dtime
41    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
42    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
43    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
44    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
45    REAL, DIMENSION(klon), INTENT(IN)        :: fder
46    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
47    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
48    REAL, DIMENSION(klon), INTENT(IN)        :: tq_cdrag
49    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
50    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
51    REAL, DIMENSION(klon), INTENT(IN)        :: petAcoef, peqAcoef
52    REAL, DIMENSION(klon), INTENT(IN)        :: petBcoef, peqBcoef
53    REAL, DIMENSION(klon), INTENT(IN)        :: ps
54    REAL, DIMENSION(klon), INTENT(IN)        :: u1_lay, v1_lay
55    REAL, DIMENSION(klon), INTENT(IN)        :: rugoro
56    REAL, DIMENSION(klon,nbsrf), INTENT(IN)  :: pctsrf
57
58! In/Output arguments
59!****************************************************************************************
60    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
61    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
62    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
63
64! Output arguments
65!****************************************************************************************
66    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
67    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
68    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
69    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
70    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
71    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
72    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_sic
73
74! Local arguments
75!****************************************************************************************
76    REAL, DIMENSION(klon)  :: radsol
77!
78! End definitions
79!****************************************************************************************
80
81
82!****************************************************************************************
83! Calculate total net radiance at surface
84!
85!****************************************************************************************
86    radsol(:) = 0.0
87    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
88
89!****************************************************************************************
90! Switch according to type of ocean (couple, slab or forced)
91!
92!****************************************************************************************
93    SELECT CASE(ocean)
94    CASE('couple')
95       CALL ocean_cpl_ice( &
96          rlon, rlat, swnet, lwnet, alb1, &
97          fder, &
98          itime, dtime, knon, knindex, &
99          lafin,&
100          p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum,&
101          petAcoef, peqAcoef, petBcoef, peqBcoef, &
102          ps, u1_lay, v1_lay, pctsrf, &
103          radsol, snow, qsurf, &
104          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
105          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
106
107    CASE('slab')
108       CALL ocean_slab_ice( &
109          itime, dtime, jour, knon, knindex, &
110          debut, &
111          tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum,&
112          petAcoef, peqAcoef, petBcoef, peqBcoef, &
113          ps, u1_lay, v1_lay, &
114          radsol, snow, qsurf, qsol, agesno, tsoil, &
115          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
116          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
117   
118    CASE('force')
119       CALL ocean_forced_ice(itime, dtime, jour, knon, knindex, &
120          debut, &
121          tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum,&
122          petAcoef, peqAcoef, petBcoef, peqBcoef, &
123          ps, u1_lay, v1_lay, &
124          radsol, snow, qsol, agesno, tsoil, &
125          qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
126          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
127    END SELECT
128
129!****************************************************************************************
130! Calculate rugosity
131!
132!****************************************************************************************
133    z0_new = 0.002
134    z0_new = SQRT(z0_new**2+rugoro**2)
135
136
137  END SUBROUTINE surf_seaice
138!
139!****************************************************************************************
140!
141END MODULE surf_seaice_mod
142
Note: See TracBrowser for help on using the repository browser.