Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new lattice2dboundary element and latticedamage material #54

Closed
wants to merge 60 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
5e4b758
Added LatticeLinearElastic and LatticeDamage material models. Updated…
adsci Apr 4, 2019
d3d31fe
Added Lattice3D and Lattice3DBoundary elements + related tests
adsci Apr 5, 2019
a27af64
Added LTRSpaceBoundary element and VTKXMLPeriodic export module
adsci May 3, 2019
1ae2531
Removed leftover test output files
adsci May 3, 2019
42fdb9d
LTRSpaceBoundaryTruss and LTRSpaceBoundaryVoigt elements and changes …
adsci May 14, 2019
fad16a9
LTRSpaceBoundaryMembrane element and related tests
adsci May 14, 2019
761bc6f
LTRSpaceBoundaryBeam and LTRSpaceBoundaryPlate elements, VTKXMLPeriod…
adsci May 17, 2019
a10bda9
VTKXML output for LIBeam3d elements
adsci May 23, 2019
fb124e9
Optional segment length in IntElPoint element. Bondceb02 test case
adsci May 27, 2019
41851dc
Added giveReferenceNode method in LIBeam3d
adsci May 29, 2019
45e69c0
LIBeam3dBoundary element, VTKXMLPeriodic export, and test case
adsci May 29, 2019
310dc23
Additional LIBeam3dBoundary elements depending on macro element type
adsci May 30, 2019
742f6be
Fixed a small bug in VTKXMLPeriodic export module
adsci Jun 4, 2019
25fb052
Set specification option for FiberedCS and improved output
adsci Jun 6, 2019
8bd99ce
Fixed a bug in beam element export in VTKXMLPeriodic export module
adsci Jun 13, 2019
034a045
Merge remote-tracking branch 'adsci/periodicRC3d'
adsci Jun 18, 2019
bcd3275
Characteristic length for LTRSpaceBoundary elements
adsci Jun 19, 2019
5dc6279
Added latticelinks
graspel Jun 21, 2019
05014e0
fix of length
graspel Jun 21, 2019
6364113
added link element
graspel Jul 19, 2019
da705df
fixed bugs
graspel Jul 19, 2019
3a33284
small improv
graspel Jul 19, 2019
9b406bb
more link additions
graspel Jul 25, 2019
b68b264
update
graspel Jul 31, 2019
832e641
Adding vof support for transport elements, adding prototype implement…
bpatzak Jul 4, 2019
eef5db9
Adding support for solution dependent external forces in NR solver, i…
nitramkaroh Jul 24, 2019
be466aa
Initial version of python bindings based on pybind11
bpatzak Jul 27, 2019
77dcb80
Further work on pybind11 bindings
bpatzak Jul 27, 2019
9990f84
Continuing work on pybind11 bindings
bpatzak Jul 28, 2019
c349a9f
Continuing work on pybind11 bindings
bpatzak Jul 30, 2019
54e30f4
add rotational stiffness
graspel Aug 6, 2019
7a10d10
more link element changes
graspel Aug 11, 2019
17d83c9
added beam rve tests
graspel Aug 14, 2019
8f0b3ff
updated and added rve tests
graspel Aug 14, 2019
5716908
merge
graspel Aug 22, 2019
e30e573
additional bond test with blocked rotational DOF
graspel Aug 23, 2019
3fd9977
added different bond laws to linkslip
graspel Sep 5, 2019
88f7499
additional bond test
graspel Sep 5, 2019
9c2d773
changes in slip model
graspel Sep 27, 2019
220b565
Output of current load level in matlab export module
adsci Sep 22, 2019
72477d3
Added giveMaterial method to FiberedCrossSection
adsci Sep 22, 2019
30ee24a
Interface jump - interface traction output for linkslip material model
adsci Sep 28, 2019
6d3db42
Initialize status variables in slip model
adsci Sep 28, 2019
0fc2f67
Test case for linkslip material model
adsci Sep 28, 2019
3f87609
clean up of status of linkslip
graspel Sep 28, 2019
61363b7
Intro of link boundary elements
graspel Oct 7, 2019
481e88b
resolve commit
graspel Oct 7, 2019
49ef211
added a few more models from the old oofem
graspel Oct 8, 2019
c5952d9
more additions
graspel Oct 17, 2019
4a03a96
additional lattice materials
graspel Oct 17, 2019
e74f8f1
new lattice2dboundary element and latticedamage material
graspel Oct 18, 2019
febfcdc
merge
graspel Oct 18, 2019
cd9a6a2
Fixed merge
graspel Oct 18, 2019
6648b24
cleaned up
graspel Oct 18, 2019
29f8133
Addition of 3d lattice elements
graspel Oct 18, 2019
580f7dd
Adding latticelink elements and materials
graspel Oct 18, 2019
3b01de9
fixed merge
graspel Oct 18, 2019
edc54c6
added material manual
graspel Oct 18, 2019
430bd5b
cleaning up periodic export
graspel Oct 19, 2019
1701ec5
Restructuring in periodic export module
graspel Oct 19, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Adding latticelink elements and materials
  • Loading branch information
