source: LMDZ4/trunk/libf/phylmd/surf_seaice_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: 5.9 KB
RevLine 
[781]1!
2! $Header$
3!
4MODULE surf_seaice_mod
5
6  USE dimphy
[996]7  USE surface_data
[781]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( &
[888]17       rlon, rlat, swnet, lwnet, alb1, fder, &
[781]18       itime, dtime, jour, knon, knindex, &
[888]19       debut, lafin, &
[781]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, &
[888]23       snow, qsurf, qsol, agesno, tsoil, &
24       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
[996]25       tsurf_new, dflux_s, dflux_l)
[781]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!
[793]31    INCLUDE "indicesol.h"
[781]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
[888]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
[781]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
[888]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
[781]68    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
[888]69    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
[781]70    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
71
[888]72! Local arguments
73!****************************************************************************************
74    REAL, DIMENSION(klon)  :: radsol
75!
[781]76! End definitions
77!****************************************************************************************
78
[888]79
[781]80!****************************************************************************************
[888]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!****************************************************************************************
[781]88! Switch according to type of ocean (couple, slab or forced)
89!
90!****************************************************************************************
[996]91    IF (type_ocean == 'couple') THEN
92       
[781]93       CALL ocean_cpl_ice( &
[996]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
[781]106       CALL ocean_forced_ice(itime, dtime, jour, knon, knindex, &
[996]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)
[781]114
[996]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
[781]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.