File: FWriter.f90

package info (click to toggle)
adios2 2.10.2%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,764 kB
  • sloc: cpp: 175,964; ansic: 160,510; f90: 14,630; yacc: 12,668; python: 7,275; perl: 7,126; sh: 2,825; lisp: 1,106; xml: 1,049; makefile: 579; lex: 557
file content (68 lines) | stat: -rw-r--r-- 1,808 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
program FWriter
    use mpi
    use adios2
    implicit none

    integer(kind=8), dimension(2) :: shape_dims, start_dims, count_dims
    real, dimension(:,:), allocatable :: data
    integer :: i, j, inx, iny, irank, isize, ierr

    ! adios2 handlers
    type(adios2_adios):: adios
    type(adios2_io):: io
    type(adios2_variable):: var
    type(adios2_engine):: engine

    ! Launch MPI
    call MPI_Init(ierr)
    call MPI_Comm_rank(MPI_COMM_WORLD, irank, ierr)
    call MPI_Comm_size(MPI_COMM_WORLD, isize, ierr)

    ! Application variables
    inx = 3
    iny = 4
    allocate( data(inx, iny) )

    do j=1,iny
      do i=1,inx
        data(i,j) = irank * inx * iny +  (j-1)*inx + (i-1)
      end do
    end do

    ! Variable dimensions
    shape_dims(1) = isize * inx
    shape_dims(2) = iny

    start_dims(1) = irank * inx
    start_dims(2) = 0

    count_dims(1) = inx
    count_dims(2) = iny

    ! Create adios handler passing the communicator and error flag
    call adios2_init(adios, MPI_COMM_WORLD, ierr)

    ! Declare an IO process configuration inside adios
    call adios2_declare_io(io, adios, "FWriter", ierr)

    ! Defines a variable to be written in bp format
    call adios2_define_variable(var, io, "data2D", adios2_type_real, 2, &
                                shape_dims, start_dims, count_dims, &
                                adios2_constant_dims, ierr)

    ! Open in write mode, this launches an engine
    call adios2_open(engine, io, "FWriter.bp", adios2_mode_write, ierr)

    ! Put data contents to bp buffer
    call adios2_put(engine, var, data, ierr)

    ! Closes engine1 and deallocates it, becomes unreachable
    call adios2_close(engine, ierr)

    call adios2_finalize(adios, ierr)

    deallocate(data)

    call MPI_Finalize(ierr)

end program FWriter