graspel committed Oct 18, 2019
commit 580f7dda87741f1afee331952bc1a67191186e03
18 changes: 18 additions & 0 deletions doc/elementlibmanual/elementlibmanual.tex
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,24 @@ \subsubsection{Lattice2dboundary}

The theory pf lattice2dbounday is described in the paper ``P. Grassl and M. Jir\'{a}sek. Meso-scale approach to modelling the fracture process zone of concrete subjected to uniaxial tension. International Journal of Solids and Structures. Volume 47, Issues 7-8, pp. 957-968, 2010.''

\subsubsection{Lattice3d}
Represents two-node 3d lattice element. Each node has six degrees of freedom.
The theory of lattice3d is described in the paper ``P. Grassl, J. Bolander. Three-Dimensional Network Model for Coupling of Fracture and Mass Transport in Quasi-Brittle Geomaterials, Materials, 9, 782, 2016.''

\subsubsection{Lattice3dboundary}
Represents three-noded 3d lattice element for boundary of 3d periodic cells. The first two nodes have 6 degrees of freedom as for the element lattice3d. The third node is used to control the loading of the periodic cell using three normal (xx, yy and zz) and three shear strain (yz, xz, xy) components.

The theory of lattice3dboundary is described in the paper ``I. Athanasiadis, S. Wheeler and P. Grassl. Hydro-mechanical network modelling of particulate composites, International Journal of Solids and Structures. Vol. 130-131, Pages 49-60, 2018.''

\subsubsection{Latticelink3d}
Represents two-node 3d link element connecting 3d beam and 3d lattice elements. Each node has six degrees of freedom.
The theory of latticelink3d is described in the paper ``P. Grassl and A. Antonelli. 3D network modelling of fracture processes in fibre-reinforced geomaterials, International Journal of Solids and Structures, vol. 156-157, Pages 234-242, 2019.''

\subsubsection{Latticelink3dboundary}
Represents three-node 3d boundary link element connecting 3d beam and 3d lattice elements. The first two nodes have the same meaning as for latticelink3d. The third node is used to control the loading of the periodic cell using three normal (xx, yy and zz) and three shear strain (yz, xz, xy) components.

The theory of latticelink3dboundary is described in the paper ``P. Grassl and A. Antonelli. 3D network modelling of fracture processes in fibre-reinforced geomaterials, International Journal of Solids and Structures, vol. 156-157, Pages 234-242, 2019.''

%-----------------------------------------------------------------------------------------------
\clearpage
\subsection{Plane Stress Elements}
Expand Down
3 changes: 2 additions & 1 deletion src/sm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ set (sm_material
Materials/latticeviscoelastic.C
Materials/latticedamageviscoelastic.C
Materials/latticebondplasticity.C
Materials/latticeplasticitydamage.C
Materials/latticeplasticitydamage.C
Materials/latticeslip.C
)

if (USE_PYTHON)
Expand Down
46 changes: 23 additions & 23 deletions src/sm/Elements/lattice3dboundary.C
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ Lattice3dBoundary :: computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode
computeGeometryProperties();
}

double volume = this->computeVolumeAround( integrationRulesArray [ 0 ]->getIntegrationPoint(0) );
double volume = this->computeVolumeAround(integrationRulesArray [ 0 ]->getIntegrationPoint(0) );

