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
84 else if (fmt .eq.
'vtkhdf')
then
89 if (
present(always_write_mesh))
then
90 this%always_write_mesh = always_write_mesh
93 if (
present(name) .and.
present(path))
then
94 fname = trim(path) // trim(name) // trim(suffix)
95 else if (
present(name))
then
96 fname = trim(name) // trim(suffix)
97 else if (
present(path))
then
98 fname = trim(path) //
'field' // trim(suffix)
100 fname =
'field' // trim(suffix)
103 if (
present(layout))
then
104 call this%init_base(fname, precision, layout)
106 call this%init_base(fname, precision)
111 if (
present(scalar_fields))
then
112 n_scalars =
size(scalar_fields%scalar_fields)
116 has_max_wave_speed =
neko_registry%field_exists(
"max_wave_speed")
123 has_density =
associated(fluid%rho)
125 has_density = .false.
134 if (has_density)
then
138 if (has_max_wave_speed)
then
142 call this%fluid%init(i + n_scalars)
144 call this%fluid%assign(1, fluid%p)
145 call this%fluid%assign(2, fluid%u)
146 call this%fluid%assign(3, fluid%v)
147 call this%fluid%assign(4, fluid%w)
151 if (
present(scalar_fields))
then
154 call this%fluid%assign(i, scalar_fields%scalar_fields(j)%scalar%s)
159 if (has_density)
then
161 call this%fluid%assign(i, fluid%rho)
165 if (has_max_wave_speed)
then
167 max_wave_speed_field =>
neko_registry%get_field(
"max_wave_speed")
168 call this%fluid%assign(i, max_wave_speed_field)
185 real(kind=
rp),
intent(in) :: t
190 associate(fields => this%fluid%items)
191 do i = 1,
size(fields)
194 sync = (i .eq.
size(fields)))
200 select type (ft => this%file_%file_type)
203 ft%write_mesh = this%always_write_mesh
204 call ft%write(this%fluid, t)
206 call ft%write(this%fluid, t)
subroutine fluid_output_init(this, precision, fluid, scalar_fields, name, path, fmt, layout, always_write_mesh)