SURFEX v8.1
General documentation of Surfex
diag_cpl_esm_water.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 diag_cpl_esm_water (W, D, OCPL_SEAICE, PTSTEP, PSFTQ, PRAIN, PSNOW, PLW, &
7  PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW )
8 ! #####################################################################
9 !
10 !!**** *DIAG_CPL_ESM_WATER * - Computes diagnostics over sea for
11 !! Earth system model coupling
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! B. Decharme
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 08/2009
30 !!------------------------------------------------------------------
31 !
32 !
33 USE modd_diag_n, ONLY : diag_t
34 USE modd_watflux_n, ONLY : watflux_t
35 !
36 USE modd_csts, ONLY : xstefan, xlstt
37 USE modd_water_par, ONLY : xemiswatice
38 !
39 !
40 !
41 USE yomhook ,ONLY : lhook, dr_hook
42 USE parkind1 ,ONLY : jprb
43 !
44 IMPLICIT NONE
45 !
46 !* 0.1 declarations of arguments
47 !
48 !
49 TYPE(diag_t), INTENT(INOUT) :: D
50 TYPE(watflux_t), INTENT(INOUT) :: W
51 !
52 LOGICAL, INTENT(IN) :: OCPL_SEAICE ! sea-ice / ocean key
53 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step
54 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux
55 REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! Rainfall
56 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall
57 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
58 REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux (W/m2)
59 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s)
60 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
61 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
62 !
63 !* 0.2 declarations of local variables
64 !
65 REAL, DIMENSION(SIZE(W%XICE_ALB)) :: ZSWU, ZTICE4
66 !
67 INTEGER :: ISWB ! number of SW bands
68 INTEGER :: JSWB ! loop counter on number of SW bands
69 INTEGER :: INI ! number of points
70 INTEGER :: JI ! loop counter on number of points
71 !
72 REAL(KIND=JPRB) :: ZHOOK_HANDLE
73 !
74 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_WATER',0,zhook_handle)
75 !
76 !-------------------------------------------------------------------------------------
77 ! Total or free-ice water flux
78 !-------------------------------------------------------------------------------------
79 !
80 !* 10m wind speed (m)
81 !
82 w%XCPL_WATER_WIND(:) = w%XCPL_WATER_WIND(:) + ptstep * sqrt(d%XZON10M(:)**2+d%XMER10M(:)**2)
83 !
84 !* wind stress (Pa.s)
85 !
86 w%XCPL_WATER_FWSU(:) = w%XCPL_WATER_FWSU(:) + ptstep * d%XFMU(:)
87 w%XCPL_WATER_FWSV(:) = w%XCPL_WATER_FWSV(:) + ptstep * d%XFMV(:)
88 w%XCPL_WATER_FWSM(:) = w%XCPL_WATER_FWSM(:) + ptstep * sqrt(d%XFMU(:)**2+d%XFMV(:)**2)
89 !
90 !* Solar net heat flux (J/m2)
91 !
92 w%XCPL_WATER_SNET(:) = w%XCPL_WATER_SNET(:) + ptstep * (d%XSWD(:) - d%XSWU(:))
93 !
94 !* Non solar heat flux (J/m2)
95 !
96 w%XCPL_WATER_HEAT(:) = w%XCPL_WATER_HEAT(:) + ptstep * (d%XGFLUX(:) + d%XSWU(:) - d%XSWD(:))
97 !
98 !* Evaporation (kg/m2)
99 !
100 w%XCPL_WATER_EVAP(:) = w%XCPL_WATER_EVAP(:) + ptstep * psftq(:)
101 !
102 !* Precip (kg/m2)
103 !
104 w%XCPL_WATER_RAIN(:) = w%XCPL_WATER_RAIN(:) + ptstep * prain(:)
105 w%XCPL_WATER_SNOW(:) = w%XCPL_WATER_SNOW(:) + ptstep * psnow(:)
106 !
107 !-------------------------------------------------------------------------------------
108 ! Ice flux
109 !-------------------------------------------------------------------------------------
110 !
111 IF (ocpl_seaice) THEN
112 !
113  ini = SIZE(pdir_sw,1)
114  iswb = SIZE(pdir_sw,2)
115 !
116 !* Solar net heat flux (J/m2)
117 !
118  zswu(:)=0.0
119  DO jswb=1,iswb
120  DO ji=1,ini
121  zswu(ji) = zswu(ji) + (pdir_sw(ji,jswb)+psca_sw(ji,jswb)) * w%XICE_ALB(ji)
122  ENDDO
123  ENDDO
124 !
125  w%XCPL_WATERICE_SNET(:) = w%XCPL_WATERICE_SNET(:) + ptstep * (d%XSWD(:) - zswu(:))
126 !
127 !* Non solar heat flux (J/m2)
128 !
129  ztice4(:)=w%XTICE(:)**4
130 !
131  w%XCPL_WATERICE_HEAT(:) = w%XCPL_WATERICE_HEAT(:) + ptstep * ( xemiswatice*(plw(:)-xstefan*ztice4(:)) &
132  - psfth_ice(:) - xlstt*psftq_ice(:) )
133 !
134 !* Sublimation (kg/m2)
135 !
136  w%XCPL_WATERICE_EVAP(:) = w%XCPL_WATERICE_EVAP(:) + ptstep * psftq_ice(:)
137 !
138 ENDIF
139 !
140 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_WATER',1,zhook_handle)
141 !
142 !-------------------------------------------------------------------------------------
143 !
144 END SUBROUTINE diag_cpl_esm_water
real, save xstefan
Definition: modd_csts.F90:59
real, save xemiswatice
real, save xlstt
Definition: modd_csts.F90:71
subroutine diag_cpl_esm_water(W, D, OCPL_SEAICE, PTSTEP, PSFTQ, PRAIN, PSNOW, PLW, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15