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

Last change on this file since 2243 was 2243, checked in by fhourdin, 9 years ago

Revisite de la formule des flux de surface
(en priorité sur l'océan) en tenant compte des bourrasques de
vent et de la différence entre les hauteurs de rugosités pour
la quantité de mouvement, l'enthalpie et éventuellement l'humidité.

Etape 2 :

  • Séparation des z0 pour la quantité de mouvement et l'enthalpie.

rugs (ou frugs, rugos, yrugos ...) disparait au profit de z0m, z0h.
Les variables qui étaient à la fois dans pbl_surface_init et

  • dans l'interface de pbl_surface sont suprimées de pbl_surface_init.

On travaille directement pour ces variables (evap, z0, qsol, agesno)
avec les versions de phys_state_var_mod (qui étaient
précédemment dans phys_local_var_mod

  • Nouveaux paramètres de contrôle :
    • iflag_z0_oce (par défaut 0, et seule option active jusque là)
    • z0m_seaice_omp, z0h_seaice_omp, comme leur nom l'indique (utilisées dans surf_landice
    • z0min appliqué sur z0m et z0h dans pbl_surface
  • Introduction des fonction phyeta0_get et phyetat0_srf pour lire

les conditions de initiales dans startphy.
Du coup une seule ligne suffit pour lire et contrôler d'éventuels
problèmes.

  • Pour la variable fxrugs, elle est remplacée par z0m(:,nbsrf+1)

Ce choix déjà utilisé pour d'autres variables pourrait être
systématiser pour alléger l'interface de pbl_surface_mod.

  • Dans les sorties, les variables rugs* ont été remplacées par

des z0m* et z0h*

  • Nettoyage des anciens alb1/alb2 dans les lectures/écritures

des états de redémarrage (et dans pbl_surface_mod.F90).

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