source: LMDZ5/trunk/libf/phylmd/surf_seaice_mod.F90 @ 2227

Last change on this file since 2227 was 2227, checked in by Laurent Fairhead, 9 years ago

New ocean albedo.

To activate the new scheme, put iflag_albedo=1 in physiq.def

To activate chlorophyll concentration effect on albedo,
put ok_chlorophyll=y in def file

and download file named chlorophyll.nc
chlorophyll.nc has the same dimension as the model grid with 12 months data,
(i=lon, j=lat, L=1:12) and can be degraded from the original file of dimension
i=1:4320 , j=1:2160 , L=1:12
ada:/workgpfs/rech/psl/rpsl949/clima/chlor_seasonal_clim_seawifs.nc

For 96X96 resolution, chlorophyll.nc file is in
ada:/workgpfs/rech/psl/rpsl949/clima/chlorophyll.nc

  1. Baek
  • 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: 7.2 KB
Line 
1!
2! $Id: surf_seaice_mod.F90 2227 2015-03-12 11:07:43Z fairhead $
3!
4MODULE surf_seaice_mod
5
6  IMPLICIT NONE
7
8CONTAINS
9!
10!****************************************************************************************
11!
12  SUBROUTINE surf_seaice( &
13       rlon, rlat, swnet, lwnet, alb1, fder, &
14       itime, dtime, jour, knon, knindex, &
15       lafin, &
16       tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
17       AcoefH, AcoefQ, BcoefH, BcoefQ, &
18       AcoefU, AcoefV, BcoefU, BcoefV, &
19       ps, u1, v1, rugoro, pctsrf, &
20       snow, qsurf, qsol, agesno, tsoil, &
21!albedo SB >>>
22!      z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
23       z0_new, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 
24!albedo SB <<<
25       tsurf_new, dflux_s, dflux_l, &
26       flux_u1, flux_v1)
27
28  USE dimphy
29  USE surface_data
30  USE ocean_forced_mod, ONLY : ocean_forced_ice
31  USE ocean_cpl_mod, ONLY    : ocean_cpl_ice
32  USE ocean_slab_mod, ONLY   : ocean_slab_ice
33  USE indice_sol_mod
34
35!
36! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
37! slab or couple). The calculation of rugosity for the sea-ice surface is also done
38! in here because it is the same calculation for the different modes of ocean.
39!
40    INCLUDE "dimsoil.h"
41    INCLUDE "clesphys.h"
42
43! Input arguments
44!****************************************************************************************
45    INTEGER, INTENT(IN)                      :: itime, jour, knon
46    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
47    LOGICAL, INTENT(IN)                      :: lafin
48    REAL, INTENT(IN)                         :: dtime
49    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
50    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
51    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
52    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
53    REAL, DIMENSION(klon), INTENT(IN)        :: fder
54    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
55    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
56    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
57    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
58    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
59    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
60    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
61    REAL, DIMENSION(klon), INTENT(IN)        :: ps
62    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1
63    REAL, DIMENSION(klon), INTENT(IN)        :: rugoro
64    REAL, DIMENSION(klon,nbsrf), INTENT(IN)  :: pctsrf
65
66! In/Output arguments
67!****************************************************************************************
68    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
69    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
70    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
71
72! Output arguments
73!****************************************************************************************
74    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
75!albedo SB >>>
76!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
77!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
78    REAL, DIMENSION(6), INTENT(IN)    :: SFRWL
79    REAL, DIMENSION(klon,nsw), INTENT(OUT)   :: alb_dir_new,alb_dif_new
80!albedo SB <<<
81    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
82    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
83    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
84    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
85
86! Local arguments
87!****************************************************************************************
88    REAL, DIMENSION(klon)  :: radsol
89
90!albedo SB >>>
91    REAL, DIMENSION(klon) :: alb1_new,alb2_new
92!albedo SB <<<
93!
94! End definitions
95!****************************************************************************************
96
97
98!****************************************************************************************
99! Calculate total net radiance at surface
100!
101!****************************************************************************************
102    radsol(:) = 0.0
103    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
104
105!****************************************************************************************
106! Switch according to type of ocean (couple, slab or forced)
107!
108!****************************************************************************************
109    IF (type_ocean == 'couple') THEN
110       
111       CALL ocean_cpl_ice( &
112            rlon, rlat, swnet, lwnet, alb1, &
113            fder, &
114            itime, dtime, knon, knindex, &
115            lafin,&
116            p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
117            AcoefH, AcoefQ, BcoefH, BcoefQ, &
118            AcoefU, AcoefV, BcoefU, BcoefV, &
119            ps, u1, v1, pctsrf, &
120            radsol, snow, qsurf, &
121            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
122            tsurf_new, dflux_s, dflux_l)
123       
124    ELSE IF (type_ocean == 'slab'.AND.version_ocean=='sicINT') THEN
125       CALL ocean_slab_ice( &
126          itime, dtime, jour, knon, knindex, &
127          tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
128          AcoefH, AcoefQ, BcoefH, BcoefQ, &
129            AcoefU, AcoefV, BcoefU, BcoefV, &
130          ps, u1, v1, &
131          radsol, snow, qsurf, qsol, agesno, &
132          alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
133          tsurf_new, dflux_s, dflux_l, swnet)
134
135      ELSE ! type_ocean=force or slab +sicOBS or sicNO
136       CALL ocean_forced_ice( &
137            itime, dtime, jour, knon, knindex, &
138            tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
139            AcoefH, AcoefQ, BcoefH, BcoefQ, &
140            AcoefU, AcoefV, BcoefU, BcoefV, &
141            ps, u1, v1, &
142            radsol, snow, qsol, agesno, tsoil, &
143            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
144            tsurf_new, dflux_s, dflux_l)
145
146    END IF
147
148!****************************************************************************************
149! Calculate rugosity
150!
151!****************************************************************************************
152    z0_new = 0.002
153    z0_new = SQRT(z0_new**2+rugoro**2)
154
155
156!albedo SB >>>
157     select case(NSW)
158     case(2)
159       alb_dir_new(1:knon,1)=alb1_new(1:knon)
160       alb_dir_new(1:knon,2)=alb2_new(1:knon)
161     case(4)
162       alb_dir_new(1:knon,1)=alb1_new(1:knon)
163       alb_dir_new(1:knon,2)=alb2_new(1:knon)
164       alb_dir_new(1:knon,3)=alb2_new(1:knon)
165       alb_dir_new(1:knon,4)=alb2_new(1:knon)
166     case(6)
167       alb_dir_new(1:knon,1)=alb1_new(1:knon)
168       alb_dir_new(1:knon,2)=alb1_new(1:knon)
169       alb_dir_new(1:knon,3)=alb1_new(1:knon)
170       alb_dir_new(1:knon,4)=alb2_new(1:knon)
171       alb_dir_new(1:knon,5)=alb2_new(1:knon)
172       alb_dir_new(1:knon,6)=alb2_new(1:knon)
173     end select
174alb_dif_new=alb_dir_new
175!albedo SB <<<
176
177
178
179
180  END SUBROUTINE surf_seaice
181!
182!****************************************************************************************
183!
184END MODULE surf_seaice_mod
185
Note: See TracBrowser for help on using the repository browser.