364 integer,
intent(in) :: diag_subset_output
369 integer :: diag_yaml_id
371 integer,
allocatable :: diag_file_ids(:)
373 integer :: total_nvars
375 integer :: file_var_count
377 integer,
allocatable :: var_ids(:)
379 logical,
allocatable :: ignore(:)
380 integer :: actual_num_files
381 integer :: file_count
382 logical :: write_file
384 logical :: allow_averages
386 character(len=:),
allocatable :: filename
387 logical :: is_instantaneous
388 character(len=FMS_FILE_LEN) :: yamlfilename
390 if (diag_yaml_module_initialized)
return
393 call get_instance_filename(
"diag_table.yaml", yamlfilename)
394 if (index(trim(yamlfilename),
"ens_") .ne. 0)
then
395 if (file_exists(yamlfilename) .and. file_exists(
"diag_table.yaml")) &
396 call mpp_error(fatal,
"Both diag_table.yaml and "//trim(yamlfilename)//
" exists, pick one!")
399 if (.not. file_exists(yamlfilename)) yamlfilename =
"diag_table.yaml"
402 if (diag_yaml_id .eq. missing_file_error_code) &
403 call mpp_error(fatal,
"The "//trim(yamlfilename)//
" is not present and it is required!")
410 allocate(diag_file_ids(nfiles))
411 allocate(ignore(nfiles))
413 call get_block_ids(diag_yaml_id,
"diag_files", diag_file_ids)
418 if(diag_subset_output .ne. diag_all)
then
421 call get_value_from_key(diag_yaml_id, diag_file_ids(i),
"is_ocean", is_ocean, is_optional=.true.)
423 if (diag_subset_output .eq. diag_ocean .and. .not. is_ocean) ignore(i) = .true.
426 if(diag_subset_output .eq. diag_other .and. is_ocean) ignore(i) = .true.
434 call get_value_from_key(diag_yaml_id, diag_file_ids(i),
"write_file", write_file, is_optional=.true.)
435 if(.not. write_file) ignore(i) = .true.
438 if (.not. ignore(i))
then
440 total_nvars = total_nvars + nvars
441 if (nvars .ne. 0)
then
442 actual_num_files = actual_num_files + 1
445 call mpp_error(note,
"diag_manager_mod:: the file:"//trim(filename)//
" has no variables defined. Ignoring!")
446 if (
allocated(filename))
deallocate(filename)
452 allocate(diag_yaml%diag_files(actual_num_files))
453 allocate(diag_yaml%diag_fields(total_nvars))
454 allocate(variable_list%var_name(total_nvars))
455 allocate(variable_list%diag_field_indices(total_nvars))
456 allocate(file_list%file_name(actual_num_files))
457 allocate(file_list%diag_file_indices(actual_num_files))
462 nfiles_loop:
do i = 1, nfiles
464 file_count = file_count + 1
466 call fill_in_diag_files(diag_yaml_id, diag_file_ids(i), diag_yaml%diag_files(file_count))
469 file_list%file_name(file_count) = trim(diag_yaml%diag_files(file_count)%file_fname)//c_null_char
470 file_list%diag_file_indices(file_count) = file_count
473 nvars =
get_num_blocks(diag_yaml_id,
"varlist", parent_block_id=diag_file_ids(i))
474 allocate(var_ids(nvars))
475 call get_block_ids(diag_yaml_id,
"varlist", var_ids, parent_block_id=diag_file_ids(i))
477 allocate(diag_yaml%diag_files(file_count)%file_varlist(
get_total_num_vars(diag_yaml_id, diag_file_ids(i))))
478 allocate(diag_yaml%diag_files(file_count)%file_outlist(
get_total_num_vars(diag_yaml_id, diag_file_ids(i))))
479 allow_averages = .not. diag_yaml%diag_files(file_count)%file_freq(1) < 1
480 is_instantaneous = .false.
481 nvars_loop:
do j = 1, nvars
483 call get_value_from_key(diag_yaml_id, var_ids(j),
"write_var", write_var, is_optional=.true.)
484 if (.not. write_var) cycle
486 var_count = var_count + 1
487 file_var_count = file_var_count + 1
490 diag_yaml%diag_fields(var_count)%var_fname = diag_yaml%diag_files(file_count)%file_fname
493 diag_yaml%diag_fields(var_count)%var_axes_names =
""
494 diag_yaml%diag_fields(var_count)%var_file_is_subregional = diag_yaml%diag_files(file_count)%has_file_sub_region()
497 diag_yaml%diag_fields(var_count), allow_averages)
500 diag_yaml%diag_files(file_count)%file_varlist(file_var_count) = diag_yaml%diag_fields(var_count)%var_varname
501 if(diag_yaml%diag_fields(var_count)%has_var_outname())
then
502 diag_yaml%diag_files(file_count)%file_outlist(file_var_count) = diag_yaml%diag_fields(var_count)%var_outname
504 diag_yaml%diag_files(file_count)%file_outlist(file_var_count) =
""
508 variable_list%var_name(var_count) = trim(diag_yaml%diag_fields(var_count)%var_varname)//&
509 ":"//trim(diag_yaml%diag_fields(var_count)%var_module)//c_null_char
511 variable_list%var_name(var_count) = lowercase(variable_list%var_name(var_count))
512 variable_list%diag_field_indices(var_count) = var_count
519 call fms_sort_this(file_list%file_pointer, actual_num_files, file_list%diag_file_indices)
522 call fms_sort_this(variable_list%var_pointer, total_nvars, variable_list%diag_field_indices)
524 deallocate(diag_file_ids)
525 diag_yaml_module_initialized = .true.
558 integer,
intent(in) :: diag_yaml_id
559 integer,
intent(in) :: diag_file_id
562 integer :: nsubregion
563 integer :: sub_region_id(1)
565 integer :: global_att_id(1)
569 integer,
allocatable :: key_ids(:)
570 character(len=:),
ALLOCATABLE :: grid_type
571 character(len=:),
ALLOCATABLE :: buffer
572 integer :: start_time_int(6)
574 yaml_fileobj%file_frequnit = 0
578 call parse_key(yaml_fileobj%file_fname, buffer, yaml_fileobj%file_freq, yaml_fileobj%file_frequnit,
"freq")
587 call parse_key(yaml_fileobj%file_fname, buffer, yaml_fileobj%file_new_file_freq, &
588 yaml_fileobj%file_new_file_freq_units,
"new_file_freq")
595 start_time_int = diag_null
596 yaml_fileobj%file_start_time_set = .false.
598 start_time_int, is_optional=.true.)
599 if (any(start_time_int .ne. diag_null))
then
600 yaml_fileobj%file_start_time_set = .true.
601 call set_time_type(start_time_int, yaml_fileobj%file_start_time)
604 call parse_key(yaml_fileobj%file_fname, buffer, yaml_fileobj%file_duration, yaml_fileobj%file_duration_units, &
608 nsubregion =
get_num_blocks(diag_yaml_id,
"sub_region", parent_block_id=diag_file_id)
609 if (nsubregion .eq. 1)
then
610 max_subaxes = max_subaxes + 1
611 call get_block_ids(diag_yaml_id,
"sub_region", sub_region_id, parent_block_id=diag_file_id)
613 call get_sub_region(diag_yaml_id, sub_region_id(1), yaml_fileobj%file_sub_region, grid_type, &
614 yaml_fileobj%file_fname)
615 elseif (nsubregion .eq. 0)
then
616 yaml_fileobj%file_sub_region%grid_type = null_gridtype
618 call mpp_error(fatal,
"diag_yaml_object_init: file "//trim(yaml_fileobj%file_fname)//
" has multiple region blocks")
622 natt =
get_num_blocks(diag_yaml_id,
"global_meta", parent_block_id=diag_file_id)
623 if (natt .eq. 1)
then
624 call get_block_ids(diag_yaml_id,
"global_meta", global_att_id, parent_block_id=diag_file_id)
625 nkeys =
get_nkeys(diag_yaml_id, global_att_id(1))
626 allocate(key_ids(nkeys))
627 call get_key_ids(diag_yaml_id, global_att_id(1), key_ids)
629 allocate(yaml_fileobj%file_global_meta(nkeys, 2))
631 call get_key_name(diag_yaml_id, key_ids(j), yaml_fileobj%file_global_meta(j, 1))
632 call get_key_value(diag_yaml_id, key_ids(j), yaml_fileobj%file_global_meta(j, 2))
635 elseif (natt .ne. 0)
then
636 call mpp_error(fatal,
"diag_yaml_object_init: file "//trim(yaml_fileobj%file_fname)//&
637 &
" has multiple global_meta blocks")
1582 character(len=*),
optional,
intent(in) :: filename
1586 integer :: i, unit_num
1587 if(
present(filename))
then
1588 open(newunit=unit_num, file=trim(filename), action=
'WRITE')
1593 if( mpp_pe() .eq. mpp_root_pe())
then
1594 write(unit_num, *)
'**********Dumping diag_yaml object**********'
1595 if( diag_yaml%has_diag_title())
write(unit_num, *)
'Title:', diag_yaml%diag_title
1596 if( diag_yaml%has_diag_basedate())
write(unit_num, *)
'basedate array:', diag_yaml%diag_basedate
1597 write(unit_num, *)
'FILES'
1598 allocate(fields(
SIZE(diag_yaml%get_diag_fields())))
1599 files => diag_yaml%diag_files
1600 fields = diag_yaml%get_diag_fields()
1602 write(unit_num, *)
'File: ', files(i)%get_file_fname()
1603 if(files(i)%has_file_frequnit())
write(unit_num, *)
'file_frequnit:', files(i)%get_file_frequnit()
1604 if(files(i)%has_file_freq())
write(unit_num, *)
'freq:', files(i)%get_file_freq()
1605 if(files(i)%has_file_timeunit())
write(unit_num, *)
'timeunit:', files(i)%get_file_timeunit()
1606 if(files(i)%has_file_unlimdim())
write(unit_num, *)
'unlimdim:', files(i)%get_file_unlimdim()
1608 if(files(i)%has_file_new_file_freq())
write(unit_num, *)
'new_file_freq:', files(i)%get_file_new_file_freq()
1609 if(files(i)%has_file_new_file_freq_units())
write(unit_num, *)
'new_file_freq_units:', &
1610 & files(i)%get_file_new_file_freq_units()
1611 if(files(i)%has_file_start_time())
write(unit_num, *)
'start_time:', &
1612 & date_to_string(files(i)%get_file_start_time())
1613 if(files(i)%has_file_duration())
write(unit_num, *)
'duration:', files(i)%get_file_duration()
1614 if(files(i)%has_file_duration_units())
write(unit_num, *)
'duration_units:', files(i)%get_file_duration_units()
1615 if(files(i)%has_file_varlist())
write(unit_num, *)
'varlist:', files(i)%get_file_varlist()
1616 if(files(i)%has_file_global_meta())
write(unit_num, *)
'global_meta:', files(i)%get_file_global_meta()
1617 if(files(i)%is_global_meta())
write(unit_num, *)
'global_meta:', files(i)%is_global_meta()
1618 write(unit_num, *)
''
1620 write(unit_num, *)
'FIELDS'
1621 do i=1,
SIZE(fields)
1622 write(unit_num, *)
'Field: ', fields(i)%get_var_fname()
1623 if(fields(i)%has_var_fname())
write(unit_num, *)
'fname:', fields(i)%get_var_fname()
1624 if(fields(i)%has_var_varname())
write(unit_num, *)
'varname:', fields(i)%get_var_varname()
1625 if(fields(i)%has_var_reduction())
write(unit_num, *)
'reduction:', fields(i)%get_var_reduction()
1626 if(fields(i)%has_var_module())
write(unit_num, *)
'module:', fields(i)%get_var_module()
1627 if(fields(i)%has_var_kind())
write(unit_num, *)
'kind:', fields(i)%get_var_kind()
1628 if(fields(i)%has_var_outname())
write(unit_num, *)
'outname:', fields(i)%get_var_outname()
1629 if(fields(i)%has_var_longname())
write(unit_num, *)
'longname:', fields(i)%get_var_longname()
1630 if(fields(i)%has_var_units())
write(unit_num, *)
'units:', fields(i)%get_var_units()
1631 if(fields(i)%has_var_zbounds())
write(unit_num, *)
'zbounds:', fields(i)%get_var_zbounds()
1632 if(fields(i)%has_var_attributes())
write(unit_num, *)
'attributes:', fields(i)%get_var_attributes()
1633 if(fields(i)%has_n_diurnal())
write(unit_num, *)
'n_diurnal:', fields(i)%get_n_diurnal()
1634 if(fields(i)%has_pow_value())
write(unit_num, *)
'pow_value:', fields(i)%get_pow_value()
1635 if(fields(i)%has_var_attributes())
write(unit_num, *)
'is_var_attributes:', fields(i)%is_var_attributes()
1639 if(
present(filename))
then
1649 integer,
intent(in) :: ntimes(:)
1652 type (fmsyamloutkeys_type),
allocatable :: keys(:), keys2(:), keys3(:)
1653 type (fmsyamloutvalues_type),
allocatable :: vals(:), vals2(:), vals3(:)
1655 character(len=128) :: tmpstr1, tmpstr2
1656 integer,
parameter :: tier1size = 3
1657 integer :: tier2size, tier3size
1658 integer,
allocatable :: tier3each(:)
1659 integer,
dimension(basedate_size) :: basedate_loc
1660 integer :: varnum_i, key3_i, gm
1661 character(len=32),
allocatable :: st_vals(:)
1663 if( mpp_pe() .ne. mpp_root_pe())
return
1665 allocate(tier3each(
SIZE(diag_yaml%diag_files) * 3))
1666 tier3size = 0; tier3each = 0
1671 allocate(keys2(
SIZE(diag_yaml%diag_files)))
1672 allocate(vals2(
SIZE(diag_yaml%diag_files)))
1673 allocate(st_vals(
SIZE(diag_yaml%diag_files)))
1674 do i=1,
SIZE(diag_yaml%diag_files)
1675 call initialize_key_struct(keys2(i))
1676 call initialize_val_struct(vals2(i))
1677 if (
allocated(diag_yaml%diag_files(i)%file_varlist) )
then
1678 do j=1,
SIZE(diag_yaml%diag_files(i)%file_varlist)
1679 tier3size = tier3size + 1
1682 tier3size = tier3size + 2
1684 allocate(keys3(tier3size))
1685 allocate(vals3(tier3size))
1688 call initialize_key_struct(keys(1))
1689 call initialize_val_struct(vals(1))
1690 call fms_f2c_string( keys(1)%key1,
'title')
1691 call fms_f2c_string( vals(1)%val1, diag_yaml%diag_title)
1692 call fms_f2c_string( keys(1)%key2,
'base_date')
1693 basedate_loc = diag_yaml%get_basedate()
1694 tmpstr1 =
''; tmpstr2 =
''
1695 tmpstr1 = string(basedate_loc(1))
1696 tmpstr2 = trim(tmpstr1)
1697 do i=2, basedate_size
1698 tmpstr1 = string(basedate_loc(i))
1699 tmpstr2 = trim(tmpstr2) //
' ' // trim(tmpstr1)
1701 call fms_f2c_string(vals(1)%val2, trim(tmpstr2))
1702 call yaml_out_add_level2key(
'diag_files', keys(1))
1705 do i=1,
SIZE(diag_yaml%diag_files)
1706 fileptr => diag_yaml%diag_files(i)
1708 call fms_f2c_string(keys2(i)%key1,
'file_name')
1709 call fms_f2c_string(keys2(i)%key2,
'freq')
1710 call fms_f2c_string(keys2(i)%key3,
'freq_units')
1711 call fms_f2c_string(keys2(i)%key4,
'time_units')
1712 call fms_f2c_string(keys2(i)%key5,
'unlimdim')
1713 call fms_f2c_string(keys2(i)%key6,
'new_file_freq')
1714 call fms_f2c_string(keys2(i)%key7,
'new_file_freq_units')
1715 call fms_f2c_string(keys2(i)%key8,
'start_time')
1716 call fms_f2c_string(keys2(i)%key9,
'file_duration')
1717 call fms_f2c_string(keys2(i)%key10,
'file_duration_units')
1718 call fms_f2c_string(keys2(i)%key11,
'number_of_timelevels')
1720 call fms_f2c_string(vals2(i)%val1, fileptr%file_fname)
1721 call fms_f2c_string(vals2(i)%val5, fileptr%file_unlimdim)
1724 do k=1,
SIZE(fileptr%file_freq)
1725 if(fileptr%file_freq(k) .eq. diag_null)
exit
1727 tmpstr2 = string(fileptr%file_freq(k))
1728 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1730 call fms_f2c_string(vals2(i)%val2, adjustl(tmpstr1))
1733 do k=1,
SIZE(fileptr%file_new_file_freq)
1734 if(fileptr%file_new_file_freq(k) .eq. diag_null)
exit
1736 tmpstr2 = string(fileptr%file_new_file_freq(k))
1737 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1739 call fms_f2c_string(vals2(i)%val6, adjustl(tmpstr1))
1741 if (fileptr%has_file_start_time())
then
1742 call fms_f2c_string(vals2(i)%val8, trim(date_to_string(fileptr%get_file_start_time())))
1744 call fms_f2c_string(vals2(i)%val8,
"")
1747 do k=1,
SIZE(fileptr%file_duration)
1748 if(fileptr%file_duration(k) .eq. diag_null)
exit
1750 tmpstr2 = string(fileptr%file_duration(k))
1751 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1753 call fms_f2c_string(vals2(i)%val9, adjustl(tmpstr1))
1755 call fms_f2c_string(vals2(i)%val11, string(ntimes(i)))
1758 call yaml_out_add_level2key(
'varlist', keys2(i))
1760 if(
SIZE(fileptr%file_varlist) .gt. 0)
then
1761 do j=1,
SIZE(fileptr%file_varlist)
1763 call initialize_key_struct(keys3(key3_i))
1764 call initialize_val_struct(vals3(key3_i))
1767 do varnum_i=1,
SIZE(diag_yaml%diag_fields)
1768 if( trim(diag_yaml%diag_fields(varnum_i)%var_varname ) .eq. trim(fileptr%file_varlist(j)) .and. &
1769 trim(diag_yaml%diag_fields(varnum_i)%var_fname) .eq. trim(fileptr%file_fname))
then
1771 if(diag_yaml%diag_fields(varnum_i)%has_var_outname())
then
1772 if(trim(diag_yaml%diag_fields(varnum_i)%var_outname) .eq. trim(fileptr%file_outlist(j)))
then
1773 varptr => diag_yaml%diag_fields(varnum_i)
1777 varptr => diag_yaml%diag_fields(varnum_i)
1782 if( .not.
associated(varptr))
call mpp_error(fatal,
"diag_yaml_output: could not find variable in list."//&
1783 " var: "// trim(fileptr%file_varlist(j)))
1784 call fms_f2c_string(keys3(key3_i)%key1,
'module')
1785 call fms_f2c_string(keys3(key3_i)%key2,
'var_name')
1786 call fms_f2c_string(keys3(key3_i)%key3,
'reduction')
1787 call fms_f2c_string(keys3(key3_i)%key4,
'kind')
1788 call fms_f2c_string(keys3(key3_i)%key5,
'output_name')
1789 call fms_f2c_string(keys3(key3_i)%key6,
'long_name')
1790 call fms_f2c_string(keys3(key3_i)%key7,
'units')
1791 call fms_f2c_string(keys3(key3_i)%key8,
'zbounds')
1792 call fms_f2c_string(keys3(key3_i)%key9,
'n_diurnal')
1793 call fms_f2c_string(keys3(key3_i)%key10,
'pow_value')
1794 call fms_f2c_string(keys3(key3_i)%key11,
'dimensions')
1795 if (varptr%has_var_module())
call fms_f2c_string(vals3(key3_i)%val1, varptr%var_module)
1796 if (varptr%has_var_varname())
call fms_f2c_string(vals3(key3_i)%val2, varptr%var_varname)
1797 if (varptr%has_var_reduction())
then
1798 call fms_f2c_string(vals3(key3_i)%val3, &
1801 if (varptr%has_var_outname())
call fms_f2c_string(vals3(key3_i)%val5, varptr%var_outname)
1802 if (varptr%has_var_longname())
call fms_f2c_string(vals3(key3_i)%val6, varptr%var_longname)
1803 if (varptr%has_var_units())
call fms_f2c_string(vals3(key3_i)%val7, varptr%var_units)
1804 if (varptr%has_var_kind())
then
1805 select case(varptr%var_kind)
1807 call fms_f2c_string(vals3(key3_i)%val4,
'i4')
1809 call fms_f2c_string(vals3(key3_i)%val4,
'i8')
1811 call fms_f2c_string(vals3(key3_i)%val4,
'r4')
1813 call fms_f2c_string(vals3(key3_i)%val4,
'r8')
1817 if( abs(varptr%var_zbounds(1) - real(diag_null, r4_kind)) .gt. 1.0e-5 )
then
1818 tmpstr2 = string(varptr%var_zbounds(1),
"F8.2") //
' ' // string(varptr%var_zbounds(2),
"F8.2")
1819 call fms_f2c_string(vals3(key3_i)%val8, trim(tmpstr2))
1822 if( varptr%n_diurnal .gt. 0)
then
1823 tmpstr1 =
''; tmpstr1 = string(varptr%n_diurnal)
1824 call fms_f2c_string(vals3(key3_i)%val9, tmpstr1)
1827 if( varptr%pow_value .gt. 0)
then
1828 tmpstr1 =
''; tmpstr1 = string(varptr%pow_value)
1829 call fms_f2c_string(vals3(key3_i)%val10, tmpstr1)
1832 tmpstr1 =
''; tmpstr1 = varptr%var_axes_names
1833 call fms_f2c_string(vals3(key3_i)%val11, trim(adjustl(tmpstr1)))
1838 tier3each(i*3-2) = j-1
1839 tier3each(i*3-1) = 1
1841 call initialize_key_struct(keys3(key3_i))
1842 call initialize_val_struct(vals3(key3_i))
1844 call yaml_out_add_level2key(
'sub_region', keys2(i))
1845 call fms_f2c_string(keys3(key3_i)%key1,
'grid_type')
1846 call fms_f2c_string(keys3(key3_i)%key2,
'tile')
1847 call fms_f2c_string(keys3(key3_i)%key3,
'corner1')
1848 call fms_f2c_string(keys3(key3_i)%key4,
'corner2')
1849 call fms_f2c_string(keys3(key3_i)%key5,
'corner3')
1850 call fms_f2c_string(keys3(key3_i)%key6,
'corner4')
1852 select case (fileptr%file_sub_region%grid_type)
1853 case(latlon_gridtype)
1854 call fms_f2c_string(vals3(key3_i)%val1,
'latlon')
1855 case(index_gridtype)
1856 call fms_f2c_string(vals3(key3_i)%val1,
'index')
1858 if(fileptr%file_sub_region%tile .ne. diag_null)
then
1859 tmpstr1 =
''; tmpstr1 = string(fileptr%file_sub_region%tile)
1860 call fms_f2c_string(vals3(key3_i)%val2, tmpstr1)
1862 if(fileptr%has_file_sub_region())
then
1863 if(
allocated(fileptr%file_sub_region%corners))
then
1864 select type (corners => fileptr%file_sub_region%corners)
1865 type is (real(r8_kind))
1866 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1867 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1868 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1869 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1870 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1871 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1872 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1873 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1874 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1875 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1876 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1877 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1878 type is (real(r4_kind))
1879 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1880 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1881 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1882 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1883 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1884 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1885 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1886 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1887 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1888 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1889 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1890 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1891 type is (
integer(i4_kind))
1892 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1893 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1894 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1895 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1896 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1897 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1898 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1899 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1900 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1901 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1902 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1903 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1904 type is (
integer(i8_kind))
1905 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1906 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1907 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1908 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1909 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1910 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1911 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1912 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1913 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1914 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1915 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1916 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1922 call initialize_key_struct(keys3(key3_i))
1923 call initialize_val_struct(vals3(key3_i))
1924 call yaml_out_add_level2key(
'global_meta', keys2(i))
1925 if ( fileptr%has_file_global_meta())
then
1926 do gm=1,
SIZE(fileptr%file_global_meta, 1)
1929 call fms_f2c_string(keys3(key3_i)%key1, fileptr%file_global_meta(1,1))
1930 call fms_f2c_string(vals3(key3_i)%val1, fileptr%file_global_meta(1,2))
1932 call fms_f2c_string(keys3(key3_i)%key2, fileptr%file_global_meta(2,1))
1933 call fms_f2c_string(vals3(key3_i)%val2, fileptr%file_global_meta(2,2))
1935 call fms_f2c_string(keys3(key3_i)%key3, fileptr%file_global_meta(3,1))
1936 call fms_f2c_string(vals3(key3_i)%val3, fileptr%file_global_meta(3,2))
1938 call fms_f2c_string(keys3(key3_i)%key4, fileptr%file_global_meta(4,1))
1939 call fms_f2c_string(vals3(key3_i)%val4, fileptr%file_global_meta(4,2))
1941 call fms_f2c_string(keys3(key3_i)%key5, fileptr%file_global_meta(5,1))
1942 call fms_f2c_string(vals3(key3_i)%val5, fileptr%file_global_meta(5,2))
1944 call fms_f2c_string(keys3(key3_i)%key6, fileptr%file_global_meta(6,1))
1945 call fms_f2c_string(vals3(key3_i)%val6, fileptr%file_global_meta(6,2))
1947 call fms_f2c_string(keys3(key3_i)%key7, fileptr%file_global_meta(7,1))
1948 call fms_f2c_string(vals3(key3_i)%val7, fileptr%file_global_meta(7,2))
1950 call fms_f2c_string(keys3(key3_i)%key8, fileptr%file_global_meta(8,1))
1951 call fms_f2c_string(vals3(key3_i)%val8, fileptr%file_global_meta(8,2))
1953 call fms_f2c_string(keys3(key3_i)%key9, fileptr%file_global_meta(9,1))
1954 call fms_f2c_string(vals3(key3_i)%val9, fileptr%file_global_meta(9,2))
1956 call fms_f2c_string(keys3(key3_i)%key10, fileptr%file_global_meta(10,1))
1957 call fms_f2c_string(vals3(key3_i)%val10, fileptr%file_global_meta(10,2))
1959 call fms_f2c_string(keys3(key3_i)%key11, fileptr%file_global_meta(11,1))
1960 call fms_f2c_string(vals3(key3_i)%val11, fileptr%file_global_meta(11,2))
1962 call fms_f2c_string(keys3(key3_i)%key12, fileptr%file_global_meta(12,1))
1963 call fms_f2c_string(vals3(key3_i)%val12, fileptr%file_global_meta(12,2))
1965 call fms_f2c_string(keys3(key3_i)%key13, fileptr%file_global_meta(13,1))
1966 call fms_f2c_string(vals3(key3_i)%val13, fileptr%file_global_meta(13,2))
1968 call fms_f2c_string(keys3(key3_i)%key14, fileptr%file_global_meta(14,1))
1969 call fms_f2c_string(vals3(key3_i)%val14, fileptr%file_global_meta(14,2))
1971 call fms_f2c_string(keys3(key3_i)%key15, fileptr%file_global_meta(15,1))
1972 call fms_f2c_string(vals3(key3_i)%val15, fileptr%file_global_meta(15,2))
1974 call fms_f2c_string(keys3(key3_i)%key16, fileptr%file_global_meta(16,1))
1975 call fms_f2c_string(vals3(key3_i)%val16, fileptr%file_global_meta(16,2))
1982 call write_yaml_from_struct_3(
'diag_manifest.yaml.'//string(mpp_pe())//c_null_char, 1, keys, vals, &
1983 SIZE(diag_yaml%diag_files), keys2, vals2, &
1984 tier3size, tier3each, keys3, vals3, &
1985 (/
size(diag_yaml%diag_files), 0, 0, 0, 0, 0, 0, 0/))
1986 deallocate( keys, keys2, keys3, vals, vals2, vals3)