📄 twomobdv.c
字号:
coeffVy = 0.25 * dx * rDy; switch ( chanType ) { case 0: case 3: coeffHs = 0.25 * dy / ds; coeffVs = 0.25 * dx / ds; break; case 1: case 2: coeffHs = - 0.25 * dy / ds; coeffVs = - 0.25 * dx / ds; break; } /* Get pointers to element's edges */ pTEdge = pElem->pTopEdge; pBEdge = pElem->pBotEdge; pLEdge = pElem->pLeftEdge; pREdge = pElem->pRightEdge; /* Get element mobility derivatives for fast access later */ dMpDEs = pElem->dMupDEs; dMpDEx = pElem->dMupDEx; dMpDEy = pElem->dMupDEy; dMpDWx = pElem->dMupDWx; dMpDWy = pElem->dMupDWy; /* Add mobility derivatives due to Top Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffHx * (pTEdge->wdfp * rDx); dFpyDMup = coeffHy * (pTEdge->wdfp * rDx); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffHs * (pTEdge->wdfp * rDx) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Bottom Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffHx * (pBEdge->wdfp * rDx); dFpyDMup = coeffHy * (pBEdge->wdfp * rDx); /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if (channel ) { dFpDEs = coeffHs * (pBEdge->wdfp * rDx) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } /* Add mobility derivatives due to Left Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffVx * (pLEdge->wdfp * rDy); dFpyDMup = coeffVy * (pLEdge->wdfp * rDy); /* Do Top-Left (TL) Node of Element */ pNode = pElem->pTLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsi) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffVs * (pLEdge->wdfp * rDy) * dMpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiInP1) -= dFpDEs; *(pNode->fPPsiOx) += dFpDEs; *(pNode->fPPsiOxP1) += dFpDEs; } /* Do Bottom-Left (BL) Node of Element */ pNode = pElem->pBLNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsijM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsiiP1jM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiP1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPiP1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPiP1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiInP1) += dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; *(pNode->fPPsiOxP1) -= dFpDEs; } /* Add mobility derivatives due to Right Edge */ /* First compute derivatives of cont. eqn's */ dFpxDMup = coeffVx * (pREdge->wdfp * rDy); dFpyDMup = coeffVy * (pREdge->wdfp * rDy); /* Do Top-Right (TR) Node of Element */ pNode = pElem->pTRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1) += dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsi) += - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsijP1) += - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1jP1) += dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1) += dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPP) += dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPPjP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1jP1) += dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { dFpDEs = coeffVs * (pREdge->wdfp * rDy) * dMpDEs; *(pNode->fPPsiInM1) -= dFpDEs; *(pNode->fPPsiIn) -= dFpDEs; *(pNode->fPPsiOxM1) += dFpDEs; *(pNode->fPPsiOx) += dFpDEs; } /* Do Bottom-Right (BR) Node of Element */ pNode = pElem->pBRNode; /* p continuity wrto potential derivatives */ *(pNode->fPPsiiM1jM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); *(pNode->fPPsijM1) -= - dFpxDMup * ( dMpDEx - dMpDWx * pTEdge->dWpDpsiP1 ) + dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsi) -= - dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pREdge->dWpDpsiP1 ); *(pNode->fPPsiiM1) -= dFpxDMup * ( dMpDEx - dMpDWx * pBEdge->dWpDpsiP1 ) - dFpyDMup * ( dMpDEy - dMpDWy * pLEdge->dWpDpsiP1 ); /* p continuity wrto p derivatives */ *(pNode->fPPiM1jM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDp ); *(pNode->fPPjM1) -= dFpxDMup * ( dMpDWx * pTEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDp ); *(pNode->fPP) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDpP1 ) + dFpyDMup * ( dMpDWy * pREdge->dWpDpP1 ); *(pNode->fPPiM1) -= dFpxDMup * ( dMpDWx * pBEdge->dWpDp ) + dFpyDMup * ( dMpDWy * pLEdge->dWpDpP1 ); /* both continuity wrto surface potential derivatives */ if ( channel ) { *(pNode->fPPsiInM1) += dFpDEs; *(pNode->fPPsiIn) += dFpDEs; *(pNode->fPPsiOxM1) -= dFpDEs; *(pNode->fPPsiOx) -= dFpDEs; } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -