void SolutionbasedShapeFunction :: giveValueAtPoint(FloatArray &answer, const FloatArray &coords, IntArray &dofIDs, EngngModel &myEngngModel) { answer.resize( dofIDs.giveSize() ); FloatArray closest, lcoords, values; Element *elementAtCoords = myEngngModel.giveDomain(1)->giveSpatialLocalizer()->giveElementClosestToPoint(lcoords, closest, coords, 1); if ( elementAtCoords == NULL ) { OOFEM_WARNING("Cannot find element closest to point"); coords.pY(); } EIPrimaryUnknownMapperInterface *em = dynamic_cast< EIPrimaryUnknownMapperInterface * >( elementAtCoords->giveInterface(EIPrimaryUnknownMapperInterfaceType) ); IntArray eldofids; em->EIPrimaryUnknownMI_givePrimaryUnknownVectorDofID(eldofids); em->EIPrimaryUnknownMI_computePrimaryUnknownVectorAtLocal(VM_Total, thisTimestep, lcoords, values); for ( int i = 1; i <= dofIDs.giveSize(); i++ ) { for ( int j = 1; j <= eldofids.giveSize(); j++ ) { if ( dofIDs.at(i) == eldofids.at(j) ) { answer.at(i) = values.at(j); break; } } } }
void SolutionbasedShapeFunction :: giveValueAtPoint(FloatArray &answer, const FloatArray &coords, IntArray &dofIDs, EngngModel &myEngngModel) { answer.resize( dofIDs.giveSize() ); FloatArray closest, lcoords, values; Element *elementAtCoords = myEngngModel.giveDomain(1)->giveSpatialLocalizer()->giveElementClosestToPoint(lcoords, closest, coords, 1); if ( elementAtCoords == NULL ) { OOFEM_WARNING("Cannot find element closest to point"); coords.pY(); return; } IntArray eldofids; elementAtCoords->giveElementDofIDMask(eldofids); elementAtCoords->computeField(VM_Total, thisTimestep, lcoords, values); for ( int i = 1; i <= dofIDs.giveSize(); i++ ) { for ( int j = 1; j <= eldofids.giveSize(); j++ ) { if ( dofIDs.at(i) == eldofids.at(j) ) { answer.at(i) = values.at(j); break; } } } }