~ubuntu-branches/ubuntu/vivid/adios/vivid-proposed

« back to all changes in this revision

Viewing changes to utils/skel/etc/templates/source_write_fortran.tmpl

  • Committer: Package Import Robot
  • Author(s): Alastair McKinstry
  • Date: 2014-06-16 23:06:38 UTC
  • mfrom: (15.1.8 sid)
  • Revision ID: package-import@ubuntu.com-20140616230638-cxryhot6b8ge32l6
Tags: 1.7.0-1
* New upstream release.
* Add adios.pc pkgconfig file. adios_config now uses this.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
## Cheetah template for skeletal writer in fortran
 
2
## See the Cheetah documentation for proper syntax
 
3
 
 
4
!!
 
5
!! Automatically generated by skel. Modify at your own risk.
 
6
 
 
7
 
 
8
program skel
 
9
 
 
10
 
 
11
  use mpi
 
12
  use adios_write_mod
 
13
  IMPLICIT NONE
 
14
 
 
15
  real*8 :: skel_init_timer = 0, &
 
16
    skel_open_timer = 0, &
 
17
    skel_access_timer = 0, &
 
18
    skel_close_timer = 0, &
 
19
    skel_total_timer = 0
 
20
 
 
21
  CHARACTER(LEN=128) :: skel_filename
 
22
 
 
23
  integer*4 :: skel_mpi_size, skel_mpi_rank, skel_i
 
24
  integer*4 :: error
 
25
  integer*8 :: adios_error
 
26
  integer*8 :: adios_groupsize
 
27
#if $noxml
 
28
  integer*8 :: skel_adios_group
 
29
#end if
 
30
 
 
31
  integer :: comm
 
32
 
 
33
  integer*8 :: adios_handle, &
 
34
    skel_total_size
 
35
  real*8 :: skel_total_init, skel_total_open, skel_total_access, skel_total_close, skel_total_total
 
36
 
 
37
! Scalar declarations
 
38
#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
 
39
  $v.get_fortran_type() :: $v.get_safe_name()
 
40
#end for
 
41
 
 
42
! Skel variables for global array management
 
43
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
44
    #for sv in $v.get_offset_vars()
 
45
  integer*4 :: $sv ($bpy.get_num_procs())
 
46
    #end for
 
47
#end for
 
48
 
 
49
! Array declarations
 
