Select Git revision
-
Christophe Geuzaine authoredChristophe Geuzaine authored
frameSolver.cpp 9.24 KiB
// Gmsh - Copyright (C) 1997-2019 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
#include "GmshConfig.h"
#include "GModel.h"
#include "GVertex.h"
#include "GEdge.h"
#include "frameSolver.h"
#include "linearSystemCSR.h"
#include "linearSystemPETSc.h"
#include "linearSystemFull.h"
#if defined(HAVE_POST)
#include "PView.h"
#include "PViewData.h"
#endif
frameSolver2d::frameSolver2d(GModel *gm) : pAssembler(0), _myModel(gm) {}
void frameSolver2d::addFixations(const std::vector<int> &dirs,
const std::vector<int> &modelVertices,
double value)
{
for(std::size_t j = 0; j < modelVertices.size(); j++) {
GVertex *gv = _myModel->getVertexByTag(modelVertices[j]);
if(gv) {
for(std::size_t i = 0; i < dirs.size(); i++) {
_fixations.push_back(gmshFixation(gv, dirs[i], value));
}
}
}
}
void frameSolver2d::addNodalForces(const std::vector<int> &modelVertices,
const std::vector<double> &force)
{
for(std::size_t j = 0; j < modelVertices.size(); j++) {
GVertex *gv = _myModel->getVertexByTag(modelVertices[j]);
if(gv) {
_nodalForces.push_back(std::make_pair(gv, force));
}
}
}
void frameSolver2d::addBeamsOrBars(const std::vector<int> &modelEdges, double E,
double I, double A, int r[2])
{
int r_middle[2] = {1, 1}, r_left[2] = {r[0], 1}, r_right[2] = {0, r[1]};
// printf("adding %d beams\n",modelEdges.size());
for(std::size_t i = 0; i < modelEdges.size(); i++) {
GEdge *ge = _myModel->getEdgeByTag(modelEdges[i]);
if(ge) {
// printf("model edge %d found\n",ge->tag());
for(std::size_t j = 0; j < ge->lines.size(); ++j) {
MLine *l = ge->lines[j];
if(j == 0 && j == ge->lines.size() - 1)
_beams.push_back(gmshBeam2d(l, E, I, A, r));
else if(j == 0)
_beams.push_back(gmshBeam2d(l, E, I, A, r_left));
else if(j == ge->lines.size() - 1)
_beams.push_back(gmshBeam2d(l, E, I, A, r_right));
else
_beams.push_back(gmshBeam2d(l, E, I, A, r_middle));
}
}
}
}