source: LMDZ6/trunk/libf/phylmd/surf_seaice_mod.F90 @ 5759

Last change on this file since 5759 was 5662, checked in by Laurent Fairhead, 2 months ago

Ajout du modèle thermodynamique de glace de mer interactive améliorant les flux échangés à la surface de la banquise (Doctorat de Nicolas Michalezyk, Contact : Nicolas Michaleyk, Guillaume Gastineau)

  • 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:keywords set to Author Date Id Revision
File size: 8.8 KB
Line 
1!
2! $Id: surf_seaice_mod.F90 5662 2025-05-20 14:24:41Z lguez $
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, 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!GG       flux_u1, flux_v1)
24       flux_u1, flux_v1, hice, tice,bilg_cumul, &
25       fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
26       dtice_melt, dtice_snow2sic &
27!GG
28#ifdef ISO
29         &      ,xtprecip_rain, xtprecip_snow,xtspechum,Roce, &
30         &      xtsnow,xtsol,xtevap,Rland_ice &
31#endif               
32         &      )
33
34  USE dimphy
35  USE surface_data
36  USE ocean_forced_mod, ONLY : ocean_forced_ice
37  USE ocean_cpl_mod, ONLY    : ocean_cpl_ice
38  USE ocean_slab_mod, ONLY   : ocean_slab_ice
39  USE indice_sol_mod
40#ifdef ISO
41  USE infotrac_phy, ONLY : ntiso,niso
42#endif
43  USE clesphys_mod_h
44    USE yomcst_mod_h
45USE dimsoil_mod_h, ONLY: nsoilmx
46
47!
48! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
49! slab or couple). The calculation of rugosity for the sea-ice surface is also done
50! in here because it is the same calculation for the different modes of ocean.
51!
52
53
54    ! for rd and retv
55
56! Input arguments
57!****************************************************************************************
58    INTEGER, INTENT(IN)                      :: itime, jour, knon
59    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
60    LOGICAL, INTENT(IN)                      :: lafin
61    REAL, INTENT(IN)                         :: dtime
62    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
63    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
64    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
65    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
66    REAL, DIMENSION(klon), INTENT(IN)        :: fder
67    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
68    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
69    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh, cdragm
70    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
71    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
72    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
73    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefU, AcoefV, BcoefU, BcoefV
74    REAL, DIMENSION(klon), INTENT(IN)        :: ps
75    REAL, DIMENSION(klon), INTENT(IN)        :: u1, v1, gustiness
76    REAL, DIMENSION(klon,nbsrf), INTENT(IN)  :: pctsrf
77#ifdef ISO
78    REAL, DIMENSION(ntiso,klon), INTENT(IN)  :: xtprecip_rain, xtprecip_snow
79    REAL, DIMENSION(klon),       INTENT(IN)  :: xtspechum
80    REAL, DIMENSION(niso,klon),  INTENT(IN)  :: Roce
81    REAL, DIMENSION(niso,klon),  INTENT(IN)  :: Rland_ice
82#endif
83
84! In/Output arguments
85!****************************************************************************************
86    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
87    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
88    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
89#ifdef ISO
90    REAL, DIMENSION(niso,klon), INTENT(INOUT)     :: xtsnow 
91    REAL, DIMENSION(niso,klon), INTENT(IN)        :: xtsol
92#endif
93
94! Output arguments
95!****************************************************************************************
96    REAL, DIMENSION(klon), INTENT(OUT)       :: z0m, z0h
97!albedo SB >>>
98!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
99!    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
100    REAL, DIMENSION(6), INTENT(IN)    :: SFRWL
101    REAL, DIMENSION(klon,nsw), INTENT(OUT)   :: alb_dir_new,alb_dif_new
102!albedo SB <<<
103    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
104    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
105    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
106    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
107!GG
108    REAL, DIMENSION(klon), INTENT(INOUT)       :: hice, tice, bilg_cumul
109    REAL, DIMENSION(klon), INTENT(INOUT)       :: fcds,fcdi, dh_basal_growth,dh_basal_melt
110    REAL, DIMENSION(klon), INTENT(INOUT)       :: dh_top_melt, dh_snow2sic, dtice_melt, dtice_snow2sic
111!GG
112#ifdef ISO
113    REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap
114#endif
115
116! Local arguments
117!****************************************************************************************
118    REAL, DIMENSION(klon)  :: radsol
119#ifdef ISO
120#ifdef ISOVERIF
121    INTEGER :: j
122#endif
123#endif
124
125!albedo SB >>>
126    REAL, DIMENSION(klon) :: alb1_new,alb2_new
127!albedo SB <<<
128
129    real rhoa(knon) ! density of moist air  (kg / m3)
130
131! End definitions
132!****************************************************************************************
133
134
135!****************************************************************************************
136! Calculate total net radiance at surface
137!
138!****************************************************************************************
139    radsol(:) = 0.0
140    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
141
142    rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon)))
143
144!****************************************************************************************
145! Switch according to type of ocean (couple, slab or forced)
146!
147!****************************************************************************************
148    IF (type_ocean == 'couple') THEN
149       
150       CALL ocean_cpl_ice( &
151            rlon, rlat, swnet, lwnet, alb1, &
152            fder, &
153            itime, dtime, knon, knindex, &
154            lafin,&
155            p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
156            AcoefH, AcoefQ, BcoefH, BcoefQ, &
157            AcoefU, AcoefV, BcoefU, BcoefV, &
158            ps, u1, v1, gustiness, pctsrf, &
159            radsol, snow, qsurf, &
160            alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
161            tsurf_new, dflux_s, dflux_l, rhoa)
162       
163    ELSE IF (type_ocean == 'slab'.AND.version_ocean=='sicINT') THEN
164       CALL ocean_slab_ice( &
165          itime, dtime, jour, knon, knindex, &
166          tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
167          AcoefH, AcoefQ, BcoefH, BcoefQ, &
168            AcoefU, AcoefV, BcoefU, BcoefV, &
169          ps, u1, v1, gustiness, &
170          radsol, snow, qsurf, qsol, agesno, &
171          alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
172          tsurf_new, dflux_s, dflux_l, swnet)
173
174      ELSE ! type_ocean=force or slab +sicOBS or sicNO
175       CALL ocean_forced_ice( &
176            itime, dtime, jour, knon, knindex, &
177            tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
178            AcoefH, AcoefQ, BcoefH, BcoefQ, &
179            AcoefU, AcoefV, BcoefU, BcoefV, &
180!GG            ps, u1, v1, gustiness, &
181            ps, u1, v1, gustiness,pctsrf, &
182!GG
183            radsol, snow, qsol, agesno, tsoil, &
184            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
185!GG            tsurf_new, dflux_s, dflux_l, rhoa)
186            tsurf_new, dflux_s, dflux_l,rhoa,swnet,hice, tice, bilg_cumul, &
187            fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
188            dtice_melt, dtice_snow2sic &
189!GG
190#ifdef ISO
191            ,xtprecip_rain, xtprecip_snow, xtspechum,Roce, &
192            xtsnow, xtsol,xtevap,Rland_ice & 
193#endif           
194            )
195
196    END IF
197
198!****************************************************************************************
199! Calculate rugosity
200!
201!****************************************************************************************
202
203    z0m=z0m_seaice
204    z0h = z0h_seaice
205
206!albedo SB >>>
207     select case(NSW)
208     case(2)
209       alb_dir_new(1:knon,1)=alb1_new(1:knon)
210       alb_dir_new(1:knon,2)=alb2_new(1:knon)
211     case(4)
212       alb_dir_new(1:knon,1)=alb1_new(1:knon)
213       alb_dir_new(1:knon,2)=alb2_new(1:knon)
214       alb_dir_new(1:knon,3)=alb2_new(1:knon)
215       alb_dir_new(1:knon,4)=alb2_new(1:knon)
216     case(6)
217       alb_dir_new(1:knon,1)=alb1_new(1:knon)
218       alb_dir_new(1:knon,2)=alb1_new(1:knon)
219       alb_dir_new(1:knon,3)=alb1_new(1:knon)
220       alb_dir_new(1:knon,4)=alb2_new(1:knon)
221       alb_dir_new(1:knon,5)=alb2_new(1:knon)
222       alb_dir_new(1:knon,6)=alb2_new(1:knon)
223     end select
224alb_dif_new=alb_dir_new
225!albedo SB <<<
226
227
228
229
230  END SUBROUTINE surf_seaice
231!
232!****************************************************************************************
233!
234END MODULE surf_seaice_mod
235
Note: See TracBrowser for help on using the repository browser.