60 integer,
intent(inout) :: precision
64 class(scalar_scheme_t),
intent(in),
optional,
target :: scalar
65 character(len=*),
intent(in),
optional :: name
66 character(len=*),
intent(in),
optional :: path
68 character(len=1024) :: fname
70 if (
present(name) .and.
present(path))
then
71 fname = trim(path) // trim(name) //
'.fld'
72 else if (
present(name))
then
73 fname = trim(name) //
'.fld'
74 else if (
present(path))
then
75 fname = trim(path) //
'adjoint.fld'
80 call this%init_base(fname, precision)
82 if (
present(scalar))
then
83 call this%adjoint%init(5)
85 call this%adjoint%init(4)
88 call this%adjoint%assign(1, adjoint%p_adj)
89 call this%adjoint%assign(2, adjoint%u_adj)
90 call this%adjoint%assign(3, adjoint%v_adj)
91 call this%adjoint%assign(4, adjoint%w_adj)
93 if (
present(scalar))
then
94 call this%adjoint%assign(5, scalar%s)
102 real(kind=rp),
intent(in) :: t
105 if (neko_bcknd_device .eq. 1)
then
107 associate(fields => this%adjoint%items)
108 do i = 1,
size(fields)
109 call device_memcpy(fields(i)%ptr%x, fields(i)%ptr%x_d, &
110 fields(i)%ptr%dof%size(), device_to_host, &
111 sync = (i .eq.
size(fields)))
117 call this%file_%write(this%adjoint, t)