SIONlib  1.7.7
Scalable I/O library for parallel access to task-local files
sion_f77.f
1 ************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 ************************************************************************
4 ** Copyright (c) 2008-2019 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ************************************************************************
9 
10 **************************************************************
11 ** Fortran 77 interface to SIONlib **
12 **************************************************************
13 *
14 * @file sion_f77.f
15 *
16 * @brief Fortran77 interface
17 *
18 * @author Florian Janetzko
19 * @date 29.05.2013
20 *
21 
22 ***********************************************
23 * Fortran interface subroutines and functions *
24 ***********************************************
25 * Subroutines (without overloading)
26  SUBROUTINE fsion_open(FNAME,FILE_MODE,NTASKS,NFILES,CHUNKSIZES,
27  & FSBLKSIZE,GLOBALRANKS,SID)
28 
29  IMPLICIT NONE
30 
31  include 'sion_f77.h'
32 
33  CHARACTER(LEN=*) FNAME
34  CHARACTER(LEN=*) FILE_MODE
35  INTEGER NTASKS
36  INTEGER NFILES
37  INTEGER*8 CHUNKSIZES
38  INTEGER*4 FSBLKSIZE
39  INTEGER GLOBALRANKS
40  INTEGER SID
41 
42  CALL fsion_open_c(fname,file_mode,ntasks,nfiles,chunksizes,
43  & fsblksize,globalranks,sid)
44  END
45 
46  SUBROUTINE fsion_open_rank(FNAME,FILE_MODE,CHUNKSIZE,FSBLKSIZE,
47  & RANK,SID)
48 
49  IMPLICIT NONE
50 
51  include 'sion_f77.h'
52 
53  CHARACTER(LEN=*) FNAME
54  CHARACTER(LEN=*) FILE_MODE
55  INTEGER*8 CHUNKSIZE
56  INTEGER*4 FSBLKSIZE
57  INTEGER RANK
58  INTEGER SID
59 
60  CALL fsion_open_rank_c(fname,file_mode,chunksize,fsblksize,
61  & rank,sid)
62  END
63 
64  SUBROUTINE fsion_close(SID,IERR)
65 
66  IMPLICIT NONE
67 
68  include 'sion_f77.h'
69 
70  INTEGER SID
71  INTEGER IERR
72 
73  CALL fsion_close_c(sid,ierr)
74  END
75 
76  SUBROUTINE fsion_feof(SID,EOF)
77 
78  IMPLICIT NONE
79 
80  include 'sion_f77.h'
81 
82  INTEGER SID
83  INTEGER EOF
84 
85  CALL fsion_feof_c(sid,eof)
86  END
87 
88  SUBROUTINE fsion_seek(SID,RANK,CURRENTBLOCKNR,POSINBLK,IERR)
89 
90  IMPLICIT NONE
91 
92  include 'sion_f77.h'
93 
94  INTEGER SID
95  INTEGER RANK
96  INTEGER CURRENTBLOCKNR
97  INTEGER*8 POSINBLK
98  INTEGER IERR
99 
100  CALL fsion_seek_c(sid,rank,currentblocknr,posinblk,ierr)
101  END
102 
103  SUBROUTINE fsion_ensure_free_space(SID,BYTES,IERR)
104 
105  IMPLICIT NONE
106 
107  include 'sion_f77.h'
108 
109  INTEGER SID
110  INTEGER*8 BYTES
111  INTEGER IERR
112 
113  CALL fsion_ensure_free_space_c(sid,bytes,ierr)
114  END
115 
116  SUBROUTINE fsion_flush(SID,IERR)
117 
118  IMPLICIT NONE
119 
120  include 'sion_f77.h'
121 
122  INTEGER SID
123  INTEGER IERR
124 
125  CALL fsion_flush_c(sid,ierr)
126  END
127 
128  SUBROUTINE fsion_get_locations(SID,NTASKS,MAXBLOCKS,GLOBALSKIP,
129  & START_OF_VARHEADER,SION_LOCALSIZES,
130  & SION_GLOBALRANKS,SION_CHUNKCOUNT,
131  & SION_CHUNKSIZES,IERR)
132 
133  IMPLICIT NONE
134 
135  include 'sion_f77.h'
136 
137  INTEGER SID
138  INTEGER NTASKS
139  INTEGER MAXBLOCKS
140  INTEGER*8 GLOBALSKIP
141  INTEGER*8 START_OF_VARHEADER
142  INTEGER*8 SION_LOCALSIZES
143  INTEGER*8 SION_GLOBALRANKS
144  INTEGER*8 SION_CHUNKCOUNT
145  INTEGER*8 SION_CHUNKSIZES
146  INTEGER IERR
147 
148  CALL fsion_get_locations_c(sid,ntasks,maxblocks,globalskip,
149  & start_of_varheader,sion_localsizes,
150  & sion_globalranks,sion_chunkcount,
151  & sion_chunksizes,ierr)
152  END
153 
154  SUBROUTINE fsion_get_current_locations(SID,NTASKS,
155  & SION_CURRENTPOS,
156  & SION_CURRENTBLOCKNR,IERR)
157 
158  IMPLICIT NONE
159 
160  include 'sion_f77.h'
161 
162  integer SID
163  integer NTASKS
164  integer*8 SION_CURRENTPOS
165  integer*8 SION_CURRENTBLOCKNR
166  integer IERR
167 
168  CALL fsion_get_current_locations_c(sid,ntasks,
169  & sion_currentpos,
170  & sion_currentblocknr,ierr)
171  END
172 
173  SUBROUTINE fsion_get_chunksizes(SID,CHUNKSIZES,IERR)
174 
175  IMPLICIT NONE
176 
177  include 'sion_f77.h'
178 
179  INTEGER SID
180  INTEGER*8 CHUNKSIZES
181  INTEGER IERR
182 
183  CALL fsion_get_chunksizes_c(sid,chunksizes,ierr)
184  END
185 
186  SUBROUTINE fsion_get_globalranks(SID,GLOBALRANKS,IERR)
187 
188  IMPLICIT NONE
189 
190  include 'sion_f77.h'
191 
192  INTEGER SID
193  INTEGER GLOBALRANKS
194  INTEGER IERR
195 
196  CALL fsion_get_globalranks_c(sid,globalranks,ierr)
197  END
198 
199  SUBROUTINE fsion_get_mapping_spec(SID,MAPPING_SIZE,NUMFILES,IERR)
200 
201  IMPLICIT NONE
202 
203  include 'sion_f77.h'
204 
205  INTEGER SID
206  INTEGER MAPPING_SIZE
207  INTEGER NUMFILES
208  INTEGER IERR
209 
210  CALL fsion_get_mapping_spec_c(sid,mapping_size,numfiles,ierr)
211  END
212 
213  SUBROUTINE fsion_get_mapping(SID,MAPPING,IERR)
214 
215  IMPLICIT NONE
216 
217  include 'sion_f77.h'
218 
219  INTEGER SID
220  INTEGER*4 MAPPING
221  INTEGER IERR
222 
223  CALL fsion_get_mapping_c(sid,mapping,ierr)
224  END
225 
226  SUBROUTINE fsion_get_fileno(SID,FILENUMBER)
227 
228  IMPLICIT NONE
229 
230  include 'sion_f77.h'
231 
232  INTEGER SID
233  INTEGER FILENUMBER
234 
235  CALL fsion_get_fileno_c(sid,filenumber)
236  END
237 
238  SUBROUTINE fsion_get_file_endianess(SID,ENDIANNESS)
239 
240  IMPLICIT NONE
241 
242  include 'sion_f77.h'
243 
244  INTEGER SID
245  INTEGER ENDIANNESS
246 
247  CALL fsion_get_file_endianness_c(sid,endianness)
248  END
249 
250  SUBROUTINE fsion_get_file_endianness(SID,ENDIANNESS)
251 
252  IMPLICIT NONE
253 
254  include 'sion_f77.h'
255 
256  INTEGER SID
257  INTEGER ENDIANNESS
258 
259  CALL fsion_get_file_endianness_c(sid,endianness)
260  END
261 
262  SUBROUTINE fsion_get_endianess(ENDIANNESS)
263 
264  IMPLICIT NONE
265 
266  include 'sion_f77.h'
267 
268  INTEGER ENDIANNESS
269 
270  CALL fsion_get_endianness_c(endianness)
271  END
272 
273  SUBROUTINE fsion_get_endianness(ENDIANNESS)
274 
275  IMPLICIT NONE
276 
277  include 'sion_f77.h'
278 
279  INTEGER ENDIANNESS
280 
281  CALL fsion_get_endianness_c(endianness)
282  END
283 
284  SUBROUTINE fsion_endianness_swap_needed(SID,NEEDED)
285 
286  IMPLICIT NONE
287 
288  include 'sion_f77.h'
289 
290  INTEGER SID
291  INTEGER NEEDED
292 
293  CALL fsion_endianness_swap_needed_c(sid,needed)
294  END
295 
296 * Functions (without overloading)
297  FUNCTION fsion_bytes_avail_in_block(SID)
298 
299  IMPLICIT NONE
300 
301  include 'sion_f77.h'
302 
303  INTEGER*8 FSION_BYTES_AVAIL_IN_BLOCK
304  INTEGER*8 FSION_BYTES_AVAIL_IN_BLOCK_C
305  INTEGER SID
306 
307  fsion_bytes_avail_in_block = fsion_bytes_avail_in_block_c(sid)
308  END
309 
310  FUNCTION fsion_get_position(SID)
311 
312  IMPLICIT NONE
313 
314  include 'sion_f77.h'
315 
316  INTEGER*8 FSION_GET_POSITION
317  INTEGER*8 FSION_GET_POSITION_C
318  INTEGER SID
319 
320  fsion_get_position = fsion_get_position_c(sid)
321  END
322 
323 * Subroutines (with overloading)
324  SUBROUTINE fsion_swap(TARGET,SOURCE,SIZE,N,AFLAG,RC)
325 
326  IMPLICIT NONE
327 
328  include 'sion_f77.h'
329 
330  INTEGER TARGET
331  INTEGER SOURCE
332  INTEGER SIZE
333  INTEGER N
334  INTEGER AFLAG
335  INTEGER RC
336 
337  CALL fsion_swap_c(TARGET,source,SIZE,n,aflag,rc)
338  END
339 
340 
341 * Datatype INTEGER
342  SUBROUTINE fsion_write_integer(DATA,SIZE,NITEMS,SID,RC)
343 
344  IMPLICIT NONE
345 
346  include 'sion_f77.h'
347 
348  INTEGER DATA
349  INTEGER*8 SIZE
350  INTEGER*8 NITEMS
351  INTEGER SID
352  INTEGER*8 RC
353 
354  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
355  END
356 
357  SUBROUTINE fsion_fwrite_integer(DATA,SIZE,NITEMS,SID,RC)
358 
359  IMPLICIT NONE
360 
361  include 'sion_f77.h'
362 
363  INTEGER DATA
364  INTEGER*8 SIZE
365  INTEGER*8 NITEMS
366  INTEGER SID
367  INTEGER*8 RC
368 
369  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
370  END
371 
372  SUBROUTINE fsion_read_integer(DATA,SIZE,NITEMS,SID,RC)
373 
374  IMPLICIT NONE
375 
376  include 'sion_f77.h'
377 
378  INTEGER DATA
379  INTEGER*8 SIZE
380  INTEGER*8 NITEMS
381  INTEGER SID
382  INTEGER*8 RC
383 
384  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
385  END
386 
387  SUBROUTINE fsion_fread_integer(DATA,SIZE,NITEMS,SID,RC)
388 
389  IMPLICIT NONE
390 
391  include 'sion_f77.h'
392 
393  INTEGER DATA
394  INTEGER*8 SIZE
395  INTEGER*8 NITEMS
396  INTEGER SID
397  INTEGER*8 RC
398 
399  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
400  END
401 
402 
403 * Datatype CHARACTER
404  SUBROUTINE fsion_write_character(DATA,SIZE,NITEMS,SID,RC)
405 
406  IMPLICIT NONE
407 
408  include 'sion_f77.h'
409 
410  CHARACTER DATA
411  INTEGER*8 SIZE
412  INTEGER*8 NITEMS
413  INTEGER SID
414  INTEGER*8 RC
415 
416  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
417  END
418 
419  SUBROUTINE fsion_fwrite_character(DATA,SIZE,NITEMS,SID,RC)
420 
421  IMPLICIT NONE
422 
423  include 'sion_f77.h'
424 
425  CHARACTER DATA
426  INTEGER*8 SIZE
427  INTEGER*8 NITEMS
428  INTEGER SID
429  INTEGER*8 RC
430 
431  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
432  END
433 
434  SUBROUTINE fsion_read_character(DATA,SIZE,NITEMS,SID,RC)
435 
436  IMPLICIT NONE
437 
438  include 'sion_f77.h'
439 
440  CHARACTER DATA
441  INTEGER*8 SIZE
442  INTEGER*8 NITEMS
443  INTEGER SID
444  INTEGER*8 RC
445 
446  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
447  END
448 
449  SUBROUTINE fsion_fread_character(DATA,SIZE,NITEMS,SID,RC)
450 
451  IMPLICIT NONE
452 
453  include 'sion_f77.h'
454 
455  CHARACTER DATA
456  INTEGER*8 SIZE
457  INTEGER*8 NITEMS
458  INTEGER SID
459  INTEGER*8 RC
460 
461  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
462  END
463 
464 
465 * Datatype REAL
466  SUBROUTINE fsion_write_real(DATA,SIZE,NITEMS,SID,RC)
467 
468  IMPLICIT NONE
469 
470  include 'sion_f77.h'
471 
472  REAL DATA
473  INTEGER*8 SIZE
474  INTEGER*8 NITEMS
475  INTEGER SID
476  INTEGER*8 RC
477 
478  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
479  END
480 
481  SUBROUTINE fsion_fwrite_real(DATA,SIZE,NITEMS,SID,RC)
482 
483  IMPLICIT NONE
484 
485  include 'sion_f77.h'
486 
487  REAL DATA
488  INTEGER*8 SIZE
489  INTEGER*8 NITEMS
490  INTEGER SID
491  INTEGER*8 RC
492 
493  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
494  END
495 
496  SUBROUTINE fsion_read_real(DATA,SIZE,NITEMS,SID,RC)
497 
498  IMPLICIT NONE
499 
500  include 'sion_f77.h'
501 
502  REAL DATA
503  INTEGER*8 SIZE
504  INTEGER*8 NITEMS
505  INTEGER SID
506  INTEGER*8 RC
507 
508  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
509  END
510 
511  SUBROUTINE fsion_fread_real(DATA,SIZE,NITEMS,SID,RC)
512 
513  IMPLICIT NONE
514 
515  include 'sion_f77.h'
516 
517  REAL DATA
518  INTEGER*8 SIZE
519  INTEGER*8 NITEMS
520  INTEGER SID
521  INTEGER*8 RC
522 
523  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
524  END
525 
526 * Datatype DOUBLE PRECISION
527  SUBROUTINE fsion_write_double(DATA,SIZE,NITEMS,SID,RC)
528 
529  IMPLICIT NONE
530 
531  include 'sion_f77.h'
532 
533  DOUBLE PRECISION DATA
534  INTEGER*8 SIZE
535  INTEGER*8 NITEMS
536  INTEGER SID
537  INTEGER*8 RC
538 
539  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
540  END
541 
542  SUBROUTINE fsion_fwrite_double(DATA,SIZE,NITEMS,SID,RC)
543 
544  IMPLICIT NONE
545 
546  include 'sion_f77.h'
547 
548  DOUBLE PRECISION DATA
549  INTEGER*8 SIZE
550  INTEGER*8 NITEMS
551  INTEGER SID
552  INTEGER*8 RC
553 
554  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
555  END
556 
557  SUBROUTINE fsion_read_double(DATA,SIZE,NITEMS,SID,RC)
558 
559  IMPLICIT NONE
560 
561  include 'sion_f77.h'
562 
563  DOUBLE PRECISION DATA
564  INTEGER*8 SIZE
565  INTEGER*8 NITEMS
566  INTEGER SID
567  INTEGER*8 RC
568 
569  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
570  END
571 
572  SUBROUTINE fsion_fread_double(DATA,SIZE,NITEMS,SID,RC)
573 
574  IMPLICIT NONE
575 
576  include 'sion_f77.h'
577 
578  DOUBLE PRECISION DATA
579  INTEGER*8 SIZE
580  INTEGER*8 NITEMS
581  INTEGER SID
582  INTEGER*8 RC
583 
584  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
585  END
586 
587 * Datatype COMPLEX
588  SUBROUTINE fsion_write_complex(DATA,SIZE,NITEMS,SID,RC)
589 
590  IMPLICIT NONE
591 
592  include 'sion_f77.h'
593 
594  COMPLEX DATA
595  INTEGER*8 SIZE
596  INTEGER*8 NITEMS
597  INTEGER SID
598  INTEGER*8 RC
599 
600  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
601  END
602 
603  SUBROUTINE fsion_fwrite_complex(DATA,SIZE,NITEMS,SID,RC)
604 
605  IMPLICIT NONE
606 
607  include 'sion_f77.h'
608 
609  COMPLEX DATA
610  INTEGER*8 SIZE
611  INTEGER*8 NITEMS
612  INTEGER SID
613  INTEGER*8 RC
614 
615  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
616  END
617 
618  SUBROUTINE fsion_read_complex(DATA,SIZE,NITEMS,SID,RC)
619 
620  IMPLICIT NONE
621 
622  include 'sion_f77.h'
623 
624  COMPLEX DATA
625  INTEGER*8 SIZE
626  INTEGER*8 NITEMS
627  INTEGER SID
628  INTEGER*8 RC
629 
630  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
631  END
632 
633  SUBROUTINE fsion_fread_complex(DATA,SIZE,NITEMS,SID,RC)
634 
635  IMPLICIT NONE
636 
637  include 'sion_f77.h'
638 
639  COMPLEX DATA
640  INTEGER*8 SIZE
641  INTEGER*8 NITEMS
642  INTEGER SID
643  INTEGER*8 RC
644 
645  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
646  END
647 
648 * Datatype LOGICAL
649  SUBROUTINE fsion_write_logical(DATA,SIZE,NITEMS,SID,RC)
650 
651  IMPLICIT NONE
652 
653  include 'sion_f77.h'
654 
655  LOGICAL DATA
656  INTEGER*8 SIZE
657  INTEGER*8 NITEMS
658  INTEGER SID
659  INTEGER*8 RC
660 
661  CALL fsion_write(DATA,SIZE,nitems,sid,rc)
662  END
663 
664  SUBROUTINE fsion_fwrite_logical(DATA,SIZE,NITEMS,SID,RC)
665 
666  IMPLICIT NONE
667 
668  include 'sion_f77.h'
669 
670  LOGICAL DATA
671  INTEGER*8 SIZE
672  INTEGER*8 NITEMS
673  INTEGER SID
674  INTEGER*8 RC
675 
676  CALL fsion_fwrite(DATA,SIZE,nitems,sid,rc)
677  END
678 
679  SUBROUTINE fsion_read_logical(DATA,SIZE,NITEMS,SID,RC)
680 
681  IMPLICIT NONE
682 
683  include 'sion_f77.h'
684 
685  LOGICAL DATA
686  INTEGER*8 SIZE
687  INTEGER*8 NITEMS
688  INTEGER SID
689  INTEGER*8 RC
690 
691  CALL fsion_read(DATA,SIZE,nitems,sid,rc)
692  END
693 
694  SUBROUTINE fsion_fread_logical(DATA,SIZE,NITEMS,SID,RC)
695 
696  IMPLICIT NONE
697 
698  include 'sion_f77.h'
699 
700  LOGICAL DATA
701  INTEGER*8 SIZE
702  INTEGER*8 NITEMS
703  INTEGER SID
704  INTEGER*8 RC
705 
706  CALL fsion_fread(DATA,SIZE,nitems,sid,rc)
707  END
708 
709 
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