本文整理汇总了C++中StructuralElement::computeResultingIPEigenstrainAt方法的典型用法代码示例。如果您正苦于以下问题:C++ StructuralElement::computeResultingIPEigenstrainAt方法的具体用法?C++ StructuralElement::computeResultingIPEigenstrainAt怎么用?C++ StructuralElement::computeResultingIPEigenstrainAt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StructuralElement
的用法示例。
在下文中一共展示了StructuralElement::computeResultingIPEigenstrainAt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doOutput
void
HOMExportModule :: doOutput(TimeStep *tStep, bool forcedOutput)
{
if ( !( testTimeStepOutput(tStep) || forcedOutput ) ) {
return;
}
Domain *d = emodel->giveDomain(1);
int nelem = d->giveNumberOfElements();
double dV, VolTot = 0.;
FloatArray vecState, vecFlow, sumFlow(3);
FloatArray internalSource, capacity;
FloatArray answerArr, answerArr1;
FloatMatrix answerMtrx;
IntArray Mask;
FloatMatrix baseGCS;
sumFlow.zero();
domainType domType = d->giveDomainType();
if ( domType == _HeatTransferMode || domType == _HeatMass1Mode ) {
#ifdef __TM_MODULE
double sumState = 0.;
TransportElement *transpElem;
for ( int ielem = 1; ielem <= nelem; ielem++ ) {
Element *elem = d->giveElement(ielem);
if ( this->matnum.giveSize() == 0 || this->matnum.contains( elem->giveMaterial()->giveNumber() ) ) {
for ( GaussPoint *gp: *elem->giveDefaultIntegrationRulePtr() ) {
dV = elem->computeVolumeAround(gp);
VolTot += dV;
elem->giveIPValue(vecState, gp, IST_Temperature, tStep);
elem->giveIPValue(vecFlow, gp, IST_TemperatureFlow, tStep);
sumState += vecState.at(1) * dV;
vecFlow.resize(3);
vecFlow.times(dV);
sumFlow += vecFlow;
}
}
}
sumState *= ( 1. / VolTot * this->scale );
fprintf(this->stream, "%e % e ", tStep->giveTargetTime(), sumState);
sumFlow.times(1. / VolTot * this->scale);
fprintf( this->stream, "% e % e % e ", sumFlow.at(1), sumFlow.at(2), sumFlow.at(3) );
//add total heat for each material - accumulated energy due to material capacity (J for heat) and internal source (J for heat)
internalSource.resize( d->giveNumberOfCrossSectionModels() );
capacity.resize( d->giveNumberOfCrossSectionModels() );
for ( int ielem = 1; ielem <= nelem; ielem++ ) {
transpElem = static_cast< TransportElement * >( d->giveElement(ielem) );
transpElem->computeInternalSourceRhsVectorAt(answerArr, tStep, VM_Total);
internalSource.at( transpElem->giveCrossSection()->giveNumber() ) += answerArr.sum();
transpElem->giveCharacteristicMatrix(answerMtrx, CapacityMatrix, tStep);
transpElem->computeVectorOf(VM_Incremental, tStep, answerArr);
answerArr1.beProductOf(answerMtrx, answerArr);
capacity.at( transpElem->giveCrossSection()->giveNumber() ) -= answerArr1.sum();
}
internalSource.times( tStep->giveTimeIncrement() );
internalSourceEnergy.add(internalSource);
capacityEnergy.add(capacity);
for ( int i = 1; i <= internalSourceEnergy.giveSize(); i++ ) {
fprintf( this->stream, "% e ", internalSourceEnergy.at(i) );
}
fprintf(this->stream, " ");
for ( int i = 1; i <= capacityEnergy.giveSize(); i++ ) {
fprintf( this->stream, "% e ", capacityEnergy.at(i) );
}
fprintf(this->stream, "\n");
#endif
} else { //structural analysis
#ifdef __SM_MODULE
StructuralElement *structElem;
//int nnodes = d->giveNumberOfDofManagers();
FloatArray VecStrain, VecStress, VecEigStrain, VecEigStrainReduced, tempStrain(6), tempStress(6), tempEigStrain(6), SumStrain(6), SumStress(6), SumEigStrain(6), tempFloatAr, damage;
double sumDamage = 0.;
//stress and strain vectors are always in global c.s.
SumStrain.zero(); //xx, yy, zz, yz, zx, xy
SumStress.zero();
SumEigStrain.zero();
for ( int ielem = 1; ielem <= nelem; ielem++ ) {
Element *elem = d->giveElement(ielem);
tempStrain.zero();
tempStress.zero();
tempEigStrain.zero();
if ( this->matnum.giveSize() == 0 || this->matnum.contains( elem->giveMaterial()->giveNumber() ) ) {
for ( GaussPoint *gp: *elem->giveDefaultIntegrationRulePtr() ) {
structElem = static_cast< StructuralElement * >(elem);
// structElem->computeResultingIPEigenstrainAt(VecEigStrain, tStep, gp, VM_Incremental);
structElem->computeResultingIPEigenstrainAt(VecEigStrainReduced, tStep, gp, VM_Total);
if ( VecEigStrainReduced.giveSize() == 0 ) {
VecEigStrain.resize(0);
} else {
( ( StructuralMaterial * ) structElem->giveMaterial() )->giveFullSymVectorForm( VecEigStrain, VecEigStrainReduced, gp->giveMaterialMode() );
}
dV = elem->computeVolumeAround(gp);
elem->giveIPValue(VecStrain, gp, IST_StrainTensor, tStep);
elem->giveIPValue(VecStress, gp, IST_StressTensor, tStep);
elem->giveIPValue(damage, gp, IST_DamageTensor, tStep);
//.........这里部分代码省略.........