13 #define EPS0 8.85418782e-12 // permittivity of free space [F/m] 14 #define MU0 1.25663706e-6 // permeability of free space [H/m] 19 unsigned int nTimes,std::ostream &outStream);
22 void ReportCounters(
long long **inCounters,
const char **
timerNames,
23 std::vector<std::string> &papiCounterNames,
24 unsigned int nTimes,std::ostream &outStream);
31 typedef DomainBaseType::OperatorType
operator_t;
39 std::ostringstream messageStream;
53 DomainBaseType::gridvector &simGrids(simDomain.Grids());
54 DomainBaseType::statevector &gridStates(simDomain.States());
55 DomainBaseType::statevector &gridParams(simDomain.Params());
57 operator_t &sbpOperator(simDomain.Operator());
60 grid_t &simGrid(*simGrids[0]);
61 state_t &simState(*gridStates[0]);
62 state_t ¶mState(*gridParams[0]);
68 comm_t &domainCommunicator(simDomain.Communicator());
70 const std::vector<std::string> &domainGridNames(simDomain.GridNames());
71 const std::string &gridName(domainGridNames[0]);
73 int spatialOrder = simDomain.SpatialOrder();
74 int interiorOrder = (spatialOrder - 1)*2;
76 StdOut(messageStream.str());
79 std::vector<size_t> &
gridSizes(simGrid.GridSizes());
83 halo_t &simHalo(simGrid.Halo());
97 std::vector<double> EfieldAll(3, 0.0);
98 std::vector<double> BfieldAll(3, 0.0);
99 std::vector<double> JAll(3, 0.0);
100 double epsilonAll =
EPS0;
105 ErrOut(
"Failed to initialize in entire buffer.\n");
106 domainCommunicator.SetExit(1);
123 double *CFLPtr = paramState.template GetFieldBuffer<double>(
"CFL");
124 double CFLValue = *CFLPtr;
128 ErrOut(
"Failed to initialize parameters.\n");
129 domainCommunicator.SetExit(1);
141 messageStream <<
"Initializing flow on Domain (" << simDomain.Name()
142 <<
") with initialization case (" << initName <<
")." << std::endl
145 messageStream <<
")" << std::endl
148 messageStream <<
")" << std::endl;
149 StdOut(messageStream.str(),2);
153 initName,initParams,initFlags,0)) {
154 ErrOut(
"Solution initialization failed.\n");
155 domainCommunicator.SetExit(1);
161 if(domainCommunicator.Check())
173 if(MaxwellRHS.Initialize(simGrid,simState,paramState,sbpOperator)) {
178 MaxwellRHS.SetDomainBoundaries(simDomain.DomainBoundary(0));
179 MaxwellRHS.SetDomainBCs(simDomain.BCs());
181 simDomain.SetRHS(MaxwellRHS);
193 StdOut(messageStream.str(),2);
205 bool masterThread =
true;
208 myThreadId = omp_get_thread_num();
209 masterThread = (myThreadId == 0);
223 StdOut(
"Partitioning grid among threads.\n",3);
228 std::vector<int> numThreadsDim;
229 if(simGrid.SetupThreads(numThreadsDim))
231 MaxwellRHS.InitThreadIntervals();
236 StdOut(
"Partitioning grid among threads done.\n",3);
241 ErrOut(
"Grid threading setup failed.\n");
246 StdOut(
"Threads set up, syncing advancer intervals.\n",3);
259 StdOut(
"Intervals sync'd, syncing states.\n",3);
273 StdOut(
"States sync'd.\n",3);
284 messageStream <<
"Running PlasCom2 with PBS grid with: " << std::endl
285 <<
"DomainName: " << domainName << std::endl
286 <<
"GridName: " << gridName << std::endl
289 messageStream <<
")" << std::endl
291 partitionInterval.PrettyPrint(messageStream);
292 messageStream << std::endl
293 <<
"Buffer Sizes: (";
295 messageStream <<
")" << std::endl
297 partitionBufferInterval.PrettyPrint(messageStream);
298 messageStream << std::endl
299 <<
"Number of Threads: (";
301 messageStream <<
")" << std::endl << std::endl
302 <<
"SBP Order: " << interiorOrder << std::endl
303 <<
"Current Step: " <<
iStep << std::endl
307 StdOut(messageStream.str(),2);
316 StdOut(
"Beginning stepping.\n",3);
325 for(
int iiStep = 0; iiStep <
numStepsMax; iiStep++) {
335 messageStream <<
"Step = " << iiStep << std::endl;
336 StdOut(messageStream.str(),1);
366 messageStream <<
"Performing IO at step " << iiStep << std::endl;
367 StdOut(messageStream.str(),1);
397 ErrOut(
"Advancer failed:\n");
398 ErrOut(messageStream.str());
414 messageStream <<
"Computing DV" << std::endl;
415 StdOut(messageStream.str(),1);
419 errorState = MaxwellRHS.ComputeDV(myThreadId);
424 ErrOut(
"ComputeDV failed.\n");
451 simGrid.SetNumThreads(1);
452 MaxwellRHS.InitThreadIntervals();
461 messageStream <<
"Ending at step " <<
iStep << std::endl;
462 StdOut(messageStream.str());
478 messageStream <<
"Writing final dump." << std::endl;
479 StdOut(messageStream.str(),1);
486 double *processTimes;
488 std::vector<std::vector<double> > parallelTimes;
489 std::vector<std::vector<long long> > parallelCounts;
491 simAdvancer.
GetTimers(&processTimes,&timerNames,&nTimes);
494 std::ostringstream profileStream;
495 ReportTimings(parallelTimes,timerNames,nTimes,profileStream);
496 StdOut(profileStream.str(),2);
int InitializeMaxwellParameters(const GridType &inGrid, StateType &inParams, double CFLValue)
int InitializeMaxwellStateConstFields(const GridType &inGrid, StateType &inState, double *constE, double *constB, double *constJ, double &constEps, double &constMu, bool everyWhere=false)
virtual int ErrOut(const std::string &outstr)
plascom2::operators::sbp::base operator_t
int InitializeSolution(const GridType &inGrid, StateType &inState, StateType &inParam, std::vector< BoundaryType > &inBoundaries, const std::string &initName, const std::vector< double > &inParams, const std::vector< int > &inFlags, int threadId, std::ostream *messageStream=NULL)
virtual void FunctionExit(const StackType &stackentry)
FunctionExit updates the Stack as well as the Profiler.
void const size_t const size_t * gridSizes
void RenewStream(std::ostringstream &outStream)
pcpp::CommunicatorType comm_t
virtual int AdvanceDomain()
Advances domain, grid, and state by one step.
pcpp::IndexIntervalType interval_t
pcpp::ParallelGlobalType global_t
int numProcessors
Number of processors.
DomainBaseT DomainBaseType
void ReduceTimers(double *processTimes, unsigned int nTimes, std::vector< std::vector< double > > ¶llelTimes, pcpp::CommunicatorType &inCommunicator)
virtual void FunctionEntry(const StackType &stackentry)
FunctionEntry updates the Stack as well as the Profiler.
virtual int StdOut(const std::string &outstr, unsigned char inlev=1)
Main encapsulation of MPI.
std::string GetValue(const std::string &key) const
virtual int WriteDomains()
std::vector< std::string > GetValueVector(const std::string &key) const
DomainInfoType domainInfo
static const char * timerNames[]
void GetTimers(double **timersPtr, const char ***namesPtr, unsigned int *numTimers)
std::string ConfigKey(const std::string &configName, const std::string &keyName)
CommunicatorType globalCommunicator
virtual int InitializeAdvancer(DomainType &inDomain, pcpp::ParallelGlobalType &inGlobal, std::ostream &inStream)
Initializes the advancer object.
simulation::grid::halo halo_t
void ReportTimings(std::vector< std::vector< double > > &inTimers, const char **timerNames, unsigned int nTimes, std::ostream &outStream)
Simple Block Structured Mesh object.
fixtures::ConfigurationType appConfig
std::vector< std::string > domainNames
int numThreads
Number of threads.
bool IsSet(const std::string &Key) const
void SetTimers(bool onoff)