https://mooseframework.inl.gov
DensityUpdate.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "ElementUserObject.h"
13 #include "MooseTypes.h"
14 
20 {
21 public:
23 
25 
26  virtual void initialize() override{};
27  virtual void timestepSetup() override;
28  virtual void execute() override;
29  virtual void finalize() override{};
30  virtual void threadJoin(const UserObject &) override{};
31 
32 protected:
34  const MooseMesh & _mesh;
36  const VariableName _design_density_name;
38  const VariableName _density_sensitivity_name;
45 
46 private:
47  struct ElementData
48  {
53  ElementData() = default;
54  ElementData(Real dens, Real sens, Real vol, Real filt_dens)
55  : old_density(dens), sensitivity(sens), volume(vol), new_density(filt_dens)
56  {
57  }
58  };
59 
63  void gatherElementData();
64 
68  void performOptimCritLoop();
69 
70  Real computeUpdatedDensity(Real current_density, Real dc, Real lmid);
71 
74 
76  std::map<dof_id_type, ElementData> _elem_data_map;
77 
82 };
const Real _upper_bound
Upper bound for bisection algorithm.
Definition: DensityUpdate.h:81
Real computeUpdatedDensity(Real current_density, Real dc, Real lmid)
Real _total_allowable_volume
Total volume allowed for volume contraint.
Definition: DensityUpdate.h:73
const Real _volume_fraction
The volume fraction to be enforced.
Definition: DensityUpdate.h:44
virtual void threadJoin(const UserObject &) override
Definition: DensityUpdate.h:30
const VariableName _design_density_name
The name of the pseudo-density variable.
Definition: DensityUpdate.h:36
Element user object that performs SIMP optimization using a bisection algorithm using a volume constr...
Definition: DensityUpdate.h:19
const Real _lower_bound
Lower bound for bisection algorithm.
Definition: DensityUpdate.h:79
const VariableName _density_sensitivity_name
The elasticity compliance sensitivity name.
Definition: DensityUpdate.h:38
void gatherElementData()
Gathers element date necessary to perform the bisection algorithm for optimization.
Definition: DensityUpdate.C:71
virtual void initialize() override
Definition: DensityUpdate.h:26
MooseWritableVariable * _design_density
The pseudo-density variable.
Definition: DensityUpdate.h:40
virtual void execute() override
Definition: DensityUpdate.C:53
const MooseWritableVariable * _density_sensitivity
The filtered density sensitivity variable.
Definition: DensityUpdate.h:42
ElementData(Real dens, Real sens, Real vol, Real filt_dens)
Definition: DensityUpdate.h:54
static InputParameters validParams()
Definition: DensityUpdate.C:16
virtual void timestepSetup() override
Definition: DensityUpdate.C:46
void performOptimCritLoop()
Performs the optimality criterion loop (bisection)
Definition: DensityUpdate.C:95
virtual void finalize() override
Definition: DensityUpdate.h:29
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
DensityUpdate(const InputParameters &parameters)
Definition: DensityUpdate.C:31
const InputParameters & parameters() const
std::map< dof_id_type, ElementData > _elem_data_map
Data structure to hold old density, sensitivity, volume, current density.
Definition: DensityUpdate.h:76
const MooseMesh & _mesh
The system mesh.
Definition: DensityUpdate.h:30