181 class(*),
target,
intent(in) :: data
182 real(kind=
rp),
intent(in),
optional :: t
184 real(kind=
rp),
allocatable,
target :: tempo(:)
185 type(
mesh_t),
pointer :: msh
188 real(kind=
dp) :: time
189 character(len= 132) :: hdr
190 character :: rdcode(10)
191 character(len=6) :: id_str
192 character(len= 1024) :: fname
193 character(len= 1024) :: name
195 integer :: i, ierr, n, suffix_pos, tslash_pos
196 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
197 integer,
allocatable :: idx(:)
198 type(mpi_status) :: status
200 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
201 real(kind=
sp),
parameter :: test_pattern = 6.54321
203 logical :: write_mesh, write_velocity, write_pressure, write_temperature
204 integer :: fld_data_size, n_scalar_fields
218 write_pressure = .false.
219 write_velocity = .false.
220 write_temperature = .false.
229 glb_nelv = data%glb_nelv
230 offset_el = data%offset_el
232 if (data%x%size() .gt. 0) x%ptr => data%x%x
233 if (data%y%size() .gt. 0) y%ptr => data%y%x
234 if (data%z%size() .gt. 0) z%ptr => data%z%x
235 if (gdim .eq. 2) z%ptr => data%y%x
236 if (data%u%size() .gt. 0)
then
240 if (data%v%size() .le. 0) v%ptr => data%u%x
241 if (data%w%size() .le. 0) w%ptr => data%u%x
242 write_velocity = .true.
244 if (data%v%size() .gt. 0) v%ptr => data%v%x
245 if (data%w%size() .gt. 0) w%ptr => data%w%x
246 if (data%p%size() .gt. 0)
then
248 write_pressure = .true.
250 if (data%t%size() .gt. 0)
then
251 write_temperature = .true.
256 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
257 n_scalar_fields = data%n_scalars + 1
258 allocate(scalar_fields(n_scalar_fields))
259 do i = 1, n_scalar_fields -1
260 scalar_fields(i)%ptr => data%s(i)%x
262 scalar_fields(n_scalar_fields)%ptr => data%w%x
264 n_scalar_fields = data%n_scalars
265 allocate(scalar_fields(n_scalar_fields+1))
266 do i = 1, n_scalar_fields
267 scalar_fields(i)%ptr => data%s(i)%x
269 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
274 if (nelv .eq. 0)
then
291 call dummy_list%init(1)
293 call dummy_list%assign(1, ptr)
295 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
296 write_temperature, dof)
297 nullify(dummy_list%items(1)%ptr)
299 deallocate(dummy_list%items)
302 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
303 write_temperature, dof)
308 if (
associated(dof))
then
309 x%ptr => dof%x(:,1,1,1)
310 y%ptr => dof%y(:,1,1,1)
311 z%ptr => dof%z(:,1,1,1)
316 if (
associated(msh))
then
318 glb_nelv = msh%glb_nelv
319 offset_el = msh%offset_el
322 allocate(idx(msh%nelv))
324 idx(i) = msh%elements(i)%e%id()
328 if (
associated(xh))
then
337 if (this%dp_precision)
then
342 if (this%dp_precision)
then
353 call this%increment_counter()
355 if (.not. this%write_mesh)
then
356 write_mesh = (this%get_counter() .eq. this%get_start_counter())
358 write_mesh = this%write_mesh
360 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
362 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
364 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
366 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
368 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
379 if (write_velocity)
then
383 if (write_pressure)
then
387 if (write_temperature)
then
391 if (n_scalar_fields .gt. 0 )
then
394 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
396 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
401 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
402 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
4031
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
404 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
407 fname = this%get_fld_fname()
409 call mpi_file_open(
neko_comm, trim(fname), &
410 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
413 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
416 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
419 byte_offset = mpi_offset + &
421 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
422 mpi_integer, status, ierr)
427 byte_offset = mpi_offset + int(offset_el,
i8) * &
428 (int(gdim*lxyz,
i8) * &
429 int(fld_data_size,
i8))
431 x%ptr, y%ptr, z%ptr, &
433 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
434 (int(gdim *lxyz,
i8) * &
435 int(fld_data_size,
i8))
437 if (write_velocity)
then
438 byte_offset = mpi_offset + int(offset_el,
i8) * &
439 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
441 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv)
443 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
444 (int(gdim * (lxyz),
i8) * &
445 int(fld_data_size,
i8))
449 if (write_pressure)
then
450 byte_offset = mpi_offset + int(offset_el,
i8) * &
451 (int((lxyz),
i8) * int(fld_data_size,
i8))
453 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
454 (int((lxyz),
i8) * int(fld_data_size,
i8))
457 if (write_temperature)
then
458 byte_offset = mpi_offset + int(offset_el,
i8) * &
460 int(fld_data_size,
i8))
462 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
464 int(fld_data_size,
i8))
467 temp_offset = mpi_offset
469 do i = 1, n_scalar_fields
473 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
474 (int(lxyz,
i8) * int(fld_data_size,
i8))
476 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
478 int(fld_data_size,
i8))
480 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
482 int(fld_data_size,
i8))
485 if (gdim .eq. 3)
then
492 byte_offset = int(mpi_offset,
i8) + &
493 int(offset_el,
i8) * &
498 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv)
499 mpi_offset = int(mpi_offset,
i8) + &
500 int(glb_nelv,
i8) * &
506 if (write_velocity)
then
507 byte_offset = int(mpi_offset,
i8) + &
508 int(offset_el,
i8) * &
513 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv)
514 mpi_offset = int(mpi_offset,
i8) + &
515 int(glb_nelv,
i8) * &
522 if (write_pressure)
then
523 byte_offset = int(mpi_offset,
i8) + &
524 int(offset_el,
i8) * &
529 mpi_offset = int(mpi_offset,
i8) + &
530 int(glb_nelv,
i8) * &
536 if (write_temperature)
then
537 byte_offset = int(mpi_offset,
i8) + &
538 int(offset_el,
i8) * &
543 mpi_offset = int(mpi_offset,
i8) + &
544 int(glb_nelv,
i8) * &
552 temp_offset = mpi_offset
554 do i = 1, n_scalar_fields
558 mpi_offset = int(temp_offset,
i8) + &
559 int(1_i8*glb_nelv,
i8) * &
564 byte_offset = int(mpi_offset,
i8) + &
565 int(offset_el,
i8) * &
569 scalar_fields(i)%ptr, lxyz, nelv)
570 mpi_offset = int(mpi_offset,
i8) + &
571 int(glb_nelv,
i8) * &
578 call mpi_file_sync(fh, ierr)
579 call mpi_file_close(fh, ierr)
584 open(newunit = file_unit, &
585 file = this%get_meta_fname(), status =
'replace')
592 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
593 trim(name),
'%01d.f%05d'
594 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
595 this%get_start_counter()
596 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
597 (this%get_counter() + 1) - this%get_start_counter()
603 if (
allocated(tempo))
deallocate(tempo)
604 if (
allocated(scalar_fields))
deallocate(scalar_fields)
612 class(*),
target,
intent(in) :: data
613 type(
mask_t),
intent(in) :: mask
614 real(kind=
rp),
intent(in),
optional :: t
616 real(kind=
rp),
allocatable,
target :: tempo(:)
617 type(
mesh_t),
pointer :: msh
620 real(kind=
dp) :: time
621 character(len= 132) :: hdr
622 character :: rdcode(10)
623 character(len=6) :: id_str
624 character(len= 1024) :: fname
625 character(len= 1024) :: name
627 integer :: i, ierr, n, suffix_pos, tslash_pos
628 integer :: lx, ly, lz, lxyz, gdim, glb_nelv, nelv, offset_el
629 integer,
allocatable :: idx(:)
630 type(mpi_status) :: status
632 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset, temp_offset
633 real(kind=
sp),
parameter :: test_pattern = 6.54321
635 logical :: write_mesh, write_velocity, write_pressure, write_temperature
636 integer :: fld_data_size, n_scalar_fields
650 write_pressure = .false.
651 write_velocity = .false.
652 write_temperature = .false.
661 glb_nelv = data%glb_nelv
662 offset_el = data%offset_el
664 if (data%x%size() .gt. 0) x%ptr => data%x%x
665 if (data%y%size() .gt. 0) y%ptr => data%y%x
666 if (data%z%size() .gt. 0) z%ptr => data%z%x
667 if (gdim .eq. 2) z%ptr => data%y%x
668 if (data%u%size() .gt. 0)
then
672 if (data%v%size() .le. 0) v%ptr => data%u%x
673 if (data%w%size() .le. 0) w%ptr => data%u%x
674 write_velocity = .true.
676 if (data%v%size() .gt. 0) v%ptr => data%v%x
677 if (data%w%size() .gt. 0) w%ptr => data%w%x
678 if (data%p%size() .gt. 0)
then
680 write_pressure = .true.
682 if (data%t%size() .gt. 0)
then
683 write_temperature = .true.
688 if (gdim .eq. 2 .and. data%w%size() .gt. 0)
then
689 n_scalar_fields = data%n_scalars + 1
690 allocate(scalar_fields(n_scalar_fields))
691 do i = 1, n_scalar_fields -1
692 scalar_fields(i)%ptr => data%s(i)%x
694 scalar_fields(n_scalar_fields)%ptr => data%w%x
696 n_scalar_fields = data%n_scalars
697 allocate(scalar_fields(n_scalar_fields+1))
698 do i = 1, n_scalar_fields
699 scalar_fields(i)%ptr => data%s(i)%x
701 scalar_fields(n_scalar_fields+1)%ptr => data%w%x
706 if (nelv .eq. 0)
then
723 call dummy_list%init(1)
725 call dummy_list%assign(1, ptr)
727 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
728 write_temperature, dof)
729 nullify(dummy_list%items(1)%ptr)
731 deallocate(dummy_list%items)
734 scalar_fields, n_scalar_fields, write_pressure, write_velocity, &
735 write_temperature, dof)
740 if (
associated(dof))
then
741 x%ptr => dof%x(:,1,1,1)
742 y%ptr => dof%y(:,1,1,1)
743 z%ptr => dof%z(:,1,1,1)
748 if (
associated(msh))
then
750 glb_nelv = msh%glb_nelv
751 offset_el = msh%offset_el
754 allocate(idx(msh%nelv))
756 idx(i) = msh%elements(i)%e%id()
760 if (
associated(xh))
then
769 nelv =
mask%size() / lxyz
770 if (mod(
mask%size(), lxyz) /= 0)
then
771 call neko_error(
"Mask size must be a multiple of the number of elements in the mesh.")
773 call mpi_allreduce(nelv, glb_nelv, 1, &
775 call mpi_scan(nelv, offset_el, 1, &
777 offset_el = offset_el - nelv
779 if (
allocated(idx))
then
785 idx(i) = offset_el + i
789 if (this%dp_precision)
then
794 if (this%dp_precision)
then
805 call this%increment_counter()
807 if (.not. this%write_mesh)
then
808 write_mesh = (this%get_counter() .eq. this%get_start_counter())
810 write_mesh = this%write_mesh
812 call mpi_allreduce(mpi_in_place, write_mesh, 1, &
814 call mpi_allreduce(mpi_in_place, write_velocity, 1, &
816 call mpi_allreduce(mpi_in_place, write_pressure, 1, &
818 call mpi_allreduce(mpi_in_place, write_temperature, 1, &
820 call mpi_allreduce(mpi_in_place, n_scalar_fields, 1, &
831 if (write_velocity)
then
835 if (write_pressure)
then
839 if (write_temperature)
then
843 if (n_scalar_fields .gt. 0 )
then
846 write(rdcode(i),
'(i1)') (n_scalar_fields)/10
848 write(rdcode(i),
'(i1)') (n_scalar_fields) - 10*((n_scalar_fields)/10)
853 write(hdr, 1) fld_data_size, lx, ly, lz, glb_nelv, glb_nelv,&
854 time, this%get_counter(), 1, 1, (rdcode(i), i = 1, 10)
8551
format(
'#std', 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
856 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
859 fname = this%get_fld_fname()
861 call mpi_file_open(
neko_comm, trim(fname), &
862 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, &
865 call mpi_file_write_all(fh, hdr, 132, mpi_character, status, ierr)
868 call mpi_file_write_all(fh, test_pattern, 1, mpi_real, status, ierr)
871 byte_offset = mpi_offset + &
873 call mpi_file_write_at_all(fh, byte_offset, idx, nelv, &
874 mpi_integer, status, ierr)
879 byte_offset = mpi_offset + int(offset_el,
i8) * &
880 (int(gdim*lxyz,
i8) * &
881 int(fld_data_size,
i8))
883 x%ptr, y%ptr, z%ptr, &
884 n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
885 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
886 (int(gdim *lxyz,
i8) * &
887 int(fld_data_size,
i8))
889 if (write_velocity)
then
890 byte_offset = mpi_offset + int(offset_el,
i8) * &
891 (int(gdim * (lxyz),
i8) * int(fld_data_size,
i8))
893 u%ptr, v%ptr, w%ptr, n, gdim, lxyz, nelv, lx, ly, lz,
mask%get())
895 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
896 (int(gdim * (lxyz),
i8) * &
897 int(fld_data_size,
i8))
901 if (write_pressure)
then
902 byte_offset = mpi_offset + int(offset_el,
i8) * &
903 (int((lxyz),
i8) * int(fld_data_size,
i8))
905 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
906 (int((lxyz),
i8) * int(fld_data_size,
i8))
909 if (write_temperature)
then
910 byte_offset = mpi_offset + int(offset_el,
i8) * &
912 int(fld_data_size,
i8))
914 mpi_offset = mpi_offset + int(glb_nelv,
i8) * &
916 int(fld_data_size,
i8))
919 temp_offset = mpi_offset
921 do i = 1, n_scalar_fields
925 mpi_offset = int(temp_offset,
i8) + int(1_i8*glb_nelv,
i8) * &
926 (int(lxyz,
i8) * int(fld_data_size,
i8))
928 byte_offset = int(mpi_offset,
i8) + int(offset_el,
i8) * &
930 int(fld_data_size,
i8))
932 mpi_offset = int(mpi_offset,
i8) + int(glb_nelv,
i8) * &
934 int(fld_data_size,
i8))
937 if (gdim .eq. 3)
then
944 byte_offset = int(mpi_offset,
i8) + &
945 int(offset_el,
i8) * &
950 x%ptr, y%ptr, z%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
951 mpi_offset = int(mpi_offset,
i8) + &
952 int(glb_nelv,
i8) * &
958 if (write_velocity)
then
959 byte_offset = int(mpi_offset,
i8) + &
960 int(offset_el,
i8) * &
965 u%ptr, v%ptr, w%ptr, gdim, lxyz, nelv, lx, ly, lz, n,
mask%get())
966 mpi_offset = int(mpi_offset,
i8) + &
967 int(glb_nelv,
i8) * &
974 if (write_pressure)
then
975 byte_offset = int(mpi_offset,
i8) + &
976 int(offset_el,
i8) * &
980 p%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
981 mpi_offset = int(mpi_offset,
i8) + &
982 int(glb_nelv,
i8) * &
988 if (write_temperature)
then
989 byte_offset = int(mpi_offset,
i8) + &
990 int(offset_el,
i8) * &
994 tem%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
995 mpi_offset = int(mpi_offset,
i8) + &
996 int(glb_nelv,
i8) * &
1004 temp_offset = mpi_offset
1006 do i = 1, n_scalar_fields
1010 mpi_offset = int(temp_offset,
i8) + &
1011 int(1_i8*glb_nelv,
i8) * &
1016 byte_offset = int(mpi_offset,
i8) + &
1017 int(offset_el,
i8) * &
1021 scalar_fields(i)%ptr, lxyz, nelv, lx, ly, lz, n,
mask%get())
1022 mpi_offset = int(mpi_offset,
i8) + &
1023 int(glb_nelv,
i8) * &
1030 call mpi_file_sync(fh, ierr)
1031 call mpi_file_close(fh, ierr)
1036 open(newunit = file_unit, &
1037 file = this%get_meta_fname(), status =
'replace')
1044 write(file_unit, fmt =
'(A,A,A)')
'filetemplate: ', &
1045 trim(name),
'%01d.f%05d'
1046 write(file_unit, fmt =
'(A,i5)')
'firsttimestep: ', &
1047 this%get_start_counter()
1048 write(file_unit, fmt =
'(A,i5)')
'numtimesteps: ', &
1049 (this%get_counter() + 1) - this%get_start_counter()
1055 if (
allocated(tempo))
deallocate(tempo)
1056 if (
allocated(scalar_fields))
deallocate(scalar_fields)
1359 class(*),
target,
intent(inout) :: data
1360 character(len= 132) :: hdr
1361 integer :: ierr, suffix_pos, i, j
1362 type(mpi_file) :: fh
1363 type(mpi_status) :: status
1364 character(len= 1024) :: fname, base_fname, meta_fname, string, path
1365 logical :: meta_file, read_mesh, read_velocity, read_pressure
1366 logical :: read_temp
1367 character(len=6) :: suffix
1368 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset
1369 integer :: lx, ly, lz, glb_nelv, counter, lxyz
1370 integer :: FLD_DATA_SIZE, n_scalars, n
1371 integer :: file_unit
1372 real(kind=
rp) :: time
1373 real(kind=
sp) :: temp
1375 real(kind=
sp),
parameter :: test_pattern = 6.54321
1376 character :: rdcode(10), temp_str(4)
1377 character(len=LOG_SIZE) :: log_buf
1383 inquire(
file = trim(meta_fname), exist = meta_file)
1384 if (meta_file .and. data%meta_nsamples .eq. 0)
then
1386 open(newunit = file_unit,
file = trim(meta_fname))
1387 read(file_unit, fmt =
'(A)') string
1388 read(string(14:), fmt =
'(A)') string
1389 string = trim(string)
1391 data%fld_series_fname = string(:scan(trim(string),
'%')-1)
1392 data%fld_series_fname = adjustl(data%fld_series_fname)
1393 data%fld_series_fname = trim(data%fld_series_fname)//
'0'
1395 read(file_unit, fmt =
'(A)') string
1396 read(string(scan(string,
':')+1:), *) data%meta_start_counter
1397 read(file_unit, fmt =
'(A)') string
1398 read(string(scan(string,
':')+1:), *) data%meta_nsamples
1401 write(log_buf,*)
'Reading meta file for fld series'
1403 write(log_buf,*)
'Name: ', trim(data%fld_series_fname)
1405 write(log_buf,*)
'Start counter: ', data%meta_start_counter
1407 write(log_buf,*)
'Nsamples: ', data%meta_nsamples
1411 call mpi_bcast(data%fld_series_fname, 1024, mpi_character, 0, &
1413 call mpi_bcast(data%meta_start_counter, 1, mpi_integer, 0, &
1415 call mpi_bcast(data%meta_nsamples, 1, mpi_integer, 0, &
1418 if (this%get_counter() .eq. -1)
then
1419 call this%set_start_counter(data%meta_start_counter)
1420 call this%set_counter(data%meta_start_counter)
1426 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1427 fname = trim(path) // trim(data%fld_series_fname) //
'.' // suffix
1428 if (this%get_counter() .ge. &
1429 data%meta_nsamples+data%meta_start_counter)
then
1430 call neko_error(
'Trying to read more fld files than exist')
1433 write(suffix,
'(a,i5.5)')
'f', this%get_counter()
1436 call mpi_file_open(
neko_comm, trim(fname), &
1437 mpi_mode_rdonly, mpi_info_null, fh, ierr)
1439 if (ierr .ne. 0)
call neko_error(
"Could not read "//trim(fname))
1441 call neko_log%message(
'Reading fld file ' // trim(fname))
1443 call mpi_file_read_all(fh, hdr, 132, mpi_character, status, ierr)
1447 read(hdr, 1) temp_str, fld_data_size, lx, ly, lz, glb_nelv, glb_nelv, &
1448 time, counter, i, j, (rdcode(i), i = 1, 10)
14491
format(4a, 1x, i1, 1x,
i2, 1x,
i2, 1x,
i2, 1x, i10, 1x, i10, &
1450 1x, e20.13, 1x, i9, 1x, i6, 1x, i6, 1x, 10a)
1451 if (data%nelv .eq. 0)
then
1453 data%nelv = dist%num_local()
1454 data%offset_el = dist%start_idx()
1459 data%glb_nelv = glb_nelv
1460 data%t_counter = counter
1463 n = lxyz * data%nelv
1473 this%dp_precision = .true.
1475 this%dp_precision = .false.
1477 if (this%dp_precision)
then
1478 allocate(
tmp_dp(data%gdim*n))
1480 allocate(
tmp_sp(data%gdim*n))
1486 read_velocity = .false.
1487 read_pressure = .false.
1489 if (rdcode(i) .eq.
'X')
then
1496 if (rdcode(i) .eq.
'U')
then
1497 read_velocity = .true.
1503 if (rdcode(i) .eq.
'P')
then
1504 read_pressure = .true.
1508 if (rdcode(i) .eq.
'T')
then
1514 if (rdcode(i) .eq.
'S')
then
1516 read(rdcode(i),*) n_scalars
1517 n_scalars = n_scalars*10
1520 n_scalars = n_scalars+j
1522 if (
allocated(data%s))
then
1523 if (data%n_scalars .ne. n_scalars)
then
1524 do j = 1, data%n_scalars
1525 call data%s(j)%free()
1528 data%n_scalars = n_scalars
1529 allocate(data%s(n_scalars))
1530 do j = 1, data%n_scalars
1531 call data%s(j)%init(n)
1535 data%n_scalars = n_scalars
1536 allocate(data%s(data%n_scalars))
1537 do j = 1, data%n_scalars
1538 call data%s(j)%init(n)
1545 call mpi_file_read_at_all(fh, mpi_offset, temp, 1, &
1546 mpi_real, status, ierr)
1547 if (.not.
sabscmp(temp, test_pattern, epsilon(1.0_sp)))
then
1548 call neko_error(
'Incorrect format for fld file, &
1549 &test pattern does not match.')
1554 if (
allocated(data%idx))
then
1555 if (
size(data%idx) .ne. data%nelv)
then
1556 deallocate(data%idx)
1557 allocate(data%idx(data%nelv))
1560 allocate(data%idx(data%nelv))
1563 byte_offset = mpi_offset + &
1566 call mpi_file_read_at_all(fh, byte_offset, data%idx, data%nelv, &
1567 mpi_integer, status, ierr)
1569 mpi_offset = mpi_offset + &
1573 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1574 (int(data%gdim*lxyz,
i8) * &
1575 int(fld_data_size,
i8))
1577 data%x, data%y, data%z, data)
1578 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1579 (int(data%gdim *lxyz,
i8) * &
1580 int(fld_data_size,
i8))
1583 if (read_velocity)
then
1584 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1585 (int(data%gdim*lxyz,
i8) * &
1586 int(fld_data_size,
i8))
1588 data%u, data%v, data%w, data)
1589 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1590 (int(data%gdim *lxyz,
i8) * &
1591 int(fld_data_size,
i8))
1594 if (read_pressure)
then
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))
1605 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1607 int(fld_data_size,
i8))
1609 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1611 int(fld_data_size,
i8))
1615 byte_offset = mpi_offset + int(data%offset_el,
i8) * &
1617 int(fld_data_size,
i8))
1619 mpi_offset = mpi_offset + int(data%glb_nelv,
i8) * &
1621 int(fld_data_size,
i8))
1625 call this%increment_counter()
1630 call neko_error(
'Currently we only read into fld_file_data_t, &
1631 &please use that data structure instead.')