Skip to content
Snippets Groups Projects
Commit dd1c1148 authored by Elias Pipping's avatar Elias Pipping Committed by Elias Pipping
Browse files

More structure

parent d91b9f19
No related branches found
No related tags found
No related merge requests found
...@@ -251,40 +251,43 @@ int main(int argc, char *argv[]) { ...@@ -251,40 +251,43 @@ int main(int argc, char *argv[]) {
MatrixType massMatrix; MatrixType massMatrix;
VectorType gravityFunctional; VectorType gravityFunctional;
{ {
// Assemble mass matrix and compute density double const gravity = 9.81;
MassAssembler<GridType, P1Basis::LocalFiniteElement, double const density = parset.get<double>("body.density");
P1Basis::LocalFiniteElement> const localMass;
OperatorAssembler<P1Basis, P1Basis>(p1Basis, p1Basis)
.assemble(localMass, massMatrix);
double volume = 1.0; { // Assemble mass matrix
for (int i = 0; i < dim; ++i) MassAssembler<GridType, P1Basis::LocalFiniteElement,
volume *= (upperRight[i] - lowerLeft[i]); P1Basis::LocalFiniteElement> const localMass;
OperatorAssembler<P1Basis, P1Basis>(p1Basis, p1Basis)
.assemble(localMass, massMatrix);
massMatrix *= density;
}
double area = 1.0; { // Compute normal stress
for (int i = 0; i < dim; ++i) double volume = 1.0;
if (i != 1) for (int i = 0; i < dim; ++i)
area *= (upperRight[i] - lowerLeft[i]); volume *= (upperRight[i] - lowerLeft[i]);
double const gravity = 9.81; double area = 1.0;
double const density = parset.get<double>("body.density"); for (int i = 0; i < dim; ++i)
if (i != 1)
area *= (upperRight[i] - lowerLeft[i]);
// volume * gravity * density / area = normal stress
// V * g * rho / A = sigma_n
// m^d * N/kg * kg/m^d / m^(d-1) = N/m^(d-1)
normalStress = volume * gravity * density / area;
}
// volume * gravity * density / area = normal stress { // Compute gravitational body force
// V * g * rho / A = sigma_n SmallVector weightedGravitationalDirection(0);
// m^d * N/kg * kg/m^d / m^(d-1) = N/m^(d-1) weightedGravitationalDirection[1] = -density * gravity;
normalStress = volume * gravity * density / area; ConstantFunction<SmallVector, SmallVector> const gravityFunction(
weightedGravitationalDirection);
massMatrix *= density; L2FunctionalAssembler<GridType, SmallVector> gravityFunctionalAssembler(
gravityFunction);
// Compute gravitational body force FunctionalAssembler<P1Basis>(p1Basis)
SmallVector weightedGravitationalDirection(0); .assemble(gravityFunctionalAssembler, gravityFunctional, true);
weightedGravitationalDirection[1] = -density * gravity; }
ConstantFunction<SmallVector, SmallVector> const gravityFunction(
weightedGravitationalDirection);
L2FunctionalAssembler<GridType, SmallVector> gravityFunctionalAssembler(
gravityFunction);
FunctionalAssembler<P1Basis>(p1Basis)
.assemble(gravityFunctionalAssembler, gravityFunctional, true);
} }
// Assemble elastic force on the body // Assemble elastic force on the body
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment