55TransverseReinfConstraint :: TransverseReinfConstraint(
int n,
Domain *d) :
64TransverseReinfConstraint :: ~TransverseReinfConstraint()
69void TransverseReinfConstraint :: initializeFrom(
InputRecord &ir)
74 return ActiveBoundaryCondition :: initializeFrom(ir);
80 ActiveBoundaryCondition :: giveInputRecord(input);
84DofManager *TransverseReinfConstraint :: giveInternalDofManager(
int i)
99 if ( type == ExternalForcesVector ) {
102 answer.
assemble(stressLoad, lambda_loc);
103 }
else if ( type == InternalForcesVector ) {
107 IntArray loc, loc_s, loc_c, masterDofIDs;
120 for (
int pos = 1; pos <= elements.
giveSize(); ++pos) {
123 int boundary = boundaries.
at(2*pos);
161 answer.
assemble(fe_lam, lambda_loc);
176 if ( type == TangentStiffnessMatrix || type == SecantStiffnessMatrix || type == ElasticStiffnessMatrix ) {
178 IntArray loc_r, loc_c, lambda_loc_r, lambda_loc_c;
179 IntArray loc_us_r, loc_us_c, loc_uc_r, loc_uc_c;
195 for (
int pos = 1; pos <= elements.
giveSize(); ++pos) {
198 int boundary = boundaries.
at(2*pos);
222 answer.
assemble(lambda_loc_r, loc_c, Klam);
223 answer.
assemble(loc_r, lambda_loc_c, KlamT);
229 OOFEM_LOG_DEBUG(
"Skipping assembly in TransverseReinfConstraint::assemble().\n");
233void TransverseReinfConstraint :: giveLocationArrays(std :: vector< IntArray > &rows, std :: vector< IntArray > &cols,
CharType type,
236 IntArray loc_us_r, loc_us_c, loc_uc_r, loc_uc_c;
237 IntArray loc_r, loc_c, lambda_loc_r, lambda_loc_c;
257 for (
int pos = 1; pos <= selements.
giveSize(); ++pos) {
260 int boundary = boundaries.
at(2*pos);
279 cols [ i ] = lambda_loc_c;
282 rows [ i ] = lambda_loc_r;
301 int nslam, nclam, nsd=1;
310 oTangent.
resize(nsd,nslam + nclam);
311 for (
int i=1; i <= nsd; ++i) {
312 for (
int j=1; j <= nslam; ++j) {
313 oTangent.
at(i,j) = Kslam.
at(i,j);
315 for (
int j=nslam+1; j <= nslam+nclam; ++j) {
316 oTangent.
at(i,j) = Kclam.
at(i,j-nslam);
333 std :: unique_ptr< IntegrationRule > ir;
338 for (
auto &gp : *ir ) {
339 const FloatArray &lcoords = gp->giveNaturalCoordinates();
343 interp->
evalN(nu, lcoords, cellgeo);
353 Nlam(0,0) = fabs(normal.
at(1));
354 Nlam(1,0) = fabs(normal.
at(2));
360 oTangent.
add(detJ * gp->giveWeight(), contrib);
364void TransverseReinfConstraint :: integrateTangentOnConcrete(
FloatMatrix &oTangent,
Element *e,
int iBndIndex)
376 std :: unique_ptr< IntegrationRule > ir;
381 for (
auto &gp : *ir ) {
382 const FloatArray &lcoords = gp->giveNaturalCoordinates();
396 Nlam(0,0) = fabs(normal.
at(1));
397 Nlam(1,0) = fabs(normal.
at(2));
402 oTangent.
add(detJ * gp->giveWeight(), contrib);
#define REGISTER_BoundaryCondition(class)
ActiveBoundaryCondition(int n, Domain *d)
int giveNextFreeDofID(int increment=1)
virtual bool computeGtoLRotationMatrix(FloatMatrix &answer)
virtual void giveBoundaryLocationArray(IntArray &locationArray, const IntArray &bNodes, const UnknownNumberingScheme &s, IntArray *dofIds=NULL)
virtual FEInterpolation * giveInterpolation() const
virtual IntArray giveBoundaryEdgeNodes(int boundary, bool includeHierarchical=false) const
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
void computeBoundaryVectorOf(const IntArray &bNodes, const IntArray &dofIDMask, ValueModeType u, TimeStep *tStep, FloatArray &answer, bool padding=false)
virtual Element_Geometry_Type giveGeometryType() const =0
virtual std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual std::unique_ptr< IntegrationRule > giveIntegrationRule(int order, const Element_Geometry_Type) const
int giveInterpolationOrder() const
virtual double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
Domain * giveDomain() const
void assemble(const FloatArray &fe, const IntArray &loc)
static FloatArray fromConcatenated(std::initializer_list< FloatArray > ini)
void rotatedWith(FloatMatrix &r, char mode)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
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()
int giveNumberOfColumns() const
Returns number of columns of receiver.
void beNMatrixOf(const FloatArray &n, int nsd)
void beTranspositionOf(const FloatMatrix &src)
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
virtual void scale(double s)
void followedBy(const IntArray &b, int allocChunk=0)
void resizeWithValues(int n, int allocChunk=0)
const IntArray & giveBoundaryList()
const IntArray & giveElementList()
virtual int assemble(const IntArray &loc, const FloatMatrix &mat)=0
void integrateTangent(FloatMatrix &oTangent, Element *es, Element *ec, int iBndIndex)
Help functions that integrate the tangent contribution from steel and concrete elements.
void integrateTangentOnConcrete(FloatMatrix &oTangent, Element *e, int iBndIndex)
int conElBoundSet
Set of element boundaries along the reinforcement.
void integrateTangentOnSteel(FloatMatrix &oTangent, Element *e)
int steelElSet
Reinforcement bar element set.
std ::unique_ptr< Node > lmLambda
DOF-manager containing the unknown Lagrange multiplier.
#define OOFEM_LOG_DEBUG(...)
static FloatArray Vec1(const double &a)
#define _IFT_TransverseReinfConstraint_SteelElSet
#define _IFT_TransverseReinfConstraint_ConElBoundSet