SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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, &
7  ocpl_seaice,ptstep,pzon10m,pmer10m,psfu,psfv, &
8  pswd,pswu,pgflux,psftq,prain,psnow,plw,ptice, &
9  psfth_ice,psftq_ice,pdir_sw,psca_sw )
10 ! #####################################################################
11 !
12 !!**** *DIAG_CPL_ESM_WATER * - Computes diagnostics over sea for
13 !! Earth system model coupling
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 !!** METHOD
19 !! ------
20 !!
21 !! REFERENCE
22 !! ---------
23 !!
24 !!
25 !! AUTHOR
26 !! ------
27 !! B. Decharme
28 !!
29 !! MODIFICATIONS
30 !! -------------
31 !! Original 08/2009
32 !!------------------------------------------------------------------
33 !
34 !
35 USE modd_watflux_n, ONLY : watflux_t
36 !
37 USE modd_csts, ONLY : xstefan, xlstt
38 USE modd_water_par, ONLY : xemiswatice
39 !
40 !
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 !
47 !* 0.1 declarations of arguments
48 !
49 !
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) :: pzon10m ! zonal wind
55 REAL, DIMENSION(:), INTENT(IN) :: pmer10m ! meridian wind
56 REAL, DIMENSION(:), INTENT(IN) :: psfu ! zonal wind stress
57 REAL, DIMENSION(:), INTENT(IN) :: psfv ! meridian wind stress
58 REAL, DIMENSION(:), INTENT(IN) :: pswd ! total incoming short wave radiation
59 REAL, DIMENSION(:), INTENT(IN) :: pswu ! total upward short wave radiation
60 REAL, DIMENSION(:), INTENT(IN) :: pgflux ! storage flux
61 REAL, DIMENSION(:), INTENT(IN) :: psftq ! water flux
62 REAL, DIMENSION(:), INTENT(IN) :: prain ! Rainfall
63 REAL, DIMENSION(:), INTENT(IN) :: psnow ! Snowfall
64 REAL, DIMENSION(:), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
65 REAL, DIMENSION(:), INTENT(IN) :: psfth_ice ! heat flux (W/m2)
66 REAL, DIMENSION(:), INTENT(IN) :: psftq_ice ! water flux (kg/m2/s)
67 REAL, DIMENSION(:), INTENT(IN) :: ptice ! Ice Surface Temperature
68 REAL, DIMENSION(:,:),INTENT(IN):: pdir_sw ! direct solar radiation (on horizontal surf.)
69 REAL, DIMENSION(:,:),INTENT(IN):: psca_sw ! diffuse solar radiation (on horizontal surf.)
70 !
71 !* 0.2 declarations of local variables
72 !
73 REAL, DIMENSION(SIZE(W%XICE_ALB)) :: zswu, ztice4
74 !
75 INTEGER :: iswb ! number of SW bands
76 INTEGER :: jswb ! loop counter on number of SW bands
77 INTEGER :: ini ! number of points
78 INTEGER :: ji ! loop counter on number of points
79 !
80 REAL(KIND=JPRB) :: zhook_handle
81 !
82 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_WATER',0,zhook_handle)
83 !
84 !-------------------------------------------------------------------------------------
85 ! Total or free-ice water flux
86 !-------------------------------------------------------------------------------------
87 !
88 !* 10m wind speed (m)
89 !
90 w%XCPL_WATER_WIND(:) = w%XCPL_WATER_WIND(:) + ptstep * sqrt(pzon10m(:)**2+pmer10m(:)**2)
91 !
92 !* wind stress (Pa.s)
93 !
94 w%XCPL_WATER_FWSU(:) = w%XCPL_WATER_FWSU(:) + ptstep * psfu(:)
95 w%XCPL_WATER_FWSV(:) = w%XCPL_WATER_FWSV(:) + ptstep * psfv(:)
96 w%XCPL_WATER_FWSM(:) = w%XCPL_WATER_FWSM(:) + ptstep * sqrt(psfu(:)**2+psfv(:)**2)
97 !
98 !* Solar net heat flux (J/m2)
99 !
100 w%XCPL_WATER_SNET(:) = w%XCPL_WATER_SNET(:) + ptstep * (pswd(:) - pswu(:))
101 !
102 !* Non solar heat flux (J/m2)
103 !
104 w%XCPL_WATER_HEAT(:) = w%XCPL_WATER_HEAT(:) + ptstep * (pgflux(:) + pswu(:) - pswd(:))
105 !
106 !* Evaporation (kg/m2)
107 !
108 w%XCPL_WATER_EVAP(:) = w%XCPL_WATER_EVAP(:) + ptstep * psftq(:)
109 !
110 !* Precip (kg/m2)
111 !
112 w%XCPL_WATER_RAIN(:) = w%XCPL_WATER_RAIN(:) + ptstep * prain(:)
113 w%XCPL_WATER_SNOW(:) = w%XCPL_WATER_SNOW(:) + ptstep * psnow(:)
114 !
115 !-------------------------------------------------------------------------------------
116 ! Ice flux
117 !-------------------------------------------------------------------------------------
118 !
119 IF (ocpl_seaice) THEN
120 !
121  ini = SIZE(pdir_sw,1)
122  iswb = SIZE(pdir_sw,2)
123 !
124 !* Solar net heat flux (J/m2)
125 !
126  zswu(:)=0.0
127  DO jswb=1,iswb
128  DO ji=1,ini
129  zswu(ji) = zswu(ji) + (pdir_sw(ji,jswb)+psca_sw(ji,jswb)) * w%XICE_ALB(ji)
130  ENDDO
131  ENDDO
132 !
133  w%XCPL_WATERICE_SNET(:) = w%XCPL_WATERICE_SNET(:) + ptstep * (pswd(:) - zswu(:))
134 !
135 !* Non solar heat flux (J/m2)
136 !
137  ztice4(:)=ptice(:)**4
138 !
139  w%XCPL_WATERICE_HEAT(:) = w%XCPL_WATERICE_HEAT(:) + ptstep * ( xemiswatice*(plw(:)-xstefan*ztice4(:)) &
140  - psfth_ice(:) - xlstt*psftq_ice(:) )
141 !
142 !* Sublimation (kg/m2)
143 !
144  w%XCPL_WATERICE_EVAP(:) = w%XCPL_WATERICE_EVAP(:) + ptstep * psftq_ice(:)
145 !
146 ENDIF
147 !
148 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_WATER',1,zhook_handle)
149 !
150 !-------------------------------------------------------------------------------------
151 !
152 END SUBROUTINE diag_cpl_esm_water
subroutine diag_cpl_esm_water(W, OCPL_SEAICE, PTSTEP, PZON10M, PMER10M, PSFU, PSFV, PSWD, PSWU, PGFLUX, PSFTQ, PRAIN, PSNOW, PLW, PTICE, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW)