source: LMDZ5/branches/testing/libf/phylmd/surf_seaice_mod.F90 @ 2272

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

Merged trunk changes 2216:2237 into testing branch

  • 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
RevLine 
[781]1!
[2258]2! $Id: surf_seaice_mod.F90 2258 2015-04-13 08:21:09Z fairhead $
3!
[781]4MODULE surf_seaice_mod
5
6  IMPLICIT NONE
7
8CONTAINS
9!
10!****************************************************************************************
11!
12  SUBROUTINE surf_seaice( &
[888]13       rlon, rlat, swnet, lwnet, alb1, fder, &
[781]14       itime, dtime, jour, knon, knindex, &
[1067]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, &
[888]20       snow, qsurf, qsol, agesno, tsoil, &
[2258]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 <<<
[1067]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
[2220]32  USE ocean_slab_mod, ONLY   : ocean_slab_ice
[1795]33  USE indice_sol_mod
[1067]34
[781]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"
[2258]41    INCLUDE "clesphys.h"
[781]42
43! Input arguments
44!****************************************************************************************
45    INTEGER, INTENT(IN)                      :: itime, jour, knon
46    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
[1067]47    LOGICAL, INTENT(IN)                      :: lafin
[781]48    REAL, INTENT(IN)                         :: dtime
49    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
[888]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
[781]53    REAL, DIMENSION(klon), INTENT(IN)        :: fder
54    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
55    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
[1072]56    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
[781]57    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
58    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
[1067]59    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
60    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
[781]61    REAL, DIMENSION(klon), INTENT(IN)        :: ps
[1067]62    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1
[781]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
[2258]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 <<<
[781]81    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
[888]82    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
[781]83    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
[1067]84    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
[781]85
[888]86! Local arguments
87!****************************************************************************************
88    REAL, DIMENSION(klon)  :: radsol
[1067]89
[2258]90!albedo SB >>>
91    REAL, DIMENSION(klon) :: alb1_new,alb2_new
92!albedo SB <<<
[888]93!
[781]94! End definitions
95!****************************************************************************************
96
[888]97
[781]98!****************************************************************************************
[888]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!****************************************************************************************
[781]106! Switch according to type of ocean (couple, slab or forced)
107!
108!****************************************************************************************
[996]109    IF (type_ocean == 'couple') THEN
110       
[781]111       CALL ocean_cpl_ice( &
[996]112            rlon, rlat, swnet, lwnet, alb1, &
113            fder, &
114            itime, dtime, knon, knindex, &
115            lafin,&
[1067]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, &
[996]120            radsol, snow, qsurf, &
[1067]121            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]122            tsurf_new, dflux_s, dflux_l)
123       
[2220]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
[2073]135      ELSE ! type_ocean=force or slab +sicOBS or sicNO
[1067]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, &
[996]142            radsol, snow, qsol, agesno, tsoil, &
[1067]143            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
[996]144            tsurf_new, dflux_s, dflux_l)
[781]145
[996]146    END IF
147
[781]148!****************************************************************************************
149! Calculate rugosity
150!
151!****************************************************************************************
152    z0_new = 0.002
153    z0_new = SQRT(z0_new**2+rugoro**2)
154
[2258]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
[781]180  END SUBROUTINE surf_seaice
181!
182!****************************************************************************************
183!
184END MODULE surf_seaice_mod
185
Note: See TracBrowser for help on using the repository browser.