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

Last change on this file since 2136 was 2057, checked in by Ehouarn Millour, 10 years ago

Preparatory stuff to fix and improve the slab ocean model.
FC

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