Xyce  6.1
N_LOA_CktLoader.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Copyright Notice
3 //
4 // Copyright 2002 Sandia Corporation. Under the terms
5 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
6 // Government retains certain rights in this software.
7 //
8 // Xyce(TM) Parallel Electrical Simulator
9 // Copyright (C) 2002-2015 Sandia Corporation
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //-----------------------------------------------------------------------------
24 
25 //-----------------------------------------------------------------------------
26 // Filename : $RCSfile: N_LOA_CktLoader.C,v $
27 //
28 // Purpose : This file contains class definitions for the loader
29 // services package.
30 //
31 // Special Notes :
32 //
33 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
34 //
35 // Creation Date : 05/26/00
36 //
37 // Revision Information:
38 // ---------------------
39 //
40 // Revision Number: $Revision: 1.100 $
41 //
42 // Revision Date : $Date: 2015/07/11 23:40:29 $
43 //
44 // Current Owner : $Author: erkeite $
45 //-----------------------------------------------------------------------------
46 
47 #include <Xyce_config.h>
48 
49 // ---------- Xyce Includes ----------
50 #include <N_UTL_fwd.h>
51 
52 #include <N_DEV_Algorithm.h>
53 #include <N_DEV_DeviceMgr.h>
54 #include <N_DEV_ExternDevice.h>
55 #include <N_DEV_SolverState.h>
56 #include <N_LOA_CktLoader.h>
57 #include <N_PDS_MPI.h>
58 #include <N_PDS_Serial.h>
59 
60 namespace Xyce {
61 namespace Loader {
62 
63 //-----------------------------------------------------------------------------
64 // Function : CktLoader::CktLoader
65 // Purpose : constructor
66 // Special Notes :
67 // Scope : public
68 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
69 // Creation Date : 5/27/00
70 //-----------------------------------------------------------------------------
72  Device::DeviceMgr & device_manager)
73  : deviceManager_(device_manager)
74 {}
75 
76 //-----------------------------------------------------------------------------
77 // Function : CktLoader::~CktLoader
78 // Purpose : destructor
79 // Special Notes :
80 // Scope : public
81 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
82 // Creation Date : 5/27/00
83 //-----------------------------------------------------------------------------
85 {}
86 
88  std::string & name,
89  double val,
90  bool overrideOriginal)
91 {
92  return deviceManager_.setParam(name, val, overrideOriginal);
93 }
94 
96  std::string & name)
97 {
99 }
100 
101 
103  std::string & name,
104  std::vector<double> & dfdpVec,
105  std::vector<double> & dqdpVec,
106  std::vector<double> & dbdpVec,
107  std::vector<int> & FindicesVec,
108  std::vector<int> & QindicesVec,
109  std::vector<int> & BindicesVec) const
110 {
111  return deviceManager_.getAnalyticSensitivities(name, dfdpVec, dqdpVec, dbdpVec,
112  FindicesVec, QindicesVec, BindicesVec);
113 }
114 
116  Parallel::Machine comm,
117  const std::string & name) const
118 {
119  return Device::getParamAndReduce(comm, deviceManager_, name);
120 }
121 
123  Linear::Vector * nextSolVectorPtr,
124  Linear::Vector * currSolVectorPtr,
125  Linear::Vector * lastSolVectorPtr,
126  Linear::Vector * nextStaVectorPtr,
127  Linear::Vector * currStaVectorPtr,
128  Linear::Vector * lastStaVectorPtr,
129  Linear::Vector * StateDerivVectorPtr,
130  Linear::Vector * nextStoVectorPtr,
131  Linear::Vector * currStoVectorPtr,
132  Linear::Vector * lastStoVectorPtr,
133  Linear::Vector * QVectorPtr,
134  Linear::Vector * FVectorPtr,
135  Linear::Vector * BVectorPtr,
136  Linear::Vector * dFdxdVpVectorPtr,
137  Linear::Vector * dQdxdVpVectorPtr) const
138 {
139  return deviceManager_.setICs(
140  nextSolVectorPtr,
141  currSolVectorPtr,
142  lastSolVectorPtr,
143  nextStaVectorPtr,
144  currStaVectorPtr,
145  lastStaVectorPtr,
146  StateDerivVectorPtr,
147  nextStoVectorPtr,
148  currStoVectorPtr,
149  lastStoVectorPtr,
150  QVectorPtr,
151  FVectorPtr,
152  BVectorPtr,
153  dFdxdVpVectorPtr,
154  dQdxdVpVectorPtr);
155 }
156 
157 //-----------------------------------------------------------------------------
158 // Function : CktLoader::loadDeviceErrorWeightMask
159 // Purpose : Load mask for use in calculating weighted norms.
160 // Special Notes : Loads the mask into the LAS_System. Need only be called
161 // once.
162 // Scope : public
163 // Creator : Tom Russo, SNL, Electrical and Microsystems Modeling
164 // Creation Date : 1/19/07
165 //-----------------------------------------------------------------------------
167  Linear::Vector * deviceMask) const
168 {
169  return deviceManager_.loadErrorWeightMask(deviceMask);
170 }
171 
172 //-----------------------------------------------------------------------------
173 // Function : CktLoader::loadDAEMatrices
174 // Purpose : This function
175 // Special Notes :
176 // Scope : public
177 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
178 // Creation Date : 03/03/04
179 //-----------------------------------------------------------------------------
181  Linear::Vector * tmpSolVectorPtr,
182  Linear::Vector * tmpStateVectorPtr,
183  Linear::Vector * tmpStateDerivVectorPtr,
184  Linear::Vector * tmpStoreVectorPtr,
185  Linear::Matrix * tmpdQdxMatrixPtr,
186  Linear::Matrix * tmpdFdxMatrixPtr)
187 {
189  tmpSolVectorPtr,
190  tmpStateVectorPtr,
191  tmpStateDerivVectorPtr,
192  tmpStoreVectorPtr,
193  tmpdQdxMatrixPtr,
194  tmpdFdxMatrixPtr);
195 
196 }
197 
198 //-----------------------------------------------------------------------------
199 // Function : CktLoader::loadDAEVectors
200 // Purpose :
201 // Special Notes :
202 // Scope : public
203 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
204 // Creation Date : 03/03/04
205 //-----------------------------------------------------------------------------
207  Linear::Vector * nextSolVectorPtr,
208  Linear::Vector * currSolVectorPtr,
209  Linear::Vector * lastSolVectorPtr,
210  Linear::Vector * nextStaVectorPtr,
211  Linear::Vector * currStaVectorPtr,
212  Linear::Vector * lastStaVectorPtr,
213  Linear::Vector * StateDerivVectorPtr,
214  Linear::Vector * nextStoVectorPtr,
215  Linear::Vector * currStoVectorPtr,
216  Linear::Vector * lastStoVectorPtr,
217  Linear::Vector * stoLeadCurrQVectorPtr,
218  Linear::Vector * nextLeadFVectorPtr,
219  Linear::Vector * currLeadFVectorPtr,
220  Linear::Vector * lastLeadFVectorPtr,
221  Linear::Vector * nextLeadQVectorPtr,
222  Linear::Vector * nextJunctionVVectorPtr,
223  Linear::Vector * currJunctionVVectorPtr,
224  Linear::Vector * lastJunctionVVectorPtr,
225  Linear::Vector * QVectorPtr,
226  Linear::Vector * FVectorPtr,
227  Linear::Vector * BVectorPtr,
228  Linear::Vector * dFdxdVpVectorPtr,
229  Linear::Vector * dQdxdVpVectorPtr)
230 {
232  nextSolVectorPtr,
233  currSolVectorPtr,
234  lastSolVectorPtr,
235  nextStaVectorPtr,
236  currStaVectorPtr,
237  lastStaVectorPtr,
238  StateDerivVectorPtr,
239  nextStoVectorPtr,
240  currStoVectorPtr,
241  lastStoVectorPtr,
242  stoLeadCurrQVectorPtr,
243  nextLeadFVectorPtr,
244  currLeadFVectorPtr,
245  lastLeadFVectorPtr,
246  nextLeadQVectorPtr,
247  nextJunctionVVectorPtr,
248  currJunctionVVectorPtr,
249  lastJunctionVVectorPtr,
250  QVectorPtr,
251  FVectorPtr,
252  BVectorPtr,
253  dFdxdVpVectorPtr,
254  dQdxdVpVectorPtr);
255 }
256 
257 //-----------------------------------------------------------------------------
258 // Function : CktLoader::updateState
259 // Purpose :
260 // Special Notes :
261 // Scope : public
262 // Creator : Eric R. Keiter, SNL, Computational Sciences
263 // Creation Date : 11/17/05
264 //-----------------------------------------------------------------------------
266  Linear::Vector * nextSolVectorPtr,
267  Linear::Vector * currSolVectorPtr,
268  Linear::Vector * lastSolVectorPtr,
269  Linear::Vector * nextStaVectorPtr,
270  Linear::Vector * currStaVectorPtr,
271  Linear::Vector * lastStaVectorPtr,
272  Linear::Vector * nextStoVectorPtr,
273  Linear::Vector * currStoVectorPtr,
274  Linear::Vector * lastStoVectorPtr)
275 {
277  nextSolVectorPtr,
278  currSolVectorPtr,
279  lastSolVectorPtr,
280  nextStaVectorPtr,
281  currStaVectorPtr,
282  lastStaVectorPtr,
283  nextStoVectorPtr,
284  currStoVectorPtr,
285  lastStoVectorPtr);
286 }
287 
288 //-----------------------------------------------------------------------------
289 // Function : CktLoader::loadBVectorsforAC
290 // Purpose :
291 // Special Notes :
292 // Scope : public
293 // Creator : Ting Mei, SNL
294 // Creation Date :
295 //-----------------------------------------------------------------------------
297  Linear::Vector * bVecRealPtr,
298  Linear::Vector * bVecImagPtr)
299 {
300  return deviceManager_.loadBVectorsforAC (bVecRealPtr, bVecImagPtr);
301 }
302 
303 //-----------------------------------------------------------------------------
304 // Function : CktLoader::getNumNoiseSources
305 // Purpose :
306 // Special Notes :
307 // Scope : public
308 // Creator : Eric Keiter, SNL
309 // Creation Date : 12/8/2014
310 //-----------------------------------------------------------------------------
312 {
314 }
315 
316 //-----------------------------------------------------------------------------
317 // Function : CktLoader::getNumNoiseDevices
318 // Purpose :
319 // Special Notes :
320 // Scope : public
321 // Creator : Eric Keiter, SNL
322 // Creation Date : 12/8/2014
323 //-----------------------------------------------------------------------------
325 {
327 }
328 
329 
330 //-----------------------------------------------------------------------------
331 // Function : CktLoader::setupNoiseSources
332 // Purpose :
333 // Special Notes :
334 // Scope : public
335 // Creator : Eric Keiter, SNL
336 // Creation Date : 12/8/2014
337 //-----------------------------------------------------------------------------
339  (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
340 {
341  return deviceManager_.setupNoiseSources (noiseDataVec);
342 }
343 
344 //-----------------------------------------------------------------------------
345 // Function : CktLoader::getNoiseSources
346 // Purpose :
347 // Special Notes :
348 // Scope : public
349 // Creator : Eric Keiter, SNL
350 // Creation Date : 12/8/2014
351 //-----------------------------------------------------------------------------
353  (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
354 {
355  return deviceManager_.getNoiseSources (noiseDataVec);
356 }
357 
358 //-----------------------------------------------------------------------------
359 // Function : CktLoader::getBMatrixStampforMOR
360 // Purpose :
361 // Special Notes :
362 // Scope : public
363 // Creator : Heidi Thornquist and Ting Mei, SNL
364 // Creation Date :
365 //-----------------------------------------------------------------------------
366 bool CktLoader::getBMatrixEntriesforMOR(std::vector<int>& bMatEntriesVec,
367  std::vector<int>& bMatPosEntriesVec)
368 {
369  return deviceManager_.getBMatrixEntriesforMOR( bMatEntriesVec, bMatPosEntriesVec );
370 }
371 
372 //-----------------------------------------------------------------------------
373 // Function : CktLoader::getInductorsEntriesforMOR
374 // Purpose :
375 // Special Notes :
376 // Scope : public
377 // Creator : Heidi Thornquist and Ting Mei, SNL
378 // Creation Date :
379 //-----------------------------------------------------------------------------
380 /*bool CktLoader::getInductorsEntriesforMOR(std::vector<int>& inductorEntriesVec)
381 {
382  return deviceManager_.getInductorsEntriesforMOR( inductorEntriesVec );
383 }
384 */
385 //-----------------------------------------------------------------------------
386 // Function : CktLoader::setInitialGuess
387 // Purpose :
388 // Special Notes :
389 // Scope : public
390 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
391 // Creation Date : 5/02/03
392 //-----------------------------------------------------------------------------
393 bool CktLoader::setInitialGuess(Linear::Vector * solVectorPtr)
394 {
395  return deviceManager_.setInitialGuess (solVectorPtr);
396 }
397 
398 //-----------------------------------------------------------------------------
399 // Function : CktLoader::updateSources
400 // Purpose :
401 // Special Notes :
402 // Scope : public
403 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
404 // Creation Date : 6/13/00
405 //-----------------------------------------------------------------------------
407 {
408  return deviceManager_.updateSources();
409 }
410 
411 //-----------------------------------------------------------------------------
412 // Function : CktLoader::output
413 // Purpose :
414 // Special Notes :
415 // Scope : public
416 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
417 // Creation Date : 4/13/01
418 //-----------------------------------------------------------------------------
420 {
421  return deviceManager_.outputPlotFiles(false);
422 }
423 
424 //-----------------------------------------------------------------------------
425 // Function : CktLoader::finishOutput
426 // Purpose :
427 // Special Notes :
428 // Scope : public
429 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
430 // Creation Date : 6/19/04
431 //-----------------------------------------------------------------------------
433 {
434  return deviceManager_.finishOutput();
435 }
436 
437 //-----------------------------------------------------------------------------
438 // Function : CktLoader::isPDESystem
439 // Purpose : This is an accessor to allow the time integrator to determine
440 // if the current problem includes a PDE device. If it does,
441 // then it makes sense to use two-pass DCOP calulation. Hence
442 // the "DoubleDCOPFlag" in the name.
443 // Special Notes :
444 // Scope : public
445 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
446 // Creation Date : 04/25/01
447 //-----------------------------------------------------------------------------
449 {
450  return deviceManager_.isPDESystem();
451 }
452 
453 //-----------------------------------------------------------------------------
454 // Function : CktLoader::getLimiterFlag
455 // Purpose :
456 // Special Notes :
457 // Scope : public
458 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
459 // Creation Date : 03/11/04
460 //-----------------------------------------------------------------------------
462 {
464 }
465 
466 //-----------------------------------------------------------------------------
467 // Function : CktLoader::getBreakPoints
468 // Purpose :
469 // Special Notes :
470 // Scope : public
471 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
472 // Creation Date : 6/11/01
473 //-----------------------------------------------------------------------------
474 bool CktLoader::getBreakPoints ( std::vector<Util::BreakPoint> & breakPointTimes ) const
475 {
476  return deviceManager_.getBreakPoints(breakPointTimes);
477 }
478 
479 //-----------------------------------------------------------------------------
480 // Function : CktLoader::getMaxTimeStepSize ()
481 // Purpose :
482 // Special Notes :
483 // Scope : public
484 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
485 // Creation Date : 7/31/01
486 //-----------------------------------------------------------------------------
488 {
490 }
491 
492 //-----------------------------------------------------------------------------
493 // Function : CktLoader::enablePDEContinuation
494 // Purpose :
495 // Special Notes :
496 // Scope : public
497 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
498 // Creation Date : 10/22/02
499 //-----------------------------------------------------------------------------
501 {
503 }
504 
505 //-----------------------------------------------------------------------------
506 // Function : CktLoader::disablePDEContinuation
507 // Purpose :
508 // Special Notes :
509 // Scope : public
510 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
511 // Creation Date : 10/22/02
512 //-----------------------------------------------------------------------------
514 {
516 }
517 
518 //-----------------------------------------------------------------------------
519 // Function : CktLoader::getNumInterfaceNodes
520 // Purpose :
521 // Special Notes :
522 // Scope : public
523 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
524 // Creation Date : 12/03/02
525 //-----------------------------------------------------------------------------
526 void CktLoader::getNumInterfaceNodes (std::vector<int> & numINodes)
527 {
529 }
530 
531 //-----------------------------------------------------------------------------
532 // Function : CktLoader::loadCouplingRHS
533 // Purpose :
534 // Special Notes :
535 // Scope : public
536 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
537 // Creation Date : 12/03/02
538 //-----------------------------------------------------------------------------
539 bool CktLoader::loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector * dfdvPtr)
540 {
541  return deviceManager_.loadCouplingRHS (iSubProblem, iCouple, dfdvPtr);
542 }
543 
544 //-----------------------------------------------------------------------------
545 // Function : CktLoader::calcCouplingTerms
546 // Purpose :
547 // Special Notes :
548 // Scope : public
549 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
550 // Creation Date : 12/03/02
551 //-----------------------------------------------------------------------------
552 bool CktLoader::calcCouplingTerms (int iSubProblem, int iCouple, const Linear::Vector * dxdvPtr)
553 {
554  return deviceManager_.calcCouplingTerms (iSubProblem, iCouple, dxdvPtr);
555 }
556 
557 //-----------------------------------------------------------------------------
558 // Function : CktLoader::getHomotopyBlockSize
559 // Purpose :
560 // Special Notes :
561 // Scope : public
562 // Creator : Roger Pawlowski, SNL, Parallel Computational Sciences
563 // Creation Date : 01/26/2005
564 //-----------------------------------------------------------------------------
566 {
568 }
569 
570 //-----------------------------------------------------------------------------
571 // Function : CktLoader::allDevsConverged
572 // Purpose : Check whether any device has taken an action that renders
573 // normal convergence checks invalid (i.e. that the current
574 // step must be assumed unconverged).
575 // Special Notes :
576 // Scope : public
577 // Creator : Tom Russo, SNL, Component Information and Models
578 // Creation Date : 03/22/05
579 //-----------------------------------------------------------------------------
581  Parallel::Machine comm)
582 {
583  return deviceManager_.allDevicesConverged(comm);
584 }
585 
586 //-----------------------------------------------------------------------------
587 // Function : CktLoader::innerDevsConverged
588 // Purpose :
589 // Special Notes :
590 // Scope : public
591 // Creator : Eric Keiter, SNL
592 // Creation Date : 3/21/06
593 //-----------------------------------------------------------------------------
594 bool
596  Parallel::Machine comm)
597 {
598  return Device::devicesConverged(comm, deviceManager_.getDevices(Device::ExternDevice::Traits::modelType()));
599 }
600 
601 //-----------------------------------------------------------------------------
602 // Function : CktLoader::stepSuccess
603 // Purpose :
604 // Special Notes :
605 // Scope : public
606 // Creator : Eric R. Keiter, SNL
607 // Creation Date : 03/12/06
608 //-----------------------------------------------------------------------------
610 {
611  const Device::InstanceVector &extern_devices = deviceManager_.getDevices(Device::ExternDevice::Traits::modelType());
612 
613  for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
614  {
615  Device::ExternDevice::Instance &extern_device = static_cast<Device::ExternDevice::Instance &>(*(*it));
616 
617  extern_device.stepSuccess(analysis);
618  }
619 }
620 
621 //-----------------------------------------------------------------------------
622 // Function : CktLoader::stepFailure
623 // Purpose :
624 // Special Notes :
625 // Scope : public
626 // Creator : Eric R. Keiter, SNL
627 // Creation Date : 03/12/06
628 //-----------------------------------------------------------------------------
630 {
631  const Device::InstanceVector &extern_devices = deviceManager_.getDevices(Device::ExternDevice::Traits::modelType());
632 
633  for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
634  {
635  Device::ExternDevice::Instance &extern_device = static_cast<Device::ExternDevice::Instance &>(*(*it));
636 
637  extern_device.stepFailure(analysis);
638  }
639 }
640 
641 //-----------------------------------------------------------------------------
642 // Function : CktLoader::acceptStep
643 // Purpose : Communicate to devices that the current step has been
644 // accepted
645 // Special Notes : Most devices need not know. The Transmission line does.
646 // Scope : public
647 // Creator : Tom Russo, SNL
648 // Creation Date : 01/23/07
649 //-----------------------------------------------------------------------------
651 {
653 }
654 
655 //-----------------------------------------------------------------------------
656 // Function : CktLoader::getInitialQnorm
657 // Purpose :
658 // Special Notes :
659 // Scope : public
660 // Creator : Eric R. Keiter, SNL
661 // Creation Date : 03/18/07
662 //-----------------------------------------------------------------------------
663 bool CktLoader::getInitialQnorm (std::vector<TimeIntg::TwoLevelError> & tleVec )
664 {
665  return deviceManager_.getInitialQnorm(tleVec);
666 }
667 
668 //-----------------------------------------------------------------------------
669 // Function : CktLoader::getInnerLoopErrorSums
670 // Purpose :
671 // Special Notes :
672 // Scope : public
673 // Creator : Eric R. Keiter, SNL
674 // Creation Date : 03/15/06
675 //-----------------------------------------------------------------------------
676 bool CktLoader::getInnerLoopErrorSums (std::vector<TimeIntg::TwoLevelError> & tleVec) const
677 {
678  return deviceManager_.getInnerLoopErrorSums (tleVec);
679 }
680 
681 //-----------------------------------------------------------------------------
682 // Function : CktLoader::updateStateArrays
683 // Purpose : Tells the inner loop solve to update state arrays.
684 // Special Notes : Needed to support voltlim with loca, with 2-level.
685 // Scope : public
686 // Creator : Eric R. Keiter, SNL
687 // Creation Date : 03/15/06
688 //-----------------------------------------------------------------------------
690 {
692 }
693 
694 //-----------------------------------------------------------------------------
695 // Function : CktLoader::startTimeStep()
696 // Purpose : Tells the inner loop solve to do its prediction.
697 // Special Notes : Needed to support 2-level.
698 // Scope : public
699 // Creator : Eric R. Keiter, SNL
700 // Creation Date : 03/15/06
701 //-----------------------------------------------------------------------------
703  bool beginIntegrationFlag,
704  double nextTimeStep,
705  double nextTime,
706  int currentOrder)
707 {
708  return deviceManager_.startTimeStep(beginIntegrationFlag, nextTimeStep, nextTime, currentOrder);
709 }
710 
711 //-----------------------------------------------------------------------------
712 // Function : CktLoader::setExternalSolverState
713 // Purpose :
714 // Special Notes : Needed to support 2-level.
715 // Scope : public
716 // Creator : Eric R. Keiter, SNL
717 // Creation Date : 03/21/06
718 //-----------------------------------------------------------------------------
719 void CktLoader::setExternalSolverState(bool external_initJctFlag)
720 {
721  deviceManager_.setExternalSolverState(external_initJctFlag);
722 }
723 
724 //-----------------------------------------------------------------------------
725 // Function : CktLoader::getVoltageLimiterStatus
726 // Purpose :
727 // Special Notes :
728 // Scope : public
729 // Creator : Eric Keiter
730 // Creation Date : 6/22/2015
731 //---------------------------------------------------------------------------
733 {
735 }
736 
737 //-----------------------------------------------------------------------------
738 // Function : CktLoader::setVoltageLimiterStatus
739 // Purpose :
740 // Special Notes :
741 // Scope : public
742 // Creator : Eric Keiter
743 // Creation Date : 6/22/2015
744 //---------------------------------------------------------------------------
745 void CktLoader::setVoltageLimiterStatus(bool voltageLimterStatus)
746 {
747  return deviceManager_.setVoltageLimiterStatus(voltageLimterStatus);
748 }
749 
750 } // namespace Loader
751 } // namespace Xyce
bool setParam(std::string &name, double val, bool overrideOriginal=false)
bool setParam(const std::string &name, double val, bool overrideOriginal=false)
Device::DeviceMgr & deviceManager_
Device manager.
void getAnalyticSensitivities(std::string &name, std::vector< double > &dfdpVec, std::vector< double > &dqdpVec, std::vector< double > &dbdpVec, std::vector< int > &FindicesVec, std::vector< int > &QindicesVec, std::vector< int > &BindicesVec)
void setupNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
virtual bool getInitialQnorm(std::vector< TimeIntg::TwoLevelError > &tleVec)
bool updateState(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr)
virtual bool analyticSensitivitiesAvailable(std::string &name)
bool initializeProblem(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *StateDerivVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr, Linear::Vector *QVectorPtr, Linear::Vector *FVectorPtr, Linear::Vector *BVectorPtr, Linear::Vector *dFdxdVpVectorPtr, Linear::Vector *dQdxdVpVectorPtr) const
bool getBMatrixEntriesforMOR(std::vector< int > &bMatEntriesVec, std::vector< int > &bMatPosEntriesVec)
bool loadErrorWeightMask(Linear::Vector *deviceMaskPtr)
Pure virtual class to augment a linear system.
const InstanceVector & getDevices(ModelTypeId model_type_id) const
bool calcCouplingTerms(int iSubProblem, int iCouple, const Linear::Vector *dxdvPtr)
bool loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector *dfdvPtr)
virtual void setVoltageLimiterStatus(bool voltageLimterStatus)
bool getBMatrixEntriesforMOR(std::vector< int > &bMatEntriesVec, std::vector< int > &bMatPosEntriesVec)
CktLoader(Device::DeviceMgr &device_manager)
void getNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
void getNumInterfaceNodes(std::vector< int > &numInterfaceNodes)
virtual void getAnalyticSensitivities(std::string &name, std::vector< double > &dfdpVec, std::vector< double > &dqdpVec, std::vector< double > &dbdpVec, std::vector< int > &FindicesVec, std::vector< int > &QindicesVec, std::vector< int > &BindicesVec) const
bool setICs(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpCurrSolVectorPtr, Linear::Vector *tmpLastSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpCurrStaVectorPtr, Linear::Vector *tmpLasStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Vector *tmpCurrStoVectorPtr, Linear::Vector *tmpLastStoVectorPtr, Linear::Vector *tmpQVectorPtr, Linear::Vector *tmpFVectorPtr, Linear::Vector *tmpBVectorPtr, Linear::Vector *tmpdFdxdVpVectorPtr, Linear::Vector *tmpdQdxdVpVectorPtr)
bool loadCouplingRHS(int iPDEDevice, int iElectrode, Linear::Vector *dfdvPtr)
Device::DeviceMgr & deviceManager_
Definition: N_ANP_HB.C:2199
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
virtual bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec) const
bool calcCouplingTerms(int iSubProblem, int iElectrode, const Linear::Vector *dxdvPtr)
virtual double getParamAndReduce(Parallel::Machine comm, const std::string &name) const
bool allDevicesConverged(Parallel::Machine comm)
bool setInitialGuess(Linear::Vector *solVectorPtr)
bool loadBVectorsforAC(Linear::Vector *bVecRealPtr, Linear::Vector *bVecImagPtr)
bool setInitialGuess(Linear::Vector *solVectorPtr)
void getNumInterfaceNodes(std::vector< int > &numINodes)
int getHomotopyBlockSize() const
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
bool allDevicesConverged(Parallel::Machine comm) const
void setExternalSolverState(bool external_initJctFlag)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
void setVoltageLimiterStatus(bool voltageLimterStatus)
bool loadDAEVectors(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *StaDerivVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr, Linear::Vector *stoLeadCurrQVectorPtr, Linear::Vector *nextLeadFVectorPtr, Linear::Vector *currLeadFVectorPtr, Linear::Vector *lastLeadFVectorPtr, Linear::Vector *nextLeadQVectorPtr, Linear::Vector *nextJunctionVVectorPtr, Linear::Vector *currJunctionVVectorPtr, Linear::Vector *lastJunctionVVectorPtr, Linear::Vector *QVectorPtr, Linear::Vector *FVectorPtr, Linear::Vector *BVectorPtr, Linear::Vector *dFdxdVpVectorPtr, Linear::Vector *dQdxdVpVectorPtr)
bool devicesConverged(Parallel::Machine comm, const InstanceVector &extern_devices)
bool startTimeStep(bool beginIntegrationFlag, double nextTimeStep, double nextTime, int currentOrder)
bool loadDAEVectors(Linear::Vector *tmpNextSolVectorPtr, Linear::Vector *tmpCurrSolVectorPtr, Linear::Vector *tmpLastSolVectorPtr, Linear::Vector *tmpNextStaVectorPtr, Linear::Vector *tmpCurrStaVectorPtr, Linear::Vector *tmpLastStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpNextStoVectorPtr, Linear::Vector *tmpCurrStoVectorPtr, Linear::Vector *tmpLastStoVectorPtr, Linear::Vector *tmpStoLeadCurrQCompVectorPtr, Linear::Vector *tmpLeadFCompVectorPtr, Linear::Vector *tmpLastLeadFCompVectorPtr, Linear::Vector *tmpNextLeadFCompVectorPtr, Linear::Vector *tmpLeadQCompVectorPtr, Linear::Vector *tmpJunctionVCompVectorPtr, Linear::Vector *tmpLastJunctionVCompVectorPtr, Linear::Vector *tmpNextJunctionCompVectorPtr, Linear::Vector *tmpQVectorPtr, Linear::Vector *tmpFVectorPtr, Linear::Vector *tmpBVectorPtr, Linear::Vector *tmpdFdxdVpVectorPtr, Linear::Vector *tmpdQdxdVpVectorPtr)
void stepSuccess(Xyce::Analysis::TwoLevelMode analysis)
bool loadDeviceErrorWeightMask(Linear::Vector *deviceMask) const
bool updateState(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr)
bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec) const
bool getParamAndReduce(Parallel::Machine comm, const DeviceMgr &device_manager, const std::string &name, double &val)
bool analyticSensitivitiesAvailable(const std::string &name)
bool loadBVectorsforAC(Linear::Vector *bVecRealPtr, Linear::Vector *bVecImagPtr)
void setExternalSolverState(bool external_initJctFlag)
bool startTimeStep(bool beginIntegrationFlag, double nextTimeStep, double nextTime, int currentOrder)
std::vector< DeviceInstance * > InstanceVector
Definition: N_DEV_fwd.h:193
virtual bool getVoltageLimiterStatus()
bool innerDevicesConverged(Parallel::Machine comm)
bool outputPlotFiles() const
void stepFailure(Xyce::Analysis::TwoLevelMode analysis)
int getHomotopyBlockSize() const
bool getInitialQnorm(std::vector< TimeIntg::TwoLevelError > &tleVec)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const
bool outputPlotFiles(bool force_final_output)