numddump.c
来自「ngspice又一个电子CAD仿真软件代码.功能更全」· C语言 代码 · 共 165 行
C
165 行
/**********Copyright 1992 Regents of the University of California. All rights reserved.Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD GroupAuthor: 1991 David A. Gates, U. C. Berkeley CAD Group**********//* * This is a simple routine to dump the internal device states. It produces * states for .OP, .DC, & .TRAN simulations. */#include "ngspice.h"#include "cktdefs.h"#include "numddefs.h"#include "../../../ciderlib/oned/onedext.h"#include "cidersupt.h"#include "suffix.h"/* Forward Declarations */static void NUMDputHeader(FILE *, CKTcircuit *, NUMDinstance *);/* State Counter */static int state_numOP = 0;static int state_numDC = 0;static int state_numTR = 0;voidNUMDdump(inModel, ckt) GENmodel *inModel; CKTcircuit *ckt;{ register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; OUTPcard *output; FILE *fpState; char fileName[BSIZE_SP]; char description[BSIZE_SP]; char *prefix; int *state_num; int anyOutput = 0; if (ckt->CKTmode & MODEDCOP) { prefix = "OP"; state_num = &state_numOP; sprintf(description, "..."); } else if (ckt->CKTmode & MODEDCTRANCURVE) { prefix = "DC"; state_num = &state_numDC; sprintf(description, "sweep = % e", ckt->CKTtime); } else if (ckt->CKTmode & MODETRAN) { prefix = "TR"; state_num = &state_numTR; sprintf(description, "time = % e", ckt->CKTtime); } else { /* Not a recognized CKT mode. */ return; } for (; model != NULL; model = model->NUMDnextModel) { output = model->NUMDoutputs; for (inst = model->NUMDinstances; inst != NULL; inst = inst->NUMDnextInstance) { if (inst->NUMDowner != ARCHme) continue; if (inst->NUMDprintGiven) { if ((ckt->CKTmode & MODETRAN) && ((ckt->CKTstat->STATaccepted - 1) % inst->NUMDprint != 0)) { continue; } anyOutput = 1; sprintf(fileName, "%s%s.%d.%s", output->OUTProotFile, prefix, *state_num, inst->NUMDname); if (!(fpState = fopen(fileName, "w"))) { perror(fileName); } else { NUMDputHeader(fpState, ckt, inst); ONEprnSolution(fpState, inst->NUMDpDevice, model->NUMDoutputs); fclose(fpState); LOGmakeEntry(fileName, description); } } } } if (anyOutput) { (*state_num)++; }}#define NUMDnumOutputs 4staticvoid NUMDputHeader(file, ckt, inst) FILE *file; CKTcircuit *ckt; NUMDinstance *inst;{ char *reference; double refVal = 0.0; int numVars = NUMDnumOutputs; if (ckt->CKTmode & MODEDCOP) { reference = NULL; } else if (ckt->CKTmode & MODEDCTRANCURVE) { reference = "sweep"; refVal = ckt->CKTtime; numVars++; } else if (ckt->CKTmode & MODETRAN) { reference = "time"; refVal = ckt->CKTtime; numVars++; } else { reference = NULL; } fprintf(file, "Title: Device %s external state\n", inst->NUMDname); fprintf(file, "Plotname: Device Operating Point\n"); fprintf(file, "Command: deftype v conductance S\n"); fprintf(file, "Flags: real\n"); fprintf(file, "No. Variables: %d\n", numVars); fprintf(file, "No. Points: 1\n"); numVars = 0; fprintf(file, "Variables:\n"); if (reference) { fprintf(file, "\t%d %s unknown\n", numVars++, reference); } fprintf(file, "\t%d v12 voltage\n", numVars++); fprintf(file, "\t%d i1 current\n", numVars++); fprintf(file, "\t%d i2 current\n", numVars++); fprintf(file, "\t%d g11 conductance\n", numVars++); fprintf(file, "Values:\n0"); if (reference) { fprintf(file, "\t% e\n", refVal); } fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDvoltage)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDid)); fprintf(file, "\t% e\n", - *(ckt->CKTstate0 + inst->NUMDid)); fprintf(file, "\t% e\n", *(ckt->CKTstate0 + inst->NUMDconduct));}voidNUMDacct(inModel, ckt, file) GENmodel *inModel; CKTcircuit *ckt; FILE *file;{ register NUMDmodel *model = (NUMDmodel *) inModel; register NUMDinstance *inst; OUTPcard *output; for (; model != NULL; model = model->NUMDnextModel) { output = model->NUMDoutputs; for (inst = model->NUMDinstances; inst != NULL; inst = inst->NUMDnextInstance) { if (inst->NUMDowner != ARCHme) continue; if (output->OUTPstats) { ONEmemStats(file, inst->NUMDpDevice); ONEcpuStats(file, inst->NUMDpDevice); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?