本文整理汇总了C++中Domain::giveMaterials方法的典型用法代码示例。如果您正苦于以下问题:C++ Domain::giveMaterials方法的具体用法?C++ Domain::giveMaterials怎么用?C++ Domain::giveMaterials使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Domain
的用法示例。
在下文中一共展示了Domain::giveMaterials方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: averageOverElements
// needed for CemhydMat
void
NonStationaryTransportProblem :: averageOverElements(TimeStep *tStep)
{
///@todo Verify this, the function is completely unused.
Domain *domain = this->giveDomain(1);
FloatArray vecTemperature;
for ( auto &elem : domain->giveElements() ) {
TransportMaterial *mat = dynamic_cast< CemhydMat * >( elem->giveMaterial() );
if ( mat ) {
for ( GaussPoint *gp: *elem->giveDefaultIntegrationRulePtr() ) {
elem->giveIPValue(vecTemperature, gp, IST_Temperature, tStep);
//mat->IP_volume += dV;
//mat->average_temp += vecState.at(1) * dV;
}
}
}
for ( auto &mat : domain->giveMaterials() ) {
CemhydMat *cem = dynamic_cast< CemhydMat * >( mat.get() );
if ( cem ) {
//cem->average_temp /= mat->IP_volume;
}
}
}
示例2: checkConsistency
int StructuralMaterialEvaluator :: checkConsistency()
{
Domain *d = this->giveDomain(1);
for ( auto &mat : d->giveMaterials() ) {
if ( !dynamic_cast< StructuralMaterial * >( mat.get() ) ) {
OOFEM_LOG_ERROR("Material %d is not a StructuralMaterial", mat->giveNumber());
return 0;
}
}
return EngngModel :: checkConsistency();
}
示例3: applyIC
void
NonStationaryTransportProblem :: applyIC(TimeStep *stepWhenIcApply)
{
Domain *domain = this->giveDomain(1);
int neq = this->giveNumberOfDomainEquations( 1, EModelDefaultEquationNumbering() );
FloatArray *solutionVector;
double val;
#ifdef VERBOSE
OOFEM_LOG_INFO("Applying initial conditions\n");
#endif
UnknownsField->advanceSolution(stepWhenIcApply);
solutionVector = UnknownsField->giveSolutionVector(stepWhenIcApply);
solutionVector->resize(neq);
solutionVector->zero();
for ( auto &node : domain->giveDofManagers() ) {
for ( Dof *dof: *node ) {
// ask for initial values obtained from
// bc (boundary conditions) and ic (initial conditions)
if ( !dof->isPrimaryDof() ) {
continue;
}
int jj = dof->__giveEquationNumber();
if ( jj ) {
val = dof->giveUnknown(VM_Total, stepWhenIcApply);
solutionVector->at(jj) = val;
//update in dictionary, if the problem is growing/decreasing
if ( this->changingProblemSize ) {
dof->updateUnknownsDictionary(stepWhenIcApply, VM_Total, val);
}
}
}
}
//project initial temperature to integration points
// for ( int j = 1; j <= nelem; j++ ) {
// domain->giveElement(j)->updateInternalState(stepWhenIcApply);
// }
#ifdef __CEMHYD_MODULE
// Not relevant in linear case, but needed for CemhydMat for temperature averaging before solving balance equations
// Update element state according to given ic
for ( auto &elem : domain->giveElements() ) {
TransportElement *element = static_cast< TransportElement * >( elem.get() );
CemhydMat *cem = dynamic_cast< CemhydMat * >( element->giveMaterial() );
//assign status to each integration point on each element
if ( cem ) {
cem->initMaterial(element); //create microstructures and statuses on specific GPs
element->updateInternalState(stepWhenIcApply); //store temporary unequilibrated temperature
element->updateYourself(stepWhenIcApply); //store equilibrated temperature
cem->clearWeightTemperatureProductVolume(element);
cem->storeWeightTemperatureProductVolume(element, stepWhenIcApply);
}
}
//perform averaging on each material instance of CemhydMatClass
for ( auto &mat : domain->giveMaterials() ) {
CemhydMat *cem = dynamic_cast< CemhydMat * >( mat.get() );
if ( cem ) {
cem->averageTemperature();
}
}
#endif //__CEMHYD_MODULE
}