avtDataObject_p avtOriginalDataMinMaxQuery::ApplyFilters(avtDataObject_p inData) { Preparation(inData); avtDataRequest_p dataRequest = inData->GetOriginatingSource()->GetFullDataRequest(); if (dataRequest->GetVariable() != queryAtts.GetVariables()[0] || dataRequest->GetTimestep() != queryAtts.GetTimeStep() || timeVarying) { dataRequest = new avtDataRequest(queryAtts.GetVariables()[0].c_str(), queryAtts.GetTimeStep(), dataRequest->GetRestriction()); } avtContract_p contract = new avtContract(dataRequest, queryAtts.GetPipeIndex()); if (ParallelizingOverTime()) { // Make sure we set up our request to do streaming. contract->SetOnDemandStreaming(true); contract->UseLoadBalancing(false); } avtDataObject_p temp; CopyTo(temp, inData); eef->SetInput(temp); avtDataObject_p retObj = eef->GetOutput(); retObj->Update(contract); return retObj; }
void avtQueryOverTimeFilter::CreateFinalOutput() { if (ParallelizingOverTime()) { double *totalQRes; int *qResMsgs; CollectDoubleArraysOnRootProc(totalQRes, qResMsgs, &(qRes[0]), qRes.size()); double *totalTimes; int *timesMsgs; CollectDoubleArraysOnRootProc(totalTimes, timesMsgs, &(times[0]), times.size()); if (PAR_Rank() == 0) { int i; int nResults = 0; int maxIterations = 0; for (i = 0 ; i < PAR_Size() ; i++) { nResults += timesMsgs[i]; maxIterations = (timesMsgs[i] > maxIterations ? timesMsgs[i] : maxIterations); } std::vector<double> finalQRes(nResults, 0.); std::vector<double> finalTimes(nResults, 0.); int index = 0; for (int j = 0 ; j < maxIterations ; j++) { int loc = 0; for (i = 0 ; i < PAR_Size() ; i++) { if (timesMsgs[i] > j) { finalQRes[index] = totalQRes[loc+j]; finalTimes[index] = totalTimes[loc+j]; index++; } loc += timesMsgs[i]; } } qRes = finalQRes; times = finalTimes; delete [] totalQRes; delete [] qResMsgs; delete [] totalTimes; delete [] timesMsgs; } else { SetOutputDataTree(new avtDataTree()); finalOutputCreated = true; return; } } if (qRes.size() == 0) { debug4 << "Query failed at all timesteps" << endl; avtCallback::IssueWarning("Query failed at all timesteps"); avtDataTree_p dummy = new avtDataTree(); SetOutputDataTree(dummy); return; } if (useTimeForXAxis && qRes.size()/nResultsToStore != times.size()) { debug4 << "QueryOverTime ERROR, number of results (" << qRes.size() << ") does not equal number " << "of timesteps (" << times.size() << ")." << endl; avtCallback::IssueWarning( "\nQueryOverTime error, number of results does not equal " "number of timestates. Curve being created may be missing " "some values. Please contact a VisIt developer."); } else if (nResultsToStore > 1 && qRes.size() % nResultsToStore != 0) { debug4 << "QueryOverTime ERROR, number of results (" << qRes.size() << ") is not a multiple of " << nResultsToStore << "and therefore cannot generate x,y pairs." << endl; avtCallback::IssueWarning( "\nQueryOverTime error, number of results is incorrect. " "Curve being created may be missing some values. " "Please contact a VisIt developer."); } if (skippedTimes.size() != 0) { std::ostringstream osm; osm << "\nQueryOverTime (" << atts.GetQueryAtts().GetName().c_str() << ") experienced\n" << "problems with the following timesteps and \n" << "skipped them while generating the curve:\n "; for (int j = 0; j < skippedTimes.size(); j++) osm << skippedTimes[j] << " "; osm << "\nLast message received: " << errorMessage.c_str() << ends; debug4 << osm.str() << endl; avtCallback::IssueWarning(osm.str().c_str()); } stringVector vars = atts.GetQueryAtts().GetVariables(); bool multiCurve = false; if (atts.GetQueryAtts().GetQueryInputParams().HasNumericEntry("curve_plot_type")) { multiCurve = (atts.GetQueryAtts().GetQueryInputParams().GetEntry("curve_plot_type")->ToInt() == 1); } avtDataTree_p tree = CreateTree(times, qRes, vars, multiCurve); SetOutputDataTree(tree); finalOutputCreated = true; }
void avtQueryOverTimeFilter::Execute(void) { // // The real output will be created after all time steps have completed, // so create a dummy output to pass along for now. // avtDataTree_p dummy = new avtDataTree(); // // Set up error conditions and return early if any processor had an // error upstream. // int hadError = 0; if (GetInput()->GetInfo().GetValidity().HasErrorOccurred()) { errorMessage = GetInput()->GetInfo().GetValidity().GetErrorMessage(); hadError = 1; } if (! ParallelizingOverTime()) hadError = UnifyMaximumValue(hadError); if (hadError) { SetOutputDataTree(dummy); success = false; return; } // // Set up the query. // QueryAttributes qatts = atts.GetQueryAtts(); qatts.SetTimeStep(currentTime); avtDataObjectQuery *query = avtQueryFactory::Instance()-> CreateQuery(&qatts); query->SetInput(GetInput()); if (ParallelizingOverTime()) { query->SetParallelizingOverTime(true); } if (strncmp(query->GetType(), "avtVariableByNodeQuery",22) == 0) { PickAttributes patts = atts.GetPickAtts(); ((avtVariableByNodeQuery*)query)->SetPickAttsForTimeQuery(&patts); } else if (strncmp(query->GetType(), "avtVariableByZoneQuery",22) == 0) { PickAttributes patts = atts.GetPickAtts(); ((avtVariableByZoneQuery*)query)->SetPickAttsForTimeQuery(&patts); } else if (strncmp(query->GetType(), "avtLocateAndPickZoneQuery",25) == 0) { PickAttributes patts = atts.GetPickAtts(); ((avtLocateAndPickZoneQuery*)query)->SetPickAttsForTimeQuery(&patts); } else if (strncmp(query->GetType(), "avtLocateAndPickNodeQuery",25) == 0) { PickAttributes patts = atts.GetPickAtts(); ((avtLocateAndPickNodeQuery*)query)->SetPickAttsForTimeQuery(&patts); } query->SetTimeVarying(true); query->SetSILRestriction(currentSILR); // // HokeyHack ... we want only 1 curve, so limit the // query to 1 variable to avoid unnecessary processing. // if (nResultsToStore==1) { stringVector useThisVar; useThisVar.push_back(qatts.GetVariables()[0]); qatts.SetVariables(useThisVar); } // // End HokeyHack. // TRY { query->PerformQuery(&qatts); } CATCHALL { SetOutputDataTree(dummy); success = false; delete query; RETHROW; } ENDTRY SetOutputDataTree(dummy); delete query; doubleVector results = qatts.GetResultsValue(); if (results.size() == 0) { success = false; return; } else { success = true; } // // Store the necessary time value // if (useTimeForXAxis) { double tval; switch(atts.GetTimeType()) { case QueryOverTimeAttributes::Cycle: tval = (double) GetInput()->GetInfo().GetAttributes().GetCycle(); break; case QueryOverTimeAttributes::DTime: tval = GetInput()->GetInfo().GetAttributes().GetTime(); break; case QueryOverTimeAttributes::Timestep: default: // timestep tval = (double)currentTime; break; } times.push_back(tval); } for (int i = 0; i < nResultsToStore; i++) qRes.push_back(results[i]); }