50 type(case_t),
intent(inout) :: neko_case
53 character(len=:),
allocatable :: string_val
54 logical :: has_scalar, freezeflow
55 type(field_t),
pointer :: u, v, w, p, s
56 type(json_file) :: json_subdict
64 u => neko_case%fluid%u
65 v => neko_case%fluid%v
66 w => neko_case%fluid%w
67 p => neko_case%fluid%p
68 if (
allocated(neko_case%scalar))
then
69 s => neko_case%scalar%s
79 neko_case%time%tlag(:) = t
80 neko_case%time%dtlag(:) = neko_case%time%dt
81 do i = 1,
size(neko_case%time%tlag)
82 neko_case%time%tlag(i) = t - i*neko_case%time%dtlag(i)
86 call neko_case%output_controller%set_counter(neko_case%time)
89 call neko_case%fluid%restart(neko_case%chkp)
90 if (
allocated(neko_case%scalar))
then
91 call neko_case%scalar%restart(neko_case%chkp)
95 do i = 1,
size(neko_case%time%dtlag)
96 call neko_case%fluid%ext_bdf%set_coeffs(neko_case%time%dtlag)
100 call neko_simcomps%restart(neko_case%time)
106 call json_get(neko_case%params, &
107 'case.fluid.initial_condition.type', string_val)
108 call json_extract_object(neko_case%params,
'case.fluid.initial_condition', &
111 if (trim(string_val) .ne.
'user')
then
112 call set_flow_ic(u, v, w, p, &
113 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
114 string_val, json_subdict)
116 call set_flow_ic(u, v, w, p, &
117 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
118 neko_case%usr%fluid_user_ic, neko_case%params)
125 call json_get_or_default(neko_case%params, &
126 'case.scalar.enabled', has_scalar, .false.)
129 call json_get(neko_case%params, &
130 'case.scalar.initial_condition.type', string_val)
131 call json_extract_object(neko_case%params, &
132 'case.scalar.initial_condition', json_subdict)
134 if (trim(string_val) .ne.
'user')
then
135 call set_scalar_ic(s, &
136 neko_case%scalar%c_Xh, neko_case%scalar%gs_Xh, &
140 call set_scalar_ic(s, &
141 neko_case%scalar%c_Xh, neko_case%scalar%gs_Xh, &
142 neko_case%usr%scalar_user_ic, &
151 call json_get_or_default(neko_case%params, &
152 'case.fluid.freeze_flow', freezeflow, .false.)
154 neko_case%fluid%freeze = freezeflow
167 type(case_t),
intent(inout) :: neko_case
168 integer,
intent(in) :: iter
170 character(len=:),
allocatable :: dirname
171 character(len=80) :: file_name
173 if (iter .ne. 1)
then
174 call reset(neko_case)
177 call json_get_or_default(neko_case%params, &
178 'case.output_directory', dirname,
'./')
180 write (file_name,
'(a,a,i5.5,a)') &
181 trim(adjustl(dirname)),
'/topopt_', iter,
'_.fld'
183 neko_case%f_out%output_t%file_%file_type%fname = trim(file_name)
184 neko_case%f_out%output_t%file_%file_type%counter = 0
185 neko_case%f_out%output_t%file_%file_type%start_counter = 0
186 call neko_case%output_controller%execute(neko_case%time, .true.)
198 type(field_t),
intent(inout) :: field
199 type(vector_t),
intent(in) :: vector
202 if (field%size() .ne. vector%size())
then
203 call neko_error(
"vector and field are not the same size")
206 if (neko_bcknd_device .eq. 1)
then
207 call device_copy(field%x_d, vector%x_d, field%size())
209 call copy(field%x, vector%x, field%size())
222 type(vector_t),
intent(inout) :: vector
223 type(field_t),
intent(in) :: field
226 if (field%size() .ne. vector%size())
then
227 call neko_error(
"vector and field are not the same size")
230 if (neko_bcknd_device .eq. 1)
then
231 call device_copy(vector%x_d, field%x_d, field%size())
233 call copy(vector%x, field%x, field%size())