source: LMDZ4/trunk/libf/phylmd/surf_landice_mod.F90 @ 1006

Last change on this file since 1006 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: 6.7 KB
RevLine 
[781]1!
2! $Header$
3!
4MODULE surf_landice_mod
5 
6  USE dimphy
[996]7  USE surface_data,     ONLY : type_ocean, calice, calsno
[781]8  USE fonte_neige_mod,  ONLY : fonte_neige, run_off_lic
9  USE cpl_mod,          ONLY : cpl_send_landice_fields
10  USE calcul_fluxs_mod, ONLY : calcul_fluxs
11
12  IMPLICIT NONE
13
14CONTAINS
15!
16!****************************************************************************************
17!
18  SUBROUTINE surf_landice(itime, dtime, knon, knindex, &
[888]19       swnet, lwnet, tsurf, p1lay, &
20       tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
[781]21       petAcoef, peqAcoef, petBcoef, peqBcoef, &
22       ps, u1_lay, v1_lay, rugoro, pctsrf, &
[888]23       snow, qsurf, qsol, agesno, &
24       tsoil, z0_new, alb1, alb2, evap, fluxsens, fluxlat, &
[996]25       tsurf_new, dflux_s, dflux_l)
[781]26
[793]27    INCLUDE "indicesol.h"
[781]28    INCLUDE "dimsoil.h"
[793]29    INCLUDE "YOMCST.h"
30    INCLUDE "clesphys.h"
[781]31
32! Input variables
33!****************************************************************************************
34    INTEGER, INTENT(IN)                           :: itime, knon
35    INTEGER, DIMENSION(klon), INTENT(in)          :: knindex
36    REAL, INTENT(in)                              :: dtime
[888]37    REAL, DIMENSION(klon), INTENT(IN)             :: swnet ! net shortwave radiance
38    REAL, DIMENSION(klon), INTENT(IN)             :: lwnet ! net longwave radiance
[781]39    REAL, DIMENSION(klon), INTENT(IN)             :: tsurf
40    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
41    REAL, DIMENSION(klon), INTENT(IN)             :: tq_cdrag
42    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
43    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
44    REAL, DIMENSION(klon), INTENT(IN)             :: petAcoef, peqAcoef
45    REAL, DIMENSION(klon), INTENT(IN)             :: petBcoef, peqBcoef
46    REAL, DIMENSION(klon), INTENT(IN)             :: ps
47    REAL, DIMENSION(klon), INTENT(IN)             :: u1_lay, v1_lay
48    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
49    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
50
51! In/Output variables
52!****************************************************************************************
53    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
54    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
55    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
56
57! Output variables
58!****************************************************************************************
59    REAL, DIMENSION(klon), INTENT(OUT)            :: qsurf
60    REAL, DIMENSION(klon), INTENT(OUT)            :: z0_new
[888]61    REAL, DIMENSION(klon), INTENT(OUT)            :: alb1  ! new albedo in visible SW interval
62    REAL, DIMENSION(klon), INTENT(OUT)            :: alb2  ! new albedo in near IR interval
[781]63    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
[888]64    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
[781]65    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
66
67! Local variables
68!****************************************************************************************
69    REAL, DIMENSION(klon)    :: soilcap, soilflux
70    REAL, DIMENSION(klon)    :: cal, beta, dif_grnd
71    REAL, DIMENSION(klon)    :: zfra, alb_neig
[888]72    REAL, DIMENSION(klon)    :: radsol
[781]73
74! End definition
75!****************************************************************************************
76!
77! Initialize output variables
[888]78    alb2(:) = 999999.
79    alb1(:) = 999999.
[781]80
[888]81!****************************************************************************************
82! Calculate total absorbed radiance at surface
83!
84!****************************************************************************************
85    radsol(:) = 0.0
86    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
[781]87
88!****************************************************************************************
89! Soil calculations
90!
91!****************************************************************************************
92    IF (soil_model) THEN
93       CALL soil(dtime, is_lic, knon, snow, tsurf, tsoil, soilcap, soilflux)
94       cal(1:knon) = RCPD / soilcap(1:knon)
95       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
96    ELSE
97       cal = RCPD * calice
98       WHERE (snow > 0.0) cal = RCPD * calsno
99    ENDIF
100
101
102!****************************************************************************************
103! Calulate fluxes
104!
105!****************************************************************************************
106    beta(:) = 1.0
107    dif_grnd(:) = 0.0
108
109    CALL calcul_fluxs(knon, is_lic, dtime, &
110         tsurf, p1lay, cal, beta, tq_cdrag, ps, &
111         precip_rain, precip_snow, snow, qsurf,  &
112         radsol, dif_grnd, temp_air, spechum, u1_lay, v1_lay, &
113         petAcoef, peqAcoef, petBcoef, peqBcoef, &
114         tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
115
116
117!****************************************************************************************
118! Calculate snow height, age, run-off,..
119!   
120!****************************************************************************************
121    CALL fonte_neige( knon, is_lic, knindex, dtime, &
122         tsurf, precip_rain, precip_snow, &
123         snow, qsol, tsurf_new, evap)
124
125
126!****************************************************************************************
127! Calculate albedo
128!
129!****************************************************************************************
130    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
131    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
132    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
[888]133    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
[781]134         0.6 * (1.0-zfra(1:knon))
135!
136!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
[888]137!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
138!       alb1(1 : knon)  = 0.82
139!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
140!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
[781]141!IM: KstaTER0.77 & LMD_ARMIP6   
142
[888]143! Attantion: alb1 and alb2 are the same!
144    alb1(1:knon)  = 0.77
145    alb2(1:knon)  = alb1(1:knon)
[781]146
147
148!****************************************************************************************
149! Rugosity
150!
151!****************************************************************************************
152    z0_new(:) = rugoro(:)
153
154!****************************************************************************************
155! Send run-off on land-ice to coupler if coupled ocean.
156! run_off_lic has been calculated in fonte_neige
157!
158!****************************************************************************************
[996]159    IF (type_ocean=='couple') THEN
[781]160       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic)
161    ENDIF
162
163
164  END SUBROUTINE surf_landice
165!
166!****************************************************************************************
167!
168END MODULE surf_landice_mod
169
170
171
Note: See TracBrowser for help on using the repository browser.