Browse Source

nipred.c, cleanup

pre-master-46
Krzysztof Blaszkowski 13 years ago
committed by rlar
parent
commit
6a00876731
  1. 140
      src/maths/ni/nipred.c

140
src/maths/ni/nipred.c

@ -2,16 +2,14 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
**********/
/*
* NIpred(ckt)
*
* This subroutine does node voltage prediction based on the
* integration method
*/
/*
* NIpred(ckt)
*
* This subroutine does node voltage prediction based on the
* integration method
*/
#include "ngspice/ngspice.h"
#include "ngspice/trandefs.h"
#include "ngspice/cktdefs.h"
@ -19,9 +17,9 @@ Author: 1985 Thomas L. Quarles
#include "ngspice/smpdefs.h"
#ifdef PREDICTOR
int
NIpred(CKTcircuit * ckt)
{
int i;
int size;
@ -38,33 +36,33 @@ NIpred(CKTcircuit * ckt)
size = SMPmatSize(ckt->CKTmatrix);
switch(ckt->CKTintegrateMethod) {
switch (ckt->CKTintegrateMethod) {
case TRAPEZOIDAL: {
double dd0,dd1,a,b;
switch(ckt->CKTorder) {
double dd0, dd1, a, b;
switch (ckt->CKTorder) {
case 1:
for(i=0;i<=size;i++) {
dd0=(ckt->CKTsols[0][i]-ckt->CKTsols[1][i])/
(ckt->CKTdeltaOld[1]);
ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTsols[0][i]+
ckt->CKTdeltaOld[0]*dd0;
for (i = 0; i <= size; i++) {
dd0 = (ckt->CKTsols[0][i] - ckt->CKTsols[1][i]) /
ckt->CKTdeltaOld[1];
ckt->CKTpred[i] = ckt->CKTrhs[i] = ckt->CKTsols[0][i] +
ckt->CKTdeltaOld[0] * dd0;
}
break;
case 2:
for(i=0;i<=size;i++) {
b = -ckt->CKTdeltaOld[0]/(2*ckt->CKTdeltaOld[1]);
a = 1-b;
dd0=(ckt->CKTsols[0][i]-ckt->CKTsols[1][i])/
(ckt->CKTdeltaOld[1]);
dd1= ((ckt->CKTsols[1][i]-ckt->CKTsols[2][i])/
ckt->CKTdeltaOld[2] );
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTsols[0][i]+
(b*dd1 + a*dd0)* ckt->CKTdeltaOld[0];
for (i = 0; i <= size; i++) {
b = - ckt->CKTdeltaOld[0] / (2*ckt->CKTdeltaOld[1]);
a = 1 - b;
dd0 = (ckt->CKTsols[0][i] - ckt->CKTsols[1][i]) /
ckt->CKTdeltaOld[1];
dd1 = (ckt->CKTsols[1][i] - ckt->CKTsols[2][i]) /
ckt->CKTdeltaOld[2];
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTsols[0][i] +
(b * dd1 + a * dd0) * ckt->CKTdeltaOld[0];
}
break;
@ -72,81 +70,83 @@ NIpred(CKTcircuit * ckt)
return(E_ORDER);
}
}
break;
break;
case GEAR:
case GEAR:
node = ckt->CKTnodes;
switch(ckt->CKTorder) {
switch (ckt->CKTorder) {
case 1:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] ;
node = node->next;
}
break;
case 2:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] +
ckt->CKTagp[2]* ckt->CKTsols[2][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] +
ckt->CKTagp[2] * ckt->CKTsols[2][i] ;
node = node->next;
}
break;
case 3:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] +
ckt->CKTagp[2]* ckt->CKTsols[2][i] +
ckt->CKTagp[3]* ckt->CKTsols[3][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] +
ckt->CKTagp[2] * ckt->CKTsols[2][i] +
ckt->CKTagp[3] * ckt->CKTsols[3][i] ;
}
break;
case 4:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] +
ckt->CKTagp[2]* ckt->CKTsols[2][i] +
ckt->CKTagp[3]* ckt->CKTsols[3][i] +
ckt->CKTagp[4]* ckt->CKTsols[4][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] +
ckt->CKTagp[2] * ckt->CKTsols[2][i] +
ckt->CKTagp[3] * ckt->CKTsols[3][i] +
ckt->CKTagp[4] * ckt->CKTsols[4][i] ;
}
break;
case 5:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] +
ckt->CKTagp[2]* ckt->CKTsols[2][i] +
ckt->CKTagp[3]* ckt->CKTsols[3][i] +
ckt->CKTagp[4]* ckt->CKTsols[4][i] +
ckt->CKTagp[5]* ckt->CKTsols[5][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] +
ckt->CKTagp[2] * ckt->CKTsols[2][i] +
ckt->CKTagp[3] * ckt->CKTsols[3][i] +
ckt->CKTagp[4] * ckt->CKTsols[4][i] +
ckt->CKTagp[5] * ckt->CKTsols[5][i] ;
}
break;
case 6:
for(i=0;i<=size;i++) {
ckt->CKTpred[i]=ckt->CKTrhs[i] =
ckt->CKTagp[0]* ckt->CKTsols[0][i] +
ckt->CKTagp[1]* ckt->CKTsols[1][i] +
ckt->CKTagp[2]* ckt->CKTsols[2][i] +
ckt->CKTagp[3]* ckt->CKTsols[3][i] +
ckt->CKTagp[4]* ckt->CKTsols[4][i] +
ckt->CKTagp[5]* ckt->CKTsols[5][i] +
ckt->CKTagp[6]* ckt->CKTsols[6][i] ;
for (i = 0; i <= size; i++) {
ckt->CKTpred[i] = ckt->CKTrhs[i] =
ckt->CKTagp[0] * ckt->CKTsols[0][i] +
ckt->CKTagp[1] * ckt->CKTsols[1][i] +
ckt->CKTagp[2] * ckt->CKTsols[2][i] +
ckt->CKTagp[3] * ckt->CKTsols[3][i] +
ckt->CKTagp[4] * ckt->CKTsols[4][i] +
ckt->CKTagp[5] * ckt->CKTsols[5][i] +
ckt->CKTagp[6] * ckt->CKTsols[6][i] ;
}
break;
default:
return(E_ORDER);
}
break;
break;
default:
return(E_METHOD);
}
return(OK);
}
#else
int Dummy_Symbol;
#endif /* PREDICTOR */
Loading…
Cancel
Save