38 if ( lcoords.
at(1) < xi_0 ) {
39 xiScaled = {lcoords.
at(1)*2. + 1.};
43 answer.
add(
N.at(1), x1 );
46 answer.
add(
N.at(2), x3 );
48 xiScaled = {lcoords.
at(1)*2. - 1.};
52 answer.
add(
N.at(1), x3 );
55 answer.
add(
N.at(2), x2 );
78 double X1_i = 0.5 * ( this->
giveNode(1)->giveCoordinate(1) + this->
giveNode(4)->giveCoordinate(1) );
79 double X2_i = 0.5 * ( this->
giveNode(1)->giveCoordinate(2) + this->
giveNode(4)->giveCoordinate(2) );
80 G.
at(1) += dNdxi.
at(1, 1) * X1_i;
81 G.
at(2) += dNdxi.
at(1, 1) * X2_i;
83 X1_i = 0.5 * ( this->
giveNode(2)->giveCoordinate(1) + this->
giveNode(5)->giveCoordinate(1) );
84 X2_i = 0.5 * ( this->
giveNode(2)->giveCoordinate(2) + this->
giveNode(5)->giveCoordinate(2) );
85 G.
at(1) += dNdxi.
at(2, 1) * X1_i;
86 G.
at(2) += dNdxi.
at(2, 1) * X2_i;
92IntElLine1IntPen :: computeStiffnessMatrix(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
97 bool matStiffSymmFlag = this->
giveCrossSection()->isCharacteristicMtrxSymmetric(rMode);
143 proj_N.
times(1./area);
144 proj_DN.
times(1./area);
165 if ( matStiffSymmFlag ) {
173 if ( matStiffSymmFlag ) {
181 bool matStiffSymmFlag = this->
giveCrossSection()->isCharacteristicMtrxSymmetric(rMode);
227 proj_N.
times(1./area);
228 proj_DN.
times(1./area);
249 if ( matStiffSymmFlag ) {
258 if ( matStiffSymmFlag ) {
266IntElLine1IntPen :: giveInternalForcesVector(
FloatArray &answer,
267 TimeStep *tStep,
int useUpdatedGpRecord)
318 proj_jump.
add(dA, jump);
323 proj_jump.
times(1./area);
324 proj_N.
times(1./area);
370this->computeVectorOf(VM_Total, tStep, u);
372if ( initialDisplacements.giveSize() ) {
399for (
auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
401 this->computeNmatrixAt(ip,
N);
403 this->computeTraction(traction, ip, jump, tStep);
405 double dA = this->computeAreaAround(ip);
410 proj_t.add(dA, traction);
416proj_t.times(1./area);
419proj_N.times(1./area);
426for (
auto &ip: *this->giveDefaultIntegrationRulePtr() ) {
427 this->computeNmatrixAt(ip,
N);
432 double dA = this->computeAreaAround(ip);
433 answer.plusProduct(proj_N, proj_t, dA);
439 this->computeTransformationMatrixAt(ip, rotationMatGtoL);
440 proj_t_gp.rotatedWith(rotationMatGtoL,
'n');
442 FloatArray proj_t_gp_3D = {proj_t_gp.at(1), 0., proj_t_gp.at(2)};
443 status->letProjectedTractionBe(proj_t_gp_3D);
472 answer.
at(1, 1) = answer.
at(2, 2) = -
N.at(1);
474 answer.
at(1, 5) = answer.
at(2, 6) = -
N.at(2);
476 answer.
at(1, 7) = answer.
at(2, 8) =
N.at(1);
478 answer.
at(1, 11) = answer.
at(2, 12) =
N.at(2);
484 answer.
at(1, 3) = answer.
at(2, 4) = -
N.at(2);
485 answer.
at(1, 5) = answer.
at(2, 6) = -
N.at(1);
488 answer.
at(1, 9) = answer.
at(2, 10) =
N.at(2);
489 answer.
at(1, 11) = answer.
at(2, 12) =
N.at(1);
495IntElLine1IntPen :: computeGaussPoints()
#define REGISTER_Element(class)
Node * giveNode(int i) const
int numberOfDofMans
Number of dofmanagers.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
DofManager * giveDofManager(int i) const
CrossSection * giveCrossSection()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
double & at(std::size_t i)
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void subtract(const FloatArray &src)
void rotatedWith(const FloatMatrix &r, char mode='n')
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
void add(const FloatMatrix &a)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
void computeNmatrixAt(GaussPoint *gp, FloatMatrix &answer) override
IntElLine1IntPen(int n, Domain *d)
double computeAreaAround(GaussPoint *gp) override
void giveStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, IntegrationPoint *ip, TimeStep *tStep) override
void computeTransformationMatrixAt(GaussPoint *gp, FloatMatrix &answer) override
IntElLine1(int n, Domain *d)
static FEI2dLineLin interp
FEInterpolation * giveInterpolation() const override
FloatArray initialDisplacements
Initial displacement vector, describes the initial nodal displacements when element has been casted.
bool nlGeometry
Flag indicating if geometrical nonlinearities apply.
virtual void giveStiffnessMatrix_dTdj(FloatMatrix &answer, MatResponseMode rMode, IntegrationPoint *ip, TimeStep *tStep)
virtual void computeTraction(FloatArray &traction, IntegrationPoint *ip, const FloatArray &jump, TimeStep *tStep)
GaussPoint IntegrationPoint