⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evtaccept.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
字号:
/*============================================================================FILE    EVTaccept.cMEMBER OF process XSPICECopyright 1991Georgia Tech Research CorporationAtlanta, Georgia 30332All Rights ReservedPROJECT A-8503AUTHORS    9/12/91  Bill KuhnMODIFICATIONS    <date> <person name> <nature of modifications>SUMMARY    This file contains a function called at the end of a    successful (accepted) analog timepoint.  It saves pointers    to the states of the queues and data at this accepted time.INTERFACES    void EVTaccept(CKTcircuit *ckt, double time)REFERENCED FILES    None.NON-STANDARD FEATURES    None.============================================================================*//*=== INCLUDE FILES ===*/#include <config.h>#include <stdio.h>#include "cktdefs.h"#include "mif.h"#include "evt.h"/*EVTaccept()This function is called at the end of a successful (accepted)analog timepoint.  It saves pointers to the states of thequeues and data at this accepted time.*/void EVTaccept(    CKTcircuit *ckt,    /* main circuit struct */    double     time)    /* time at which analog soln was accepted */{    int         i;    int         index;    int         num_modified;    Evt_Inst_Queue_t    *inst_queue;    Evt_Output_Queue_t  *output_queue;    Evt_Node_Data_t     *node_data;    Evt_State_Data_t    *state_data;    Evt_Msg_Data_t      *msg_data;    /* Exit if no event instances */    if(ckt->evt->counts.num_insts == 0)        return;    /* Get often used pointers */    inst_queue = &(ckt->evt->queue.inst);    output_queue = &(ckt->evt->queue.output);    node_data = ckt->evt->data.node;    state_data = ckt->evt->data.state;    msg_data = ckt->evt->data.msg;    /* Process the inst queue */    num_modified = inst_queue->num_modified;    /* Loop through list of items modified since last time */    for(i = 0; i < num_modified; i++) {        /* Get the index of the inst modified */        index = inst_queue->modified_index[i];        /* Update last_step for this index */        inst_queue->last_step[index] = inst_queue->current[index];        /* Reset the modified flag */        inst_queue->modified[index] = MIF_FALSE;    }    /* Record the new last_time and reset number modified to zero */    inst_queue->last_time = time;    inst_queue->num_modified = 0;    /* Process the output queue */    num_modified = output_queue->num_modified;    /* Loop through list of items modified since last time */    for(i = 0; i < num_modified; i++) {        /* Get the index of the output modified */        index = output_queue->modified_index[i];        /* Update last_step for this index */        output_queue->last_step[index] = output_queue->current[index];        /* Reset the modified flag */        output_queue->modified[index] = MIF_FALSE;    }    /* Record the new last_time and reset number modified to zero */    output_queue->last_time = time;    output_queue->num_modified = 0;    /* Process the node data */    num_modified = node_data->num_modified;    /* Loop through list of items modified since last time */    for(i = 0; i < num_modified; i++) {        /* Get the index of the node modified */        index = node_data->modified_index[i];        /* Update last_step for this index */        node_data->last_step[index] = node_data->tail[index];        /* Reset the modified flag */        node_data->modified[index] = MIF_FALSE;    }    /* Reset number modified to zero */    node_data->num_modified = 0;    /* Process the state data */    num_modified = state_data->num_modified;    /* Loop through list of items modified since last time */    for(i = 0; i < num_modified; i++) {        /* Get the index of the state modified */        index = state_data->modified_index[i];        /* Update last_step for this index */        state_data->last_step[index] = state_data->tail[index];        /* Reset the modified flag */        state_data->modified[index] = MIF_FALSE;    }    /* Reset number modified to zero */    state_data->num_modified = 0;    /* Process the msg data */    num_modified = msg_data->num_modified;    /* Loop through list of items modified since last time */    for(i = 0; i < num_modified; i++) {        /* Get the index of the msg modified */        index = msg_data->modified_index[i];        /* Update last_step for this index */        msg_data->last_step[index] = msg_data->tail[index];        /* Reset the modified flag */        msg_data->modified[index] = MIF_FALSE;    }    /* Reset number modified to zero */    msg_data->num_modified = 0;} /* EVTaccept */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -