www.mooseframework.org
Public Member Functions | Private Attributes | List of all members
DisplacementGradientsAction Class Reference

Automatically generates all variables, Kernels, and Materials to ensure the correct derivatives of the elastic free energy in a non-split Cahn-Hilliard simulation are assembled. More...

#include <DisplacementGradientsAction.h>

Inheritance diagram for DisplacementGradientsAction:
[legend]

Public Member Functions

 DisplacementGradientsAction (const InputParameters &params)
 
virtual void act ()
 

Private Attributes

std::vector< VariableName > _displacements
 
std::vector< VariableName > _displacement_gradients
 

Detailed Description

Automatically generates all variables, Kernels, and Materials to ensure the correct derivatives of the elastic free energy in a non-split Cahn-Hilliard simulation are assembled.

Definition at line 20 of file DisplacementGradientsAction.h.

Constructor & Destructor Documentation

◆ DisplacementGradientsAction()

DisplacementGradientsAction::DisplacementGradientsAction ( const InputParameters &  params)

Definition at line 39 of file DisplacementGradientsAction.C.

40  : Action(params),
41  _displacements(getParam<std::vector<VariableName>>("displacements")),
42  _displacement_gradients(getParam<std::vector<VariableName>>("displacement_gradients"))
43 {
44 }

Member Function Documentation

◆ act()

void DisplacementGradientsAction::act ( )
virtual

Definition at line 47 of file DisplacementGradientsAction.C.

48 {
49  unsigned int ngrad = _displacement_gradients.size();
50 
51  if (_current_task == "add_variable")
52  {
53  // Loop through the gij variables
54  Real scaling = getParam<Real>("scaling");
55  for (unsigned int i = 0; i < ngrad; ++i)
56  {
57  auto var_params = _factory.getValidParams("MooseVariable");
58  var_params.set<MooseEnum>("family") = "LAGRANGE";
59  var_params.set<MooseEnum>("order") = "FIRST";
60  var_params.set<std::vector<Real>>("scaling") = {scaling};
61 
62  // Create displacement gradient variables
63  _problem->addVariable("MooseVariable", _displacement_gradients[i], var_params);
64  }
65  }
66  else if (_current_task == "add_material")
67  {
68  InputParameters params = _factory.getValidParams("StrainGradDispDerivatives");
69  params.set<std::vector<VariableName>>("displacement_gradients") = _displacement_gradients;
70  params.set<std::vector<SubdomainName>>("block") = {"0"}; // TODO: add parameter for this
71  _problem->addMaterial("StrainGradDispDerivatives", "strain_grad_disp_derivatives", params);
72  }
73  else if (_current_task == "add_kernel")
74  {
75  unsigned int ndisp = _displacements.size();
76  if (ndisp * ndisp != ngrad)
77  paramError("displacement_gradients",
78  "Number of displacement gradient variables must be the square of the number of "
79  "displacement variables.");
80 
81  // Loop through the displacements
82  unsigned int i = 0;
83  for (unsigned int j = 0; j < ndisp; ++j)
84  for (unsigned int k = 0; k < ndisp; ++k)
85  {
86  InputParameters params = _factory.getValidParams("GradientComponent");
87  params.set<NonlinearVariableName>("variable") = _displacement_gradients[i];
88  params.set<std::vector<VariableName>>("v") = {_displacements[j]};
89  params.set<unsigned int>("component") = k;
90  _problem->addKernel(
91  "GradientComponent", _displacement_gradients[i] + "_grad_kernel", params);
92  ++i;
93  }
94  }
95  else
96  mooseError("Internal error.");
97 }

Member Data Documentation

◆ _displacement_gradients

std::vector<VariableName> DisplacementGradientsAction::_displacement_gradients
private

Definition at line 29 of file DisplacementGradientsAction.h.

Referenced by act().

◆ _displacements

std::vector<VariableName> DisplacementGradientsAction::_displacements
private

Definition at line 28 of file DisplacementGradientsAction.h.

Referenced by act().


The documentation for this class was generated from the following files:
DisplacementGradientsAction::_displacements
std::vector< VariableName > _displacements
Definition: DisplacementGradientsAction.h:28
DisplacementGradientsAction::_displacement_gradients
std::vector< VariableName > _displacement_gradients
Definition: DisplacementGradientsAction.h:29