LMDZ
surf_seaice_mod.F90
Go to the documentation of this file.
1 !
2 ! $Id: surf_seaice_mod.F90 2244 2015-03-24 14:17:55Z fhourdin $
3 !
5 
6  IMPLICIT NONE
7 
8 CONTAINS
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  flux_u1, flux_v1)
24 
25  USE dimphy
26  USE surface_data
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,nbsrf), INTENT(IN) :: pctsrf
61 
62 ! In/Output arguments
63 !****************************************************************************************
64  REAL, DIMENSION(klon), INTENT(INOUT) :: snow, qsurf, qsol
65  REAL, DIMENSION(klon), INTENT(INOUT) :: agesno
66  REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
67 
68 ! Output arguments
69 !****************************************************************************************
70  REAL, DIMENSION(klon), INTENT(OUT) :: z0m, z0h
71 !albedo SB >>>
72 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new ! new albedo in visible SW interval
73 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb2_new ! new albedo in near IR interval
74  REAL, DIMENSION(6), INTENT(IN) :: SFRWL
75  REAL, DIMENSION(klon,nsw), INTENT(OUT) :: alb_dir_new,alb_dif_new
76 !albedo SB <<<
77  REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat
78  REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new
79  REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l
80  REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1
81 
82 ! Local arguments
83 !****************************************************************************************
84  REAL, DIMENSION(klon) :: radsol
85 
86 !albedo SB >>>
87  REAL, DIMENSION(klon) :: alb1_new,alb2_new
88 !albedo SB <<<
89 !
90 ! End definitions
91 !****************************************************************************************
92 
93 
94 !****************************************************************************************
95 ! Calculate total net radiance at surface
96 !
97 !****************************************************************************************
98  radsol(:) = 0.0
99  radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
100 
101 !****************************************************************************************
102 ! Switch according to type of ocean (couple, slab or forced)
103 !
104 !****************************************************************************************
105  IF (type_ocean == 'couple') THEN
106 
107  CALL ocean_cpl_ice( &
108  rlon, rlat, swnet, lwnet, alb1, &
109  fder, &
110  itime, dtime, knon, knindex, &
111  lafin,&
112  p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
113  acoefh, acoefq, bcoefh, bcoefq, &
114  acoefu, acoefv, bcoefu, bcoefv, &
115  ps, u1, v1, gustiness, pctsrf, &
116  radsol, snow, qsurf, &
117  alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
118  tsurf_new, dflux_s, dflux_l)
119 
120  ELSE IF (type_ocean == 'slab'.AND.version_ocean=='sicINT') THEN
121  CALL ocean_slab_ice( &
122  itime, dtime, jour, knon, knindex, &
123  tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
124  acoefh, acoefq, bcoefh, bcoefq, &
125  acoefu, acoefv, bcoefu, bcoefv, &
126  ps, u1, v1, gustiness, &
127  radsol, snow, qsurf, qsol, agesno, &
128  alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
129  tsurf_new, dflux_s, dflux_l, swnet)
130 
131  ELSE ! type_ocean=force or slab +sicOBS or sicNO
132  CALL ocean_forced_ice( &
133  itime, dtime, jour, knon, knindex, &
134  tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum,&
135  acoefh, acoefq, bcoefh, bcoefq, &
136  acoefu, acoefv, bcoefu, bcoefv, &
137  ps, u1, v1, gustiness, &
138  radsol, snow, qsol, agesno, tsoil, &
139  qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
140  tsurf_new, dflux_s, dflux_l)
141 
142  END IF
143 
144 !****************************************************************************************
145 ! Calculate rugosity
146 !
147 !****************************************************************************************
148 
149  z0m=z0m_seaice
150  z0h = z0h_seaice
151 
152 !albedo SB >>>
153  select case(nsw)
154  case(2)
155  alb_dir_new(1:knon,1)=alb1_new(1:knon)
156  alb_dir_new(1:knon,2)=alb2_new(1:knon)
157  case(4)
158  alb_dir_new(1:knon,1)=alb1_new(1:knon)
159  alb_dir_new(1:knon,2)=alb2_new(1:knon)
160  alb_dir_new(1:knon,3)=alb2_new(1:knon)
161  alb_dir_new(1:knon,4)=alb2_new(1:knon)
162  case(6)
163  alb_dir_new(1:knon,1)=alb1_new(1:knon)
164  alb_dir_new(1:knon,2)=alb1_new(1:knon)
165  alb_dir_new(1:knon,3)=alb1_new(1:knon)
166  alb_dir_new(1:knon,4)=alb2_new(1:knon)
167  alb_dir_new(1:knon,5)=alb2_new(1:knon)
168  alb_dir_new(1:knon,6)=alb2_new(1:knon)
169  end select
170 alb_dif_new=alb_dir_new
171 !albedo SB <<<
172 
173 
174 
175 
176  END SUBROUTINE surf_seaice
177 !
178 !****************************************************************************************
179 !
180 END MODULE surf_seaice_mod
181 
character(len=6), save version_ocean
subroutine, public ocean_cpl_ice(rlon, rlat, swnet, lwnet, alb1, fder_old, itime, dtime, knon, knindex, lafin, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, pctsrf, radsol, snow, qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l)
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo pmagic evap0!Frottement au f_cdrag_oce REAL f_z0qh_oce REAL z0m_seaice
Definition: clesphys.h:46
c c $Id c nbregdyn DO klon c rlat(i) c ENDIF!lon c ENDIF!lat ENDIF!pctsrf ENDDO!klon ENDDO!nbregdyn cIM 190504 ENDIF!ok_regdyn cIM somme de toutes les nhistoW BEG IF(debut) THEN DO nreg
character(len=6), save type_ocean
subroutine, public ocean_slab_ice(itime, dtime, jour, knon, knindex, tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, radsol, snow, qsurf, qsol, agesno, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l, swnet)
!$Header!integer nvarmx s s itime
Definition: gradsdef.h:20
Definition: dimphy.F90:1
subroutine surf_seaice(rlon, rlat, swnet, lwnet, alb1, fder, itime, dtime, jour, knon, knindex, lafin, tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, pctsrf, snow, qsurf, qsol, agesno, tsoil, z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, tsurf_new, dflux_s, dflux_l, flux_u1, flux_v1)
subroutine ocean_forced_ice(itime, dtime, jour, knon, knindex, tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, radsol, snow, qsol, agesno, tsoil, qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l)
c c $Id c nbregdyn DO klon c rlon(i)