Personalizing HydrOpTop
Solvers are interfaced using a I/O shield, which thus allow to define cost function, constraints and filters in a reusable manner for different softwares and codes. Also, objective functions and constraints are implemented under the same class and without distinction, which means they can be interchanged effortlessly. Base classes for cost functions/constraints, material parametrizations and filters are also provided so user may define they own TO features with a minimal amount of code.
Implement your function
You can create your own constrains and pass it directly to the optimizer of
your choice. However, if you want to use it in the Crafter class, each new
constrain class are required to have several methods in HydrOpTop. They are:
__need_p_cell_ids__(self)which should returnTrueif the correspondance between p and the PFLOTRAN cell ids is needed,Falsein the opposite case.__get_PFLOTRAN_output_variable_needed__(self)which return a list of the PFLOTRAN output variables needed for your new class operation. Variable should be orthographied as in OUTPUT card.set_inputs(self, inputs)TODOset_p_cell_ids(self, cell_ids)set_filter(self, filter)
The following method is required by the nlopt library:
evaluate(self, p, grad)wherepandgradare the argument passed bynloptoptimizer.pis the material density parameter in the region to optimize and grad the gradient of the constrain w.r.t.p. This function should return the constrain value and the its derivative w.r.t. the density parameterp.
A template is provided in HydrOpTop/Constrains folder.
Developper’s notes
To create your own function, you could copy some of implemented function in HydrOpTop. Below is some tip and decription of the variable used.
self.p_idsis the correspondance between the parametrized cell and the cell id in PFLOTRAN simulation. It is passed at the function by the Crafter usingset_p_to_cell_ids()method. For example,self.p_ids[1]=22mean the second parametrized cell in HydrOpTop is the cell id 22 in PFLOTRANself.ids_pis the previous variable, i.e. the correspondance between the cell id in PFLOTRAN and the parametrized cell in HydrOpTop. For example,self.ids_p[55]=8means the cell id 56 in PFLOTRAN is parametrized by the cell