Neko-TOP
A portable framework for high-order spectral element flow toplogy optimization.
Loading...
Searching...
No Matches
steepest_descent_optimizer::steepest_descent_optimizer_t Type Referenceabstract

Steepest descent optimizer with move limits. More...

Inheritance diagram for steepest_descent_optimizer::steepest_descent_optimizer_t:
Collaboration diagram for steepest_descent_optimizer::steepest_descent_optimizer_t:

Public Member Functions

procedure, pass(this) init_from_json (this, parameters, problem, design, simulation)
 Initialise the steepest descent optimizer from the case file.
 
procedure, pass(this) free (this)
 Free the steepest descent optimizer.
 
procedure, pass(this) initialize (this, problem, design, simulation)
 Evaluate the problem and its sensitivity at the starting design.
 
procedure, pass(this) step (this, iter, problem, design, simulation)
 Take one steepest descent step and re-evaluate the problem.
 
procedure, pass(this) validate (this, problem, design)
 Validate the final design.
 
procedure, pass(this) write (this, iter, problem)
 Write the progress of the optimizer to the log file.
 
procedure, pass(this) save_checkpoint_components (this, filename, overwrite)
 Save the steepest descent state to a checkpoint.
 
procedure, pass(this) load_checkpoint_components (this, filename)
 Restore the steepest descent state from a checkpoint.
 
procedure(optimizer_init_from_json), deferred, pass, public init_from_json (this, parameters, problem, design, simulation)
 Initialize the optimizer, associate it with a specific problem.
 
procedure(optimizer_free), deferred, pass, public free (this)
 Free resources.
 
procedure(optimizer_initialize), deferred, pass, public initialize (this, problem, design, simulation)
 Prepare the optimizer before starting the optimization loop.
 
procedure(optimizer_step), deferred, pass, public step (this, iter, problem, design, simulation)
 Perform a single optimization step.
 
procedure(optimizer_validate), deferred, pass, public validate (this, problem, design)
 Validate the solution.
 
procedure(optimizer_write), deferred, pass, public write (this, iter, problem)
 Write the progress of the optimizer to the log file.
 
procedure(optimizer_save_checkpoint_components), deferred, pass save_checkpoint_components (this, filename, overwrite)
 Save optimizer-specific components to checkpoint.
 
procedure(optimizer_load_checkpoint_components), deferred, pass load_checkpoint_components (this, filename)
 Load optimizer-specific components from checkpoint.
 
procedure, pass(this) save_checkpoint (this, design, overwrite, filename, path, basename, format, iteration)
 Save a checkpoint of the optimizer state.
 
procedure, pass(this) load_checkpoint (this, design, filename, path, basename, format, iteration)
 Restore the optimizer state from a checkpoint.
 
procedure, pass, public run (this, problem, design, simulation)
 Run the optimization loop.
 
procedure, pass(this) init_base (this, optimizer_type, max_iterations, max_runtime, stop_design_change, restart_file, checkpoint_path, checkpoint_base, checkpoint_format, checkpoint_interval, checkpoint_overwrite)
 The base initializer.
 
procedure, pass(this) free_base (this)
 Free base resources.
 
procedure, pass(this) read_base_settings (this, solver_params)
 Read settings from JSON parameters file.
 
procedure, pass(this) get_iteration (this)
 Return the current iteration number.
 
procedure, pass(this) print_status (this, stop_flag, iteration)
 Print status message.
 
procedure, pass(this) out_of_time (this, step_time)
 Estimate if we are out of time.
 
procedure, pass(this) init_log (this, problem, extra_headers, include_constraints, filename)
 Initialize optimization log.
 
procedure, pass(this) write_log (this, iter, problem, extra_values)
 Write optimization log entry.
 

Public Attributes

real(kind=rp), public max_design_change = 0.0_rp
 The maximum observed design change.
 
real(kind=rp), public norm2_design_change = 0.0_rp
 The L2 norm of the design change.
 

Detailed Description

Definition at line 83 of file steepest_descent_optimizer.f90.

Member Function/Subroutine Documentation

◆ free() [1/2]

procedure(optimizer_free), deferred, pass, public optimizer::optimizer_t::free ( class(optimizer_t), intent(inout)  this)
pure virtualinherited

Definition at line 117 of file optimizer.f90.

◆ free() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::free ( class(steepest_descent_optimizer_t), intent(inout)  this)
Parameters
thisThe steepest descent optimizer.

