SIONlib  1.7.7
Scalable I/O library for parallel access to task-local files
sion_f90.F90
1 #include "sion_const.h"
2 
3 !*****************************************************************************
4 !** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
5 !*****************************************************************************
6 !** Copyright (c) 2008-2019 **
7 !** Forschungszentrum Juelich, Juelich Supercomputing Centre **
8 !** **
9 !** See the file COPYRIGHT in the package base directory for details **
10 !*****************************************************************************
11 
12 !*****************************************************************************
13 !** Module file of Fortran 90 interface to SIONlib **
14 !*****************************************************************************
15 !*
16 !* @file sion_f90.f90
17 !*
18 !* @brief Fortran90 interface
19 !*
20 !* @author Florian Janetzko
21 !* @date 03.05.2013
22 !*
23 module sion_f90
24 
25  implicit none
26 
27 !****************************
28 !* SION version information *
29 !****************************
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
34 
35 !******************
36 !* SION constants *
37 !******************
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
44 
45 !************************************************************
46 !* Explicit interfaces to C void functions with overloading *
47 !************************************************************
48  interface fsion_swap
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
56  end interface fsion_swap
57 
58  interface fsion_write
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
66  end interface fsion_write
67 
68  interface fsion_fwrite
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
76  end interface fsion_fwrite
77 
78  interface fsion_read
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
86  end interface fsion_read
87 
88  interface fsion_fread
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
96  end interface fsion_fread
97 
98 !***********************************************
99 !* Fortran interface subroutines and functions *
100 !***********************************************
101 contains
102 ! Subroutines (without overloading)
103  subroutine fsion_open(fname,file_mode,ntasks,nfiles,chunksizes,fsblksize,globalranks,sid)
104 
105  implicit none
106 
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
115 
116  call fsion_open_c(fname,file_mode,ntasks,nfiles,chunksizes,fsblksize,globalranks,sid)
117  end subroutine fsion_open
118 
119  subroutine fsion_open_rank(fname,file_mode,chunksize,fsblksize,rank,sid)
120 
121  implicit none
122 
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
129 
130  call fsion_open_rank_c(fname,file_mode,chunksize,fsblksize,rank,sid)
131  end subroutine fsion_open_rank
132 
133  subroutine fsion_close(sid,ierr)
134 
135  implicit none
136 
137  integer, intent(in) :: sid
138  integer, intent(out) :: ierr
139 
140  call fsion_close_c(sid,ierr)
141  end subroutine fsion_close
142 
143  subroutine fsion_feof(sid,eof)
144 
145  implicit none
146 
147  integer, intent(in) :: sid
148  integer, intent(out) :: eof
149 
150  call fsion_feof_c(sid,eof)
151  end subroutine fsion_feof
152 
153  subroutine fsion_seek(sid,rank,currentblocknr,posinblk,ierr)
154 
155  implicit none
156 
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
162 
163  call fsion_seek_c(sid,rank,currentblocknr,posinblk,ierr)
164  end subroutine fsion_seek
165 
166  subroutine fsion_ensure_free_space(sid,bytes,ierr)
167 
168  implicit none
169 
170  integer, intent(in) :: sid
171  integer*8, intent(in) :: bytes
172  integer, intent(out) :: ierr
173 
174  call fsion_ensure_free_space_c(sid,bytes,ierr)
175  end subroutine fsion_ensure_free_space
176 
177  subroutine fsion_flush(sid,ierr)
178 
179  implicit none
180 
181  integer, intent(in) :: sid
182  integer, intent(out) :: ierr
183 
184  call fsion_flush_c(sid,ierr)
185  end subroutine fsion_flush
186 
187  subroutine fsion_get_locations(sid,ntasks,maxblocks,globalskip,start_of_varheader,&
188 & sion_localsizes,sion_globalranks,sion_chunkcount,sion_chunksizes,ierr)
189 
190  implicit none
191 
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
202 
203  call fsion_get_locations_c(sid,ntasks,maxblocks,globalskip,start_of_varheader,&
204 & sion_localsizes,sion_globalranks,sion_chunkcount,sion_chunksizes,ierr)
205  end subroutine fsion_get_locations
206 
207  subroutine fsion_get_current_locations(sid,ntasks,sion_currentpos,sion_currentblocknr,ierr)
208 
209  implicit none
210 
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
216 
217  call fsion_get_current_locations_c(sid,ntasks,sion_currentpos,sion_currentblocknr,ierr)
218  end subroutine
219 
220  subroutine fsion_get_chunksizes(sid,chunksizes,ierr)
221 
222  implicit none
223 
224  integer, intent(in) :: sid
225  integer*8, intent(out) :: chunksizes
226  integer, intent(out) :: ierr
227 
228  call fsion_get_chunksizes_c(sid,chunksizes,ierr)
229  end subroutine fsion_get_chunksizes
230 
231  subroutine fsion_get_globalranks(sid,globalranks,ierr)
232 
233  implicit none
234 
235  integer, intent(in) :: sid
236  integer, intent(out) :: globalranks
237  integer, intent(out) :: ierr
238 
239  call fsion_get_globalranks_c(sid,globalranks,ierr)
240  end subroutine fsion_get_globalranks
241 
242  subroutine fsion_get_mapping_spec(sid,mapping_size,numfiles,ierr)
243 
244  implicit none
245 
246  integer, intent(in) :: sid
247  integer, intent(out) :: mapping_size
248  integer, intent(out) :: numfiles
249  integer, intent(out) :: ierr
250 
251  call fsion_get_mapping_spec_c(sid,mapping_size,numfiles,ierr)
252  end subroutine fsion_get_mapping_spec
253 
254  subroutine fsion_get_mapping(sid,mapping,ierr)
255 
256  implicit none
257 
258  integer, intent(in) :: sid
259  integer*4, intent(out) :: mapping
260  integer, intent(out) :: ierr
261 
262  call fsion_get_mapping_c(sid,mapping,ierr)
263  end subroutine fsion_get_mapping
264 
265  subroutine fsion_get_fileno(sid,filenumber)
266 
267  implicit none
268 
269  integer, intent(in) :: sid
270  integer, intent(out) :: filenumber
271 
272  call fsion_get_fileno_c(sid,filenumber)
273  end subroutine fsion_get_fileno
274 
275  subroutine fsion_get_file_endianess(sid,endianness)
276 
277  implicit none
278 
279  integer, intent(in) :: sid
280  integer, intent(out) :: endianness
281 
282  call fsion_get_file_endianness_c(sid,endianness)
283  end subroutine fsion_get_file_endianess
284 
285  subroutine fsion_get_file_endianness(sid,endianness)
286 
287  implicit none
288 
289  integer, intent(in) :: sid
290  integer, intent(out) :: endianness
291 
292  call fsion_get_file_endianness_c(sid,endianness)
293  end subroutine fsion_get_file_endianness
294 
295  subroutine fsion_get_endianess(endianness)
296 
297  implicit none
298 
299  integer, intent(out) :: endianness
300 
301  call fsion_get_endianness_c(endianness)
302  end subroutine fsion_get_endianess
303 
304  subroutine fsion_get_endianness(endianness)
305 
306  implicit none
307 
308  integer, intent(out) :: endianness
309 
310  call fsion_get_endianness_c(endianness)
311  end subroutine fsion_get_endianness
312 
313  subroutine fsion_endianness_swap_needed(sid,needed)
314 
315  implicit none
316 
317  integer, intent(in) :: sid
318  integer, intent(out) :: needed
319 
320  call fsion_endianness_swap_needed_c(sid,needed)
321  end subroutine fsion_endianness_swap_needed
322 
323 ! Functions (without overloading)
324  function fsion_bytes_avail_in_block(sid)
325 
326  implicit none
327 
328  integer*8 :: fsion_bytes_avail_in_block
329  integer*8 :: fsion_bytes_avail_in_block_c
330  integer, intent(in) :: sid
331 
332  fsion_bytes_avail_in_block = fsion_bytes_avail_in_block_c(sid)
333  end function fsion_bytes_avail_in_block
334 
335  function fsion_get_position(sid)
336 
337  implicit none
338 
339  integer*8 :: fsion_get_position
340  integer*8 :: fsion_get_position_c
341  integer, intent(in) :: sid
342 
343  fsion_get_position = fsion_get_position_c(sid)
344  end function fsion_get_position
345 
346 ! Subroutines (with overloading)
347 ! fsion_swap
348  subroutine fsion_swap_integer(target,source,size,n,do_swap,rc)
349 
350  implicit none
351 
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
358 
359  call fsion_swap_c(target,source,size,n,do_swap,rc)
360  end subroutine fsion_swap_integer
361  subroutine fsion_swap_integer8(target,source,size,n,do_swap,rc)
362 
363  implicit none
364 
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
371 
372  call fsion_swap_c(target,source,size,n,do_swap,rc)
373  end subroutine fsion_swap_integer8
374  subroutine fsion_swap_real(target,source,size,n,do_swap,rc)
375 
376  implicit none
377 
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
384 
385  call fsion_swap_c(target,source,size,n,do_swap,rc)
386  end subroutine fsion_swap_real
387  subroutine fsion_swap_double_precision(target,source,size,n,do_swap,rc)
388 
389  implicit none
390 
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
397 
398  call fsion_swap_c(target,source,size,n,do_swap,rc)
399  end subroutine fsion_swap_double_precision
400  subroutine fsion_swap_complex(target,source,size,n,do_swap,rc)
401 
402  implicit none
403 
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
410 
411  call fsion_swap_c(target,source,size,n,do_swap,rc)
412  end subroutine fsion_swap_complex
413  subroutine fsion_swap_logical(target,source,size,n,do_swap,rc)
414 
415  implicit none
416 
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
423 
424  call fsion_swap_c(target,source,size,n,do_swap,rc)
425  end subroutine fsion_swap_logical
426  subroutine fsion_swap_character(target,source,size,n,do_swap,rc)
427 
428  implicit none
429 
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
436 
437  call fsion_swap_c(target,source,size,n,do_swap,rc)
438  end subroutine fsion_swap_character
439 
440 ! fsion_write
441  subroutine fsion_write_integer(data,size,nitems,sid,rc)
442 
443  implicit none
444 
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
450 
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)
454 
455  implicit none
456 
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
462 
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)
466 
467  implicit none
468 
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
474 
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)
478 
479  implicit none
480 
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
486 
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)
490 
491  implicit none
492 
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
498 
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)
502 
503  implicit none
504 
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
510 
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)
514 
515  implicit none
516 
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
522 
523  call fsion_write_c(data,size,nitems,sid,rc)
524  end subroutine fsion_write_character
525 
526 ! fsion_fwrite
527  subroutine fsion_fwrite_integer(data,size,nitems,sid,rc)
528 
529  implicit none
530 
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
536 
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)
540 
541  implicit none
542 
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
548 
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)
552 
553  implicit none
554 
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
560 
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)
564 
565  implicit none
566 
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
572 
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)
576 
577  implicit none
578 
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
584 
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)
588 
589  implicit none
590 
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
596 
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)
600 
601  implicit none
602 
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
608 
609  call fsion_fwrite_c(data,size,nitems,sid,rc)
610  end subroutine fsion_fwrite_character
611 
612 ! fsion_read
613  subroutine fsion_read_integer(data,size,nitems,sid,rc)
614 
615  implicit none
616 
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
622 
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)
626 
627  implicit none
628 
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
634 
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)
638 
639  implicit none
640 
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
646 
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)
650 
651  implicit none
652 
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
658 
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)
662 
663  implicit none
664 
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
670 
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)
674 
675  implicit none
676 
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
682 
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)
686 
687  implicit none
688 
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
694 
695  call fsion_read_c(data,size,nitems,sid,rc)
696  end subroutine fsion_read_character
697 
698 ! fsion_fread
699  subroutine fsion_fread_integer(data,size,nitems,sid,rc)
700 
701  implicit none
702 
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
708 
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)
712 
713  implicit none
714 
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
720 
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)
724 
725  implicit none
726 
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
732 
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)
736 
737  implicit none
738 
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
744 
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)
748 
749  implicit none
750 
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
756 
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)
760 
761  implicit none
762 
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
768 
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)
772 
773  implicit none
774 
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
780 
781  call fsion_fread_c(data,size,nitems,sid,rc)
782  end subroutine fsion_fread_character
783 
784 end module sion_f90
void fsion_get_endianness_c(int *endianness)
Fortran function that returns current endianness (1-> big endian, 0 ->little endian)
Definition: sion_fortran.c:499
void fsion_feof_c(int *sid, int *eof)
Fortran function that indicates the end of file for this task.
Definition: sion_fortran.c:205
void fsion_get_fileno_c(int *sid, int *filenumber)
Fortran function that returns the current file number.
Definition: sion_fortran.c:465
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.
Definition: sion_fortran.c:229
void fsion_endianness_swap_needed_c(int *sid, int *needed)
Fortran function that returns whether or not byte swapping is needed (1 -> needed,...
Definition: sion_fortran.c:512
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.
Definition: sion_fortran.c:56
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)
Definition: sion_fortran.c:486
void fsion_flush_c(int *sid, int *ierr)
Fortran procedure to flush a sion file.
Definition: sion_fortran.c:277
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.
Definition: sion_fortran.c:323
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.
Definition: sion_fortran.c:143
void fsion_swap_c(void *target, void *source, int *size, int *n, int *do_swap, int *rc)
Fortran procedure to swap endianness of data.
Definition: sion_fortran.c:536
void fsion_close_c(int *sid, int *ierr)
Fortran procedure to close a sion file.
Definition: sion_fortran.c:183
void fsion_ensure_free_space_c(int *sid, sion_int64 *bytes, int *ierr)
Fortran procedure to ensure that enough space is available.
Definition: sion_fortran.c:258