cleanup, use array operator
checked for object file invariance on linux with ./configure --enable-debug=no --enable-maintainer-mode --with-readline=yes --enable-cider --enable-ndev --enable-pss --enable-xspice
This commit is contained in:
parent
1e5a9424cc
commit
f081cf8606
|
|
@ -104,10 +104,10 @@ NBJTconductance(ONEdevice *pDevice, BOOLEAN tranAnalysis, double *intCoeff,
|
|||
pNode = pBaseElem->pRightNode;
|
||||
|
||||
if (pNode->baseType == N_TYPE) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pDevice->rhs[pNode->nEqn] = nConc * pNode->eg;
|
||||
} else if (pNode->baseType == P_TYPE) {
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
pDevice->rhs[pNode->pEqn] = pConc * pNode->eg;
|
||||
} else {
|
||||
printf("NBJTconductance: unknown base type\n");
|
||||
|
|
|
|||
|
|
@ -149,9 +149,9 @@ ONE_sysLoad(ONEdevice *pDevice, BOOLEAN tranAnalysis,
|
|||
netConc = pNode->netConc;
|
||||
dNd = 0.0;
|
||||
dNa = 0.0;
|
||||
psi = *(pDevice->devState0 + pNode->nodePsi);
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
psi = pDevice->devState0 [pNode->nodePsi];
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
|
||||
|
||||
if (FreezeOut) {
|
||||
|
|
@ -290,9 +290,9 @@ ONE_jacLoad(ONEdevice *pDevice)
|
|||
pEdge = pElem->pEdge;
|
||||
dNd = 0.0;
|
||||
dNa = 0.0;
|
||||
psi = *(pDevice->devState0 + pNode->nodePsi);
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
psi = pDevice->devState0 [pNode->nodePsi];
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
if (FreezeOut) {
|
||||
ONE_freezeOut(pNode, nConc, pConc, &fNd, &fNa, &fdNd, &fdNa);
|
||||
dNd = pNode->nd * fdNd;
|
||||
|
|
@ -418,9 +418,9 @@ ONE_rhsLoad(ONEdevice *pDevice, BOOLEAN tranAnalysis,
|
|||
netConc = pNode->netConc;
|
||||
dNd = 0.0;
|
||||
dNa = 0.0;
|
||||
psi = *(pDevice->devState0 + pNode->nodePsi);
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
psi = pDevice->devState0 [pNode->nodePsi];
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
if (FreezeOut) {
|
||||
ONE_freezeOut(pNode, nConc, pConc, &fNd, &fNa, &fdNd, &fdNa);
|
||||
netConc = pNode->nd * fNd - pNode->na * fNa;
|
||||
|
|
@ -543,10 +543,10 @@ ONE_commonTerms(ONEdevice *pDevice, BOOLEAN currentOnly,
|
|||
}
|
||||
}
|
||||
/* store info in the state tables */
|
||||
*(pDevice->devState0 + pNode->nodePsi) = psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = psi;
|
||||
if (pElem->elemType == SEMICON) {
|
||||
*(pDevice->devState0 + pNode->nodeN) = nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pConc;
|
||||
if (tranAnalysis && pNode->nodeType != CONTACT) {
|
||||
pNode->dNdT = integrate(pDevice->devStates, info, pNode->nodeN);
|
||||
pNode->dPdT = integrate(pDevice->devStates, info, pNode->nodeP);
|
||||
|
|
@ -568,7 +568,7 @@ ONE_commonTerms(ONEdevice *pDevice, BOOLEAN currentOnly,
|
|||
psi2 = pNode->psi;
|
||||
}
|
||||
pEdge->dPsi = psi2 - psi1;
|
||||
*(pDevice->devState0 + pEdge->edgeDpsi) = pEdge->dPsi;
|
||||
pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi;
|
||||
}
|
||||
/* calculate the current densities and mobility values */
|
||||
for (eIndex = 1; eIndex < pDevice->numNodes; eIndex++) {
|
||||
|
|
@ -579,10 +579,10 @@ ONE_commonTerms(ONEdevice *pDevice, BOOLEAN currentOnly,
|
|||
dPsiP = pEdge->dPsi - pEdge->dVBand;
|
||||
bernoulli(dPsiN, &bPsiN, &dbPsiN, &bMPsiN, &dbMPsiN, !currentOnly);
|
||||
bernoulli(dPsiP, &bPsiP, &dbPsiP, &bMPsiP, &dbMPsiP, !currentOnly);
|
||||
nC = *(pDevice->devState0 + pElem->pLeftNode->nodeN);
|
||||
nP1 = *(pDevice->devState0 + pElem->pRightNode->nodeN);
|
||||
pC = *(pDevice->devState0 + pElem->pLeftNode->nodeP);
|
||||
pP1 = *(pDevice->devState0 + pElem->pRightNode->nodeP);
|
||||
nC = pDevice->devState0 [pElem->pLeftNode->nodeN];
|
||||
nP1 = pDevice->devState0 [pElem->pRightNode->nodeN];
|
||||
pC = pDevice->devState0 [pElem->pLeftNode->nodeP];
|
||||
pP1 = pDevice->devState0 [pElem->pRightNode->nodeP];
|
||||
conc1 = pElem->pLeftNode->totalConc;
|
||||
conc2 = pElem->pRightNode->totalConc;
|
||||
pEdge->jn = (bPsiN * nP1 - bMPsiN * nC);
|
||||
|
|
|
|||
|
|
@ -714,12 +714,12 @@ ONEbiasSolve(ONEdevice *pDevice, int iterationLimit,
|
|||
pNode = pElem->pNodes[index];
|
||||
if (pNode->nodeType != CONTACT) {
|
||||
pNode->psi = solution[pNode->psiEqn];
|
||||
*(pDevice->devState0 + pNode->nodePsi) = pNode->psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = pNode->psi;
|
||||
if (pElem->elemType == SEMICON) {
|
||||
pNode->nConc = solution[pNode->nEqn];
|
||||
pNode->pConc = solution[pNode->pEqn];
|
||||
*(pDevice->devState0 + pNode->nodeN) = pNode->nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pNode->pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = pNode->nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pNode->pConc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -894,7 +894,7 @@ ONEpredict(ONEdevice *pDevice, ONEtranInfo *info)
|
|||
for (nIndex = 0; nIndex <= 1; nIndex++) {
|
||||
if (pElem->evalNodes[nIndex]) {
|
||||
pNode = pElem->pNodes[nIndex];
|
||||
pNode->psi = *(pDevice->devState1 + pNode->nodePsi);
|
||||
pNode->psi = pDevice->devState1 [pNode->nodePsi];
|
||||
if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) {
|
||||
pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN);
|
||||
pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP);
|
||||
|
|
@ -983,10 +983,10 @@ ONEsaveState(ONEdevice *pDevice)
|
|||
for (nIndex = 0; nIndex <= 1; nIndex++) {
|
||||
if (pElem->evalNodes[nIndex]) {
|
||||
pNode = pElem->pNodes[nIndex];
|
||||
pNode->psi = *(pDevice->devState1 + pNode->nodePsi);
|
||||
pNode->psi = pDevice->devState1 [pNode->nodePsi];
|
||||
if (pElem->elemType == SEMICON && pNode->nodeType != CONTACT) {
|
||||
pNode->nConc = *(pDevice->devState1 + pNode->nodeN);
|
||||
pNode->pConc = *(pDevice->devState1 + pNode->nodeP);
|
||||
pNode->nConc = pDevice->devState1 [pNode->nodeN];
|
||||
pNode->pConc = pDevice->devState1 [pNode->nodeP];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,43 +23,43 @@ integrate(double **devStates, TranInfo *info, int qcap )
|
|||
case BDF:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap];
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap];
|
||||
break;
|
||||
case 3:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap];
|
||||
break;
|
||||
case 4:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap];
|
||||
break;
|
||||
case 5:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap)) +
|
||||
coeff[5] * (*(devStates[5]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap] +
|
||||
coeff[5] * devStates[5][qcap];
|
||||
break;
|
||||
case 6:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap)) +
|
||||
coeff[5] * (*(devStates[5]+qcap)) +
|
||||
coeff[6] * (*(devStates[6]+qcap));
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap] +
|
||||
coeff[5] * devStates[5][qcap] +
|
||||
coeff[6] * devStates[6][qcap];
|
||||
break;
|
||||
default:
|
||||
printf( "\n integration order %d !! STOP \n", info->order );
|
||||
|
|
@ -70,15 +70,15 @@ integrate(double **devStates, TranInfo *info, int qcap )
|
|||
default:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap));
|
||||
*(devStates[0]+ccap) = value;
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap];
|
||||
devStates[0][ccap] = value;
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[0] * (*(devStates[0]+qcap)) +
|
||||
coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[1]+ccap));
|
||||
*(devStates[0]+ccap) = value;
|
||||
value = coeff[0] * devStates[0][qcap] +
|
||||
coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[1][ccap];
|
||||
devStates[0][ccap] = value;
|
||||
break;
|
||||
default:
|
||||
printf( "\n integration order %d !! STOP \n", info->order );
|
||||
|
|
@ -102,43 +102,43 @@ predict(double **devStates, TranInfo *info, int qcap )
|
|||
case BDF:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap];
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap];
|
||||
break;
|
||||
case 3:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap)) +
|
||||
coeff[3] * (*(devStates[4]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap] +
|
||||
coeff[3] * devStates[4][qcap];
|
||||
break;
|
||||
case 4:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap)) +
|
||||
coeff[3] * (*(devStates[4]+qcap)) +
|
||||
coeff[4] * (*(devStates[5]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap] +
|
||||
coeff[3] * devStates[4][qcap] +
|
||||
coeff[4] * devStates[5][qcap];
|
||||
break;
|
||||
case 5:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap)) +
|
||||
coeff[3] * (*(devStates[4]+qcap)) +
|
||||
coeff[4] * (*(devStates[5]+qcap)) +
|
||||
coeff[5] * (*(devStates[6]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap] +
|
||||
coeff[3] * devStates[4][qcap] +
|
||||
coeff[4] * devStates[5][qcap] +
|
||||
coeff[5] * devStates[6][qcap];
|
||||
break;
|
||||
case 6:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap)) +
|
||||
coeff[3] * (*(devStates[4]+qcap)) +
|
||||
coeff[4] * (*(devStates[5]+qcap)) +
|
||||
coeff[5] * (*(devStates[6]+qcap)) +
|
||||
coeff[6] * (*(devStates[7]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap] +
|
||||
coeff[3] * devStates[4][qcap] +
|
||||
coeff[4] * devStates[5][qcap] +
|
||||
coeff[5] * devStates[6][qcap] +
|
||||
coeff[6] * devStates[7][qcap];
|
||||
break;
|
||||
default:
|
||||
printf( "\n prediction order %d !! STOP \n", info->order );
|
||||
|
|
@ -149,17 +149,17 @@ predict(double **devStates, TranInfo *info, int qcap )
|
|||
default:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap];
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[3]+qcap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[3][qcap];
|
||||
/*
|
||||
value = coeff[0] * (*(devStates[1]+qcap)) +
|
||||
coeff[1] * (*(devStates[2]+qcap)) +
|
||||
coeff[2] * (*(devStates[1]+ccap));
|
||||
value = coeff[0] * devStates[1][qcap] +
|
||||
coeff[1] * devStates[2][qcap] +
|
||||
coeff[2] * devStates[1][ccap];
|
||||
*/
|
||||
break;
|
||||
default:
|
||||
|
|
@ -244,37 +244,37 @@ integrateLin(double **devStates, TranInfo *info, int qcap )
|
|||
case BDF:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[1] * (*(devStates[1]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap];
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap];
|
||||
break;
|
||||
case 3:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap];
|
||||
break;
|
||||
case 4:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap];
|
||||
break;
|
||||
case 5:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap)) +
|
||||
coeff[5] * (*(devStates[5]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap] +
|
||||
coeff[5] * devStates[5][qcap];
|
||||
break;
|
||||
case 6:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[2]+qcap)) +
|
||||
coeff[3] * (*(devStates[3]+qcap)) +
|
||||
coeff[4] * (*(devStates[4]+qcap)) +
|
||||
coeff[5] * (*(devStates[5]+qcap)) +
|
||||
coeff[6] * (*(devStates[6]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[2][qcap] +
|
||||
coeff[3] * devStates[3][qcap] +
|
||||
coeff[4] * devStates[4][qcap] +
|
||||
coeff[5] * devStates[5][qcap] +
|
||||
coeff[6] * devStates[6][qcap];
|
||||
break;
|
||||
default:
|
||||
printf( "\n integration order %d !! STOP \n", info->order );
|
||||
|
|
@ -285,11 +285,11 @@ integrateLin(double **devStates, TranInfo *info, int qcap )
|
|||
default:
|
||||
switch( info->order ) {
|
||||
case 1:
|
||||
value = coeff[1] * (*(devStates[1]+qcap));
|
||||
value = coeff[1] * devStates[1][qcap];
|
||||
break;
|
||||
case 2:
|
||||
value = coeff[1] * (*(devStates[1]+qcap)) +
|
||||
coeff[2] * (*(devStates[1]+ccap));
|
||||
value = coeff[1] * devStates[1][qcap] +
|
||||
coeff[2] * devStates[1][ccap];
|
||||
break;
|
||||
default:
|
||||
printf( "\n integration order %d !! STOP \n", info->order );
|
||||
|
|
|
|||
|
|
@ -366,8 +366,8 @@ void
|
|||
*(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 +
|
||||
dx * pVEdge->dJpDpsiP1;
|
||||
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc);
|
||||
|
||||
/* Handle generation terms */
|
||||
|
|
@ -725,8 +725,8 @@ void
|
|||
pRhs[ pNode->psiEqn ] += dx * pHEdge->qf;
|
||||
pRhs[ pNode->psiEqn ] += dy * pVEdge->qf;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc);
|
||||
|
||||
/* Handle generation terms */
|
||||
|
|
@ -842,10 +842,10 @@ void
|
|||
}
|
||||
|
||||
/* store info in the state tables */
|
||||
*(pDevice->devState0 + pNode->nodePsi) = psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = psi;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
*(pDevice->devState0 + pNode->nodeN) = nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pConc;
|
||||
if ( tranAnalysis && (pNode->nodeType != CONTACT) ) {
|
||||
pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN );
|
||||
pNode->dPdT = integrate( pDevice->devStates, info, pNode->nodeP );
|
||||
|
|
@ -873,7 +873,7 @@ void
|
|||
} else {
|
||||
pEdge->dPsi = psi1 - psi2;
|
||||
}
|
||||
*(pDevice->devState0 + pEdge->edgeDpsi) = pEdge->dPsi;
|
||||
pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi;
|
||||
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
/* Calculate weighted driving forces - wdfn & wdfp for the edge */
|
||||
|
|
|
|||
|
|
@ -308,8 +308,8 @@ void
|
|||
pRhs[ pNode->psiEqn ] += dx * pHEdge->qf;
|
||||
pRhs[ pNode->psiEqn ] += dy * pVEdge->qf;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
|
||||
*(pNode->fPsiN) += dxdy;
|
||||
*(pNode->fPsiPsi) += dxdy * pConc;
|
||||
|
|
@ -465,7 +465,7 @@ void
|
|||
} else {
|
||||
pVEdge = pREdge;
|
||||
}
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
*(pNode->fPsiN) += dxdy;
|
||||
*(pNode->fPsiPsi) += dxdy * pConc;
|
||||
*(pNode->fNPsi) -= dy * pHEdge->dJnDpsiP1 + dx * pVEdge->dJnDpsiP1;
|
||||
|
|
@ -613,8 +613,8 @@ void
|
|||
pRhs[ pNode->psiEqn ] += dx * pHEdge->qf;
|
||||
pRhs[ pNode->psiEqn ] += dy * pVEdge->qf;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc);
|
||||
|
||||
/* Handle generation terms */
|
||||
|
|
@ -718,10 +718,10 @@ void
|
|||
}
|
||||
|
||||
/* store info in the state tables */
|
||||
*(pDevice->devState0 + pNode->nodePsi) = psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = psi;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
*(pDevice->devState0 + pNode->nodeN) = nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pConc;
|
||||
if ( tranAnalysis && pNode->nodeType != CONTACT ) {
|
||||
pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN );
|
||||
}
|
||||
|
|
@ -748,7 +748,7 @@ void
|
|||
} else {
|
||||
pEdge->dPsi = psi1 - psi2;
|
||||
}
|
||||
*(pDevice->devState0 + pEdge->edgeDpsi) = pEdge->dPsi;
|
||||
pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi;
|
||||
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
/* Calculate weighted driving forces - wdfn & wdfp for the edge */
|
||||
|
|
|
|||
|
|
@ -307,8 +307,8 @@ void
|
|||
pRhs[ pNode->psiEqn ] += dy * pVEdge->qf;
|
||||
*(pNode->fPsiPsi) += dyOverDx + dxOverDy;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
|
||||
*(pNode->fPsiPsi) += dxdy * nConc;
|
||||
*(pNode->fPsiP) -= dxdy;
|
||||
|
|
@ -463,7 +463,7 @@ void
|
|||
} else {
|
||||
pVEdge = pREdge;
|
||||
}
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
*(pNode->fPsiPsi) += dxdy * nConc;
|
||||
*(pNode->fPsiP) -= dxdy;
|
||||
*(pNode->fPPsi) -= dy * pHEdge->dJpDpsiP1 + dx * pVEdge->dJpDpsiP1;
|
||||
|
|
@ -611,8 +611,8 @@ void
|
|||
pRhs[ pNode->psiEqn ] += dx * pHEdge->qf;
|
||||
pRhs[ pNode->psiEqn ] += dy * pVEdge->qf;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
nConc = *(pDevice->devState0 + pNode->nodeN);
|
||||
pConc = *(pDevice->devState0 + pNode->nodeP);
|
||||
nConc = pDevice->devState0 [pNode->nodeN];
|
||||
pConc = pDevice->devState0 [pNode->nodeP];
|
||||
pRhs[ pNode->psiEqn ] += dxdy * (pNode->netConc + pConc - nConc);
|
||||
|
||||
/* Handle generation terms */
|
||||
|
|
@ -716,10 +716,10 @@ void
|
|||
}
|
||||
|
||||
/* store info in the state tables */
|
||||
*(pDevice->devState0 + pNode->nodePsi) = psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = psi;
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
*(pDevice->devState0 + pNode->nodeN) = nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pConc;
|
||||
if ( tranAnalysis && pNode->nodeType != CONTACT ) {
|
||||
pNode->dNdT = integrate( pDevice->devStates, info, pNode->nodeN );
|
||||
pNode->dPdT = integrate( pDevice->devStates, info, pNode->nodeP );
|
||||
|
|
@ -747,7 +747,7 @@ void
|
|||
} else {
|
||||
pEdge->dPsi = psi1 - psi2;
|
||||
}
|
||||
*(pDevice->devState0 + pEdge->edgeDpsi) = pEdge->dPsi;
|
||||
pDevice->devState0 [pEdge->edgeDpsi] = pEdge->dPsi;
|
||||
|
||||
if ( pElem->elemType == SEMICON ) {
|
||||
/* Calculate weighted driving forces - wdfn & wdfp for the edge */
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@ TWObiasSolve(TWOdevice *pDevice, int iterationLimit, BOOLEAN tranAnalysis,
|
|||
pNode = pElem->pNodes[index];
|
||||
if (pNode->nodeType != CONTACT) {
|
||||
pNode->psi = pDevice->dcSolution[pNode->psiEqn];
|
||||
*(pDevice->devState0 + pNode->nodePsi) = pNode->psi;
|
||||
pDevice->devState0 [pNode->nodePsi] = pNode->psi;
|
||||
if (pElem->elemType == SEMICON) {
|
||||
if (!OneCarrier) {
|
||||
pNode->nConc = pDevice->dcSolution[pNode->nEqn];
|
||||
|
|
@ -640,8 +640,8 @@ TWObiasSolve(TWOdevice *pDevice, int iterationLimit, BOOLEAN tranAnalysis,
|
|||
pNode->pConc = pDevice->dcSolution[pNode->pEqn];
|
||||
pNode->nConc = pNode->nie * exp(pNode->psi - refPsi);
|
||||
}
|
||||
*(pDevice->devState0 + pNode->nodeN) = pNode->nConc;
|
||||
*(pDevice->devState0 + pNode->nodeP) = pNode->pConc;
|
||||
pDevice->devState0 [pNode->nodeN] = pNode->nConc;
|
||||
pDevice->devState0 [pNode->nodeP] = pNode->pConc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -910,17 +910,17 @@ TWOpredict(TWOdevice *pDevice, TWOtranInfo *info)
|
|||
for (nIndex = 0; nIndex <= 3; nIndex++) {
|
||||
if (pElem->evalNodes[nIndex]) {
|
||||
pNode = pElem->pNodes[nIndex];
|
||||
pNode->psi = *(pDevice->devState1 + pNode->nodePsi);
|
||||
pNode->psi = pDevice->devState1 [pNode->nodePsi];
|
||||
if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) {
|
||||
if (!OneCarrier) {
|
||||
pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN);
|
||||
pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP);
|
||||
} else if (OneCarrier == N_TYPE) {
|
||||
pNode->nPred = predict(pDevice->devStates, info, pNode->nodeN);
|
||||
pNode->pPred = *(pDevice->devState1 + pNode->nodeP);
|
||||
pNode->pPred = pDevice->devState1 [pNode->nodeP];
|
||||
} else if (OneCarrier == P_TYPE) {
|
||||
pNode->pPred = predict(pDevice->devStates, info, pNode->nodeP);
|
||||
pNode->nPred = *(pDevice->devState1 + pNode->nodeN);
|
||||
pNode->nPred = pDevice->devState1 [pNode->nodeN];
|
||||
}
|
||||
pNode->nConc = pNode->nPred;
|
||||
pNode->pConc = pNode->pPred;
|
||||
|
|
@ -1019,10 +1019,10 @@ TWOsaveState(TWOdevice *pDevice)
|
|||
for (nIndex = 0; nIndex <= 3; nIndex++) {
|
||||
if (pElem->evalNodes[nIndex]) {
|
||||
pNode = pElem->pNodes[nIndex];
|
||||
pNode->psi = *(pDevice->devState1 + pNode->nodePsi);
|
||||
pNode->psi = pDevice->devState1 [pNode->nodePsi];
|
||||
if ((pElem->elemType == SEMICON) && (pNode->nodeType != CONTACT)) {
|
||||
pNode->nConc = *(pDevice->devState1 + pNode->nodeN);
|
||||
pNode->pConc = *(pDevice->devState1 + pNode->nodeP);
|
||||
pNode->nConc = pDevice->devState1 [pNode->nodeN];
|
||||
pNode->pConc = pDevice->devState1 [pNode->nodeP];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,9 +69,9 @@ com_hardcopy(wordlist *wl)
|
|||
/* change .tmp to .ps */
|
||||
psfname = strchr(fname, '.');
|
||||
if (psfname) {
|
||||
*(psfname + 1) = 'p';
|
||||
*(psfname + 2) = 's';
|
||||
*(psfname + 3) = '\0';
|
||||
psfname[1] = 'p';
|
||||
psfname[2] = 's';
|
||||
psfname[3] = '\0';
|
||||
} else {
|
||||
fname = realloc(fname, strlen(fname)+4);
|
||||
strcat(fname, ".ps");
|
||||
|
|
|
|||
|
|
@ -1333,7 +1333,7 @@ com_alter_common(wordlist *wl, int do_model)
|
|||
/*printf(" returning vector value %g\n", tmp); */
|
||||
i++;
|
||||
list = TREALLOC(double, list, i);
|
||||
*(list+i-1) = tmp;
|
||||
list[i-1] = tmp;
|
||||
tmp = INPevaluate(&xsbuf, &error, 1);
|
||||
}
|
||||
dv->v_realdata = list;
|
||||
|
|
|
|||
|
|
@ -579,7 +579,7 @@ inp_readall(FILE *fp, struct line **data, int call_depth, char *dir_name, bool c
|
|||
|
||||
/* find the true .end command out of .endc, .ends, .endl, .end (comments may follow) */
|
||||
if (ciprefix(".end", buffer))
|
||||
if ((*(buffer+4) == '\0') || (isspace(*(buffer+4)))) {
|
||||
if ((buffer[4] == '\0') || (isspace(buffer[4]))) {
|
||||
found_end = TRUE;
|
||||
*buffer = '*';
|
||||
}
|
||||
|
|
@ -976,8 +976,8 @@ inp_fix_gnd_name(struct line *deck)
|
|||
}
|
||||
// replace "?gnd?" by "? 0 ?", ? being a ' ' ',' '(' ')'.
|
||||
while ((gnd = strstr(gnd, "gnd")) != NULL) {
|
||||
if ((isspace(*(gnd-1)) || *(gnd-1) == '(' || *(gnd-1) == ',') &&
|
||||
(isspace(*(gnd+3)) || *(gnd+3) == ')' || *(gnd+3) == ',')) {
|
||||
if ((isspace(gnd[-1]) || gnd[-1] == '(' || gnd[-1] == ',') &&
|
||||
(isspace(gnd[3]) || gnd[3] == ')' || gnd[3] == ',')) {
|
||||
memcpy(gnd, " 0 ", 3);
|
||||
}
|
||||
gnd += 3;
|
||||
|
|
@ -1291,11 +1291,11 @@ inp_fix_macro_param_func_paren_io(struct line *begin_card)
|
|||
if (str_ptr)
|
||||
*str_ptr = ' ';
|
||||
str_ptr = card->li_line + 1;
|
||||
*str_ptr = 'f';
|
||||
*(str_ptr+1) = 'u';
|
||||
*(str_ptr+2) = 'n';
|
||||
*(str_ptr+3) = 'c';
|
||||
*(str_ptr+4) = ' ';
|
||||
str_ptr[0] = 'f';
|
||||
str_ptr[1] = 'u';
|
||||
str_ptr[2] = 'n';
|
||||
str_ptr[3] = 'c';
|
||||
str_ptr[4] = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2432,7 +2432,7 @@ inp_get_params(char *line, char *param_names[], char *param_values[])
|
|||
while ((equal_ptr = strchr(line, '=')) != NULL) {
|
||||
|
||||
// check for equality '=='
|
||||
if (*(equal_ptr+1) == '=') {
|
||||
if (equal_ptr[1] == '=') {
|
||||
line = equal_ptr+2;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -2469,7 +2469,7 @@ inp_get_params(char *line, char *param_names[], char *param_values[])
|
|||
*end = '\0';
|
||||
|
||||
if (*value != '{' &&
|
||||
!(isdigit(*value) || (*value == '.' && isdigit(*(value+1))))) {
|
||||
!(isdigit(*value) || (*value == '.' && isdigit(value[1])))) {
|
||||
sprintf(tmp_str, "{%s}", value);
|
||||
value = tmp_str;
|
||||
}
|
||||
|
|
@ -2864,7 +2864,7 @@ inp_do_macro_param_replace(int fcn_number, char *params[])
|
|||
before = '\0';
|
||||
else
|
||||
before = *(param_ptr-1);
|
||||
after = *(param_ptr+strlen(func_params[fcn_number][i]));
|
||||
after = param_ptr [ strlen(func_params[fcn_number][i]) ];
|
||||
if (!(is_arith_char(before) || isspace(before) ||
|
||||
before == ',' || before == '=' || (param_ptr-1) < curr_ptr) ||
|
||||
!(is_arith_char(after) || isspace(after) ||
|
||||
|
|
@ -3160,18 +3160,18 @@ inp_fix_param_values(struct line *deck)
|
|||
// special case: .MEASURE {DC|AC|TRAN} result FIND out_variable WHEN out_variable2=out_variable3
|
||||
// no braces around out_variable3. out_variable3 may be v(...) or i(...)
|
||||
if (ciprefix(".meas", line))
|
||||
if (((*(equal_ptr+1) == 'v') || (*(equal_ptr+1) == 'i')) &&
|
||||
(*(equal_ptr+2) == '('))
|
||||
if (((equal_ptr[1] == 'v') || (equal_ptr[1] == 'i')) &&
|
||||
(equal_ptr[2] == '('))
|
||||
{
|
||||
// find closing ')' and skip token v(...) or i(...)
|
||||
while (*equal_ptr != ')' && *(equal_ptr+1) != '\0')
|
||||
while (*equal_ptr != ')' && equal_ptr[1] != '\0')
|
||||
equal_ptr++;
|
||||
line = equal_ptr + 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip over equality '=='
|
||||
if (*(equal_ptr+1) == '=') {
|
||||
if (equal_ptr[1] == '=') {
|
||||
line += 2;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3188,8 +3188,8 @@ inp_fix_param_values(struct line *deck)
|
|||
*beg_of_str == '{' ||
|
||||
*beg_of_str == '.' ||
|
||||
*beg_of_str == '"' ||
|
||||
(*beg_of_str == '-' && isdigit(*(beg_of_str+1))) ||
|
||||
(*beg_of_str == '-' && *(beg_of_str+1) == '.' && isdigit(*(beg_of_str+2))) ||
|
||||
(*beg_of_str == '-' && isdigit(beg_of_str[1])) ||
|
||||
(*beg_of_str == '-' && beg_of_str[1] == '.' && isdigit(beg_of_str[2])) ||
|
||||
ciprefix("true", beg_of_str) ||
|
||||
ciprefix("false", beg_of_str))
|
||||
{
|
||||
|
|
@ -3212,7 +3212,7 @@ inp_fix_param_values(struct line *deck)
|
|||
|
||||
buffer = TMALLOC(char, strlen(natok) + 4);
|
||||
if (isdigit(*natok) || *natok == '{' || *natok == '.' ||
|
||||
*natok == '"' || (*natok == '-' && isdigit(*(natok+1))) ||
|
||||
*natok == '"' || (*natok == '-' && isdigit(natok[1])) ||
|
||||
ciprefix("true", natok) || ciprefix("false", natok) ||
|
||||
eq(natok, "<") || eq(natok, ">"))
|
||||
{
|
||||
|
|
@ -3221,8 +3221,8 @@ inp_fix_param_values(struct line *deck)
|
|||
/* < xx and yy > have been dealt with before */
|
||||
/* <xx */
|
||||
} else if (*natok == '<') {
|
||||
if (isdigit(*(natok + 1)) ||
|
||||
(*(natok + 1) == '-' && isdigit(*(natok + 2))))
|
||||
if (isdigit(natok[1]) ||
|
||||
(natok[1] == '-' && isdigit(natok[2])))
|
||||
{
|
||||
(void) sprintf(buffer, "%s", natok);
|
||||
} else {
|
||||
|
|
@ -3231,7 +3231,7 @@ inp_fix_param_values(struct line *deck)
|
|||
}
|
||||
/* yy> */
|
||||
} else if (strchr(natok, '>')) {
|
||||
if (isdigit(*natok) || (*natok == '-' && isdigit(*(natok+1)))) {
|
||||
if (isdigit(*natok) || (*natok == '-' && isdigit(natok[1]))) {
|
||||
(void) sprintf(buffer, "%s", natok);
|
||||
} else {
|
||||
whereisgt = strchr(natok, '>');
|
||||
|
|
@ -3279,7 +3279,7 @@ inp_fix_param_values(struct line *deck)
|
|||
|
||||
buffer = TMALLOC(char, strlen(natok) + 4);
|
||||
if (isdigit(*natok) || *natok == '{' || *natok == '.' ||
|
||||
*natok == '"' || (*natok == '-' && isdigit(*(natok+1))) ||
|
||||
*natok == '"' || (*natok == '-' && isdigit(natok[1])) ||
|
||||
ciprefix("true", natok) || ciprefix("false", natok))
|
||||
{
|
||||
(void) sprintf(buffer, "%s", natok);
|
||||
|
|
@ -3386,8 +3386,8 @@ inp_get_param_level(int param_num, char ***depends_on, char **param_names, char
|
|||
int index1 = 0, comp_level = 0, temp_level = 0;
|
||||
int index2 = 0;
|
||||
|
||||
if (*(level+param_num) != -1)
|
||||
return *(level+param_num);
|
||||
if (level[param_num] != -1)
|
||||
return level[param_num];
|
||||
|
||||
while (depends_on[param_num][index1] != NULL) {
|
||||
index2 = 0;
|
||||
|
|
@ -3406,7 +3406,7 @@ inp_get_param_level(int param_num, char ***depends_on, char **param_names, char
|
|||
comp_level = temp_level;
|
||||
index1++;
|
||||
}
|
||||
*(level+param_num) = comp_level;
|
||||
level[param_num] = comp_level;
|
||||
return comp_level;
|
||||
}
|
||||
|
||||
|
|
@ -3618,9 +3618,9 @@ inp_sort_params(struct line *start_card, struct line *end_card, struct line *car
|
|||
while ((param_ptr = strstr(param_str, param_name)) != NULL) {
|
||||
ioff = (strchr(param_ptr, '}') != NULL ? 1 : 0); /* want prevent wrong memory access below */
|
||||
/* looking for curly braces or other string limiter */
|
||||
if ((!isalnum(*(param_ptr-ioff)) && *(param_ptr-ioff) != '_' &&
|
||||
!isalnum(*(param_ptr+strlen(param_name))) &&
|
||||
*(param_ptr+strlen(param_name)) != '_') ||
|
||||
if ((!isalnum(param_ptr[-ioff]) && param_ptr[-ioff] != '_' &&
|
||||
!isalnum(param_ptr[strlen(param_name)]) &&
|
||||
param_ptr[strlen(param_name)] != '_') ||
|
||||
strcmp(param_ptr, param_name) == 0)
|
||||
{ /* this are cases without curly braces */
|
||||
ind = 0;
|
||||
|
|
@ -3946,7 +3946,7 @@ inp_split_multi_param_lines(struct line *deck, int line_num)
|
|||
counter = 0;
|
||||
while ((equal_ptr = strchr(curr_line, '=')) != NULL) {
|
||||
// check for equality '=='
|
||||
if (*(equal_ptr+1) == '=') {
|
||||
if (equal_ptr[1] == '=') {
|
||||
curr_line = equal_ptr+2;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3968,7 +3968,7 @@ inp_split_multi_param_lines(struct line *deck, int line_num)
|
|||
counter = 0;
|
||||
while (curr_line < card->li_line+strlen(card->li_line) && (equal_ptr = strchr(curr_line, '=')) != NULL) {
|
||||
// check for equality '=='
|
||||
if (*(equal_ptr+1) == '=') {
|
||||
if (equal_ptr[1] == '=') {
|
||||
curr_line = equal_ptr+2;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -4134,11 +4134,11 @@ inp_compat(struct line *deck)
|
|||
-->
|
||||
Exxx n1 n2 vol={equation} */
|
||||
if ((str_ptr = strstr(curr_line, "value=")) != NULL) {
|
||||
*str_ptr = ' ';
|
||||
*(str_ptr + 1) = ' ';
|
||||
*(str_ptr + 2) = 'v';
|
||||
*(str_ptr + 3) = 'o';
|
||||
*(str_ptr + 4) = 'l';
|
||||
str_ptr[0] = ' ';
|
||||
str_ptr[1] = ' ';
|
||||
str_ptr[2] = 'v';
|
||||
str_ptr[3] = 'o';
|
||||
str_ptr[4] = 'l';
|
||||
}
|
||||
/* Exxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2)
|
||||
-->
|
||||
|
|
@ -4326,11 +4326,11 @@ inp_compat(struct line *deck)
|
|||
-->
|
||||
Gxxx n1 n2 cur={equation} */
|
||||
if ((str_ptr = strstr(curr_line, "value=")) != NULL) {
|
||||
*str_ptr = ' ';
|
||||
*(str_ptr + 1) = ' ';
|
||||
*(str_ptr + 2) = 'c';
|
||||
*(str_ptr + 3) = 'u';
|
||||
*(str_ptr + 4) = 'r';
|
||||
str_ptr[0] = ' ';
|
||||
str_ptr[1] = ' ';
|
||||
str_ptr[2] = 'c';
|
||||
str_ptr[3] = 'u';
|
||||
str_ptr[4] = 'r';
|
||||
}
|
||||
|
||||
/* Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2)
|
||||
|
|
@ -5171,10 +5171,10 @@ replace_token(char *string, char *token, int wherereplace, int total)
|
|||
txfree(gettok(&actstring));
|
||||
/* If token to be replaced at right position */
|
||||
if (ciprefix(token, actstring)) {
|
||||
*actstring = ' ';
|
||||
*(actstring + 1) = ' ';
|
||||
*(actstring + 2) = ' ';
|
||||
*(actstring + 3) = ' ';
|
||||
actstring[0] = ' ';
|
||||
actstring[1] = ' ';
|
||||
actstring[2] = ' ';
|
||||
actstring[3] = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5251,7 +5251,7 @@ inp_bsource_compat(struct line *deck)
|
|||
(actchar == '*') || (actchar == '/') || (actchar == '^') ||
|
||||
(actchar == '+') || (actchar == '?') || (actchar == ':'))
|
||||
{
|
||||
if ((actchar == '*') && (*(str_ptr+1) == '*')) {
|
||||
if ((actchar == '*') && (str_ptr[1] == '*')) {
|
||||
actchar = '^';
|
||||
str_ptr++;
|
||||
}
|
||||
|
|
@ -5297,7 +5297,7 @@ inp_bsource_compat(struct line *deck)
|
|||
i = 0;
|
||||
}
|
||||
|
||||
if (((actchar == 'v') || (actchar == 'i')) && (*(str_ptr+1) == '(')) {
|
||||
if (((actchar == 'v') || (actchar == 'i')) && (str_ptr[1] == '(')) {
|
||||
while (*str_ptr != ')') {
|
||||
buf[i] = *str_ptr;
|
||||
i++;
|
||||
|
|
@ -5443,7 +5443,7 @@ inp_bsource_compat(struct line *deck)
|
|||
controlled_exit(EXIT_FAILURE);
|
||||
}
|
||||
/* cut the tmp_char after the equal sign */
|
||||
*(equal_ptr + 1) = '\0';
|
||||
equal_ptr[1] = '\0';
|
||||
xlen = strlen(tmp_char) + strlen(new_str) + 2;
|
||||
final_str = TMALLOC(char, xlen);
|
||||
sprintf(final_str, "%s %s", tmp_char, new_str);
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ com_meas(wordlist *wl)
|
|||
token = wl_index->wl_word;
|
||||
/* find the vector vec_found, next token after each '=' sign.
|
||||
May be in the next wl_word */
|
||||
if (*(token + strlen(token) - 1) == '=') {
|
||||
if (token[strlen(token) - 1] == '=') {
|
||||
wl_index = wl_index->wl_next;
|
||||
vec_found = wl_index->wl_word;
|
||||
/* token may be already a value, maybe 'LAST', which we have to keep, or maybe a vector */
|
||||
|
|
@ -173,7 +173,7 @@ get_double_value(
|
|||
return_val = FALSE;
|
||||
} else {
|
||||
/* see if '=' is last char of current token -- implies we need to read value in next token */
|
||||
if (*(token + strlen(token) - 1) == '=') {
|
||||
if (token[strlen(token) - 1] == '=') {
|
||||
txfree(token);
|
||||
junk = token = gettok(line);
|
||||
|
||||
|
|
|
|||
|
|
@ -1216,7 +1216,7 @@ OUTerror(int flags, char *format, IFuid *names)
|
|||
fprintf(cp_err, "%s: ", m->string);
|
||||
|
||||
for (s = format, bptr = buf; *s; s++) {
|
||||
if (*s == '%' && (s == format || *(s-1) != '%') && *(s+1) == 's') {
|
||||
if (*s == '%' && (s == format || s[-1] != '%') && s[1] == 's') {
|
||||
if (names[nindex])
|
||||
strcpy(bptr, names[nindex]);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -378,7 +378,7 @@ prompt(void)
|
|||
fprintf(cp_out, "%d", cp_event);
|
||||
break;
|
||||
case '\\':
|
||||
if (*(s + 1))
|
||||
if (s[1])
|
||||
(void) putc(strip(*++s), cp_out);
|
||||
default:
|
||||
(void) putc(strip(*s), cp_out);
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@ vec_fromplot(char *word, struct plot *plot)
|
|||
/* scanf("%c(%s)" doesn't do what it should do. ) */
|
||||
if (!d && (sscanf(word, "%c(%s", /* ) */ &cc, buf) == 2) &&
|
||||
/* ( */ ((s = strrchr(buf, ')')) != NULL) &&
|
||||
(*(s + 1) == '\0')) {
|
||||
(s[1] == '\0')) {
|
||||
*s = '\0';
|
||||
if (prefix("i(", /* ) */ word) || prefix("I(", /* ) */ word)) {
|
||||
/* Spice dependency... */
|
||||
|
|
@ -581,7 +581,7 @@ vec_get(const char *vec_name)
|
|||
nv = vv->va_vlist;
|
||||
for (i = 1; ; i++) {
|
||||
list = TREALLOC(double, list, i);
|
||||
*(list+i-1) = nv->va_real;
|
||||
list[i-1] = nv->va_real;
|
||||
nv = nv->va_next;
|
||||
if (!nv)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -540,7 +540,7 @@ prompt(void)
|
|||
#endif /* HAVE_BSDEDITLINE*/
|
||||
break;
|
||||
case '\\':
|
||||
if (*(s + 1))
|
||||
if (s[1])
|
||||
p += sprintf(p, "%c", strip(*++s));
|
||||
default:
|
||||
*p = (char) strip(*s); ++p;
|
||||
|
|
|
|||
|
|
@ -29,15 +29,15 @@ NIconvTest(CKTcircuit *ckt)
|
|||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
#ifdef STEPDEBUG
|
||||
for (i=1;i<=size;i++) {
|
||||
new = *((ckt->CKTrhs) + i ) ;
|
||||
old = *((ckt->CKTrhsOld) + i ) ;
|
||||
new = ckt->CKTrhs [i] ;
|
||||
old = ckt->CKTrhsOld [i] ;
|
||||
printf("chk for convergence: %s new: %g old: %g\n",CKTnodName(ckt,i),new,old);
|
||||
}
|
||||
#endif /* STEPDEBUG */
|
||||
for (i=1;i<=size;i++) {
|
||||
node = node->next;
|
||||
new = *((ckt->CKTrhs) + i ) ;
|
||||
old = *((ckt->CKTrhsOld) + i ) ;
|
||||
new = ckt->CKTrhs [i] ;
|
||||
old = ckt->CKTrhsOld [i] ;
|
||||
if(node->type == 3) {
|
||||
tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) +
|
||||
ckt->CKTvoltTol;
|
||||
|
|
|
|||
|
|
@ -25,13 +25,13 @@ NIintegrate(CKTcircuit *ckt, double *geq, double *ceq, double cap, int qcap)
|
|||
case TRAPEZOIDAL:
|
||||
switch(ckt->CKTorder) {
|
||||
case 1:
|
||||
*(ckt->CKTstate0+ccap) = ckt->CKTag[0] * (*(ckt->CKTstate0+qcap))
|
||||
+ ckt->CKTag[1] * (*(ckt->CKTstate1+qcap));
|
||||
ckt->CKTstate0[ccap] = ckt->CKTag[0] * ckt->CKTstate0[qcap]
|
||||
+ ckt->CKTag[1] * ckt->CKTstate1[qcap];
|
||||
break;
|
||||
case 2:
|
||||
*(ckt->CKTstate0+ccap) = - *(ckt->CKTstate1+ccap) * ckt->CKTag[1] +
|
||||
ckt->CKTstate0[ccap] = - ckt->CKTstate1[ccap] * ckt->CKTag[1] +
|
||||
ckt->CKTag[0] *
|
||||
( *(ckt->CKTstate0+qcap) - *(ckt->CKTstate1+qcap) );
|
||||
( ckt->CKTstate0[qcap] - ckt->CKTstate1[qcap] );
|
||||
break;
|
||||
default:
|
||||
errMsg = TMALLOC(char, strlen(ordmsg) + 1);
|
||||
|
|
@ -40,27 +40,27 @@ NIintegrate(CKTcircuit *ckt, double *geq, double *ceq, double cap, int qcap)
|
|||
}
|
||||
break;
|
||||
case GEAR:
|
||||
*(ckt->CKTstate0+ccap)=0;
|
||||
ckt->CKTstate0[ccap]=0;
|
||||
switch(ckt->CKTorder) {
|
||||
|
||||
case 6:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[6]* *(ckt->CKTstate6+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[6]* ckt->CKTstate6[qcap];
|
||||
/* fall through */
|
||||
case 5:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[5]* *(ckt->CKTstate5+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[5]* ckt->CKTstate5[qcap];
|
||||
/* fall through */
|
||||
case 4:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[4]* *(ckt->CKTstate4+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[4]* ckt->CKTstate4[qcap];
|
||||
/* fall through */
|
||||
case 3:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[3]* *(ckt->CKTstate3+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[3]* ckt->CKTstate3[qcap];
|
||||
/* fall through */
|
||||
case 2:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[2]* *(ckt->CKTstate2+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[2]* ckt->CKTstate2[qcap];
|
||||
/* fall through */
|
||||
case 1:
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[1]* *(ckt->CKTstate1+qcap);
|
||||
*(ckt->CKTstate0+ccap) += ckt->CKTag[0]* *(ckt->CKTstate0+qcap);
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[1]* ckt->CKTstate1[qcap];
|
||||
ckt->CKTstate0[ccap] += ckt->CKTag[0]* ckt->CKTstate0[qcap];
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -74,7 +74,7 @@ NIintegrate(CKTcircuit *ckt, double *geq, double *ceq, double cap, int qcap)
|
|||
strcpy(errMsg,methodmsg);
|
||||
return(E_METHOD);
|
||||
}
|
||||
*ceq = *(ckt->CKTstate0+ccap) - ckt->CKTag[0] * *(ckt->CKTstate0+qcap);
|
||||
*ceq = ckt->CKTstate0[ccap] - ckt->CKTag[0] * ckt->CKTstate0[qcap];
|
||||
*geq = ckt->CKTag[0] * cap;
|
||||
return(OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
|||
if(!OldCKTstate0)
|
||||
OldCKTstate0=TMALLOC(double, ckt->CKTnumStates + 1);
|
||||
for(i=0; i<ckt->CKTnumStates; i++) {
|
||||
*(OldCKTstate0+i) = *(ckt->CKTstate0+i);
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
}
|
||||
|
||||
startTime = SPfrontEnd->IFseconds();
|
||||
|
|
@ -213,8 +213,8 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
|||
maxdiff=0;
|
||||
for (node = ckt->CKTnodes->next; node; node = node->next) {
|
||||
if(node->type == NODE_VOLTAGE) {
|
||||
diff = (ckt->CKTrhs)[node->number] -
|
||||
(ckt->CKTrhsOld)[node->number];
|
||||
diff = ckt->CKTrhs [node->number] -
|
||||
ckt->CKTrhsOld [node->number];
|
||||
if (diff>maxdiff) maxdiff=diff;
|
||||
}
|
||||
}
|
||||
|
|
@ -228,8 +228,8 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
|||
(damp_factor * diff);
|
||||
}
|
||||
for(i=0; i<ckt->CKTnumStates; i++) {
|
||||
diff = *(ckt->CKTstate0+i) - *(OldCKTstate0+i);
|
||||
*(ckt->CKTstate0+i) = *(OldCKTstate0+i) +
|
||||
diff = ckt->CKTstate0[i] - OldCKTstate0[i];
|
||||
ckt->CKTstate0[i] = OldCKTstate0[i] +
|
||||
(damp_factor * diff);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,12 +25,12 @@ NInzIter(CKTcircuit *ckt, int posDrive, int negDrive)
|
|||
/* clear out the right hand side vector */
|
||||
|
||||
for (i = 0; i <= SMPmatSize(ckt->CKTmatrix); i++) {
|
||||
*((ckt->CKTrhs) + i) = 0.0;
|
||||
*((ckt->CKTirhs) + i) = 0.0;
|
||||
ckt->CKTrhs [i] = 0.0;
|
||||
ckt->CKTirhs [i] = 0.0;
|
||||
}
|
||||
|
||||
*((ckt->CKTrhs) + posDrive) = 1.0; /* apply unit current excitation */
|
||||
*((ckt->CKTrhs) + negDrive) = -1.0;
|
||||
ckt->CKTrhs [posDrive] = 1.0; /* apply unit current excitation */
|
||||
ckt->CKTrhs [negDrive] = -1.0;
|
||||
SMPcaSolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTirhs, ckt->CKTrhsSpare,
|
||||
ckt->CKTirhsSpare);
|
||||
*ckt->CKTrhs = 0.0;
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ main(void) {
|
|||
ncur = TMALLOC(nmod, 1);
|
||||
ncur->nnext = NULL;
|
||||
ncur->nname = typeline;
|
||||
*(typeline+3) = '\0';
|
||||
typeline[3] = '\0';
|
||||
typeline += 4;
|
||||
getdata(ncur->nparms,69,3);
|
||||
ncur->nnext = nlist;
|
||||
|
|
@ -113,7 +113,7 @@ main(void) {
|
|||
pcur = TMALLOC(pmod, 1);
|
||||
pcur->pnext = NULL;
|
||||
pcur->pname = typeline;
|
||||
*(typeline+3) = '\0';
|
||||
typeline[3] = '\0';
|
||||
typeline += 4;
|
||||
getdata(pcur->pparms,69,3);
|
||||
pcur->pnext = plist;
|
||||
|
|
@ -122,7 +122,7 @@ main(void) {
|
|||
ycur = TMALLOC(ymod, 1);
|
||||
ycur->ynext = NULL;
|
||||
ycur->yname = typeline;
|
||||
*(typeline+3) = '\0';
|
||||
typeline[3] = '\0';
|
||||
typeline += 4;
|
||||
getdata(ycur->yparms,10,5);
|
||||
ycur->ynext = ylist;
|
||||
|
|
@ -131,7 +131,7 @@ main(void) {
|
|||
dcur = TMALLOC(dmod, 1);
|
||||
dcur->dnext = NULL;
|
||||
dcur->dname = typeline;
|
||||
*(typeline+3) = '\0';
|
||||
typeline[3] = '\0';
|
||||
typeline += 4;
|
||||
getdata(dcur->dparms,10,5);
|
||||
dcur->dnext = dlist;
|
||||
|
|
@ -140,7 +140,7 @@ main(void) {
|
|||
mcur = TMALLOC(mmod, 1);
|
||||
mcur->mnext = NULL;
|
||||
mcur->mname = typeline;
|
||||
*(typeline+3) = '\0';
|
||||
typeline[3] = '\0';
|
||||
typeline += 4;
|
||||
getdata(mcur->mparms,10,5);
|
||||
mcur->mnext = mlist;
|
||||
|
|
|
|||
|
|
@ -407,8 +407,8 @@ CKTacLoad(CKTcircuit *ckt)
|
|||
startTime = SPfrontEnd->IFseconds();
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
for (i=0;i<=size;i++) {
|
||||
*(ckt->CKTrhs+i)=0;
|
||||
*(ckt->CKTirhs+i)=0;
|
||||
ckt->CKTrhs[i]=0;
|
||||
ckt->CKTirhs[i]=0;
|
||||
}
|
||||
SMPcClear(ckt->CKTmatrix);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ CKTbreakDump(CKTcircuit *ckt)
|
|||
{
|
||||
int i;
|
||||
for(i=0;i<ckt->CKTbreakSize;i++) {
|
||||
(void)printf("breakpoint table entry %d is %g\n",i,*(ckt->CKTbreaks+i));
|
||||
(void)printf("breakpoint table entry %d is %g\n",i,ckt->CKTbreaks[i]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,14 +25,14 @@ CKTclrBreak(CKTcircuit *ckt)
|
|||
tmp = TMALLOC(double, ckt->CKTbreakSize - 1);
|
||||
if(tmp == NULL) return(E_NOMEM);
|
||||
for(j=1;j<ckt->CKTbreakSize;j++) {
|
||||
*(tmp+j-1) = *(ckt->CKTbreaks+j);
|
||||
tmp[j-1] = ckt->CKTbreaks[j];
|
||||
}
|
||||
FREE(ckt->CKTbreaks);
|
||||
ckt->CKTbreakSize--;
|
||||
ckt->CKTbreaks=tmp;
|
||||
} else {
|
||||
*(ckt->CKTbreaks)= *(ckt->CKTbreaks+1);
|
||||
*(ckt->CKTbreaks+1) = ckt->CKTfinalTime;
|
||||
ckt->CKTbreaks[0] = ckt->CKTbreaks[1];
|
||||
ckt->CKTbreaks[1] = ckt->CKTfinalTime;
|
||||
}
|
||||
return(OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ CKTdisto (CKTcircuit *ckt, int mode)
|
|||
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
for (i=0;i<=size;i++) {
|
||||
*(ckt->CKTrhs+i)=0;
|
||||
*(ckt->CKTirhs+i)=0;
|
||||
ckt->CKTrhs[i]=0;
|
||||
ckt->CKTirhs[i]=0;
|
||||
}
|
||||
|
||||
vcode = CKTtypelook("Vsource");
|
||||
|
|
@ -111,8 +111,8 @@ else if ((here->VSRCdF2given) && (mode == D_RHSF2)) {
|
|||
if (((here->VSRCdF1given) && (mode == D_RHSF1)) ||
|
||||
((here->VSRCdF2given) && (mode == D_RHSF2))) {
|
||||
|
||||
*(ckt->CKTrhs + here->VSRCbranch) = 0.5*mag* cos(M_PI*phase/180.0);
|
||||
*(ckt->CKTirhs + here->VSRCbranch) = 0.5*mag*sin(M_PI*phase/180.0);
|
||||
ckt->CKTrhs[here->VSRCbranch] = 0.5*mag* cos(M_PI*phase/180.0);
|
||||
ckt->CKTirhs[here->VSRCbranch] = 0.5*mag*sin(M_PI*phase/180.0);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -147,13 +147,13 @@ else if ((here->ISRCdF2given) && (mode == D_RHSF2)) {
|
|||
if (((here->ISRCdF1given) && (mode == D_RHSF1)) ||
|
||||
((here->ISRCdF2given) && (mode == D_RHSF2))) {
|
||||
|
||||
*(ckt->CKTrhs + here->ISRCposNode) = - 0.5 * mag
|
||||
ckt->CKTrhs[here->ISRCposNode] = - 0.5 * mag
|
||||
* cos(M_PI*phase/180.0);
|
||||
*(ckt->CKTrhs + here->ISRCnegNode) = 0.5 * mag * cos(
|
||||
ckt->CKTrhs[here->ISRCnegNode] = 0.5 * mag * cos(
|
||||
M_PI*phase/180.0);
|
||||
*(ckt->CKTirhs + here->ISRCposNode) = - 0.5 * mag * sin(
|
||||
ckt->CKTirhs[here->ISRCposNode] = - 0.5 * mag * sin(
|
||||
M_PI*phase/180.0);
|
||||
*(ckt->CKTirhs + here->ISRCnegNode) = 0.5 * mag * sin(
|
||||
ckt->CKTirhs[here->ISRCnegNode] = 0.5 * mag * sin(
|
||||
M_PI*phase/180.0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ CKTic(CKTcircuit *ckt)
|
|||
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
for (i=0;i<=size;i++) {
|
||||
*(ckt->CKTrhs+i)=0;
|
||||
ckt->CKTrhs[i]=0;
|
||||
}
|
||||
|
||||
for(node = ckt->CKTnodes;node != NULL; node = node->next) {
|
||||
|
|
@ -28,7 +28,7 @@ CKTic(CKTcircuit *ckt)
|
|||
node->ptr = SMPmakeElt(ckt->CKTmatrix,node->number,node->number);
|
||||
if(node->ptr == NULL) return(E_NOMEM);
|
||||
ckt->CKThadNodeset = 1;
|
||||
*(ckt->CKTrhs+node->number) = node->nodeset;
|
||||
ckt->CKTrhs[node->number] = node->nodeset;
|
||||
}
|
||||
if(node->icGiven) {
|
||||
if(! ( node->ptr)) {
|
||||
|
|
@ -36,7 +36,7 @@ CKTic(CKTcircuit *ckt)
|
|||
node->number);
|
||||
if(node->ptr == NULL) return(E_NOMEM);
|
||||
}
|
||||
*(ckt->CKTrhs+node->number) = node->ic;
|
||||
ckt->CKTrhs[node->number] = node->ic;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ CKTload(CKTcircuit *ckt)
|
|||
startTime = SPfrontEnd->IFseconds();
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
for (i = 0; i <= size; i++) {
|
||||
*(ckt->CKTrhs+i) = 0;
|
||||
ckt->CKTrhs[i] = 0;
|
||||
}
|
||||
SMPclear(ckt->CKTmatrix);
|
||||
#ifdef STEPDEBUG
|
||||
|
|
@ -109,11 +109,11 @@ CKTload(CKTcircuit *ckt)
|
|||
if (node->nsGiven) {
|
||||
if (ZeroNoncurRow(ckt->CKTmatrix, ckt->CKTnodes,
|
||||
node->number)) {
|
||||
*(ckt->CKTrhs+node->number) = 1.0e10 * node->nodeset *
|
||||
ckt->CKTrhs[node->number] = 1.0e10 * node->nodeset *
|
||||
ckt->CKTsrcFact;
|
||||
*(node->ptr) = 1e10;
|
||||
} else {
|
||||
*(ckt->CKTrhs+node->number) = node->nodeset *
|
||||
ckt->CKTrhs[node->number] = node->nodeset *
|
||||
ckt->CKTsrcFact;
|
||||
*(node->ptr) = 1;
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ CKTload(CKTcircuit *ckt)
|
|||
* revert to this.
|
||||
*/
|
||||
/*
|
||||
* *(ckt->CKTrhs+node->number) += 1.0e10 * node->nodeset;
|
||||
* ckt->CKTrhs[node->number] += 1.0e10 * node->nodeset;
|
||||
* *(node->ptr) += 1.0e10;
|
||||
*/
|
||||
}
|
||||
|
|
@ -133,23 +133,23 @@ CKTload(CKTcircuit *ckt)
|
|||
if (ZeroNoncurRow(ckt->CKTmatrix, ckt->CKTnodes,
|
||||
node->number)) {
|
||||
/* Original code:
|
||||
*(ckt->CKTrhs+node->number) += 1.0e10 * node->ic;
|
||||
ckt->CKTrhs[node->number] += 1.0e10 * node->ic;
|
||||
*/
|
||||
*(ckt->CKTrhs+node->number) = 1.0e10 * node->ic *
|
||||
ckt->CKTrhs[node->number] = 1.0e10 * node->ic *
|
||||
ckt->CKTsrcFact;
|
||||
*(node->ptr) += 1.0e10;
|
||||
} else {
|
||||
/* Original code:
|
||||
*(ckt->CKTrhs+node->number) = node->ic;
|
||||
ckt->CKTrhs[node->number] = node->ic;
|
||||
*/
|
||||
*(ckt->CKTrhs+node->number) = node->ic*ckt->CKTsrcFact; /* AlansFixes */
|
||||
ckt->CKTrhs[node->number] = node->ic*ckt->CKTsrcFact; /* AlansFixes */
|
||||
*(node->ptr) = 1;
|
||||
}
|
||||
/* DAG: Original CIDER fix. If above fix doesn't work,
|
||||
* revert to this.
|
||||
*/
|
||||
/*
|
||||
* *(ckt->CKTrhs+node->number) += 1.0e10 * node->ic;
|
||||
* ckt->CKTrhs[node->number] += 1.0e10 * node->ic;
|
||||
* *(node->ptr) += 1.0e10;
|
||||
*/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ CKTnames(CKTcircuit *ckt, int *numNames, IFuid **nameList)
|
|||
if ((*nameList) == NULL) return(E_NOMEM);
|
||||
i=0;
|
||||
for (here = ckt->CKTnodes->next; here; here = here->next) {
|
||||
*((*nameList)+i++) = here->name;
|
||||
(*nameList) [i++] = here->name;
|
||||
}
|
||||
return(OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ CKTncDump(
|
|||
fprintf(stdout,"%-30s %20s %20s\n", "----", "------------", "-------------");
|
||||
for(node=ckt->CKTnodes->next;node;node=node->next) {
|
||||
if (strstr(node->name, "#branch") || !strstr(node->name, "#")) {
|
||||
new = *((ckt->CKTrhsOld) + i ) ;
|
||||
old = *((ckt->CKTrhs) + i ) ;
|
||||
new = ckt->CKTrhsOld [i] ;
|
||||
old = ckt->CKTrhs [i] ;
|
||||
fprintf(stdout,"%-30s %20g %20g", node->name, new, old);
|
||||
if(node->type == 3) {
|
||||
tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) +
|
||||
|
|
|
|||
|
|
@ -154,10 +154,10 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
TMALLOC(double, ckt->CKTnumStates + 1);
|
||||
|
||||
for (n = ckt->CKTnodes; n; n = n->next)
|
||||
*(ckt->CKTrhsOld + n->number) = 0;
|
||||
ckt->CKTrhsOld [n->number] = 0;
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++)
|
||||
*(ckt->CKTstate0 + i) = 0;
|
||||
ckt->CKTstate0 [i] = 0;
|
||||
|
||||
factor = ckt->CKTgminFactor;
|
||||
OldGmin = 1e-2;
|
||||
|
|
@ -183,12 +183,12 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
} else {
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next){
|
||||
OldRhsOld[i] = *(ckt->CKTrhsOld + n->number);
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++){
|
||||
*(OldCKTstate0 + i) = *(ckt->CKTstate0 + i);
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
}
|
||||
|
||||
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)){
|
||||
|
|
@ -224,12 +224,12 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next){
|
||||
*(ckt->CKTrhsOld + n->number) = OldRhsOld[i];
|
||||
ckt->CKTrhsOld[n->number] = OldRhsOld[i];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++){
|
||||
*(ckt->CKTstate0 + i) = *(OldCKTstate0 + i);
|
||||
ckt->CKTstate0[i] = OldCKTstate0[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -393,10 +393,10 @@ gillespie_src (CKTcircuit * ckt, long int firstmode,
|
|||
TMALLOC(double, ckt->CKTnumStates + 1);
|
||||
|
||||
for (n = ckt->CKTnodes; n; n = n->next)
|
||||
*(ckt->CKTrhsOld + n->number) = 0;
|
||||
ckt->CKTrhsOld[n->number] = 0;
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++)
|
||||
*(ckt->CKTstate0 + i) = 0;
|
||||
ckt->CKTstate0[i] = 0;
|
||||
|
||||
/* First, try a straight solution with all sources at zero */
|
||||
|
||||
|
|
@ -454,12 +454,12 @@ gillespie_src (CKTcircuit * ckt, long int firstmode,
|
|||
if (converged == 0){
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next){
|
||||
OldRhsOld[i] = *(ckt->CKTrhsOld + n->number);
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++)
|
||||
*(OldCKTstate0 + i) = *(ckt->CKTstate0 + i);
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
|
||||
|
||||
SPfrontEnd->IFerror (ERR_INFO,
|
||||
|
|
@ -491,12 +491,12 @@ gillespie_src (CKTcircuit * ckt, long int firstmode,
|
|||
i = 0;
|
||||
|
||||
for (n = ckt->CKTnodes; n; n = n->next){
|
||||
OldRhsOld[i] = *(ckt->CKTrhsOld + n->number);
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++)
|
||||
*(OldCKTstate0 + i) = *(ckt->CKTstate0 + i);
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
|
||||
SPfrontEnd->IFerror (ERR_INFO,
|
||||
"One successful source step",
|
||||
|
|
@ -528,12 +528,12 @@ gillespie_src (CKTcircuit * ckt, long int firstmode,
|
|||
i = 0;
|
||||
|
||||
for (n = ckt->CKTnodes; n; n = n->next){
|
||||
*(ckt->CKTrhsOld + n->number) = OldRhsOld[i];
|
||||
ckt->CKTrhsOld[n->number] = OldRhsOld[i];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++)
|
||||
*(ckt->CKTstate0 + i) = *(OldCKTstate0 + i);
|
||||
ckt->CKTstate0[i] = OldCKTstate0[i];
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,18 +33,18 @@ CKTsetBreak(CKTcircuit *ckt, double time)
|
|||
return(E_INTERN);
|
||||
}
|
||||
for(i=0;i<ckt->CKTbreakSize;i++) {
|
||||
if(*(ckt->CKTbreaks+i)>time) { /* passed */
|
||||
if((*(ckt->CKTbreaks+i)-time) <= ckt->CKTminBreak) {
|
||||
if(ckt->CKTbreaks[i]>time) { /* passed */
|
||||
if((ckt->CKTbreaks[i]-time) <= ckt->CKTminBreak) {
|
||||
/* very close together - take earlier point */
|
||||
#ifdef TRACE_BREAKPOINT
|
||||
printf("[t:%e] \t %e replaces %e\n", ckt->CKTtime, time,
|
||||
*(ckt->CKTbreaks+i));
|
||||
ckt->CKTbreaks[i]);
|
||||
CKTbreakDump(ckt);
|
||||
#endif
|
||||
*(ckt->CKTbreaks+i) = time;
|
||||
ckt->CKTbreaks[i] = time;
|
||||
return(OK);
|
||||
}
|
||||
if(i>0 && time-*(ckt->CKTbreaks+i-1) <= ckt->CKTminBreak) {
|
||||
if(i>0 && time-ckt->CKTbreaks[i-1] <= ckt->CKTminBreak) {
|
||||
/* very close together, but after, so skip */
|
||||
#ifdef TRACE_BREAKPOINT
|
||||
printf("[t:%e] \t %e skipped\n", ckt->CKTtime, time);
|
||||
|
|
@ -56,15 +56,15 @@ CKTsetBreak(CKTcircuit *ckt, double time)
|
|||
tmp = TMALLOC(double, ckt->CKTbreakSize + 1);
|
||||
if(tmp == NULL) return(E_NOMEM);
|
||||
for(j=0;j<i;j++) {
|
||||
*(tmp+j) = *(ckt->CKTbreaks+j);
|
||||
tmp[j] = ckt->CKTbreaks[j];
|
||||
}
|
||||
*(tmp+i)=time;
|
||||
tmp[i]=time;
|
||||
#ifdef TRACE_BREAKPOINT
|
||||
printf("[t:%e] \t %e added\n", ckt->CKTtime, time);
|
||||
CKTbreakDump(ckt);
|
||||
#endif
|
||||
for(j=i;j<ckt->CKTbreakSize;j++) {
|
||||
*(tmp+j+1) = *(ckt->CKTbreaks+j);
|
||||
tmp[j+1] = ckt->CKTbreaks[j];
|
||||
}
|
||||
FREE(ckt->CKTbreaks);
|
||||
ckt->CKTbreakSize++;
|
||||
|
|
|
|||
|
|
@ -35,14 +35,14 @@ CKTterr(int qcap, CKTcircuit *ckt, double *timeStep)
|
|||
};
|
||||
|
||||
volttol = ckt->CKTabstol + ckt->CKTreltol *
|
||||
MAX( fabs(*(ckt->CKTstate0+ccap)), fabs(*(ckt->CKTstate1+ccap)));
|
||||
MAX( fabs(ckt->CKTstate0[ccap]), fabs(ckt->CKTstate1[ccap]));
|
||||
|
||||
chargetol = MAX(fabs(*(ckt->CKTstate0 +qcap)),fabs(*(ckt->CKTstate1+qcap)));
|
||||
chargetol = MAX(fabs(ckt->CKTstate0[qcap]),fabs(ckt->CKTstate1[qcap]));
|
||||
chargetol = ckt->CKTreltol * MAX(chargetol,ckt->CKTchgtol)/ckt->CKTdelta;
|
||||
tol = MAX(volttol,chargetol);
|
||||
/* now divided differences */
|
||||
for(i=ckt->CKTorder+1;i>=0;i--) {
|
||||
diff[i] = *(ckt->CKTstates[i] + qcap);
|
||||
diff[i] = ckt->CKTstates[i][qcap];
|
||||
}
|
||||
for(i=0 ; i <= ckt->CKTorder ; i++) {
|
||||
deltmp[i] = ckt->CKTdeltaOld[i];
|
||||
|
|
|
|||
|
|
@ -92,8 +92,8 @@ DCop(CKTcircuit *ckt, int notused)
|
|||
"-------------");
|
||||
for(node=ckt->CKTnodes->next;node;node=node->next) {
|
||||
if (strstr(node->name, "#branch") || !strstr(node->name, "#")) {
|
||||
new = *((ckt->CKTrhsOld) + i ) ;
|
||||
old = *((ckt->CKTrhs) + i ) ;
|
||||
new = ckt->CKTrhsOld [i] ;
|
||||
old = ckt->CKTrhs [i] ;
|
||||
fprintf(stdout,"%-30s %20g %20g", node->name, new, old);
|
||||
if(node->type == 3) {
|
||||
tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) +
|
||||
|
|
@ -131,7 +131,7 @@ DCop(CKTcircuit *ckt, int notused)
|
|||
ckt->CKTsenInfo->SENmode = DCSEN;
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
for(i = 1; i<=size ; i++){
|
||||
*(ckt->CKTrhsOp + i) = *(ckt->CKTrhsOld + i);
|
||||
ckt->CKTrhsOp[i] = ckt->CKTrhsOld[i];
|
||||
}
|
||||
if(error = CKTsenDCtran(ckt)) return(error);
|
||||
ckt->CKTmode = save;
|
||||
|
|
|
|||
|
|
@ -305,8 +305,8 @@ DCpss(CKTcircuit *ckt,
|
|||
"-------------");
|
||||
for(node=ckt->CKTnodes->next;node;node=node->next) {
|
||||
if (strstr(node->name, "#branch") || !strstr(node->name, "#")) {
|
||||
new = *((ckt->CKTrhsOld) + i ) ;
|
||||
old = *((ckt->CKTrhs) + i ) ;
|
||||
new = ckt->CKTrhsOld [i] ;
|
||||
old = ckt->CKTrhs [i] ;
|
||||
fprintf(stdout,"%-30s %20g %20g", node->name, new, old);
|
||||
if(node->type == 3) {
|
||||
tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) +
|
||||
|
|
|
|||
|
|
@ -234,8 +234,8 @@ DCtran(CKTcircuit *ckt,
|
|||
"-------------");
|
||||
for(node=ckt->CKTnodes->next;node;node=node->next) {
|
||||
if (strstr(node->name, "#branch") || !strstr(node->name, "#")) {
|
||||
new = *((ckt->CKTrhsOld) + i ) ;
|
||||
old = *((ckt->CKTrhs) + i ) ;
|
||||
new = ckt->CKTrhsOld [i] ;
|
||||
old = ckt->CKTrhs [i] ;
|
||||
fprintf(stdout,"%-30s %20g %20g", node->name, new, old);
|
||||
if(node->type == 3) {
|
||||
tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) +
|
||||
|
|
|
|||
|
|
@ -529,11 +529,11 @@ time1 = SPfrontEnd->IFseconds();
|
|||
}
|
||||
for (i=0; i< displacement ; i++)
|
||||
{
|
||||
DkerProc(D_TWOF1,*(job->r2H11stor + i),
|
||||
*(job->i2H11stor + i),
|
||||
DkerProc(D_TWOF1,job->r2H11stor[i],
|
||||
job->i2H11stor[i],
|
||||
size, job);
|
||||
ckt->CKTrhsOld = *((job->r2H11stor) + i);
|
||||
ckt->CKTirhsOld = *((job->i2H11stor) + i);
|
||||
ckt->CKTrhsOld = job->r2H11stor[i];
|
||||
ckt->CKTirhsOld = job->i2H11stor[i];
|
||||
error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot);
|
||||
if(error) return(error);
|
||||
}
|
||||
|
|
@ -551,11 +551,11 @@ time1 = SPfrontEnd->IFseconds();
|
|||
numNames, nameList, IF_COMPLEX, &acPlot);
|
||||
for (i=0; i< displacement ; i++)
|
||||
{
|
||||
DkerProc(D_THRF1,*(job->r3H11stor + i),
|
||||
*(job->i3H11stor + i),
|
||||
DkerProc(D_THRF1,job->r3H11stor[i],
|
||||
job->i3H11stor[i],
|
||||
size, job);
|
||||
ckt->CKTrhsOld = *((job->r3H11stor) + i);
|
||||
ckt->CKTirhsOld = *((job->i3H11stor) + i);
|
||||
ckt->CKTrhsOld = job->r3H11stor[i];
|
||||
ckt->CKTirhsOld = job->i3H11stor[i];
|
||||
error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot);
|
||||
}
|
||||
SPfrontEnd->OUTendPlot (acPlot);
|
||||
|
|
@ -575,11 +575,11 @@ time1 = SPfrontEnd->IFseconds();
|
|||
numNames, nameList, IF_COMPLEX, &acPlot);
|
||||
for (i=0; i< displacement ; i++)
|
||||
{
|
||||
DkerProc(D_F1PF2,*(job->r2H12stor + i),
|
||||
*(job->i2H12stor + i),
|
||||
DkerProc(D_F1PF2,job->r2H12stor[i],
|
||||
job->i2H12stor[i],
|
||||
size, job);
|
||||
ckt->CKTrhsOld = *((job->r2H12stor) + i);
|
||||
ckt->CKTirhsOld = *((job->i2H12stor) + i);
|
||||
ckt->CKTrhsOld = job->r2H12stor[i];
|
||||
ckt->CKTirhsOld = job->i2H12stor[i];
|
||||
error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot);
|
||||
if(error) return(error);
|
||||
}
|
||||
|
|
@ -598,11 +598,11 @@ time1 = SPfrontEnd->IFseconds();
|
|||
for (i=0; i< displacement ; i++)
|
||||
{
|
||||
DkerProc(D_F1MF2,
|
||||
*(job->r2H1m2stor + i),
|
||||
*(job->i2H1m2stor + i),
|
||||
job->r2H1m2stor[i],
|
||||
job->i2H1m2stor[i],
|
||||
size, job);
|
||||
ckt->CKTrhsOld = *((job->r2H1m2stor) + i);
|
||||
ckt->CKTirhsOld = *((job->i2H1m2stor) + i);
|
||||
ckt->CKTrhsOld = job->r2H1m2stor[i];
|
||||
ckt->CKTirhsOld = job->i2H1m2stor[i];
|
||||
error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot);
|
||||
if(error) return(error);
|
||||
}
|
||||
|
|
@ -621,11 +621,11 @@ time1 = SPfrontEnd->IFseconds();
|
|||
for (i=0; i< displacement ; i++)
|
||||
{
|
||||
DkerProc(D_2F1MF2,
|
||||
*(job->r3H1m2stor + i),
|
||||
*(job->i3H1m2stor + i),
|
||||
job->r3H1m2stor[i],
|
||||
job->i3H1m2stor[i],
|
||||
size, job);
|
||||
ckt->CKTrhsOld = *((job->r3H1m2stor) + i);
|
||||
ckt->CKTirhsOld = *((job->i3H1m2stor) + i);
|
||||
ckt->CKTrhsOld = job->r3H1m2stor[i];
|
||||
ckt->CKTirhsOld = job->i3H1m2stor[i];
|
||||
error = CKTacDump(ckt,ckt->CKTrhsOld[0],acPlot);
|
||||
if(error) return(error);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ NevalSrc (double *noise, double *lnNoise, CKTcircuit *ckt, int type, int node1,
|
|||
double imagVal;
|
||||
double gain;
|
||||
|
||||
realVal = *((ckt->CKTrhs) + node1) - *((ckt->CKTrhs) + node2);
|
||||
imagVal = *((ckt->CKTirhs) + node1) - *((ckt->CKTirhs) + node2);
|
||||
realVal = ckt->CKTrhs [node1] - ckt->CKTrhs [node2];
|
||||
imagVal = ckt->CKTirhs [node1] - ckt->CKTirhs [node2];
|
||||
gain = (realVal*realVal) + (imagVal*imagVal);
|
||||
switch (type) {
|
||||
|
||||
|
|
@ -87,10 +87,10 @@ double phi21) /* Phase of signal 2 relative to signal 1 */
|
|||
double realOut, imagOut, param_gain;
|
||||
double T0, T1, T2, T3;
|
||||
|
||||
realVal1 = *((ckt->CKTrhs) + node1) - *((ckt->CKTrhs) + node2);
|
||||
imagVal1 = *((ckt->CKTirhs) + node1) - *((ckt->CKTirhs) + node2);
|
||||
realVal2 = *((ckt->CKTrhs) + node3) - *((ckt->CKTrhs) + node4);
|
||||
imagVal2 = *((ckt->CKTirhs) + node3) - *((ckt->CKTirhs) + node4);
|
||||
realVal1 = ckt->CKTrhs [node1] - ckt->CKTrhs [node2];
|
||||
imagVal1 = ckt->CKTirhs [node1] - ckt->CKTirhs [node2];
|
||||
realVal2 = ckt->CKTrhs [node3] - ckt->CKTrhs [node4];
|
||||
imagVal2 = ckt->CKTirhs [node3] - ckt->CKTirhs [node4];
|
||||
T0 = sqrt(param1);
|
||||
T1 = sqrt(param2);
|
||||
T2 = T1 * cos(phi21);
|
||||
|
|
@ -134,8 +134,8 @@ NevalSrcInstanceTemp (double *noise, double *lnNoise, CKTcircuit *ckt, int type,
|
|||
double imagVal;
|
||||
double gain;
|
||||
|
||||
realVal = *((ckt->CKTrhs) + node1) - *((ckt->CKTrhs) + node2);
|
||||
imagVal = *((ckt->CKTirhs) + node1) - *((ckt->CKTirhs) + node2);
|
||||
realVal = ckt->CKTrhs [node1] - ckt->CKTrhs [node2];
|
||||
imagVal = ckt->CKTirhs [node1] - ckt->CKTirhs [node2];
|
||||
gain = (realVal*realVal) + (imagVal*imagVal);
|
||||
switch (type) {
|
||||
|
||||
|
|
|
|||
|
|
@ -206,10 +206,10 @@ NOISEan (CKTcircuit *ckt, int restart)
|
|||
*/
|
||||
|
||||
NIacIter(ckt);
|
||||
realVal = *((ckt->CKTrhsOld) + posOutNode)
|
||||
- *((ckt->CKTrhsOld) + negOutNode);
|
||||
imagVal = *((ckt->CKTirhsOld) + posOutNode)
|
||||
- *((ckt->CKTirhsOld) + negOutNode);
|
||||
realVal = ckt->CKTrhsOld [posOutNode]
|
||||
- ckt->CKTrhsOld [negOutNode];
|
||||
imagVal = ckt->CKTirhsOld [posOutNode]
|
||||
- ckt->CKTirhsOld [negOutNode];
|
||||
data->GainSqInv = 1.0 / MAX(((realVal*realVal)
|
||||
+ (imagVal*imagVal)),N_MINGAIN);
|
||||
data->lnGainInv = log(data->GainSqInv);
|
||||
|
|
|
|||
|
|
@ -171,10 +171,10 @@ double INPevaluate(char **line, int *error, int gobble)
|
|||
case 'M':
|
||||
{
|
||||
/* special case for m - may be m or mil or meg */
|
||||
if (*(here + 1) != 0 && *(here + 2) != 0) {
|
||||
if (here[1] != 0 && here[2] != 0) {
|
||||
/* at least 2 characters, so check them. */
|
||||
if ((*(here + 1) == 'E') || (*(here + 1) == 'e')) {
|
||||
if ((*(here + 2) == 'G') || (*(here + 2) == 'g')) {
|
||||
if ((here[1] == 'E') || (here[1] == 'e')) {
|
||||
if ((here[2] == 'G') || (here[2] == 'g')) {
|
||||
expo1 = expo1 + 6;
|
||||
if (gobble) {
|
||||
FREE(token);
|
||||
|
|
@ -185,8 +185,8 @@ double INPevaluate(char **line, int *error, int gobble)
|
|||
pow(10.0,
|
||||
(double) (expo1 + expsgn * expo2)));
|
||||
}
|
||||
} else if ((*(here + 1) == 'I') || (*(here + 1) == 'i')) {
|
||||
if ((*(here + 2) == 'L') || (*(here + 2) == 'l')) {
|
||||
} else if ((here[1] == 'I') || (here[1] == 'i')) {
|
||||
if ((here[2] == 'L') || (here[2] == 'l')) {
|
||||
expo1 = expo1 - 6;
|
||||
mantis = mantis * 25.4;
|
||||
if (gobble) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ IFvalue *INPgetValue(CKTcircuit *ckt, char **line, int type, INPtables * tab)
|
|||
temp.v.numValue++;
|
||||
list =
|
||||
TREALLOC(double, list, temp.v.numValue);
|
||||
*(list + temp.v.numValue - 1) = tmp;
|
||||
list[temp.v.numValue - 1] = tmp;
|
||||
tmp = INPevaluate(line, &error, 1);
|
||||
}
|
||||
temp.v.vec.rVec = list;
|
||||
|
|
@ -51,7 +51,7 @@ IFvalue *INPgetValue(CKTcircuit *ckt, char **line, int type, INPtables * tab)
|
|||
temp.v.numValue++;
|
||||
ilist =
|
||||
TREALLOC(int, ilist, temp.v.numValue);
|
||||
*(ilist + temp.v.numValue - 1) = (int) floor(0.5 + tmp);
|
||||
ilist[temp.v.numValue - 1] = (int) floor(0.5 + tmp);
|
||||
tmp = INPevaluate(line, &error, 1);
|
||||
}
|
||||
temp.v.vec.iVec = ilist;
|
||||
|
|
|
|||
|
|
@ -50,15 +50,15 @@ register CKTcircuit *ckt;
|
|||
|
||||
for (col=1;col<=info->SENparms;col++) {
|
||||
for(row=1;row<=size;row++){
|
||||
*(ckt->CKTsenRhs + row ) = *(info->SEN_RHS[row] + col);
|
||||
ckt->CKTsenRhs[row] = info->SEN_RHS[row][col];
|
||||
}
|
||||
/* solve for the sensitivity values */
|
||||
SMPsolve(ckt->CKTmatrix,ckt->CKTsenRhs,ckt->CKTrhsSpare);
|
||||
|
||||
/* store the sensitivity values */
|
||||
for(row=1;row<=size;row++){
|
||||
*(info->SEN_Sap[row] + col) = *(ckt->CKTsenRhs+row);
|
||||
*(info->SEN_RHS[row] + col) = *(ckt->CKTsenRhs+row);
|
||||
info->SEN_Sap[row][col] = ckt->CKTsenRhs[row];
|
||||
info->SEN_RHS[row][col] = ckt->CKTsenRhs[row];
|
||||
}
|
||||
}
|
||||
#ifdef SENSDEBUG
|
||||
|
|
@ -71,7 +71,7 @@ register CKTcircuit *ckt;
|
|||
for (col=1;col<=info->SENparms;col++) {
|
||||
printf("\t");
|
||||
printf("Sap(%s,%d) = %.5e\t",rowe,col,
|
||||
*(info->SEN_Sap[row] + col));
|
||||
info->SEN_Sap[row][col]);
|
||||
}
|
||||
printf("\n\n");
|
||||
}
|
||||
|
|
@ -82,7 +82,7 @@ register CKTcircuit *ckt;
|
|||
for (col=1;col<=info->SENparms;col++) {
|
||||
printf(" ");
|
||||
printf("RHS(%d,%d) = %.7e ",row,col,
|
||||
*(info->SEN_RHS[row] + col));
|
||||
info->SEN_RHS[row][col]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
|
@ -112,8 +112,8 @@ register CKTcircuit *ckt;
|
|||
for (col=1;col<=info->SENparms;col++) {
|
||||
|
||||
for(row=1;row<=size;row++){
|
||||
*(ckt->CKTsenRhs+row) = *(info->SEN_RHS[row] + col);
|
||||
*(ckt->CKTseniRhs+row) = *(info->SEN_iRHS[row] + col);
|
||||
ckt->CKTsenRhs[row] = info->SEN_RHS[row][col];
|
||||
ckt->CKTseniRhs[row] = info->SEN_iRHS[row][col];
|
||||
}
|
||||
|
||||
/* solve for the sensitivity values ( both real and imag parts)*/
|
||||
|
|
@ -122,8 +122,8 @@ register CKTcircuit *ckt;
|
|||
|
||||
/* store the sensitivity values ( both real and imag parts)*/
|
||||
for(row=1;row<=size;row++){
|
||||
*(info->SEN_RHS[row] + col) = *(ckt->CKTsenRhs+row);
|
||||
*(info->SEN_iRHS[row] + col) = *(ckt->CKTseniRhs+row);
|
||||
info->SEN_RHS[row][col] = ckt->CKTsenRhs[row];
|
||||
info->SEN_iRHS[row][col] = ckt->CKTseniRhs[row];
|
||||
}
|
||||
}
|
||||
#ifdef SENSDEBUG
|
||||
|
|
@ -135,8 +135,8 @@ register CKTcircuit *ckt;
|
|||
for (col=1;col<=info->SENparms;col++) {
|
||||
printf("\t");
|
||||
printf("RHS(%s,%d) = %.5e",rowe,col,
|
||||
*(info->SEN_RHS[row] + col));
|
||||
printf(" + j %.5e\t",*(info->SEN_iRHS[row] + col));
|
||||
info->SEN_RHS[row][col]);
|
||||
printf(" + j %.5e\t",info->SEN_iRHS[row][col]);
|
||||
printf("\n\n");
|
||||
|
||||
}
|
||||
|
|
@ -150,8 +150,8 @@ register CKTcircuit *ckt;
|
|||
for (col=1;col<=info->SENparms;col++) {
|
||||
printf(" ");
|
||||
printf("RHS(%d,%d) = %.7e ",row,col,
|
||||
*(info->SEN_RHS[row] + col));
|
||||
printf("+j %.7e ",*(info->SEN_iRHS[row] + col));
|
||||
info->SEN_RHS[row][col]);
|
||||
printf("+j %.7e ",info->SEN_iRHS[row][col]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ register CKTcircuit *ckt;
|
|||
(ckt->CKTsenInfo->SENmode == TRANSEN)) {
|
||||
for (col=0;col<=ckt->CKTsenInfo->SENparms;col++) {
|
||||
for(row=0;row<=size;row++){
|
||||
*(ckt->CKTsenInfo->SEN_RHS[row] + col)= 0;
|
||||
ckt->CKTsenInfo->SEN_RHS[row][col]= 0;
|
||||
}
|
||||
}
|
||||
for (i=0;i<DEVmaxnum;i++) {
|
||||
|
|
@ -51,8 +51,8 @@ register CKTcircuit *ckt;
|
|||
} else{
|
||||
for (col=0;col<=ckt->CKTsenInfo->SENparms;col++) {
|
||||
for(row=0;row<=size;row++){
|
||||
*(ckt->CKTsenInfo->SEN_RHS[row] + col)= 0;
|
||||
*(ckt->CKTsenInfo->SEN_iRHS[row] + col)= 0;
|
||||
ckt->CKTsenInfo->SEN_RHS[row][col]= 0;
|
||||
ckt->CKTsenInfo->SEN_iRHS[row][col]= 0;
|
||||
}
|
||||
}
|
||||
for (i=0;i<DEVmaxnum;i++) {
|
||||
|
|
|
|||
|
|
@ -50,11 +50,11 @@ SENsetParm(ckt,anal,which,value)
|
|||
((SENstruct *)anal)->SENparmNames = TREALLOC(char *, ((SENstruct *)anal)->SENparmNames, ((SENstruct *)anal)->SENnumVal) ;
|
||||
if( ((SENstruct *)anal)->SENparmNames == NULL) return(E_NOMEM);
|
||||
}
|
||||
*(((SENstruct *)anal)->SENdevices+((SENstruct *)anal)->SENnumVal-1)=
|
||||
((SENstruct *)anal)->SENdevices [ ((SENstruct *)anal)->SENnumVal - 1 ] =
|
||||
value->sValue;
|
||||
break;
|
||||
case SEN_PARM:
|
||||
*(((SENstruct *)anal)->SENparmNames+((SENstruct *)anal)->SENnumVal-1)=
|
||||
((SENstruct *)anal)->SENparmNames [ ((SENstruct *)anal)->SENnumVal - 1 ] =
|
||||
value->sValue;
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,13 +39,13 @@ SENstartup(ckt)
|
|||
type = -1;
|
||||
fast = NULL;
|
||||
err = CKTfndDev((GENERIC*)ckt,&type,(GENERIC**)&fast,
|
||||
(*((ckt->CKTsenInfo->SENdevices)+i)),
|
||||
((ckt->CKTsenInfo->SENdevices)[i]),
|
||||
NULL, NULL);
|
||||
if(err != OK) return(err);
|
||||
err = CKTpName(
|
||||
(*((ckt->CKTsenInfo->SENparmNames)+i)),
|
||||
((ckt->CKTsenInfo->SENparmNames)[i]),
|
||||
&parmtemp,ckt ,type,
|
||||
(*((ckt->CKTsenInfo->SENdevices)+i)),
|
||||
((ckt->CKTsenInfo->SENdevices)[i]),
|
||||
&fast);
|
||||
if(err != OK) return(err);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -383,17 +383,17 @@ double cm_smooth_pwl(double x_input, double *x, double *y, int size,
|
|||
|
||||
/* Determine segment boundaries within which x_input resides */
|
||||
|
||||
if (x_input <= (*(x+1) + *x)/2.0) {/*** x_input below lowest midpoint ***/
|
||||
*dout_din = (*(y+1) - *y)/(*(x+1) - *x);
|
||||
if (x_input <= (x[1] + x[0])/2.0) {/*** x_input below lowest midpoint ***/
|
||||
*dout_din = (y[1] - y[0])/(x[1] - x[0]);
|
||||
out = *y + (x_input - *x) * *dout_din;
|
||||
return out;
|
||||
}
|
||||
else {
|
||||
if (x_input >= (*(x+size-2) + *(x+size-1))/2.0) {
|
||||
if (x_input >= (x[size-2] + x[size-1])/2.0) {
|
||||
/*** x_input above highest midpoint ***/
|
||||
*dout_din = (*(y+size-1) - *(y+size-2)) /
|
||||
(*(x+size-1) - *(x+size-2));
|
||||
out = *(y+size-1) + (x_input - *(x+size-1)) * *dout_din;
|
||||
*dout_din = (y[size-1] - y[size-2]) /
|
||||
(x[size-1] - x[size-2]);
|
||||
out = y[size-1] + (x_input - x[size-1]) * *dout_din;
|
||||
return out;
|
||||
}
|
||||
else { /*** x_input within bounds of end midpoints... ***/
|
||||
|
|
@ -402,11 +402,11 @@ double cm_smooth_pwl(double x_input, double *x, double *y, int size,
|
|||
|
||||
for (i=1; i<size; i++) {
|
||||
|
||||
if (x_input < (*(x+i) + *(x+i+1))/2.0) {
|
||||
if (x_input < (x[i] + x[i+1])/2.0) {
|
||||
/* approximate position known... */
|
||||
|
||||
lower_seg = (*(x+i) - *(x+i-1));
|
||||
upper_seg = (*(x+i+1) - *(x+i));
|
||||
lower_seg = (x[i] - x[i-1]);
|
||||
upper_seg = (x[i+1] - x[i]);
|
||||
|
||||
|
||||
/* Calculate input_domain about this region's breakpoint.*/
|
||||
|
|
@ -423,27 +423,27 @@ double cm_smooth_pwl(double x_input, double *x, double *y, int size,
|
|||
|
||||
|
||||
/* Set up threshold values about breakpoint... */
|
||||
threshold_lower = *(x+i) - input_domain;
|
||||
threshold_upper = *(x+i) + input_domain;
|
||||
threshold_lower = x[i] - input_domain;
|
||||
threshold_upper = x[i] + input_domain;
|
||||
|
||||
/* Determine where x_input is within region & determine */
|
||||
/* output and partial values.... */
|
||||
if (x_input < threshold_lower) { /* Lower linear region */
|
||||
*dout_din = (*(y+i) - *(y+i-1))/lower_seg;
|
||||
out = *(y+i) + (x_input - *(x+i)) * *dout_din;
|
||||
*dout_din = (y[i] - y[i-1])/lower_seg;
|
||||
out = y[i] + (x_input - x[i]) * *dout_din;
|
||||
return out;
|
||||
}
|
||||
else {
|
||||
if (x_input < threshold_upper) { /* Parabolic region */
|
||||
lower_slope = (*(y+i) - *(y+i-1))/lower_seg;
|
||||
upper_slope = (*(y+i+1) - *(y+i))/upper_seg;
|
||||
cm_smooth_corner(x_input,*(x+i),*(y+i),input_domain,
|
||||
lower_slope = (y[i] - y[i-1])/lower_seg;
|
||||
upper_slope = (y[i+1] - y[i])/upper_seg;
|
||||
cm_smooth_corner(x_input,x[i],y[i],input_domain,
|
||||
lower_slope,upper_slope,&out,dout_din);
|
||||
return out;
|
||||
}
|
||||
else { /* Upper linear region */
|
||||
*dout_din = (*(y+i+1) - *(y+i))/upper_seg;
|
||||
out = *(y+i) + (x_input - *(x+i)) * *dout_din;
|
||||
*dout_din = (y[i+1] - y[i])/upper_seg;
|
||||
out = y[i] + (x_input - x[i]) * *dout_din;
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -350,8 +350,8 @@ void cm_oneshot(ARGS) /* structure holding parms,
|
|||
|
||||
/* Retrieve control and pulse-width values. */
|
||||
for (i=0; i<cntl_size; i++) {
|
||||
*(x+i) = PARAM(cntl_array[i]);
|
||||
*(y+i) = PARAM(pw_array[i]);
|
||||
x[i] = PARAM(cntl_array[i]);
|
||||
y[i] = PARAM(pw_array[i]);
|
||||
}
|
||||
|
||||
/* Retrieve cntl_input and clock value. */
|
||||
|
|
@ -365,7 +365,7 @@ void cm_oneshot(ARGS) /* structure holding parms,
|
|||
|
||||
/* Determine segment boundaries within which cntl_input resides */
|
||||
if (cntl_input <= *x) { /* cntl_input below lowest cntl_voltage */
|
||||
dout_din = (*(y+1) - *y)/(*(x+1) - *x);
|
||||
dout_din = (y[1] - y[0])/(x[1] - x[0]);
|
||||
pw = *y + (cntl_input - *x) * dout_din;
|
||||
|
||||
if(pw < 0) {
|
||||
|
|
@ -375,10 +375,10 @@ void cm_oneshot(ARGS) /* structure holding parms,
|
|||
} else
|
||||
|
||||
/*** cntl_input above highest cntl_voltage ***/
|
||||
if (cntl_input >= *(x+cntl_size-1)) {
|
||||
dout_din = (*(y+cntl_size-1) - *(y+cntl_size-2)) /
|
||||
(*(x+cntl_size-1) - *(x+cntl_size-2));
|
||||
pw = *(y+cntl_size-1) + (cntl_input - *(x+cntl_size-1)) * dout_din;
|
||||
if (cntl_input >= x[cntl_size-1]) {
|
||||
dout_din = (y[cntl_size-1] - y[cntl_size-2]) /
|
||||
(x[cntl_size-1] - x[cntl_size-2]);
|
||||
pw = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * dout_din;
|
||||
|
||||
} else {
|
||||
/*** cntl_input within bounds of end midpoints...
|
||||
|
|
@ -386,10 +386,10 @@ void cm_oneshot(ARGS) /* structure holding parms,
|
|||
calculate required output. ***/
|
||||
|
||||
for (i=0; i<cntl_size-1; i++) {
|
||||
if ((cntl_input < *(x+i+1)) && (cntl_input >= *(x+i))) {
|
||||
if ((cntl_input < x[i+1]) && (cntl_input >= x[i])) {
|
||||
/* Interpolate to get the correct pulse width value */
|
||||
pw = ((cntl_input - *(x+i))/(*(x+i+1) - *(x+i)))*
|
||||
(*(y+i+1)-*(y+i)) + *(y+i);
|
||||
pw = ((cntl_input - x[i])/(x[i+1] - x[i]))*
|
||||
(y[i+1]-y[i]) + y[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,8 +215,8 @@ void cm_sine(ARGS) /* structure holding parms,
|
|||
|
||||
/* Retrieve x and y values. */
|
||||
for (i=0; i<cntl_size; i++) {
|
||||
*(x+i) = PARAM(cntl_array[i]);
|
||||
*(y+i) = PARAM(freq_array[i]);
|
||||
x[i] = PARAM(cntl_array[i]);
|
||||
y[i] = PARAM(freq_array[i]);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -228,7 +228,7 @@ void cm_sine(ARGS) /* structure holding parms,
|
|||
/* Determine segment boundaries within which cntl_input resides */
|
||||
/*** cntl_input below lowest cntl_voltage ***/
|
||||
if (cntl_input <= *x) {
|
||||
dout_din = (*(y+1) - *y)/(*(x+1) - *x);
|
||||
dout_din = (y[1] - y[0])/(x[1] - x[0]);
|
||||
freq = *y + (cntl_input - *x) * dout_din;
|
||||
|
||||
if(freq <= 0){
|
||||
|
|
@ -240,10 +240,10 @@ void cm_sine(ARGS) /* structure holding parms,
|
|||
else
|
||||
/*** cntl_input above highest cntl_voltage ***/
|
||||
|
||||
if (cntl_input >= *(x+cntl_size-1)){
|
||||
dout_din = (*(y+cntl_size-1) - *(y+cntl_size-2)) /
|
||||
(*(x+cntl_size-1) - *(x+cntl_size-2));
|
||||
freq = *(y+cntl_size-1) + (cntl_input - *(x+cntl_size-1)) * dout_din;
|
||||
if (cntl_input >= x[cntl_size-1]){
|
||||
dout_din = (y[cntl_size-1] - y[cntl_size-2]) /
|
||||
(x[cntl_size-1] - x[cntl_size-2]);
|
||||
freq = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * dout_din;
|
||||
|
||||
} else { /*** cntl_input within bounds of end midpoints...
|
||||
must determine position progressively & then
|
||||
|
|
@ -251,12 +251,12 @@ void cm_sine(ARGS) /* structure holding parms,
|
|||
|
||||
for (i=0; i<cntl_size-1; i++) {
|
||||
|
||||
if ((cntl_input < *(x+i+1)) && (cntl_input >= *(x+i))) {
|
||||
if ((cntl_input < x[i+1]) && (cntl_input >= x[i])) {
|
||||
|
||||
/* Interpolate to the correct frequency value */
|
||||
|
||||
freq = ((cntl_input - *(x+i))/(*(x+i+1) - *(x+i)))*
|
||||
(*(y+i+1)-*(y+i)) + *(y+i);
|
||||
freq = ((cntl_input - x[i])/(x[i+1] - x[i]))*
|
||||
(y[i+1]-y[i]) + y[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -283,8 +283,8 @@ void cm_square(ARGS) /* structure holding parms,
|
|||
|
||||
/* Retrieve x and y values. */
|
||||
for (i=0; i<cntl_size; i++) {
|
||||
*(x+i) = PARAM(cntl_array[i]);
|
||||
*(y+i) = PARAM(freq_array[i]);
|
||||
x[i] = PARAM(cntl_array[i]);
|
||||
y[i] = PARAM(freq_array[i]);
|
||||
}
|
||||
|
||||
/* Retrieve cntl_input value. */
|
||||
|
|
@ -293,7 +293,7 @@ void cm_square(ARGS) /* structure holding parms,
|
|||
/* Determine segment boundaries within which cntl_input resides */
|
||||
/*** cntl_input below lowest cntl_voltage ***/
|
||||
if (cntl_input <= *x) {
|
||||
dout_din = (*(y+1) - *y)/(*(x+1) - *x);
|
||||
dout_din = (y[1] - y[0])/(x[1] - x[0]);
|
||||
freq = *y + (cntl_input - *x) * dout_din;
|
||||
|
||||
if(freq <= 0) {
|
||||
|
|
@ -302,11 +302,11 @@ void cm_square(ARGS) /* structure holding parms,
|
|||
}
|
||||
/* freq = *y; */
|
||||
/*** cntl_input above highest cntl_voltage ***/
|
||||
} else if (cntl_input >= *(x+cntl_size-1)) {
|
||||
dout_din = (*(y+cntl_size-1) - *(y+cntl_size-2)) /
|
||||
(*(x+cntl_size-1) - *(x+cntl_size-2));
|
||||
freq = *(y+cntl_size-1) + (cntl_input - *(x+cntl_size-1)) * dout_din;
|
||||
/* freq = *(y+cntl_size-1); */
|
||||
} else if (cntl_input >= x[cntl_size-1]) {
|
||||
dout_din = (y[cntl_size-1] - y[cntl_size-2]) /
|
||||
(x[cntl_size-1] - x[cntl_size-2]);
|
||||
freq = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * dout_din;
|
||||
/* freq = y[cntl_size-1]; */
|
||||
|
||||
} else {
|
||||
/*** cntl_input within bounds of end midpoints...
|
||||
|
|
@ -315,12 +315,12 @@ void cm_square(ARGS) /* structure holding parms,
|
|||
|
||||
for (i=0; i<cntl_size-1; i++) {
|
||||
|
||||
if ((cntl_input < *(x+i+1)) && (cntl_input >= *(x+i))) {
|
||||
if ((cntl_input < x[i+1]) && (cntl_input >= x[i])) {
|
||||
|
||||
/* Interpolate to the correct frequency value */
|
||||
|
||||
freq = ((cntl_input - *(x+i))/(*(x+i+1) - *(x+i)))*
|
||||
(*(y+i+1)-*(y+i)) + *(y+i);
|
||||
freq = ((cntl_input - x[i])/(x[i+1] - x[i]))*
|
||||
(y[i+1]-y[i]) + y[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -272,8 +272,8 @@ void cm_triangle(ARGS) /* structure holding parms,
|
|||
|
||||
/* Retrieve x and y values. */
|
||||
for (i=0; i<cntl_size; i++) {
|
||||
*(x+i) = PARAM(cntl_array[i]);
|
||||
*(y+i) = PARAM(freq_array[i]);
|
||||
x[i] = PARAM(cntl_array[i]);
|
||||
y[i] = PARAM(freq_array[i]);
|
||||
}
|
||||
|
||||
/* Retrieve cntl_input value. */
|
||||
|
|
@ -284,7 +284,7 @@ void cm_triangle(ARGS) /* structure holding parms,
|
|||
/*** cntl_input below lowest cntl_voltage ***/
|
||||
if (cntl_input <= *x) {
|
||||
|
||||
dout_din = (*(y+1) - *y)/(*(x+1) - *x);
|
||||
dout_din = (y[1] - y[0])/(x[1] - x[0]);
|
||||
freq = *y + (cntl_input - *x) * dout_din;
|
||||
|
||||
if(freq <= 0) {
|
||||
|
|
@ -295,11 +295,11 @@ void cm_triangle(ARGS) /* structure holding parms,
|
|||
} else
|
||||
/*** cntl_input above highest cntl_voltage ***/
|
||||
|
||||
if (cntl_input >= *(x+cntl_size-1)) {
|
||||
dout_din = (*(y+cntl_size-1) - *(y+cntl_size-2)) /
|
||||
(*(x+cntl_size-1) - *(x+cntl_size-2));
|
||||
freq = *(y+cntl_size-1) + (cntl_input - *(x+cntl_size-1)) * dout_din;
|
||||
/* freq = *(y+cntl_size-1); */
|
||||
if (cntl_input >= x[cntl_size-1]) {
|
||||
dout_din = (y[cntl_size-1] - y[cntl_size-2]) /
|
||||
(x[cntl_size-1] - x[cntl_size-2]);
|
||||
freq = y[cntl_size-1] + (cntl_input - x[cntl_size-1]) * dout_din;
|
||||
/* freq = y[cntl_size-1]; */
|
||||
|
||||
} else {
|
||||
/*** cntl_input within bounds of end midpoints...
|
||||
|
|
@ -308,12 +308,12 @@ void cm_triangle(ARGS) /* structure holding parms,
|
|||
|
||||
for (i=0; i<cntl_size-1; i++) {
|
||||
|
||||
if ((cntl_input < *(x+i+1)) && (cntl_input >= *(x+i))) {
|
||||
if ((cntl_input < x[i+1]) && (cntl_input >= x[i])) {
|
||||
|
||||
/* Interpolate to the correct frequency value */
|
||||
|
||||
freq = ((cntl_input - *(x+i))/(*(x+i+1) - *(x+i)))*
|
||||
(*(y+i+1)-*(y+i)) + *(y+i);
|
||||
freq = ((cntl_input - x[i])/(x[i+1] - x[i]))*
|
||||
(y[i+1]-y[i]) + y[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -306,8 +306,8 @@ void cm_core(ARGS) /* structure holding parms,
|
|||
|
||||
/* Retrieve H and B values. */
|
||||
for (i=0; i<size; i++) {
|
||||
*(H+i) = PARAM(H_array[i]);
|
||||
*(B+i) = PARAM(B_array[i]);
|
||||
H[i] = PARAM(H_array[i]);
|
||||
B[i] = PARAM(B_array[i]);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -315,7 +315,7 @@ void cm_core(ARGS) /* structure holding parms,
|
|||
/* breakpoint segments for violation of 50% rule... */
|
||||
if (PARAM(fraction) == MIF_FALSE) {
|
||||
for (i=0; i<(size-1); i++) {
|
||||
if ( (*(H+i+1) - *(H+i)) < (2.0*input_domain) ) {
|
||||
if ( (H[i+1] - H[i]) < (2.0*input_domain) ) {
|
||||
cm_message_send(limit_error);
|
||||
return;
|
||||
}
|
||||
|
|
@ -333,26 +333,26 @@ void cm_core(ARGS) /* structure holding parms,
|
|||
|
||||
/* Determine segment boundaries within which H_input resides */
|
||||
|
||||
if (H_input <= (*(H+1) + *H)/2.0) {/*** H_input below lowest midpoint ***/
|
||||
dout_din = (*(B+1) - *B)/(*(H+1) - *H);
|
||||
if (H_input <= (H[1] + H[0])/2.0) {/*** H_input below lowest midpoint ***/
|
||||
dout_din = (B[1] - B[0])/(H[1] - H[0]);
|
||||
B_out = *B + (H_input - *H) * dout_din;
|
||||
} else {
|
||||
if (H_input >= (*(H+size-2) + *(H+size-1))/2.0) {
|
||||
if (H_input >= (H[size-2] + H[size-1])/2.0) {
|
||||
/*** H_input above highest midpoint ***/
|
||||
dout_din = (*(B+size-1) - *(B+size-2)) /
|
||||
(*(H+size-1) - *(H+size-2));
|
||||
B_out = *(B+size-1) + (H_input - *(H+size-1)) * dout_din;
|
||||
dout_din = (B[size-1] - B[size-2]) /
|
||||
(H[size-1] - H[size-2]);
|
||||
B_out = B[size-1] + (H_input - H[size-1]) * dout_din;
|
||||
} else { /*** H_input within bounds of end midpoints... ***/
|
||||
/*** must determine position progressively & then ***/
|
||||
/*** calculate required output. ***/
|
||||
|
||||
for (i=1; i<size; i++) {
|
||||
|
||||
if (H_input < (*(H+i) + *(H+i+1))/2.0) {
|
||||
if (H_input < (H[i] + H[i+1])/2.0) {
|
||||
/* approximate position known... */
|
||||
|
||||
lower_seg = (*(H+i) - *(H+i-1));
|
||||
upper_seg = (*(H+i+1) - *(H+i));
|
||||
lower_seg = (H[i] - H[i-1]);
|
||||
upper_seg = (H[i+1] - H[i]);
|
||||
|
||||
|
||||
/* Calculate input_domain about this region's breakpoint.*/
|
||||
|
|
@ -370,23 +370,23 @@ void cm_core(ARGS) /* structure holding parms,
|
|||
}
|
||||
|
||||
/* Set up threshold values about breakpoint... */
|
||||
threshold_lower = *(H+i) - input_domain;
|
||||
threshold_upper = *(H+i) + input_domain;
|
||||
threshold_lower = H[i] - input_domain;
|
||||
threshold_upper = H[i] + input_domain;
|
||||
|
||||
/* Determine where H_input is within region & determine */
|
||||
/* output and partial values.... */
|
||||
if (H_input < threshold_lower) { /* Lower linear region */
|
||||
dout_din = (*(B+i) - *(B+i-1))/lower_seg;
|
||||
B_out = *(B+i) + (H_input - *(H+i)) * dout_din;
|
||||
dout_din = (B[i] - B[i-1])/lower_seg;
|
||||
B_out = B[i] + (H_input - H[i]) * dout_din;
|
||||
} else {
|
||||
if (H_input < threshold_upper) { /* Parabolic region */
|
||||
lower_slope = (*(B+i) - *(B+i-1))/lower_seg;
|
||||
upper_slope = (*(B+i+1) - *(B+i))/upper_seg;
|
||||
cm_smooth_corner(H_input,*(H+i),*(B+i),input_domain,
|
||||
lower_slope = (B[i] - B[i-1])/lower_seg;
|
||||
upper_slope = (B[i+1] - B[i])/upper_seg;
|
||||
cm_smooth_corner(H_input,H[i],B[i],input_domain,
|
||||
lower_slope,upper_slope,&B_out,&dout_din);
|
||||
} else { /* Upper linear region */
|
||||
dout_din = (*(B+i+1) - *(B+i))/upper_seg;
|
||||
B_out = *(B+i) + (H_input - *(H+i)) * dout_din;
|
||||
dout_din = (B[i+1] - B[i])/upper_seg;
|
||||
B_out = B[i] + (H_input - H[i]) * dout_din;
|
||||
}
|
||||
}
|
||||
break; /* Break search loop...H_input has been found, */
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ MIFload(
|
|||
else if((ckt->CKTmode & MODEINITTRAN) ||
|
||||
(ckt->CKTmode & MODEINITPRED))
|
||||
/* first iteration step at timepoint */
|
||||
fast->input.rvalue = *(ckt->CKTstate1 + fast->old_input);
|
||||
fast->input.rvalue = ckt->CKTstate1[fast->old_input];
|
||||
else {
|
||||
/* subsequent iterations */
|
||||
|
||||
|
|
@ -369,7 +369,7 @@ MIFload(
|
|||
} /* end else */
|
||||
|
||||
/* Save value of input for use with MODEINITTRAN */
|
||||
*(ckt->CKTstate0 + fast->old_input) = fast->input.rvalue;
|
||||
ckt->CKTstate0[fast->old_input] = fast->input.rvalue;
|
||||
|
||||
} /* end else analog type */
|
||||
} /* end for number of ports */
|
||||
|
|
@ -599,27 +599,27 @@ MIFload(
|
|||
switch(cntl_src_type) {
|
||||
case MIF_VCVS:
|
||||
if(anal_type == MIF_AC) {
|
||||
*(smp_ptr->e.branch_poscntl) -= ac_gain.real;
|
||||
*(smp_ptr->e.branch_negcntl) += ac_gain.real;
|
||||
*(smp_ptr->e.branch_poscntl+1) -= ac_gain.imag;
|
||||
*(smp_ptr->e.branch_negcntl+1) += ac_gain.imag;
|
||||
smp_ptr->e.branch_poscntl[0] -= ac_gain.real;
|
||||
smp_ptr->e.branch_negcntl[0] += ac_gain.real;
|
||||
smp_ptr->e.branch_poscntl[1] -= ac_gain.imag;
|
||||
smp_ptr->e.branch_negcntl[1] += ac_gain.imag;
|
||||
}
|
||||
else {
|
||||
*(smp_ptr->e.branch_poscntl) -= partial;
|
||||
*(smp_ptr->e.branch_negcntl) += partial;
|
||||
smp_ptr->e.branch_poscntl[0] -= partial;
|
||||
smp_ptr->e.branch_negcntl[0] += partial;
|
||||
rhs[smp_data_out->branch] -= partial * cntl_input;
|
||||
}
|
||||
break;
|
||||
case MIF_ICIS:
|
||||
if(anal_type == MIF_AC) {
|
||||
*(smp_ptr->f.pos_ibranchcntl) += ac_gain.real;
|
||||
*(smp_ptr->f.neg_ibranchcntl) -= ac_gain.real;
|
||||
*(smp_ptr->f.pos_ibranchcntl+1) += ac_gain.imag;
|
||||
*(smp_ptr->f.neg_ibranchcntl+1) -= ac_gain.imag;
|
||||
smp_ptr->f.pos_ibranchcntl[0] += ac_gain.real;
|
||||
smp_ptr->f.neg_ibranchcntl[0] -= ac_gain.real;
|
||||
smp_ptr->f.pos_ibranchcntl[1] += ac_gain.imag;
|
||||
smp_ptr->f.neg_ibranchcntl[1] -= ac_gain.imag;
|
||||
}
|
||||
else {
|
||||
*(smp_ptr->f.pos_ibranchcntl) += partial;
|
||||
*(smp_ptr->f.neg_ibranchcntl) -= partial;
|
||||
smp_ptr->f.pos_ibranchcntl[0] += partial;
|
||||
smp_ptr->f.neg_ibranchcntl[0] -= partial;
|
||||
temp = partial * cntl_input;
|
||||
rhs[smp_data_out->pos_node] += temp;
|
||||
rhs[smp_data_out->neg_node] -= temp;
|
||||
|
|
@ -627,20 +627,20 @@ MIFload(
|
|||
break;
|
||||
case MIF_VCIS:
|
||||
if(anal_type == MIF_AC) {
|
||||
*(smp_ptr->g.pos_poscntl) += ac_gain.real;
|
||||
*(smp_ptr->g.pos_negcntl) -= ac_gain.real;
|
||||
*(smp_ptr->g.neg_poscntl) -= ac_gain.real;
|
||||
*(smp_ptr->g.neg_negcntl) += ac_gain.real;
|
||||
*(smp_ptr->g.pos_poscntl+1) += ac_gain.imag;
|
||||
*(smp_ptr->g.pos_negcntl+1) -= ac_gain.imag;
|
||||
*(smp_ptr->g.neg_poscntl+1) -= ac_gain.imag;
|
||||
*(smp_ptr->g.neg_negcntl+1) += ac_gain.imag;
|
||||
smp_ptr->g.pos_poscntl[0] += ac_gain.real;
|
||||
smp_ptr->g.pos_negcntl[0] -= ac_gain.real;
|
||||
smp_ptr->g.neg_poscntl[0] -= ac_gain.real;
|
||||
smp_ptr->g.neg_negcntl[0] += ac_gain.real;
|
||||
smp_ptr->g.pos_poscntl[1] += ac_gain.imag;
|
||||
smp_ptr->g.pos_negcntl[1] -= ac_gain.imag;
|
||||
smp_ptr->g.neg_poscntl[1] -= ac_gain.imag;
|
||||
smp_ptr->g.neg_negcntl[1] += ac_gain.imag;
|
||||
}
|
||||
else {
|
||||
*(smp_ptr->g.pos_poscntl) += partial;
|
||||
*(smp_ptr->g.pos_negcntl) -= partial;
|
||||
*(smp_ptr->g.neg_poscntl) -= partial;
|
||||
*(smp_ptr->g.neg_negcntl) += partial;
|
||||
smp_ptr->g.pos_poscntl[0] += partial;
|
||||
smp_ptr->g.pos_negcntl[0] -= partial;
|
||||
smp_ptr->g.neg_poscntl[0] -= partial;
|
||||
smp_ptr->g.neg_negcntl[0] += partial;
|
||||
temp = partial * cntl_input;
|
||||
rhs[smp_data_out->pos_node] += temp;
|
||||
rhs[smp_data_out->neg_node] -= temp;
|
||||
|
|
@ -648,11 +648,11 @@ MIFload(
|
|||
break;
|
||||
case MIF_ICVS:
|
||||
if(anal_type == MIF_AC) {
|
||||
*(smp_ptr->h.branch_ibranchcntl) -= ac_gain.real;
|
||||
*(smp_ptr->h.branch_ibranchcntl+1) -= ac_gain.imag;
|
||||
smp_ptr->h.branch_ibranchcntl[0] -= ac_gain.real;
|
||||
smp_ptr->h.branch_ibranchcntl[1] -= ac_gain.imag;
|
||||
}
|
||||
else {
|
||||
*(smp_ptr->h.branch_ibranchcntl) -= partial;
|
||||
smp_ptr->h.branch_ibranchcntl[0] -= partial;
|
||||
rhs[smp_data_out->branch] -= partial * cntl_input;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ static void MIFterr(
|
|||
/* Old code */
|
||||
/*
|
||||
volttol = ckt->CKTabstol + ckt->CKTreltol *
|
||||
MAX( fabs(*(ckt->CKTstate0+ccap)), fabs(*(ckt->CKTstate1+ccap)));
|
||||
MAX( fabs(ckt->CKTstate0[ccap]), fabs(ckt->CKTstate1[ccap]));
|
||||
*/
|
||||
|
||||
/* New code */
|
||||
|
|
|
|||
Loading…
Reference in New Issue