64 path, fmt, layout, always_write_mesh)
66 integer,
intent(inout) :: precision
68 class(
scalars_t),
intent(in),
optional,
target :: scalar_fields
69 character(len=*),
intent(in),
optional :: name
70 character(len=*),
intent(in),
optional :: path
71 character(len=*),
intent(in),
optional :: fmt
72 logical,
intent(in),
optional :: always_write_mesh
73 integer,
intent(in),
optional :: layout
74 character(len=1024) :: fname
75 integer :: i, j, n_scalars
76 character(len=10) :: suffix
77 logical :: has_max_wave_speed, has_density
78 type(
field_t),
pointer :: max_wave_speed_field
81 if (
present(fmt))
then
82 if (fmt .eq.
'adios2')
then
87 if (
present(always_write_mesh))
then
88 this%always_write_mesh = always_write_mesh
91 if (
present(name) .and.
present(path))
then
92 fname = trim(path) // trim(name) // trim(suffix)
93 else if (
present(name))
then
94 fname = trim(name) // trim(suffix)
95 else if (
present(path))
then
96 fname = trim(path) //
'field' // trim(suffix)
98 fname =
'field' // trim(suffix)
101 if (
present(layout))
then
102 call this%init_base(fname, precision, layout)
104 call this%init_base(fname, precision)
109 if (
present(scalar_fields))
then
110 n_scalars =
size(scalar_fields%scalar_fields)
114 has_max_wave_speed =
neko_registry%field_exists(
"max_wave_speed")
121 has_density =
associated(fluid%rho)
123 has_density = .false.
132 if (has_density)
then
136 if (has_max_wave_speed)
then
140 call this%fluid%init(i + n_scalars)
142 call this%fluid%assign(1, fluid%p)
143 call this%fluid%assign(2, fluid%u)
144 call this%fluid%assign(3, fluid%v)
145 call this%fluid%assign(4, fluid%w)
149 if (
present(scalar_fields))
then
152 call this%fluid%assign(i, scalar_fields%scalar_fields(j)%s)
157 if (has_density)
then
159 call this%fluid%assign(i, fluid%rho)
163 if (has_max_wave_speed)
then
165 max_wave_speed_field =>
neko_registry%get_field(
"max_wave_speed")
166 call this%fluid%assign(i, max_wave_speed_field)
183 real(kind=
rp),
intent(in) :: t
188 associate(fields => this%fluid%items)
189 do i = 1,
size(fields)
192 sync = (i .eq.
size(fields)))
198 select type (ft => this%file_%file_type)
201 ft%write_mesh = this%always_write_mesh
202 call ft%write(this%fluid, t)
204 call ft%write(this%fluid, t)
subroutine fluid_output_init(this, precision, fluid, scalar_fields, name, path, fmt, layout, always_write_mesh)