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

Last change on this file since 923 was 888, checked in by Laurent Fairhead, 17 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
RevLine 
[781]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( &
[888]18       rlon, rlat, swnet, lwnet, alb1, fder, &
[781]19       itime, dtime, jour, knon, knindex, &
[888]20       debut, lafin, &
[781]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, &
[888]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)
[781]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!
[793]32    INCLUDE "indicesol.h"
[781]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
[888]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
[781]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
[888]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
[781]69    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
[888]70    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
[781]71    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
72    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_sic
73
[888]74! Local arguments
75!****************************************************************************************
76    REAL, DIMENSION(klon)  :: radsol
77!
[781]78! End definitions
79!****************************************************************************************
80
[888]81
[781]82!****************************************************************************************
[888]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!****************************************************************************************
[781]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( &
[888]96          rlon, rlat, swnet, lwnet, alb1, &
[781]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, &
[888]104          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
105          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
[781]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, &
[888]114          radsol, snow, qsurf, qsol, agesno, tsoil, &
115          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
116          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
[781]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, &
[888]124          radsol, snow, qsol, agesno, tsoil, &
125          qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
126          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
[781]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.