¿Cómo Spice analiza una lista de redes?

0

A partir de esta discusión sobre el interior de Spice , parece que Spice construye un matriz para una lista de redes. Me pregunto cómo lo hace en detalle, por ejemplo. para para escribe un analizador simple.

Por ejemplo, :

R1  1  2  4
V1  2  1  2

¿Cómo puede verse una estructura de datos de este circuito?

    
pregunta poseid

1 respuesta

1

No he visto el código fuente de SPICE, pero he visto GNUCAP varias veces.

En general, habrá una clase base (o estructura) para cualquier componente que pondría en un circuito. Luego, componentes como resistencias y fuentes de voltaje pueden heredar de esta clase base.

Esto es lo que podría parecer en C ++

#include <vector>

// circuit base
// ctk is a common abbreviation in GNUCAP
class CtkBase
{
    std::vector<int> inputs;
    std::vector<int> outputs;
public:
    CtkBase (void);
    virtual ~CtkBase (void);
    virtual add_input (int n);
    virtual add_output (int n);
};

class Resistor final : public CtkBase
{
  double value;
public:
  Resistor (void);
  ~Resistor (void);
  void set_value (double value);
};

class VoltageSource final : public CtkBase
{
  double value;
public:
  VoltageSource (void);
  ~VoltageSource (void);
  void set_value (double value);
};

class Ctk final
{
  std::vector <CtkBase*> components;
public:
  Ctk (void);
  ~Ctk (void);
  void add_component (CtkBase *base);
};

int
main (void)
{
  auto r1 = new Resistor;
  r1->set_value(200.00);
  r1->add_input(1);
  r1->add_output(0);

  auto vcc = new VolatageSource();
  vcc->set_value(5.00);
  vcc->add_input(0);
  vcc->add_output(1);

  Ctk ctk;
  ctk.add_component(r1);
  ctk.add_component(vcc);

  // do stuff here

  return 0;
}

Y la sección de "hacer cosas" depende completamente de ti. Recomendaría aprender sobre el patrón de diseño del Visitante, si va a analizar o modificar la estructura del circuito de alguna manera.

Probablemente podría agregar otra clase base llamada Component , que será heredada por Resistor y VoltageSource que contiene el miembro value , y recortar algunas líneas de código (si lo desea).

    
respondido por el tay10r

Lea otras preguntas en las etiquetas