Improved current vectors output and added element for last analysis run

This commit is contained in:
pnenzi 2007-10-08 20:18:38 +00:00
parent e9db216a83
commit 56626999fc
5 changed files with 44 additions and 14 deletions

View File

@ -1,3 +1,8 @@
2007-10-8 Paolo Nenzi <p.nenzi@ieee.org>
* src/frontend/{rawfile.c, outitf.c, runcoms.c}, src/include/ftedefs.h:
modified current vectors output amd added struct elements for holding the
name of the last analysis run (all from Phil Barker patch).
2007-10-8 Paolo Nenzi <p.nenzi@ieee.org>
*src/frontend/{device.c, device.h}: modified 'show' command to match
SmartSpice syntax from Phil Barker patch.

View File

@ -146,6 +146,7 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch
run->numData = 0;
an_name = spice_analysis_get_name(((JOB *) analysisPtr)->JOBtype);
ft_curckt->ci_last_an = an_name;
/* Now let's see which of these things we need. First toss in the
* reference vector. Then toss in anything that getSaves() tells
@ -725,10 +726,10 @@ fileInit(runDesc *run)
run->pointPos = i;
fprintf(run->fp, "0 \n"); /* Save 8 spaces here. */
fprintf(run->fp, "Command: version %s\n", ft_sim->version);
/*fprintf(run->fp, "Command: version %s\n", ft_sim->version);*/
fprintf(run->fp, "Variables:\n");
fprintf(stderr, "No. of Data Columns : %d \n", run->numData);
printf("No. of Data Columns : %d \n", run->numData);
return;
}
@ -737,12 +738,12 @@ static void
fileInit_pass2(runDesc *run)
{
int i, type;
char *name, buf[BSIZE_SP];
char *name, buf[BSIZE_SP], *branch;
for (i = 0; i < run->numData; i++) {
if (isdigit(*run->data[i].name)) {
(void) sprintf(buf, "V(%s)", run->data[i].name);
(void) sprintf(buf, "v(%s)", run->data[i].name);
name = buf;
} else {
name = run->data[i].name;
@ -760,8 +761,18 @@ fileInit_pass2(runDesc *run)
else
type = SV_VOLTAGE;
fprintf(run->fp, "\t%d\t%s\t%s", i, name,
ft_typenames(type));
if ( type == SV_CURRENT ) {
branch = NULL;
if ( (branch = strstr( name, "#branch" )) ) {
*branch = '\0';
}
fprintf(run->fp, "\t%d\ti(%s)\t%s", i, name, ft_typenames(type));
if ( branch != NULL ) *branch = '#';
} else if ( type == SV_VOLTAGE ) {
fprintf(run->fp, "\t%d\tv(%s)\t%s", i, name, ft_typenames(type));
} else {
fprintf(run->fp, "\t%d\t%s\t%s", i, name, ft_typenames(type));
}
if (run->data[i].gtype == GRID_XLOG)
fprintf(run->fp, "\tgrid=3");
fprintf(run->fp, "\n");
@ -844,7 +855,7 @@ fileEnd(runDesc *run)
place = ftell(run->fp);
fseek(run->fp, run->pointPos, 0);
fprintf(run->fp, "%d", run->pointCount);
fprintf(stderr, "\nNo. of Data Rows : %d\n", run->pointCount);
printf("\nNo. of Data Rows : %d\n", run->pointCount);
fseek(run->fp, place, 0);
} else {
/* Yet another hack-around */
@ -966,8 +977,9 @@ plotAddComplexValue(dataDesc *desc, IFcomplex value)
static void
plotEnd(runDesc *run)
{
fprintf(stderr, "\nNo. of Data Rows : %d\n", run->pointCount);
return;
fprintf(stderr,"\n");
printf("\nNo. of Data Rows : %d\n", run->pointCount);
return;
}

View File

@ -45,6 +45,7 @@ raw_write(char *name, struct plot *pl, bool app, bool binary)
struct variable *vv;
double dd;
char buf[BSIZE_SP];
char *branch;
if (!cp_getvar("nopadding", VT_BOOL, (char *) &raw_padding))
raw_padding = FALSE;
@ -156,8 +157,18 @@ raw_write(char *name, struct plot *pl, bool app, bool binary)
fprintf(fp, "Variables:\n");
for (i = 0, v = pl->pl_dvecs; v; v = v->v_next) {
fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name,
ft_typenames(v->v_type));
if ( strcmp( ft_typenames(v->v_type), "current" ) == 0 ) {
branch = NULL;
if ( (branch = strstr( v->v_name, "#branch" )) ) {
*branch = '\0';
}
fprintf(fp, "\t%d\ti(%s)\t%s", i++, v->v_name, ft_typenames(v->v_type));
if ( branch != NULL ) *branch = '#';
} else if ( strcmp( ft_typenames(v->v_type), "voltage" ) == 0 ) {
fprintf(fp, "\t%d\tv(%s)\t%s", i++, v->v_name, ft_typenames(v->v_type));
} else {
fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name, ft_typenames(v->v_type));
}
if (v->v_flags & VF_MINGIVEN)
fprintf(fp, " min=%e", v->v_minsignal);
if (v->v_flags & VF_MAXGIVEN)

View File

@ -165,7 +165,6 @@ dosim(char *what, wordlist *wl)
struct circ *ct;
int err = 0;
bool ascii = AsciiRawFile;
if (eq(what, "run") && wl)
dofile = TRUE;
if (!dofile) {
@ -258,6 +257,7 @@ dosim(char *what, wordlist *wl)
} else {
rawfileFp = NULL;
}
/*save rawfile name saj*/
if(last_used_rawfile)
tfree(last_used_rawfile);
@ -304,6 +304,7 @@ dosim(char *what, wordlist *wl)
} else
ft_curckt->ci_inprogress = FALSE;
}
if (rawfileFp){
if (ftell(rawfileFp)==0) {
(void) fclose(rawfileFp);
@ -344,9 +345,9 @@ ft_dorun(char *file)
wl.wl_word = file;
if (file)
return dosim("run", &wl);
return dosim("run", &wl);
else
return dosim("run", (wordlist *) NULL);
return dosim("run", (wordlist *) NULL);
}
/* ARGSUSED */ /* until the else clause gets put back */

View File

@ -45,6 +45,7 @@ struct circ {
char *ci_defOpt; /* the default options anal. for this circuit */
char *ci_specOpt; /* the special options anal. for command line jobs */
char *ci_curOpt; /* the most recent options anal. for the circuit */
char *ci_last_an; /* name of last analysis run */
} ;