Definition at line 118 of file steepest_descent_optimizer.f90.

◆ free_base()

procedure, pass(this) optimizer::optimizer_t::free_base ( class(optimizer_t), intent(inout)  this)
inherited
Parameters
thisThe optimizer object.

Definition at line 152 of file optimizer.f90.

◆ get_iteration()

procedure, pass(this) optimizer::optimizer_t::get_iteration ( class(optimizer_t), intent(in)  this)
inherited
Parameters
thisThe optimizer object.
Returns
The current iteration number.

Definition at line 156 of file optimizer.f90.

◆ init_base()

procedure, pass(this) optimizer::optimizer_t::init_base ( class(optimizer_t), intent(inout)  this,
character(len=*), intent(in)  optimizer_type,
integer, intent(in)  max_iterations,
real(kind=rp), intent(in), optional  max_runtime,
real(kind=rp), intent(in), optional  stop_design_change,
character(len=*), intent(in), optional  restart_file,
character(len=*), intent(in), optional  checkpoint_path,
character(len=*), intent(in), optional  checkpoint_base,
character(len=*), intent(in), optional  checkpoint_format,
integer, intent(in), optional  checkpoint_interval,
logical, intent(in), optional  checkpoint_overwrite 
)
inherited

Interface for reading a checkpoint Base initializer for the optimizer

Parameters
thisThe optimizer object.
optimizer_typeThe type of the optimizer.
max_iterationsThe maximum number of iterations.
max_runtimeThe maximum runtime in seconds.
stop_design_changeThe stopping criteria for design change.
restart_fileThe checkpoint file to restart from.
checkpoint_pathThe path for saving checkpoint files.
checkpoint_baseThe base name for checkpoint files.
checkpoint_formatThe file format for checkpoint files.
checkpoint_intervalThe interval for saving checkpoints in iterations.
checkpoint_overwriteWhether to overwrite existing checkpoint files.

Definition at line 150 of file optimizer.f90.

◆ init_from_json() [1/2]

procedure(optimizer_init_from_json), deferred, pass, public optimizer::optimizer_t::init_from_json ( class(optimizer_t), intent(inout)  this,
type(json_file), intent(inout)  parameters,
class(problem_t), intent(inout)  problem,
class(design_t), intent(in)  design,
type(simulation_t), intent(in), optional  simulation 
)
pure virtualinherited

Definition at line 114 of file optimizer.f90.

◆ init_from_json() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::init_from_json ( class(steepest_descent_optimizer_t), intent(inout)  this,
type(json_file), intent(inout)  parameters,
class(problem_t), intent(inout)  problem,
class(design_t), intent(in)  design,
type(simulation_t), intent(in), optional  simulation 
)

Reads optimization.solver and its steepest_descent object. The base settings are read after free, which resets them, and before init_base, which keeps them.

Parameters
thisThe steepest descent optimizer.
parametersThe JSON case file.
problemThe problem to optimise, which must have no constraints.
designThe design whose values start the optimisation.
simulationThe simulation, unused.

Definition at line 117 of file steepest_descent_optimizer.f90.

◆ init_log()

procedure, pass(this) optimizer::optimizer_t::init_log ( class(optimizer_t), intent(inout)  this,
class(problem_t), intent(in)  problem,
character(len=*), dimension(:), intent(in), optional  extra_headers,
logical, intent(in), optional  include_constraints,
character(len=*), intent(in), optional  filename 
)
inherited
Parameters
[in,out]thisThe optimizer object.
[in]problemThe problem object.
[in]extra_headersHeader labels for extra log entries.
[in]include_constraintsInclude constraints in the log.
[in]filenameOutput filename for the log.
Note
An optimizer at iteration 0 overwrites the target log file and writes a fresh header. Otherwise, logging appends to the existing file.

Definition at line 162 of file optimizer.f90.

◆ initialize() [1/2]

procedure(optimizer_initialize), deferred, pass, public optimizer::optimizer_t::initialize ( class(optimizer_t), intent(inout)  this,
class(problem_t), intent(inout)  problem,
class(design_t), intent(inout)  design,
type(simulation_t), intent(inout), optional  simulation 
)
pure virtualinherited

Definition at line 120 of file optimizer.f90.

