* qucs_interface.h - m-code interface class definitions
*
* Copyright (C) 2003, 2004, 2005, 2006, 2007 Stefan Jahn <stefan@lkcc.org>
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this package; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* $Id: analysis.h 1869 2013-03-06 12:50:21Z crobarcro $
*
*/
* \brief The generic external interface class header file.
*
* Contains the m-code interface class definition.
*/
* \defgroup QucsInterface
*/
#ifndef __QUCS_INTERFACE_H__
#define __QUCS_INTERFACE_H__
namespace qucs
{
enum QUCS_ERROR_CODES { NETLIST_OK,
NETLIST_FILE_NOT_FOUND,
NETLIST_FAILED_CHECK };
class net;
class input;
class circuit;
class dataset;
class environment;
class e_trsolver;
* \brief superclass for interfacing to the Qucs circuit solvers.
*
* \ingroup QucsInterface
*
* This class is used for interfacing qucs with external software
*
*/
class qucsint
{
public:
qucsint ();
qucsint (char* infile);
~qucsint ();
int prepare_netlist (char* infile);
int evaluate ();
int output (char* outfile);
protected:
qucs::net * subnet;
qucs::input * in;
qucs::circuit * gnd;
qucs::dataset * out;
qucs::environment * root;
int err;
int ret;
};
trsolver_interface
/////////////////////////////////////////////////////////////////////////////*/
enum ETR_MODE { ETR_MODE_ASYNC, ETR_MODE_SYNC };
* \brief subclass for interfacing to the Qucs transient circuit solvers.
*
* \ingroup QucsInterface
*
* This class is used for interfacing the qucs transient circuit
* solver with external software.
*
*/
class trsolver_interface : public qucsint
{
public:
trsolver_interface ();
trsolver_interface (char* infile);
void getETR(void);
int init (double, double, int);
bool getIsInitialised() { return isInitialised; };
int stepsolve_sync (double synctime);
void acceptstep_sync (void);
int stepsolve_async (double steptime);
void acceptstep_async (void);
void rejectstep_async (void);
void getsolution (double *);
int getN ();
int getM ();
* \param ecvsname The name of the voltage source to be set.
* \param V New value of the voltage.
* \return Integer flag reporting success or failure.
*
* This method searches for the ecvs component with the given
* name in \a ecvsname. If the ecvs exists, the value of the voltage
* to be set at the next time step is set to the supplied value in
* \a V.
*
* You can set the voltage of ecvs components in subcircuits created
* by using a name up of the subcircuit hierarchy it is in, e.g. the
* name
*
* SUBtop.SUBlower.ECVS1
*
* to set the voltage of an ecvs named ECVS1 which is located in
* subcircuit SUBlower, which is itself in subcircuit SUBtop in
* the top level circuit.
*
* Returns 0 if the ecvs was found, and -1 otherwise.
*/
int setECVSVoltage(char * ecvsname, double V);
int getJacRows ();
int getJacCols ();
* \param r Pointer to character array containing the name of the voltage
* \param c Reference to double in which the node voltage will be returned
* \return The Jacobian matrix data at the specified location.
*
*/
int getJacData (int r, int c, double& data);
* \param label Pointer to character array containing the name of the voltage
* \param nodeV Reference to double in which the node voltage will be returned
* \return Integer flag reporting success or failure
*
* This method searches for the node with the given name in \a label.
* If the node exists, the value of the voltage at that node is
* copied to \a nodeV. Returns 0 if the node was found, and -1
* otherwise.
*/
int getNodeV (char * label, double& nodeV);
* \param probename Pointer to character array containing the name of the probe
* \param probeV Reference to double in which the node voltage will be returned
* \return Integer flag reporting success or failure
*
* This method searches for the voltage probe with the given name
* in \a probename. If the probe exists, the value of the probe voltage
* is copied to \a probeV. Returns 0 if the probe with the given name
* was found and -1 otherwise.
*/
int getVProbeV (char * probename, double& probeV);
* \param probename Pointer to character array containing the name of the probe
* \param probeI Reference to double in which the current will be returned
* \return Integer flag reporting success or failure
*
* This method searches for the current probe with the given name
* in \a probename. If the probe exists, the value of the probe current
* is copied to \a probeI. Returns 0 if the probe with the given name
* was found and -1 otherwise.
*/
int getIProbeI (char * probename, double& probeI);
* \param printing function to be used by e_trsolver
*
* The printing function can be replace with a function with
* signature
*
* (*messagefcn)(int level, const char * format, ...);
*
* By default this points to the standard Qucs logprint function
* (found in logging.c) on creation of an e_trsolver instance.
* The log \a level flag indicates whether the message is a status
* update or an error message. \a format contains the formatting
* string in the same style as printf (when using logprint). The
* additional arguments are used by logprint in the supplied
* formatting string.
*/
void setMessageFcn (void (*newmessagefcn)(int level, const char * format, ...));
*
* The history of soliutions used in the integration are printed
* to the command line by this function. Primarily useful for
* debugging purposes.
*/
void printSolution (void);
private:
bool isInitialised;
qucs::e_trsolver * etr;
};
}
#endif