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
added different bond laws to linkslip
  • Loading branch information
graspel committed Sep 5, 2019
commit 3fd997789dab318f4e5be0ca2eaa5b8d72e5ad1c
6 changes: 2 additions & 4 deletions src/sm/Elements/bondlink3d.C
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,9 @@ BondLink3d :: computeBmatrixAt(GaussPoint *aGaussPoint, FloatMatrix &answer, int
}

//Assemble Bmatrix based on three rigid arm components
//first node: beam, second node: lattice
//first node: beam, second node: solid
//rigid.at(1) (tangential), rigid.at(2) (lateral), rigid.at(3) (lateral)
answer.resize(6, 9);
answer.resize(3, 9);
answer.zero();

//Normal displacement jump in x-direction
Expand Down Expand Up @@ -115,8 +115,6 @@ BondLink3d :: computeBmatrixAt(GaussPoint *aGaussPoint, FloatMatrix &answer, int
//Second node
answer.at(3, 9) = -1.;

answer.at(4,4) = 1.;

return;
}

Expand Down
17 changes: 9 additions & 8 deletions src/sm/Materials/InterfaceMaterials/bondceb.C
Original file line number Diff line number Diff line change
Expand Up @@ -148,14 +148,15 @@ BondCEBMaterial :: initializeFrom(InputRecord *ir)
IR_GIVE_OPTIONAL_FIELD(ir, alpha, _IFT_BondCEBMaterial_al);

// dependent parameter
s0 = pow(pow(s1, -alpha)*taumax/ks, 1./(1.-alpha));
if ( s0 > s1 ) {
s0 = s1;
ks = taumax/s1;
OOFEM_WARNING("Parameter ks adjusted");
}

return StructuralInterfaceMaterial :: initializeFrom(ir);
//@todo: why not simply if ks <taumax/s1 choose ks = taumax/s1
//s0 = pow(pow(s1, -alpha)*taumax/ks, 1./(1.-alpha));
if ( s0 > s1 ) {
s0 = s1;
ks = taumax/s1;
OOFEM_WARNING("Parameter ks adjusted");
}

return StructuralInterfaceMaterial :: initializeFrom(ir);
}


