int CKTacLoad(CKTcircuit *ckt) { int i; int size; int error; double startTime; startTime = SPfrontEnd->IFseconds(); size = SMPmatSize(ckt->CKTmatrix); for (i=0;i<=size;i++) { ckt->CKTrhs[i]=0; ckt->CKTirhs[i]=0; } SMPcClear(ckt->CKTmatrix); for (i=0;i<DEVmaxnum;i++) { if ( DEVices[i] && DEVices[i]->DEVacLoad && ckt->CKThead[i] ) { error = DEVices[i]->DEVacLoad (ckt->CKThead[i], ckt); if(error) return(error); } } #ifdef XSPICE /* gtri - begin - Put resistors to ground at all nodes. */ /* Value of resistor is set by new "rshunt" option. */ if(ckt->enh->rshunt_data.enabled) { for(i = 0; i < ckt->enh->rshunt_data.num_nodes; i++) { *(ckt->enh->rshunt_data.diag[i]) += ckt->enh->rshunt_data.gshunt; } } /* gtri - end - Put resistors to ground at all nodes */ /* gtri - add - wbk - 11/26/90 - reset the MIF init flags */ /* init is set by CKTinit and should be true only for first load call */ g_mif_info.circuit.init = MIF_FALSE; /* anal_init is set by CKTdoJob and is true for first call */ /* of a particular analysis type */ g_mif_info.circuit.anal_init = MIF_FALSE; /* gtri - end - wbk - 11/26/90 */ #endif ckt->CKTstat->STATloadTime += SPfrontEnd->IFseconds() - startTime; return(OK); }
int CKTpzLoad(CKTcircuit *ckt, SPcomplex *s) { PZAN *job = (PZAN *) ckt->CKTcurJob; int error; int i; for (i = 0; i <= SMPmatSize(ckt->CKTmatrix); i++) { ckt->CKTrhs[i] = 0.0; ckt->CKTirhs[i] = 0.0; } SMPcClear(ckt->CKTmatrix); for (i = 0; i < DEVmaxnum; i++) { if (DEVices[i] && DEVices[i]->DEVpzLoad != NULL && ckt->CKThead[i] != NULL) { error = DEVices[i]->DEVpzLoad (ckt->CKThead[i], ckt, s); if(error) return(error); } } if (job->PZbalance_col && job->PZsolution_col) { SMPcAddCol(ckt->CKTmatrix, job->PZbalance_col, job->PZsolution_col); /* AC sources ?? XXX */ } if (job->PZsolution_col) { SMPcZeroCol(ckt->CKTmatrix, job->PZsolution_col); } /* Driving function (current source) */ if (job->PZdrive_pptr) *job->PZdrive_pptr = 1.0; if (job->PZdrive_nptr) *job->PZdrive_nptr = -1.0; return(OK); }
int CKTacLoad(CKTcircuit *ckt) { int i; int size; int error; #ifdef PARALLEL_ARCH long type = MT_ACLOAD, length = 1; #endif /* PARALLEL_ARCH */ double startTime; startTime = SPfrontEnd->IFseconds(); size = SMPmatSize(ckt->CKTmatrix); for (i=0;i<=size;i++) { *(ckt->CKTrhs+i)=0; *(ckt->CKTirhs+i)=0; } SMPcClear(ckt->CKTmatrix); for (i=0;i<DEVmaxnum;i++) { if ( DEVices[i] && ((*DEVices[i]).DEVacLoad != NULL) && (ckt->CKThead[i] != NULL) ){ error = (*((*DEVices[i]).DEVacLoad))(ckt->CKThead[i],ckt); #ifdef PARALLEL_ARCH if (error) goto combine; #else if(error) return(error); #endif /* PARALLEL_ARCH */ } } #ifdef XSPICE /* gtri - begin - Put resistors to ground at all nodes. */ /* Value of resistor is set by new "rshunt" option. */ if(ckt->enh->rshunt_data.enabled) { for(i = 0; i < ckt->enh->rshunt_data.num_nodes; i++) { *(ckt->enh->rshunt_data.diag[i]) += ckt->enh->rshunt_data.gshunt; } } /* gtri - end - Put resistors to ground at all nodes */ /* gtri - add - wbk - 11/26/90 - reset the MIF init flags */ /* init is set by CKTinit and should be true only for first load call */ g_mif_info.circuit.init = MIF_FALSE; /* anal_init is set by CKTdoJob and is true for first call */ /* of a particular analysis type */ g_mif_info.circuit.anal_init = MIF_FALSE; /* gtri - end - wbk - 11/26/90 */ #endif #ifdef PARALLEL_ARCH combine: ckt->CKTstat->STATloadTime += SPfrontEnd->IFseconds() - startTime; startTime = SPfrontEnd->IFseconds(); /* See if any of the DEVload functions bailed. If not, proceed. */ IGOP_( &type, &error, &length, "max" ); ckt->CKTstat->STATsyncTime += SPfrontEnd->IFseconds() - startTime; if (error == OK) { startTime = SPfrontEnd->IFseconds(); SMPcCombine( ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTrhsSpare, ckt->CKTirhs, ckt->CKTirhsSpare ); ckt->CKTstat->STATcombineTime += SPfrontEnd->IFseconds() - startTime; return(OK); } else { return(error); } #else ckt->CKTstat->STATloadTime += SPfrontEnd->IFseconds() - startTime; return(OK); #endif /* PARALLEL_ARCH */ }