8 psea_fwsu,psea_fwsv,psea_heat,psea_snet, &
9 psea_wind,psea_fwsm,psea_evap,psea_rain, &
10 psea_snow,psea_watf, &
11 pseaice_heat,pseaice_snet,pseaice_evap )
57 USE yomhook
,ONLY : lhook, dr_hook
58 USE parkind1
,ONLY : jprb
70 LOGICAL,
INTENT(IN) :: ocpl_seaice
71 LOGICAL,
INTENT(IN) :: owater
73 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_fwsu
74 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_fwsv
75 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_heat
76 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_snet
77 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_wind
78 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_fwsm
79 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_evap
80 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_rain
81 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_snow
82 REAL,
DIMENSION(:),
INTENT(OUT) :: psea_watf
84 REAL,
DIMENSION(:),
INTENT(OUT) :: pseaice_heat
85 REAL,
DIMENSION(:),
INTENT(OUT) :: pseaice_snet
86 REAL,
DIMENSION(:),
INTENT(OUT) :: pseaice_evap
91 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zwind
92 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zfwsu
93 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zfwsv
94 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zsnet
95 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zheat
96 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zevap
97 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zrain
98 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zsnow
99 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zfwsm
101 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zsnet_ice
102 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zheat_ice
103 REAL,
DIMENSION(SIZE(PSEA_HEAT)) :: zevap_ice
105 REAL(KIND=JPRB) :: zhook_handle
108 IF (lhook) CALL dr_hook(
'GET_SFX_SEA',0,zhook_handle)
114 psea_fwsu(:) = xundef
115 psea_fwsv(:) = xundef
116 psea_heat(:) = xundef
117 psea_snet(:) = xundef
118 psea_wind(:) = xundef
119 psea_fwsm(:) = xundef
120 psea_evap(:) = xundef
121 psea_rain(:) = xundef
122 psea_snow(:) = xundef
123 psea_watf(:) = xundef
125 pseaice_heat(:) = xundef
126 pseaice_snet(:) = xundef
127 pseaice_evap(:) = xundef
139 zheat_ice(:) = xundef
140 zsnet_ice(:) = xundef
141 zevap_ice(:) = xundef
146 IF(u%NSIZE_SEA>0)
THEN
157 s%XCPL_SEA_WIND(:) = 0.0
158 s%XCPL_SEA_EVAP(:) = 0.0
159 s%XCPL_SEA_HEAT(:) = 0.0
160 s%XCPL_SEA_SNET(:) = 0.0
161 s%XCPL_SEA_FWSU(:) = 0.0
162 s%XCPL_SEA_FWSV(:) = 0.0
163 s%XCPL_SEA_RAIN(:) = 0.0
164 s%XCPL_SEA_SNOW(:) = 0.0
165 s%XCPL_SEA_FWSM(:) = 0.0
167 IF (ocpl_seaice)
THEN
168 CALL
unpack_same_rank(u%NR_SEA(:),s%XCPL_SEAICE_SNET(:),pseaice_snet(:),xundef)
169 CALL
unpack_same_rank(u%NR_SEA(:),s%XCPL_SEAICE_HEAT(:),pseaice_heat(:),xundef)
170 CALL
unpack_same_rank(u%NR_SEA(:),s%XCPL_SEAICE_EVAP(:),pseaice_evap(:),xundef)
171 s%XCPL_SEAICE_SNET(:) = 0.0
172 s%XCPL_SEAICE_EVAP(:) = 0.0
173 s%XCPL_SEAICE_HEAT(:) = 0.0
181 IF (owater.AND.u%NSIZE_WATER>0)
THEN
193 WHERE(u%XWATER(:)>0.0)
194 psea_wind(:) = (u%XSEA(:)*psea_wind(:)+u%XWATER(:)*zwind(:))/(u%XSEA(:)+u%XWATER(:))
195 psea_fwsu(:) = (u%XSEA(:)*psea_fwsu(:)+u%XWATER(:)*zfwsu(:))/(u%XSEA(:)+u%XWATER(:))
196 psea_fwsv(:) = (u%XSEA(:)*psea_fwsv(:)+u%XWATER(:)*zfwsv(:))/(u%XSEA(:)+u%XWATER(:))
197 psea_snet(:) = (u%XSEA(:)*psea_snet(:)+u%XWATER(:)*zsnet(:))/(u%XSEA(:)+u%XWATER(:))
198 psea_heat(:) = (u%XSEA(:)*psea_heat(:)+u%XWATER(:)*zheat(:))/(u%XSEA(:)+u%XWATER(:))
199 psea_evap(:) = (u%XSEA(:)*psea_evap(:)+u%XWATER(:)*zevap(:))/(u%XSEA(:)+u%XWATER(:))
200 psea_rain(:) = (u%XSEA(:)*psea_rain(:)+u%XWATER(:)*zrain(:))/(u%XSEA(:)+u%XWATER(:))
201 psea_snow(:) = (u%XSEA(:)*psea_snow(:)+u%XWATER(:)*zsnow(:))/(u%XSEA(:)+u%XWATER(:))
202 psea_fwsm(:) = (u%XSEA(:)*psea_fwsm(:)+u%XWATER(:)*zfwsm(:))/(u%XSEA(:)+u%XWATER(:))
205 w%XCPL_WATER_WIND(:) = 0.0
206 w%XCPL_WATER_EVAP(:) = 0.0
207 w%XCPL_WATER_HEAT(:) = 0.0
208 w%XCPL_WATER_SNET(:) = 0.0
209 w%XCPL_WATER_FWSU(:) = 0.0
210 w%XCPL_WATER_FWSV(:) = 0.0
211 w%XCPL_WATER_RAIN(:) = 0.0
212 w%XCPL_WATER_SNOW(:) = 0.0
213 w%XCPL_WATER_FWSM(:) = 0.0
215 IF (ocpl_seaice)
THEN
216 CALL
unpack_same_rank(u%NR_WATER(:),w%XCPL_WATERICE_SNET(:),zsnet_ice(:),xundef)
217 CALL
unpack_same_rank(u%NR_WATER(:),w%XCPL_WATERICE_HEAT(:),zheat_ice(:),xundef)
218 CALL
unpack_same_rank(u%NR_WATER(:),w%XCPL_WATERICE_EVAP(:),zevap_ice(:),xundef)
219 WHERE(u%XWATER(:)>0.0)
220 pseaice_snet(:) = (u%XSEA(:)*pseaice_snet(:)+u%XWATER(:)*zsnet_ice(:))/(u%XSEA(:)+u%XWATER(:))
221 pseaice_heat(:) = (u%XSEA(:)*pseaice_heat(:)+u%XWATER(:)*zheat_ice(:))/(u%XSEA(:)+u%XWATER(:))
222 pseaice_evap(:) = (u%XSEA(:)*pseaice_evap(:)+u%XWATER(:)*zevap_ice(:))/(u%XSEA(:)+u%XWATER(:))
224 w%XCPL_WATERICE_SNET(:) = 0.0
225 w%XCPL_WATERICE_EVAP(:) = 0.0
226 w%XCPL_WATERICE_HEAT(:) = 0.0
234 IF(u%NSIZE_SEA>0)
THEN
236 psea_watf(:) = psea_rain(:) + psea_snow(:) - psea_evap(:)
240 IF (lhook) CALL dr_hook(
'GET_SFX_SEA',1,zhook_handle)
subroutine get_sfx_sea(S, U, W, OCPL_SEAICE, OWATER, PSEA_FWSU, PSEA_FWSV, PSEA_HEAT, PSEA_SNET, PSEA_WIND, PSEA_FWSM, PSEA_EVAP, PSEA_RAIN, PSEA_SNOW, PSEA_WATF, PSEAICE_HEAT, PSEAICE_SNET, PSEAICE_EVAP)