50
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
51
  $v.get_fortran_type(), ALLOCATABLE, DIMENSION(:#for d in range(int($v.get_ndims())-1)#,:#end for#) :: $v.get_safe_name()
 
52
#end for
 
53
 
 
54
  call MPI_INIT (error)
 
55
 
 
56
! Time the init
 
57
  call MPI_BARRIER (MPI_COMM_WORLD, error)
 
58
  skel_init_timer = skel_init_timer - MPI_Wtime();
 
59
 
 
60
#if $noxml
 
61
  call adios_init_noxml (MPI_COMM_WORLD, error)
 
62
#else
 
63
  call adios_init ("${project}_skel.xml", MPI_COMM_WORLD, adios_error)
 
64
#end if
 
65
 
 
66
  skel_init_timer = skel_init_timer + MPI_WTIME();
 
67
  call MPI_Comm_rank (MPI_COMM_WORLD, skel_mpi_rank, error)
 
68
  call MPI_Comm_size (MPI_COMM_WORLD, skel_mpi_size, error)
 
69
 
 
70
! Initialize the scalars
 
71
#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
 
72
    #if not v.get_value(): 
 
73
    $v.get_safe_name = 16 <% sys.stderr.write ('No value found for variable "%s", using default value.\n' % v.get_name()) %>
 
74
    #else:
 
75
    $v.get_safe_name = $v.get_value()
 
76
    #end if
 
77
#end for
 
78
 
 
79
! Initialize Skel variables
 
80
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
81
    #for sv in $v.get_offset_vars()
 
82
    $sv = (/ $v.get_offset_values_str($sv) /)
 
83
    #end for
 
84
#end for
 
85
 
 
86
 
 
87
! Initialize the arrays
 
88
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
89
    allocate ($v.get_safe_name()(#echo ','.join (str(x) for x in $v.get_dims() )#))
 
90
#end for
 
91
 
 
92
  skel_total_timer = skel_total_timer - MPI_Wtime()
 
93
 
 
94
 skel_i = 0
 
95
 
 
96
 
 
97
#if $noxml
 
98
 
 
99
call adios_allocate_buffer ($bpy.get_buf_size_mb(), error);
 
100
call adios_declare_group (skel_adios_group, "${bpy.get_group_name()}", "", 1, error);
 
101
call adios_select_method (skel_adios_group, "$bpy.get_method()", "$bpy.get_parameters()", "", error);
 
102
 
 
103
## This loop generates any needed skel auxiliary variables
 
104
#for v in $bpy.get_vars():
 
105
    #if $v.has_global_bounds():
 
106
        #for sv in $v.get_offset_vars()
 
107
call adios_define_var (skel_adios_group, "$sv", "", adios_integer, "", "", "", adios_error)
 
108
        #end for
 
109
    #end if
 
110
#end for
 
111
 
 
112
## This loop handles the user defined variables
 
113
    #for v in $bpy.get_vars():
 
114
call adios_define_var (skel_adios_group, &
 
115
                       "$v.get_name()", "", &
 
116
                       $v.get_adios_type(), "$v.get_dims_str()", &
 
117
                       "$v.get_global_dims_str()", "$v.get_offset_vars_str()", adios_error)
 
118
    #end for
 
119
 
 
120
 
 
121
#end if
 
122
 
 
123
 
 
124
 
 
125
 DO
 
126
  skel_i = skel_i + 1
 
127
  IF (skel_i .GT. 1) EXIT
 
128
 
 
129
! Time the opens
 
130
  call MPI_Barrier (MPI_COMM_WORLD, error)
 
131
  skel_open_timer = skel_open_timer - MPI_Wtime()
 
132
 
 
133
  write (skel_filename, '(I0)') skel_i
 
134
  skel_filename = "out_${bpy.get_group_name()}_write_"//skel_filename//".bp"
 
135
 call MPI_Comm_dup (MPI_COMM_WORLD, comm, error)
 
136
  call adios_open(adios_handle, "${bpy.get_group_name()}", skel_filename, "w", comm, error);
 
137
  skel_open_timer = skel_open_timer + MPI_Wtime()
 
138
 
 
139
! Time the writes
 
140
  skel_access_timer = skel_access_timer - MPI_Wtime()
 
141
 
 
142
! Set the adios group size
 
143
  adios_groupsize = &
 
144
#for v in $bpy.get_vars():
 
145
                     $v.get_size() + &
 
146
#end for
 
147
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
148
    #for sv in $v.get_offset_vars()
 
149
                     4 + &
 
150
    #end for
 
151
#end for
 
152
                     0
 
153
 
 
154
  call adios_group_size (adios_handle, adios_groupsize, skel_total_size, error)
 
155
 
 
156
! Write each variable
 
157
! First the scalars
 
158
#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
 
159
    call adios_write (adios_handle, "$v.get_name", $v.get_safe_name(), error)
 
160
#end for
 
161
 
 
162
! Next Skel variables
 
163
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
164
    #for sv in $v.get_offset_vars()
 
165
    call adios_write (adios_handle, &
 
166
                      "$sv", &
 
167
                       $sv (skel_mpi_rank+1), &
 
168
                       error)
 
169
    #end for
 
170
#end for
 
171
 
 
172
! Now the arrays
 
173
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
 
174
    call adios_write (adios_handle, "$v.get_name", $v.get_safe_name(), error)
 
175
#end for
 
176
 
 
177
 
 
178
! Stop timing the writes
 
179
  skel_access_timer = skel_access_timer + MPI_Wtime()
 
180
 
 
181
! Time the closes
 
182
  skel_close_timer = skel_close_timer - MPI_Wtime()
 
183
  call adios_close (adios_handle, error)
 
184
  skel_close_timer = skel_close_timer + MPI_Wtime()
 
185
 
 
186
 END DO
 
187
 
 
188
  skel_total_timer = skel_total_timer + MPI_Wtime()
 
189
 
 
190
! Output results
 
191
 
 
192
  call skel_write_coarse_xml_data_f (skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer)
 
193
 
 
194
  call MPI_Reduce (skel_init_timer, skel_total_init, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
195
  call MPI_Reduce (skel_open_timer, skel_total_open, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
196
  call MPI_Reduce (skel_access_timer, skel_total_access, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
197
  call MPI_Reduce (skel_close_timer, skel_total_close, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
198
  call MPI_Reduce (skel_total_timer, skel_total_total, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
199
 
 
200
  if (skel_mpi_rank == 0) then
 
201
    write (*,*) '\n'
 
202
    write (*,*) '**************************'
 
203
    write (*,*) '  Groupsize: ', adios_groupsize
 
204
    write (*,*) '  Open Time: ', skel_total_open
 
205
    write (*,*) 'Access Time: ', skel_total_access
 
206
    write (*,*) ' Close Time: ', skel_total_close
 
207
    write (*,*) ' Total Time: ', skel_total_total
 
208
    write (*,*) '**************************'
 
209
    write (*,*) '\n'
 
210
  endif
 
211
 
 
212
! Clean up
 
213
  call adios_finalize(0, error)
 
214
  call MPI_Finalize(error)
 
215
 
 
216
end program skel