Expand Down
168 changes: 102 additions & 66 deletions src/sm/Materials/linkslip.C
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ namespace oofem {
REGISTER_Material(LinkSlip);

/// constructor which creates a dummy material without a status and without random extension interface
LinkSlip :: LinkSlip(int n, Domain *d, double e0, double a1, double a2) : LinearElasticMaterial(n, d)
LinkSlip :: LinkSlip(int n, Domain *d) : LinearElasticMaterial(n, d)
{
eNormalMean = e0;
alphaOne = a1;
alphaTwo = a2;
}


Expand All @@ -88,23 +85,40 @@ namespace oofem {
{
IRResultType result; // Required by IR_GIVE_FIELD macro


LinearElasticMaterial :: initializeFrom(ir);

//axial stiffness
IR_GIVE_FIELD(ir, eNormalMean, _IFT_LinkSlip_eNormal); // Macro
IR_GIVE_FIELD(ir, kNormal, _IFT_LinkSlip_kn); // Macro

//Ratio of lateral to axial stiffness
alphaOne = 1000.;
IR_GIVE_OPTIONAL_FIELD(ir, alphaOne, _IFT_LinkSlip_alphaOne); // Macro
IR_GIVE_OPTIONAL_FIELD(ir, alphaOne, _IFT_LinkSlip_a1); // Macro

//Ratio of lateral to axial stiffness
alphaTwo = 0.;
IR_GIVE_OPTIONAL_FIELD(ir, alphaTwo, _IFT_LinkSlip_alphaTwo); // Macro
//Two models available
//0 default. Linear elastic-perfect plastic
//1 bond slip according first part of CEB model and then constant
//2 bond slip according to CEB model
IR_GIVE_OPTIONAL_FIELD(ir, type, _IFT_LinkSlip_type); // Macro

IR_GIVE_FIELD(ir, tauMax, _IFT_LinkSlip_t0); // Macro

if(type == 1 || type == 2){
IR_GIVE_FIELD(ir, s1, _IFT_LinkSlip_s1);
IR_GIVE_FIELD(ir, alpha, _IFT_LinkSlip_alpha);
}

//Parameter which limits the stress in slip direction.
IR_GIVE_FIELD(ir, tauZero, _IFT_LinkSlip_tauZero); // Macro
if(type == 2){
IR_GIVE_FIELD(ir, s2, _IFT_LinkSlip_s2);
IR_GIVE_FIELD(ir, s3, _IFT_LinkSlip_s3);
IR_GIVE_FIELD(ir, tauFinal, _IFT_LinkSlip_tf);
}

if(type == 1 || type == 2){
if ((type == 1 || type == 2) && this->kNormal < this->tauMax/this->s1) {
this->kNormal = this->tauMax/this->s1;
OOFEM_WARNING("Parameter kN adjusted");
}
}

return IRRT_OK;
}
Expand All @@ -118,6 +132,44 @@ namespace oofem {
return answer;
}

double
LinkSlip :: evaluateBondStress(const double kappa) const
{
if(this->type == 0){//elastic-perfectly plastic
return this->tauMax;
}
else if(this->type == 1){//modified bond model
if ( kappa <= 0. ){
return 0.;
}
if ( kappa <= s1 ){
return tauMax * pow(kappa/s1, alpha);
}
return tauMax;
}
else if(this->type == 2){
if ( kappa <= 0. ){
return 0.;
}
if ( kappa <= s1 ){
return tauMax * pow(kappa/s1, alpha);
}
if ( kappa <= s2 ){
return tauMax;
}
if ( kappa <= s3 ){
return tauMax - (tauMax-tauFinal) * (kappa-s2) / (s3-s2);
}
return tauFinal;
}
else{//unknown type
OOFEM_ERROR("Unknown bond model type. Type should be 0, 1 or 2.");
}

return 0.; //Should not be here.
}



void
LinkSlip :: giveRealStressVector_3d(FloatArray &answer,
Expand All @@ -132,32 +184,34 @@ namespace oofem {
FloatArray strainVector;

double tempPlasticStrain = status->givePlasticStrain();

// this->initGpForNewStep(gp);
double tempKappa = status->giveKappa();

FloatMatrix stiffnessMatrix;
this->giveStiffnessMatrix(stiffnessMatrix, ElasticStiffness, gp, atTime);

answer.resize(6);
answer.resize(3);
answer.zero();

/*First component is the slip one for which the stress should be limited using plasiticity (frictional slip between fibre and matrix). The other components are kept elastic. */
answer.at(1) = (totalStrain.at(1)-tempPlasticStrain)*stiffnessMatrix.at(1, 1);

double f = fabs(answer.at(1))-tauZero;


double f = fabs(answer.at(1)) - evaluateBondStress(tempKappa);

if(f>0){//plastic response.
//Reduced stress by increasing plastic strain.
tempPlasticStrain = tempPlasticStrain + sgn(answer.at(1))*f/stiffnessMatrix.at(1, 1);
tempKappa = tempKappa + f/stiffnessMatrix.at(1,1);
answer.at(1) = (totalStrain.at(1)-tempPlasticStrain)*stiffnessMatrix.at(1, 1);
}

//Compute the final stress components
for ( int i = 2; i <= 6; i++ ) { // only diagonal terms matter
for ( int i = 2; i <= 3; i++ ) { // only diagonal terms matter
answer.at(i) = stiffnessMatrix.at(i, i) * totalStrain.at(i);
}

//Set temp values in status needed for dissipation
status->letTempKappaBe(tempKappa);
status->letTempPlasticStrainBe(tempPlasticStrain);
status->letTempStrainVectorBe(totalStrain);
status->letTempStressVectorBe(answer);
Expand All @@ -178,20 +232,13 @@ namespace oofem {
{

/* Returns elastic moduli in reduced stress-strain space*/
answer.resize(6, 6);
answer.resize(3, 3);
answer.zero();

answer.at(1, 1) = 1.;
answer.at(2, 2) = this->alphaOne; // shear
answer.at(3, 3) = this->alphaOne; // shear
answer.at(4, 4) = this->alphaTwo; // shear
answer.at(5, 5) = this->alphaTwo; // shear
answer.at(6, 6) = this->alphaTwo; // shear


answer.times(this->eNormalMean);


answer.at(3, 3) = this->alphaOne; // shear
answer.times(this->kNormal);
}

LinkSlipStatus :: LinkSlipStatus(GaussPoint *g) : StructuralMaterialStatus(g)
Expand All @@ -216,14 +263,14 @@ namespace oofem {
LinkSlip :: giveThermalDilatationVector(FloatArray &answer,
GaussPoint *gp, TimeStep *tStep)
//
// returns a FloatArray(6) of initial strain vector
// returns a FloatArray(3) of initial strain vector
// caused by unit temperature in direction of
// gp (element) local axes
//
{
double alpha = this->give(tAlpha, gp);

answer.resize(6);
answer.resize(3);
answer.zero();

answer.at(1) = alpha;
Expand All @@ -234,37 +281,23 @@ namespace oofem {
{
MaterialStatus :: printOutputAt(file, tStep);


fprintf(file, " slip ");
for ( auto &var : strainVector ) {
fprintf( file, " %.4e", var );
fprintf(file, " jump ");
for ( auto &val : this->strainVector ) {
fprintf(file, " %.4e", val );
}

fprintf(file, "\n stress");
for ( auto &var : stressVector ) {
fprintf( file, " %.4e", var );
fprintf(file, "\n traction ");
for ( auto &val : this->stressVector ) {
fprintf(file, " %.4e", val );
}
fprintf(file, "\n");


fprintf(file, "plasticStrain %.8e\n", this->plasticStrain);
fprintf(file, "plasticStrain %.8e, kappa %.8e\n", this->plasticStrain, this->kappa);
return;
}

double
LinkSlip :: give(int aProperty, GaussPoint *gp)
{
if ( aProperty == eNormal_ID ) {
return 1.;
} else {
return LinearElasticMaterial :: give(aProperty, gp);
}
}



contextIOResultType
LinkSlipStatus :: saveContext(DataStream &stream, ContextMode mode, void *obj)
void
LinkSlipStatus :: saveContext(DataStream &stream, ContextMode mode)
//
// saves full information stored in this Status
// no temp variables stored
Expand All @@ -278,14 +311,17 @@ namespace oofem {
if ( !stream.write(plasticStrain) ) {
THROW_CIOERR(CIO_IOERR);
}


return CIO_OK;

// write a raw data
if ( !stream.write(kappa) ) {
THROW_CIOERR(CIO_IOERR);
}

}


contextIOResultType
LinkSlipStatus :: restoreContext(DataStream &stream, ContextMode mode, void *obj)
void
LinkSlipStatus :: restoreContext(DataStream &stream, ContextMode mode)
//
// restores full information stored in stream to this Status
//
Expand All @@ -296,9 +332,12 @@ namespace oofem {
if ( !stream.read(plasticStrain) ) {
THROW_CIOERR(CIO_IOERR);
}


return CIO_OK;

// read raw data
if ( !stream.read(kappa) ) {
THROW_CIOERR(CIO_IOERR);
}

}

void
Expand All @@ -311,20 +350,17 @@ namespace oofem {
{
StructuralMaterialStatus :: updateYourself(atTime);
this->plasticStrain = this->tempPlasticStrain;
this->kappa = this->tempKappa;
}




int
LinkSlip :: giveIPValue(FloatArray &answer,
GaussPoint *gp,
InternalStateType type,
TimeStep *atTime)
{

// return LinearElasticMaterial :: giveIPValue(answer, gp, type, atTime);
return Material :: giveIPValue(answer, gp, type, atTime);


}
}
Loading