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(:)
1650 integer,
intent(in) :: ntiles(:)
1651 integer,
intent(in) :: ndistributedfiles(:)
1655 type (fmsyamloutkeys_type),
allocatable :: keys(:), keys2(:), keys3(:)
1656 type (fmsyamloutvalues_type),
allocatable :: vals(:), vals2(:), vals3(:)
1658 character(len=128) :: tmpstr1, tmpstr2
1659 integer,
parameter :: tier1size = 3
1660 integer :: tier2size, tier3size
1661 integer,
allocatable :: tier3each(:)
1662 integer,
dimension(basedate_size) :: basedate_loc
1663 integer :: varnum_i, key3_i, gm
1664 character(len=32),
allocatable :: st_vals(:)
1665 character(len=FMS_FILE_LEN) :: filename
1670 if( mpp_pe() .ne. mpp_root_pe())
return
1672 allocate(tier3each(
SIZE(diag_yaml%diag_files) * 3))
1673 tier3size = 0; tier3each = 0
1678 allocate(keys2(
SIZE(diag_yaml%diag_files)))
1679 allocate(vals2(
SIZE(diag_yaml%diag_files)))
1680 allocate(st_vals(
SIZE(diag_yaml%diag_files)))
1681 do i=1,
SIZE(diag_yaml%diag_files)
1682 call initialize_key_struct(keys2(i))
1683 call initialize_val_struct(vals2(i))
1684 if (
allocated(diag_yaml%diag_files(i)%file_varlist) )
then
1685 do j=1,
SIZE(diag_yaml%diag_files(i)%file_varlist)
1686 tier3size = tier3size + 1
1689 tier3size = tier3size + 2
1691 allocate(keys3(tier3size))
1692 allocate(vals3(tier3size))
1695 call initialize_key_struct(keys(1))
1696 call initialize_val_struct(vals(1))
1697 call fms_f2c_string( keys(1)%key1,
'title')
1698 call fms_f2c_string( vals(1)%val1, diag_yaml%diag_title)
1699 call fms_f2c_string( keys(1)%key2,
'base_date')
1700 basedate_loc = diag_yaml%get_basedate()
1701 tmpstr1 =
''; tmpstr2 =
''
1702 tmpstr1 = string(basedate_loc(1))
1703 tmpstr2 = trim(tmpstr1)
1704 do i=2, basedate_size
1705 tmpstr1 = string(basedate_loc(i))
1706 tmpstr2 = trim(tmpstr2) //
' ' // trim(tmpstr1)
1708 call fms_f2c_string(vals(1)%val2, trim(tmpstr2))
1709 call yaml_out_add_level2key(
'diag_files', keys(1))
1712 do i=1,
SIZE(diag_yaml%diag_files)
1713 fileptr => diag_yaml%diag_files(i)
1715 call fms_f2c_string(keys2(i)%key1,
'file_name')
1716 call fms_f2c_string(keys2(i)%key2,
'freq')
1717 call fms_f2c_string(keys2(i)%key3,
'freq_units')
1718 call fms_f2c_string(keys2(i)%key4,
'time_units')
1719 call fms_f2c_string(keys2(i)%key5,
'unlimdim')
1720 call fms_f2c_string(keys2(i)%key6,
'new_file_freq')
1721 call fms_f2c_string(keys2(i)%key7,
'new_file_freq_units')
1722 call fms_f2c_string(keys2(i)%key8,
'start_time')
1723 call fms_f2c_string(keys2(i)%key9,
'file_duration')
1724 call fms_f2c_string(keys2(i)%key10,
'file_duration_units')
1727 call fms_f2c_string(keys2(i)%key11,
'number_of_timelevels')
1732 call fms_f2c_string(keys2(i)%key12,
'number_of_tiles')
1738 call fms_f2c_string(keys2(i)%key13,
'number_of_distributed_files')
1740 call fms_f2c_string(vals2(i)%val1, fileptr%file_fname)
1741 call fms_f2c_string(vals2(i)%val5, fileptr%file_unlimdim)
1744 do k=1,
SIZE(fileptr%file_freq)
1745 if(fileptr%file_freq(k) .eq. diag_null)
exit
1747 tmpstr2 = string(fileptr%file_freq(k))
1748 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1750 call fms_f2c_string(vals2(i)%val2, adjustl(tmpstr1))
1753 do k=1,
SIZE(fileptr%file_new_file_freq)
1754 if(fileptr%file_new_file_freq(k) .eq. diag_null)
exit
1756 tmpstr2 = string(fileptr%file_new_file_freq(k))
1757 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1759 call fms_f2c_string(vals2(i)%val6, adjustl(tmpstr1))
1761 if (fileptr%has_file_start_time())
then
1762 call fms_f2c_string(vals2(i)%val8, trim(date_to_string(fileptr%get_file_start_time())))
1764 call fms_f2c_string(vals2(i)%val8,
"")
1767 do k=1,
SIZE(fileptr%file_duration)
1768 if(fileptr%file_duration(k) .eq. diag_null)
exit
1770 tmpstr2 = string(fileptr%file_duration(k))
1771 tmpstr1 = trim(tmpstr1)//
" "//trim(tmpstr2)
1773 call fms_f2c_string(vals2(i)%val9, adjustl(tmpstr1))
1775 call fms_f2c_string(vals2(i)%val11, string(ntimes(i)))
1776 call fms_f2c_string(vals2(i)%val12, string(ntiles(i)))
1777 call fms_f2c_string(vals2(i)%val13, string(ndistributedfiles(i)))
1780 call yaml_out_add_level2key(
'varlist', keys2(i))
1782 if(
SIZE(fileptr%file_varlist) .gt. 0)
then
1783 do j=1,
SIZE(fileptr%file_varlist)
1785 call initialize_key_struct(keys3(key3_i))
1786 call initialize_val_struct(vals3(key3_i))
1789 do varnum_i=1,
SIZE(diag_yaml%diag_fields)
1790 if( trim(diag_yaml%diag_fields(varnum_i)%var_varname ) .eq. trim(fileptr%file_varlist(j)) .and. &
1791 trim(diag_yaml%diag_fields(varnum_i)%var_fname) .eq. trim(fileptr%file_fname))
then
1793 if(diag_yaml%diag_fields(varnum_i)%has_var_outname())
then
1794 if(trim(diag_yaml%diag_fields(varnum_i)%var_outname) .eq. trim(fileptr%file_outlist(j)))
then
1795 varptr => diag_yaml%diag_fields(varnum_i)
1799 varptr => diag_yaml%diag_fields(varnum_i)
1804 if( .not.
associated(varptr))
call mpp_error(fatal,
"diag_yaml_output: could not find variable in list."//&
1805 " var: "// trim(fileptr%file_varlist(j)))
1806 call fms_f2c_string(keys3(key3_i)%key1,
'module')
1807 call fms_f2c_string(keys3(key3_i)%key2,
'var_name')
1808 call fms_f2c_string(keys3(key3_i)%key3,
'reduction')
1809 call fms_f2c_string(keys3(key3_i)%key4,
'kind')
1810 call fms_f2c_string(keys3(key3_i)%key5,
'output_name')
1811 call fms_f2c_string(keys3(key3_i)%key6,
'long_name')
1812 call fms_f2c_string(keys3(key3_i)%key7,
'units')
1813 call fms_f2c_string(keys3(key3_i)%key8,
'zbounds')
1814 call fms_f2c_string(keys3(key3_i)%key9,
'n_diurnal')
1815 call fms_f2c_string(keys3(key3_i)%key10,
'pow_value')
1816 call fms_f2c_string(keys3(key3_i)%key11,
'dimensions')
1817 if (varptr%has_var_module())
call fms_f2c_string(vals3(key3_i)%val1, varptr%var_module)
1818 if (varptr%has_var_varname())
call fms_f2c_string(vals3(key3_i)%val2, varptr%var_varname)
1819 if (varptr%has_var_reduction())
then
1820 call fms_f2c_string(vals3(key3_i)%val3, &
1823 if (varptr%has_var_outname())
call fms_f2c_string(vals3(key3_i)%val5, varptr%var_outname)
1824 if (varptr%has_var_longname())
call fms_f2c_string(vals3(key3_i)%val6, varptr%var_longname)
1825 if (varptr%has_var_units())
call fms_f2c_string(vals3(key3_i)%val7, varptr%var_units)
1826 if (varptr%has_var_kind())
then
1827 select case(varptr%var_kind)
1829 call fms_f2c_string(vals3(key3_i)%val4,
'i4')
1831 call fms_f2c_string(vals3(key3_i)%val4,
'i8')
1833 call fms_f2c_string(vals3(key3_i)%val4,
'r4')
1835 call fms_f2c_string(vals3(key3_i)%val4,
'r8')
1839 if( abs(varptr%var_zbounds(1) - real(diag_null, r4_kind)) .gt. 1.0e-5 )
then
1840 tmpstr2 = string(varptr%var_zbounds(1),
"F8.2") //
' ' // string(varptr%var_zbounds(2),
"F8.2")
1841 call fms_f2c_string(vals3(key3_i)%val8, trim(tmpstr2))
1844 if( varptr%n_diurnal .gt. 0)
then
1845 tmpstr1 =
''; tmpstr1 = string(varptr%n_diurnal)
1846 call fms_f2c_string(vals3(key3_i)%val9, tmpstr1)
1849 if( varptr%pow_value .gt. 0)
then
1850 tmpstr1 =
''; tmpstr1 = string(varptr%pow_value)
1851 call fms_f2c_string(vals3(key3_i)%val10, tmpstr1)
1854 tmpstr1 =
''; tmpstr1 = varptr%var_axes_names
1855 call fms_f2c_string(vals3(key3_i)%val11, trim(adjustl(tmpstr1)))
1860 tier3each(i*3-2) = j-1
1861 tier3each(i*3-1) = 1
1863 call initialize_key_struct(keys3(key3_i))
1864 call initialize_val_struct(vals3(key3_i))
1866 call yaml_out_add_level2key(
'sub_region', keys2(i))
1867 call fms_f2c_string(keys3(key3_i)%key1,
'grid_type')
1868 call fms_f2c_string(keys3(key3_i)%key2,
'tile')
1869 call fms_f2c_string(keys3(key3_i)%key3,
'corner1')
1870 call fms_f2c_string(keys3(key3_i)%key4,
'corner2')
1871 call fms_f2c_string(keys3(key3_i)%key5,
'corner3')
1872 call fms_f2c_string(keys3(key3_i)%key6,
'corner4')
1874 select case (fileptr%file_sub_region%grid_type)
1875 case(latlon_gridtype)
1876 call fms_f2c_string(vals3(key3_i)%val1,
'latlon')
1877 case(index_gridtype)
1878 call fms_f2c_string(vals3(key3_i)%val1,
'index')
1880 if(fileptr%file_sub_region%tile .ne. diag_null)
then
1881 tmpstr1 =
''; tmpstr1 = string(fileptr%file_sub_region%tile)
1882 call fms_f2c_string(vals3(key3_i)%val2, tmpstr1)
1884 if(fileptr%has_file_sub_region())
then
1885 if(
allocated(fileptr%file_sub_region%corners))
then
1886 select type (corners => fileptr%file_sub_region%corners)
1887 type is (real(r8_kind))
1888 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1889 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1890 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1891 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1892 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1893 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1894 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1895 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1896 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1897 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1898 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1899 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1900 type is (real(r4_kind))
1901 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1902 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1903 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1904 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1905 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1906 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1907 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1908 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1909 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1910 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1911 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1912 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1913 type is (
integer(i4_kind))
1914 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1915 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1916 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1917 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1918 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1919 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1920 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1921 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1922 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1923 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1924 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1925 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1926 type is (
integer(i8_kind))
1927 tmpstr1 =
''; tmpstr1 = string(corners(1,1))
1928 tmpstr2 =
''; tmpstr2 = string(corners(1,2))
1929 call fms_f2c_string(vals3(key3_i)%val3, trim(tmpstr1)//
' '//trim(tmpstr2))
1930 tmpstr1 =
''; tmpstr1 = string(corners(2,1))
1931 tmpstr2 =
''; tmpstr2 = string(corners(2,2))
1932 call fms_f2c_string(vals3(key3_i)%val4, trim(tmpstr1)//
' '//trim(tmpstr2))
1933 tmpstr1 =
''; tmpstr1 = string(corners(3,1))
1934 tmpstr2 =
''; tmpstr2 = string(corners(3,2))
1935 call fms_f2c_string(vals3(key3_i)%val5, trim(tmpstr1)//
' '//trim(tmpstr2))
1936 tmpstr1 =
''; tmpstr1 = string(corners(4,1))
1937 tmpstr2 =
''; tmpstr2 = string(corners(4,2))
1938 call fms_f2c_string(vals3(key3_i)%val6, trim(tmpstr1)//
' '//trim(tmpstr2))
1944 call initialize_key_struct(keys3(key3_i))
1945 call initialize_val_struct(vals3(key3_i))
1946 call yaml_out_add_level2key(
'global_meta', keys2(i))
1947 if ( fileptr%has_file_global_meta())
then
1948 do gm=1,
SIZE(fileptr%file_global_meta, 1)
1951 call fms_f2c_string(keys3(key3_i)%key1, fileptr%file_global_meta(1,1))
1952 call fms_f2c_string(vals3(key3_i)%val1, fileptr%file_global_meta(1,2))
1954 call fms_f2c_string(keys3(key3_i)%key2, fileptr%file_global_meta(2,1))
1955 call fms_f2c_string(vals3(key3_i)%val2, fileptr%file_global_meta(2,2))
1957 call fms_f2c_string(keys3(key3_i)%key3, fileptr%file_global_meta(3,1))
1958 call fms_f2c_string(vals3(key3_i)%val3, fileptr%file_global_meta(3,2))
1960 call fms_f2c_string(keys3(key3_i)%key4, fileptr%file_global_meta(4,1))
1961 call fms_f2c_string(vals3(key3_i)%val4, fileptr%file_global_meta(4,2))
1963 call fms_f2c_string(keys3(key3_i)%key5, fileptr%file_global_meta(5,1))
1964 call fms_f2c_string(vals3(key3_i)%val5, fileptr%file_global_meta(5,2))
1966 call fms_f2c_string(keys3(key3_i)%key6, fileptr%file_global_meta(6,1))
1967 call fms_f2c_string(vals3(key3_i)%val6, fileptr%file_global_meta(6,2))
1969 call fms_f2c_string(keys3(key3_i)%key7, fileptr%file_global_meta(7,1))
1970 call fms_f2c_string(vals3(key3_i)%val7, fileptr%file_global_meta(7,2))
1972 call fms_f2c_string(keys3(key3_i)%key8, fileptr%file_global_meta(8,1))
1973 call fms_f2c_string(vals3(key3_i)%val8, fileptr%file_global_meta(8,2))
1975 call fms_f2c_string(keys3(key3_i)%key9, fileptr%file_global_meta(9,1))
1976 call fms_f2c_string(vals3(key3_i)%val9, fileptr%file_global_meta(9,2))
1978 call fms_f2c_string(keys3(key3_i)%key10, fileptr%file_global_meta(10,1))
1979 call fms_f2c_string(vals3(key3_i)%val10, fileptr%file_global_meta(10,2))
1981 call fms_f2c_string(keys3(key3_i)%key11, fileptr%file_global_meta(11,1))
1982 call fms_f2c_string(vals3(key3_i)%val11, fileptr%file_global_meta(11,2))
1984 call fms_f2c_string(keys3(key3_i)%key12, fileptr%file_global_meta(12,1))
1985 call fms_f2c_string(vals3(key3_i)%val12, fileptr%file_global_meta(12,2))
1987 call fms_f2c_string(keys3(key3_i)%key13, fileptr%file_global_meta(13,1))
1988 call fms_f2c_string(vals3(key3_i)%val13, fileptr%file_global_meta(13,2))
1990 call fms_f2c_string(keys3(key3_i)%key14, fileptr%file_global_meta(14,1))
1991 call fms_f2c_string(vals3(key3_i)%val14, fileptr%file_global_meta(14,2))
1993 call fms_f2c_string(keys3(key3_i)%key15, fileptr%file_global_meta(15,1))
1994 call fms_f2c_string(vals3(key3_i)%val15, fileptr%file_global_meta(15,2))
1996 call fms_f2c_string(keys3(key3_i)%key16, fileptr%file_global_meta(16,1))
1997 call fms_f2c_string(vals3(key3_i)%val16, fileptr%file_global_meta(16,2))
2004 call get_instance_filename(
'diag_manifest.yaml.'//string(mpp_pe()), filename)
2005 call write_yaml_from_struct_3( trim(filename)//c_null_char, 1, keys, vals, &
2006 SIZE(diag_yaml%diag_files), keys2, vals2, &
2007 tier3size, tier3each, keys3, vals3, &
2008 (/
size(diag_yaml%diag_files), 0, 0, 0, 0, 0, 0, 0/))
2009 deallocate( keys, keys2, keys3, vals, vals2, vals3)