void MisesMatNl :: NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s, GaussPoint *gp, TimeStep *tStep) { double coeff; MisesMatNlStatus *status = static_cast< MisesMatNlStatus * >( this->giveStatus(gp) ); std :: list< localIntegrationRecord > *list = status->giveIntegrationDomainList(); MisesMatNl *rmat; 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< MisesMatNl * >( lir.nearGp->giveMaterial() ); if ( rmat ) { rmat->giveRemoteNonlocalStiffnessContribution(lir.nearGp, rloc, s, rcontrib, tStep); coeff = gp->giveElement()->computeVolumeAround(gp) * lir.weight / status->giveIntegrationScale(); contrib.clear(); contrib.plusDyadUnsym(lcontrib, rcontrib, - 1.0 * coeff); dest.assemble(loc, rloc, contrib); } } }
void MisesMatNl :: NonlocalMaterialStiffnessInterface_addIPContribution(SparseMtrx &dest, const UnknownNumberingScheme &s, GaussPoint *gp, TimeStep *atTime) { double coeff; MisesMatNlStatus *status = ( MisesMatNlStatus * ) this->giveStatus(gp); std::list< localIntegrationRecord > *list = status->giveIntegrationDomainList(); std::list< localIntegrationRecord > :: iterator pos; MisesMatNl *rmat; FloatArray rcontrib, lcontrib; IntArray loc, rloc; FloatMatrix contrib; if ( this->giveLocalNonlocalStiffnessContribution(gp, loc, s, lcontrib, atTime) == 0 ) { return; } for ( pos = list->begin(); pos != list->end(); ++pos ) { rmat = ( MisesMatNl * )( ( * pos ).nearGp )->giveMaterial(); if ( rmat->giveClassID() == this->giveClassID() ) { rmat->giveRemoteNonlocalStiffnessContribution( ( * pos ).nearGp, rloc, s, rcontrib, atTime ); coeff = gp->giveElement()->computeVolumeAround(gp) * ( * pos ).weight / status->giveIntegrationScale(); int i, j, dim1 = loc.giveSize(), dim2 = rloc.giveSize(); contrib.resize(dim1, dim2); for ( i = 1; i <= dim1; i++ ) { for ( j = 1; j <= dim2; j++ ) { contrib.at(i, j) = -1.0 * lcontrib.at(i) * rcontrib.at(j) * coeff; } } dest.assemble(loc, rloc, contrib); } } }