37 use json_module,
only: json_file
39 use num_types,
only: rp
40 use vector,
only: vector_t
41 use utils,
only: neko_error, filename_suffix
42 use comm,
only: neko_comm
43 use mpi_f08,
only: mpi_allreduce, mpi_integer, mpi_sum
56 character(len=:),
allocatable :: name
61 integer :: n_global = 0
78 procedure, pass(this) :: init_from_json_sim => design_init_from_json_sim
88 procedure, pass(this) :: init_from_json => design_init_from_json
91 procedure(design_free),
public, pass(this),
deferred :: free
94 procedure(design_get_values),
public, pass(this),
deferred :: get_values
96 generic :: get_x => design_get_x
97 generic :: x => design_get_x_i
99 generic :: get_y => design_get_y
100 generic :: y => design_get_y_i
102 generic :: get_z => design_get_z
103 generic :: z => design_get_z_i
106 procedure(design_update_design),
public, pass(this),
deferred :: &
110 procedure(design_map_forward),
public, pass(this),
deferred :: &
113 procedure(design_map_backward),
public, pass(this),
deferred :: &
116 procedure(design_write),
public, pass(this),
deferred :: write
119 procedure,
public, pass(this) :: save_checkpoint => design_save_checkpoint
121 procedure,
public, pass(this) :: load_checkpoint => design_load_checkpoint
123 procedure,
public, pass(this) :: set_output_counter => &
124 design_set_output_counter
129 procedure, pass(this) :: init_base => design_init_base
131 procedure, pass(this) :: free_base => design_free_base
134 procedure,
public, pass(this) :: get_name => design_get_name
136 procedure,
public, pass(this) :: size => design_size
138 procedure,
public, pass(this) :: size_global => design_size_global
141 procedure, pass(this) :: design_get_x
143 procedure, pass(this) :: design_get_x_i
145 procedure, pass(this) :: design_get_y
147 procedure, pass(this) :: design_get_y_i
149 procedure, pass(this) :: design_get_z
151 procedure, pass(this) :: design_get_z_i
168 module subroutine design_factory(object, parameters, simulation)
169 class(design_t),
allocatable,
intent(inout) :: object
170 type(json_file),
intent(inout) :: parameters
171 type(simulation_t),
intent(inout),
optional :: simulation
172 end subroutine design_factory
173 end interface design_factory
179 subroutine design_free(this)
181 class(design_t),
intent(inout) :: this
182 end subroutine design_free
184 subroutine design_get_values(this, values)
185 import design_t, vector_t
186 class(design_t),
intent(in) :: this
187 type(vector_t),
intent(inout) :: values
188 end subroutine design_get_values
190 subroutine design_update_design(this, values)
191 import design_t, vector_t
192 class(design_t),
intent(inout) :: this
193 type(vector_t),
intent(inout) :: values
194 end subroutine design_update_design
196 subroutine design_map_forward(this)
198 class(design_t),
intent(inout) :: this
199 end subroutine design_map_forward
201 subroutine design_map_backward(this, sensitivity)
202 import design_t, vector_t
203 class(design_t),
intent(inout) :: this
204 type(vector_t),
intent(in) :: sensitivity
205 end subroutine design_map_backward
207 subroutine design_write(this, idx)
209 class(design_t),
intent(inout) :: this
210 integer,
intent(in) :: idx
211 end subroutine design_write
213 subroutine set_output_counter(this, idx)
215 class(design_t),
intent(inout) :: this
216 integer,
intent(in) :: idx
217 end subroutine set_output_counter
224 module subroutine design_save_checkpoint_hdf5(this, filename, overwrite)
225 class(design_t),
intent(in) :: this
226 character(len=*),
intent(in) :: filename
227 logical,
intent(in),
optional :: overwrite
228 end subroutine design_save_checkpoint_hdf5
230 module subroutine design_load_checkpoint_hdf5(this, filename)
231 class(design_t),
intent(inout) :: this
232 character(len=*),
intent(in) :: filename
233 end subroutine design_load_checkpoint_hdf5
236 public :: design_t, design_factory
246 subroutine design_init_from_json(this, parameters)
247 class(design_t),
intent(inout) :: this
248 type(json_file),
intent(inout) :: parameters
250 call neko_error(
"Design type does not support initialization " // &
251 "without simulation")
252 end subroutine design_init_from_json
258 subroutine design_init_from_json_sim(this, parameters, simulation)
259 class(design_t),
intent(inout) :: this
260 type(json_file),
intent(inout) :: parameters
261 type(simulation_t),
intent(inout) :: simulation
263 call neko_error(
"Design type does not support initialization " // &
265 end subroutine design_init_from_json_sim
271 subroutine design_init_base(this, name, n)
272 class(design_t),
intent(inout) :: this
273 character(len=*),
intent(in) :: name
274 integer,
intent(in) :: n
279 call mpi_allreduce(n, this%n_global, 1, mpi_integer, mpi_sum, &
281 end subroutine design_init_base
285 subroutine design_free_base(this)
286 class(design_t),
intent(inout) :: this
290 end subroutine design_free_base
299 subroutine design_save_checkpoint(this, filename, overwrite)
300 class(design_t),
intent(in) :: this
301 character(len=*),
intent(in) :: filename
302 logical,
intent(in),
optional :: overwrite
303 character(len=12) :: file_ext
306 call filename_suffix(filename, file_ext)
308 select case (trim(file_ext))
309 case (
'h5',
'hdf5',
'hf5')
310 call design_save_checkpoint_hdf5(this, filename, overwrite)
312 call neko_error(
'design_save_checkpoint: Unsupported file format: ' // &
316 end subroutine design_save_checkpoint
321 subroutine design_load_checkpoint(this, filename)
322 class(design_t),
intent(inout) :: this
323 character(len=*),
intent(in) :: filename
324 character(len=12) :: file_ext
327 call filename_suffix(filename, file_ext)
329 select case (trim(file_ext))
330 case (
'h5',
'hdf5',
'hf5')
331 call design_load_checkpoint_hdf5(this, filename)
333 call neko_error(
'design_load_checkpoint: Unsupported file format: ' // &
337 end subroutine design_load_checkpoint
341 subroutine design_set_output_counter(this, idx)
342 class(design_t),
intent(inout) :: this
343 integer,
intent(in) :: idx
345 end subroutine design_set_output_counter
353 function design_get_name(this)
result(name)
354 class(design_t),
intent(in) :: this
355 character(len=:),
allocatable :: name
357 end function design_get_name
362 pure function design_size(this)
result(n)
363 class(design_t),
intent(in) :: this
366 end function design_size
369 pure function design_size_global(this)
result(n)
370 class(design_t),
intent(in) :: this
373 end function design_size_global
375 subroutine design_get_x(this, x)
376 class(design_t),
intent(in) :: this
377 type(vector_t),
intent(inout) :: x
378 call neko_error(
"Design type does not support x retrieval")
379 end subroutine design_get_x
381 function design_get_x_i(this, i)
result(x_i)
382 class(design_t),
intent(in) :: this
383 integer,
intent(in) :: i
386 call neko_error(
"Design type does not support x retrieval")
387 end function design_get_x_i
389 subroutine design_get_y(this, y)
390 class(design_t),
intent(in) :: this
391 type(vector_t),
intent(inout) :: y
392 call neko_error(
"Design type does not support y retrieval")
393 end subroutine design_get_y
395 function design_get_y_i(this, i)
result(y_i)
396 class(design_t),
intent(in) :: this
397 integer,
intent(in) :: i
400 call neko_error(
"Design type does not support y retrieval")
401 end function design_get_y_i
403 subroutine design_get_z(this, z)
404 class(design_t),
intent(in) :: this
405 type(vector_t),
intent(inout) :: z
406 call neko_error(
"Design type does not support z retrieval")
407 end subroutine design_get_z
409 function design_get_z_i(this, i)
result(z_i)
410 class(design_t),
intent(in) :: this
411 integer,
intent(in) :: i
414 call neko_error(
"Design type does not support z retrieval")
415 end function design_get_z_i
421 module subroutine design_save_checkpoint_hdf5(this, filename, overwrite)
422 class(design_t),
intent(in) :: this
423 character(len=*),
intent(in) :: filename
424 logical,
intent(in),
optional :: overwrite
425 call neko_error(
'design: HDF5 support not enabled rebuild with HAVE_HDF5')
426 end subroutine design_save_checkpoint_hdf5
428 module subroutine design_load_checkpoint_hdf5(this, filename)
429 class(design_t),
intent(inout) :: this
430 character(len=*),
intent(in) :: filename
431 call neko_error(
'design: HDF5 support not enabled rebuild with HAVE_HDF5')
432 end subroutine design_load_checkpoint_hdf5
Factory function for the design object.
Implements the steady_problem_t type.