SCALE-RM
mod_ocean_vars.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
10 !-------------------------------------------------------------------------------
11 #include "scalelib.h"
13  !-----------------------------------------------------------------------------
14  !
15  !++ used modules
16  !
17  use scale_precision
18  use scale_io
19  use scale_prof
20  use scale_debug
22  use scale_tracer
24  !-----------------------------------------------------------------------------
25  implicit none
26  private
27  !-----------------------------------------------------------------------------
28  !
29  !++ Public procedure
30  !
31  public :: ocean_vars_setup
32  public :: ocean_vars_restart_read
33  public :: ocean_vars_restart_write
34  public :: ocean_vars_history
35  public :: ocean_vars_total
36 
38  public :: ocean_vars_restart_open
41  public :: ocean_vars_restart_close
42 
43  !-----------------------------------------------------------------------------
44  !
45  !++ Public parameters & variables
46  !
47  logical, public :: ocean_restart_output = .false.
48 
49  character(len=H_LONG), public :: ocean_restart_in_basename = ''
50  logical, public :: ocean_restart_in_aggregate
51  logical, public :: ocean_restart_in_postfix_timelabel = .false.
52  character(len=H_LONG), public :: ocean_restart_out_basename = ''
53  logical, public :: ocean_restart_out_aggregate
54  logical, public :: ocean_restart_out_postfix_timelabel = .true.
55  character(len=H_MID), public :: ocean_restart_out_title = 'OCEAN restart'
56  character(len=H_SHORT), public :: ocean_restart_out_dtype = 'DEFAULT'
57 
58  ! prognostic variables
59  real(RP), public, allocatable :: ocean_temp (:,:,:)
60  real(RP), public, allocatable :: ocean_salt (:,:,:)
61  real(RP), public, allocatable :: ocean_uvel (:,:,:)
62  real(RP), public, allocatable :: ocean_vvel (:,:,:)
63 
64  real(RP), public, allocatable :: ocean_ocn_z0m (:,:)
65 
66  real(RP), public, allocatable :: ocean_ice_temp (:,:)
67  real(RP), public, allocatable :: ocean_ice_mass (:,:)
68 
69  real(RP), public, allocatable :: ocean_sfc_temp (:,:)
70  real(RP), public, allocatable :: ocean_sfc_albedo (:,:,:,:)
71  real(RP), public, allocatable :: ocean_sfc_z0m (:,:)
72  real(RP), public, allocatable :: ocean_sfc_z0h (:,:)
73  real(RP), public, allocatable :: ocean_sfc_z0e (:,:)
74 
75  ! tendency variables
76  real(RP), public, allocatable :: ocean_temp_t (:,:,:)
77  real(RP), public, allocatable :: ocean_salt_t (:,:,:)
78  real(RP), public, allocatable :: ocean_uvel_t (:,:,:)
79  real(RP), public, allocatable :: ocean_vvel_t (:,:,:)
80 
81  real(RP), public, allocatable :: ocean_ice_temp_t (:,:)
82  real(RP), public, allocatable :: ocean_ice_mass_t (:,:)
83 
84  ! recieved from lowermost atmosphere
85  real(RP), public, allocatable :: atmos_temp (:,:)
86  real(RP), public, allocatable :: atmos_pres (:,:)
87  real(RP), public, allocatable :: atmos_w (:,:)
88  real(RP), public, allocatable :: atmos_u (:,:)
89  real(RP), public, allocatable :: atmos_v (:,:)
90  real(RP), public, allocatable :: atmos_dens (:,:)
91  real(RP), public, allocatable :: atmos_qv (:,:)
92  real(RP), public, allocatable :: atmos_pbl (:,:)
93  real(RP), public, allocatable :: atmos_sfc_dens (:,:)
94  real(RP), public, allocatable :: atmos_sfc_pres (:,:)
95  real(RP), public, allocatable :: atmos_sflx_rad_dn(:,:,:,:)
96  real(RP), public, allocatable :: atmos_cossza (:,:)
97  real(RP), public, allocatable :: atmos_sflx_rain (:,:)
98  real(RP), public, allocatable :: atmos_sflx_snow (:,:)
99 
100  ! send to lowermost atmosphere
101  real(RP), public, allocatable :: ocean_sflx_mw (:,:)
102  real(RP), public, allocatable :: ocean_sflx_mu (:,:)
103  real(RP), public, allocatable :: ocean_sflx_mv (:,:)
104  real(RP), public, allocatable :: ocean_sflx_sh (:,:)
105  real(RP), public, allocatable :: ocean_sflx_lh (:,:)
106  real(RP), public, allocatable :: ocean_sflx_qtrc (:,:,:)
107  real(RP), public, allocatable :: ocean_u10 (:,:)
108  real(RP), public, allocatable :: ocean_v10 (:,:)
109  real(RP), public, allocatable :: ocean_t2 (:,:)
110  real(RP), public, allocatable :: ocean_q2 (:,:)
111 
112  ! send to uppermost ocean
113  real(RP), public, allocatable :: ocean_sflx_g (:,:)
114  real(RP), public, allocatable :: ocean_sflx_water (:,:)
115  real(RP), public, allocatable :: ocean_sflx_ice (:,:)
116 
117  ! diagnostic value
118  real(RP), public, allocatable :: ocean_ice_frac (:,:)
119 
120  !-----------------------------------------------------------------------------
121  !
122  !++ Private procedure
123  !
124  !-----------------------------------------------------------------------------
125  !
126  !++ Private parameters & variables
127  !
128  logical, private :: ocean_vars_checkrange = .false.
129  logical, private :: ocean_restart_in_check_coordinates = .true.
130 
131  integer, private, parameter :: vmax = 27
132  integer, private, parameter :: i_temp = 1
133  integer, private, parameter :: i_salt = 2
134  integer, private, parameter :: i_uvel = 3
135  integer, private, parameter :: i_vvel = 4
136  integer, private, parameter :: i_ocn_z0m = 5
137  integer, private, parameter :: i_ice_temp = 6
138  integer, private, parameter :: i_ice_mass = 7
139  integer, private, parameter :: i_sfc_temp = 8
140  integer, private, parameter :: i_sfc_alb_ir_dir = 9
141  integer, private, parameter :: i_sfc_alb_ir_dif = 10
142  integer, private, parameter :: i_sfc_alb_nir_dir = 11
143  integer, private, parameter :: i_sfc_alb_nir_dif = 12
144  integer, private, parameter :: i_sfc_alb_vis_dir = 13
145  integer, private, parameter :: i_sfc_alb_vis_dif = 14
146  integer, private, parameter :: i_sfc_z0m = 15
147  integer, private, parameter :: i_sfc_z0h = 16
148  integer, private, parameter :: i_sfc_z0e = 17
149  integer, private, parameter :: i_sflx_mw = 18
150  integer, private, parameter :: i_sflx_mu = 19
151  integer, private, parameter :: i_sflx_mv = 20
152  integer, private, parameter :: i_sflx_sh = 21
153  integer, private, parameter :: i_sflx_lh = 22
154  integer, private, parameter :: i_sflx_evap = 23
155  integer, private, parameter :: i_sflx_g = 24
156  integer, private, parameter :: i_sflx_water = 25
157  integer, private, parameter :: i_sflx_ice = 26
158  integer, private, parameter :: i_ice_frac = 27
159 
160  character(len=H_SHORT), private :: var_name(vmax)
161  character(len=H_MID), private :: var_desc(vmax)
162  character(len=H_MID), private :: var_stdn(vmax)
163  character(len=H_SHORT), private :: var_unit(vmax)
164  integer, private :: var_id(vmax)
165  integer, private :: restart_fid = -1 ! file ID
166 
167  data var_name / 'OCEAN_TEMP', &
168  'OCEAN_SALT', &
169  'OCEAN_UVEL', &
170  'OCEAN_VVEL', &
171  'OCEAN_OCN_Z0M', &
172  'OCEAN_ICE_TEMP', &
173  'OCEAN_ICE_MASS', &
174  'OCEAN_SFC_TEMP', &
175  'OCEAN_SFC_ALB_IR_dir', &
176  'OCEAN_SFC_ALB_IR_dif', &
177  'OCEAN_SFC_ALB_NIR_dir', &
178  'OCEAN_SFC_ALB_NIR_dif', &
179  'OCEAN_SFC_ALB_VIS_dir', &
180  'OCEAN_SFC_ALB_VIS_dif', &
181  'OCEAN_SFC_Z0M', &
182  'OCEAN_SFC_Z0H', &
183  'OCEAN_SFC_Z0E', &
184  'OCEAN_SFLX_MW', &
185  'OCEAN_SFLX_MU', &
186  'OCEAN_SFLX_MV', &
187  'OCEAN_SFLX_SH', &
188  'OCEAN_SFLX_LH', &
189  'OCEAN_SFLX_evap', &
190  'OCEAN_SFLX_G', &
191  'OCEAN_SFLX_water', &
192  'OCEAN_SFLX_ice', &
193  'OCEAN_ICE_FRAC' /
194 
195  data var_desc / 'ocean temperature', &
196  'ocean salinity', &
197  'ocean u-velocity', &
198  'ocean v-velocity', &
199  'open ocean roughness length (momentum)', &
200  'seaice temperature', &
201  'seaice mass', &
202  'ocean surface skin temperature', &
203  'ocean surface albedo for IR (direct)', &
204  'ocean surface albedo for IR (diffuse)', &
205  'ocean surface albedo for NIR (direct)', &
206  'ocean surface albedo for NIR (diffuse)', &
207  'ocean surface albedo for VIS (direct)', &
208  'ocean surface albedo for VIS (diffuse)', &
209  'ocean surface roughness length (momentum)', &
210  'ocean surface roughness length (heat)', &
211  'ocean surface roughness length (vapor)', &
212  'ocean surface w-momentum flux (upward)', &
213  'ocean surface u-momentum flux (upward)', &
214  'ocean surface v-momentum flux (upward)', &
215  'ocean surface sensible heat flux (upward)', &
216  'ocean surface latent heat flux (upward)', &
217  'ocean surface water vapor flux (upward)', &
218  'ocean subsurface heat flux (downward)', &
219  'ocean surface liquid water flux (downward)', &
220  'ocean surface ice water flux (downward)', &
221  'seaice fraction' /
222 
223  data var_stdn / 'sea_water_temperature', &
224  'sea_water_salinity', &
225  'eastward_sea_water_velocity', &
226  'northward_sea_water_velocity', &
227  '', &
228  '', &
229  '', &
230  'sea_surface_skin_temperature', &
231  '', &
232  '', &
233  '', &
234  '', &
235  '', &
236  '', &
237  '', &
238  '', &
239  '', &
240  '', &
241  '', &
242  '', &
243  '', &
244  '', &
245  '', &
246  '', &
247  '', &
248  '', &
249  '' /
250 
251  data var_unit / 'K', &
252  'PSU', &
253  'm/s', &
254  'm/s', &
255  'm', &
256  'K', &
257  'kg/m2', &
258  'K', &
259  '1', &
260  '1', &
261  '1', &
262  '1', &
263  '1', &
264  '1', &
265  'm', &
266  'm', &
267  'm', &
268  'kg/m2/s', &
269  'kg/m2/s', &
270  'kg/m2/s', &
271  'J/m2/s', &
272  'J/m2/s', &
273  'kg/m2/s', &
274  'J/m2/s', &
275  'kg/m2/s', &
276  'kg/m2/s', &
277  '1' /
278 
279  !-----------------------------------------------------------------------------
280 contains
281  !-----------------------------------------------------------------------------
283  subroutine ocean_vars_setup
284  use scale_prc, only: &
285  prc_abort
286  use scale_const, only: &
287  undef => const_undef
288  implicit none
289 
290  namelist / param_ocean_vars / &
294  ocean_restart_in_check_coordinates, &
301  ocean_vars_checkrange
302 
303  integer :: ierr
304  integer :: iv
305  !---------------------------------------------------------------------------
306 
307  log_newline
308  log_info("OCEAN_vars_setup",*) 'Setup'
309 
310  allocate( ocean_temp(okmax,oia,oja) )
311  allocate( ocean_salt(okmax,oia,oja) )
312  allocate( ocean_uvel(okmax,oia,oja) )
313  allocate( ocean_vvel(okmax,oia,oja) )
314  ocean_temp(:,:,:) = undef
315  ocean_salt(:,:,:) = undef
316  ocean_uvel(:,:,:) = undef
317  ocean_vvel(:,:,:) = undef
318 
319  allocate( ocean_ocn_z0m(oia,oja) )
320  ocean_ocn_z0m(:,:) = undef
321 
322  allocate( ocean_ice_temp(oia,oja) )
323  allocate( ocean_ice_mass(oia,oja) )
324  ocean_ice_temp(:,:) = undef
325  ocean_ice_mass(:,:) = undef
326 
327  allocate( ocean_sfc_temp(oia,oja) )
329  allocate( ocean_sfc_z0m(oia,oja) )
330  allocate( ocean_sfc_z0h(oia,oja) )
331  allocate( ocean_sfc_z0e(oia,oja) )
332  ocean_sfc_temp(:,:) = undef
333  ocean_sfc_albedo(:,:,:,:) = undef
334  ocean_sfc_z0m(:,:) = undef
335  ocean_sfc_z0h(:,:) = undef
336  ocean_sfc_z0e(:,:) = undef
337 
338  allocate( ocean_temp_t(okmax,oia,oja) )
339  allocate( ocean_salt_t(okmax,oia,oja) )
340  allocate( ocean_uvel_t(okmax,oia,oja) )
341  allocate( ocean_vvel_t(okmax,oia,oja) )
342  ocean_temp_t(:,:,:) = undef
343  ocean_salt_t(:,:,:) = undef
344  ocean_uvel_t(:,:,:) = undef
345  ocean_vvel_t(:,:,:) = undef
346 
347  allocate( ocean_ice_temp_t(oia,oja) )
348  allocate( ocean_ice_mass_t(oia,oja) )
349  ocean_ice_temp_t(:,:) = undef
350  ocean_ice_mass_t(:,:) = undef
351 
352  allocate( atmos_temp(oia,oja) )
353  allocate( atmos_pres(oia,oja) )
354  allocate( atmos_w(oia,oja) )
355  allocate( atmos_u(oia,oja) )
356  allocate( atmos_v(oia,oja) )
357  allocate( atmos_dens(oia,oja) )
358  allocate( atmos_qv(oia,oja) )
359  allocate( atmos_pbl(oia,oja) )
360  allocate( atmos_sfc_dens(oia,oja) )
361  allocate( atmos_sfc_pres(oia,oja) )
363  allocate( atmos_cossza(oia,oja) )
364  allocate( atmos_sflx_rain(oia,oja) )
365  allocate( atmos_sflx_snow(oia,oja) )
366  atmos_temp(:,:) = undef
367  atmos_pres(:,:) = undef
368  atmos_w(:,:) = undef
369  atmos_u(:,:) = undef
370  atmos_v(:,:) = undef
371  atmos_dens(:,:) = undef
372  atmos_qv(:,:) = undef
373  atmos_pbl(:,:) = undef
374  atmos_sfc_dens(:,:) = undef
375  atmos_sfc_pres(:,:) = undef
376  atmos_sflx_rad_dn(:,:,:,:) = undef
377  atmos_cossza(:,:) = undef
378  atmos_sflx_rain(:,:) = undef
379  atmos_sflx_snow(:,:) = undef
380 
381  allocate( ocean_sflx_mw(oia,oja) )
382  allocate( ocean_sflx_mu(oia,oja) )
383  allocate( ocean_sflx_mv(oia,oja) )
384  allocate( ocean_sflx_sh(oia,oja) )
385  allocate( ocean_sflx_lh(oia,oja) )
386  allocate( ocean_sflx_qtrc(oia,oja,qa) )
387  allocate( ocean_u10(oia,oja) )
388  allocate( ocean_v10(oia,oja) )
389  allocate( ocean_t2(oia,oja) )
390  allocate( ocean_q2(oia,oja) )
391  ocean_sflx_mw(:,:) = undef
392  ocean_sflx_mu(:,:) = undef
393  ocean_sflx_mv(:,:) = undef
394  ocean_sflx_sh(:,:) = undef
395  ocean_sflx_lh(:,:) = undef
396  ocean_sflx_qtrc(:,:,:) = undef
397  ocean_u10(:,:) = undef
398  ocean_v10(:,:) = undef
399  ocean_t2(:,:) = undef
400  ocean_q2(:,:) = undef
401 
402  allocate( ocean_sflx_g(oia,oja) )
403  allocate( ocean_sflx_water(oia,oja) )
404  allocate( ocean_sflx_ice(oia,oja) )
405  ocean_sflx_g(:,:) = undef
406  ocean_sflx_water(:,:) = undef
407  ocean_sflx_ice(:,:) = undef
408 
409  allocate( ocean_ice_frac(oia,oja) )
410  ocean_ice_frac(:,:) = undef
411 
412  !--- read namelist
413  rewind(io_fid_conf)
414  read(io_fid_conf,nml=param_ocean_vars,iostat=ierr)
415  if( ierr < 0 ) then !--- missing
416  log_info("OCEAN_vars_setup",*) 'Not found namelist. Default used.'
417  elseif( ierr > 0 ) then !--- fatal error
418  log_error("OCEAN_vars_setup",*) 'Not appropriate names in namelist PARAM_OCEAN_VARS. Check!'
419  call prc_abort
420  endif
421  log_nml(param_ocean_vars)
422 
423  log_newline
424  log_info("OCEAN_vars_setup",*) 'List of prognostic variables (OCEAN) '
425  log_info_cont('(1x,A,A24,A,A48,A,A12,A)') &
426  ' |','VARNAME ','|','DESCRIPTION ','[','UNIT ',']'
427  do iv = 1, vmax
428  log_info_cont('(1x,A,I3,A,A24,A,A48,A,A12,A)') &
429  'NO.',iv,'|',var_name(iv),'|',var_desc(iv),'[',var_unit(iv),']'
430  enddo
431 
432  log_newline
433  if ( ocean_restart_in_basename /= '' ) then
434  log_info("OCEAN_vars_setup",*) 'Restart input? : YES, file = ', trim(ocean_restart_in_basename)
435  log_info_cont(*) 'Add timelabel? : ', ocean_restart_in_postfix_timelabel
436  else
437  log_info("OCEAN_vars_setup",*) 'Restart input? : NO'
438  endif
439  if ( ocean_restart_output &
440  .AND. ocean_restart_out_basename /= '' ) then
441  log_info("OCEAN_vars_setup",*) 'Restart output? : YES, file = ', trim(ocean_restart_out_basename)
442  log_info_cont(*) 'Add timelabel? : ', ocean_restart_out_postfix_timelabel
443  else
444  log_info("OCEAN_vars_setup",*) 'Restart output? : NO'
445  ocean_restart_output = .false.
446  endif
447 
448  return
449  end subroutine ocean_vars_setup
450 
451  !-----------------------------------------------------------------------------
453  subroutine ocean_vars_restart_open
454  use scale_time, only: &
456  use scale_file_cartesc, only: &
458  file_cartesc_check_coordinates
459  use mod_ocean_admin, only: &
460  ocean_do
461  implicit none
462 
463  character(len=19) :: timelabel
464  character(len=H_LONG) :: basename
465  !---------------------------------------------------------------------------
466 
467  log_newline
468  log_info("OCEAN_vars_restart_open",*) 'Open restart file (OCEAN) '
469 
470  if ( ocean_do .and. ocean_restart_in_basename /= '' ) then
471 
473  call time_gettimelabel( timelabel )
474  basename = trim(ocean_restart_in_basename)//'_'//trim(timelabel)
475  else
476  basename = trim(ocean_restart_in_basename)
477  endif
478  log_info_cont(*) 'basename: ', trim(basename)
479 
480  call file_cartesc_open( basename, restart_fid, aggregate=ocean_restart_in_aggregate )
481 
482  if( ocean_restart_in_check_coordinates ) call file_cartesc_check_coordinates( restart_fid )
483 
484  else
485  log_info_cont(*) 'restart file for ocean is not specified.'
486  endif
487 
488  return
489  end subroutine ocean_vars_restart_open
490 
491  !-----------------------------------------------------------------------------
493  subroutine ocean_vars_restart_read
494  use scale_prc, only: &
495  prc_abort
496  use scale_file, only: &
498  use scale_file_cartesc, only: &
499  file_cartesc_read, &
501  use scale_ocean_phy_ice_simple, only: &
504  use mod_ocean_admin, only: &
506  implicit none
507  !---------------------------------------------------------------------------
508 
509  if ( restart_fid /= -1 ) then
510  log_newline
511  log_info("OCEAN_vars_restart_read",*) 'Read from restart file (OCEAN) '
512 
513  call file_cartesc_read( restart_fid, var_name(i_temp), 'OXY', & ! [IN]
514  ocean_temp(:,:,:) ) ! [OUT]
515 ! call FILE_CARTESC_read( restart_fid, VAR_NAME(I_SALT), 'OXY', & ! [IN]
516 ! OCEAN_SALT(:,:,:) ) ! [OUT]
517 ! call FILE_CARTESC_read( restart_fid, VAR_NAME(I_UVEL), 'OXY', & ! [IN]
518 ! OCEAN_UVEL(:,:,:) ) ! [OUT]
519 ! call FILE_CARTESC_read( restart_fid, VAR_NAME(I_VVEL), 'OXY', & ! [IN]
520 ! OCEAN_VVEL(:,:,:) ) ! [OUT]
521  call file_cartesc_read( restart_fid, var_name(i_ocn_z0m), 'XY', & ! [IN]
522  ocean_ocn_z0m(:,:) ) ! [OUT]
523  call file_cartesc_read( restart_fid, var_name(i_ice_temp), 'XY', & ! [IN]
524  ocean_ice_temp(:,:) ) ! [OUT]
525  call file_cartesc_read( restart_fid, var_name(i_ice_mass), 'XY', & ! [IN]
526  ocean_ice_mass(:,:) ) ! [OUT]
527  call file_cartesc_read( restart_fid, var_name(i_sfc_temp), 'XY', & ! [IN]
528  ocean_sfc_temp(:,:) ) ! [OUT]
529  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_ir_dir), 'XY', & ! [IN]
530  ocean_sfc_albedo(:,:,i_r_direct ,i_r_ir ) ) ! [OUT]
531  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_ir_dif), 'XY', & ! [IN]
532  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_ir ) ) ! [OUT]
533  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_nir_dir), 'XY', & ! [IN]
534  ocean_sfc_albedo(:,:,i_r_direct ,i_r_nir) ) ! [OUT]
535  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_nir_dif), 'XY', & ! [IN]
536  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_nir) ) ! [OUT]
537  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_vis_dir), 'XY', & ! [IN]
538  ocean_sfc_albedo(:,:,i_r_direct ,i_r_vis) ) ! [OUT]
539  call file_cartesc_read( restart_fid, var_name(i_sfc_alb_vis_dif), 'XY', & ! [IN]
540  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_vis) ) ! [OUT]
541  call file_cartesc_read( restart_fid, var_name(i_sfc_z0m), 'XY', & ! [IN]
542  ocean_sfc_z0m(:,:) ) ! [OUT]
543  call file_cartesc_read( restart_fid, var_name(i_sfc_z0h), 'XY', & ! [IN]
544  ocean_sfc_z0h(:,:) ) ! [OUT]
545  call file_cartesc_read( restart_fid, var_name(i_sfc_z0e), 'XY', & ! [IN]
546  ocean_sfc_z0e(:,:) ) ! [OUT]
547 
548  if( file_get_aggregate(restart_fid) ) call file_cartesc_flush( restart_fid ) ! commit all pending read requests
549 
550 
551  if ( ocean_ice_type == 'NONE' ) then
553  ocean_ice_frac(:,:) = 0.0_rp
554  else
556  call ocean_phy_ice_fraction( oia, ois, oie, & ! [IN]
557  oja, ojs, oje, & ! [IN]
558  ocean_ice_mass(:,:), & ! [IN]
559  ocean_ice_frac(:,:) ) ! [OUT]
560  endif
561 
562  call ocean_vars_total
563  else
564  log_error("OCEAN_vars_restart_read",*) 'invalid restart file ID for ocean.'
565  call prc_abort
566  endif
567 
568  return
569  end subroutine ocean_vars_restart_read
570 
571  !-----------------------------------------------------------------------------
573  subroutine ocean_vars_history
574  use scale_file_history, only: &
575  file_history_in
576  use scale_atmos_hydrometeor, only: &
577  i_qv
578  implicit none
579  !---------------------------------------------------------------------------
580 
581  call prof_rapstart('OCN_History', 1)
582 
583  if ( ocean_vars_checkrange ) then
584  call valcheck( ocean_temp(oks:oke,ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
585  var_name(i_temp), __file__, __line__ )
586 ! call VALCHECK( OCEAN_SALT (OKS:OKE,OIS:OIE,OJS:OJE), 0.0_RP, 1000.0_RP, &
587 ! VAR_NAME(I_SALT), __FILE__, __LINE__ )
588 ! call VALCHECK( OCEAN_UVEL (OKS:OKE,OIS:OIE,OJS:OJE), 0.0_RP, 1000.0_RP, &
589 ! VAR_NAME(I_UVEL), __FILE__, __LINE__ )
590 ! call VALCHECK( OCEAN_VVEL (OKS:OKE,OIS:OIE,OJS:OJE), 0.0_RP, 1000.0_RP, &
591 ! VAR_NAME(I_VVEL), __FILE__, __LINE__ )
592 
593  call valcheck( ocean_ocn_z0m(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
594  var_name(i_ocn_z0m), __file__, __line__ )
595  call valcheck( ocean_ice_temp(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
596  var_name(i_ice_temp), __file__, __line__ )
597  call valcheck( ocean_ice_mass(ois:oie,ojs:oje), 0.0_rp, 5e+5_rp, &
598  var_name(i_ice_mass), __file__, __line__ )
599  call valcheck( ocean_sfc_temp(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
600  var_name(i_sfc_temp), __file__, __line__ )
601 
602  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_direct ,i_r_ir ), 0.0_rp, 2.0_rp, &
603  var_name(i_sfc_alb_ir_dir ), __file__, __line__ )
604  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_diffuse,i_r_ir ), 0.0_rp, 2.0_rp, &
605  var_name(i_sfc_alb_ir_dif ), __file__, __line__ )
606  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_direct ,i_r_nir), 0.0_rp, 2.0_rp, &
607  var_name(i_sfc_alb_nir_dir), __file__, __line__ )
608  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_diffuse,i_r_nir), 0.0_rp, 2.0_rp, &
609  var_name(i_sfc_alb_nir_dif), __file__, __line__ )
610  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_direct ,i_r_vis), 0.0_rp, 2.0_rp, &
611  var_name(i_sfc_alb_vis_dir), __file__, __line__ )
612  call valcheck( ocean_sfc_albedo(ois:oie,ojs:oje,i_r_diffuse,i_r_vis), 0.0_rp, 2.0_rp, &
613  var_name(i_sfc_alb_vis_dif), __file__, __line__ )
614  call valcheck( ocean_sfc_z0m(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
615  var_name(i_sfc_z0m), __file__, __line__ )
616  call valcheck( ocean_sfc_z0h(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
617  var_name(i_sfc_z0h), __file__, __line__ )
618  call valcheck( ocean_sfc_z0e(ois:oie,ojs:oje), 0.0_rp, 1000.0_rp, &
619  var_name(i_sfc_z0e), __file__, __line__ )
620  endif
621 
622  call file_history_in( ocean_temp(:,:,:), &
623  var_name(i_temp), var_desc(i_temp), &
624  var_unit(i_temp), standard_name=var_stdn(i_temp), &
625  dim_type="OXY" )
626 ! call FILE_HISTORY_in( OCEAN_SALT (:,:,:), &
627 ! VAR_NAME(I_SALT), VAR_DESC(I_SALT), &
628 ! VAR_UNIT(I_SALT), standard_name=VAR_STDN(I_SALT), &
629 ! dim_type="OXY" )
630 ! call FILE_HISTORY_in( OCEAN_UVEL (:,:,:), &
631 ! VAR_NAME(I_UVEL), VAR_DESC(I_UVEL), &
632 ! VAR_UNIT(I_UVEL), standard_name=VAR_STDN(I_UVEL), &
633 ! dim_type="OXY" )
634 ! call FILE_HISTORY_in( OCEAN_VVEL (:,:,:), &
635 ! VAR_NAME(I_VVEL), VAR_DESC(I_VVEL), &
636 ! VAR_UNIT(I_VVEL), standard_name=VAR_STDN(I_VVEL), &
637 ! dim_type="OXY" )
638 
639  call file_history_in( ocean_ocn_z0m(:,:), &
640  var_name(i_ocn_z0m), var_desc(i_ocn_z0m), &
641  var_unit(i_ocn_z0m), standard_name=var_stdn(i_ocn_z0m) )
642  call file_history_in( ocean_ice_temp(:,:), &
643  var_name(i_ice_temp), var_desc(i_ice_temp), &
644  var_unit(i_ice_temp), standard_name=var_stdn(i_ice_temp) )
645  call file_history_in( ocean_ice_mass(:,:), &
646  var_name(i_ice_mass), var_desc(i_ice_mass), &
647  var_unit(i_ice_mass), standard_name=var_stdn(i_ice_mass) )
648 
649  call file_history_in( ocean_sfc_temp(:,:), &
650  var_name(i_sfc_temp), var_desc(i_sfc_temp), &
651  var_unit(i_sfc_temp), standard_name=var_stdn(i_sfc_temp) )
652  call file_history_in( ocean_sfc_albedo(:,:,i_r_direct ,i_r_ir ), &
653  var_name(i_sfc_alb_ir_dir), var_desc(i_sfc_alb_ir_dir), &
654  var_unit(i_sfc_alb_ir_dir), standard_name=var_stdn(i_sfc_alb_ir_dir) )
655  call file_history_in( ocean_sfc_albedo(:,:,i_r_diffuse,i_r_ir ), &
656  var_name(i_sfc_alb_ir_dif), var_desc(i_sfc_alb_ir_dif), &
657  var_unit(i_sfc_alb_ir_dif), standard_name=var_stdn(i_sfc_alb_ir_dif) )
658  call file_history_in( ocean_sfc_albedo(:,:,i_r_direct ,i_r_nir), &
659  var_name(i_sfc_alb_nir_dir), var_desc(i_sfc_alb_nir_dir), &
660  var_unit(i_sfc_alb_nir_dir), standard_name=var_stdn(i_sfc_alb_nir_dir) )
661  call file_history_in( ocean_sfc_albedo(:,:,i_r_diffuse,i_r_nir), &
662  var_name(i_sfc_alb_nir_dif), var_desc(i_sfc_alb_nir_dif), &
663  var_unit(i_sfc_alb_nir_dif), standard_name=var_stdn(i_sfc_alb_nir_dif) )
664  call file_history_in( ocean_sfc_albedo(:,:,i_r_direct ,i_r_vis), &
665  var_name(i_sfc_alb_vis_dir), var_desc(i_sfc_alb_vis_dir), &
666  var_unit(i_sfc_alb_vis_dir), standard_name=var_stdn(i_sfc_alb_vis_dir) )
667  call file_history_in( ocean_sfc_albedo(:,:,i_r_diffuse,i_r_vis), &
668  var_name(i_sfc_alb_vis_dif), var_desc(i_sfc_alb_vis_dif), &
669  var_unit(i_sfc_alb_vis_dif), standard_name=var_stdn(i_sfc_alb_vis_dif) )
670  call file_history_in( ocean_sfc_z0m(:,:), &
671  var_name(i_sfc_z0m), var_desc(i_sfc_z0m), &
672  var_unit(i_sfc_z0m), standard_name=var_stdn(i_sfc_z0m) )
673  call file_history_in( ocean_sfc_z0h(:,:), &
674  var_name(i_sfc_z0h), var_desc(i_sfc_z0h), &
675  var_unit(i_sfc_z0h), standard_name=var_stdn(i_sfc_z0h) )
676  call file_history_in( ocean_sfc_z0e(:,:), &
677  var_name(i_sfc_z0e), var_desc(i_sfc_z0e), &
678  var_unit(i_sfc_z0e), standard_name=var_stdn(i_sfc_z0h) )
679 
680  call file_history_in( ocean_sflx_mw(:,:), &
681  var_name(i_sflx_mw), var_desc(i_sflx_mw), &
682  var_unit(i_sflx_mw), standard_name=var_stdn(i_sflx_mw) )
683  call file_history_in( ocean_sflx_mu(:,:), &
684  var_name(i_sflx_mu), var_desc(i_sflx_mu), &
685  var_unit(i_sflx_mu), standard_name=var_stdn(i_sflx_mu) )
686  call file_history_in( ocean_sflx_mv(:,:), &
687  var_name(i_sflx_mv), var_desc(i_sflx_mv), &
688  var_unit(i_sflx_mv), standard_name=var_stdn(i_sflx_mv) )
689  call file_history_in( ocean_sflx_sh(:,:), &
690  var_name(i_sflx_sh), var_desc(i_sflx_sh), &
691  var_unit(i_sflx_sh), standard_name=var_stdn(i_sflx_sh) )
692  call file_history_in( ocean_sflx_lh(:,:), &
693  var_name(i_sflx_lh), var_desc(i_sflx_lh), &
694  var_unit(i_sflx_lh), standard_name=var_stdn(i_sflx_lh) )
695  if ( i_qv > 0 ) then
696  call file_history_in( ocean_sflx_qtrc(:,:,i_qv), &
697  var_name(i_sflx_evap), var_desc(i_sflx_evap), &
698  var_unit(i_sflx_evap), standard_name=var_stdn(i_sflx_evap) )
699  endif
700  call file_history_in( ocean_sflx_g(:,:), &
701  var_name(i_sflx_g), var_desc(i_sflx_g), &
702  var_unit(i_sflx_g), standard_name=var_stdn(i_sflx_g) )
703  call file_history_in( ocean_sflx_water(:,:), &
704  var_name(i_sflx_water), var_desc(i_sflx_water), &
705  var_unit(i_sflx_water), standard_name=var_stdn(i_sflx_water) )
706  call file_history_in( ocean_sflx_ice(:,:), &
707  var_name(i_sflx_ice), var_desc(i_sflx_ice), &
708  var_unit(i_sflx_ice), standard_name=var_stdn(i_sflx_ice) )
709  call file_history_in( ocean_ice_frac(:,:), &
710  var_name(i_ice_frac), var_desc(i_ice_frac), &
711  var_unit(i_ice_frac), standard_name=var_stdn(i_ice_frac) )
712 
713  call prof_rapend ('OCN_History', 1)
714 
715  return
716  end subroutine ocean_vars_history
717 
718  !-----------------------------------------------------------------------------
720  subroutine ocean_vars_total
721  use scale_statistics, only: &
723  statistics_total
724  use scale_atmos_hydrometeor, only: &
725  i_qv
726  use scale_ocean_grid_cartesc_real, only: &
731  implicit none
732  !---------------------------------------------------------------------------
733 
734  if ( statistics_checktotal ) then
735 
736  call statistics_total( oka, oks, oke, oia, ois, oie, oja, ojs, oje, & ! [IN]
737  ocean_temp(:,:,:), var_name(i_temp), & ! [IN]
738  ocean_grid_cartesc_real_vol(:,:,:), & ! [IN]
740 ! call STATISTICS_total( OKA, OKS, OKE, OIA, OIS, OIE, OJA, OJS, OJE, & ! [IN]
741 ! OCEAN_SALT(:,:,:), VAR_NAME(I_SALT), & ! [IN]
742 ! OCEAN_GRID_CARTESC_REAL_VOL(:,:,:), & ! [IN]
743 ! OCEAN_GRID_CARTESC_REAL_TOTVOL ) ! [IN]
744 ! call STATISTICS_total( OKA, OKS, OKE, OIA, OIS, OIE, OJA, OJS, OJE, & ! [IN]
745 ! OCEAN_UVEL(:,:,:), VAR_NAME(I_UVEL), & ! [IN]
746 ! OCEAN_GRID_CARTESC_REAL_VOL(:,:,:), & ! [IN]
747 ! OCEAN_GRID_CARTESC_REAL_TOTVOL ) ! [IN]
748 ! call STATISTICS_total( OKA, OKS, OKE, OIA, OIS, OIE, OJA, OJS, OJE, & ! [IN]
749 ! OCEAN_VVEL(:,:,:), VAR_NAME(I_VVEL), & ! [IN]
750 ! OCEAN_GRID_CARTESC_REAL_VOL(:,:,:), & ! [IN]
751 ! OCEAN_GRID_CARTESC_REAL_TOTVOL ) ! [IN]
752 
753  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
754  ocean_ocn_z0m(:,:), var_name(i_ocn_z0m), & ! [IN]
755  ocean_grid_cartesc_real_area(:,:), & ! [IN]
757  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
758  ocean_ice_temp(:,:), var_name(i_ice_temp), & ! [IN]
759  ocean_grid_cartesc_real_area(:,:), & ! [IN]
761  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
762  ocean_ice_mass(:,:), var_name(i_ice_mass), & ! [IN]
763  ocean_grid_cartesc_real_area(:,:), & ! [IN]
765 
766  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
767  ocean_sfc_temp(:,:), var_name(i_sfc_temp), & ! [IN]
768  ocean_grid_cartesc_real_area(:,:), & ! [IN]
770  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
771  ocean_sfc_albedo(:,:,i_r_direct ,i_r_ir ), var_name(i_sfc_alb_ir_dir), & ! [IN]
772  ocean_grid_cartesc_real_area(:,:), & ! [IN]
774  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
775  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_ir ), var_name(i_sfc_alb_ir_dif), & ! [IN]
776  ocean_grid_cartesc_real_area(:,:), & ! [IN]
778  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
779  ocean_sfc_albedo(:,:,i_r_direct ,i_r_nir), var_name(i_sfc_alb_nir_dir), & ! [IN]
780  ocean_grid_cartesc_real_area(:,:), & ! [IN]
782  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
783  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_nir), var_name(i_sfc_alb_nir_dif), & ! [IN]
784  ocean_grid_cartesc_real_area(:,:), & ! [IN]
786  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
787  ocean_sfc_albedo(:,:,i_r_direct ,i_r_vis), var_name(i_sfc_alb_vis_dir), & ! [IN]
788  ocean_grid_cartesc_real_area(:,:), & ! [IN]
790  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
791  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_vis), var_name(i_sfc_alb_vis_dif), & ! [IN]
792  ocean_grid_cartesc_real_area(:,:), & ! [IN]
794  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
795  ocean_sfc_z0m(:,:), var_name(i_sfc_z0m), & ! [IN]
796  ocean_grid_cartesc_real_area(:,:), & ! [IN]
798  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
799  ocean_sfc_z0h(:,:), var_name(i_sfc_z0h), & ! [IN]
800  ocean_grid_cartesc_real_area(:,:), & ! [IN]
802  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
803  ocean_sfc_z0e(:,:), var_name(i_sfc_z0e), & ! [IN]
804  ocean_grid_cartesc_real_area(:,:), & ! [IN]
806 
807  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
808  ocean_sflx_mw(:,:), var_name(i_sflx_mw), & ! [IN]
809  ocean_grid_cartesc_real_area(:,:), & ! [IN]
811  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
812  ocean_sflx_mu(:,:), var_name(i_sflx_mu), & ! [IN]
813  ocean_grid_cartesc_real_area(:,:), & ! [IN]
815  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
816  ocean_sflx_mv(:,:), var_name(i_sflx_mv), & ! [IN]
817  ocean_grid_cartesc_real_area(:,:), & ! [IN]
819  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
820  ocean_sflx_sh(:,:), var_name(i_sflx_sh), & ! [IN]
821  ocean_grid_cartesc_real_area(:,:), & ! [IN]
823  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
824  ocean_sflx_lh(:,:), var_name(i_sflx_lh), & ! [IN]
825  ocean_grid_cartesc_real_area(:,:), & ! [IN]
827  if ( i_qv > 0 ) then
828  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
829  ocean_sflx_qtrc(:,:,i_qv), var_name(i_sflx_evap), & ! [IN]
830  ocean_grid_cartesc_real_area(:,:), & ! [IN]
832  endif
833  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
834  ocean_sflx_g(:,:), var_name(i_sflx_g), & ! [IN]
835  ocean_grid_cartesc_real_area(:,:), & ! [IN]
837  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
838  ocean_sflx_water(:,:), var_name(i_sflx_water), & ! [IN]
839  ocean_grid_cartesc_real_area(:,:), & ! [IN]
841  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
842  ocean_sflx_ice(:,:), var_name(i_sflx_ice), & ! [IN]
843  ocean_grid_cartesc_real_area(:,:), & ! [IN]
845 
846  call statistics_total( oia, ois, oie, oja, ojs, oje, & ! [IN]
847  ocean_ice_frac(:,:), var_name(i_ice_frac), & ! [IN]
848  ocean_grid_cartesc_real_area(:,:), & ! [IN]
850  endif
851 
852  return
853  end subroutine ocean_vars_total
854 
855  !-----------------------------------------------------------------------------
857  subroutine ocean_vars_restart_create
858  use scale_time, only: &
860  use scale_file_cartesc, only: &
862  use mod_ocean_admin, only: &
863  ocean_do
864  implicit none
865 
866  character(len=19) :: timelabel
867  character(len=H_LONG) :: basename
868  !---------------------------------------------------------------------------
869 
870  if ( ocean_do .and. ocean_restart_out_basename /= '' ) then
871  log_newline
872  log_info("OCEAN_vars_restart_create",*) 'Create restart file (OCEAN) '
873 
875  call time_gettimelabel( timelabel )
876  basename = trim(ocean_restart_out_basename)//'_'//trim(timelabel)
877  else
878  basename = trim(ocean_restart_out_basename)
879  endif
880  log_info_cont(*) 'basename: ', trim(basename)
881 
882  call file_cartesc_create( basename, & ! [IN]
883  ocean_restart_out_title, & ! [IN]
884  ocean_restart_out_dtype, & ! [IN]
885  restart_fid, & ! [OUT]
886  aggregate = ocean_restart_out_aggregate ) ! [IN]
887  endif
888 
889  return
890  end subroutine ocean_vars_restart_create
891 
892  !-----------------------------------------------------------------------------
894  subroutine ocean_vars_restart_enddef
895  use scale_file_cartesc, only: &
897  implicit none
898  !---------------------------------------------------------------------------
899 
900  if ( restart_fid /= -1 ) then
901  call file_cartesc_enddef( restart_fid ) ! [IN]
902  endif
903 
904  return
905  end subroutine ocean_vars_restart_enddef
906 
907  !-----------------------------------------------------------------------------
909  subroutine ocean_vars_restart_close
910  use scale_file_cartesc, only: &
912  implicit none
913  !---------------------------------------------------------------------------
914 
915  if ( restart_fid /= -1 ) then
916  log_newline
917  log_info("OCEAN_vars_restart_close",*) 'Close restart file (OCEAN) '
918 
919  call file_cartesc_close( restart_fid ) ! [IN]
920 
921  restart_fid = -1
922  endif
923 
924  return
925  end subroutine ocean_vars_restart_close
926 
927  !-----------------------------------------------------------------------------
929  subroutine ocean_vars_restart_def_var
930  use scale_file_cartesc, only: &
932  implicit none
933 
934  integer :: i
935  !---------------------------------------------------------------------------
936 
937  if ( restart_fid /= -1 ) then
938  do i = i_temp, i_temp
939  call file_cartesc_def_var( restart_fid, & ! [IN]
940  var_name(i), var_desc(i), var_unit(i), & ! [IN]
941  'OXY', ocean_restart_out_dtype, & ! [IN]
942  var_id(i), & ! [OUT]
943  standard_name=var_stdn(i) ) ! [IN]
944  enddo
945 
946  do i = i_ocn_z0m, i_sfc_z0e
947  call file_cartesc_def_var( restart_fid, & ! [IN]
948  var_name(i), var_desc(i), var_unit(i), & ! [IN]
949  'XY', ocean_restart_out_dtype, & ! [IN]
950  var_id(i), & ! [OUT]
951  standard_name=var_stdn(i) ) ! [IN]
952  enddo
953  endif
954 
955  return
956  end subroutine ocean_vars_restart_def_var
957 
958  !-----------------------------------------------------------------------------
960  subroutine ocean_vars_restart_write
961  use scale_file_cartesc, only: &
962  file_cartesc_write_var
963  implicit none
964  !---------------------------------------------------------------------------
965 
966  if ( restart_fid /= -1 ) then
967  call ocean_vars_total
968 
969  call file_cartesc_write_var( restart_fid, var_id(i_temp), & ! [IN]
970  ocean_temp(:,:,:), & ! [IN]
971  var_name(i_temp), 'OXY', fill_halo=.true. ) ! [IN]
972 ! call FILE_CARTESC_write_var( restart_fid, VAR_ID(I_SALT), & ! [IN]
973 ! OCEAN_SALT(:,:,:), & ! [IN]
974 ! VAR_NAME(I_SALT), 'OXY', fill_halo=.true. ) ! [IN]
975 ! call FILE_CARTESC_write_var( restart_fid, VAR_ID(I_UVEL), & ! [IN]
976 ! OCEAN_UVEL(:,:,:), & ! [IN]
977 ! VAR_NAME(I_UVEL), 'OXY', fill_halo=.true. ) ! [IN]
978 ! call FILE_CARTESC_write_var( restart_fid, VAR_ID(I_VVEL), & ! [IN]
979 ! OCEAN_VVEL(:,:,:), & ! [IN]
980 ! VAR_NAME(I_VVEL), 'OXY', fill_halo=.true. ) ! [IN]
981 
982  call file_cartesc_write_var( restart_fid, var_id(i_ocn_z0m), & ! [IN]
983  ocean_ocn_z0m(:,:), & ! [IN]
984  var_name(i_ocn_z0m), 'XY', fill_halo=.true. ) ! [IN]
985  call file_cartesc_write_var( restart_fid, var_id(i_ice_temp), & ! [IN]
986  ocean_ice_temp(:,:), & ! [IN]
987  var_name(i_ice_temp), 'XY', fill_halo=.true. ) ! [IN]
988  call file_cartesc_write_var( restart_fid, var_id(i_ice_mass), & ! [IN]
989  ocean_ice_mass(:,:), & ! [IN]
990  var_name(i_ice_mass), 'XY', fill_halo=.true. ) ! [IN]
991  call file_cartesc_write_var( restart_fid, var_id(i_sfc_temp), & ! [IN]
992  ocean_sfc_temp(:,:), & ! [IN]
993  var_name(i_sfc_temp), 'XY', fill_halo=.true. ) ! [IN]
994  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_ir_dir), & ! [IN]
995  ocean_sfc_albedo(:,:,i_r_direct ,i_r_ir ), & ! [IN]
996  var_name(i_sfc_alb_ir_dir), 'XY', fill_halo=.true. ) ! [IN]
997  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_ir_dif), & ! [IN]
998  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_ir ), & ! [IN]
999  var_name(i_sfc_alb_ir_dif), 'XY', fill_halo=.true. ) ! [IN]
1000  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_nir_dir), & ! [IN]
1001  ocean_sfc_albedo(:,:,i_r_direct ,i_r_nir), & ! [IN]
1002  var_name(i_sfc_alb_nir_dir), 'XY', fill_halo=.true. ) ! [IN]
1003  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_nir_dif), & ! [IN]
1004  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_nir), & ! [IN]
1005  var_name(i_sfc_alb_nir_dif), 'XY', fill_halo=.true. ) ! [IN]
1006  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_vis_dir), & ! [IN]
1007  ocean_sfc_albedo(:,:,i_r_direct ,i_r_vis), & ! [IN]
1008  var_name(i_sfc_alb_vis_dir), 'XY', fill_halo=.true. ) ! [IN]
1009  call file_cartesc_write_var( restart_fid, var_id(i_sfc_alb_vis_dif), & ! [IN]
1010  ocean_sfc_albedo(:,:,i_r_diffuse,i_r_vis), & ! [IN]
1011  var_name(i_sfc_alb_vis_dif), 'XY', fill_halo=.true. ) ! [IN]
1012  call file_cartesc_write_var( restart_fid, var_id(i_sfc_z0m), & ! [IN]
1013  ocean_sfc_z0m(:,:), & ! [IN]
1014  var_name(i_sfc_z0m), 'XY', fill_halo=.true. ) ! [IN]
1015  call file_cartesc_write_var( restart_fid, var_id(i_sfc_z0h), & ! [IN]
1016  ocean_sfc_z0h(:,:), & ! [IN]
1017  var_name(i_sfc_z0h), 'XY', fill_halo=.true. ) ! [IN]
1018  call file_cartesc_write_var( restart_fid, var_id(i_sfc_z0e), & ! [IN]
1019  ocean_sfc_z0e(:,:), & ! [IN]
1020  var_name(i_sfc_z0e), 'XY', fill_halo=.true. ) ! [IN]
1021  endif
1022 
1023  return
1024  end subroutine ocean_vars_restart_write
1025 
1026 end module mod_ocean_vars
module DEBUG
Definition: scale_debug.F90:11
real(rp), dimension(:,:), allocatable, public ocean_sflx_mu
ocean surface u-momentum flux [kg/m/s2]
real(rp), dimension(:,:), allocatable, public atmos_cossza
module coupler / surface-atmospehre
subroutine, public ocean_vars_restart_open
Open ocean restart file for read.
real(rp), dimension(:,:,:), allocatable, public ocean_grid_cartesc_real_vol
volume of grid cell
integer, parameter, public i_r_vis
subroutine, public ocean_vars_restart_write
Write ocean variables to restart file.
real(rp), dimension(:,:,:), allocatable, public ocean_uvel_t
tendency of OCEAN_OCN_UVEL
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
real(rp), dimension(:,:), allocatable, public ocean_sfc_temp
ocean surface skin temperature [K]
character(len=h_short), public ocean_restart_out_dtype
REAL4 or REAL8.
real(rp), dimension(:,:), allocatable, public ocean_ice_mass
sea ice mass [kg]
integer, public qa
real(rp), dimension(:,:), allocatable, public ocean_grid_cartesc_real_area
area of grid cell
subroutine, public ocean_vars_restart_def_var
Define ocean variables in restart file.
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
integer, parameter, public n_rad_dir
integer, parameter, public n_rad_rgn
real(rp), public ocean_grid_cartesc_real_totarea
total area
real(rp), dimension(:,:), allocatable, public ocean_u10
ocean surface velocity u at 10m [m/s]
logical, public statistics_checktotal
calc&report variable totals to logfile?
real(rp), dimension(:,:,:), allocatable, public ocean_temp_t
tendency of OCEAN_OCN_TEMP
subroutine, public ocean_vars_restart_enddef
Exit netCDF define mode.
real(rp), dimension(:,:), allocatable, public atmos_w
real(rp), dimension(:,:), allocatable, public ocean_sflx_g
ocean surface water heat flux [J/m2/s]
real(rp), public const_undef
Definition: scale_const.F90:41
real(rp), dimension(:,:), allocatable, public atmos_v
subroutine, public ocean_vars_restart_create
Create ocean restart file.
real(rp), dimension(:,:,:), allocatable, public ocean_sflx_qtrc
ocean surface tracer flux [kg/m2/s]
module file
Definition: scale_file.F90:15
subroutine, public file_cartesc_create(basename, title, datatype, fid, date, subsec, haszcoord, append, aggregate, single)
Create/open a netCDF file.
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]
module atmosphere / hydrometeor
real(rp), dimension(:,:), allocatable, public ocean_ice_frac
area fraction of sea ice [1]
real(rp), dimension(:,:,:), allocatable, public ocean_salt
ocean salinity [PSU]
real(rp), dimension(:,:), allocatable, public atmos_sflx_snow
subroutine, public time_gettimelabel(timelabel)
generate time label
Definition: scale_time.F90:94
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
real(rp), dimension(:,:), allocatable, public atmos_sfc_pres
real(rp), dimension(:,:), allocatable, public ocean_ice_mass_t
tendency of OCEAN_ICE_MASS
real(rp), dimension(:,:,:), allocatable, public ocean_temp
ocean temperature [K]
logical, public ocean_restart_out_postfix_timelabel
Add timelabel to the basename of output file?
module PROCESS
Definition: scale_prc.F90:11
subroutine, public ocean_vars_total
Budget monitor for ocean.
character(len=h_short), public ocean_ice_type
real(rp), dimension(:,:), allocatable, public ocean_q2
ocean surface water vapor at 2m [kg/kg]
logical, public ocean_restart_in_postfix_timelabel
Add timelabel to the basename of input file?
subroutine, public file_cartesc_enddef(fid)
Exit netCDF file define mode.
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
real(rp), dimension(:,:), allocatable, public atmos_temp
subroutine, public ocean_vars_restart_read
Read ocean restart.
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:338
module CONSTANT
Definition: scale_const.F90:11
integer, parameter, public i_r_direct
subroutine, public file_cartesc_def_var(fid, varname, desc, unit, dim_type, datatype, vid, standard_name, timeintv, nsteps, cell_measures)
Define a variable to file.
real(rp), dimension(:,:), allocatable, public ocean_v10
ocean surface velocity v at 10m [m/s]
logical function, public file_get_aggregate(fid)
subroutine, public prof_rapstart(rapname_base, level)
Start raptime.
Definition: scale_prof.F90:157
module ocean / grid / cartesianC / index
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
integer, parameter, public i_r_nir
real(rp), dimension(:,:,:), allocatable, public ocean_vvel
ocean meridional velocity [m/s]
real(rp), dimension(:,:,:), allocatable, public ocean_salt_t
tendency of OCEAN_OCN_SALT
module ocean / physics / ice / simple
module PRECISION
real(rp), dimension(:,:), allocatable, public ocean_sflx_mv
ocean surface v-momentum flux [kg/m/s2]
module file / cartesianC
real(rp), dimension(:,:), allocatable, public atmos_pres
subroutine, public ocean_vars_setup
Setup.
real(rp), dimension(:,:), allocatable, public ocean_sflx_water
ocean surface liquid water flux [kg/m2/s]
character(len=h_long), public ocean_restart_in_basename
Basename of the input file.
real(rp), dimension(:,:), allocatable, public atmos_dens
module Statistics
character(len=h_long), public ocean_restart_out_basename
Basename of the output file.
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
logical, public ocean_restart_in_aggregate
Switch to use aggregate file.
real(rp), dimension(:,:), allocatable, public ocean_ocn_z0m
surface roughness length for momentum, open ocean [m]
integer, parameter, public i_r_diffuse
subroutine, public file_cartesc_flush(fid)
Flush all pending requests to a netCDF file (PnetCDF only)
real(rp), dimension(:,:,:), allocatable, public ocean_vvel_t
tendency of OCEAN_OCN_VVEL
logical, public ocean_restart_output
Output restart file?
subroutine, public ocean_vars_restart_close
Close restart file.
real(rp), dimension(:,:,:,:), allocatable, public ocean_sfc_albedo
ocean surface albedo (direct/diffuse,IR/near-IR/VIS) (0-1)
subroutine, public prof_rapend(rapname_base, level)
Save raptime.
Definition: scale_prof.F90:210
subroutine, public file_cartesc_open(basename, fid, aggregate)
open a netCDF file for read
real(rp), dimension(:,:), allocatable, public ocean_sfc_z0m
ocean surface roughness length for momentum [m]
real(rp), dimension(:,:,:), allocatable, public ocean_uvel
ocean zonal velocity [m/s]
subroutine, public file_cartesc_close(fid)
Close a netCDF file.
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
module file_history
character(len=h_mid), public ocean_restart_out_title
Title of the output file.
real(rp), dimension(:,:,:,:), allocatable, public atmos_sflx_rad_dn
logical, public ocean_restart_out_aggregate
Switch to use aggregate file.
real(rp), dimension(:,:), allocatable, public ocean_sflx_sh
ocean surface sensible heat flux [J/m2/s]