The set-up of the problem to be solved for this example is identical to the one in Tutorial: Non-Linear Kirchhoff-Love shell analysis. The reader is referred to that example for a full overview of the code.
#ifdef gsKLShell_ENABLED
#include <gsKLShell/gsKLShell.h>
#endif
int main(int argc, char *argv[])
{
#ifdef gsKLShell_ENABLED
bool plot = false;
gsCmdLine cmd(
"Nonlinear static shell tutorial.");
cmd.addInt( "e", "degreeElevation","Number of degree elevation steps to perform before solving (0: equalize degree in all directions)", numElevate );
cmd.addInt( "r", "uniformRefine", "Number of Uniform h-refinement steps to perform before solving", numRefine );
cmd.addSwitch("plot", "Create a ParaView visualization file with the solution", plot);
try { cmd.getValues(argc,argv); } catch (int rv) { return rv; }
if (numElevate!=0)
for (int r =0; r < numRefine; ++r)
point<< 0.5, 0.5 ; load << 0, 0.0, -1e4 ;
pLoads.addLoad(point, load, 0 );
std::vector<gsFunctionSet<>*> parameters{&E,&nu};
options.
addInt(
"Material",
"Material model: (0): SvK | (1): NH | (2): NH_ext | (3): MR | (4): Ogden",1);
options.
addInt(
"Implementation",
"Implementation: (0): Composites | (1): Analytical | (2): Generalized | (3): Spectral",1);
assembler.setPointLoads(pLoads);
{
assembler.constructSolution(x,def);
m = assembler.matrix();
};
{
assembler.constructSolution(x,def);
v = assembler.rhs();
};
assembler.assemble();
solver.options().setInt("verbose",2);
solver.initialize();
gsInfo<<
"Solving system with "<<assembler.numDofs()<<
" DoFs\n";
refPoint<<0.5,0.5;
gsInfo <<
"Displacement at reference point ("
<<ori.
patch(0).eval(refPoint).transpose()<<
"): "
<<": "<<refVals.transpose()<<"\n";
if (plot)
{
gsInfo<<
"Plotting in Paraview...\n";
gsWriteParaview<>( solField, "Deformation", 1000, true);
gsWriteParaview(membraneStress,"MembraneStress",1000);
}
return EXIT_SUCCESS;
#else
GISMO_ERROR(
"The tutorial needs to be compiled with gsKLShell enabled");
return EXIT_FAILED;
#endif
}
Class containing a set of boundary conditions.
Definition gsBoundaryConditions.h:342
void addCornerValue(boxCorner c, T value, int p=0, short_t unknown=0, int component=-1)
Adds a boundary condition with value on a corner c of patch p for unknown component.
Definition gsBoundaryConditions.h:726
void setGeoMap(const gsFunctionSet< T > &gm)
Set the geometry map to evaluate boundary conditions.
Definition gsBoundaryConditions.h:916
Class for command-line argument parsing.
Definition gsCmdLine.h:57
Class defining a globally constant function.
Definition gsConstantFunction.h:34
A scalar of vector field defined on a m_parametric geometry.
Definition gsField.h:55
Class defining a multivariate (real or vector) function given by a string mathematical expression.
Definition gsFunctionExpr.h:52
memory::unique_ptr< gsMaterialMatrixBase > uPtr
Unique pointer for gsGeometry.
Definition gsMaterialMatrixBase.h:44
A matrix with arbitrary coefficient type and fixed or dynamic size.
Definition gsMatrix.h:41
Holds a set of patch-wise bases and their topology information.
Definition gsMultiBasis.h:37
Container class for a set of geometry patches and their topology, that is, the interface connections ...
Definition gsMultiPatch.h:100
void degreeElevate(short_t const elevationSteps=1, short_t const dir=-1)
Elevate the degree of all patches by elevationSteps, preserves smoothness.
Definition gsMultiPatch.hpp:282
bool computeTopology(T tol=1e-4, bool cornersOnly=false, bool tjunctions=false)
Attempt to compute interfaces and boundaries automatically.
Definition gsMultiPatch.hpp:377
gsGeometry< T > & patch(size_t i) const
Return the i-th patch.
Definition gsMultiPatch.h:292
void uniformRefine(int numKnots=1, int mul=1, short_t const dir=-1)
Refine uniformly all patches by inserting numKnots in each knot-span with multipliplicity mul.
Definition gsMultiPatch.hpp:271
Class which holds a list of parameters/options, and provides easy access to them.
Definition gsOptionList.h:33
void addInt(const std::string &label, const std::string &desc, const index_t &value)
Adds a option named label, with description desc and value value.
Definition gsOptionList.cpp:201
A function depending on an index i, typically referring to a patch/sub-domain. On each patch a differ...
Definition gsPiecewiseFunction.h:29
Class containing a set of points on a multi-patch isogeometric domain, together with boundary conditi...
Definition gsPointLoads.h:65
Reads an object from a data file, if such the requested object exists in the file.
Definition gsReadFile.h:43
Sparse matrix class, based on gsEigen::SparseMatrix.
Definition gsSparseMatrix.h:139
Static solver using a newton method.
Definition gsStaticNewton.h:30
Assembles the system matrix and vectors for 2D and 3D shell problems, including geometric nonlinearit...
Definition gsThinShellAssembler.h:77
A vector with arbitrary coefficient type and fixed or dynamic size.
Definition gsVector.h:37
Main header to be included by clients using the G+Smo library.
#define index_t
Definition gsConfig.h:32
#define GISMO_ERROR(message)
Definition gsDebug.h:118
Static solver using a newton method.
Class providing Structural Analysis Utilities.
The G+Smo namespace, containing all definitions for the library.
@ von_mises_membrane
compute only von Mises stress
Definition gsThinShellFunctions.h:42