Xyce  6.1
N_DEV_Algorithm.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_DEV_Algorithm.C,v $
27 //
28 // Purpose :
29 //
30 //
31 //
32 // Special Notes :
33 //
34 //
35 // Creator : David Baur
36 //
37 // Creation Date :
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.13.2.1 $
43 //
44 // Revision Date : $Date: 2015/04/02 18:20:09 $
45 //
46 // Current Owner : $Author: tvrusso $
47 //-------------------------------------------------------------------------
48 
49 #include <Xyce_config.h>
50 
51 #include <N_DEV_ADC.h>
52 #include <N_DEV_Algorithm.h>
53 #include <N_DEV_Device.h>
54 #include <N_DEV_DeviceInstance.h>
55 #include <N_DEV_DeviceModel.h>
56 #include <N_DEV_DeviceMaster.h>
57 #include <N_DEV_ExternDevice.h>
58 #include <N_PDS_MPI.h>
59 #include <N_PDS_Serial.h>
60 
61 namespace Xyce {
62 namespace Device {
63 
64 //-----------------------------------------------------------------------------
65 // Function : getName
66 // Purpose :
67 // Special Notes :
68 // Scope : public
69 // Creator : David G. Baur Raytheon Sandia National Laboratories 1355
70 // Creation Date : Tue Apr 22 12:22:31 2014
71 //-----------------------------------------------------------------------------
72 ///
73 /// @param device_instance device instance to return name of
74 ///
75 /// @return name of device instance
76 ///
77 ///
78 template<>
79 const std::string &getName(const DeviceInstance *device_instance)
80 {
81  return device_instance->getName().getEncodedName();
82 }
83 
84 
85 //-----------------------------------------------------------------------------
86 // Function : getName
87 // Purpose :
88 // Special Notes :
89 // Scope : public
90 // Creator : David G. Baur Raytheon Sandia National Laboratories 1355
91 // Creation Date : Tue Apr 22 12:22:31 2014
92 //-----------------------------------------------------------------------------
93 ///
94 /// @param device_model device model to return name of
95 ///
96 /// @return name of device model
97 ///
98 ///
99 template<>
100 const std::string &getName(const DeviceModel *device_model)
101 {
102  return device_model->getName();
103 }
104 
105 
106 bool
108  Parallel::Machine comm,
109  const InstanceVector & extern_devices)
110 {
111  int converged = true;
112  for (InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end() && converged; ++it)
113  {
114  ExternDevice::Instance &extern_device = static_cast<ExternDevice::Instance &>(*(*it));
115 
116  converged = extern_device.isInnerSolveConverged();
117  }
118 
119  Parallel::AllReduce(comm, MPI_LAND, &converged, 1);
120 
121  return converged;
122 }
123 
124 } // namespace Device
125 } // namespace Xyce
126 
const InstanceName & getName() const
Pure virtual class to augment a linear system.
const std::string & getEncodedName() const
Return the instance name encoded as: [s:]*xname [s:]*Ytype!name [s:]*Utype!name!count.
const std::string & getName(const C *c)
Returns the name of the specified object.
const std::string & getName() const
bool devicesConverged(Parallel::Machine comm, const InstanceVector &extern_devices)
std::vector< DeviceInstance * > InstanceVector
Definition: N_DEV_fwd.h:182