本文整理汇总了C++中StructuralMaterial::giveCharacteristicMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ StructuralMaterial::giveCharacteristicMatrix方法的具体用法?C++ StructuralMaterial::giveCharacteristicMatrix怎么用?C++ StructuralMaterial::giveCharacteristicMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StructuralMaterial
的用法示例。
在下文中一共展示了StructuralMaterial::giveCharacteristicMatrix方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: giveNormalElasticStiffnessMatrix
void
RCM2Material :: giveNormalElasticStiffnessMatrix(FloatMatrix &answer,
MatResponseForm form, MatResponseMode rMode,
GaussPoint *gp, TimeStep *atTime,
const FloatMatrix &dir)
//
// return Elastic Stiffness matrix for normal Stresses
// taking into account the directions of normal stresses
// (not supported now)
//
{
StructuralMaterial *lMat = static_cast< StructuralMaterial * >( this->giveLinearElasticMaterial() );
FloatMatrix de, fullAnswer(3, 3);
IntArray mask;
int i, j, sd;
lMat->giveCharacteristicMatrix(de, FullForm, rMode, gp, atTime);
// copy first 3x3 submatrix to answer
for ( i = 1; i <= 3; i++ ) {
for ( j = 1; j <= 3; j++ ) {
fullAnswer.at(i, j) = de.at(i, j);
}
}
if ( form == FullForm ) { // 3x3 full form required
answer = fullAnswer;
} else {
// reduced form for only
// nonzero normal stresses
//
// first find spatial dimension of problem
sd = 0;
for ( i = 1; i <= 3; i++ ) {
if ( ( this->giveStressStrainComponentIndOf(FullForm, gp->giveMaterialMode(), i) ) ) {
sd++;
}
}
answer.resize(sd, sd);
answer.zero();
// copy fullAnswer to reduced one
this->giveStressStrainMask( mask, FullForm, gp->giveMaterialMode() );
for ( i = 1; i <= 3; i++ ) {
for ( j = 1; j <= 3; j++ ) {
if ( mask.at(i) && mask.at(j) ) {
answer.at( mask.at(i), mask.at(j) ) = fullAnswer.at(i, j);
}
}
}
return;
}
}
示例2: giveEffectiveMaterialStiffnessMatrix
void
RCM2Material :: giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer,
MatResponseForm form,
MatResponseMode rMode, GaussPoint *gp,
TimeStep *atTime)
//
// returns effective material stiffness matrix in full form
// for gp stress strain mode
//
{
RCM2MaterialStatus *status = ( RCM2MaterialStatus * ) this->giveStatus(gp);
StructuralMaterial *lMat = static_cast< StructuralMaterial * >( this->giveLinearElasticMaterial() );
int numberOfActiveCracks = status->giveNumberOfTempActiveCracks();
int i, j, indi, indj, ii, jj;
double G, princStressDis, princStrainDis;
FloatMatrix de, invDe, compliance, dcr, d, df, t, tt, tempCrackDirs;
FloatArray principalStressVector, principalStrainVector;
IntArray mask;
if ( ( rMode == ElasticStiffness ) || ( numberOfActiveCracks == 0 ) ) {
lMat->giveCharacteristicMatrix(answer, form, rMode, gp, atTime);
return;
}
// this->updateActiveCrackMap(gp) must be done after restart.
this->updateActiveCrackMap(gp);
status->giveTempCrackDirs(tempCrackDirs);
this->giveNormalElasticStiffnessMatrix(de, ReducedForm, rMode, gp, atTime,
tempCrackDirs);
invDe.beInverseOf(de);
this->giveCrackedStiffnessMatrix(dcr, rMode, gp, atTime);
this->giveStressStrainMask( mask, ReducedForm, gp->giveMaterialMode() );
compliance.resize( mask.giveSize(), mask.giveSize() );
// we will set
// first we set compliances for normal streses in
// local coordinate system defined by crackplane
for ( i = 1; i <= 3; i++ ) {
if ( ( indi = this->giveStressStrainComponentIndOf(FullForm, gp->giveMaterialMode(), i) ) ) {
for ( j = 1; j <= 3; j++ ) {
if ( ( indj = this->giveStressStrainComponentIndOf(FullForm, gp->giveMaterialMode(), j) ) ) {
compliance.at(indi, indj) += invDe.at(i, j);
}
}
if ( status->isCrackActive(i) ) {
if ( dcr.at(i, i) <= 1.e-8 ) {
compliance.at(indi, indi) *= rcm2_BIGNUMBER;
} else {
compliance.at(indi, indi) += 1. / dcr.at(i, i);
}
}
}
}
status->getPrincipalStressVector(principalStressVector);
status->getPrincipalStrainVector(principalStrainVector);
// now remain to set shears
G = this->give(pscm_G, gp);
for ( i = 4; i <= 6; i++ ) {
if ( ( indi = this->giveStressStrainComponentIndOf(FullForm, gp->giveMaterialMode(), i) ) ) {
if ( i == 4 ) {
ii = 2;
jj = 3;
} else if ( i == 5 ) {
ii = 1;
jj = 3;
} else {
ii = 1;
jj = 2;
}
princStressDis = principalStressVector.at(ii) -
principalStressVector.at(jj);
princStrainDis = principalStrainVector.at(ii) -
principalStrainVector.at(jj);
if ( fabs(princStrainDis) < rcm_SMALL_STRAIN ) {
compliance.at(indi, indi) = 1. / G;
} else if ( fabs(princStressDis) < 1.e-8 ) {
compliance.at(indi, indi) = rcm2_BIGNUMBER;
} else {
compliance.at(indi, indi) = 2 * princStrainDis / princStressDis;
}
}
}
// now we invert compliance to get stiffness in reduced space
d.beInverseOf(compliance);
// delete compliance;
//
// now let d to grow to Full Format
//
this->giveStressStrainMask( mask, ReducedForm, gp->giveMaterialMode() );
df.beSubMatrixOfSizeOf(d, mask, 6);
//
// final step - transform stiffnes to global c.s
//
this->giveStressVectorTranformationMtrx(t, tempCrackDirs, 1);
//.........这里部分代码省略.........