1 #include "sion_const.h"
30 integer,
parameter :: sion_main_version = sion_main_version
31 integer,
parameter :: sion_sub_version = sion_sub_version
32 integer,
parameter :: sion_version_patchlevel = sion_version_patchlevel
33 integer,
parameter :: sion_fileformat_version = sion_fileformat_version
38 integer,
parameter :: sion_current_rank = sion_current_rank
39 integer,
parameter :: sion_current_blk = sion_current_blk
40 integer,
parameter :: sion_current_chunk = sion_current_chunk
41 integer*8,
parameter :: sion_current_pos = sion_current_pos
42 integer,
parameter :: sion_absolute_pos = sion_absolute_pos
43 integer,
parameter :: sion_success = sion_success
49 module procedure fsion_swap_integer
50 module procedure fsion_swap_integer8
51 module procedure fsion_swap_real
52 module procedure fsion_swap_double_precision
53 module procedure fsion_swap_complex
54 module procedure fsion_swap_logical
55 module procedure fsion_swap_character
59 module procedure fsion_write_integer
60 module procedure fsion_write_integer8
61 module procedure fsion_write_real
62 module procedure fsion_write_double_precision
63 module procedure fsion_write_complex
64 module procedure fsion_write_logical
65 module procedure fsion_write_character
69 module procedure fsion_fwrite_integer
70 module procedure fsion_fwrite_integer8
71 module procedure fsion_fwrite_real
72 module procedure fsion_fwrite_double_precision
73 module procedure fsion_fwrite_complex
74 module procedure fsion_fwrite_logical
75 module procedure fsion_fwrite_character
79 module procedure fsion_read_integer
80 module procedure fsion_read_integer8
81 module procedure fsion_read_real
82 module procedure fsion_read_double_precision
83 module procedure fsion_read_complex
84 module procedure fsion_read_logical
85 module procedure fsion_read_character
89 module procedure fsion_fread_integer
90 module procedure fsion_fread_integer8
91 module procedure fsion_fread_real
92 module procedure fsion_fread_double_precision
93 module procedure fsion_fread_complex
94 module procedure fsion_fread_logical
95 module procedure fsion_fread_character
103 subroutine fsion_open(fname,file_mode,ntasks,nfiles,chunksizes,fsblksize,globalranks,sid)
107 character(len=*),
intent(in) :: fname
108 character(len=*),
intent(inout) :: file_mode
109 integer,
intent(in) :: ntasks
110 integer,
intent(in) :: nfiles
111 integer*8,
intent(inout) :: chunksizes
112 integer*4,
intent(inout) :: fsblksize
113 integer,
intent(in) :: globalranks
114 integer,
intent(out) :: sid
116 call fsion_open_c(fname,file_mode,ntasks,nfiles,chunksizes,fsblksize,globalranks,sid)
117 end subroutine fsion_open
119 subroutine fsion_open_rank(fname,file_mode,chunksize,fsblksize,rank,sid)
123 character(len=*),
intent(in) :: fname
124 character(len=*),
intent(inout) :: file_mode
125 integer*8,
intent(inout) :: chunksize
126 integer*4,
intent(inout) :: fsblksize
127 integer,
intent(in) :: rank
128 integer,
intent(out) :: sid
131 end subroutine fsion_open_rank
133 subroutine fsion_close(sid,ierr)
137 integer,
intent(in) :: sid
138 integer,
intent(out) :: ierr
141 end subroutine fsion_close
143 subroutine fsion_feof(sid,eof)
147 integer,
intent(in) :: sid
148 integer,
intent(out) :: eof
151 end subroutine fsion_feof
153 subroutine fsion_seek(sid,rank,currentblocknr,posinblk,ierr)
157 integer,
intent(in) :: sid
158 integer,
intent(in) :: rank
159 integer,
intent(in) :: currentblocknr
160 integer*8,
intent(in) :: posinblk
161 integer,
intent(out) :: ierr
163 call fsion_seek_c(sid,rank,currentblocknr,posinblk,ierr)
164 end subroutine fsion_seek
166 subroutine fsion_ensure_free_space(sid,bytes,ierr)
170 integer,
intent(in) :: sid
171 integer*8,
intent(in) :: bytes
172 integer,
intent(out) :: ierr
175 end subroutine fsion_ensure_free_space
177 subroutine fsion_flush(sid,ierr)
181 integer,
intent(in) :: sid
182 integer,
intent(out) :: ierr
185 end subroutine fsion_flush
187 subroutine fsion_get_locations(sid,ntasks,maxblocks,globalskip,start_of_varheader,&
188 & sion_localsizes,sion_globalranks,sion_chunkcount,sion_chunksizes,ierr)
192 integer,
intent(in) :: sid
193 integer,
intent(out) :: ntasks
194 integer,
intent(out) :: maxblocks
195 integer*8,
intent(out) :: globalskip
196 integer*8,
intent(out) :: start_of_varheader
197 integer*8,
intent(out) :: sion_localsizes
198 integer*8,
intent(out) :: sion_globalranks
199 integer*8,
intent(out) :: sion_chunkcount
200 integer*8,
intent(out) :: sion_chunksizes
201 integer,
intent(out) :: ierr
204 & sion_localsizes,sion_globalranks,sion_chunkcount,sion_chunksizes,ierr)
205 end subroutine fsion_get_locations
207 subroutine fsion_get_current_locations(sid,ntasks,sion_currentpos,sion_currentblocknr,ierr)
211 integer,
intent(in) :: sid
212 integer,
intent(out) :: ntasks
213 integer*8,
intent(out) :: sion_currentpos
214 integer*8,
intent(out) :: sion_currentblocknr
215 integer,
intent(out) :: ierr
217 call fsion_get_current_locations_c(sid,ntasks,sion_currentpos,sion_currentblocknr,ierr)
220 subroutine fsion_get_chunksizes(sid,chunksizes,ierr)
224 integer,
intent(in) :: sid
225 integer*8,
intent(out) :: chunksizes
226 integer,
intent(out) :: ierr
228 call fsion_get_chunksizes_c(sid,chunksizes,ierr)
229 end subroutine fsion_get_chunksizes
231 subroutine fsion_get_globalranks(sid,globalranks,ierr)
235 integer,
intent(in) :: sid
236 integer,
intent(out) :: globalranks
237 integer,
intent(out) :: ierr
239 call fsion_get_globalranks_c(sid,globalranks,ierr)
240 end subroutine fsion_get_globalranks
242 subroutine fsion_get_mapping_spec(sid,mapping_size,numfiles,ierr)
246 integer,
intent(in) :: sid
247 integer,
intent(out) :: mapping_size
248 integer,
intent(out) :: numfiles
249 integer,
intent(out) :: ierr
251 call fsion_get_mapping_spec_c(sid,mapping_size,numfiles,ierr)
252 end subroutine fsion_get_mapping_spec
254 subroutine fsion_get_mapping(sid,mapping,ierr)
258 integer,
intent(in) :: sid
259 integer*4,
intent(out) :: mapping
260 integer,
intent(out) :: ierr
262 call fsion_get_mapping_c(sid,mapping,ierr)
263 end subroutine fsion_get_mapping
265 subroutine fsion_get_fileno(sid,filenumber)
269 integer,
intent(in) :: sid
270 integer,
intent(out) :: filenumber
273 end subroutine fsion_get_fileno
275 subroutine fsion_get_file_endianess(sid,endianness)
279 integer,
intent(in) :: sid
280 integer,
intent(out) :: endianness
283 end subroutine fsion_get_file_endianess
285 subroutine fsion_get_file_endianness(sid,endianness)
289 integer,
intent(in) :: sid
290 integer,
intent(out) :: endianness
293 end subroutine fsion_get_file_endianness
295 subroutine fsion_get_endianess(endianness)
299 integer,
intent(out) :: endianness
302 end subroutine fsion_get_endianess
304 subroutine fsion_get_endianness(endianness)
308 integer,
intent(out) :: endianness
311 end subroutine fsion_get_endianness
313 subroutine fsion_endianness_swap_needed(sid,needed)
317 integer,
intent(in) :: sid
318 integer,
intent(out) :: needed
321 end subroutine fsion_endianness_swap_needed
324 function fsion_bytes_avail_in_block(sid)
328 integer*8 :: fsion_bytes_avail_in_block
329 integer*8 :: fsion_bytes_avail_in_block_c
330 integer,
intent(in) :: sid
332 fsion_bytes_avail_in_block = fsion_bytes_avail_in_block_c(sid)
333 end function fsion_bytes_avail_in_block
335 function fsion_get_position(sid)
339 integer*8 :: fsion_get_position
340 integer*8 :: fsion_get_position_c
341 integer,
intent(in) :: sid
343 fsion_get_position = fsion_get_position_c(sid)
344 end function fsion_get_position
348 subroutine fsion_swap_integer(target,source,size,n,do_swap,rc)
352 integer,
intent (inout) :: target
353 integer,
intent (in) :: source
354 integer,
intent (in) :: size
355 integer,
intent (in) :: n
356 integer,
intent (in) :: do_swap
357 integer,
intent (in) :: rc
360 end subroutine fsion_swap_integer
361 subroutine fsion_swap_integer8(target,source,size,n,do_swap,rc)
365 integer*8,
intent (inout) :: target
366 integer*8,
intent (in) :: source
367 integer,
intent (in) :: size
368 integer,
intent (in) :: n
369 integer,
intent (in) :: do_swap
370 integer,
intent (in) :: rc
373 end subroutine fsion_swap_integer8
374 subroutine fsion_swap_real(target,source,size,n,do_swap,rc)
378 real,
intent (inout) :: target
379 real,
intent (in) :: source
380 integer,
intent (in) :: size
381 integer,
intent (in) :: n
382 integer,
intent (in) :: do_swap
383 integer,
intent (in) :: rc
386 end subroutine fsion_swap_real
387 subroutine fsion_swap_double_precision(target,source,size,n,do_swap,rc)
391 double precision,
intent (inout):: target
392 double precision,
intent (in) :: source
393 integer,
intent (in) :: size
394 integer,
intent (in) :: n
395 integer,
intent (in) :: do_swap
396 integer,
intent (in) :: rc
399 end subroutine fsion_swap_double_precision
400 subroutine fsion_swap_complex(target,source,size,n,do_swap,rc)
404 complex,
intent (inout) :: target
405 complex,
intent (in) :: source
406 integer,
intent (in) :: size
407 integer,
intent (in) :: n
408 integer,
intent (in) :: do_swap
409 integer,
intent (in) :: rc
412 end subroutine fsion_swap_complex
413 subroutine fsion_swap_logical(target,source,size,n,do_swap,rc)
417 logical,
intent (inout) :: target
418 logical,
intent (in) :: source
419 integer,
intent (in) :: size
420 integer,
intent (in) :: n
421 integer,
intent (in) :: do_swap
422 integer,
intent (in) :: rc
425 end subroutine fsion_swap_logical
426 subroutine fsion_swap_character(target,source,size,n,do_swap,rc)
430 character(len=*),
intent (inout):: target
431 character(len=*),
intent (in) :: source
432 integer,
intent (in) :: size
433 integer,
intent (in) :: n
434 integer,
intent (in) :: do_swap
435 integer,
intent (in) :: rc
438 end subroutine fsion_swap_character
441 subroutine fsion_write_integer(data,size,nitems,sid,rc)
445 integer,
intent (in) :: data
446 integer*8,
intent(in) :: size
447 integer*8,
intent(in) :: nitems
448 integer,
intent(in) :: sid
449 integer*8,
intent(out) :: rc
451 call fsion_write_c(
data,
size,nitems,sid,rc)
452 end subroutine fsion_write_integer
453 subroutine fsion_write_integer8(data,size,nitems,sid,rc)
457 integer*8,
intent(in) :: data
458 integer*8,
intent(in) :: size
459 integer*8,
intent(in) :: nitems
460 integer,
intent(in) :: sid
461 integer*8,
intent(out) :: rc
463 call fsion_write_c(
data,
size,nitems,sid,rc)
464 end subroutine fsion_write_integer8
465 subroutine fsion_write_real(data,size,nitems,sid,rc)
469 real,
intent (in) :: data
470 integer*8,
intent(in) :: size
471 integer*8,
intent(in) :: nitems
472 integer,
intent(in) :: sid
473 integer*8,
intent(out) :: rc
475 call fsion_write_c(
data,
size,nitems,sid,rc)
476 end subroutine fsion_write_real
477 subroutine fsion_write_double_precision(data,size,nitems,sid,rc)
481 double precision,
intent (in) :: data
482 integer*8,
intent(in) :: size
483 integer*8,
intent(in) :: nitems
484 integer,
intent(in) :: sid
485 integer*8,
intent(out) :: rc
487 call fsion_write_c(
data,
size,nitems,sid,rc)
488 end subroutine fsion_write_double_precision
489 subroutine fsion_write_complex(data,size,nitems,sid,rc)
493 complex,
intent (in) :: data
494 integer*8,
intent(in) :: size
495 integer*8,
intent(in) :: nitems
496 integer,
intent(in) :: sid
497 integer*8,
intent(out) :: rc
499 call fsion_write_c(
data,
size,nitems,sid,rc)
500 end subroutine fsion_write_complex
501 subroutine fsion_write_logical(data,size,nitems,sid,rc)
505 logical,
intent (in) :: data
506 integer*8,
intent(in) :: size
507 integer*8,
intent(in) :: nitems
508 integer,
intent(in) :: sid
509 integer*8,
intent(out) :: rc
511 call fsion_write_c(
data,
size,nitems,sid,rc)
512 end subroutine fsion_write_logical
513 subroutine fsion_write_character(data,size,nitems,sid,rc)
517 character(len=*),
intent (in) :: data
518 integer*8,
intent(in) :: size
519 integer*8,
intent(in) :: nitems
520 integer,
intent(in) :: sid
521 integer*8,
intent(out) :: rc
523 call fsion_write_c(
data,
size,nitems,sid,rc)
524 end subroutine fsion_write_character
527 subroutine fsion_fwrite_integer(data,size,nitems,sid,rc)
531 integer,
intent (in) :: data
532 integer*8,
intent(in) :: size
533 integer*8,
intent(in) :: nitems
534 integer,
intent(in) :: sid
535 integer*8,
intent(out) :: rc
537 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
538 end subroutine fsion_fwrite_integer
539 subroutine fsion_fwrite_integer8(data,size,nitems,sid,rc)
543 integer*8,
intent (in) :: data
544 integer*8,
intent(in) :: size
545 integer*8,
intent(in) :: nitems
546 integer,
intent(in) :: sid
547 integer*8,
intent(out) :: rc
549 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
550 end subroutine fsion_fwrite_integer8
551 subroutine fsion_fwrite_real(data,size,nitems,sid,rc)
555 real,
intent (in) :: data
556 integer*8,
intent(in) :: size
557 integer*8,
intent(in) :: nitems
558 integer,
intent(in) :: sid
559 integer*8,
intent(out) :: rc
561 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
562 end subroutine fsion_fwrite_real
563 subroutine fsion_fwrite_double_precision(data,size,nitems,sid,rc)
567 double precision,
intent (in) :: data
568 integer*8,
intent(in) :: size
569 integer*8,
intent(in) :: nitems
570 integer,
intent(in) :: sid
571 integer*8,
intent(out) :: rc
573 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
574 end subroutine fsion_fwrite_double_precision
575 subroutine fsion_fwrite_complex(data,size,nitems,sid,rc)
579 complex,
intent (in) :: data
580 integer*8,
intent(in) :: size
581 integer*8,
intent(in) :: nitems
582 integer,
intent(in) :: sid
583 integer*8,
intent(out) :: rc
585 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
586 end subroutine fsion_fwrite_complex
587 subroutine fsion_fwrite_logical(data,size,nitems,sid,rc)
591 logical,
intent (in) :: data
592 integer*8,
intent(in) :: size
593 integer*8,
intent(in) :: nitems
594 integer,
intent(in) :: sid
595 integer*8,
intent(out) :: rc
597 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
598 end subroutine fsion_fwrite_logical
599 subroutine fsion_fwrite_character(data,size,nitems,sid,rc)
603 character(len=*),
intent (in) :: data
604 integer*8,
intent(in) :: size
605 integer*8,
intent(in) :: nitems
606 integer,
intent(in) :: sid
607 integer*8,
intent(out) :: rc
609 call fsion_fwrite_c(
data,
size,nitems,sid,rc)
610 end subroutine fsion_fwrite_character
613 subroutine fsion_read_integer(data,size,nitems,sid,rc)
617 integer,
intent (out) :: data
618 integer*8,
intent(in) :: size
619 integer*8,
intent(in) :: nitems
620 integer,
intent(in) :: sid
621 integer*8,
intent(out) :: rc
623 call fsion_read_c(
data,
size,nitems,sid,rc)
624 end subroutine fsion_read_integer
625 subroutine fsion_read_integer8(data,size,nitems,sid,rc)
629 integer*8,
intent(out) :: data
630 integer*8,
intent(in) :: size
631 integer*8,
intent(in) :: nitems
632 integer,
intent(in) :: sid
633 integer*8,
intent(out) :: rc
635 call fsion_read_c(
data,
size,nitems,sid,rc)
636 end subroutine fsion_read_integer8
637 subroutine fsion_read_real(data,size,nitems,sid,rc)
641 real,
intent (out) :: data
642 integer*8,
intent(in) :: size
643 integer*8,
intent(in) :: nitems
644 integer,
intent(in) :: sid
645 integer*8,
intent(out) :: rc
647 call fsion_read_c(
data,
size,nitems,sid,rc)
648 end subroutine fsion_read_real
649 subroutine fsion_read_double_precision(data,size,nitems,sid,rc)
653 double precision,
intent (out) :: data
654 integer*8,
intent(in) :: size
655 integer*8,
intent(in) :: nitems
656 integer,
intent(in) :: sid
657 integer*8,
intent(out) :: rc
659 call fsion_read_c(
data,
size,nitems,sid,rc)
660 end subroutine fsion_read_double_precision
661 subroutine fsion_read_complex(data,size,nitems,sid,rc)
665 complex,
intent (out) :: data
666 integer*8,
intent(in) :: size
667 integer*8,
intent(in) :: nitems
668 integer,
intent(in) :: sid
669 integer*8,
intent(out) :: rc
671 call fsion_read_c(
data,
size,nitems,sid,rc)
672 end subroutine fsion_read_complex
673 subroutine fsion_read_logical(data,size,nitems,sid,rc)
677 logical,
intent (out) :: data
678 integer*8,
intent(in) :: size
679 integer*8,
intent(in) :: nitems
680 integer,
intent(in) :: sid
681 integer*8,
intent(out) :: rc
683 call fsion_read_c(
data,
size,nitems,sid,rc)
684 end subroutine fsion_read_logical
685 subroutine fsion_read_character(data,size,nitems,sid,rc)
689 character(len=*),
intent (out) :: data
690 integer*8,
intent(in) :: size
691 integer*8,
intent(in) :: nitems
692 integer,
intent(in) :: sid
693 integer*8,
intent(out) :: rc
695 call fsion_read_c(
data,
size,nitems,sid,rc)
696 end subroutine fsion_read_character
699 subroutine fsion_fread_integer(data,size,nitems,sid,rc)
703 integer,
intent (out) :: data
704 integer*8,
intent(in) :: size
705 integer*8,
intent(in) :: nitems
706 integer,
intent(in) :: sid
707 integer*8,
intent(out) :: rc
709 call fsion_fread_c(
data,
size,nitems,sid,rc)
710 end subroutine fsion_fread_integer
711 subroutine fsion_fread_integer8(data,size,nitems,sid,rc)
715 integer*8,
intent (out) :: data
716 integer*8,
intent(in) :: size
717 integer*8,
intent(in) :: nitems
718 integer,
intent(in) :: sid
719 integer*8,
intent(out) :: rc
721 call fsion_fread_c(
data,
size,nitems,sid,rc)
722 end subroutine fsion_fread_integer8
723 subroutine fsion_fread_real(data,size,nitems,sid,rc)
727 real,
intent (out) :: data
728 integer*8,
intent(in) :: size
729 integer*8,
intent(in) :: nitems
730 integer,
intent(in) :: sid
731 integer*8,
intent(out) :: rc
733 call fsion_fread_c(
data,
size,nitems,sid,rc)
734 end subroutine fsion_fread_real
735 subroutine fsion_fread_double_precision(data,size,nitems,sid,rc)
739 double precision,
intent (out) :: data
740 integer*8,
intent(in) :: size
741 integer*8,
intent(in) :: nitems
742 integer,
intent(in) :: sid
743 integer*8,
intent(out) :: rc
745 call fsion_fread_c(
data,
size,nitems,sid,rc)
746 end subroutine fsion_fread_double_precision
747 subroutine fsion_fread_complex(data,size,nitems,sid,rc)
751 complex,
intent (out) :: data
752 integer*8,
intent(in) :: size
753 integer*8,
intent(in) :: nitems
754 integer,
intent(in) :: sid
755 integer*8,
intent(out) :: rc
757 call fsion_fread_c(
data,
size,nitems,sid,rc)
758 end subroutine fsion_fread_complex
759 subroutine fsion_fread_logical(data,size,nitems,sid,rc)
763 logical,
intent (out) :: data
764 integer*8,
intent(in) :: size
765 integer*8,
intent(in) :: nitems
766 integer,
intent(in) :: sid
767 integer*8,
intent(out) :: rc
769 call fsion_fread_c(
data,
size,nitems,sid,rc)
770 end subroutine fsion_fread_logical
771 subroutine fsion_fread_character(data,size,nitems,sid,rc)
775 character(len=*),
intent (out) :: data
776 integer*8,
intent(in) :: size
777 integer*8,
intent(in) :: nitems
778 integer,
intent(in) :: sid
779 integer*8,
intent(out) :: rc
781 call fsion_fread_c(
data,
size,nitems,sid,rc)
782 end subroutine fsion_fread_character
void fsion_get_endianness_c(int *endianness)
Fortran function that returns current endianness (1-> big endian, 0 ->little endian)
void fsion_feof_c(int *sid, int *eof)
Fortran function that indicates the end of file for this task.
void fsion_get_fileno_c(int *sid, int *filenumber)
Fortran function that returns the current file number.
void fsion_seek_c(int *sid, int *rank, int *currentblocknr, sion_int64 *posinblk, int *ierr)
Fortran procedure to set the file pointer to a new position.
void fsion_endianness_swap_needed_c(int *sid, int *needed)
Fortran function that returns whether or not byte swapping is needed (1 -> needed,...
void fsion_open_c(char *fname, char *file_mode, int *ntasks, int *nfiles, sion_int64 *chunksizes, sion_int32 *fsblksize, int *globalranks, int *sid, int fname_len, int file_mode_len)
Fortran procedure to open a sion file in serial mode.
void fsion_get_file_endianness_c(int *sid, int *endianness)
Fortran function that returns endianness of a sion file (1-> big endian, 0 ->little endian)
void fsion_flush_c(int *sid, int *ierr)
Fortran procedure to flush a sion file.
void fsion_get_locations_c(int *sid, int *ntasks, int *maxblocks, sion_int64 *globalskip, sion_int64 *start_of_varheader, sion_int64 **sion_localsizes, sion_int64 **sion_globalranks, sion_int64 **sion_chunkcount, sion_int64 **sion_chunksizes, int *ierr)
Fortran procedure that returns pointers to internal fields.
void fsion_open_rank_c(char *fname, char *file_mode, sion_int64 *chunksize, sion_int32 *fsblksize, int *rank, int *sid, int fname_len, int file_mode_len)
Fortran procedure to open a sion file for a specific rank.
void fsion_swap_c(void *target, void *source, int *size, int *n, int *do_swap, int *rc)
Fortran procedure to swap endianness of data.
void fsion_close_c(int *sid, int *ierr)
Fortran procedure to close a sion file.
void fsion_ensure_free_space_c(int *sid, sion_int64 *bytes, int *ierr)
Fortran procedure to ensure that enough space is available.