- costName of the cost variable.
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Name of the cost variable.
- cost_density_sensitivityName of the cost density sensitivity variable.
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Name of the cost density sensitivity variable.
- cost_fractionCost fraction.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Cost fraction.
- density_sensitivityName of the density_sensitivity variable.
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Name of the density_sensitivity variable.
- design_densityDesign density variable name.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Design density variable name.
- volume_fractionVolume fraction.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Volume fraction.
Density Update for Multimaterial Topology Optimization
Compute updated densities based on sensitivities using an optimality criteria method to keep the volume and cost constraints satisified.
Description
The DensityUpdateTwoConstraints
class is an ElementUserObject
that calculates and updates the design densities based on the filtered cost and compliance sensitivities. The density update is performed using the multi-material Solid Isotropic Material with Penalization (SIMP) method (see Zuo and Saitou (2017)). The class requires the design density variable, the filtered design density variable, the density sensitivity variable, the penalty power, the volume fraction, the cost fraction, the cost variable, and the cost sensitivity variable as inputs.
Example Input File
An example of how to use the DensityUpdateTwoConstraints
class in an input file:
listing test/tests/materials/compliance_sensitivity/2d_mmb_2material_cost_initial.i block=UserObjects/update
Input Parameters
- adaptive_moveFalseWhether incremental moves in the bisection algorithm will be reduced as the number of iterations increases. Note that the time must correspond to iteration number for better results.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether incremental moves in the bisection algorithm will be reduced as the number of iterations increases. Note that the time must correspond to iteration number for better results.
- bisection_lower_bound0Lower bound for the bisection algorithm.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Lower bound for the bisection algorithm.
- bisection_move0.01Bisection move for the updated solution.
Default:0.01
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Bisection move for the updated solution.
- bisection_upper_bound1e+16Upper bound for the bisection algorithm.
Default:1e+16
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Upper bound for the bisection algorithm.
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Unit:(no unit assumed)
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- relative_tolerance0.001Relative tolerance on both compliance and cost to end the bisection method.
Default:0.001
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Relative tolerance on both compliance and cost to end the bisection method.
- thermal_sensitivityName of the thermal density sensitivity variable.
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Name of the thermal density sensitivity variable.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
- use_thermal_complianceFalseWhether to include the thermal compliance in the sensitivities to minimize in conjunction with stiffness compliance.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether to include the thermal compliance in the sensitivities to minimize in conjunction with stiffness compliance.
- weight_mechanical_thermalList of values between 0 and 1 to weight the stiffness and thermal sensitivities
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:List of values between 0 and 1 to weight the stiffness and thermal sensitivities
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Unit:(no unit assumed)
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
Input Files
- (modules/combined/test/tests/optimization/compliance_sensitivity/thermal_test.i)
- (modules/combined/test/tests/optimization/compliance_sensitivity/three_materials_thermal.i)
- (modules/combined/test/tests/optimization/compliance_sensitivity/2d_mmb_2material_cost_initial.i)
- (modules/combined/examples/optimization/three_materials.i)
- (modules/combined/test/tests/optimization/compliance_sensitivity/paper_three_materials_test.i)
- (modules/optimization/test/tests/simp/2d_twoconstraints.i)
References
- Wenjie Zuo and Kazuhiro Saitou.
Multi-material topology optimization using ordered simp interpolation.
Structural and Multidisciplinary Optimization, 55:477–491, 2017.[BibTeX]