◆ initialize() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::initialize ( class(steepest_descent_optimizer_t), intent(inout)  this,
class(problem_t), intent(inout)  problem,
class(design_t), intent(inout)  design,
type(simulation_t), intent(inout), optional  simulation 
)
Parameters
thisThe steepest descent optimizer.
problemThe problem to optimise.
designThe design.
simulationThe simulation, if any.

Definition at line 119 of file steepest_descent_optimizer.f90.

◆ load_checkpoint()

procedure, pass(this) optimizer::optimizer_t::load_checkpoint ( class(optimizer_t), intent(inout)  this,
class(design_t), intent(inout)  design,
character(len=*), intent(in), optional  filename,
character(len=*), intent(in), optional  path,
character(len=*), intent(in), optional  basename,
character(len=*), intent(in), optional  format,
integer, intent(in), optional  iteration 
)
inherited
Parameters
thisThe optimizer object.
filenameThe name of the file to load the checkpoint from.
designThe design object.
pathThe path where the checkpoint file is located.
basenameThe base name of the file to load the checkpoint from.
formatThe file format to use for the checkpoint file.
iterationThe iteration to load.

Definition at line 138 of file optimizer.f90.

◆ load_checkpoint_components() [1/2]

procedure(optimizer_load_checkpoint_components), deferred, pass optimizer::optimizer_t::load_checkpoint_components ( class(optimizer_t), intent(inout)  this,
character(len=*), intent(in)  filename 
)
pure virtualinherited

Definition at line 132 of file optimizer.f90.

◆ load_checkpoint_components() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::load_checkpoint_components ( class(steepest_descent_optimizer_t), intent(inout)  this,
character(len=*), intent(in)  filename 
)
Parameters
thisThe steepest descent optimizer.
filenameThe checkpoint file.

Definition at line 126 of file steepest_descent_optimizer.f90.

◆ out_of_time()

procedure, pass(this) optimizer::optimizer_t::out_of_time ( class(optimizer_t), intent(inout)  this,
real(kind=rp), intent(in)  step_time 
)
inherited
Parameters
thisThe optimizer object.
step_timeThe time taken for the latest iteration.
Returns
out_of_time Logical indicating if we are out of time.

Definition at line 160 of file optimizer.f90.

◆ print_status()

procedure, pass(this) optimizer::optimizer_t::print_status ( class(optimizer_t), intent(in)  this,
integer, intent(in)  stop_flag,
integer, intent(in)  iteration 
)
inherited
Parameters
thisThe optimizer object.
stop_flagThe stopping flag.
iterationThe number of iterations performed.

Definition at line 158 of file optimizer.f90.

◆ read_base_settings()

procedure, pass(this) optimizer::optimizer_t::read_base_settings ( class(optimizer_t), intent(inout)  this,
type(json_file), intent(inout)  solver_params 
)
inherited
Parameters
thisThe optimizer object.
solver_paramsThe JSON file containing the optimizer parameters.

Definition at line 154 of file optimizer.f90.

◆ run()

procedure, pass, public optimizer::optimizer_t::run ( class(optimizer_t), intent(inout)  this,
class(problem_t), intent(inout)  problem,
class(design_t), intent(inout)  design,
type(simulation_t), intent(inout), optional  simulation 
)
inherited

The optimization loop can be terminated based on a maximum runtime. In this case, a cumulative average is used to determine if the next iteration would exceed the maximum runtime.

When restarting from a checkpoint, the continuation parameters are set to their values at the checkpointed iteration before the problem is re-evaluated.

Parameters
thisThe optimizer object.
problemThe problem object.
designThe design object.
simulationThe simulation object.

Definition at line 144 of file optimizer.f90.

◆ save_checkpoint()

procedure, pass(this) optimizer::optimizer_t::save_checkpoint ( class(optimizer_t), intent(inout)  this,
class(design_t), intent(inout)  design,
logical, intent(in), optional  overwrite,
character(len=*), intent(in), optional  filename,
character(len=*), intent(in), optional  path,
character(len=*), intent(in), optional  basename,
character(len=*), intent(in), optional  format,
integer, intent(in), optional  iteration 
)
inherited
Parameters
thisThe optimizer object.
designThe design object.
overwriteWhether to overwrite the file if it exists.
filenameThe name of the file to save the checkpoint to.
pathThe path where the checkpoint file will be saved.
basenameThe base name of the file to save the checkpoint.
formatThe file format to use for the checkpoint file.
iterationThe iteration used to construct the checkpoint filename.

