110 class(*),
target,
intent(in) :: data
111 real(kind=
rp),
intent(in),
optional :: t
112 real(kind=
dp) :: time
113 character(len=5) :: id_str
114 character(len=1024) :: fname
115 integer :: ierr, suffix_pos, optional_fields
116 type(
field_t),
pointer :: u, v, w, p, s
117 type(
field_t),
pointer :: wm_x => null()
118 type(
field_t),
pointer :: wm_y => null()
119 type(
field_t),
pointer :: wm_z => null()
120 type(
field_t),
pointer :: abx1, abx2
121 type(
field_t),
pointer :: aby1, aby2
122 type(
field_t),
pointer :: abz1, abz2
123 type(
field_t),
pointer :: abs1, abs2
131 real(kind=
rp),
pointer :: msh_x(:,:,:,:) => null()
132 real(kind=
rp),
pointer :: msh_y(:,:,:,:) => null()
133 real(kind=
rp),
pointer :: msh_z(:,:,:,:) => null()
134 real(kind=
rp),
pointer :: blag(:,:,:,:) => null()
135 real(kind=
rp),
pointer :: blaglag(:,:,:,:) => null()
136 real(kind=
rp),
pointer :: pivot_pos(:) => null()
137 real(kind=
rp),
pointer :: pivot_vel_lag(:,:) => null()
138 real(kind=
rp),
pointer :: basis_pos(:) => null()
139 real(kind=
rp),
pointer :: basis_vel_lag(:,:) => null()
140 real(kind=
rp),
pointer :: dtlag(:), tlag(:)
141 type(
mesh_t),
pointer :: msh
142 type(mpi_status) :: status
144 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset
145 integer(kind=i8) :: n_glb_dofs, dof_offset
146 logical :: write_lag, write_scalar, write_dtlag
148 logical :: write_scalarlag, write_abvel
160 if ( .not.
associated(data%u) .or. &
161 .not.
associated(data%v) .or. &
162 .not.
associated(data%w) .or. &
163 .not.
associated(data%p) )
then
175 if (
associated(data%ulag))
then
180 optional_fields = optional_fields + 1
185 if (
associated(data%s))
then
187 write_scalar = .true.
188 optional_fields = optional_fields + 2
190 write_scalar = .false.
193 if (
associated(data%tlag))
then
197 optional_fields = optional_fields + 4
199 write_dtlag = .false.
202 write_abvel = .false.
203 if (
associated(data%abx1))
then
210 optional_fields = optional_fields + 8
214 write_scalarlag = .false.
215 if (
associated(data%abs1))
then
219 optional_fields = optional_fields + 16
220 write_scalarlag = .true.
224 if (
associated(data%wm_x))
then
231 wm_x_lag => data%wm_x_lag
232 wm_y_lag => data%wm_y_lag
233 wm_z_lag => data%wm_z_lag
235 blaglag => data%Blaglag
236 pivot_pos => data%pivot_pos
237 pivot_vel_lag => data%pivot_vel_lag
238 basis_pos => data%basis_pos
239 basis_vel_lag => data%basis_vel_lag
240 optional_fields = optional_fields + 32
248 dof_offset = int(msh%offset_el,
i8) * int(u%Xh%lx * u%Xh%ly * u%Xh%lz,
i8)
249 n_glb_dofs = int(u%Xh%lx * u%Xh%ly * u%Xh%lz,
i8) * int(msh%glb_nelv,
i8)
252 if (.not. this%overwrite)
call this%increment_counter()
253 fname = trim(this%get_fname())
255 call mpi_file_open(
neko_comm, trim(fname), &
256 mpi_mode_wronly + mpi_mode_create, mpi_info_null, fh, ierr)
257 call mpi_file_write_all(fh, msh%glb_nelv, 1, mpi_integer, status, ierr)
258 call mpi_file_write_all(fh, msh%gdim, 1, mpi_integer, status, ierr)
259 call mpi_file_write_all(fh, u%Xh%lx, 1, mpi_integer, status, ierr)
260 call mpi_file_write_all(fh, optional_fields, 1, mpi_integer, status, ierr)
261 call mpi_file_write_all(fh, time, 1, mpi_double_precision, status, ierr)
270 byte_offset = byte_offset + &
272 call mpi_file_write_at_all(fh, byte_offset,u%x, u%dof%size(), &
276 mpi_offset = mpi_offset +&
279 byte_offset = mpi_offset + &
281 call mpi_file_write_at_all(fh, byte_offset, v%x, v%dof%size(), &
285 byte_offset = mpi_offset + &
287 call mpi_file_write_at_all(fh, byte_offset, w%x, w%dof%size(), &
291 byte_offset = mpi_offset + &
293 call mpi_file_write_at_all(fh, byte_offset, p%x, p%dof%size(), &
303 do i = 1, ulag%size()
304 byte_offset = mpi_offset + &
309 associate(x => ulag%lf(i)%x)
310 call mpi_file_write_at_all(fh, byte_offset, x, &
316 do i = 1, vlag%size()
317 byte_offset = mpi_offset + &
322 associate(x => vlag%lf(i)%x)
323 call mpi_file_write_at_all(fh, byte_offset, x, &
326 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
329 do i = 1, wlag%size()
330 byte_offset = mpi_offset + &
331 dof_offset * int(mpi_real_prec_size, i8)
335 associate(x => wlag%lf(i)%x)
336 call mpi_file_write_at_all(fh, byte_offset, x, &
337 wlag%lf(i)%dof%size(), mpi_real_precision, status, ierr)
339 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
344 if (write_scalar)
then
345 byte_offset = mpi_offset + &
346 dof_offset * int(mpi_real_prec_size, i8)
347 call mpi_file_write_at_all(fh, byte_offset, s%x, p%dof%size(), &
348 mpi_real_precision, status, ierr)
349 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
352 if (write_dtlag)
then
353 call mpi_file_write_at_all(fh, mpi_offset, tlag, 10, &
354 mpi_real_precision, status, ierr)
355 mpi_offset = mpi_offset + 10_i8 * int(mpi_real_prec_size, i8)
356 call mpi_file_write_at_all(fh, mpi_offset, dtlag, 10, &
357 mpi_real_precision, status, ierr)
358 mpi_offset = mpi_offset + 10_i8 * int(mpi_real_prec_size, i8)
361 if (write_abvel)
then
362 byte_offset = mpi_offset + &
363 dof_offset * int(mpi_real_prec_size, i8)
364 call mpi_file_write_at_all(fh, byte_offset, abx1%x, abx1%dof%size(), &
365 mpi_real_precision, status, ierr)
366 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
367 byte_offset = mpi_offset + &
368 dof_offset * int(mpi_real_prec_size, i8)
369 call mpi_file_write_at_all(fh, byte_offset, abx2%x, abx1%dof%size(), &
370 mpi_real_precision, status, ierr)
371 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
372 byte_offset = mpi_offset + &
373 dof_offset * int(mpi_real_prec_size, i8)
374 call mpi_file_write_at_all(fh, byte_offset, aby1%x, abx1%dof%size(), &
375 mpi_real_precision, status, ierr)
376 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
377 byte_offset = mpi_offset + &
378 dof_offset * int(mpi_real_prec_size, i8)
379 call mpi_file_write_at_all(fh, byte_offset, aby2%x, abx1%dof%size(), &
380 mpi_real_precision, status, ierr)
381 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
382 byte_offset = mpi_offset + &
383 dof_offset * int(mpi_real_prec_size, i8)
384 call mpi_file_write_at_all(fh, byte_offset, abz1%x, abx1%dof%size(), &
385 mpi_real_precision, status, ierr)
386 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
387 byte_offset = mpi_offset + &
388 dof_offset * int(mpi_real_prec_size, i8)
389 call mpi_file_write_at_all(fh, byte_offset, abz2%x, abx1%dof%size(), &
390 mpi_real_precision, status, ierr)
391 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
394 if (write_scalarlag)
then
395 do i = 1, slag%size()
396 byte_offset = mpi_offset + &
397 dof_offset * int(mpi_real_prec_size, i8)
401 associate(x => slag%lf(i)%x)
402 call mpi_file_write_at_all(fh, byte_offset, x, &
403 slag%lf(i)%dof%size(), mpi_real_precision, status, ierr)
405 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
408 byte_offset = mpi_offset + &
409 dof_offset * int(mpi_real_prec_size, i8)
410 call mpi_file_write_at_all(fh, byte_offset, abs1%x, abx1%dof%size(), &
411 mpi_real_precision, status, ierr)
412 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
413 byte_offset = mpi_offset + &
414 dof_offset * int(mpi_real_prec_size, i8)
415 call mpi_file_write_at_all(fh, byte_offset, abs2%x, abx1%dof%size(), &
416 mpi_real_precision, status, ierr)
417 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
421 byte_offset = mpi_offset + &
422 dof_offset * int(mpi_real_prec_size, i8)
423 call mpi_file_write_at_all(fh, byte_offset, msh_x,
size(msh_x), &
424 mpi_real_precision, status, ierr)
425 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
427 byte_offset = mpi_offset + &
428 dof_offset * int(mpi_real_prec_size, i8)
429 call mpi_file_write_at_all(fh, byte_offset, msh_y,
size(msh_y), &
430 mpi_real_precision, status, ierr)
431 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
433 byte_offset = mpi_offset + &
434 dof_offset * int(mpi_real_prec_size, i8)
435 call mpi_file_write_at_all(fh, byte_offset, msh_z,
size(msh_z), &
436 mpi_real_precision, status, ierr)
437 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
439 byte_offset = mpi_offset + &
440 dof_offset * int(mpi_real_prec_size, i8)
441 call mpi_file_write_at_all(fh, byte_offset, wm_x%x, wm_x%dof%size(), &
442 mpi_real_precision, status, ierr)
443 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
445 byte_offset = mpi_offset + &
446 dof_offset * int(mpi_real_prec_size, i8)
447 call mpi_file_write_at_all(fh, byte_offset, wm_y%x, wm_y%dof%size(), &
448 mpi_real_precision, status, ierr)
449 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
451 byte_offset = mpi_offset + &
452 dof_offset * int(mpi_real_prec_size, i8)
453 call mpi_file_write_at_all(fh, byte_offset, wm_z%x, wm_z%dof%size(), &
454 mpi_real_precision, status, ierr)
455 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
457 do i = 1, wm_x_lag%size()
458 byte_offset = mpi_offset + &
459 dof_offset * int(mpi_real_prec_size, i8)
463 associate(x => wm_x_lag%lf(i)%x)
464 call mpi_file_write_at_all(fh, byte_offset, x, &
465 wm_x_lag%lf(i)%dof%size(), mpi_real_precision, status, ierr)
467 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
470 do i = 1, wm_y_lag%size()
471 byte_offset = mpi_offset + &
472 dof_offset * int(mpi_real_prec_size, i8)
476 associate(x => wm_y_lag%lf(i)%x)
477 call mpi_file_write_at_all(fh, byte_offset, x, &
478 wm_y_lag%lf(i)%dof%size(), mpi_real_precision, status, ierr)
480 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
483 do i = 1, wm_z_lag%size()
484 byte_offset = mpi_offset + &
485 dof_offset * int(mpi_real_prec_size, i8)
489 associate(x => wm_z_lag%lf(i)%x)
490 call mpi_file_write_at_all(fh, byte_offset, x, &
491 wm_z_lag%lf(i)%dof%size(), mpi_real_precision, status, ierr)
493 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
496 byte_offset = mpi_offset + &
497 dof_offset * int(mpi_real_prec_size, i8)
498 call mpi_file_write_at_all(fh, byte_offset, blag,
size(blag), &
499 mpi_real_precision, status, ierr)
500 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
502 byte_offset = mpi_offset + &
503 dof_offset * int(mpi_real_prec_size, i8)
504 call mpi_file_write_at_all(fh, byte_offset, blaglag,
size(blaglag), &
505 mpi_real_precision, status, ierr)
506 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
508 call mpi_file_write_at_all(fh, mpi_offset, pivot_pos,
size(pivot_pos), &
509 mpi_real_precision, status, ierr)
510 mpi_offset = mpi_offset + &
511 int(
size(pivot_pos), i8) * int(mpi_real_prec_size, i8)
512 call mpi_file_write_at_all(fh, mpi_offset, pivot_vel_lag, &
513 size(pivot_vel_lag), mpi_real_precision, status, ierr)
514 mpi_offset = mpi_offset + &
515 int(
size(pivot_vel_lag), i8) * int(mpi_real_prec_size, i8)
516 call mpi_file_write_at_all(fh, mpi_offset, basis_pos, &
517 size(basis_pos), mpi_real_precision, status, ierr)
518 mpi_offset = mpi_offset + &
519 int(
size(basis_pos), i8) * int(mpi_real_prec_size, i8)
520 call mpi_file_write_at_all(fh, mpi_offset, basis_vel_lag, &
521 size(basis_vel_lag), mpi_real_precision, status, ierr)
522 mpi_offset = mpi_offset + &
523 int(
size(basis_vel_lag), i8) * int(mpi_real_prec_size, i8)
526 call mpi_file_close(fh, ierr)
528 if (ierr .ne. mpi_success)
then
529 call neko_error(
'Error writing checkpoint file ' // trim(fname))
537 class(*),
target,
intent(inout) :: data
538 type(chkp_t),
pointer :: chkp
539 character(len=5) :: id_str
540 character(len=1024) :: fname
541 integer :: ierr, suffix_pos
542 type(field_t),
pointer :: u, v, w, p, s
543 type(field_t),
pointer :: wm_x => null()
544 type(field_t),
pointer :: wm_y => null()
545 type(field_t),
pointer :: wm_z => null()
546 type(field_series_t),
pointer :: ulag => null()
547 type(field_series_t),
pointer :: vlag => null()
548 type(field_series_t),
pointer :: wlag => null()
549 type(field_series_t),
pointer :: wm_x_lag => null()
550 type(field_series_t),
pointer :: wm_y_lag => null()
551 type(field_series_t),
pointer :: wm_z_lag => null()
552 type(field_series_t),
pointer :: slag => null()
553 type(mesh_t),
pointer :: msh
554 type(mpi_status) :: status
556 type(field_t),
pointer :: abx1, abx2
557 type(field_t),
pointer :: aby1, aby2
558 type(field_t),
pointer :: abz1, abz2
559 type(field_t),
pointer :: abs1, abs2
560 real(kind=rp),
pointer :: blag(:,:,:,:) => null()
561 real(kind=rp),
pointer :: blaglag(:,:,:,:) => null()
562 real(kind=rp),
pointer :: msh_x(:,:,:,:) => null()
563 real(kind=rp),
pointer :: msh_y(:,:,:,:) => null()
564 real(kind=rp),
pointer :: msh_z(:,:,:,:) => null()
565 real(kind=rp),
pointer :: pivot_pos(:) => null()
566 real(kind=rp),
pointer :: pivot_vel_lag(:,:) => null()
567 real(kind=rp),
pointer :: basis_pos(:) => null()
568 real(kind=rp),
pointer :: basis_vel_lag(:,:) => null()
569 real(kind=rp),
allocatable :: x_coord(:,:,:,:)
570 real(kind=rp),
allocatable :: y_coord(:,:,:,:)
571 real(kind=rp),
allocatable :: z_coord(:,:,:,:)
572 real(kind=rp),
pointer :: dtlag(:), tlag(:)
573 integer (kind=MPI_OFFSET_KIND) :: mpi_offset, byte_offset
574 integer(kind=i8) :: n_glb_dofs, dof_offset
575 integer :: glb_nelv, gdim, lx, have_lag, have_scalar, nel
576 integer :: optional_fields, have_dtlag
577 integer :: have_abvel, have_scalarlag
579 logical :: read_lag, read_scalar, read_dtlag, read_abvel, read_scalarlag
582 real(kind=rp) :: center_x, center_y, center_z
584 type(dofmap_t) :: dof
586 call this%check_exists()
591 if ( .not.
associated(data%u) .or. &
592 .not.
associated(data%v) .or. &
593 .not.
associated(data%w) .or. &
594 .not.
associated(data%p) )
then
595 call neko_error(
'Checkpoint not initialized')
602 this%chkp_Xh => data%previous_Xh
604 if (
allocated(data%previous_mesh%elements))
then
605 msh => data%previous_mesh
606 this%mesh2mesh = .true.
607 tol = data%mesh2mesh_tol
610 this%mesh2mesh = .false.
613 if (
associated(data%ulag))
then
622 if (
associated(data%s))
then
626 read_scalar = .false.
628 if (
associated(data%dtlag))
then
636 if (
associated(data%abx1))
then
645 read_scalarlag = .false.
646 if (
associated(data%abs1))
then
650 read_scalarlag = .true.
654 if (
associated(data%wm_x))
then
661 wm_x_lag => data%wm_x_lag
662 wm_y_lag => data%wm_y_lag
663 wm_z_lag => data%wm_z_lag
665 blaglag => data%Blaglag
666 pivot_pos => data%pivot_pos
667 pivot_vel_lag => data%pivot_vel_lag
668 basis_pos => data%basis_pos
669 basis_vel_lag => data%basis_vel_lag
676 call neko_error(
'Invalid data')
679 fname = trim(this%get_fname())
680 call neko_log%message(
"Reading checkpoint from file: " // trim(fname), &
682 call mpi_file_open(neko_comm, trim(fname), &
683 mpi_mode_rdonly, mpi_info_null, fh, ierr)
684 call mpi_file_read_all(fh, glb_nelv, 1, mpi_integer, status, ierr)
685 call mpi_file_read_all(fh, gdim, 1, mpi_integer, status, ierr)
686 call mpi_file_read_all(fh, lx, 1, mpi_integer, status, ierr)
687 call mpi_file_read_all(fh, optional_fields, 1, mpi_integer, status, ierr)
688 call mpi_file_read_all(fh, chkp%t, 1, mpi_double_precision, status, ierr)
690 have_lag = mod(optional_fields,2)/1
691 have_scalar = mod(optional_fields,4)/2
692 have_dtlag = mod(optional_fields,8)/4
693 have_abvel = mod(optional_fields,16)/8
694 have_scalarlag = mod(optional_fields,32)/16
695 have_ale = mod(optional_fields,64)/32
697 if ( ( glb_nelv .ne. msh%glb_nelv ) .or. &
698 ( gdim .ne. msh%gdim) .or. &
699 ( (have_lag .eq. 0) .and. (read_lag) ) .or. &
700 ( (have_scalar .eq. 0) .and. (read_scalar) ) .or. &
701 ( (have_ale .eq. 0) .and. (read_ale) ) )
then
702 call neko_error(
'Checkpoint does not match case')
706 if (gdim .eq. 3)
then
707 call this%chkp_Xh%init(gll, lx, lx, lx)
709 call this%chkp_Xh%init(gll, lx, lx)
711 if (this%mesh2mesh)
then
713 call neko_error(
'ALE does not yet support mesh2mesh ' // &
714 'interpolation for restart!')
716 call dof%init(msh, this%chkp_Xh)
717 call this%global_interp%init(dof, neko_comm, tol = tol)
718 call this%global_interp%find_points(u%dof%x, u%dof%y, u%dof%z, &
721 call this%space_interp%init(this%sim_Xh, this%chkp_Xh)
723 dof_offset = int(msh%offset_el, i8) * int(this%chkp_Xh%lxyz, i8)
724 n_glb_dofs = int(this%chkp_Xh%lxyz, i8) * int(msh%glb_nelv, i8)
730 byte_offset = 4_i8 * int(mpi_integer_size, i8) + &
731 int(mpi_double_precision_size, i8)
732 byte_offset = byte_offset + &
733 dof_offset * int(mpi_real_prec_size, i8)
734 call this%read_field(fh, byte_offset, u%x, nel)
735 mpi_offset = 4_i8 * int(mpi_integer_size, i8) + &
736 int(mpi_double_precision_size, i8)
737 mpi_offset = mpi_offset +&
738 n_glb_dofs * int(mpi_real_prec_size, i8)
740 byte_offset = mpi_offset + &
741 dof_offset * int(mpi_real_prec_size, i8)
742 call this%read_field(fh, byte_offset, v%x, nel)
743 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
745 byte_offset = mpi_offset + &
746 dof_offset * int(mpi_real_prec_size, i8)
747 call this%read_field(fh, byte_offset, w%x, nel)
748 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
750 byte_offset = mpi_offset + &
751 dof_offset * int(mpi_real_prec_size, i8)
752 call this%read_field(fh, byte_offset, p%x, nel)
753 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
760 do i = 1, ulag%size()
761 byte_offset = mpi_offset + &
762 dof_offset * int(mpi_real_prec_size, i8)
763 call this%read_field(fh, byte_offset, ulag%lf(i)%x, nel)
764 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
767 do i = 1, vlag%size()
768 byte_offset = mpi_offset + &
769 dof_offset * int(mpi_real_prec_size, i8)
770 call this%read_field(fh, byte_offset, vlag%lf(i)%x, nel)
771 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
774 do i = 1, wlag%size()
775 byte_offset = mpi_offset + &
776 dof_offset * int(mpi_real_prec_size, i8)
777 call this%read_field(fh, byte_offset, wlag%lf(i)%x, nel)
778 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
782 if (read_scalar)
then
783 byte_offset = mpi_offset + &
784 dof_offset * int(mpi_real_prec_size, i8)
785 call this%read_field(fh, byte_offset, s%x, nel)
786 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
789 if (read_dtlag .and. have_dtlag .eq. 1)
then
790 call mpi_file_read_at_all(fh, mpi_offset, tlag, 10, &
791 mpi_real_precision, status, ierr)
792 mpi_offset = mpi_offset + 10_i8 * int(mpi_real_prec_size, i8)
793 call mpi_file_read_at_all(fh, mpi_offset, dtlag, 10, &
794 mpi_real_precision, status, ierr)
795 mpi_offset = mpi_offset + 10_i8 * int(mpi_real_prec_size, i8)
798 if (read_abvel .and. have_abvel .eq. 1)
then
799 byte_offset = mpi_offset + &
800 dof_offset * int(mpi_real_prec_size, i8)
801 call this%read_field(fh, byte_offset, abx1%x, nel)
802 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
803 byte_offset = mpi_offset + &
804 dof_offset * int(mpi_real_prec_size, i8)
805 call this%read_field(fh, byte_offset, abx2%x, nel)
806 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
807 byte_offset = mpi_offset + &
808 dof_offset * int(mpi_real_prec_size, i8)
809 call this%read_field(fh, byte_offset, aby1%x, nel)
810 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
811 byte_offset = mpi_offset + &
812 dof_offset * int(mpi_real_prec_size, i8)
813 call this%read_field(fh, byte_offset, aby2%x, nel)
814 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
815 byte_offset = mpi_offset + &
816 dof_offset * int(mpi_real_prec_size, i8)
817 call this%read_field(fh, byte_offset, abz1%x, nel)
818 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
819 byte_offset = mpi_offset + &
820 dof_offset * int(mpi_real_prec_size, i8)
821 call this%read_field(fh, byte_offset, abz2%x, nel)
822 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
824 if (read_scalarlag .and. have_scalarlag .eq. 1)
then
825 do i = 1, slag%size()
826 byte_offset = mpi_offset + &
827 dof_offset * int(mpi_real_prec_size, i8)
828 call this%read_field(fh, byte_offset, slag%lf(i)%x, nel)
829 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
831 byte_offset = mpi_offset + &
832 dof_offset * int(mpi_real_prec_size, i8)
833 call this%read_field(fh, byte_offset, abs1%x, nel)
834 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
835 byte_offset = mpi_offset + &
836 dof_offset * int(mpi_real_prec_size, i8)
837 call this%read_field(fh, byte_offset, abs2%x, nel)
838 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
841 if (read_ale .and. have_ale .eq. 1)
then
843 byte_offset = mpi_offset + &
844 dof_offset * int(mpi_real_prec_size, i8)
845 call this%read_field(fh, byte_offset, msh_x, nel)
846 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
848 byte_offset = mpi_offset + &
849 dof_offset * int(mpi_real_prec_size, i8)
850 call this%read_field(fh, byte_offset, msh_y, nel)
851 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
853 byte_offset = mpi_offset + &
854 dof_offset * int(mpi_real_prec_size, i8)
855 call this%read_field(fh, byte_offset, msh_z, nel)
856 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
858 byte_offset = mpi_offset + &
859 dof_offset * int(mpi_real_prec_size, i8)
860 call this%read_field(fh, byte_offset, wm_x%x, nel)
861 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
863 byte_offset = mpi_offset + &
864 dof_offset * int(mpi_real_prec_size, i8)
865 call this%read_field(fh, byte_offset, wm_y%x, nel)
866 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
868 byte_offset = mpi_offset + &
869 dof_offset * int(mpi_real_prec_size, i8)
870 call this%read_field(fh, byte_offset, wm_z%x, nel)
871 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
873 do i = 1, wm_x_lag%size()
874 byte_offset = mpi_offset + &
875 dof_offset * int(mpi_real_prec_size, i8)
876 call this%read_field(fh, byte_offset, wm_x_lag%lf(i)%x, nel)
877 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
879 do i = 1, wm_y_lag%size()
880 byte_offset = mpi_offset + &
881 dof_offset * int(mpi_real_prec_size, i8)
882 call this%read_field(fh, byte_offset, wm_y_lag%lf(i)%x, nel)
883 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
885 do i = 1, wm_z_lag%size()
886 byte_offset = mpi_offset + &
887 dof_offset * int(mpi_real_prec_size, i8)
888 call this%read_field(fh, byte_offset, wm_z_lag%lf(i)%x, nel)
889 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
891 byte_offset = mpi_offset + &
892 dof_offset * int(mpi_real_prec_size, i8)
893 call this%read_field(fh, byte_offset, blag, nel)
894 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
896 byte_offset = mpi_offset + &
897 dof_offset * int(mpi_real_prec_size, i8)
898 call this%read_field(fh, byte_offset, blaglag, nel)
899 mpi_offset = mpi_offset + n_glb_dofs * int(mpi_real_prec_size, i8)
901 call mpi_file_read_at_all(fh, mpi_offset, pivot_pos, &
902 size(pivot_pos), mpi_real_precision, status, ierr)
903 mpi_offset = mpi_offset + int(
size(pivot_pos), i8) &
904 * int(mpi_real_prec_size, i8)
906 call mpi_file_read_at_all(fh, mpi_offset, pivot_vel_lag, &
907 size(pivot_vel_lag), mpi_real_precision, status, ierr)
908 mpi_offset = mpi_offset + int(
size(pivot_vel_lag), i8) &
909 * int(mpi_real_prec_size, i8)
911 call mpi_file_read_at_all(fh, mpi_offset, basis_pos, &
912 size(basis_pos), mpi_real_precision, status, ierr)
913 mpi_offset = mpi_offset + &
914 int(
size(basis_pos), i8) * int(mpi_real_prec_size, i8)
916 call mpi_file_read_at_all(fh, mpi_offset, basis_vel_lag, &
917 size(basis_vel_lag), mpi_real_precision, status, ierr)
918 mpi_offset = mpi_offset + &
919 int(
size(basis_vel_lag), i8) * int(mpi_real_prec_size, i8)
923 call mpi_file_close(fh, ierr)
925 if (ierr .ne. mpi_success)
then
926 call neko_error(
'Error reading checkpoint file ' // trim(fname))
929 call this%global_interp%free()
930 call this%space_interp%free()