std :: list< localIntegrationRecord > * TrabBoneNL3D :: NonlocalMaterialStiffnessInterface_giveIntegrationDomainList(GaussPoint *gp) { TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) ); this->buildNonlocalPointTable(gp); return nlStatus->giveIntegrationDomainList(); }
void TrabBoneNL3D :: NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s, GaussPoint *gp, TimeStep *tStep) { TrabBoneNL3DStatus *nlStatus = static_cast< TrabBoneNL3DStatus * >( this->giveStatus(gp) ); std :: list< localIntegrationRecord > *list = nlStatus->giveIntegrationDomainList(); TrabBoneNL3D *rmat; double coeff; FloatArray rcontrib, lcontrib; IntArray loc, rloc; FloatMatrix contrib; if ( this->giveLocalNonlocalStiffnessContribution(gp, loc, s, lcontrib, tStep) == 0 ) { return; } for ( auto &lir: *list ) { rmat = dynamic_cast< TrabBoneNL3D * >( lir.nearGp->giveMaterial() ); if ( rmat ) { rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep); coeff = gp->giveElement()->computeVolumeAround(gp) * lir.weight / nlStatus->giveIntegrationScale(); contrib.clear(); contrib.plusDyadUnsym(lcontrib, rcontrib, - 1.0 * coeff); dest.assemble(loc, rloc, contrib); } } }