41 public :: filewriteaxis
43 public :: fileputassociatedcoordinates
44 public :: filewriteassociatedcoordinates
45 public :: fileaddvariable
49 public :: filegetdatainfo
50 public :: filegetalldatainfo
53 public :: filegetglobalattribute
54 public :: filesetglobalattribute
63 interface filegetdatainfo
64 module procedure filegetdatainfofid
65 module procedure filegetdatainfofname
66 end interface filegetdatainfo
67 interface filegetalldatainfo
68 module procedure filegetalldatainfofid
69 module procedure filegetalldatainfofname
70 end interface filegetalldatainfo
73 module procedure fileputaxisrealsp
74 module procedure fileputaxisrealdp
75 end interface fileputaxis
76 interface filewriteaxis
77 module procedure filewriteaxisrealsp
78 module procedure filewriteaxisrealdp
79 end interface filewriteaxis
80 interface fileputassociatedcoordinates
81 module procedure fileput1dassociatedcoordinatesrealsp
82 module procedure fileput1dassociatedcoordinatesrealdp
83 module procedure fileput2dassociatedcoordinatesrealsp
84 module procedure fileput2dassociatedcoordinatesrealdp
85 module procedure fileput3dassociatedcoordinatesrealsp
86 module procedure fileput3dassociatedcoordinatesrealdp
87 module procedure fileput4dassociatedcoordinatesrealsp
88 module procedure fileput4dassociatedcoordinatesrealdp
89 end interface fileputassociatedcoordinates
90 interface filewriteassociatedcoordinates
91 module procedure filewrite1dassociatedcoordinatesrealsp
92 module procedure filewrite1dassociatedcoordinatesrealdp
93 module procedure filewrite2dassociatedcoordinatesrealsp
94 module procedure filewrite2dassociatedcoordinatesrealdp
95 module procedure filewrite3dassociatedcoordinatesrealsp
96 module procedure filewrite3dassociatedcoordinatesrealdp
97 module procedure filewrite4dassociatedcoordinatesrealsp
98 module procedure filewrite4dassociatedcoordinatesrealdp
99 end interface filewriteassociatedcoordinates
100 interface fileaddvariable
101 module procedure fileaddvariablenot
102 module procedure fileaddvariablerealsp
103 module procedure fileaddvariablerealdp
104 end interface fileaddvariable
106 module procedure fileread1drealsp
107 module procedure fileread1drealdp
108 module procedure fileread2drealsp
109 module procedure fileread2drealdp
110 module procedure fileread3drealsp
111 module procedure fileread3drealdp
112 module procedure fileread4drealsp
113 module procedure fileread4drealdp
114 module procedure filereadvar1drealsp
122 end interface fileread
125 module procedure filewrite1drealdp
126 module procedure filewrite2drealsp
127 module procedure filewrite2drealdp
128 module procedure filewrite3drealsp
129 module procedure filewrite3drealdp
130 module procedure filewrite4drealsp
131 module procedure filewrite4drealdp
132 end interface filewrite
133 interface filegetglobalattribute
135 module procedure filegetglobalattributeint
136 module procedure filegetglobalattributefloat
137 module procedure filegetglobalattributedouble
138 end interface filegetglobalattribute
139 interface filesetglobalattribute
140 module procedure filesetglobalattributetext
141 module procedure filesetglobalattributeint
142 module procedure filesetglobalattributefloat
143 module procedure filesetglobalattributedouble
144 end interface filesetglobalattribute
150 real(DP),
parameter,
public ::
rmiss = -9.9999e+30
159 integer,
private,
parameter :: file_nfile_max = 512
161 integer,
private,
parameter :: file_nvar_max = 40960
164 character(len=File_HLONG),
private,
save :: file_fname_list(file_nfile_max)
165 integer,
private,
save :: file_fid_list (file_nfile_max)
166 integer,
private,
save :: file_fid_count = 1
167 character(len=File_HLONG),
private,
save :: file_vname_list (file_nvar_max)
168 integer,
private,
save :: file_vid_fid_list(file_nvar_max)
169 integer,
private,
save :: file_vid_list (file_nvar_max)
170 integer,
private,
save :: file_vid_count = 1
171 integer,
private,
save :: mpi_myrank
173 character(len=LOG_LMSG),
private :: message
191 use mpi,
only : mpi_comm_null
194 integer,
intent(out) :: fid
195 logical,
intent(out) :: existed
196 character(len=*),
intent( in) :: basename
197 character(len=*),
intent( in) :: title
198 character(len=*),
intent( in) :: source
199 character(len=*),
intent( in) :: institution
200 integer,
intent( in) :: master
201 integer,
intent( in) :: myrank
202 integer,
intent( in) :: rankidx(:)
203 character(len=*),
intent( in),
optional :: time_units
204 logical,
intent( in),
optional :: single
205 logical,
intent( in),
optional :: append
206 integer,
intent( in),
optional :: comm
208 character(len=File_HMID) :: time_units_
215 if (
present(time_units) )
then 216 time_units_ = time_units
218 time_units_ =
'seconds' 223 if (
present(single) )
then 224 if ( single .and. (myrank .ne. master) )
return 231 if (
present(append) )
then 244 if ( existed )
return 247 call filesetglobalattribute( fid, &
249 call filesetglobalattribute( fid, &
251 call filesetglobalattribute( fid, &
252 "institution", institution )
254 if ( .NOT.
present(comm) .OR. comm == mpi_comm_null )
then 256 call filesetglobalattribute( fid, &
257 "myrank", (/myrank/) )
258 call filesetglobalattribute( fid, &
266 call log(
'E',
'xxx failed to set time units')
278 integer,
intent(in) :: fid
279 character(len=*),
intent(in) :: key
280 character(len=*),
intent(out) :: val
290 call log(
'E',
'xxx failed to get text global attribute: '//trim(key))
297 subroutine filegetglobalattributeint( &
302 integer,
intent(in) :: fid
303 character(len=*),
intent(in) :: key
304 integer,
intent(out) :: val(:)
311 fid, key,
size(val), &
314 call log(
'E',
'xxx failed to get integer global attribute: '//trim(key))
318 end subroutine filegetglobalattributeint
321 subroutine filegetglobalattributefloat( &
326 integer,
intent(in) :: fid
327 character(len=*),
intent(in) :: key
328 real(SP),
intent(out) :: val(:)
335 fid, key,
size(val), &
338 call log(
'E',
'xxx failed to get float global attribute: '//trim(key))
342 end subroutine filegetglobalattributefloat
345 subroutine filegetglobalattributedouble( &
350 integer,
intent(in) :: fid
351 character(len=*),
intent(in) :: key
352 real(DP),
intent(out) :: val(:)
359 fid, key,
size(val), &
362 call log(
'E',
'xxx failed to get double global attribute: '//trim(key))
366 end subroutine filegetglobalattributedouble
370 subroutine filesetglobalattributetext( &
375 integer,
intent(in) :: fid
376 character(len=*),
intent(in) :: key
377 character(len=*),
intent(in) :: val
385 call log(
'E',
'xxx failed to set text global attribute: '//trim(key))
389 end subroutine filesetglobalattributetext
392 subroutine filesetglobalattributeint( &
397 integer,
intent(in) :: fid
398 character(len=*),
intent(in) :: key
399 integer,
intent(in) :: val(:)
406 key, val,
size(val), &
409 call log(
'E',
'xxx failed to set integer global attribute: '//trim(key))
413 end subroutine filesetglobalattributeint
416 subroutine filesetglobalattributefloat( &
421 integer,
intent(in) :: fid
422 character(len=*),
intent(in) :: key
423 real(SP),
intent(in) :: val(:)
430 key, val,
size(val), &
433 call log(
'E',
'xxx failed to set float global attribute: '//trim(key))
437 end subroutine filesetglobalattributefloat
440 subroutine filesetglobalattributedouble( &
445 integer,
intent(in) :: fid
446 character(len=*),
intent(in) :: key
447 real(DP),
intent(in) :: val(:)
454 key, val,
size(val), &
457 call log(
'E',
'xxx failed to set double global attribute: '//trim(key))
461 end subroutine filesetglobalattributedouble
470 integer,
intent(in) :: fid
471 character(len=*),
intent(in) :: filetype
472 character(len=*),
intent(in) :: key
473 character(len=*),
intent(in) :: val
480 call log(
'E',
'xxx failed to set option')
497 integer,
intent(out) :: fid
498 character(len=*),
intent( in) :: basename
499 integer,
intent( in) :: mode
500 logical,
intent( in),
optional :: single
501 integer,
intent( in),
optional :: comm
502 integer,
intent( in),
optional :: myrank
509 if (
present(single) ) single_ = single
510 if (
present(myrank) ) mpi_myrank = myrank
512 call filegetfid( fid, existed, &
513 basename, mode, single_, comm )
521 subroutine fileputaxisrealsp( &
529 integer,
intent(in) :: fid
530 character(len=*),
intent(in) :: name
531 character(len=*),
intent(in) :: desc
532 character(len=*),
intent(in) :: units
533 character(len=*),
intent(in) :: dim_name
534 integer,
intent(in) :: dtype
535 real(SP),
intent(in) :: val(:)
540 call file_put_axis( fid, name, desc, units, dim_name, dtype, val,
size(val),
sp, &
543 call log(
'E',
'xxx failed to put axis')
547 end subroutine fileputaxisrealsp
548 subroutine fileputaxisrealdp( &
556 integer,
intent(in) :: fid
557 character(len=*),
intent(in) :: name
558 character(len=*),
intent(in) :: desc
559 character(len=*),
intent(in) :: units
560 character(len=*),
intent(in) :: dim_name
561 integer,
intent(in) :: dtype
562 real(DP),
intent(in) :: val(:)
567 call file_put_axis( fid, name, desc, units, dim_name, dtype, val,
size(val),
dp, &
570 call log(
'E',
'xxx failed to put axis')
574 end subroutine fileputaxisrealdp
584 integer,
intent(in) :: fid
585 character(len=*),
intent(in) :: name
586 character(len=*),
intent(in) :: desc
587 character(len=*),
intent(in) :: units
588 character(len=*),
intent(in) :: dim_name
589 integer,
intent(in) :: dtype
590 integer,
intent(in) :: dim_size
595 call file_def_axis( fid, name, desc, units, dim_name, dtype, dim_size, &
598 call log(
'E',
'xxx failed to define axis')
607 subroutine filewriteaxisrealsp( &
612 integer,
intent(in) :: fid
613 character(len=*),
intent(in) :: name
614 real(SP),
intent(in) :: val(:)
615 integer,
intent(in),
optional :: start(:)
620 if (
present(start) )
then 628 call log(
'E',
'xxx failed to write axis')
632 end subroutine filewriteaxisrealsp
633 subroutine filewriteaxisrealdp( &
638 integer,
intent(in) :: fid
639 character(len=*),
intent(in) :: name
640 real(DP),
intent(in) :: val(:)
641 integer,
intent(in),
optional :: start(:)
646 if (
present(start) )
then 654 call log(
'E',
'xxx failed to write axis')
658 end subroutine filewriteaxisrealdp
663 subroutine fileput1dassociatedcoordinatesrealsp( &
671 integer,
intent(in) :: fid
672 character(len=*),
intent(in) :: name
673 character(len=*),
intent(in) :: desc
674 character(len=*),
intent(in) :: units
675 character(len=*),
intent(in) :: dim_names(:)
676 integer,
intent(in) :: dtype
677 real(SP),
intent(in) :: val(:)
683 name, desc, units, dim_names,
size(dim_names), dtype, &
687 call log(
'E',
'xxx failed to put associated coordinates')
691 end subroutine fileput1dassociatedcoordinatesrealsp
692 subroutine fileput1dassociatedcoordinatesrealdp( &
700 integer,
intent(in) :: fid
701 character(len=*),
intent(in) :: name
702 character(len=*),
intent(in) :: desc
703 character(len=*),
intent(in) :: units
704 character(len=*),
intent(in) :: dim_names(:)
705 integer,
intent(in) :: dtype
706 real(DP),
intent(in) :: val(:)
712 name, desc, units, dim_names,
size(dim_names), dtype, &
716 call log(
'E',
'xxx failed to put associated coordinates')
720 end subroutine fileput1dassociatedcoordinatesrealdp
721 subroutine fileput2dassociatedcoordinatesrealsp( &
729 integer,
intent(in) :: fid
730 character(len=*),
intent(in) :: name
731 character(len=*),
intent(in) :: desc
732 character(len=*),
intent(in) :: units
733 character(len=*),
intent(in) :: dim_names(:)
734 integer,
intent(in) :: dtype
735 real(SP),
intent(in) :: val(:,:)
741 name, desc, units, dim_names,
size(dim_names), dtype, &
745 call log(
'E',
'xxx failed to put associated coordinates')
749 end subroutine fileput2dassociatedcoordinatesrealsp
750 subroutine fileput2dassociatedcoordinatesrealdp( &
758 integer,
intent(in) :: fid
759 character(len=*),
intent(in) :: name
760 character(len=*),
intent(in) :: desc
761 character(len=*),
intent(in) :: units
762 character(len=*),
intent(in) :: dim_names(:)
763 integer,
intent(in) :: dtype
764 real(DP),
intent(in) :: val(:,:)
770 name, desc, units, dim_names,
size(dim_names), dtype, &
774 call log(
'E',
'xxx failed to put associated coordinates')
778 end subroutine fileput2dassociatedcoordinatesrealdp
779 subroutine fileput3dassociatedcoordinatesrealsp( &
787 integer,
intent(in) :: fid
788 character(len=*),
intent(in) :: name
789 character(len=*),
intent(in) :: desc
790 character(len=*),
intent(in) :: units
791 character(len=*),
intent(in) :: dim_names(:)
792 integer,
intent(in) :: dtype
793 real(SP),
intent(in) :: val(:,:,:)
799 name, desc, units, dim_names,
size(dim_names), dtype, &
803 call log(
'E',
'xxx failed to put associated coordinates')
807 end subroutine fileput3dassociatedcoordinatesrealsp
808 subroutine fileput3dassociatedcoordinatesrealdp( &
816 integer,
intent(in) :: fid
817 character(len=*),
intent(in) :: name
818 character(len=*),
intent(in) :: desc
819 character(len=*),
intent(in) :: units
820 character(len=*),
intent(in) :: dim_names(:)
821 integer,
intent(in) :: dtype
822 real(DP),
intent(in) :: val(:,:,:)
828 name, desc, units, dim_names,
size(dim_names), dtype, &
832 call log(
'E',
'xxx failed to put associated coordinates')
836 end subroutine fileput3dassociatedcoordinatesrealdp
837 subroutine fileput4dassociatedcoordinatesrealsp( &
845 integer,
intent(in) :: fid
846 character(len=*),
intent(in) :: name
847 character(len=*),
intent(in) :: desc
848 character(len=*),
intent(in) :: units
849 character(len=*),
intent(in) :: dim_names(:)
850 integer,
intent(in) :: dtype
851 real(SP),
intent(in) :: val(:,:,:,:)
857 name, desc, units, dim_names,
size(dim_names), dtype, &
861 call log(
'E',
'xxx failed to put associated coordinates')
865 end subroutine fileput4dassociatedcoordinatesrealsp
866 subroutine fileput4dassociatedcoordinatesrealdp( &
874 integer,
intent(in) :: fid
875 character(len=*),
intent(in) :: name
876 character(len=*),
intent(in) :: desc
877 character(len=*),
intent(in) :: units
878 character(len=*),
intent(in) :: dim_names(:)
879 integer,
intent(in) :: dtype
880 real(DP),
intent(in) :: val(:,:,:,:)
886 name, desc, units, dim_names,
size(dim_names), dtype, &
890 call log(
'E',
'xxx failed to put associated coordinates')
894 end subroutine fileput4dassociatedcoordinatesrealdp
903 integer,
intent(in) :: fid
904 character(len=*),
intent(in) :: name
905 character(len=*),
intent(in) :: desc
906 character(len=*),
intent(in) :: units
907 character(len=*),
intent(in) :: dim_names(:)
908 integer,
intent(in) :: dtype
914 name, desc, units, dim_names,
size(dim_names), dtype, &
917 call log(
'E',
'xxx failed to put associated coordinates')
926 subroutine filewrite1dassociatedcoordinatesrealsp( &
933 integer,
intent(in) :: fid
934 character(len=*),
intent(in) :: name
935 real(SP),
intent(in) :: val(:)
936 integer,
intent(in),
optional :: start(:)
937 integer,
intent(in),
optional :: count(:)
938 integer,
intent(in),
optional :: ndims
941 intrinsic size, shape
943 if (
present(ndims) )
then 947 ndims, start, count, &
949 else if (
present(start) )
then 952 1, start, shape(val), &
957 1, (/1/), shape(val), &
961 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
965 end subroutine filewrite1dassociatedcoordinatesrealsp
966 subroutine filewrite1dassociatedcoordinatesrealdp( &
973 integer,
intent(in) :: fid
974 character(len=*),
intent(in) :: name
975 real(DP),
intent(in) :: val(:)
976 integer,
intent(in),
optional :: start(:)
977 integer,
intent(in),
optional :: count(:)
978 integer,
intent(in),
optional :: ndims
981 intrinsic size, shape
983 if (
present(ndims) )
then 987 ndims, start, count, &
989 else if (
present(start) )
then 992 1, start, shape(val), &
997 1, (/1/), shape(val), &
1001 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1005 end subroutine filewrite1dassociatedcoordinatesrealdp
1006 subroutine filewrite2dassociatedcoordinatesrealsp( &
1013 integer,
intent(in) :: fid
1014 character(len=*),
intent(in) :: name
1015 real(SP),
intent(in) :: val(:,:)
1016 integer,
intent(in),
optional :: start(:)
1017 integer,
intent(in),
optional :: count(:)
1018 integer,
intent(in),
optional :: ndims
1021 intrinsic size, shape
1023 if (
present(ndims) )
then 1027 ndims, start, count, &
1029 else if (
present(start) )
then 1032 2, start, shape(val), &
1037 2, (/1,1/), shape(val), &
1041 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1045 end subroutine filewrite2dassociatedcoordinatesrealsp
1046 subroutine filewrite2dassociatedcoordinatesrealdp( &
1053 integer,
intent(in) :: fid
1054 character(len=*),
intent(in) :: name
1055 real(DP),
intent(in) :: val(:,:)
1056 integer,
intent(in),
optional :: start(:)
1057 integer,
intent(in),
optional :: count(:)
1058 integer,
intent(in),
optional :: ndims
1061 intrinsic size, shape
1063 if (
present(ndims) )
then 1067 ndims, start, count, &
1069 else if (
present(start) )
then 1072 2, start, shape(val), &
1077 2, (/1,1/), shape(val), &
1081 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1085 end subroutine filewrite2dassociatedcoordinatesrealdp
1086 subroutine filewrite3dassociatedcoordinatesrealsp( &
1093 integer,
intent(in) :: fid
1094 character(len=*),
intent(in) :: name
1095 real(SP),
intent(in) :: val(:,:,:)
1096 integer,
intent(in),
optional :: start(:)
1097 integer,
intent(in),
optional :: count(:)
1098 integer,
intent(in),
optional :: ndims
1101 intrinsic size, shape
1103 if (
present(ndims) )
then 1107 ndims, start, count, &
1109 else if (
present(start) )
then 1112 3, start, shape(val), &
1117 3, (/1,1,1/), shape(val), &
1121 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1125 end subroutine filewrite3dassociatedcoordinatesrealsp
1126 subroutine filewrite3dassociatedcoordinatesrealdp( &
1133 integer,
intent(in) :: fid
1134 character(len=*),
intent(in) :: name
1135 real(DP),
intent(in) :: val(:,:,:)
1136 integer,
intent(in),
optional :: start(:)
1137 integer,
intent(in),
optional :: count(:)
1138 integer,
intent(in),
optional :: ndims
1141 intrinsic size, shape
1143 if (
present(ndims) )
then 1147 ndims, start, count, &
1149 else if (
present(start) )
then 1152 3, start, shape(val), &
1157 3, (/1,1,1/), shape(val), &
1161 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1165 end subroutine filewrite3dassociatedcoordinatesrealdp
1166 subroutine filewrite4dassociatedcoordinatesrealsp( &
1173 integer,
intent(in) :: fid
1174 character(len=*),
intent(in) :: name
1175 real(SP),
intent(in) :: val(:,:,:,:)
1176 integer,
intent(in),
optional :: start(:)
1177 integer,
intent(in),
optional :: count(:)
1178 integer,
intent(in),
optional :: ndims
1181 intrinsic size, shape
1183 if (
present(ndims) )
then 1187 ndims, start, count, &
1189 else if (
present(start) )
then 1192 4, start, shape(val), &
1197 4, (/1,1,1,1/), shape(val), &
1201 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1205 end subroutine filewrite4dassociatedcoordinatesrealsp
1206 subroutine filewrite4dassociatedcoordinatesrealdp( &
1213 integer,
intent(in) :: fid
1214 character(len=*),
intent(in) :: name
1215 real(DP),
intent(in) :: val(:,:,:,:)
1216 integer,
intent(in),
optional :: start(:)
1217 integer,
intent(in),
optional :: count(:)
1218 integer,
intent(in),
optional :: ndims
1221 intrinsic size, shape
1223 if (
present(ndims) )
then 1227 ndims, start, count, &
1229 else if (
present(start) )
then 1232 4, start, shape(val), &
1237 4, (/1,1,1,1/), shape(val), &
1241 call log(
'E',
'xxx failed to put associated coordinates: '//trim(name))
1245 end subroutine filewrite4dassociatedcoordinatesrealdp
1250 subroutine fileaddvariablenot( &
1260 integer,
intent(out) :: vid
1261 integer,
intent( in) :: fid
1262 character(len=*),
intent( in) :: varname
1263 character(len=*),
intent( in) :: desc
1264 character(len=*),
intent( in) :: units
1265 character(len=*),
intent( in) :: dims(:)
1266 integer,
intent( in) :: dtype
1267 logical,
intent( in),
optional :: tavg
1269 call fileaddvariablerealdp(vid, fid, varname, desc, units, dims, dtype, &
1273 end subroutine fileaddvariablenot
1274 subroutine fileaddvariablerealsp( &
1285 integer,
intent(out) :: vid
1286 integer,
intent( in) :: fid
1287 character(len=*),
intent( in) :: varname
1288 character(len=*),
intent( in) :: desc
1289 character(len=*),
intent( in) :: units
1290 character(len=*),
intent( in) :: dims(:)
1291 integer,
intent( in) :: dtype
1292 real(SP),
intent( in) :: tint
1293 logical,
intent( in),
optional :: tavg
1304 do n = 1, file_vid_count
1305 if ( file_vid_fid_list(n) == fid .and. &
1306 varname == file_vname_list(n) )
then 1307 vid = file_vid_list(n)
1313 write(message,
'(2A)')
'###### Variable registration : name = ', trim(varname)
1314 call log(
"I",message)
1316 tint8 =
real(tint,
dp)
1318 if (
present(tavg) )
then 1329 fid, varname, desc, units, dims,
size(dims), dtype, &
1333 call log(
'E',
'xxx failed to add variable: '//trim(varname))
1336 file_vname_list(file_vid_count) = trim(varname)
1337 file_vid_list(file_vid_count) = vid
1338 file_vid_fid_list(file_vid_count) = fid
1339 file_vid_count = file_vid_count + 1
1343 end subroutine fileaddvariablerealsp
1344 subroutine fileaddvariablerealdp( &
1355 integer,
intent(out) :: vid
1356 integer,
intent( in) :: fid
1357 character(len=*),
intent( in) :: varname
1358 character(len=*),
intent( in) :: desc
1359 character(len=*),
intent( in) :: units
1360 character(len=*),
intent( in) :: dims(:)
1361 integer,
intent( in) :: dtype
1362 real(DP),
intent( in) :: tint
1363 logical,
intent( in),
optional :: tavg
1374 do n = 1, file_vid_count
1375 if ( file_vid_fid_list(n) == fid .and. &
1376 varname == file_vname_list(n) )
then 1377 vid = file_vid_list(n)
1383 write(message,
'(2A)')
'###### Variable registration : name = ', trim(varname)
1384 call log(
"I",message)
1386 tint8 =
real(tint,
dp)
1388 if (
present(tavg) )
then 1399 fid, varname, desc, units, dims,
size(dims), dtype, &
1403 call log(
'E',
'xxx failed to add variable: '//trim(varname))
1406 file_vname_list(file_vid_count) = trim(varname)
1407 file_vid_list(file_vid_count) = vid
1408 file_vid_fid_list(file_vid_count) = fid
1409 file_vid_count = file_vid_count + 1
1413 end subroutine fileaddvariablerealdp
1427 integer,
intent(out) :: vid
1428 integer,
intent( in) :: fid
1429 character(len=*),
intent( in) :: varname
1430 character(len=*),
intent( in) :: desc
1431 character(len=*),
intent( in) :: units
1432 integer,
intent( in) :: ndims
1433 character(len=*),
intent( in) :: dims(:)
1434 integer,
intent( in) :: dtype
1435 real(DP),
intent( in),
optional :: tint
1436 logical,
intent( in),
optional :: tavg
1447 do n = 1, file_vid_count
1448 if ( file_vid_fid_list(n) == fid .and. &
1449 varname == file_vname_list(n) )
then 1450 vid = file_vid_list(n)
1456 write(message,
'(2A)')
'###### Variable registration : name = ', trim(varname)
1457 call log(
"I",message)
1459 if (
present(tint) )
then 1465 if (
present(tavg) )
then 1476 fid, varname, desc, units, dims, ndims, dtype, &
1480 call log(
'E',
'xxx failed to add variable: '//trim(varname))
1483 file_vname_list(file_vid_count) = trim(varname)
1484 file_vid_list(file_vid_count) = vid
1485 file_vid_fid_list(file_vid_count) = fid
1486 file_vid_count = file_vid_count + 1
1501 integer,
intent(in) :: fid
1502 character(len=*),
intent(in) :: vname
1503 character(len=*),
intent(in) :: key
1504 character(len=*),
intent(in) :: val
1513 call log(
'E',
'xxx failed to set attr for axis')
1531 integer,
intent(out) :: dims(:)
1532 character(len=*),
intent( in) :: basename
1533 character(len=*),
intent( in) :: varname
1534 integer,
intent( in) :: myrank
1535 logical,
intent( in),
optional :: single
1536 logical,
intent(out),
optional :: error
1552 if (
present(single) )
then 1558 if (
present(error) )
then 1570 fid, varname, 1, suppress, &
1575 if (
present(error) )
then 1579 call log(
'E',
'xxx failed to get data information :'//trim(varname))
1583 if ( dinfo%rank /=
size(dims) )
then 1584 write(message,*)
'xxx rank is different, ',
size(dims), dinfo%rank
1585 call log(
'E', message)
1587 do n = 1,
size(dims)
1588 dims(n) = dinfo%dim_size(n)
1591 if (
present(error) ) error = .false.
1599 subroutine filegetdatainfofname( &
1615 character(len=*),
intent(in) :: basename
1616 character(len=*),
intent(in) :: varname
1617 integer,
intent(in) :: myrank
1618 integer,
intent(in) :: istep
1619 logical,
intent(in),
optional :: single
1621 character(len=File_HMID),
intent(out),
optional :: description
1622 character(len=File_HSHORT),
intent(out),
optional :: units
1623 integer,
intent(out),
optional :: datatype
1624 integer,
intent(out),
optional :: dim_rank
1625 character(len=File_HSHORT),
intent(out),
optional :: dim_name(:)
1626 integer,
intent(out),
optional :: dim_size(:)
1627 real(DP),
intent(out),
optional :: time_start
1628 real(DP),
intent(out),
optional :: time_end
1629 character(len=File_HMID),
intent(out),
optional :: time_units
1634 if (
present(single) )
then 1648 call filegetdatainfofid( &
1663 end subroutine filegetdatainfofname
1664 subroutine filegetdatainfofid( &
1678 integer,
intent(in) :: fid
1679 character(len=*),
intent(in) :: varname
1680 integer,
intent(in) :: istep
1682 character(len=File_HMID),
intent(out),
optional :: description
1683 character(len=File_HSHORT),
intent(out),
optional :: units
1684 integer,
intent(out),
optional :: datatype
1685 integer,
intent(out),
optional :: dim_rank
1686 character(len=File_HSHORT),
intent(out),
optional :: dim_name(:)
1687 integer,
intent(out),
optional :: dim_size(:)
1688 real(DP),
intent(out),
optional :: time_start
1689 real(DP),
intent(out),
optional :: time_end
1690 character(len=File_HMID),
intent(out),
optional :: time_units
1694 integer :: ndim, idim
1712 call log(
'E',
'xxx data info not found')
1715 if (
present(description) ) description = dinfo%description
1716 if (
present(units) ) units = dinfo%units
1717 if (
present(datatype) ) datatype = dinfo%datatype
1718 if (
present(dim_rank) ) dim_rank = dinfo%rank
1720 if (
present(dim_name) )
then 1721 ndim = min( dinfo%rank,
size(dim_name) )
1723 dim_name(idim) = dinfo%dim_name(idim)
1726 if (
present(dim_size) )
then 1727 ndim = min( dinfo%rank,
size(dim_size) )
1729 dim_size(idim) = dinfo%dim_size(idim)
1733 if (
present(time_units) )
then 1734 if ( dinfo%time_units ==
"" )
then 1735 call filegetglobalattribute( fid,
"time_units", time_units )
1737 time_units = dinfo%time_units
1740 if (
present(time_start) )
then 1741 if ( dinfo%time_units ==
"" )
then 1742 call filegetglobalattribute( fid,
"time", time )
1743 time_start = time(1)
1745 time_start = dinfo%time_start
1748 if (
present(time_end) )
then 1749 if ( dinfo%time_units ==
"" )
then 1750 call filegetglobalattribute( fid,
"time", time )
1753 time_end = dinfo%time_end
1758 end subroutine filegetdatainfofid
1763 subroutine filegetalldatainfofname( &
1782 integer,
intent(in) :: step_limit
1783 integer,
intent(in) :: dim_limit
1784 character(len=*),
intent(in) :: basename
1785 character(len=*),
intent(in) :: varname
1786 integer,
intent(in) :: myrank
1787 integer,
intent(out) :: step_nmax
1788 character(len=File_HMID),
intent(out) :: description
1789 character(len=File_HSHORT),
intent(out) :: units
1790 integer,
intent(out) :: datatype
1791 integer,
intent(out) :: dim_rank
1792 character(len=File_HSHORT),
intent(out) :: dim_name (dim_limit)
1793 integer,
intent(out) :: dim_size (dim_limit)
1794 real(DP),
intent(out) :: time_start(step_limit)
1795 real(DP),
intent(out) :: time_end (step_limit)
1796 character(len=File_HMID),
intent(out) :: time_units
1798 logical,
intent(in),
optional :: single
1806 if (
present(single) )
then 1818 call filegetalldatainfofid( &
1835 end subroutine filegetalldatainfofname
1836 subroutine filegetalldatainfofid( &
1853 integer,
intent(in) :: step_limit
1854 integer,
intent(in) :: dim_limit
1855 integer,
intent(in) :: fid
1856 character(len=*),
intent(in) :: varname
1857 integer,
intent(out) :: step_nmax
1858 character(len=File_HMID),
intent(out) :: description
1859 character(len=File_HSHORT),
intent(out) :: units
1860 integer,
intent(out) :: datatype
1861 integer,
intent(out) :: dim_rank
1862 character(len=File_HSHORT),
intent(out) :: dim_name (dim_limit)
1863 integer,
intent(out) :: dim_size (dim_limit)
1864 real(DP),
intent(out) :: time_start(step_limit)
1865 real(DP),
intent(out) :: time_end (step_limit)
1866 character(len=File_HMID),
intent(out) :: time_units
1871 integer :: istep, idim
1883 time_start(:) =
rmiss 1886 do istep = 1, step_limit
1897 step_nmax = istep - 1
1901 if ( istep == 1 )
then 1902 description = dinfo%description
1904 datatype = dinfo%datatype
1905 dim_rank = dinfo%rank
1907 ndim = min( dinfo%rank, dim_limit )
1909 dim_name(idim) = dinfo%dim_name(idim)
1910 dim_size(idim) = dinfo%dim_size(idim)
1913 time_units = dinfo%time_units
1916 time_start(istep) = dinfo%time_start
1917 time_end(istep) = dinfo%time_end
1921 end subroutine filegetalldatainfofid
1926 subroutine fileread1drealsp( &
1937 real(SP),
intent(out) :: var(:)
1938 character(len=*),
intent( in) :: basename
1939 character(len=*),
intent( in) :: varname
1940 integer,
intent( in) :: step
1941 integer,
intent( in) :: myrank
1942 logical,
intent( in),
optional :: allow_missing
1943 logical,
intent( in),
optional :: single
1947 integer :: dim_size(1)
1960 if (
present(single) ) single_ = single
1968 fid, varname, step, .false., &
1973 if (
present(allow_missing) )
then 1974 if ( allow_missing )
then 1975 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
1976 'varname= ',trim(varname),
', step=',step
1977 call log(
'I', message)
1978 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
1981 call log(
'E',
'xxx failed to get data information :'//trim(varname))
1984 call log(
'E',
'xxx failed to get data information :'//trim(varname))
1988 if ( dinfo%rank /= 1 )
then 1989 write(message,*)
'xxx rank is not 1', dinfo%rank
1990 call log(
'E', message)
1992 dim_size(:) = shape(var)
1994 if ( dinfo%dim_size(n) /= dim_size(n) )
then 1995 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
1996 call log(
'E', message)
2004 call log(
'E',
'xxx failed to get data value')
2008 end subroutine fileread1drealsp
2009 subroutine fileread1drealdp( &
2020 real(DP),
intent(out) :: var(:)
2021 character(len=*),
intent( in) :: basename
2022 character(len=*),
intent( in) :: varname
2023 integer,
intent( in) :: step
2024 integer,
intent( in) :: myrank
2025 logical,
intent( in),
optional :: allow_missing
2026 logical,
intent( in),
optional :: single
2030 integer :: dim_size(1)
2043 if (
present(single) ) single_ = single
2051 fid, varname, step, .false., &
2056 if (
present(allow_missing) )
then 2057 if ( allow_missing )
then 2058 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2059 'varname= ',trim(varname),
', step=',step
2060 call log(
'I', message)
2061 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2064 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2067 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2071 if ( dinfo%rank /= 1 )
then 2072 write(message,*)
'xxx rank is not 1', dinfo%rank
2073 call log(
'E', message)
2075 dim_size(:) = shape(var)
2077 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2078 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2079 call log(
'E', message)
2087 call log(
'E',
'xxx failed to get data value')
2091 end subroutine fileread1drealdp
2092 subroutine fileread2drealsp( &
2103 real(SP),
intent(out) :: var(:,:)
2104 character(len=*),
intent( in) :: basename
2105 character(len=*),
intent( in) :: varname
2106 integer,
intent( in) :: step
2107 integer,
intent( in) :: myrank
2108 logical,
intent( in),
optional :: allow_missing
2109 logical,
intent( in),
optional :: single
2113 integer :: dim_size(2)
2126 if (
present(single) ) single_ = single
2134 fid, varname, step, .false., &
2139 if (
present(allow_missing) )
then 2140 if ( allow_missing )
then 2141 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2142 'varname= ',trim(varname),
', step=',step
2143 call log(
'I', message)
2144 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2147 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2150 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2154 if ( dinfo%rank /= 2 )
then 2155 write(message,*)
'xxx rank is not 2', dinfo%rank
2156 call log(
'E', message)
2158 dim_size(:) = shape(var)
2160 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2161 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2162 call log(
'E', message)
2170 call log(
'E',
'xxx failed to get data value')
2174 end subroutine fileread2drealsp
2175 subroutine fileread2drealdp( &
2186 real(DP),
intent(out) :: var(:,:)
2187 character(len=*),
intent( in) :: basename
2188 character(len=*),
intent( in) :: varname
2189 integer,
intent( in) :: step
2190 integer,
intent( in) :: myrank
2191 logical,
intent( in),
optional :: allow_missing
2192 logical,
intent( in),
optional :: single
2196 integer :: dim_size(2)
2209 if (
present(single) ) single_ = single
2217 fid, varname, step, .false., &
2222 if (
present(allow_missing) )
then 2223 if ( allow_missing )
then 2224 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2225 'varname= ',trim(varname),
', step=',step
2226 call log(
'I', message)
2227 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2230 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2233 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2237 if ( dinfo%rank /= 2 )
then 2238 write(message,*)
'xxx rank is not 2', dinfo%rank
2239 call log(
'E', message)
2241 dim_size(:) = shape(var)
2243 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2244 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2245 call log(
'E', message)
2253 call log(
'E',
'xxx failed to get data value')
2257 end subroutine fileread2drealdp
2258 subroutine fileread3drealsp( &
2269 real(SP),
intent(out) :: var(:,:,:)
2270 character(len=*),
intent( in) :: basename
2271 character(len=*),
intent( in) :: varname
2272 integer,
intent( in) :: step
2273 integer,
intent( in) :: myrank
2274 logical,
intent( in),
optional :: allow_missing
2275 logical,
intent( in),
optional :: single
2279 integer :: dim_size(3)
2292 if (
present(single) ) single_ = single
2300 fid, varname, step, .false., &
2305 if (
present(allow_missing) )
then 2306 if ( allow_missing )
then 2307 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2308 'varname= ',trim(varname),
', step=',step
2309 call log(
'I', message)
2310 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2313 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2316 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2320 if ( dinfo%rank /= 3 )
then 2321 write(message,*)
'xxx rank is not 3', dinfo%rank
2322 call log(
'E', message)
2324 dim_size(:) = shape(var)
2326 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2327 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2328 call log(
'E', message)
2336 call log(
'E',
'xxx failed to get data value')
2340 end subroutine fileread3drealsp
2341 subroutine fileread3drealdp( &
2352 real(DP),
intent(out) :: var(:,:,:)
2353 character(len=*),
intent( in) :: basename
2354 character(len=*),
intent( in) :: varname
2355 integer,
intent( in) :: step
2356 integer,
intent( in) :: myrank
2357 logical,
intent( in),
optional :: allow_missing
2358 logical,
intent( in),
optional :: single
2362 integer :: dim_size(3)
2375 if (
present(single) ) single_ = single
2383 fid, varname, step, .false., &
2388 if (
present(allow_missing) )
then 2389 if ( allow_missing )
then 2390 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2391 'varname= ',trim(varname),
', step=',step
2392 call log(
'I', message)
2393 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2396 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2399 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2403 if ( dinfo%rank /= 3 )
then 2404 write(message,*)
'xxx rank is not 3', dinfo%rank
2405 call log(
'E', message)
2407 dim_size(:) = shape(var)
2409 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2410 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2411 call log(
'E', message)
2419 call log(
'E',
'xxx failed to get data value')
2423 end subroutine fileread3drealdp
2424 subroutine fileread4drealsp( &
2435 real(SP),
intent(out) :: var(:,:,:,:)
2436 character(len=*),
intent( in) :: basename
2437 character(len=*),
intent( in) :: varname
2438 integer,
intent( in) :: step
2439 integer,
intent( in) :: myrank
2440 logical,
intent( in),
optional :: allow_missing
2441 logical,
intent( in),
optional :: single
2445 integer :: dim_size(4)
2458 if (
present(single) ) single_ = single
2466 fid, varname, step, .false., &
2471 if (
present(allow_missing) )
then 2472 if ( allow_missing )
then 2473 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2474 'varname= ',trim(varname),
', step=',step
2475 call log(
'I', message)
2476 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2477 var(:,:,:,:) = 0.0_sp
2479 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2482 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2486 if ( dinfo%rank /= 4 )
then 2487 write(message,*)
'xxx rank is not 4', dinfo%rank
2488 call log(
'E', message)
2490 dim_size(:) = shape(var)
2492 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2493 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2494 call log(
'E', message)
2502 call log(
'E',
'xxx failed to get data value')
2506 end subroutine fileread4drealsp
2507 subroutine fileread4drealdp( &
2518 real(DP),
intent(out) :: var(:,:,:,:)
2519 character(len=*),
intent( in) :: basename
2520 character(len=*),
intent( in) :: varname
2521 integer,
intent( in) :: step
2522 integer,
intent( in) :: myrank
2523 logical,
intent( in),
optional :: allow_missing
2524 logical,
intent( in),
optional :: single
2528 integer :: dim_size(4)
2541 if (
present(single) ) single_ = single
2549 fid, varname, step, .false., &
2554 if (
present(allow_missing) )
then 2555 if ( allow_missing )
then 2556 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2557 'varname= ',trim(varname),
', step=',step
2558 call log(
'I', message)
2559 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2560 var(:,:,:,:) = 0.0_dp
2562 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2565 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2569 if ( dinfo%rank /= 4 )
then 2570 write(message,*)
'xxx rank is not 4', dinfo%rank
2571 call log(
'E', message)
2573 dim_size(:) = shape(var)
2575 if ( dinfo%dim_size(n) /= dim_size(n) )
then 2576 write(message,*)
'xxx shape is different: ', varname, n, dinfo%dim_size(n), dim_size(n)
2577 call log(
'E', message)
2585 call log(
'E',
'xxx failed to get data value')
2589 end subroutine fileread4drealdp
2591 subroutine filereadvar1drealsp( &
2603 use mpi,
only : mpi_comm_null
2606 real(SP),
intent(out) :: var(:)
2607 integer,
intent( in) :: fid
2608 character(len=*),
intent( in) :: varname
2609 integer,
intent( in) :: step
2610 logical,
intent( in),
optional :: allow_missing
2611 logical,
intent( in),
optional :: single
2612 integer,
intent( in),
optional :: ntypes
2613 integer,
intent( in),
optional :: dtype
2614 integer,
intent( in),
optional :: start(:)
2615 integer,
intent( in),
optional :: count(:)
2620 intrinsic size, shape
2625 fid, varname, step, .false., &
2630 if (
present(allow_missing) )
then 2631 if ( allow_missing )
then 2632 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2633 'varname= ',trim(varname),
', step=',step
2634 call log(
'I', message)
2635 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2638 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2641 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2645 if ( dinfo%rank /= 1 )
then 2646 write(message,*)
'xxx rank is not 1', dinfo%rank
2647 call log(
'E', message)
2650 if (
present(ntypes) )
then 2652 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
2660 call log(
'E',
'xxx failed to get data value')
2664 end subroutine filereadvar1drealsp
2677 use mpi,
only : mpi_comm_null
2680 real(DP),
intent(out) :: var(:)
2681 integer,
intent( in) :: fid
2682 character(len=*),
intent( in) :: varname
2683 integer,
intent( in) :: step
2684 logical,
intent( in),
optional :: allow_missing
2685 logical,
intent( in),
optional :: single
2686 integer,
intent( in),
optional :: ntypes
2687 integer,
intent( in),
optional :: dtype
2688 integer,
intent( in),
optional :: start(:)
2689 integer,
intent( in),
optional :: count(:)
2691 type(datainfo) :: dinfo
2694 intrinsic size, shape
2699 fid, varname, step, .false., &
2704 if (
present(allow_missing) )
then 2705 if ( allow_missing )
then 2706 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2707 'varname= ',trim(varname),
', step=',step
2708 call log(
'I', message)
2709 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2712 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2715 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2719 if ( dinfo%rank /= 1 )
then 2720 write(message,*)
'xxx rank is not 1', dinfo%rank
2721 call log(
'E', message)
2724 if (
present(ntypes) )
then 2726 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
2734 call log(
'E',
'xxx failed to get data value')
2751 use mpi,
only : mpi_comm_null
2754 real(SP),
intent(out) :: var(:,:)
2755 integer,
intent( in) :: fid
2756 character(len=*),
intent( in) :: varname
2757 integer,
intent( in) :: step
2758 logical,
intent( in),
optional :: allow_missing
2759 logical,
intent( in),
optional :: single
2760 integer,
intent( in),
optional :: ntypes
2761 integer,
intent( in),
optional :: dtype
2762 integer,
intent( in),
optional :: start(:)
2763 integer,
intent( in),
optional :: count(:)
2765 type(datainfo) :: dinfo
2768 intrinsic size, shape
2773 fid, varname, step, .false., &
2778 if (
present(allow_missing) )
then 2779 if ( allow_missing )
then 2780 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2781 'varname= ',trim(varname),
', step=',step
2782 call log(
'I', message)
2783 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2786 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2789 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2793 if ( dinfo%rank /= 2 )
then 2794 write(message,*)
'xxx rank is not 2', dinfo%rank
2795 call log(
'E', message)
2798 if (
present(ntypes) )
then 2800 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
2808 call log(
'E',
'xxx failed to get data value')
2825 use mpi,
only : mpi_comm_null
2828 real(DP),
intent(out) :: var(:,:)
2829 integer,
intent( in) :: fid
2830 character(len=*),
intent( in) :: varname
2831 integer,
intent( in) :: step
2832 logical,
intent( in),
optional :: allow_missing
2833 logical,
intent( in),
optional :: single
2834 integer,
intent( in),
optional :: ntypes
2835 integer,
intent( in),
optional :: dtype
2836 integer,
intent( in),
optional :: start(:)
2837 integer,
intent( in),
optional :: count(:)
2839 type(datainfo) :: dinfo
2842 intrinsic size, shape
2847 fid, varname, step, .false., &
2852 if (
present(allow_missing) )
then 2853 if ( allow_missing )
then 2854 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2855 'varname= ',trim(varname),
', step=',step
2856 call log(
'I', message)
2857 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2860 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2863 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2867 if ( dinfo%rank /= 2 )
then 2868 write(message,*)
'xxx rank is not 2', dinfo%rank
2869 call log(
'E', message)
2872 if (
present(ntypes) )
then 2874 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
2882 call log(
'E',
'xxx failed to get data value')
2899 use mpi,
only : mpi_comm_null
2902 real(SP),
intent(out) :: var(:,:,:)
2903 integer,
intent( in) :: fid
2904 character(len=*),
intent( in) :: varname
2905 integer,
intent( in) :: step
2906 logical,
intent( in),
optional :: allow_missing
2907 logical,
intent( in),
optional :: single
2908 integer,
intent( in),
optional :: ntypes
2909 integer,
intent( in),
optional :: dtype
2910 integer,
intent( in),
optional :: start(:)
2911 integer,
intent( in),
optional :: count(:)
2913 type(datainfo) :: dinfo
2916 intrinsic size, shape
2921 fid, varname, step, .false., &
2926 if (
present(allow_missing) )
then 2927 if ( allow_missing )
then 2928 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
2929 'varname= ',trim(varname),
', step=',step
2930 call log(
'I', message)
2931 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
2934 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2937 call log(
'E',
'xxx failed to get data information :'//trim(varname))
2941 if ( dinfo%rank /= 3 )
then 2942 write(message,*)
'xxx rank is not 3', dinfo%rank
2943 call log(
'E', message)
2946 if (
present(ntypes) )
then 2948 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
2956 call log(
'E',
'xxx failed to get data value')
2973 use mpi,
only : mpi_comm_null
2976 real(DP),
intent(out) :: var(:,:,:)
2977 integer,
intent( in) :: fid
2978 character(len=*),
intent( in) :: varname
2979 integer,
intent( in) :: step
2980 logical,
intent( in),
optional :: allow_missing
2981 logical,
intent( in),
optional :: single
2982 integer,
intent( in),
optional :: ntypes
2983 integer,
intent( in),
optional :: dtype
2984 integer,
intent( in),
optional :: start(:)
2985 integer,
intent( in),
optional :: count(:)
2987 type(datainfo) :: dinfo
2990 intrinsic size, shape
2995 fid, varname, step, .false., &
3000 if (
present(allow_missing) )
then 3001 if ( allow_missing )
then 3002 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
3003 'varname= ',trim(varname),
', step=',step
3004 call log(
'I', message)
3005 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
3008 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3011 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3015 if ( dinfo%rank /= 3 )
then 3016 write(message,*)
'xxx rank is not 3', dinfo%rank
3017 call log(
'E', message)
3020 if (
present(ntypes) )
then 3022 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
3030 call log(
'E',
'xxx failed to get data value')
3047 use mpi,
only : mpi_comm_null
3050 real(SP),
intent(out) :: var(:,:,:,:)
3051 integer,
intent( in) :: fid
3052 character(len=*),
intent( in) :: varname
3053 integer,
intent( in) :: step
3054 logical,
intent( in),
optional :: allow_missing
3055 logical,
intent( in),
optional :: single
3056 integer,
intent( in),
optional :: ntypes
3057 integer,
intent( in),
optional :: dtype
3058 integer,
intent( in),
optional :: start(:)
3059 integer,
intent( in),
optional :: count(:)
3061 type(datainfo) :: dinfo
3064 intrinsic size, shape
3069 fid, varname, step, .false., &
3074 if (
present(allow_missing) )
then 3075 if ( allow_missing )
then 3076 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
3077 'varname= ',trim(varname),
', step=',step
3078 call log(
'I', message)
3079 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
3080 var(:,:,:,:) = 0.0_sp
3082 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3085 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3089 if ( dinfo%rank /= 4 )
then 3090 write(message,*)
'xxx rank is not 4', dinfo%rank
3091 call log(
'E', message)
3094 if (
present(ntypes) )
then 3096 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
3104 call log(
'E',
'xxx failed to get data value')
3121 use mpi,
only : mpi_comm_null
3124 real(DP),
intent(out) :: var(:,:,:,:)
3125 integer,
intent( in) :: fid
3126 character(len=*),
intent( in) :: varname
3127 integer,
intent( in) :: step
3128 logical,
intent( in),
optional :: allow_missing
3129 logical,
intent( in),
optional :: single
3130 integer,
intent( in),
optional :: ntypes
3131 integer,
intent( in),
optional :: dtype
3132 integer,
intent( in),
optional :: start(:)
3133 integer,
intent( in),
optional :: count(:)
3135 type(datainfo) :: dinfo
3138 intrinsic size, shape
3143 fid, varname, step, .false., &
3148 if (
present(allow_missing) )
then 3149 if ( allow_missing )
then 3150 write(message,*)
'xxx [INPUT]/[File] data not found! : ', &
3151 'varname= ',trim(varname),
', step=',step
3152 call log(
'I', message)
3153 call log(
'I',
'xxx [INPUT]/[File] Value is set to 0.')
3154 var(:,:,:,:) = 0.0_dp
3156 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3159 call log(
'E',
'xxx failed to get data information :'//trim(varname))
3163 if ( dinfo%rank /= 4 )
then 3164 write(message,*)
'xxx rank is not 4', dinfo%rank
3165 call log(
'E', message)
3168 if (
present(ntypes) )
then 3170 dinfo,
size(shape(var)), ntypes, dtype, start, count, &
3178 call log(
'E',
'xxx failed to get data value')
3199 real(SP),
intent(in) :: var(:)
3200 integer,
intent(in) :: fid
3201 integer,
intent(in) :: vid
3202 real(DP),
intent(in) :: t_start
3203 real(DP),
intent(in) :: t_end
3204 integer,
intent(in),
optional :: start(:)
3205 integer,
intent(in),
optional :: count(:)
3206 integer,
intent(in),
optional :: ndims
3210 integer :: start_(1)
3213 character(len=100) :: str
3221 if (
present(ndims) )
then 3225 if ( .not.
present(start) )
then 3226 call log(
'E',
'start argument is neccessary when ndims is specified')
3228 if ( .not.
present(count) )
then 3229 call log(
'E',
'count argument is neccessary when ndims is specified')
3233 ndims, start, count, &
3237 if (
present(start) )
then 3238 start_(:) = start(:)
3243 1, start_, shape(var), &
3247 do n = 1, file_vid_count
3248 if ( file_vid_list(n) == vid )
then 3249 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3253 call log(
'E', trim(str))
3258 subroutine filewrite1drealdp( &
3270 real(DP),
intent(in) :: var(:)
3271 integer,
intent(in) :: fid
3272 integer,
intent(in) :: vid
3273 real(DP),
intent(in) :: t_start
3274 real(DP),
intent(in) :: t_end
3275 integer,
intent(in),
optional :: start(:)
3276 integer,
intent(in),
optional :: count(:)
3277 integer,
intent(in),
optional :: ndims
3281 integer :: start_(1)
3284 character(len=100) :: str
3292 if (
present(ndims) )
then 3296 if ( .not.
present(start) )
then 3297 call log(
'E',
'start argument is neccessary when ndims is specified')
3299 if ( .not.
present(count) )
then 3300 call log(
'E',
'count argument is neccessary when ndims is specified')
3304 ndims, start, count, &
3308 if (
present(start) )
then 3309 start_(:) = start(:)
3314 1, start_, shape(var), &
3318 do n = 1, file_vid_count
3319 if ( file_vid_list(n) == vid )
then 3320 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3324 call log(
'E', trim(str))
3328 end subroutine filewrite1drealdp
3329 subroutine filewrite2drealsp( &
3341 real(SP),
intent(in) :: var(:,:)
3342 integer,
intent(in) :: fid
3343 integer,
intent(in) :: vid
3344 real(DP),
intent(in) :: t_start
3345 real(DP),
intent(in) :: t_end
3346 integer,
intent(in),
optional :: start(:)
3347 integer,
intent(in),
optional :: count(:)
3348 integer,
intent(in),
optional :: ndims
3352 integer :: start_(2)
3355 character(len=100) :: str
3363 if (
present(ndims) )
then 3367 if ( .not.
present(start) )
then 3368 call log(
'E',
'start argument is neccessary when ndims is specified')
3370 if ( .not.
present(count) )
then 3371 call log(
'E',
'count argument is neccessary when ndims is specified')
3375 ndims, start, count, &
3379 if (
present(start) )
then 3380 start_(:) = start(:)
3385 2, start_, shape(var), &
3389 do n = 1, file_vid_count
3390 if ( file_vid_list(n) == vid )
then 3391 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3395 call log(
'E', trim(str))
3399 end subroutine filewrite2drealsp
3400 subroutine filewrite2drealdp( &
3412 real(DP),
intent(in) :: var(:,:)
3413 integer,
intent(in) :: fid
3414 integer,
intent(in) :: vid
3415 real(DP),
intent(in) :: t_start
3416 real(DP),
intent(in) :: t_end
3417 integer,
intent(in),
optional :: start(:)
3418 integer,
intent(in),
optional :: count(:)
3419 integer,
intent(in),
optional :: ndims
3423 integer :: start_(2)
3426 character(len=100) :: str
3434 if (
present(ndims) )
then 3438 if ( .not.
present(start) )
then 3439 call log(
'E',
'start argument is neccessary when ndims is specified')
3441 if ( .not.
present(count) )
then 3442 call log(
'E',
'count argument is neccessary when ndims is specified')
3446 ndims, start, count, &
3450 if (
present(start) )
then 3451 start_(:) = start(:)
3456 2, start_, shape(var), &
3460 do n = 1, file_vid_count
3461 if ( file_vid_list(n) == vid )
then 3462 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3466 call log(
'E', trim(str))
3470 end subroutine filewrite2drealdp
3471 subroutine filewrite3drealsp( &
3483 real(SP),
intent(in) :: var(:,:,:)
3484 integer,
intent(in) :: fid
3485 integer,
intent(in) :: vid
3486 real(DP),
intent(in) :: t_start
3487 real(DP),
intent(in) :: t_end
3488 integer,
intent(in),
optional :: start(:)
3489 integer,
intent(in),
optional :: count(:)
3490 integer,
intent(in),
optional :: ndims
3494 integer :: start_(3)
3497 character(len=100) :: str
3505 if (
present(ndims) )
then 3509 if ( .not.
present(start) )
then 3510 call log(
'E',
'start argument is neccessary when ndims is specified')
3512 if ( .not.
present(count) )
then 3513 call log(
'E',
'count argument is neccessary when ndims is specified')
3517 ndims, start, count, &
3521 if (
present(start) )
then 3522 start_(:) = start(:)
3527 3, start_, shape(var), &
3531 do n = 1, file_vid_count
3532 if ( file_vid_list(n) == vid )
then 3533 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3537 call log(
'E', trim(str))
3541 end subroutine filewrite3drealsp
3542 subroutine filewrite3drealdp( &
3554 real(DP),
intent(in) :: var(:,:,:)
3555 integer,
intent(in) :: fid
3556 integer,
intent(in) :: vid
3557 real(DP),
intent(in) :: t_start
3558 real(DP),
intent(in) :: t_end
3559 integer,
intent(in),
optional :: start(:)
3560 integer,
intent(in),
optional :: count(:)
3561 integer,
intent(in),
optional :: ndims
3565 integer :: start_(3)
3568 character(len=100) :: str
3576 if (
present(ndims) )
then 3580 if ( .not.
present(start) )
then 3581 call log(
'E',
'start argument is neccessary when ndims is specified')
3583 if ( .not.
present(count) )
then 3584 call log(
'E',
'count argument is neccessary when ndims is specified')
3588 ndims, start, count, &
3592 if (
present(start) )
then 3593 start_(:) = start(:)
3598 3, start_, shape(var), &
3602 do n = 1, file_vid_count
3603 if ( file_vid_list(n) == vid )
then 3604 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3608 call log(
'E', trim(str))
3612 end subroutine filewrite3drealdp
3613 subroutine filewrite4drealsp( &
3625 real(SP),
intent(in) :: var(:,:,:,:)
3626 integer,
intent(in) :: fid
3627 integer,
intent(in) :: vid
3628 real(DP),
intent(in) :: t_start
3629 real(DP),
intent(in) :: t_end
3630 integer,
intent(in),
optional :: start(:)
3631 integer,
intent(in),
optional :: count(:)
3632 integer,
intent(in),
optional :: ndims
3636 integer :: start_(4)
3639 character(len=100) :: str
3647 if (
present(ndims) )
then 3651 if ( .not.
present(start) )
then 3652 call log(
'E',
'start argument is neccessary when ndims is specified')
3654 if ( .not.
present(count) )
then 3655 call log(
'E',
'count argument is neccessary when ndims is specified')
3659 ndims, start, count, &
3663 if (
present(start) )
then 3664 start_(:) = start(:)
3669 4, start_, shape(var), &
3673 do n = 1, file_vid_count
3674 if ( file_vid_list(n) == vid )
then 3675 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3679 call log(
'E', trim(str))
3683 end subroutine filewrite4drealsp
3684 subroutine filewrite4drealdp( &
3696 real(DP),
intent(in) :: var(:,:,:,:)
3697 integer,
intent(in) :: fid
3698 integer,
intent(in) :: vid
3699 real(DP),
intent(in) :: t_start
3700 real(DP),
intent(in) :: t_end
3701 integer,
intent(in),
optional :: start(:)
3702 integer,
intent(in),
optional :: count(:)
3703 integer,
intent(in),
optional :: ndims
3707 integer :: start_(4)
3710 character(len=100) :: str
3718 if (
present(ndims) )
then 3722 if ( .not.
present(start) )
then 3723 call log(
'E',
'start argument is neccessary when ndims is specified')
3725 if ( .not.
present(count) )
then 3726 call log(
'E',
'count argument is neccessary when ndims is specified')
3730 ndims, start, count, &
3734 if (
present(start) )
then 3735 start_(:) = start(:)
3740 4, start_, shape(var), &
3744 do n = 1, file_vid_count
3745 if ( file_vid_list(n) == vid )
then 3746 write(str,*)
'xxx failed to write data: ', trim(file_vname_list(n)), mpi_myrank
3750 call log(
'E', trim(str))
3754 end subroutine filewrite4drealdp
3763 integer,
intent(in) :: fid
3768 if ( fid < 0 )
return 3770 do n = 1, file_fid_count-1
3771 if ( file_fid_list(n) == fid )
exit 3773 if ( fid .NE. file_fid_list(n) )
then 3774 write(message,*)
'xxx in FileEndDef invalid fid' , fid
3775 call log(
'E', message)
3783 write(message,
'(A,I3.3,2A)')
'###### File end define mode : No.', file_fid_list(n), &
3784 ', name = ', trim(file_fname_list(n))
3785 call log(
"I",message)
3790 call log(
'E',
'xxx failed to exit define mode')
3804 integer,
intent(in) :: fid
3805 integer,
intent(in) :: buf_amount
3810 if ( fid < 0 )
return 3812 do n = 1, file_fid_count-1
3813 if ( file_fid_list(n) == fid )
exit 3815 if ( fid .NE. file_fid_list(n) )
then 3816 write(message,*)
'xxx in FileAttachBuffer invalid fid' , fid
3817 call log(
'E', message)
3824 write(message,
'(A,I3.3,3A,I10)')
'###### File attach buffer : No.', file_fid_list(n), &
3825 ', name = ', trim(file_fname_list(n)), &
3826 ', size = ', buf_amount
3827 call log(
"I",message)
3831 call log(
'E',
'xxx failed to attach buffer in PnetCDF')
3844 integer,
intent(in) :: fid
3849 if ( fid < 0 )
return 3851 do n = 1, file_fid_count-1
3852 if ( file_fid_list(n) == fid )
exit 3854 if ( n == file_fid_count )
return 3856 if ( fid .NE. file_fid_list(n) )
then 3857 write(message,*)
'xxx in FileDetachBuffer invalid fid' , fid
3858 call log(
'E', message)
3865 write(message,
'(A,I3.3,2A)')
'###### File detach buffer : No.', file_fid_list(n), &
3866 ', name = ', trim(file_fname_list(n))
3867 call log(
"I",message)
3871 call log(
'E',
'xxx failed to detach buffer in PnetCDF')
3885 integer,
intent(in) :: fid
3890 if ( fid < 0 )
return 3891 if ( file_fid_count == 1 )
return 3893 do n = 1, file_fid_count-1
3894 if ( file_fid_list(n) == fid )
exit 3896 if ( n == file_fid_count )
return 3898 if ( fid .NE. file_fid_list(n) )
then 3899 write(message,*)
'xxx in FileFlush invalid fid' , fid
3900 call log(
'E', message)
3907 write(message,
'(A,I3.3,2A)')
'###### File flush : No.', file_fid_list(n), &
3908 ', name = ', trim(file_fname_list(n))
3909 call log(
"I",message)
3914 call log(
'E',
'xxx failed to flush PnetCDF pending requests')
3927 integer,
intent(in) :: fid
3929 character(len=File_HLONG) :: fname
3934 if ( fid < 0 )
return 3936 do n = 1, file_fid_count-1
3937 if ( file_fid_list(n) == fid )
exit 3939 if ( n == file_fid_count )
return 3941 if ( fid /= file_fid_list(n) )
then 3942 write(message,*)
'xxx in FileClose invalid fid ', fid
3943 call log(
'E', message)
3950 write(message,
'(A,I3.3,2A)')
'###### File close : No.', file_fid_list(n), &
3951 ', name = ', trim(file_fname_list(n))
3952 call log(
"I",message)
3957 call log(
'E',
'xxx failed to close file')
3961 do n = 1, file_fid_count-1
3962 if ( file_fid_list(n) == fid )
then 3963 file_fid_list(n) = -1
3964 file_fname_list(n) =
'' 3977 do n = 1, file_fid_count-1
3993 character(len=*),
intent(out) :: fname
3994 character(len=*),
intent( in) :: basename
3995 character(len=*),
intent( in) :: prefix
3996 integer,
intent( in) :: myrank
3997 integer,
intent( in) :: len
4000 character(len=17) :: fmt =
"(A, '.', A, I*.*)" 4003 if ( len < 1 .or. len > 9 )
then 4004 call log(
'E',
'xxx len is invalid')
4007 write(fmt(14:14),
'(I1)') len
4008 write(fmt(16:16),
'(I1)') len
4009 write(fname, fmt) trim(basename), trim(prefix), myrank
4014 subroutine filegetfid( &
4021 use mpi,
only : mpi_comm_null, mpi_comm_self
4024 integer,
intent(out) :: fid
4025 logical,
intent(out) :: existed
4026 character(len=*),
intent( in) :: basename
4027 integer,
intent( in) :: mode
4028 logical,
intent( in) :: single
4029 integer,
intent( in),
optional :: comm
4031 character(len=File_HSHORT) :: rwname(0:2)
4032 data rwname /
'READ',
'WRITE',
'APPEND' /
4034 character(len=File_HLONG) :: fname
4042 comm_ = mpi_comm_null
4043 if (
present(comm) ) comm_ = comm
4044 if ( comm_ .NE. mpi_comm_null )
then 4048 elseif ( single )
then 4049 fname = trim(basename)//
'.peall' 4056 do n = 1, file_fid_count-1
4057 if ( fname==file_fname_list(n) ) fid = file_fid_list(n)
4060 if ( fid >= 0 )
then 4066 fname, mode, comm_, &
4070 call log(
'E',
'xxx failed to open file :'//trim(fname)//
'.nc')
4074 write(message,
'(3A,I3.3,2A)')
'###### File registration (', &
4075 trim(rwname(mode)),
') : No.', fid,
', name = ', trim(fname)
4076 call log(
"I",message)
4078 file_fname_list(file_fid_count) = trim(fname)
4079 file_fid_list(file_fid_count) = fid
4080 file_fid_count = file_fid_count + 1
4085 end subroutine filegetfid
integer, parameter, public log_lmsg
integer, parameter, public dp
subroutine, public log(type, message)
integer, parameter, public sp