SURFEX v8.1
General documentation of Surfex
mod1dn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE mod1d_n (DGO, O, OR, PLAT, S, &
7  HPROGRAM, PTIME, PEMIS, PDIR_ALB, PSCA_ALB, &
8  PLW, PSCA_SW, PDIR_SW, PSFTH, PSFTQ, PSFU, PSFV, PRAIN )
9 ! #######################################################################
10 !
11 !!**** *MOD1D_n*
12 !!
13 !! PURPOSE
14 !! -------
15 ! Source that exchanges Fluxes and SST between SURFEX (coupling_seaflux)
16 ! and the oceanic 1D model in TKE eqations (mixtl_n)
17 !
18 !!** METHOD
19 !! ------
20 ! Change turbulent fluxes in solar, non solar, and fresh water fluxes
21 ! with the oceanic convention for orientation of fluxes
22 ! The stress of wind is exchange between SURFEX and TKE model
23 !
24 !! EXTERNAL
25 !! --------
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !! REFERENCE
31 !! ---------
32 !!
33 !!
34 !! AUTHOR
35 !! ------
36 !! C. Lebeaupin *Météo-France*
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 02/2008
41 !! Modified 07/2012, P. Le Moigne : CMO1D phasing
42 !-------------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 ! ------------
46 !
47 !
48 !
49 !
51 USE modd_ocean_n, ONLY : ocean_t
52 USE modd_ocean_rel_n, ONLY : ocean_rel_t
53 USE modd_sfx_grid_n, ONLY : grid_t
54 USE modd_seaflux_n, ONLY : seaflux_t
55 !
56 USE modd_csts
58 USE modd_surf_par, ONLY : xundef
59 !
60 USE modi_mixtl_n
61 USE modi_diag_inline_ocean_n
62 !
63 USE modi_get_luout
64 !
65 !
66 USE yomhook ,ONLY : lhook, dr_hook
67 USE parkind1 ,ONLY : jprb
68 !
69 IMPLICIT NONE
70 !
71 !* 0.1 declarations of arguments
72 !
73 !
74 !
75 TYPE(diag_ocean_t), INTENT(INOUT) :: DGO
76 TYPE(ocean_t), INTENT(INOUT) :: O
77 TYPE(ocean_rel_t), INTENT(INOUT) :: OR
78 REAL, DIMENSION(:), INTENT(IN) :: PLAT
79 TYPE(seaflux_t), INTENT(INOUT) :: S
80 !
81  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
82 REAL ,INTENT(IN) :: PTIME ! current time since midnight in second
83 REAL, DIMENSION(:) ,INTENT(IN) :: PEMIS ! emissivity
84 REAL, DIMENSION(:,:),INTENT(IN) :: PDIR_ALB ! direct albedo
85 REAL, DIMENSION(:,:),INTENT(IN) :: PSCA_ALB ! scattered albedo
86 REAL, DIMENSION(:) ,INTENT(IN) :: PLW ! longwave radiation on horizontal surface (W/m2)
87 REAL, DIMENSION(:,:),INTENT(IN) :: PSCA_SW ! diffuse solar radiation on horizontal surface (W/m2)
88 REAL, DIMENSION(:,:),INTENT(IN) :: PDIR_SW ! direct solar radiation on horizontal surface (W/m2)
89 REAL, DIMENSION(:) ,INTENT(IN) :: PSFTH ! flux of heat (W/m2)
90 REAL, DIMENSION(:) ,INTENT(IN) :: PSFTQ ! flux of water vapor (kg/m2/s)
91 REAL, DIMENSION(:) ,INTENT(IN) :: PSFU ! zonal stress (Pa)
92 REAL, DIMENSION(:) ,INTENT(IN) :: PSFV ! meridian stress (Pa)
93 REAL, DIMENSION(:) ,INTENT(IN) :: PRAIN ! liquid precipitation (kg/s/m2)
94 !
95 !* 0.2 declarations of local variables
96 !
97 INTEGER :: JPT
98 INTEGER :: ITIME,NOCEAN_STEP
99 REAL, DIMENSION(SIZE(PSFTH)) :: ZFSOL,ZFNSOL !total solar and non-solar fluxes (W/m2)
100 REAL, DIMENSION(SIZE(PSFTH)) :: ZSFTEAU !fresh water flux(kg/m2/s)
101 REAL, DIMENSION(SIZE(PSFTH)) :: ZLV !latent heat
102 !
103 REAL, DIMENSION(SIZE(PSFTH)) :: ZLWU !long waves upward fluxes (W/m2)
104 REAL, DIMENSION(SIZE(PDIR_ALB,1),SIZE(PDIR_ALB,2)) :: ZSWU
105  !shortwave upward fluxes (W/m2)
106 !
107 REAL, DIMENSION(SIZE(PSFTH)) :: ZSEATEMP !surface temperature (K)
108 !
109 LOGICAL :: GCALLMIXT, GTIMEOK
110 INTEGER :: ILUOUT ! output listing logical unit
111 REAL(KIND=JPRB) :: ZHOOK_HANDLE
112 !
113 !-------------------------------------------------------------------------------
114 !
115 IF (lhook) CALL dr_hook('MOD1D_N',0,zhook_handle)
116 !
117  CALL get_luout(hprogram,iluout)
118 !
119 itime=int(ptime)
120 nocean_step=int(o%XOCEAN_TSTEP)
121 !
122 gtimeok=(mod(itime,nocean_step)==0)
123 gcallmixt=((mod(itime,nocean_step)==0).AND.(o%NOCTCOUNT>0))
124 !
125 !Call 1D model if ptime proportional to the oceanic model time step
126 !
127 IF (gcallmixt) THEN
128 !
129 ! 1. Initializations
130 !________________________________________________________________________
131 !Computation of solar, non solar and fresh water fluxes
132  DO jpt=1,SIZE(psfth)
133  !SW Flux up
134  zswu(jpt,:)= pdir_sw(jpt,:) * pdir_alb(jpt,:) + psca_sw(jpt,:)*psca_alb(jpt,:)
135  !Net solar flux
136  zfsol(jpt)=(sum(pdir_sw(jpt,:))+sum(psca_sw(jpt,:))-sum(zswu(jpt,:)))/(xrhosw*xcpsw)
137  !Calcul flux LW UP
138  zlwu(jpt)= pemis(jpt)*xstefan*s%XSST(jpt)**4 + (1-pemis(jpt))*plw(jpt)
139 
140  IF (s%XSST(jpt)<=(xtt-2)) THEN
141  zfnsol(jpt)=(plw(jpt)-zlwu(jpt)-psfth(jpt)-(xlstt*psftq(jpt)))/(xrhosw*xcpsw)
142  zsfteau(jpt)=psftq(jpt)/xrhoswref
143  ELSE
144  zlv(jpt)=xlvtt+(xcpv-xcl)*(s%XSST(jpt)-xtt)
145  zfnsol(jpt)=(plw(jpt)-zlwu(jpt)-psfth(jpt)-(zlv(jpt)*psftq(jpt)))/(xrhosw*xcpsw)
146  zsfteau(jpt)=(psftq(jpt)-prain(jpt))/xrhoswref
147  ENDIF
148  ENDDO
149 !__________________________________________________________________________
150 !
151 ! 2. Call oceanic TKE model
152 ! ----------------------
153 !
154  IF (or%LFLUX_NULL) THEN
155  WRITE(iluout,*) 'Caution : SURFACE FLUX ARE SET TO 0 '
156  zfsol(:) = 0.
157  zfnsol(:) = 0.
158  zsfteau(:) = 0.
159  END IF
160 
161  CALL mixtl_n(o, or, plat, zfsol,zfnsol,zsfteau,psfu,psfv,zseatemp)
162 !
163 !---------------------------------------------------------------------------
164 ! 3. Coupling with SURFEX by SST (and relative wind) evolution
165 !
166  IF (o%LPROGSST) THEN
167  s%XSST(:)=zseatemp(:)
168  !WRITE(ILUOUT,*) '**SST CHANGED FOR THE ',NOCTCOUNT,'TIME BY FIRST LEVEL OCEANIC MODEL TEMPERATURE AT ', ITIME,' s **'
169  ENDIF
170  !
171 ENDIF
172 !
173 IF (gtimeok) THEN
174  CALL diag_inline_ocean_n(dgo, o, s%XSEABATHY)
175  o%NOCTCOUNT = o%NOCTCOUNT+1
176 ENDIF
177 !
178 IF (lhook) CALL dr_hook('MOD1D_N',1,zhook_handle)
179 !!-------------------------------------------------------------------------------
180 !!-----------------------------------------------------------------------------
181 END SUBROUTINE mod1d_n
real, save xstefan
Definition: modd_csts.F90:59
real, save xlvtt
Definition: modd_csts.F90:70
real, save xlstt
Definition: modd_csts.F90:71
real, parameter xundef
subroutine mod1d_n(DGO, O, OR, PLAT, S, HPROGRAM, PTIME, PEMIS, PDIR_ALB, PSCA_ALB, PLW, PSCA_SW, PDIR_SW, PSFTH, PSFTQ, PSFU, PSFV, PRAIN)
Definition: mod1dn.F90:9
integer, parameter jprb
Definition: parkind1.F90:32
subroutine diag_inline_ocean_n(DGO, O, PSEABATHY)
real, save xcpv
Definition: modd_csts.F90:63
real, save xcl
Definition: modd_csts.F90:65
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
real, save xtt
Definition: modd_csts.F90:66
subroutine mixtl_n(O, OR, PLAT, PFSOL, PFNSOL, PSFTEAU, PSFU, PSFV, PSEATEMP)
Definition: mixtln.F90:7
real, save xrhoswref