54 typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
55 typedef Teuchos::ScalarTraits<MagnitudeType> MT;
141 test_->clearStatus();
148 void setAuxVals(
const std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &vals) {
150 ivals_.resize(rvals_.size(),MT::zero());
158 void setAuxVals(
const std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &rvals,
const std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &ivals) {
168 void getAuxVals(std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &rvals, std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &ivals)
const {
179 std::ostream&
print(std::ostream& os,
int indent = 0)
const;
184 std::vector<int> ind_;
186 std::vector<MagnitudeType> rvals_, ivals_;
187 Teuchos::RCP<SortManager<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> > sorter_;
188 Teuchos::RCP<StatusTest<ScalarType,MV,OP> > test_;
194 : state_(
Undefined), ind_(0), quorum_(quorum), rvals_(0), ivals_(0), sorter_(sorter), test_(test)
196 TEUCHOS_TEST_FOR_EXCEPTION(sorter_ == Teuchos::null,
StatusTestError,
"StatusTestWithOrdering::constructor() was passed null pointer for constituent SortManager.");
197 TEUCHOS_TEST_FOR_EXCEPTION(test_ == Teuchos::null,
StatusTestError,
"StatusTestWithOrdering::constructor() was passed null pointer for constituent StatusTest.");
227 test_->checkStatus(solver);
228 std::vector<int> cwhch( test_->whichVecs() );
231 std::vector<Value<ScalarType> > solval = solver->
getRitzValues();
232 int numsolval = solval.size();
233 int numauxval = rvals_.size();
234 int numallval = numsolval + numauxval;
236 if (numallval == 0) {
242 std::vector<MagnitudeType> allvalr(numallval), allvali(numallval);
244 for (
int i=0; i<numsolval; ++i) {
245 allvalr[i] = solval[i].realpart;
246 allvali[i] = solval[i].imagpart;
249 std::copy(rvals_.begin(),rvals_.end(),allvalr.begin()+numsolval);
250 std::copy(ivals_.begin(),ivals_.end(),allvali.begin()+numsolval);
253 std::vector<int> perm(numallval);
254 sorter_->sort(allvalr,allvali,Teuchos::rcpFromRef(perm),numallval);
257 std::vector<int> allpass(cwhch.size() + numauxval);
258 std::copy(cwhch.begin(),cwhch.end(),allpass.begin());
259 for (
int i=0; i<numauxval; i++) {
260 allpass[cwhch.size()+i] = -(i+1);
264 int numsig = quorum_ < numallval ? quorum_ : numallval;
266 std::vector<int> mostsig(numsig);
267 for (
int i=0; i<numsig; ++i) {
268 mostsig[i] = perm[i];
271 if (mostsig[i] >= numsolval) {
272 mostsig[i] = mostsig[i]-numsolval-numauxval;
281 std::vector<int>::iterator end;
282 std::sort(mostsig.begin(),mostsig.end());
283 std::sort(allpass.begin(),allpass.end());
284 end = std::set_intersection(mostsig.begin(),mostsig.end(),allpass.begin(),allpass.end(),ind_.begin());
285 ind_.resize(end - ind_.begin());
288 if (ind_.size() >= (
unsigned int)quorum_) {