182 class(*),
target,
intent(in) :: data
183 real(kind=
rp),
intent(in),
optional :: t
185 real(kind=
rp),
allocatable,
target :: tempo(:)
186 type(
mesh_t),
pointer :: msh
189 real(kind=
dp) :: time
190 character(len= 132) :: hdr
191 character :: rdcode(10)
192 character(len=6) :: id_str
193 character(len= 1024) :: fname
194 character(len= 1024) :: name
196 integer :: i, ierr, n, suffix_pos, tslash_pos
197 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
198 integer,
allocatable :: idx(:)
199 type(mpi_status) :: status
201 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
202 real(kind=
sp),
parameter :: test_pattern = 6.54321
204 logical :: write_mesh, write_velocity, write_pressure, write_temperature
205 integer :: fld_data_size, n_scalar_fields
219 write_pressure = .false.
220 write_velocity = .false.
221 write_temperature = .false.
230 glb_nelv = data%glb_nelv
231 offset_el = data%offset_el
233 if (data%x%size() .gt. 0) x%ptr => data%x%x
234 if (data%y%size() .gt. 0) y%ptr => data%y%x
235 if (data%z%size() .gt. 0) z%ptr => data%z%x
236 if (gdim .eq. 2) z%ptr => data%y%x
237 if (data%u%size() .gt. 0)
then
241 if (data%v%size() .le. 0) v%ptr => data%u%x
242 if (data%w%size() .le. 0) w%ptr => data%u%x
243 write_velocity = .true.
245 if (data%v%size() .gt. 0) v%ptr => data%v%x
246 if (data%w%size() .gt. 0) w%ptr => data%w%x
247 if (data%p%size() .gt. 0)
then
249 write_pressure = .true.
251 if (data%t%size() .gt. 0)
then
252 write_temperature = .true.
257 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
258 n_scalar_fields = data%n_scalars + 1
259 allocate(scalar_fields(n_scalar_fields))
260 do i = 1, n_scalar_fields -1
261 scalar_fields(i)%ptr => data%s(i)%x
263 scalar_fields(n_scalar_fields)%ptr => data%w%x
265 n_scalar_fields = data%n_scalars
266 allocate(scalar_fields(n_scalar_fields+1))
267 do i = 1, n_scalar_fields
268 scalar_fields(i)%ptr => data%s(i)%x
270 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
275 if (nelv .eq. 0)
then
292 call dummy_list%init(1)
294 call dummy_list%assign(1, ptr)
296 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
297 write_temperature, dof)
298 nullify(dummy_list%items(1)%ptr)
300 deallocate(dummy_list%items)
303 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
304 write_temperature, dof)
309 if (
associated(dof))
then
310 x%ptr => dof%x(:,1,1,1)
311 y%ptr => dof%y(:,1,1,1)
312 z%ptr => dof%z(:,1,1,1)
317 if (
associated(msh))
then
319 glb_nelv = msh%glb_nelv
320 offset_el = msh%offset_el
323 allocate(idx(msh%nelv))
325 idx(i) = msh%elements(i)%e%id()
329 if (
associated(xh))
then
338 if (this%dp_precision)
then
343 if (this%dp_precision)
then
354 call this%increment_counter()
356 if (.not. this%write_mesh)
then
357 write_mesh = (this%get_counter() .eq. this%get_start_counter())
359 write_mesh = this%write_mesh
361 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
363 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
365 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
367 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
369 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
380 if (write_velocity)
then
384 if (write_pressure)
then
388 if (write_temperature)
then
392 if (n_scalar_fields .gt. 0 )
then
395 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
397 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
402 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
403 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
4041
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
405 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
408 fname = this%get_fld_fname()
410 call mpi_file_open(
neko_comm, trim(fname), &
411 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
414 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
417 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
420 byte_offset = mpi_offset + &
422 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
423 mpi_integer, status, ierr)
428 byte_offset = mpi_offset + int(offset_el,
i8) * &
429 (int(gdim*lxyz,
i8) * &
430 int(fld_data_size,
i8))
432 x%ptr, y%ptr, z%ptr, &
434 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
435 (int(gdim *lxyz,
i8) * &
436 int(fld_data_size,
i8))
438 if (write_velocity)
then
439 byte_offset = mpi_offset + int(offset_el,
i8) * &
440 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
442 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv)
444 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
445 (int(gdim * (lxyz),
i8) * &
446 int(fld_data_size,
i8))
450 if (write_pressure)
then
451 byte_offset = mpi_offset + int(offset_el,
i8) * &
452 (int((lxyz),
i8) * int(fld_data_size,
i8))
454 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
455 (int((lxyz),
i8) * int(fld_data_size,
i8))
458 if (write_temperature)
then
459 byte_offset = mpi_offset + int(offset_el,
i8) * &
461 int(fld_data_size,
i8))
463 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
465 int(fld_data_size,
i8))
468 temp_offset = mpi_offset
470 do i = 1, n_scalar_fields
474 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
475 (int(lxyz,
i8) * int(fld_data_size,
i8))
477 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
479 int(fld_data_size,
i8))
481 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
483 int(fld_data_size,
i8))
486 if (gdim .eq. 3)
then
493 byte_offset = int(mpi_offset,
i8) + &
494 int(offset_el,
i8) * &
499 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv)
500 mpi_offset = int(mpi_offset,
i8) + &
501 int(glb_nelv,
i8) * &
507 if (write_velocity)
then
508 byte_offset = int(mpi_offset,
i8) + &
509 int(offset_el,
i8) * &
514 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv)
515 mpi_offset = int(mpi_offset,
i8) + &
516 int(glb_nelv,
i8) * &
523 if (write_pressure)
then
524 byte_offset = int(mpi_offset,
i8) + &
525 int(offset_el,
i8) * &
530 mpi_offset = int(mpi_offset,
i8) + &
531 int(glb_nelv,
i8) * &
537 if (write_temperature)
then
538 byte_offset = int(mpi_offset,
i8) + &
539 int(offset_el,
i8) * &
544 mpi_offset = int(mpi_offset,
i8) + &
545 int(glb_nelv,
i8) * &
553 temp_offset = mpi_offset
555 do i = 1, n_scalar_fields
559 mpi_offset = int(temp_offset,
i8) + &
560 int(1_i8*glb_nelv,
i8) * &
565 byte_offset = int(mpi_offset,
i8) + &
566 int(offset_el,
i8) * &
570 scalar_fields(i)%ptr, lxyz, nelv)
571 mpi_offset = int(mpi_offset,
i8) + &
572 int(glb_nelv,
i8) * &
579 call mpi_file_sync(fh, ierr)
580 call mpi_file_close(fh, ierr)
585 open(newunit = file_unit, &
586 file = this%get_meta_fname(), status =
'replace')
593 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
594 trim(name),
'%01d.f%05d'
595 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
596 this%get_start_counter()
597 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
598 (this%get_counter() + 1) - this%get_start_counter()
604 if (
allocated(tempo))
deallocate(tempo)
605 if (
allocated(scalar_fields))
deallocate(scalar_fields)
613 class(*),
target,
intent(in) :: data
614 type(
mask_t),
intent(in) :: mask
615 real(kind=
rp),
intent(in),
optional :: t
617 real(kind=
rp),
allocatable,
target :: tempo(:)
618 type(
mesh_t),
pointer :: msh
621 real(kind=
dp) :: time
622 character(len= 132) :: hdr
623 character :: rdcode(10)
624 character(len=6) :: id_str
625 character(len= 1024) :: fname
626 character(len= 1024) :: name
628 integer :: i, ierr, n, suffix_pos, tslash_pos
629 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
630 integer,
allocatable :: idx(:)
631 type(mpi_status) :: status
633 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
634 real(kind=
sp),
parameter :: test_pattern = 6.54321
636 logical :: write_mesh, write_velocity, write_pressure, write_temperature
637 integer :: fld_data_size, n_scalar_fields
651 write_pressure = .false.
652 write_velocity = .false.
653 write_temperature = .false.
662 glb_nelv = data%glb_nelv
663 offset_el = data%offset_el
665 if (data%x%size() .gt. 0) x%ptr => data%x%x
666 if (data%y%size() .gt. 0) y%ptr => data%y%x
667 if (data%z%size() .gt. 0) z%ptr => data%z%x
668 if (gdim .eq. 2) z%ptr => data%y%x
669 if (data%u%size() .gt. 0)
then
673 if (data%v%size() .le. 0) v%ptr => data%u%x
674 if (data%w%size() .le. 0) w%ptr => data%u%x
675 write_velocity = .true.
677 if (data%v%size() .gt. 0) v%ptr => data%v%x
678 if (data%w%size() .gt. 0) w%ptr => data%w%x
679 if (data%p%size() .gt. 0)
then
681 write_pressure = .true.
683 if (data%t%size() .gt. 0)
then
684 write_temperature = .true.
689 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
690 n_scalar_fields = data%n_scalars + 1
691 allocate(scalar_fields(n_scalar_fields))
692 do i = 1, n_scalar_fields -1
693 scalar_fields(i)%ptr => data%s(i)%x
695 scalar_fields(n_scalar_fields)%ptr => data%w%x
697 n_scalar_fields = data%n_scalars
698 allocate(scalar_fields(n_scalar_fields+1))
699 do i = 1, n_scalar_fields
700 scalar_fields(i)%ptr => data%s(i)%x
702 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
707 if (nelv .eq. 0)
then
724 call dummy_list%init(1)
726 call dummy_list%assign(1, ptr)
728 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
729 write_temperature, dof)
730 nullify(dummy_list%items(1)%ptr)
732 deallocate(dummy_list%items)
735 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
736 write_temperature, dof)
741 if (
associated(dof))
then
742 x%ptr => dof%x(:,1,1,1)
743 y%ptr => dof%y(:,1,1,1)
744 z%ptr => dof%z(:,1,1,1)
749 if (
associated(msh))
then
751 glb_nelv = msh%glb_nelv
752 offset_el = msh%offset_el
755 allocate(idx(msh%nelv))
757 idx(i) = msh%elements(i)%e%id()
761 if (
associated(xh))
then
770 nelv =
mask%size() / lxyz
771 if (mod(
mask%size(), lxyz) /= 0)
then
772 call neko_error(
"Mask size must be a multiple of the number of elements in the mesh.")
774 call mpi_allreduce(nelv, glb_nelv, 1, &
776 call mpi_scan(nelv, offset_el, 1, &
778 offset_el = offset_el - nelv
780 if (
allocated(idx))
then
786 idx(i) = offset_el + i
790 if (this%dp_precision)
then
795 if (this%dp_precision)
then
806 call this%increment_counter()
808 if (.not. this%write_mesh)
then
809 write_mesh = (this%get_counter() .eq. this%get_start_counter())
811 write_mesh = this%write_mesh
813 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
815 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
817 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
819 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
821 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
832 if (write_velocity)
then
836 if (write_pressure)
then
840 if (write_temperature)
then
844 if (n_scalar_fields .gt. 0 )
then
847 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
849 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
854 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
855 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
8561
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
857 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
860 fname = this%get_fld_fname()
862 call mpi_file_open(
neko_comm, trim(fname), &
863 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
866 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
869 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
872 byte_offset = mpi_offset + &
874 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
875 mpi_integer, status, ierr)
880 byte_offset = mpi_offset + int(offset_el,
i8) * &
881 (int(gdim*lxyz,
i8) * &
882 int(fld_data_size,
i8))
884 x%ptr, y%ptr, z%ptr, &
885 n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
886 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
887 (int(gdim *lxyz,
i8) * &
888 int(fld_data_size,
i8))
890 if (write_velocity)
then
891 byte_offset = mpi_offset + int(offset_el,
i8) * &
892 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
894 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
896 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
897 (int(gdim * (lxyz),
i8) * &
898 int(fld_data_size,
i8))
902 if (write_pressure)
then
903 byte_offset = mpi_offset + int(offset_el,
i8) * &
904 (int((lxyz),
i8) * int(fld_data_size,
i8))
906 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
907 (int((lxyz),
i8) * int(fld_data_size,
i8))
910 if (write_temperature)
then
911 byte_offset = mpi_offset + int(offset_el,
i8) * &
913 int(fld_data_size,
i8))
915 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
917 int(fld_data_size,
i8))
920 temp_offset = mpi_offset
922 do i = 1, n_scalar_fields
926 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
927 (int(lxyz,
i8) * int(fld_data_size,
i8))
929 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
931 int(fld_data_size,
i8))
933 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
935 int(fld_data_size,
i8))
938 if (gdim .eq. 3)
then
945 byte_offset = int(mpi_offset,
i8) + &
946 int(offset_el,
i8) * &
951 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
952 mpi_offset = int(mpi_offset,
i8) + &
953 int(glb_nelv,
i8) * &
959 if (write_velocity)
then
960 byte_offset = int(mpi_offset,
i8) + &
961 int(offset_el,
i8) * &
966 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
967 mpi_offset = int(mpi_offset,
i8) + &
968 int(glb_nelv,
i8) * &
975 if (write_pressure)
then
976 byte_offset = int(mpi_offset,
i8) + &
977 int(offset_el,
i8) * &
981 p%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
982 mpi_offset = int(mpi_offset,
i8) + &
983 int(glb_nelv,
i8) * &
989 if (write_temperature)
then
990 byte_offset = int(mpi_offset,
i8) + &
991 int(offset_el,
i8) * &
995 tem%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
996 mpi_offset = int(mpi_offset,
i8) + &
997 int(glb_nelv,
i8) * &
1005 temp_offset = mpi_offset
1007 do i = 1, n_scalar_fields
1011 mpi_offset = int(temp_offset,
i8) + &
1012 int(1_i8*glb_nelv,
i8) * &
1017 byte_offset = int(mpi_offset,
i8) + &
1018 int(offset_el,
i8) * &
1022 scalar_fields(i)%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
1023 mpi_offset = int(mpi_offset,
i8) + &
1024 int(glb_nelv,
i8) * &
1031 call mpi_file_sync(fh, ierr)
1032 call mpi_file_close(fh, ierr)
1037 open(newunit = file_unit, &
1038 file = this%get_meta_fname(), status =
'replace')
1045 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
1046 trim(name),
'%01d.f%05d'
1047 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
1048 this%get_start_counter()
1049 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
1050 (this%get_counter() + 1) - this%get_start_counter()
1056 if (
allocated(tempo))
deallocate(tempo)
1057 if (
allocated(scalar_fields))
deallocate(scalar_fields)
1360 class(*),
target,
intent(inout) :: data
1361 character(len= 132) :: hdr
1362 integer :: ierr, suffix_pos, i, j
1363 type(mpi_file) :: fh
1364 type(mpi_status) :: status
1365 character(len= 1024) :: fname, base_fname, meta_fname, string, path
1366 logical :: meta_file, read_mesh, read_velocity, read_pressure
1367 logical :: read_temp
1368 character(len=6) :: suffix
1369 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset
1370 integer :: lx, ly, lz, glb_nelv, counter, lxyz
1371 integer :: FLD_DATA_SIZE, n_scalars, n
1372 integer :: file_unit
1373 real(kind=
rp) :: time
1374 real(kind=
sp) :: temp
1376 real(kind=
sp),
parameter :: test_pattern = 6.54321
1377 character :: rdcode(10), temp_str(4)
1378 character(len=LOG_SIZE) :: log_buf
1384 inquire(
file = trim(meta_fname), exist = meta_file)
1385 if (meta_file .and. data%meta_nsamples .eq. 0)
then
1387 open(newunit = file_unit,
file = trim(meta_fname))
1388 read(file_unit, fmt =
'(A)') string
1389 read(string(14:), fmt =
'(A)') string
1390 string = trim(string)
1392 data%fld_series_fname = string(:scan(trim(string),
'%')-1)
1393 data%fld_series_fname = adjustl(data%fld_series_fname)
1394 data%fld_series_fname = trim(data%fld_series_fname)//
'0'
1396 read(file_unit, fmt =
'(A)') string
1397 read(string(scan(string,
':')+1:), *) data%meta_start_counter
1398 read(file_unit, fmt =
'(A)') string
1399 read(string(scan(string,
':')+1:), *) data%meta_nsamples
1402 write(log_buf,*)
'Reading meta file for fld series'
1404 write(log_buf,*)
'Name: ', trim(data%fld_series_fname)
1406 write(log_buf,*)
'Start counter: ', data%meta_start_counter
1408 write(log_buf,*)
'Nsamples: ', data%meta_nsamples
1412 call mpi_bcast(data%fld_series_fname, 1024, mpi_character, 0, &
1414 call mpi_bcast(data%meta_start_counter, 1, mpi_integer, 0, &
1416 call mpi_bcast(data%meta_nsamples, 1, mpi_integer, 0, &
1419 if (this%get_counter() .eq. -1)
then
1420 call this%set_start_counter(data%meta_start_counter)
1421 call this%set_counter(data%meta_start_counter)
1427 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1428 fname = trim(path) // trim(data%fld_series_fname) //
'.' // suffix
1429 if (this%get_counter() .ge. &
1430 data%meta_nsamples+data%meta_start_counter)
then
1431 call neko_error(
'Trying to read more fld files than exist')
1434 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1437 call mpi_file_open(
neko_comm, trim(fname), &
1438 mpi_mode_rdonly, mpi_info_null, fh, ierr)
1440 if (ierr .ne. 0)
call neko_error(
"Could not read "//trim(fname))
1442 call neko_log%message(
'Reading fld file ' // trim(fname))
1444 call mpi_file_read_all(fh, hdr, 132, mpi_character, status, ierr)
1448 read(hdr, 1) temp_str, fld_data_size, lx, ly, lz, glb_nelv, glb_nelv, &
1449 time, counter, i, j, (rdcode(i), i = 1, 10)
14501
format(4a, 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
1451 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
1452 if (data%nelv .eq. 0)
then
1454 data%nelv = dist%num_local()
1455 data%offset_el = dist%start_idx()
1460 data%glb_nelv = glb_nelv
1461 data%t_counter = counter
1464 n = lxyz * data%nelv
1474 this%dp_precision = .true.
1476 this%dp_precision = .false.
1478 if (this%dp_precision)
then
1479 allocate(
tmp_dp(data%gdim*n))
1481 allocate(
tmp_sp(data%gdim*n))
1487 read_velocity = .false.
1488 read_pressure = .false.
1490 if (rdcode(i) .eq.
'X')
then
1497 if (rdcode(i) .eq.
'U')
then
1498 read_velocity = .true.
1504 if (rdcode(i) .eq.
'P')
then
1505 read_pressure = .true.
1509 if (rdcode(i) .eq.
'T')
then
1515 if (rdcode(i) .eq.
'S')
then
1517 read(rdcode(i),*) n_scalars
1518 n_scalars = n_scalars*10
1521 n_scalars = n_scalars+j
1523 if (
allocated(data%s))
then
1524 if (data%n_scalars .ne. n_scalars)
then
1525 do j = 1, data%n_scalars
1526 call data%s(j)%free()
1529 data%n_scalars = n_scalars
1530 allocate(data%s(n_scalars))
1531 do j = 1, data%n_scalars
1532 call data%s(j)%init(n)
1536 data%n_scalars = n_scalars
1537 allocate(data%s(data%n_scalars))
1538 do j = 1, data%n_scalars
1539 call data%s(j)%init(n)
1546 call mpi_file_read_at_all(fh, mpi_offset, temp, 1, &
1547 mpi_real, status, ierr)
1548 if (.not.
sabscmp(temp, test_pattern, epsilon(1.0_sp)))
then
1549 call neko_error(
'Incorrect format for fld file, &
1550 &test pattern does not match.')
1555 if (
allocated(data%idx))
then
1556 if (
size(data%idx) .ne. data%nelv)
then
1557 deallocate(data%idx)
1558 allocate(data%idx(data%nelv))
1561 allocate(data%idx(data%nelv))
1564 byte_offset = mpi_offset + &
1567 call mpi_file_read_at_all(fh, byte_offset, data%idx, data%nelv, &
1568 mpi_integer, status, ierr)
1570 mpi_offset = mpi_offset + &
1574 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1575 (int(data%gdim*lxyz,
i8) * &
1576 int(fld_data_size,
i8))
1578 data%x, data%y, data%z, data)
1579 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1580 (int(data%gdim *lxyz,
i8) * &
1581 int(fld_data_size,
i8))
1584 if (read_velocity)
then
1585 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1586 (int(data%gdim*lxyz,
i8) * &
1587 int(fld_data_size,
i8))
1589 data%u, data%v, data%w, data)
1590 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1591 (int(data%gdim *lxyz,
i8) * &
1592 int(fld_data_size,
i8))
1595 if (read_pressure)
then
1596 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1598 int(fld_data_size,
i8))
1600 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1602 int(fld_data_size,
i8))
1606 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1608 int(fld_data_size,
i8))
1610 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1612 int(fld_data_size,
i8))
1616 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1618 int(fld_data_size,
i8))
1620 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1622 int(fld_data_size,
i8))
1626 call this%increment_counter()
1631 call neko_error(
'Currently we only read into fld_file_data_t, &
1632 &please use that data structure instead.')