35 use json_module,
only: json_file
37 use vector,
only: vector_t
38 use utils,
only: neko_error
39 use comm,
only: neko_comm
40 use mpi_f08,
only: mpi_allreduce, mpi_integer, mpi_sum
56 integer :: n_global = 0
73 procedure, pass(this) :: init_from_json_sim => design_init_from_json_sim
83 procedure, pass(this) :: init_from_json => design_init_from_json
86 procedure(design_free),
public, pass(this),
deferred :: free
89 procedure(design_get_values),
public, pass(this),
deferred :: get_values
91 procedure,
public, pass(this) :: get_x => design_get_x
93 procedure,
public, pass(this) :: get_y => design_get_y
95 procedure,
public, pass(this) :: get_z => design_get_z
98 procedure(design_update_design),
public, pass(this),
deferred :: &
102 procedure(design_map_forward),
public, pass(this),
deferred :: &
105 procedure(design_map_backward),
public, pass(this),
deferred :: &
108 procedure(design_write),
public, pass(this),
deferred :: write
114 procedure, pass(this) :: init_base => design_init_base
116 procedure, pass(this) :: free_base => design_free_base
118 procedure,
public, pass(this) :: size => design_size
120 procedure,
public, pass(this) :: size_global => design_size_global
137 module subroutine design_factory(object, parameters, simulation)
138 class(design_t),
allocatable,
intent(inout) :: object
139 type(json_file),
intent(inout) :: parameters
140 type(simulation_t),
intent(inout),
optional :: simulation
141 end subroutine design_factory
142 end interface design_factory
149 subroutine design_free(this)
151 class(design_t),
intent(inout) :: this
152 end subroutine design_free
154 function design_get_values(this)
result(values)
155 import design_t, vector_t
156 class(design_t),
intent(in) :: this
157 type(vector_t) :: values
158 end function design_get_values
160 subroutine design_update_design(this, values)
161 import design_t, vector_t
162 class(design_t),
intent(inout) :: this
163 type(vector_t),
intent(inout) :: values
164 end subroutine design_update_design
166 subroutine design_map_forward(this)
168 class(design_t),
intent(inout) :: this
169 end subroutine design_map_forward
171 subroutine design_map_backward(this, sensitivity)
172 import design_t, vector_t
173 class(design_t),
intent(inout) :: this
174 type(vector_t),
intent(in) :: sensitivity
175 end subroutine design_map_backward
177 subroutine design_write(this, idx)
179 class(design_t),
intent(inout) :: this
180 integer,
intent(in) :: idx
181 end subroutine design_write
184 public :: design_t, design_factory
190 subroutine design_init_from_json(this, parameters)
191 class(design_t),
intent(inout) :: this
192 type(json_file),
intent(inout) :: parameters
194 call neko_error(
"Design type does not support initialization " // &
195 "without simulation")
196 end subroutine design_init_from_json
202 subroutine design_init_from_json_sim(this, parameters, simulation)
203 class(design_t),
intent(inout) :: this
204 type(json_file),
intent(inout) :: parameters
205 type(simulation_t),
intent(inout) :: simulation
207 call neko_error(
"Design type does not support initialization " // &
209 end subroutine design_init_from_json_sim
214 subroutine design_init_base(this, n)
215 class(design_t),
intent(inout) :: this
216 integer,
intent(in) :: n
220 call mpi_allreduce(n, this%n_global, 1, mpi_integer, mpi_sum, &
222 end subroutine design_init_base
226 subroutine design_free_base(this)
227 class(design_t),
intent(inout) :: this
229 end subroutine design_free_base
234 pure function design_size(this)
result(n)
235 class(design_t),
intent(in) :: this
238 end function design_size
241 pure function design_size_global(this)
result(n)
242 class(design_t),
intent(in) :: this
245 end function design_size_global
247 function design_get_x(this)
result(values)
248 class(design_t),
intent(in) :: this
249 type(vector_t) :: values
250 call neko_error(
"Design type does not support x retrieval")
251 end function design_get_x
253 function design_get_y(this)
result(values)
254 class(design_t),
intent(in) :: this
255 type(vector_t) :: values
256 call neko_error(
"Design type does not support y retrieval")
257 end function design_get_y
259 function design_get_z(this)
result(values)
260 class(design_t),
intent(in) :: this
261 type(vector_t) :: values
262 call neko_error(
"Design type does not support z retrieval")
263 end function design_get_z
Factory function for the design object.
Implements the steady_problem_t type.