SCALE-RM
mod_ocean_driver.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
9 !-------------------------------------------------------------------------------
10 #include "scalelib.h"
12  !-----------------------------------------------------------------------------
13  !
14  !++ used modules
15  !
16  use scale_precision
17  use scale_io
18  use scale_prof
20  use scale_tracer
22  !-----------------------------------------------------------------------------
23  implicit none
24  private
25  !-----------------------------------------------------------------------------
26  !
27  !++ Public procedure
28  !
29  public :: ocean_driver_setup
31  public :: ocean_driver_update
32  public :: ocean_surface_get
33  public :: ocean_surface_set
34 
35  !-----------------------------------------------------------------------------
36  !
37  !++ Public parameters & variables
38  !
39  !-----------------------------------------------------------------------------
40  !
41  !++ Private procedure
42  !
43  !-----------------------------------------------------------------------------
44  !
45  !++ Private parameters & variables
46  !
47  real(RP), private, allocatable :: qvef(:,:)
48  real(RP), private, allocatable :: sr (:,:)
49 
50  !-----------------------------------------------------------------------------
51 contains
52  !-----------------------------------------------------------------------------
54  subroutine ocean_driver_setup
55  use scale_prc, only: &
56  prc_abort
57  use mod_ocean_admin, only: &
58  ocean_do, &
64  use scale_cpl_phy_sfc_fixed_temp, only: &
66  use scale_ocean_dyn_slab, only: &
68  use scale_ocean_dyn_offline, only: &
70  use scale_ocean_phy_ice_simple, only: &
72  use scale_ocean_phy_albedo, only: &
77  use scale_ocean_phy_roughness, only: &
84  use scale_ocean_phy_tc, only: &
86  implicit none
87  !---------------------------------------------------------------------------
88 
89  log_newline
90  log_info("OCEAN_driver_setup",*) 'Setup'
91 
92  if ( ocean_do ) then
93 
94  select case ( ocean_dyn_type )
95  case ( 'SLAB' )
97  case ( 'OFFLINE' )
99  case ( 'INIT' )
100  ! do nothing
101  case default
102  log_error("OCEAN_driver_setup",*) 'OCEAN_DYN_TYPE is invalid: ', trim(ocean_dyn_type)
103  call prc_abort
104  end select
105 
106  select case ( ocean_sfc_type )
107  case ( 'FIXED-TEMP' )
109  case default
110  log_error("OCEAN_driver_setup",*) 'OCEAN_SFC_TYPE is invalid: ', trim(ocean_sfc_type)
111  call prc_abort
112  end select
113 
114  select case ( ocean_ice_type )
115  case ( 'NONE' )
116  ! do nothing
117  case ( 'SIMPLE' )
119  case ( 'INIT' )
120  ! do nothing
121  case default
122  log_error("OCEAN_driver_setup",*) 'OCEAN_ICE_TYPE is invalid: ', trim(ocean_ice_type)
123  call prc_abort
124  end select
125 
126  ! surface albedo
127  select case ( ocean_alb_type )
128  case ( 'NAKAJIMA00' )
132  case ( 'CONST' )
134  case ( 'INIT' )
135  ! do nothing
136  case default
137  log_error("OCEAN_driver_setup",*) 'OCEAN_ALB_TYPE is invalid: ', trim(ocean_alb_type)
138  call prc_abort
139  end select
140 
141  ! surface roughness length
142  select case ( ocean_rgn_type )
143  case ( 'MILLER92' )
146  case ( 'MOON07' )
149  case ( 'CONST' )
151  case ( 'INIT' )
152  ! do nothing
153  case default
154  log_error("OCEAN_driver_setup",*) 'OCEAN_RGN_TYPE is invalid: ', trim(ocean_rgn_type)
155  call prc_abort
156  end select
157 
158  ! thermal conductivity
160 
161  allocate( qvef(oia,oja) )
162  allocate( sr(oia,oja) )
163  qvef(:,:) = 1.0_rp
164  sr(:,:) = 0.0_rp
165 
166  endif
167 
168  return
169  end subroutine ocean_driver_setup
170 
171  !-----------------------------------------------------------------------------
173  subroutine ocean_driver_calc_tendency( force )
174  use scale_time, only: &
175  dt => time_dtsec_ocean
176  use scale_statistics, only: &
178  statistics_total
179  use scale_landuse, only: &
180  exists_ocean => landuse_exists_ocean
181  use scale_file_history, only: &
182  file_history_in
183  use scale_atmos_grid_cartesc_real, only: &
184  real_z1 => atmos_grid_cartesc_real_z1
185  use scale_atmos_hydrometeor, only: &
186  hydrometeor_lhv => atmos_hydrometeor_lhv, &
187  hydrometeor_lhs => atmos_hydrometeor_lhs, &
189  i_qv
190  use scale_ocean_grid_cartesc_real, only: &
195  use scale_ocean_grid_cartesc_real, only: &
198  use scale_cpl_phy_sfc_fixed_temp, only: &
200  use scale_ocean_phy_albedo, only: &
205  use scale_ocean_phy_roughness, only: &
212  use scale_ocean_phy_tc, only: &
214  use scale_ocean_phy_ice_simple, only: &
216  use mod_atmos_admin, only: &
218  use mod_atmos_phy_ch_driver, only: &
220  use mod_ocean_admin, only: &
221  ocean_sfc_type, &
222  ocean_ice_type, &
223  ocean_alb_type, &
225  use mod_ocean_vars, only: &
226  ocean_temp, &
227  ocean_ocn_z0m, &
228  ocean_ice_temp, &
229  ocean_ice_mass, &
230  ocean_sfc_temp, &
232  ocean_sfc_z0m, &
233  ocean_sfc_z0h, &
234  ocean_sfc_z0e, &
235  ocean_temp_t, &
236  ocean_salt_t, &
237  ocean_uvel_t, &
238  ocean_vvel_t, &
241  atmos_temp, &
242  atmos_pres, &
243  atmos_w, &
244  atmos_u, &
245  atmos_v, &
246  atmos_dens, &
247  atmos_qv, &
248  atmos_pbl, &
249  atmos_cossza, &
250  atmos_sfc_dens, &
251  atmos_sfc_pres, &
253  atmos_sflx_rain, &
254  atmos_sflx_snow, &
255  ocean_sflx_mw, &
256  ocean_sflx_mu, &
257  ocean_sflx_mv, &
258  ocean_sflx_sh, &
259  ocean_sflx_lh, &
260  ocean_sflx_qtrc, &
261  ocean_u10, &
262  ocean_v10, &
263  ocean_t2, &
264  ocean_q2, &
265  ocean_sflx_g, &
267  ocean_sflx_ice, &
268  ocean_ice_frac, &
270  implicit none
271 
272  logical, intent(in) :: force
273 
274  real(RP) :: LHV (oia,oja) ! latent heat of vaporization [J/kg]
275  real(RP) :: LHS (oia,oja) ! latent heat of sublimation [J/kg]
276  real(RP) :: ATMOS_Uabs (oia,oja)
277  real(RP) :: sfc_frac (oia,oja)
278  real(RP) :: sfc_temp (oia,oja)
279  real(RP) :: sfc_albedo (oia,oja,n_rad_dir,n_rad_rgn)
280  real(RP) :: sfc_Z0M (oia,oja)
281  real(RP) :: sfc_Z0H (oia,oja)
282  real(RP) :: sfc_Z0E (oia,oja)
283  real(RP) :: subsfc_temp (oia,oja)
284  real(RP) :: TC_dz (oia,oja)
285  real(RP) :: sflx_MW (oia,oja)
286  real(RP) :: sflx_MU (oia,oja)
287  real(RP) :: sflx_MV (oia,oja)
288  real(RP) :: sflx_SH (oia,oja)
289  real(RP) :: sflx_QV (oia,oja)
290  real(RP) :: U10 (oia,oja)
291  real(RP) :: V10 (oia,oja)
292  real(RP) :: T2 (oia,oja)
293  real(RP) :: Q2 (oia,oja)
294  real(RP) :: sflx_hbalance(oia,oja)
295  real(RP) :: sflx_G (oia,oja)
296  real(RP) :: sflx_water (oia,oja)
297  real(RP) :: sflx_ice (oia,oja)
298  logical :: exists_ice (oia,oja)
299 
300  integer :: k, i, j, iq, idir, irgn
301  !---------------------------------------------------------------------------
302 
303  call prof_rapstart('OCN_CalcTend', 1)
304 
305  !########## Get Surface Boundary from coupler ##########
306  call ocean_surface_get
307 
308  call hydrometeor_lhv( oia, ois, oie, oja, ojs, oje, & ! [IN]
309  atmos_temp(:,:), & ! [IN]
310  lhv(:,:) ) ! [OUT]
311  call hydrometeor_lhs( oia, ois, oie, oja, ojs, oje, & ! [IN]
312  atmos_temp(:,:), & ! [IN]
313  lhs(:,:) ) ! [OUT]
314 
315  !$omp parallel do
316  do j = ojs, oje
317  do i = ois, oie
318  atmos_uabs(i,j) = sqrt( atmos_u(i,j)**2 + atmos_v(i,j)**2 )
319  enddo
320  enddo
321 
322  !$omp parallel do
323  do j = ojs, oje
324  do i = ois, oie
325  exists_ice(i,j) = .false.
326  if( exists_ocean(i,j) .AND. ocean_ice_frac(i,j) > 0.0_rp ) exists_ice(i,j) = .true.
327  enddo
328  enddo
329 
330  !########## reset tendencies ##########
331 
332  !$omp parallel do
333  do j = ojs, oje
334  do i = ois, oie
335  do k = oks, oke
336  ocean_temp_t(k,i,j) = 0.0_rp
337  ocean_salt_t(k,i,j) = 0.0_rp
338  ocean_uvel_t(k,i,j) = 0.0_rp
339  ocean_vvel_t(k,i,j) = 0.0_rp
340  enddo
341  enddo
342  enddo
343 
344  !$omp parallel do
345  do j = ojs, oje
346  do i = ois, oie
347  ocean_ice_temp_t(i,j) = 0.0_rp
348  ocean_ice_mass_t(i,j) = 0.0_rp
349  enddo
350  enddo
351 
352  do iq = 1, qa
353  !$omp parallel do
354  do j = ojs, oje
355  do i = ois, oie
356  ocean_sflx_qtrc(i,j,iq) = 0.0_rp
357  enddo
358  enddo
359  enddo
360 
361 
362 
363  !########## surface process (ice-free ocean) ##########
364 
365  !$omp parallel do
366  do j = ojs, oje
367  do i = ois, oie
368  sfc_frac(i,j) = 1.0_rp - ocean_ice_frac(i,j)
369  sfc_temp(i,j) = ocean_temp(oks,i,j)
370  enddo
371  enddo
372 
373  ! albedo
374  select case ( ocean_alb_type )
375  case ( 'NAKAJIMA00' )
376  ! for Near-IR, IR
377  call ocean_phy_albedo_const ( oia, ois, oie, & ! [IN]
378  oja, ojs, oje, & ! [IN]
379  sfc_albedo(:,:,:,:) ) ! [OUT]
380  ! for VIS (overwrite)
381  call ocean_phy_albedo_nakajima00( oia, ois, oie, & ! [IN]
382  oja, ojs, oje, & ! [IN]
383  atmos_cossza(:,:), & ! [IN]
384  sfc_albedo(:,:,:,i_r_vis) ) ! [OUT]
385  case ( 'CONST' )
386  call ocean_phy_albedo_const ( oia, ois, oie, & ! [IN]
387  oja, ojs, oje, & ! [IN]
388  sfc_albedo(:,:,:,:) ) ! [OUT]
389  case ( 'INIT' )
390  ! Never update OCEAN_SFC_albedo from initial condition
391  do irgn = i_r_ir, i_r_vis
392  do idir = i_r_direct, i_r_diffuse
393  do j = ojs, oje
394  do i = ois, oie
395  sfc_albedo(i,j,idir,irgn) = ocean_sfc_albedo(i,j,idir,irgn)
396  enddo
397  enddo
398  enddo
399  enddo
400  end select
401 
402  ! roughness length
403  select case ( ocean_rgn_type )
404  case ( 'MILLER92' )
405  call ocean_phy_roughness_miller92( oia, ois, oie, & ! [IN]
406  oja, ojs, oje, & ! [IN]
407  atmos_uabs(:,:), & ! [IN]
408  sfc_z0m(:,:), & ! [OUT]
409  sfc_z0h(:,:), & ! [OUT]
410  sfc_z0e(:,:) ) ! [OUT]
411  case ( 'MOON07' )
412  call ocean_phy_roughness_moon07 ( oia, ois, oie, & ! [IN]
413  oja, ojs, oje, & ! [IN]
414  atmos_uabs(:,:), & ! [IN]
415  real_z1(:,:), & ! [IN]
416  ocean_ocn_z0m(:,:), & ! [INOUT]
417  sfc_z0h(:,:), & ! [OUT]
418  sfc_z0e(:,:) ) ! [OUT]
419 
420  !$omp parallel do
421  do j = ojs, oje
422  do i = ois, oie
423  sfc_z0m(i,j) = ocean_ocn_z0m(i,j)
424  enddo
425  enddo
426  case ( 'CONST' )
427  call ocean_phy_roughness_const ( oia, ois, oie, & ! [IN]
428  oja, ojs, oje, & ! [IN]
429  sfc_z0m(:,:), & ! [OUT]
430  sfc_z0h(:,:), & ! [OUT]
431  sfc_z0e(:,:) ) ! [OUT]
432  case ( 'INIT' )
433  ! Never update OCEAN_SFC_Z0M/H/E from initial condition
434  !$omp parallel do
435  do j = ojs, oje
436  do i = ois, oie
437  sfc_z0m(i,j) = ocean_sfc_z0m(i,j)
438  sfc_z0h(i,j) = ocean_sfc_z0h(i,j)
439  sfc_z0e(i,j) = ocean_sfc_z0e(i,j)
440  enddo
441  enddo
442  end select
443 
444  ! tendency
445  select case ( ocean_sfc_type )
446  case ( 'FIXED-TEMP' )
447  call cpl_phy_sfc_fixed_temp( oia, ois, oie, & ! [IN]
448  oja, ojs, oje, & ! [IN]
449  atmos_temp(:,:), & ! [IN]
450  atmos_pres(:,:), & ! [IN]
451  atmos_w(:,:), & ! [IN]
452  atmos_u(:,:), & ! [IN]
453  atmos_v(:,:), & ! [IN]
454  atmos_dens(:,:), & ! [IN]
455  atmos_qv(:,:), & ! [IN]
456  lhv(:,:), & ! [IN]
457  real_z1(:,:), & ! [IN]
458  atmos_pbl(:,:), & ! [IN]
459  atmos_sfc_dens(:,:), & ! [IN]
460  atmos_sfc_pres(:,:), & ! [IN]
461  atmos_sflx_rad_dn(:,:,:,:), & ! [IN]
462  sfc_temp(:,:), & ! [IN]
463  qvef(:,:), & ! [IN]
464  sfc_albedo(:,:,:,:), & ! [IN]
465  sr(:,:), & ! [IN]
466  sfc_z0m(:,:), & ! [IN]
467  sfc_z0h(:,:), & ! [IN]
468  sfc_z0e(:,:), & ! [IN]
469  exists_ocean(:,:), & ! [IN]
470  dt, & ! [IN]
471  sflx_mw(:,:), & ! [OUT]
472  sflx_mu(:,:), & ! [OUT]
473  sflx_mv(:,:), & ! [OUT]
474  sflx_sh(:,:), & ! [OUT]
475  sflx_qv(:,:), & ! [OUT]
476  sflx_g(:,:), & ! [OUT]
477  u10(:,:), & ! [OUT]
478  v10(:,:), & ! [OUT]
479  t2(:,:), & ! [OUT]
480  q2(:,:) ) ! [OUT]
481  end select
482 
483  !$omp parallel do
484  do j = ojs, oje
485  do i = ois, oie
486  sflx_water(i,j) = atmos_sflx_rain(i,j) - sflx_qv(i,j)
487  sflx_ice(i,j) = atmos_sflx_snow(i,j)
488  enddo
489  enddo
490 
491  ! weighted average
492 
493  !$omp parallel do
494  do j = ojs, oje
495  do i = ois, oie
496  ocean_sfc_temp(i,j) = sfc_temp(i,j) * sfc_frac(i,j)
497  ocean_sfc_z0m(i,j) = sfc_z0m(i,j) * sfc_frac(i,j)
498  ocean_sfc_z0h(i,j) = sfc_z0h(i,j) * sfc_frac(i,j)
499  ocean_sfc_z0e(i,j) = sfc_z0e(i,j) * sfc_frac(i,j)
500  ocean_sflx_mw(i,j) = sflx_mw(i,j) * sfc_frac(i,j)
501  ocean_sflx_mu(i,j) = sflx_mu(i,j) * sfc_frac(i,j)
502  ocean_sflx_mv(i,j) = sflx_mv(i,j) * sfc_frac(i,j)
503  ocean_sflx_sh(i,j) = sflx_sh(i,j) * sfc_frac(i,j)
504  ocean_u10(i,j) = u10(i,j) * sfc_frac(i,j)
505  ocean_v10(i,j) = v10(i,j) * sfc_frac(i,j)
506  ocean_t2(i,j) = t2(i,j) * sfc_frac(i,j)
507  ocean_q2(i,j) = q2(i,j) * sfc_frac(i,j)
508 
509  ocean_sflx_g(i,j) = sflx_g(i,j) * sfc_frac(i,j) * (-1.0_rp) ! upward to downward
510  ocean_sflx_water(i,j) = sflx_water(i,j) * sfc_frac(i,j)
511  ocean_sflx_ice(i,j) = sflx_ice(i,j) * sfc_frac(i,j)
512  enddo
513  enddo
514 
515  if ( .NOT. atmos_hydrometeor_dry ) then
516  !$omp parallel do
517  do j = ojs, oje
518  do i = ois, oie
519  ocean_sflx_qtrc(i,j,i_qv) = sflx_qv(i,j) * sfc_frac(i,j)
520  enddo
521  enddo
522  endif
523 
524  !$omp parallel do
525  do irgn = i_r_ir, i_r_vis
526  do idir = i_r_direct, i_r_diffuse
527  do j = ojs, oje
528  do i = ois, oie
529  ocean_sfc_albedo(i,j,idir,irgn) = sfc_albedo(i,j,idir,irgn) * sfc_frac(i,j)
530  enddo
531  enddo
532  enddo
533  enddo
534 
535 
536 
537  !########## surface process (ice) ##########
538 
539  if ( ocean_ice_type /= 'NONE' ) then
540 
541  !$omp parallel do
542  do j = ojs, oje
543  do i = ois, oie
544  sfc_frac(i,j) = ocean_ice_frac(i,j)
545  sfc_temp(i,j) = ocean_ice_temp(i,j)
546  subsfc_temp(i,j) = ocean_temp(oks,i,j)
547  enddo
548  enddo
549 
550  ! albedo
551  select case ( ocean_alb_type )
552  case ( 'NAKAJIMA00' )
553  call ocean_phy_albedo_seaice( oia, ois, oie, & ! [IN]
554  oja, ojs, oje, & ! [IN]
555  sfc_albedo(:,:,:,:) ) ! [OUT]
556  case ( 'CONST' )
557  call ocean_phy_albedo_const ( oia, ois, oie, & ! [IN]
558  oja, ojs, oje, & ! [IN]
559  sfc_albedo(:,:,:,:) ) ! [OUT]
560  case ( 'INIT' )
561  ! Never update OCEAN_SFC_albedo from initial condition
562  do irgn = i_r_ir, i_r_vis
563  do idir = i_r_direct, i_r_diffuse
564  do j = ojs, oje
565  do i = ois, oie
566  sfc_albedo(i,j,idir,irgn) = ocean_sfc_albedo(i,j,idir,irgn)
567  enddo
568  enddo
569  enddo
570  enddo
571  end select
572 
573  ! roughness length
574  select case ( ocean_rgn_type )
575  case ( 'MILLER92', 'MOON07' )
576  call ocean_phy_roughness_seaice( oia, ois, oie, & ! [IN]
577  oja, ojs, oje, & ! [IN]
578  sfc_z0m(:,:), & ! [OUT]
579  sfc_z0h(:,:), & ! [OUT]
580  sfc_z0e(:,:) ) ! [OUT]
581  case ( 'CONST' )
582  call ocean_phy_roughness_const ( oia, ois, oie, & ! [IN]
583  oja, ojs, oje, & ! [IN]
584  sfc_z0m(:,:), & ! [OUT]
585  sfc_z0h(:,:), & ! [OUT]
586  sfc_z0e(:,:) ) ! [OUT]
587  case ( 'INIT' )
588  ! Never update OCEAN_SFC_Z0M/H/E from initial condition
589  !$omp parallel do
590  do j = ojs, oje
591  do i = ois, oie
592  sfc_z0m(i,j) = ocean_sfc_z0m(i,j)
593  sfc_z0h(i,j) = ocean_sfc_z0h(i,j)
594  sfc_z0e(i,j) = ocean_sfc_z0e(i,j)
595  enddo
596  enddo
597  end select
598 
599  ! thermal conductivity / depth
600  call ocean_phy_tc_seaice( oia, ois, oie, & ! [IN]
601  oja, ojs, oje, & ! [IN]
602  ocean_ice_mass(:,:), & ! [IN]
603  ocean_ice_frac(:,:), & ! [IN]
604  tc_dz(:,:) ) ! [OUT]
605 
606  ! tendency
607  select case ( ocean_sfc_type )
608  case ( 'FIXED-TEMP' )
609  call cpl_phy_sfc_fixed_temp( oia, ois, oie, & ! [IN]
610  oja, ojs, oje, & ! [IN]
611  atmos_temp(:,:), & ! [IN]
612  atmos_pres(:,:), & ! [IN]
613  atmos_w(:,:), & ! [IN]
614  atmos_u(:,:), & ! [IN]
615  atmos_v(:,:), & ! [IN]
616  atmos_dens(:,:), & ! [IN]
617  atmos_qv(:,:), & ! [IN]
618  lhs(:,:), & ! [IN]
619  real_z1(:,:), & ! [IN]
620  atmos_pbl(:,:), & ! [IN]
621  atmos_sfc_dens(:,:), & ! [IN]
622  atmos_sfc_pres(:,:), & ! [IN]
623  atmos_sflx_rad_dn(:,:,:,:), & ! [IN]
624  sfc_temp(:,:), & ! [IN]
625  qvef(:,:), & ! [IN]
626  sfc_albedo(:,:,:,:), & ! [IN]
627  sr(:,:), & ! [IN]
628  sfc_z0m(:,:), & ! [IN]
629  sfc_z0h(:,:), & ! [IN]
630  sfc_z0e(:,:), & ! [IN]
631  exists_ice(:,:), & ! [IN]
632  dt, & ! [IN]
633  sflx_mw(:,:), & ! [OUT]
634  sflx_mu(:,:), & ! [OUT]
635  sflx_mv(:,:), & ! [OUT]
636  sflx_sh(:,:), & ! [OUT]
637  sflx_qv(:,:), & ! [OUT]
638  sflx_g(:,:), & ! [OUT]
639  u10(:,:), & ! [OUT]
640  v10(:,:), & ! [OUT]
641  t2(:,:), & ! [OUT]
642  q2(:,:) ) ! [OUT]
643  end select
644 
645  ! seaice
646  select case ( ocean_ice_type )
647  case ( 'SIMPLE' )
648 
649  !$omp parallel do
650  do j = ojs, oje
651  do i = ois, oie
652  sflx_hbalance(i,j) = - sflx_g(i,j) ! upward to downward
653  enddo
654  enddo
655 
656  call ocean_phy_ice_simple( oia, ois, oie, & ! [IN]
657  oja, ojs, oje, & ! [IN]
658  sflx_qv(:,:), & ! [IN]
659  atmos_sflx_rain(:,:), & ! [IN]
660  atmos_sflx_snow(:,:), & ! [IN]
661  sflx_hbalance(:,:), & ! [IN]
662  subsfc_temp(:,:), & ! [IN]
663  tc_dz(:,:), & ! [IN]
664  ocean_ice_temp(:,:), & ! [IN]
665  ocean_ice_mass(:,:), & ! [IN]
666  exists_ice(:,:), & ! [IN]
667  dt, & ! [IN]
668  ocean_ice_temp_t(:,:), & ! [OUT]
669  ocean_ice_mass_t(:,:), & ! [OUT]
670  sflx_g(:,:), & ! [OUT]
671  sflx_water(:,:), & ! [OUT]
672  sflx_ice(:,:) ) ! [OUT]
673  case ( 'INIT' )
674  !$omp parallel do
675  do j = ojs, oje
676  do i = ois, oie
677  sflx_g(i,j) = - sflx_g(i,j) ! upward to downward
678  sflx_water(i,j) = 0.0_rp ! no flux from seaice to ocean
679  sflx_ice(i,j) = 0.0_rp ! no flux from seaice to ocean
680  enddo
681  enddo
682  end select
683 
684  ! weighted average
685 
686  !$omp parallel do
687  do j = ojs, oje
688  do i = ois, oie
689  ocean_sfc_temp(i,j) = ocean_sfc_temp(i,j) + sfc_temp(i,j) * sfc_frac(i,j)
690  ocean_sfc_z0m(i,j) = ocean_sfc_z0m(i,j) + sfc_z0m(i,j) * sfc_frac(i,j)
691  ocean_sfc_z0h(i,j) = ocean_sfc_z0h(i,j) + sfc_z0h(i,j) * sfc_frac(i,j)
692  ocean_sfc_z0e(i,j) = ocean_sfc_z0e(i,j) + sfc_z0e(i,j) * sfc_frac(i,j)
693  ocean_sflx_mw(i,j) = ocean_sflx_mw(i,j) + sflx_mw(i,j) * sfc_frac(i,j)
694  ocean_sflx_mu(i,j) = ocean_sflx_mu(i,j) + sflx_mu(i,j) * sfc_frac(i,j)
695  ocean_sflx_mv(i,j) = ocean_sflx_mv(i,j) + sflx_mv(i,j) * sfc_frac(i,j)
696  ocean_sflx_sh(i,j) = ocean_sflx_sh(i,j) + sflx_sh(i,j) * sfc_frac(i,j)
697  ocean_u10(i,j) = ocean_u10(i,j) + u10(i,j) * sfc_frac(i,j)
698  ocean_v10(i,j) = ocean_v10(i,j) + v10(i,j) * sfc_frac(i,j)
699  ocean_t2(i,j) = ocean_t2(i,j) + t2(i,j) * sfc_frac(i,j)
700  ocean_q2(i,j) = ocean_q2(i,j) + q2(i,j) * sfc_frac(i,j)
701 
702  ocean_sflx_g(i,j) = ocean_sflx_g(i,j) + sflx_g(i,j) * sfc_frac(i,j)
703  ocean_sflx_water(i,j) = ocean_sflx_water(i,j) + sflx_water(i,j) * sfc_frac(i,j)
704  ocean_sflx_ice(i,j) = ocean_sflx_ice(i,j) + sflx_ice(i,j) * sfc_frac(i,j)
705  enddo
706  enddo
707 
708  if ( .NOT. atmos_hydrometeor_dry ) then
709  !$omp parallel do
710  do j = ojs, oje
711  do i = ois, oie
712  ocean_sflx_qtrc(i,j,i_qv) = ocean_sflx_qtrc(i,j,i_qv) + sflx_qv(i,j) * sfc_frac(i,j)
713  enddo
714  enddo
715  endif
716 
717  !$omp parallel do
718  do irgn = i_r_ir, i_r_vis
719  do idir = i_r_direct, i_r_diffuse
720  do j = ojs, oje
721  do i = ois, oie
722  ocean_sfc_albedo(i,j,idir,irgn) = ocean_sfc_albedo(i,j,idir,irgn) + sfc_albedo(i,j,idir,irgn) * sfc_frac(i,j)
723  enddo
724  enddo
725  enddo
726  enddo
727 
728  endif ! ICE process?
729 
730  if ( .NOT. atmos_hydrometeor_dry ) then
731  !$omp parallel do
732  do j = ojs, oje
733  do i = ois, oie
734  ocean_sflx_lh(i,j) = ocean_sflx_qtrc(i,j,i_qv) * lhv(i,j) ! always LHV
735  enddo
736  enddo
737  else
738  !$omp parallel do
739  do j = ojs, oje
740  do i = ois, oie
741  ocean_sflx_lh(i,j) = 0.0_rp
742  enddo
743  enddo
744  endif
745 
746  ! Surface flux for chemical tracers
747  if ( atmos_sw_phy_ch ) then
748  call atmos_phy_ch_driver_ocean_flux( ocean_sflx_qtrc(:,:,:) ) ! [INOUT]
749  endif
750 
751  if ( statistics_checktotal ) then
752  call statistics_total( oka, oks, oke, oia, ois, oie, oja, ojs, oje, &
753  ocean_temp_t(:,:,:), 'OCEAN_TEMP_t', &
754  ocean_grid_cartesc_real_vol(:,:,:), &
755  ocean_grid_cartesc_real_totvol )
756  call statistics_total( oia, ois, oie, oja, ojs, oje, &
757  ocean_ice_temp_t(:,:), 'OCEAN_ICE_TEMP_t', &
760  call statistics_total( oia, ois, oie, oja, ojs, oje, &
761  ocean_ice_mass_t(:,:), 'OCEAN_ICE_MASS_t', &
764  endif
765 
766  !########## Set Surface Boundary to coupler ##########
767  call ocean_surface_set( countup=.true. )
768 
769  call prof_rapend ('OCN_CalcTend', 1)
770 
771  return
772  end subroutine ocean_driver_calc_tendency
773 
774  !-----------------------------------------------------------------------------
776  subroutine ocean_driver_update
777  use scale_time, only: &
778  nowdaysec => time_nowdaysec, &
779  dt => time_dtsec_ocean
780  use scale_landuse, only: &
781  exists_ocean => landuse_exists_ocean
782  use mod_ocean_admin, only: &
783  ocean_dyn_type, &
785  use mod_ocean_vars, only: &
786  ocean_temp, &
787  ocean_salt, &
788  ocean_uvel, &
789  ocean_vvel, &
790  ocean_ice_temp, &
791  ocean_ice_mass, &
792  ocean_ice_frac, &
793  ocean_temp_t, &
794  ocean_salt_t, &
795  ocean_uvel_t, &
796  ocean_vvel_t, &
799  ocean_sflx_g, &
801  ocean_sflx_ice, &
804  use scale_ocean_dyn_slab, only: &
805  ocean_dyn_slab, &
807  use scale_ocean_dyn_offline, only: &
809  use scale_ocean_phy_ice_simple, only: &
812  implicit none
813 
814  integer :: i, j
815  !---------------------------------------------------------------------------
816 
817  call prof_rapstart('OCN_Update', 2)
818 
819  !########## Get Surface Boundary from coupler ##########
820  call ocean_surface_get
821 
822  !########## Dynamics / Update ##########
823  select case ( ocean_dyn_type )
824  case ( 'SLAB' )
825 
826  call ocean_dyn_slab( okmax, oks, oke, & ! [IN]
827  oia, ois, oie, & ! [IN]
828  oja, ojs, oje, & ! [IN]
829  ocean_temp_t(:,:,:), & ! [IN]
830  ocean_sflx_g(:,:), & ! [IN]
831  ocean_sflx_water(:,:), & ! [IN]
832  ocean_sflx_ice(:,:), & ! [IN]
833  exists_ocean(:,:), & ! [IN]
834  dt, nowdaysec, & ! [IN]
835  ocean_temp(:,:,:) ) ! [INOUT]
836 
837  case ( 'OFFLINE' )
838 
839  call ocean_dyn_offline( okmax, oks, oke, & ! [IN]
840  oia, ois, oie, & ! [IN]
841  oja, ojs, oje, & ! [IN]
842  exists_ocean(:,:), & ! [IN]
843  dt, nowdaysec, & ! [IN]
844  ocean_temp(:,:,:) ) ! [INOUT]
845 
846  case ( 'INIT' )
847  ! Never update OCEAN_TEMP from initial condition
848  end select
849 
850  !########## Ice / Update ##########
851  select case ( ocean_ice_type )
852  case ( 'SIMPLE' )
853 
854  !$omp parallel do
855  do j = ojs, oje
856  do i = ois, oie
857  ocean_ice_temp(i,j) = ocean_ice_temp(i,j) + ocean_ice_temp_t(i,j) * dt
858  ocean_ice_mass(i,j) = ocean_ice_mass(i,j) + ocean_ice_mass_t(i,j) * dt
859  enddo
860  enddo
861 
862  ! ice adjustment
863  call ocean_phy_ice_adjustment( oia, ois, oie, & ! [IN]
864  oja, ojs, oje, & ! [IN]
865  exists_ocean(:,:), & ! [IN]
866  ocean_dyn_slab_depth, & ! [IN]
867  ocean_temp(oks,:,:), & ! [INOUT]
868  ocean_ice_temp(:,:), & ! [INOUT]
869  ocean_ice_mass(:,:) ) ! [INOUT]
870 
871  ! update ice fraction
872  call ocean_phy_ice_fraction( oia, ois, oie, & ! [IN]
873  oja, ojs, oje, & ! [IN]
874  ocean_ice_mass(:,:), & ! [IN]
875  ocean_ice_frac(:,:) ) ! [OUT]
876 
877  case ( 'INIT' )
878  ! Never update OCEAN_ICE_TEMP, OCEAN_ICE_MASS, OCEAN_ICE_FRAC from initial condition
879  end select
880 
881  call ocean_vars_total
882 
883  !########## History & Monitor ##########
884  call ocean_vars_history
885 
886  call prof_rapend ('OCN_Update', 2)
887 
888  return
889  end subroutine ocean_driver_update
890 
891  !-----------------------------------------------------------------------------
893  subroutine ocean_surface_get
894  use mod_ocean_admin, only: &
895  ocean_do
896  use mod_ocean_vars, only: &
897  atmos_temp, &
898  atmos_pres, &
899  atmos_w, &
900  atmos_u, &
901  atmos_v, &
902  atmos_dens, &
903  atmos_qv, &
904  atmos_pbl, &
905  atmos_sfc_dens, &
906  atmos_sfc_pres, &
908  atmos_cossza, &
909  atmos_sflx_rain, &
911  use mod_cpl_vars, only: &
913  implicit none
914  !---------------------------------------------------------------------------
915 
916  call prof_rapstart('OCN_SfcExch', 2)
917 
918  if ( ocean_do ) then
919  call cpl_getatm_ocn( atmos_temp(:,:), & ! [OUT]
920  atmos_pres(:,:), & ! [OUT]
921  atmos_w(:,:), & ! [OUT]
922  atmos_u(:,:), & ! [OUT]
923  atmos_v(:,:), & ! [OUT]
924  atmos_dens(:,:), & ! [OUT]
925  atmos_qv(:,:), & ! [OUT]
926  atmos_pbl(:,:), & ! [OUT]
927  atmos_sfc_dens(:,:), & ! [OUT]
928  atmos_sfc_pres(:,:), & ! [OUT]
929  atmos_sflx_rad_dn(:,:,:,:), & ! [OUT]
930  atmos_cossza(:,:), & ! [OUT]
931  atmos_sflx_rain(:,:), & ! [OUT]
932  atmos_sflx_snow(:,:) ) ! [OUT]
933  endif
934 
935  call prof_rapend ('OCN_SfcExch', 2)
936 
937  return
938  end subroutine ocean_surface_get
939 
940  !-----------------------------------------------------------------------------
942  subroutine ocean_surface_set( countup )
943  use mod_ocean_admin, only: &
944  ocean_do
945  use mod_ocean_vars, only: &
946  ocean_sfc_temp, &
948  ocean_sfc_z0m, &
949  ocean_sfc_z0h, &
950  ocean_sfc_z0e, &
951  ocean_sflx_mw, &
952  ocean_sflx_mu, &
953  ocean_sflx_mv, &
954  ocean_sflx_sh, &
955  ocean_sflx_lh, &
956  ocean_sflx_qtrc, &
957  ocean_u10, &
958  ocean_v10, &
959  ocean_t2, &
960  ocean_q2, &
962  use mod_cpl_vars, only: &
963  cpl_putocn
964  implicit none
965 
966  logical, intent(in) :: countup
967  !---------------------------------------------------------------------------
968 
969  call prof_rapstart('OCN_SfcExch', 2)
970 
971  if ( ocean_do ) then
972  call cpl_putocn( ocean_sfc_temp(:,:), & ! [IN]
973  ocean_sfc_albedo(:,:,:,:), & ! [IN]
974  ocean_sfc_z0m(:,:), & ! [IN]
975  ocean_sfc_z0h(:,:), & ! [IN]
976  ocean_sfc_z0e(:,:), & ! [IN]
977  ocean_sflx_mw(:,:), & ! [IN]
978  ocean_sflx_mu(:,:), & ! [IN]
979  ocean_sflx_mv(:,:), & ! [IN]
980  ocean_sflx_sh(:,:), & ! [IN]
981  ocean_sflx_lh(:,:), & ! [IN]
982  ocean_sflx_g(:,:), & ! [IN]
983  ocean_sflx_qtrc(:,:,:), & ! [IN]
984  ocean_u10(:,:), & ! [IN]
985  ocean_v10(:,:), & ! [IN]
986  ocean_t2(:,:), & ! [IN]
987  ocean_q2(:,:), & ! [IN]
988  countup ) ! [IN]
989  endif
990 
991  call prof_rapend ('OCN_SfcExch', 2)
992 
993  return
994  end subroutine ocean_surface_set
995 
996 end module mod_ocean_driver
module ATMOS admin
real(dp), public time_dtsec_ocean
time interval of ocean step [sec]
Definition: scale_time.F90:50
module ocean / physics / surface albedo / nakajima00
real(rp), dimension(:,:), allocatable, public ocean_sflx_mu
ocean surface u-momentum flux [kg/m/s2]
module coupler / surface fixed temp model
real(rp), dimension(:,:), allocatable, public atmos_cossza
character(len=h_short), public ocean_sfc_type
subroutine, public ocean_phy_roughness_seaice(OIA, OIS, OIE, OJA, OJS, OJE, Z0M, Z0H, Z0E)
module coupler / surface-atmospehre
subroutine, public ocean_driver_setup
Setup.
real(rp), dimension(:,:,:), allocatable, public ocean_grid_cartesc_real_vol
volume of grid cell
subroutine, public ocean_dyn_offline(OKMAX, OKS, OKE, OIA, OIS, OIE, OJA, OJS, OJE, calc_flag, dt, NOWDAYSEC, OCEAN_TEMP)
Slab ocean model.
integer, parameter, public i_r_vis
module ocean / physics / surface thermal conductivity
real(rp), dimension(:,:,:), allocatable, public ocean_uvel_t
tendency of OCEAN_OCN_UVEL
subroutine, public ocean_phy_roughness_const(OIA, OIS, OIE, OJA, OJS, OJE, Z0M, Z0H, Z0E)
logical, public ocean_do
subroutine, public ocean_vars_history
History output set for ocean variables.
real(rp), dimension(:,:), allocatable, public ocean_sflx_mw
ocean surface w-momentum flux [kg/m/s2]
real(rp), dimension(:,:), allocatable, public ocean_ice_temp_t
tendency of OCEAN_ICE_TEMP
subroutine, public cpl_phy_sfc_fixed_temp_setup
Setup.
subroutine, public ocean_phy_albedo_seaice_setup
subroutine, public ocean_surface_get
Get surface boundary from other model.
real(dp), public time_nowdaysec
second of current time [sec]
Definition: scale_time.F90:73
real(rp), dimension(:,:), allocatable, public ocean_sfc_temp
ocean surface skin temperature [K]
real(rp), dimension(:,:), allocatable, public ocean_ice_mass
sea ice mass [kg]
subroutine, public ocean_phy_albedo_nakajima00(OIA, OIS, OIE, OJA, OJS, OJE, cosSZA, SFC_albedo)
subroutine, public ocean_phy_roughness_const_setup
integer, public qa
module ATMOSPHERE / Physics Chemistry
real(rp), dimension(:,:), allocatable, public ocean_grid_cartesc_real_area
area of grid cell
integer, parameter, public n_rad_dir
integer, parameter, public n_rad_rgn
real(rp), public ocean_grid_cartesc_real_totarea
total area
subroutine, public ocean_driver_update
Ocean step.
real(rp), dimension(:,:), allocatable, public ocean_u10
ocean surface velocity u at 10m [m/s]
subroutine, public ocean_phy_albedo_const(OIA, OIS, OIE, OJA, OJS, OJE, SFC_albedo)
subroutine, public ocean_phy_roughness_miller92(OIA, OIS, OIE, OJA, OJS, OJE, Uabs, Z0M, Z0H, Z0E)
subroutine, public atmos_phy_ch_driver_ocean_flux(SFLX_QTRC)
Driver.
logical, public statistics_checktotal
calc&report variable totals to logfile?
real(rp), dimension(:,:,:), allocatable, public ocean_temp_t
tendency of OCEAN_OCN_TEMP
real(rp), dimension(:,:), allocatable, public atmos_w
subroutine, public ocean_phy_albedo_seaice(OIA, OIS, OIE, OJA, OJS, OJE, SFC_albedo)
real(rp), dimension(:,:), allocatable, public ocean_sflx_g
ocean surface water heat flux [J/m2/s]
real(rp), dimension(:,:), allocatable, public atmos_v
real(rp), dimension(:,:), allocatable, public atmos_grid_cartesc_real_z1
Height of the lowermost grid from surface (cell center) [m].
real(rp), dimension(:,:,:), allocatable, public ocean_sflx_qtrc
ocean surface tracer flux [kg/m2/s]
real(rp), dimension(:,:), allocatable, public ocean_sflx_lh
ocean surface latent heat flux [J/m2/s]
module TRACER
real(rp), dimension(:,:), allocatable, public ocean_t2
ocean surface temperature at 2m [K]
subroutine, public ocean_phy_ice_adjustment(OIA, OIS, OIE, OJA, OJS, OJE, calc_flag, OCEAN_DEPTH, OCEAN_TEMP, ICE_TEMP, ICE_MASS)
character(len=h_short), public ocean_alb_type
real(rp), public ocean_dyn_slab_depth
water depth of slab ocean [m]
module atmosphere / hydrometeor
real(rp), dimension(:,:), allocatable, public ocean_ice_frac
area fraction of sea ice [1]
subroutine, public ocean_dyn_slab(OKMAX, OKS, OKE, OIA, OIS, OIE, OJA, OJS, OJE, OCEAN_TEMP_t, OCEAN_SFLX_G, OCEAN_SFLX_water, OCEAN_SFLX_ice, calc_flag, dt, NOWDAYSEC, OCEAN_TEMP)
Slab ocean model.
real(rp), dimension(:,:,:), allocatable, public ocean_salt
ocean salinity [PSU]
real(rp), dimension(:,:), allocatable, public atmos_sflx_snow
module LANDUSE
real(rp), dimension(:,:), allocatable, public atmos_sfc_dens
real(rp), dimension(:,:), allocatable, public ocean_sfc_z0h
ocean surface roughness length for heat [m]
module ocean / grid / cartesianC / real
module OCEAN driver
real(rp), dimension(:,:), allocatable, public atmos_sfc_pres
subroutine, public ocean_surface_set(countup)
Put surface boundary to other model.
real(rp), dimension(:,:), allocatable, public ocean_ice_mass_t
tendency of OCEAN_ICE_MASS
real(rp), dimension(:,:,:), allocatable, public ocean_temp
ocean temperature [K]
module COUPLER Variables
module PROCESS
Definition: scale_prc.F90:11
subroutine, public ocean_vars_total
Budget monitor for ocean.
character(len=h_short), public ocean_dyn_type
subroutine, public ocean_dyn_slab_setup
Setup.
character(len=h_short), public ocean_ice_type
real(rp), dimension(:,:), allocatable, public ocean_q2
ocean surface water vapor at 2m [kg/kg]
subroutine, public ocean_phy_roughness_seaice_setup
subroutine, public cpl_putocn(SFC_TEMP, SFC_albedo, SFC_Z0M, SFC_Z0H, SFC_Z0E, SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, SFLX_G, SFLX_QTRC, U10, V10, T2, Q2, countup)
module TIME
Definition: scale_time.F90:16
real(rp), dimension(:,:), allocatable, public atmos_pbl
real(rp), public ocean_grid_cartesc_real_totvol
total volume
module Ocean admin
module ocean / physics / surface albedo
logical, public atmos_sw_phy_ch
real(rp), dimension(:,:), allocatable, public atmos_temp
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:338
module ocean / dynamics / offline
character(len=h_short), public ocean_rgn_type
integer, parameter, public i_r_direct
module ocean / physics / surface roughness length / miller92
real(rp), dimension(:,:), allocatable, public ocean_v10
ocean surface velocity v at 10m [m/s]
subroutine, public prof_rapstart(rapname_base, level)
Start raptime.
Definition: scale_prof.F90:157
subroutine, public ocean_phy_tc_seaice_setup
module ocean / grid / cartesianC / index
module ocean / physics / surface roughness length / moon07
real(rp), dimension(:,:), allocatable, public atmos_sflx_rain
subroutine, public ocean_phy_ice_fraction(OIA, OIS, OIE, OJA, OJS, OJE, ICE_MASS, ICE_FRAC)
real(rp), dimension(:,:), allocatable, public ocean_sflx_ice
ocean surface ice water flux [kg/m2/s]
module profiler
Definition: scale_prof.F90:11
real(rp), dimension(:,:), allocatable, public atmos_u
logical, dimension(:,:), allocatable, public landuse_exists_ocean
ocean calculation flag
subroutine, public ocean_dyn_offline_setup
Setup.
real(rp), dimension(:,:,:), allocatable, public ocean_vvel
ocean meridional velocity [m/s]
module Atmosphere GRID CartesC Real(real space)
real(rp), dimension(:,:,:), allocatable, public ocean_salt_t
tendency of OCEAN_OCN_SALT
subroutine, public ocean_phy_roughness_moon07(OIA, OIS, OIE, OJA, OJS, OJE, Uabs, Z1, Z0M, Z0H, Z0E)
module ocean / physics / ice / simple
module PRECISION
real(rp), dimension(:,:), allocatable, public ocean_sflx_mv
ocean surface v-momentum flux [kg/m/s2]
subroutine, public ocean_driver_calc_tendency(force)
Calculate tendency.
module ocean / dynamics / slab
real(rp), dimension(:,:), allocatable, public atmos_pres
real(rp), dimension(:,:), allocatable, public ocean_sflx_water
ocean surface liquid water flux [kg/m2/s]
real(rp), dimension(:,:), allocatable, public atmos_dens
module Statistics
integer, parameter, public i_r_ir
real(rp), dimension(:,:), allocatable, public ocean_ice_temp
sea ice temperature [K]
module STDIO
Definition: scale_io.F90:10
real(rp), dimension(:,:), allocatable, public ocean_ocn_z0m
surface roughness length for momentum, open ocean [m]
integer, parameter, public i_r_diffuse
real(rp), dimension(:,:,:), allocatable, public ocean_vvel_t
tendency of OCEAN_OCN_VVEL
real(rp), dimension(:,:,:,:), allocatable, public ocean_sfc_albedo
ocean surface albedo (direct/diffuse,IR/near-IR/VIS) (0-1)
module ocean / physics / surface roughness length
subroutine, public prof_rapend(rapname_base, level)
Save raptime.
Definition: scale_prof.F90:210
subroutine, public cpl_phy_sfc_fixed_temp(IA, IS, IE, JA, JS, JE, TMPA, PRSA, WA, UA, VA, RHOA, QVA, LH, Z1, PBL, RHOS, PRSS, RFLXD, TMPS, QVEF, ALBEDO, Rb, Z0M, Z0H, Z0E, calc_flag, dt, ZMFLX, XMFLX, YMFLX, SHFLX, QVFLX, GFLX, U10, V10, T2, Q2)
real(rp), dimension(:,:), allocatable, public ocean_sfc_z0m
ocean surface roughness length for momentum [m]
subroutine, public ocean_phy_tc_seaice(OIA, OIS, OIE, OJA, OJS, OJE, ICE_MASS, ICE_FRAC, TC_dz)
real(rp), dimension(:,:,:), allocatable, public ocean_uvel
ocean zonal velocity [m/s]
module OCEAN Variables
real(rp), dimension(:,:), allocatable, public ocean_sfc_z0e
ocean surface roughness length for vapor [m]
real(rp), dimension(:,:), allocatable, public atmos_qv
subroutine, public ocean_phy_albedo_const_setup
subroutine, public cpl_getatm_ocn(TEMP, PRES, W, U, V, DENS, QV, PBL, SFC_DENS, SFC_PRES, SFLX_rad_dn, cosSZA, SFLX_rain, SFLX_snow)
module file_history
subroutine, public ocean_phy_ice_simple(OIA, OIS, OIE, OJA, OJS, OJE, sflx_QV, sflx_rain, sflx_snow, sflx_hbalance, subsfc_temp, TC_dz, ICE_TEMP, ICE_MASS, calc_flag, dt, ICE_TEMP_t, ICE_MASS_t, sflx_G, sflx_water, sflx_ice)
Slab ocean model.
real(rp), dimension(:,:,:,:), allocatable, public atmos_sflx_rad_dn
real(rp), dimension(:,:), allocatable, public ocean_sflx_sh
ocean surface sensible heat flux [J/m2/s]