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

Last change on this file since 1065 was 996, checked in by lsce, 16 years ago
  • Modifications liées au calcul des nouveau sous-fractions
  • Nettoyage de ocean slab : il reste uniquement la version avec glace de mer forcé
  • Nouveaux variables pour distiguer la version et type d'ocean : type_ocean=force/slab/couple, version_ocean=opa8/nemo pour couplé ou version_ocean=sicOBS pour slab

JG

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