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.90.2.1 $
41 //
42 // Revision Date : $Date: 2015/04/02 18:20:16 $
43 //
44 // Current Owner : $Author: tvrusso $
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 
87 }
88 
89 bool
91  std::string & name,
92  double val,
93  bool overrideOriginal)
94 {
95  return deviceManager_.setParam(name,val, overrideOriginal);
96 }
97 
98 bool
100  std::string & name)
101 {
103 }
104 
105 
106 void
108  std::string & name,
109  std::vector<double> & dfdpVec,
110  std::vector<double> & dqdpVec,
111  std::vector<double> & dbdpVec,
112  std::vector<int> & FindicesVec,
113  std::vector<int> & QindicesVec,
114  std::vector<int> & BindicesVec) const
115 {
116  return deviceManager_.getAnalyticSensitivities(name, dfdpVec, dqdpVec, dbdpVec,
117  FindicesVec, QindicesVec, BindicesVec);
118 }
119 
120 double
122  const std::string & name) const
123 {
124  return deviceManager_.getParamAndReduce(name);
125 }
126 
127 bool
129  const std::string & name,
130  double & val) const
131 {
132  return deviceManager_.getParamAndReduce(name,val);
133 }
134 
136  Linear::Vector * nextSolVectorPtr,
137  Linear::Vector * currSolVectorPtr,
138  Linear::Vector * lastSolVectorPtr,
139  Linear::Vector * nextStaVectorPtr,
140  Linear::Vector * currStaVectorPtr,
141  Linear::Vector * lastStaVectorPtr,
142  Linear::Vector * StateDerivVectorPtr,
143  Linear::Vector * nextStoVectorPtr,
144  Linear::Vector * currStoVectorPtr,
145  Linear::Vector * lastStoVectorPtr,
146  Linear::Vector * QVectorPtr,
147  Linear::Vector * FVectorPtr,
148  Linear::Vector * BVectorPtr,
149  Linear::Vector * dFdxdVpVectorPtr,
150  Linear::Vector * dQdxdVpVectorPtr) const
151 {
153  (nextSolVectorPtr,
154  currSolVectorPtr,
155  lastSolVectorPtr,
156  nextStaVectorPtr,
157  currStaVectorPtr,
158  lastStaVectorPtr,
159  StateDerivVectorPtr,
160  nextStoVectorPtr,
161  currStoVectorPtr,
162  lastStoVectorPtr,
163  QVectorPtr,
164  FVectorPtr,
165  BVectorPtr,
166  dFdxdVpVectorPtr,
167  dQdxdVpVectorPtr);
168 }
169 
170 //-----------------------------------------------------------------------------
171 // Function : CktLoader::loadDeviceErrorWeightMask
172 // Purpose : Load mask for use in calculating weighted norms.
173 // Special Notes : Loads the mask into the LAS_System. Need only be called
174 // once.
175 // Scope : public
176 // Creator : Tom Russo, SNL, Electrical and Microsystems Modeling
177 // Creation Date : 1/19/07
178 //-----------------------------------------------------------------------------
179 bool
181  Linear::Vector * deviceMask) const
182 {
183  return deviceManager_.loadErrorWeightMask(deviceMask);
184 }
185 
186 //-----------------------------------------------------------------------------
187 // Function : CktLoader::loadDAEMatrices
188 // Purpose : This function
189 // Special Notes :
190 // Scope : public
191 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
192 // Creation Date : 03/03/04
193 //-----------------------------------------------------------------------------
195  Linear::Vector * tmpSolVectorPtr,
196  Linear::Vector * tmpStateVectorPtr,
197  Linear::Vector * tmpStateDerivVectorPtr,
198  Linear::Vector * tmpStoreVectorPtr,
199  Linear::Matrix * tmpdQdxMatrixPtr,
200  Linear::Matrix * tmpdFdxMatrixPtr)
201 {
203  tmpSolVectorPtr,
204  tmpStateVectorPtr,
205  tmpStateDerivVectorPtr,
206  tmpStoreVectorPtr,
207  tmpdQdxMatrixPtr,
208  tmpdFdxMatrixPtr);
209 
210 }
211 
212 //-----------------------------------------------------------------------------
213 // Function : CktLoader::loadDAEVectors
214 // Purpose :
215 // Special Notes :
216 // Scope : public
217 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
218 // Creation Date : 03/03/04
219 //-----------------------------------------------------------------------------
221  Linear::Vector * nextSolVectorPtr,
222  Linear::Vector * currSolVectorPtr,
223  Linear::Vector * lastSolVectorPtr,
224  Linear::Vector * nextStaVectorPtr,
225  Linear::Vector * currStaVectorPtr,
226  Linear::Vector * lastStaVectorPtr,
227  Linear::Vector * StateDerivVectorPtr,
228  Linear::Vector * nextStoVectorPtr,
229  Linear::Vector * currStoVectorPtr,
230  Linear::Vector * lastStoVectorPtr,
231  Linear::Vector * stoLeadCurrQVectorPtr,
232  Linear::Vector * nextLeadFVectorPtr,
233  Linear::Vector * currLeadFVectorPtr,
234  Linear::Vector * lastLeadFVectorPtr,
235  Linear::Vector * nextLeadQVectorPtr,
236  Linear::Vector * nextJunctionVVectorPtr,
237  Linear::Vector * currJunctionVVectorPtr,
238  Linear::Vector * lastJunctionVVectorPtr,
239  Linear::Vector * QVectorPtr,
240  Linear::Vector * FVectorPtr,
241  Linear::Vector * BVectorPtr,
242  Linear::Vector * dFdxdVpVectorPtr,
243  Linear::Vector * dQdxdVpVectorPtr)
244 {
246  (nextSolVectorPtr,
247  currSolVectorPtr,
248  lastSolVectorPtr,
249  nextStaVectorPtr,
250  currStaVectorPtr,
251  lastStaVectorPtr,
252  StateDerivVectorPtr,
253  nextStoVectorPtr,
254  currStoVectorPtr,
255  lastStoVectorPtr,
256  stoLeadCurrQVectorPtr,
257  nextLeadFVectorPtr,
258  currLeadFVectorPtr,
259  lastLeadFVectorPtr,
260  nextLeadQVectorPtr,
261  nextJunctionVVectorPtr,
262  currJunctionVVectorPtr,
263  lastJunctionVVectorPtr,
264  QVectorPtr,
265  FVectorPtr,
266  BVectorPtr,
267  dFdxdVpVectorPtr,
268  dQdxdVpVectorPtr);
269 }
270 
271 
272 //-----------------------------------------------------------------------------
273 // Function : CktLoader::updateState
274 // Purpose :
275 // Special Notes :
276 // Scope : public
277 // Creator : Eric R. Keiter, SNL, Computational Sciences
278 // Creation Date : 11/17/05
279 //-----------------------------------------------------------------------------
280 bool
282  Linear::Vector * nextSolVectorPtr,
283  Linear::Vector * currSolVectorPtr,
284  Linear::Vector * lastSolVectorPtr,
285  Linear::Vector * nextStaVectorPtr,
286  Linear::Vector * currStaVectorPtr,
287  Linear::Vector * lastStaVectorPtr,
288  Linear::Vector * nextStoVectorPtr,
289  Linear::Vector * currStoVectorPtr,
290  Linear::Vector * lastStoVectorPtr)
291 {
293  nextSolVectorPtr,
294  currSolVectorPtr,
295  lastSolVectorPtr,
296  nextStaVectorPtr,
297  currStaVectorPtr,
298  lastStaVectorPtr,
299  nextStoVectorPtr,
300  currStoVectorPtr,
301  lastStoVectorPtr);
302 }
303 
304 //-----------------------------------------------------------------------------
305 // Function : CktLoader::loadBVectorsforAC
306 // Purpose :
307 // Special Notes :
308 // Scope : public
309 // Creator : Ting Mei, SNL
310 // Creation Date :
311 //-----------------------------------------------------------------------------
313  (Linear::Vector * bVecRealPtr,
314  Linear::Vector * bVecImagPtr)
315 {
316  return deviceManager_.loadBVectorsforAC (bVecRealPtr, bVecImagPtr);
317 }
318 
319 //-----------------------------------------------------------------------------
320 // Function : CktLoader::getNumNoiseSources
321 // Purpose :
322 // Special Notes :
323 // Scope : public
324 // Creator : Eric Keiter, SNL
325 // Creation Date : 12/8/2014
326 //-----------------------------------------------------------------------------
328 {
330 }
331 
332 //-----------------------------------------------------------------------------
333 // Function : CktLoader::getNumNoiseDevices
334 // Purpose :
335 // Special Notes :
336 // Scope : public
337 // Creator : Eric Keiter, SNL
338 // Creation Date : 12/8/2014
339 //-----------------------------------------------------------------------------
341 {
343 }
344 
345 
346 //-----------------------------------------------------------------------------
347 // Function : CktLoader::setupNoiseSources
348 // Purpose :
349 // Special Notes :
350 // Scope : public
351 // Creator : Eric Keiter, SNL
352 // Creation Date : 12/8/2014
353 //-----------------------------------------------------------------------------
355  (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
356 {
357  return deviceManager_.setupNoiseSources (noiseDataVec);
358 }
359 
360 
361 
362 //-----------------------------------------------------------------------------
363 // Function : CktLoader::getNoiseSources
364 // Purpose :
365 // Special Notes :
366 // Scope : public
367 // Creator : Eric Keiter, SNL
368 // Creation Date : 12/8/2014
369 //-----------------------------------------------------------------------------
371  (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
372 {
373  return deviceManager_.getNoiseSources (noiseDataVec);
374 }
375 
376 //-----------------------------------------------------------------------------
377 // Function : CktLoader::getBMatrixStampforMOR
378 // Purpose :
379 // Special Notes :
380 // Scope : public
381 // Creator : Heidi Thornquist and Ting Mei, SNL
382 // Creation Date :
383 //-----------------------------------------------------------------------------
384 bool CktLoader::getBMatrixEntriesforMOR(std::vector<int>& bMatEntriesVec,
385  std::vector<int>& bMatPosEntriesVec)
386 {
387  return deviceManager_.getBMatrixEntriesforMOR( bMatEntriesVec, bMatPosEntriesVec );
388 }
389 
390 //-----------------------------------------------------------------------------
391 // Function : CktLoader::getInductorsEntriesforMOR
392 // Purpose :
393 // Special Notes :
394 // Scope : public
395 // Creator : Heidi Thornquist and Ting Mei, SNL
396 // Creation Date :
397 //-----------------------------------------------------------------------------
398 /*bool CktLoader::getInductorsEntriesforMOR(std::vector<int>& inductorEntriesVec)
399 {
400  return deviceManager_.getInductorsEntriesforMOR( inductorEntriesVec );
401 }
402 */
403 //-----------------------------------------------------------------------------
404 // Function : CktLoader::setInitialGuess
405 // Purpose :
406 // Special Notes :
407 // Scope : public
408 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
409 // Creation Date : 5/02/03
410 //-----------------------------------------------------------------------------
411 bool CktLoader::setInitialGuess(Linear::Vector * solVectorPtr)
412 {
413  return CktLoader::deviceManager_.setInitialGuess (solVectorPtr);
414 }
415 
416 //-----------------------------------------------------------------------------
417 // Function : CktLoader::updateSources
418 // Purpose :
419 // Special Notes :
420 // Scope : public
421 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
422 // Creation Date : 6/13/00
423 //-----------------------------------------------------------------------------
425 {
427 }
428 
429 //-----------------------------------------------------------------------------
430 // Function : CktLoader::output
431 // Purpose :
432 // Special Notes :
433 // Scope : public
434 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
435 // Creation Date : 4/13/01
436 //-----------------------------------------------------------------------------
437 bool CktLoader::output() const
438 {
440 }
441 
442 //-----------------------------------------------------------------------------
443 // Function : CktLoader::finishOutput
444 // Purpose :
445 // Special Notes :
446 // Scope : public
447 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
448 // Creation Date : 6/19/04
449 //-----------------------------------------------------------------------------
451 {
453 }
454 
455 //-----------------------------------------------------------------------------
456 // Function : CktLoader::xgetLinearSystemFlag
457 // Purpose :
458 // Special Notes :
459 // Scope : public
460 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
461 // Creation Date : 10/17/00
462 //-----------------------------------------------------------------------------
464 {
466 }
467 
468 //-----------------------------------------------------------------------------
469 // Function : CktLoader::getDoubleDCOPFlag
470 // Purpose : This is an accessor to allow the time integrator to determine
471 // if the current problem includes a PDE device. If it does,
472 // then it makes sense to use two-pass DCOP calulation. Hence
473 // the "DoubleDCOPFlag" in the name.
474 // Special Notes :
475 // Scope : public
476 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
477 // Creation Date : 04/25/01
478 //-----------------------------------------------------------------------------
480 {
482 }
483 
484 //-----------------------------------------------------------------------------
485 // Function : CktLoader::getLimiterFlag
486 // Purpose :
487 // Special Notes :
488 // Scope : public
489 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
490 // Creation Date : 03/11/04
491 //-----------------------------------------------------------------------------
493 {
495 }
496 
497 //-----------------------------------------------------------------------------
498 // Function : CktLoader::getBreakPoints
499 // Purpose :
500 // Special Notes :
501 // Scope : public
502 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
503 // Creation Date : 6/11/01
504 //-----------------------------------------------------------------------------
505 bool CktLoader::getBreakPoints ( std::vector<Util::BreakPoint> & breakPointTimes ) const
506 {
507  return CktLoader::deviceManager_.getBreakPoints(breakPointTimes);
508 }
509 
510 //-----------------------------------------------------------------------------
511 // Function : CktLoader::getMaxTimeStepSize ()
512 // Purpose :
513 // Special Notes :
514 // Scope : public
515 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
516 // Creation Date : 7/31/01
517 //-----------------------------------------------------------------------------
519 {
521 }
522 
523 //-----------------------------------------------------------------------------
524 // Function : CktLoader::enablePDEContinuation
525 // Purpose :
526 // Special Notes :
527 // Scope : public
528 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
529 // Creation Date : 10/22/02
530 //-----------------------------------------------------------------------------
532 {
534 }
535 
536 //-----------------------------------------------------------------------------
537 // Function : CktLoader::disablePDEContinuation
538 // Purpose :
539 // Special Notes :
540 // Scope : public
541 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
542 // Creation Date : 10/22/02
543 //-----------------------------------------------------------------------------
545 {
547 }
548 
549 //-----------------------------------------------------------------------------
550 // Function : CktLoader::getNumInterfaceNodes
551 // Purpose :
552 // Special Notes :
553 // Scope : public
554 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
555 // Creation Date : 12/03/02
556 //-----------------------------------------------------------------------------
557 void CktLoader::getNumInterfaceNodes (std::vector<int> & numINodes)
558 {
560 }
561 
562 //-----------------------------------------------------------------------------
563 // Function : CktLoader::loadCouplingRHS
564 // Purpose :
565 // Special Notes :
566 // Scope : public
567 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
568 // Creation Date : 12/03/02
569 //-----------------------------------------------------------------------------
570 bool CktLoader::loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector * dfdvPtr)
571 {
572  return deviceManager_.loadCouplingRHS (iSubProblem, iCouple, dfdvPtr);
573 }
574 
575 //-----------------------------------------------------------------------------
576 // Function : CktLoader::calcCouplingTerms
577 // Purpose :
578 // Special Notes :
579 // Scope : public
580 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
581 // Creation Date : 12/03/02
582 //-----------------------------------------------------------------------------
583 bool CktLoader::calcCouplingTerms (int iSubProblem, int iCouple, const Linear::Vector * dxdvPtr)
584 {
585  return deviceManager_.calcCouplingTerms (iSubProblem, iCouple, dxdvPtr);
586 }
587 
588 //-----------------------------------------------------------------------------
589 // Function : CktLoader::getHomotopyBlockSize
590 // Purpose :
591 // Special Notes :
592 // Scope : public
593 // Creator : Roger Pawlowski, SNL, Parallel Computational Sciences
594 // Creation Date : 01/26/2005
595 //-----------------------------------------------------------------------------
597 {
599 }
600 
601 //-----------------------------------------------------------------------------
602 // Function : CktLoader::allDevsConverged
603 // Purpose : Check whether any device has taken an action that renders
604 // normal convergence checks invalid (i.e. that the current
605 // step must be assumed unconverged).
606 // Special Notes :
607 // Scope : public
608 // Creator : Tom Russo, SNL, Component Information and Models
609 // Creation Date : 03/22/05
610 //-----------------------------------------------------------------------------
612  Parallel::Machine comm)
613 {
614  return deviceManager_.allDevicesConverged(comm);
615 }
616 
617 //-----------------------------------------------------------------------------
618 // Function : CktLoader::innerDevsConverged
619 // Purpose :
620 // Special Notes :
621 // Scope : public
622 // Creator : Eric Keiter, SNL
623 // Creation Date : 3/21/06
624 //-----------------------------------------------------------------------------
625 bool
627  Parallel::Machine comm)
628 {
630 }
631 
632 //-----------------------------------------------------------------------------
633 // Function : CktLoader::stepSuccess
634 // Purpose :
635 // Special Notes :
636 // Scope : public
637 // Creator : Eric R. Keiter, SNL
638 // Creation Date : 03/12/06
639 //-----------------------------------------------------------------------------
641 {
642  const Device::InstanceVector &extern_devices = deviceManager_.getExternDevices();
643 
644  for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
645  {
646  Device::ExternDevice::Instance &extern_device = static_cast<Device::ExternDevice::Instance &>(*(*it));
647 
648  extern_device.stepSuccess(analysis);
649  }
650 }
651 
652 //-----------------------------------------------------------------------------
653 // Function : CktLoader::stepFailure
654 // Purpose :
655 // Special Notes :
656 // Scope : public
657 // Creator : Eric R. Keiter, SNL
658 // Creation Date : 03/12/06
659 //-----------------------------------------------------------------------------
661 {
662  const Device::InstanceVector &extern_devices = deviceManager_.getExternDevices();
663 
664  for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
665  {
666  Device::ExternDevice::Instance &extern_device = static_cast<Device::ExternDevice::Instance &>(*(*it));
667 
668  extern_device.stepFailure(analysis);
669  }
670 }
671 
672 //-----------------------------------------------------------------------------
673 // Function : CktLoader::acceptStep
674 // Purpose : Communicate to devices that the current step has been
675 // accepted
676 // Special Notes : Most devices need not know. The Transmission line does.
677 // Scope : public
678 // Creator : Tom Russo, SNL
679 // Creation Date : 01/23/07
680 //-----------------------------------------------------------------------------
682 {
684 }
685 
686 //-----------------------------------------------------------------------------
687 // Function : CktLoader::getInitialQnorm
688 // Purpose :
689 // Special Notes :
690 // Scope : public
691 // Creator : Eric R. Keiter, SNL
692 // Creation Date : 03/18/07
693 //-----------------------------------------------------------------------------
694 bool CktLoader::getInitialQnorm (std::vector<TimeIntg::TwoLevelError> & tleVec )
695 {
696  return deviceManager_.getInitialQnorm(tleVec);
697 }
698 
699 //-----------------------------------------------------------------------------
700 // Function : CktLoader::getInnerLoopErrorSums
701 // Purpose :
702 // Special Notes :
703 // Scope : public
704 // Creator : Eric R. Keiter, SNL
705 // Creation Date : 03/15/06
706 //-----------------------------------------------------------------------------
707 bool CktLoader::getInnerLoopErrorSums (std::vector<TimeIntg::TwoLevelError> & tleVec)
708 {
709  return deviceManager_.getInnerLoopErrorSums (tleVec);
710 }
711 
712 //-----------------------------------------------------------------------------
713 // Function : CktLoader::updateStateArrays
714 // Purpose : Tells the inner loop solve to update state arrays.
715 // Special Notes : Needed to support voltlim with loca, with 2-level.
716 // Scope : public
717 // Creator : Eric R. Keiter, SNL
718 // Creation Date : 03/15/06
719 //-----------------------------------------------------------------------------
721 {
723 }
724 
725 //-----------------------------------------------------------------------------
726 // Function : CktLoader::startTimeStep ()
727 // Purpose : Tells the inner loop solve to do its prediction.
728 // Special Notes : Needed to support 2-level.
729 // Scope : public
730 // Creator : Eric R. Keiter, SNL
731 // Creation Date : 03/15/06
732 //-----------------------------------------------------------------------------
734 {
735  return deviceManager_.startTimeStep ();
736 }
737 
738 //-----------------------------------------------------------------------------
739 // Function : CktLoader::setExternalSolverState
740 // Purpose :
741 // Special Notes : Needed to support 2-level.
742 // Scope : public
743 // Creator : Eric R. Keiter, SNL
744 // Creation Date : 03/21/06
745 //-----------------------------------------------------------------------------
747 {
749 }
750 
751 } // namespace Loader
752 } // namespace Xyce
bool setParam(std::string &name, double val, bool overrideOriginal=false)
Device::DeviceMgr & deviceManager_
Device manager.
void setExternalSolverState(const SolverState &ss)
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.
bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec)
bool calcCouplingTerms(int iSubProblem, int iCouple, const Linear::Vector *dxdvPtr)
void setExternalSolverState(const Device::SolverState &ss)
bool loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector *dfdvPtr)
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 setParam(std::string &name, double val, bool overrideOriginal=false)
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)
bool getLinearSystemFlag() const
Device::DeviceMgr & deviceManager_
Definition: N_ANP_HB.C:2068
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
bool calcCouplingTerms(int iSubProblem, int iElectrode, const Linear::Vector *dxdvPtr)
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)
virtual bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec)
int getHomotopyBlockSize() const
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
virtual double getParamAndReduce(const std::string &name) const
bool allDevicesConverged(Parallel::Machine comm) const
const InstanceVector & getExternDevices() const
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
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 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 getDoubleDCOPFlag() 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 analyticSensitivitiesAvailable(const std::string &name)
std::vector< DeviceInstance * > InstanceVector
Definition: N_DEV_fwd.h:182
double getParamAndReduce(const std::string &name) const
bool innerDevicesConverged(Parallel::Machine comm)
void stepFailure(Xyce::Analysis::TwoLevelMode analysis)
int getHomotopyBlockSize() const
bool getInitialQnorm(std::vector< TimeIntg::TwoLevelError > &tleVec)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const