void SolutionbasedShapeFunction :: splitBoundaryNodeIDs(modeStruct &mode, Element &e, IntArray &bnodes, IntArray &pList, IntArray &mList, IntArray &zList, FloatMatrix &nodeValues) { pList.clear(); mList.clear(); zList.clear(); for ( int j = 1; j <= bnodes.giveSize(); j++ ) { DofManager *dman = e.giveDofManager( bnodes.at(j) ); bool isZero = false; bool isPlus = false; bool isMinus = false; whichBoundary(* dman->giveCoordinates(), isPlus, isMinus, isZero); if ( isZero ) { zList.insertSorted(j); } else if ( isPlus ) { pList.insertSorted(j); } else if ( isMinus ) { mList.insertSorted(j); } // Find global DofManager and fetch nodal values for ( size_t k = 0; k < mode.SurfaceData.size(); k++ ) { if ( mode.SurfaceData.at(k)->DofMan == dman ) { int IndexOfDofIDItem = 0; for ( int l = 1; l <= dofs.giveSize(); l++ ) { if ( dofs.at(l) == mode.SurfaceData.at(k)->DofID ) { IndexOfDofIDItem = l; break; } } nodeValues.at(IndexOfDofIDItem, j) = mode.SurfaceData.at(k)->value; } } } }