this->computeBmatrixAt(integrationRulesArray [ 0 ]->getIntegrationPoint(0), bj);
this->computeConstitutiveMatrixAt(d, rMode, integrationRulesArray [ 0 ]->getIntegrationPoint(0), tStep);
Expand All @@ -212,10 +212,10 @@ Lattice3dBoundary :: computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode
bjt.beTranspositionOf(bj);
answerTemp.beProductOf(bjt, dbj);

answer.resize( computeNumberOfDofs(), computeNumberOfDofs() );
answer.resize(computeNumberOfDofs(), computeNumberOfDofs() );
answer.zero();

answerHelp.resize( computeNumberOfDofs(), computeNumberOfDofs() );
answerHelp.resize(computeNumberOfDofs(), computeNumberOfDofs() );
answerHelp.zero();

for ( int m = 1; m <= 12; m++ ) {
Expand Down Expand Up @@ -244,13 +244,13 @@ Lattice3dBoundary :: computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();
if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}

for ( int k = 1; k <= 12; k++ ) {
Expand Down Expand Up @@ -317,12 +317,12 @@ Lattice3dBoundary :: giveVTKCoordinates(int nodeNumber, FloatArray &coords) {
if ( nodeNumber == 1 ) {
node = this->giveNode(1);
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponent, location.at(1) );
giveSwitches(projectionComponent, location.at(1) );
}
} else if ( nodeNumber == 2 ) {
node = this->giveNode(2);
if ( location.at(2) != 0 ) {
giveSwitches( projectionComponent, location.at(2) );
giveSwitches(projectionComponent, location.at(2) );
}
} else {
OOFEM_ERROR("wrong element used in the vtk module");
Expand Down Expand Up @@ -359,14 +359,14 @@ Lattice3dBoundary :: computeStrainVector(FloatArray &answer, GaussPoint *gp, Tim
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();

if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}

FloatMatrix rotationMatrix;
Expand Down Expand Up @@ -484,18 +484,18 @@ Lattice3dBoundary :: giveInternalForcesVector(FloatArray &answer, TimeStep *tSte

bt.beTranspositionOf(b);
if ( useUpdatedGpRecord == 1 ) {
TotalStressVector = ( ( StructuralMaterialStatus * ) mat->giveStatus( integrationRulesArray [ 0 ]->getIntegrationPoint(0) ) )
TotalStressVector = ( ( StructuralMaterialStatus * ) mat->giveStatus(integrationRulesArray [ 0 ]->getIntegrationPoint(0) ) )
->giveStressVector();
} else
if ( !this->isActivated(tStep) ) {
strain.resize( StructuralMaterial :: giveSizeOfVoigtSymVector( integrationRulesArray [ 0 ]->getIntegrationPoint(0)->giveMaterialMode() ) );
strain.resize(StructuralMaterial :: giveSizeOfVoigtSymVector(integrationRulesArray [ 0 ]->getIntegrationPoint(0)->giveMaterialMode() ) );
strain.zero();
}
this->computeStrainVector(strain, integrationRulesArray [ 0 ]->getIntegrationPoint(0), tStep);

this->computeStressVector(TotalStressVector, strain, integrationRulesArray [ 0 ]->getIntegrationPoint(0), tStep);

dV = this->computeVolumeAround( integrationRulesArray [ 0 ]->getIntegrationPoint(0) );
dV = this->computeVolumeAround(integrationRulesArray [ 0 ]->getIntegrationPoint(0) );
bs.beProductOf(bt, TotalStressVector);
bs.times(dV);

Expand All @@ -510,14 +510,14 @@ Lattice3dBoundary :: giveInternalForcesVector(FloatArray &answer, TimeStep *tSte
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();

if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}

//Normal stresses
Expand Down Expand Up @@ -579,13 +579,13 @@ Lattice3dBoundary :: computeGeometryProperties()
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();
if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}

for ( int i = 0; i < 3; i++ ) {
Expand All @@ -603,7 +603,7 @@ Lattice3dBoundary :: computeGeometryProperties()
this->normal.at(i + 1) = coordsB.at(i + 1) - coordsA.at(i + 1);
}

this->length = sqrt( pow(this->normal.at(1), 2.) + pow(this->normal.at(2), 2.) + pow(this->normal.at(3), 2.) );
this->length = sqrt(pow(this->normal.at(1), 2.) + pow(this->normal.at(2), 2.) + pow(this->normal.at(3), 2.) );

for ( int i = 0; i < 3; i++ ) {
this->normal.at(i + 1) /= length;
Expand Down Expand Up @@ -688,7 +688,7 @@ void Lattice3dBoundary :: drawRawGeometry(oofegGraphicContext &gc, TimeStep *tSt
}

EASValsSetLineWidth(OOFEG_RAW_GEOMETRY_WIDTH);
EASValsSetColor( gc.getActiveCrackColor() );
EASValsSetColor(gc.getActiveCrackColor() );
EASValsSetLayer(OOFEG_RAW_GEOMETRY_LAYER);


Expand All @@ -701,14 +701,14 @@ void Lattice3dBoundary :: drawRawGeometry(oofegGraphicContext &gc, TimeStep *tSt
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();

if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}

p [ 0 ].x = ( FPNum ) this->giveNode(1)->giveCoordinate(1) + projectionComponentNodeOne.at(1) * specimenDimension.at(1);
Expand Down Expand Up @@ -781,7 +781,7 @@ void Lattice3dBoundary :: drawDeformedGeometry(oofegGraphicContext &gc, TimeStep
WCRec p [ 2 ]; /* points */

EASValsSetLineWidth(OOFEG_DEFORMED_GEOMETRY_WIDTH);
EASValsSetColor( gc.getDeformedElementColor() );
EASValsSetColor(gc.getDeformedElementColor() );
EASValsSetLayer(OOFEG_DEFORMED_GEOMETRY_LAYER);

FloatArray specimenDimension(3);
Expand Down Expand Up @@ -816,13 +816,13 @@ void Lattice3dBoundary :: drawDeformedGeometry(oofegGraphicContext &gc, TimeStep
IntArray projectionComponentNodeOne(3);
projectionComponentNodeOne.zero();
if ( location.at(1) != 0 ) {
giveSwitches( projectionComponentNodeOne, location.at(1) );
giveSwitches(projectionComponentNodeOne, location.at(1) );
}

IntArray projectionComponentNodeTwo(3);
projectionComponentNodeTwo.zero();
if ( location.at(2) != 0 ) {
giveSwitches( projectionComponentNodeTwo, location.at(2) );
giveSwitches(projectionComponentNodeTwo, location.at(2) );
}


Expand Down
20 changes: 9 additions & 11 deletions src/sm/Elements/lattice3dboundary.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*
* OOFEM : Object Oriented Finite Element Code
*
* Copyright (C) 1993 - 2013 Borek Patzak
* Copyright (C) 1993 - 2019 Borek Patzak
*
*
*
Expand All @@ -33,14 +33,14 @@
*/

#ifndef lattice3dboundary_h
#define lattice3dboundary_h
#define lattice3dboundary_h

#include "lattice3d.h"
#include "lattice3d.h"

///@name Input fields for Lattice2d
///@name Input fields for Lattice3d
//@{
#define _IFT_Lattice3dBoundary_Name "lattice3dboundary"
#define _IFT_Lattice3dBoundary_location "location"
#define _IFT_Lattice3dBoundary_Name "lattice3dboundary"
#define _IFT_Lattice3dBoundary_location "location"
//@}

namespace oofem {
Expand Down Expand Up @@ -80,12 +80,12 @@ class Lattice3dBoundary : public Lattice3d

void giveVTKCoordinates(int nodeNumber, FloatArray &coords);

#ifdef __OOFEG
#ifdef __OOFEG
virtual void drawYourself(oofegGraphicContext &context, TimeStep *tStep);
virtual void drawRawGeometry(oofegGraphicContext &, TimeStep *tStep);
virtual void drawRawCrossSections(oofegGraphicContext &, TimeStep *tStep);
virtual void drawDeformedGeometry(oofegGraphicContext &, TimeStep * tStep, UnknownType);
#endif
virtual void drawDeformedGeometry(oofegGraphicContext &, TimeStep *tStep, UnknownType);
#endif

protected:
void computeBmatrixAt(GaussPoint *, FloatMatrix &, int = 1, int = ALL_STRAINS) override;
Expand All @@ -95,7 +95,5 @@ class Lattice3dBoundary : public Lattice3d
void giveSwitches(IntArray &answer, int location);
void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *stepN) override;
};


} // end namespace oofem
#endif
Loading