Definition at line 136 of file optimizer.f90.

◆ save_checkpoint_components() [1/2]

procedure(optimizer_save_checkpoint_components), deferred, pass optimizer::optimizer_t::save_checkpoint_components ( class(optimizer_t), intent(inout)  this,
character(len=*), intent(in)  filename,
logical, intent(in), optional  overwrite 
)
pure virtualinherited

Definition at line 129 of file optimizer.f90.

◆ save_checkpoint_components() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::save_checkpoint_components ( class(steepest_descent_optimizer_t), intent(inout)  this,
character(len=*), intent(in)  filename,
logical, intent(in), optional  overwrite 
)
Parameters
thisThe steepest descent optimizer.
filenameThe checkpoint file.
overwriteReplace an existing steepest descent group.

Definition at line 124 of file steepest_descent_optimizer.f90.

◆ step() [1/2]

procedure(optimizer_step), deferred, pass, public optimizer::optimizer_t::step ( class(optimizer_t), intent(inout)  this,
integer, intent(in)  iter,
class(problem_t), intent(inout)  problem,
class(design_t), intent(inout)  design,
type(simulation_t), intent(inout), optional  simulation 
)
pure virtualinherited

Definition at line 122 of file optimizer.f90.

◆ step() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::step ( class(steepest_descent_optimizer_t), intent(inout)  this,
integer, intent(in)  iter,
class(problem_t), intent(inout)  problem,
class(design_t), intent(inout)  design,
type(simulation_t), intent(inout), optional  simulation 
)

The sensitivity of the current design must be up to date on entry; it is on exit, for the updated design.

Parameters
thisThe steepest descent optimizer.
iterThe current iteration, starting from 1.
problemThe problem to optimise.
designThe design, updated in place.
simulationThe simulation, if any.
Returns
.true. only when the bound-projected gradient vanishes.

Definition at line 120 of file steepest_descent_optimizer.f90.

◆ validate() [1/2]

procedure(optimizer_validate), deferred, pass, public optimizer::optimizer_t::validate ( class(optimizer_t), intent(inout)  this,
class(problem_t), intent(in)  problem,
class(design_t), intent(in)  design 
)
pure virtualinherited

Definition at line 124 of file optimizer.f90.

◆ validate() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::validate ( class(steepest_descent_optimizer_t), intent(inout)  this,
class(problem_t), intent(in)  problem,
class(design_t), intent(in)  design 
)

Nothing to check: the update keeps the design within its box bounds by construction, and problems with constraints are rejected at initialisation.

Parameters
thisThe steepest descent optimizer.
problemThe problem.
designThe design.

Definition at line 121 of file steepest_descent_optimizer.f90.

◆ write() [1/2]

procedure(optimizer_write), deferred, pass, public optimizer::optimizer_t::write ( class(optimizer_t), intent(inout)  this,
integer, intent(in)  iter,
class(problem_t), intent(inout)  problem 
)
pure virtualinherited

Definition at line 127 of file optimizer.f90.

◆ write() [2/2]

procedure, pass(this) steepest_descent_optimizer::steepest_descent_optimizer_t::write ( class(steepest_descent_optimizer_t), intent(inout)  this,
integer, intent(in)  iter,
class(problem_t), intent(inout)  problem 
)
Parameters
thisThe steepest descent optimizer.
iterThe current iteration.
problemThe problem.

Definition at line 122 of file steepest_descent_optimizer.f90.

◆ write_log()

procedure, pass(this) optimizer::optimizer_t::write_log ( class(optimizer_t), intent(inout)  this,
integer, intent(in)  iter,
class(problem_t), intent(in)  problem,
real(kind=rp), dimension(:), intent(in), optional  extra_values 
)
inherited
Parameters
[in,out]thisThe optimizer object.
[in]iterCurrent iteration number.
[in]problemThe problem object.
[in]extra_valuesExtra log values appended after problem entries.

Definition at line 164 of file optimizer.f90.

Member Data Documentation

◆ max_design_change

real(kind=rp), public optimizer::optimizer_t::max_design_change = 0.0_rp
inherited

Definition at line 75 of file optimizer.f90.

◆ norm2_design_change

real(kind=rp), public optimizer::optimizer_t::norm2_design_change = 0.0_rp
inherited

Definition at line 77 of file optimizer.f90.


The documentation for this type was generated from the following file: