1
## Cheetah template for skeletal writer in fortran
2
## See the Cheetah documentation for proper syntax
5
!! Automatically generated by skel. Modify at your own risk.
15
real*8 :: skel_init_timer = 0, &
16
skel_open_timer = 0, &
17
skel_access_timer = 0, &
18
skel_close_timer = 0, &
21
CHARACTER(LEN=128) :: skel_filename
23
integer*4 :: skel_mpi_size, skel_mpi_rank, skel_i
25
integer*8 :: adios_error
26
integer*8 :: adios_groupsize
28
integer*8 :: skel_adios_group
33
integer*8 :: adios_handle, &
35
real*8 :: skel_total_init, skel_total_open, skel_total_access, skel_total_close, skel_total_total
38
#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
39
$v.get_fortran_type() :: $v.get_safe_name()
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())
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()
57
call MPI_BARRIER (MPI_COMM_WORLD, error)
58
skel_init_timer = skel_init_timer - MPI_Wtime();
61
call adios_init_noxml (MPI_COMM_WORLD, error)
63
call adios_init ("${project}_skel.xml", MPI_COMM_WORLD, adios_error)
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)
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()) %>
75
$v.get_safe_name = $v.get_value()
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) /)
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() )#))
92
skel_total_timer = skel_total_timer - MPI_Wtime()
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);
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)
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)
127
IF (skel_i .GT. 1) EXIT
130
call MPI_Barrier (MPI_COMM_WORLD, error)
131
skel_open_timer = skel_open_timer - MPI_Wtime()
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()
140
skel_access_timer = skel_access_timer - MPI_Wtime()
142
! Set the adios group size
144
#for v in $bpy.get_vars():
147
#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
148
#for sv in $v.get_offset_vars()
154
call adios_group_size (adios_handle, adios_groupsize, skel_total_size, error)
156
! Write each variable
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)
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, &
167
$sv (skel_mpi_rank+1), &
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)
178
! Stop timing the writes
179
skel_access_timer = skel_access_timer + MPI_Wtime()
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()
188
skel_total_timer = skel_total_timer + MPI_Wtime()
192
call skel_write_coarse_xml_data_f (skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer)
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)
200
if (skel_mpi_rank == 0) then
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 (*,*) '**************************'
213
call adios_finalize(0, error)
214
call MPI_Finalize(error)