101 class(*),
target,
intent(in) :: data
102 real(kind=
rp),
intent(in),
optional :: t
104 real(kind=
rp),
allocatable,
target :: tempo(:)
105 type(
mesh_t),
pointer :: msh
108 real(kind=
dp) :: time
109 character(len= 132) :: hdr
110 character :: rdcode(10)
111 character(len=6) :: id_str
112 character(len= 1024) :: fname
113 character(len= 1024) :: name
115 integer :: i, ierr, n, suffix_pos, tslash_pos
116 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
117 integer,
allocatable :: idx(:)
118 type(mpi_status) :: status
120 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
121 real(kind=
sp),
parameter :: test_pattern = 6.54321
123 logical :: write_mesh, write_velocity, write_pressure, write_temperature
124 integer :: fld_data_size, n_scalar_fields
136 write_pressure = .false.
137 write_velocity = .false.
138 write_temperature = .false.
147 glb_nelv = data%glb_nelv
148 offset_el = data%offset_el
150 if (data%x%size() .gt. 0) x%ptr => data%x%x
151 if (data%y%size() .gt. 0) y%ptr => data%y%x
152 if (data%z%size() .gt. 0) z%ptr => data%z%x
153 if (gdim .eq. 2) z%ptr => data%y%x
154 if (data%u%size() .gt. 0)
then
158 if (data%v%size() .le. 0) v%ptr => data%u%x
159 if (data%w%size() .le. 0) w%ptr => data%u%x
160 write_velocity = .true.
162 if (data%v%size() .gt. 0) v%ptr => data%v%x
163 if (data%w%size() .gt. 0) w%ptr => data%w%x
164 if (data%p%size() .gt. 0)
then
166 write_pressure = .true.
168 if (data%t%size() .gt. 0)
then
169 write_temperature = .true.
174 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
175 n_scalar_fields = data%n_scalars + 1
176 allocate(scalar_fields(n_scalar_fields))
177 do i = 1, n_scalar_fields -1
178 scalar_fields(i)%ptr => data%s(i)%x
180 scalar_fields(n_scalar_fields)%ptr => data%w%x
182 n_scalar_fields = data%n_scalars
183 allocate(scalar_fields(n_scalar_fields+1))
184 do i = 1, n_scalar_fields
185 scalar_fields(i)%ptr => data%s(i)%x
187 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
192 if (nelv .eq. 0)
then
209 p%ptr => data%x(:,1,1,1)
211 write_pressure = .true.
212 write_velocity = .false.
214 select case (data%size())
216 p%ptr => data%items(1)%ptr%x(:,1,1,1)
217 write_pressure = .true.
218 write_velocity = .false.
220 p%ptr => data%items(1)%ptr%x(:,1,1,1)
221 tem%ptr => data%items(2)%ptr%x(:,1,1,1)
222 write_pressure = .true.
223 write_temperature = .true.
225 u%ptr => data%items(1)%ptr%x(:,1,1,1)
226 v%ptr => data%items(2)%ptr%x(:,1,1,1)
227 w%ptr => data%items(3)%ptr%x(:,1,1,1)
228 write_velocity = .true.
230 p%ptr => data%items(1)%ptr%x(:,1,1,1)
231 u%ptr => data%items(2)%ptr%x(:,1,1,1)
232 v%ptr => data%items(3)%ptr%x(:,1,1,1)
233 w%ptr => data%items(4)%ptr%x(:,1,1,1)
234 write_pressure = .true.
235 write_velocity = .true.
237 p%ptr => data%items(1)%ptr%x(:,1,1,1)
238 u%ptr => data%items(2)%ptr%x(:,1,1,1)
239 v%ptr => data%items(3)%ptr%x(:,1,1,1)
240 w%ptr => data%items(4)%ptr%x(:,1,1,1)
241 tem%ptr => data%items(5)%ptr%x(:,1,1,1)
242 n_scalar_fields = data%size() - 5
243 allocate(scalar_fields(n_scalar_fields))
244 do i = 1, n_scalar_fields
245 scalar_fields(i)%ptr => data%items(i+5)%ptr%x(:,1,1,1)
247 write_pressure = .true.
248 write_velocity = .true.
249 write_temperature = .true.
251 call neko_error(
'This many fields not supported yet, fld_file')
258 if (
associated(dof))
then
259 x%ptr => dof%x(:,1,1,1)
260 y%ptr => dof%y(:,1,1,1)
261 z%ptr => dof%z(:,1,1,1)
266 if (
associated(msh))
then
268 glb_nelv = msh%glb_nelv
269 offset_el = msh%offset_el
272 allocate(idx(msh%nelv))
274 idx(i) = msh%elements(i)%e%id()
278 if (
associated(xh))
then
287 if (this%dp_precision)
then
292 if (this%dp_precision)
then
303 call this%increment_counter()
305 if (.not. this%write_mesh)
then
306 write_mesh = (this%get_counter() .eq. this%get_start_counter())
308 write_mesh = this%write_mesh
310 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
312 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
314 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
316 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
318 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
329 if (write_velocity)
then
333 if (write_pressure)
then
337 if (write_temperature)
then
341 if (n_scalar_fields .gt. 0 )
then
344 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
346 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
351 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
352 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
3531
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
354 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
357 fname = this%get_fld_fname()
359 call mpi_file_open(
neko_comm, trim(fname), &
360 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
363 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
366 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
369 byte_offset = mpi_offset + &
371 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
372 mpi_integer, status, ierr)
377 byte_offset = mpi_offset + int(offset_el,
i8) * &
378 (int(gdim*lxyz,
i8) * &
379 int(fld_data_size,
i8))
381 x%ptr, y%ptr, z%ptr, &
383 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
384 (int(gdim *lxyz,
i8) * &
385 int(fld_data_size,
i8))
387 if (write_velocity)
then
388 byte_offset = mpi_offset + int(offset_el,
i8) * &
389 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
391 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv)
393 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
394 (int(gdim * (lxyz),
i8) * &
395 int(fld_data_size,
i8))
399 if (write_pressure)
then
400 byte_offset = mpi_offset + int(offset_el,
i8) * &
401 (int((lxyz),
i8) * int(fld_data_size,
i8))
403 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
404 (int((lxyz),
i8) * int(fld_data_size,
i8))
407 if (write_temperature)
then
408 byte_offset = mpi_offset + int(offset_el,
i8) * &
410 int(fld_data_size,
i8))
412 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
414 int(fld_data_size,
i8))
417 temp_offset = mpi_offset
419 do i = 1, n_scalar_fields
423 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
424 (int(lxyz,
i8) * int(fld_data_size,
i8))
426 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
428 int(fld_data_size,
i8))
430 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
432 int(fld_data_size,
i8))
435 if (gdim .eq. 3)
then
442 byte_offset = int(mpi_offset,
i8) + &
443 int(offset_el,
i8) * &
448 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv)
449 mpi_offset = int(mpi_offset,
i8) + &
450 int(glb_nelv,
i8) * &
456 if (write_velocity)
then
457 byte_offset = int(mpi_offset,
i8) + &
458 int(offset_el,
i8) * &
463 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv)
464 mpi_offset = int(mpi_offset,
i8) + &
465 int(glb_nelv,
i8) * &
472 if (write_pressure)
then
473 byte_offset = int(mpi_offset,
i8) + &
474 int(offset_el,
i8) * &
479 mpi_offset = int(mpi_offset,
i8) + &
480 int(glb_nelv,
i8) * &
486 if (write_temperature)
then
487 byte_offset = int(mpi_offset,
i8) + &
488 int(offset_el,
i8) * &
493 mpi_offset = int(mpi_offset,
i8) + &
494 int(glb_nelv,
i8) * &
502 temp_offset = mpi_offset
504 do i = 1, n_scalar_fields
508 mpi_offset = int(temp_offset,
i8) + &
509 int(1_i8*glb_nelv,
i8) * &
514 byte_offset = int(mpi_offset,
i8) + &
515 int(offset_el,
i8) * &
519 scalar_fields(i)%ptr, lxyz, nelv)
520 mpi_offset = int(mpi_offset,
i8) + &
521 int(glb_nelv,
i8) * &
528 call mpi_file_sync(fh, ierr)
529 call mpi_file_close(fh, ierr)
534 open(newunit = file_unit, &
535 file = this%get_meta_fname(), status =
'replace')
542 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
543 trim(name),
'%01d.f%05d'
544 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
545 this%get_start_counter()
546 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
547 (this%get_counter() + 1) - this%get_start_counter()
553 if (
allocated(tempo))
deallocate(tempo)
554 if (
allocated(scalar_fields))
deallocate(scalar_fields)
562 class(*),
target,
intent(in) :: data
563 type(
mask_t),
intent(in) :: mask
564 real(kind=
rp),
intent(in),
optional :: t
566 real(kind=
rp),
allocatable,
target :: tempo(:)
567 type(
mesh_t),
pointer :: msh
570 real(kind=
dp) :: time
571 character(len= 132) :: hdr
572 character :: rdcode(10)
573 character(len=6) :: id_str
574 character(len= 1024) :: fname
575 character(len= 1024) :: name
577 integer :: i, ierr, n, suffix_pos, tslash_pos
578 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
579 integer,
allocatable :: idx(:)
580 type(mpi_status) :: status
582 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
583 real(kind=
sp),
parameter :: test_pattern = 6.54321
585 logical :: write_mesh, write_velocity, write_pressure, write_temperature
586 integer :: fld_data_size, n_scalar_fields
598 write_pressure = .false.
599 write_velocity = .false.
600 write_temperature = .false.
609 glb_nelv = data%glb_nelv
610 offset_el = data%offset_el
612 if (data%x%size() .gt. 0) x%ptr => data%x%x
613 if (data%y%size() .gt. 0) y%ptr => data%y%x
614 if (data%z%size() .gt. 0) z%ptr => data%z%x
615 if (gdim .eq. 2) z%ptr => data%y%x
616 if (data%u%size() .gt. 0)
then
620 if (data%v%size() .le. 0) v%ptr => data%u%x
621 if (data%w%size() .le. 0) w%ptr => data%u%x
622 write_velocity = .true.
624 if (data%v%size() .gt. 0) v%ptr => data%v%x
625 if (data%w%size() .gt. 0) w%ptr => data%w%x
626 if (data%p%size() .gt. 0)
then
628 write_pressure = .true.
630 if (data%t%size() .gt. 0)
then
631 write_temperature = .true.
636 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
637 n_scalar_fields = data%n_scalars + 1
638 allocate(scalar_fields(n_scalar_fields))
639 do i = 1, n_scalar_fields -1
640 scalar_fields(i)%ptr => data%s(i)%x
642 scalar_fields(n_scalar_fields)%ptr => data%w%x
644 n_scalar_fields = data%n_scalars
645 allocate(scalar_fields(n_scalar_fields+1))
646 do i = 1, n_scalar_fields
647 scalar_fields(i)%ptr => data%s(i)%x
649 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
654 if (nelv .eq. 0)
then
671 p%ptr => data%x(:,1,1,1)
673 write_pressure = .true.
674 write_velocity = .false.
676 select case (data%size())
678 p%ptr => data%items(1)%ptr%x(:,1,1,1)
679 write_pressure = .true.
680 write_velocity = .false.
682 p%ptr => data%items(1)%ptr%x(:,1,1,1)
683 tem%ptr => data%items(2)%ptr%x(:,1,1,1)
684 write_pressure = .true.
685 write_temperature = .true.
687 u%ptr => data%items(1)%ptr%x(:,1,1,1)
688 v%ptr => data%items(2)%ptr%x(:,1,1,1)
689 w%ptr => data%items(3)%ptr%x(:,1,1,1)
690 write_velocity = .true.
692 p%ptr => data%items(1)%ptr%x(:,1,1,1)
693 u%ptr => data%items(2)%ptr%x(:,1,1,1)
694 v%ptr => data%items(3)%ptr%x(:,1,1,1)
695 w%ptr => data%items(4)%ptr%x(:,1,1,1)
696 write_pressure = .true.
697 write_velocity = .true.
699 p%ptr => data%items(1)%ptr%x(:,1,1,1)
700 u%ptr => data%items(2)%ptr%x(:,1,1,1)
701 v%ptr => data%items(3)%ptr%x(:,1,1,1)
702 w%ptr => data%items(4)%ptr%x(:,1,1,1)
703 tem%ptr => data%items(5)%ptr%x(:,1,1,1)
704 n_scalar_fields = data%size() - 5
705 allocate(scalar_fields(n_scalar_fields))
706 do i = 1, n_scalar_fields
707 scalar_fields(i)%ptr => data%items(i+5)%ptr%x(:,1,1,1)
709 write_pressure = .true.
710 write_velocity = .true.
711 write_temperature = .true.
713 call neko_error(
'This many fields not supported yet, fld_file')
720 if (
associated(dof))
then
721 x%ptr => dof%x(:,1,1,1)
722 y%ptr => dof%y(:,1,1,1)
723 z%ptr => dof%z(:,1,1,1)
728 if (
associated(msh))
then
730 glb_nelv = msh%glb_nelv
731 offset_el = msh%offset_el
734 allocate(idx(msh%nelv))
736 idx(i) = msh%elements(i)%e%id()
740 if (
associated(xh))
then
749 nelv =
mask%size() / lxyz
750 if (mod(
mask%size(), lxyz) /= 0)
then
751 call neko_error(
"Mask size must be a multiple of the number of elements in the mesh.")
753 call mpi_allreduce(nelv, glb_nelv, 1, &
755 call mpi_scan(nelv, offset_el, 1, &
757 offset_el = offset_el - nelv
759 if (
allocated(idx))
then
765 idx(i) = offset_el + i
769 if (this%dp_precision)
then
774 if (this%dp_precision)
then
785 call this%increment_counter()
787 if (.not. this%write_mesh)
then
788 write_mesh = (this%get_counter() .eq. this%get_start_counter())
790 write_mesh = this%write_mesh
792 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
794 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
796 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
798 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
800 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
811 if (write_velocity)
then
815 if (write_pressure)
then
819 if (write_temperature)
then
823 if (n_scalar_fields .gt. 0 )
then
826 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
828 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
833 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
834 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
8351
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
836 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
839 fname = this%get_fld_fname()
841 call mpi_file_open(
neko_comm, trim(fname), &
842 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
845 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
848 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
851 byte_offset = mpi_offset + &
853 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
854 mpi_integer, status, ierr)
859 byte_offset = mpi_offset + int(offset_el,
i8) * &
860 (int(gdim*lxyz,
i8) * &
861 int(fld_data_size,
i8))
863 x%ptr, y%ptr, z%ptr, &
864 n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
865 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
866 (int(gdim *lxyz,
i8) * &
867 int(fld_data_size,
i8))
869 if (write_velocity)
then
870 byte_offset = mpi_offset + int(offset_el,
i8) * &
871 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
873 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
875 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
876 (int(gdim * (lxyz),
i8) * &
877 int(fld_data_size,
i8))
881 if (write_pressure)
then
882 byte_offset = mpi_offset + int(offset_el,
i8) * &
883 (int((lxyz),
i8) * int(fld_data_size,
i8))
885 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
886 (int((lxyz),
i8) * int(fld_data_size,
i8))
889 if (write_temperature)
then
890 byte_offset = mpi_offset + int(offset_el,
i8) * &
892 int(fld_data_size,
i8))
894 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
896 int(fld_data_size,
i8))
899 temp_offset = mpi_offset
901 do i = 1, n_scalar_fields
905 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
906 (int(lxyz,
i8) * int(fld_data_size,
i8))
908 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
910 int(fld_data_size,
i8))
912 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
914 int(fld_data_size,
i8))
917 if (gdim .eq. 3)
then
924 byte_offset = int(mpi_offset,
i8) + &
925 int(offset_el,
i8) * &
930 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
931 mpi_offset = int(mpi_offset,
i8) + &
932 int(glb_nelv,
i8) * &
938 if (write_velocity)
then
939 byte_offset = int(mpi_offset,
i8) + &
940 int(offset_el,
i8) * &
945 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
946 mpi_offset = int(mpi_offset,
i8) + &
947 int(glb_nelv,
i8) * &
954 if (write_pressure)
then
955 byte_offset = int(mpi_offset,
i8) + &
956 int(offset_el,
i8) * &
960 p%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
961 mpi_offset = int(mpi_offset,
i8) + &
962 int(glb_nelv,
i8) * &
968 if (write_temperature)
then
969 byte_offset = int(mpi_offset,
i8) + &
970 int(offset_el,
i8) * &
974 tem%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
975 mpi_offset = int(mpi_offset,
i8) + &
976 int(glb_nelv,
i8) * &
984 temp_offset = mpi_offset
986 do i = 1, n_scalar_fields
990 mpi_offset = int(temp_offset,
i8) + &
991 int(1_i8*glb_nelv,
i8) * &
996 byte_offset = int(mpi_offset,
i8) + &
997 int(offset_el,
i8) * &
1001 scalar_fields(i)%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
1002 mpi_offset = int(mpi_offset,
i8) + &
1003 int(glb_nelv,
i8) * &
1010 call mpi_file_sync(fh, ierr)
1011 call mpi_file_close(fh, ierr)
1016 open(newunit = file_unit, &
1017 file = this%get_meta_fname(), status =
'replace')
1024 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
1025 trim(name),
'%01d.f%05d'
1026 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
1027 this%get_start_counter()
1028 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
1029 (this%get_counter() + 1) - this%get_start_counter()
1035 if (
allocated(tempo))
deallocate(tempo)
1036 if (
allocated(scalar_fields))
deallocate(scalar_fields)
1339 class(*),
target,
intent(inout) :: data
1340 character(len= 132) :: hdr
1341 integer :: ierr, suffix_pos, i, j
1342 type(mpi_file) :: fh
1343 type(mpi_status) :: status
1344 character(len= 1024) :: fname, base_fname, meta_fname, string, path
1345 logical :: meta_file, read_mesh, read_velocity, read_pressure
1346 logical :: read_temp
1347 character(len=6) :: suffix
1348 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset
1349 integer :: lx, ly, lz, glb_nelv, counter, lxyz
1350 integer :: FLD_DATA_SIZE, n_scalars, n
1351 integer :: file_unit
1352 real(kind=
rp) :: time
1353 real(kind=
sp) :: temp
1355 real(kind=
sp),
parameter :: test_pattern = 6.54321
1356 character :: rdcode(10), temp_str(4)
1357 character(len=LOG_SIZE) :: log_buf
1363 inquire(
file = trim(meta_fname), exist = meta_file)
1364 if (meta_file .and. data%meta_nsamples .eq. 0)
then
1366 open(newunit = file_unit,
file = trim(meta_fname))
1367 read(file_unit, fmt =
'(A)') string
1368 read(string(14:), fmt =
'(A)') string
1369 string = trim(string)
1371 data%fld_series_fname = string(:scan(trim(string),
'%')-1)
1372 data%fld_series_fname = adjustl(data%fld_series_fname)
1373 data%fld_series_fname = trim(data%fld_series_fname)//
'0'
1375 read(file_unit, fmt =
'(A)') string
1376 read(string(scan(string,
':')+1:), *) data%meta_start_counter
1377 read(file_unit, fmt =
'(A)') string
1378 read(string(scan(string,
':')+1:), *) data%meta_nsamples
1381 write(log_buf,*)
'Reading meta file for fld series'
1383 write(log_buf,*)
'Name: ', trim(data%fld_series_fname)
1385 write(log_buf,*)
'Start counter: ', data%meta_start_counter
1387 write(log_buf,*)
'Nsamples: ', data%meta_nsamples
1391 call mpi_bcast(data%fld_series_fname, 1024, mpi_character, 0, &
1393 call mpi_bcast(data%meta_start_counter, 1, mpi_integer, 0, &
1395 call mpi_bcast(data%meta_nsamples, 1, mpi_integer, 0, &
1398 if (this%get_counter() .eq. -1)
then
1399 call this%set_start_counter(data%meta_start_counter)
1400 call this%set_counter(data%meta_start_counter)
1406 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1407 fname = trim(path) // trim(data%fld_series_fname) //
'.' // suffix
1408 if (this%get_counter() .ge. &
1409 data%meta_nsamples+data%meta_start_counter)
then
1410 call neko_error(
'Trying to read more fld files than exist')
1413 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1416 call mpi_file_open(
neko_comm, trim(fname), &
1417 mpi_mode_rdonly, mpi_info_null, fh, ierr)
1419 if (ierr .ne. 0)
call neko_error(
"Could not read "//trim(fname))
1421 call neko_log%message(
'Reading fld file ' // trim(fname))
1423 call mpi_file_read_all(fh, hdr, 132, mpi_character, status, ierr)
1427 read(hdr, 1) temp_str, fld_data_size, lx, ly, lz, glb_nelv, glb_nelv, &
1428 time, counter, i, j, (rdcode(i), i = 1, 10)
14291
format(4a, 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
1430 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
1431 if (data%nelv .eq. 0)
then
1433 data%nelv = dist%num_local()
1434 data%offset_el = dist%start_idx()
1439 data%glb_nelv = glb_nelv
1440 data%t_counter = counter
1443 n = lxyz * data%nelv
1453 this%dp_precision = .true.
1455 this%dp_precision = .false.
1457 if (this%dp_precision)
then
1458 allocate(
tmp_dp(data%gdim*n))
1460 allocate(
tmp_sp(data%gdim*n))
1466 read_velocity = .false.
1467 read_pressure = .false.
1469 if (rdcode(i) .eq.
'X')
then
1476 if (rdcode(i) .eq.
'U')
then
1477 read_velocity = .true.
1483 if (rdcode(i) .eq.
'P')
then
1484 read_pressure = .true.
1488 if (rdcode(i) .eq.
'T')
then
1494 if (rdcode(i) .eq.
'S')
then
1496 read(rdcode(i),*) n_scalars
1497 n_scalars = n_scalars*10
1500 n_scalars = n_scalars+j
1502 if (
allocated(data%s))
then
1503 if (data%n_scalars .ne. n_scalars)
then
1504 do j = 1, data%n_scalars
1505 call data%s(j)%free()
1508 data%n_scalars = n_scalars
1509 allocate(data%s(n_scalars))
1510 do j = 1, data%n_scalars
1511 call data%s(j)%init(n)
1515 data%n_scalars = n_scalars
1516 allocate(data%s(data%n_scalars))
1517 do j = 1, data%n_scalars
1518 call data%s(j)%init(n)
1525 call mpi_file_read_at_all(fh, mpi_offset, temp, 1, &
1526 mpi_real, status, ierr)
1527 if (.not.
sabscmp(temp, test_pattern, epsilon(1.0_sp)))
then
1528 call neko_error(
'Incorrect format for fld file, &
1529 &test pattern does not match.')
1534 if (
allocated(data%idx))
then
1535 if (
size(data%idx) .ne. data%nelv)
then
1536 deallocate(data%idx)
1537 allocate(data%idx(data%nelv))
1540 allocate(data%idx(data%nelv))
1543 byte_offset = mpi_offset + &
1546 call mpi_file_read_at_all(fh, byte_offset, data%idx, data%nelv, &
1547 mpi_integer, status, ierr)
1549 mpi_offset = mpi_offset + &
1553 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1554 (int(data%gdim*lxyz,
i8) * &
1555 int(fld_data_size,
i8))
1557 data%x, data%y, data%z, data)
1558 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1559 (int(data%gdim *lxyz,
i8) * &
1560 int(fld_data_size,
i8))
1563 if (read_velocity)
then
1564 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1565 (int(data%gdim*lxyz,
i8) * &
1566 int(fld_data_size,
i8))
1568 data%u, data%v, data%w, data)
1569 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1570 (int(data%gdim *lxyz,
i8) * &
1571 int(fld_data_size,
i8))
1574 if (read_pressure)
then
1575 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1577 int(fld_data_size,
i8))
1579 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1581 int(fld_data_size,
i8))
1585 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1587 int(fld_data_size,
i8))
1589 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1591 int(fld_data_size,
i8))
1595 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1597 int(fld_data_size,
i8))
1599 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1601 int(fld_data_size,
i8))
1604 call this%increment_counter()
1609 call neko_error(
'Currently we only read into fld_file_data_t, &
1610 &please use that data structure instead.')