Hi Daniel,

I tried to work with the debugger in order to trace the error, unfortunately 
with no success.
You can find below, the original script and the Traceback. 
Short glance at the division terms show that order of math operators
is rational and seems o.k.

Can you please advice me on how to debug this problem?
Many thanks,
Omer



#!/usr/bin/env python

    
# define a 1D mesh
# total length 3um
dx = 5e-8
nx = 6000

# define mesh
from fipy.meshes.grid1D import Grid1D
mesh = Grid1D(dx=dx, nx=nx)

# declare the problem variable (potential across the device)
from fipy.variables.cellVariable import CellVariable
psy = CellVariable(name="psy", mesh=mesh, hasOld=1)

from fipy.tools.numerix import exp
Kb = 1.38e-23
T = 300
q = 1.6e-19
B = q/(Kb*T)
ni = 1.5e10
Na = 5e15
np0 = (ni**2)/Na
eps_0 = 8.854e-14
eps_si = 11.8*eps_0
Vref=0.2
Ho=6.02e17
eps_aqa=81*eps_0
dbulk=1e-4
dh=1.001e-4

# calculate the charge density in the semiconductor
x = mesh.getCellCenters()[...,0]
s1_semi =( -((q*B)/(eps_si))*(Na*exp(-B*psy)+np0*exp(B*psy))) * (x <= dbulk)
s0_semi= ((q/eps_si)*(Na*(exp(-B*psy)-1)-np0*(exp(B*psy)-1))-s1_semi*psy) * (x 
<= dbulk)
from fipy.terms.implicitSourceTerm import ImplicitSourceTerm
implicitSource_semi = ImplicitSourceTerm(coeff = s1_semi)


# calculate the charge density in the diffuse layer
psyD=psy-Vref
s1_electrolyte=-(((q*Ho*B)/(eps_aqa))*(exp(-B*psyD)+exp(B*psyD))) * (x >= dh)
s0_electrolyte=(((q*Ho)/(eps_aqa))*(exp(-B*psyD)-exp(B*psyD))-s1_electrolyte*psyD)
 * (x >= dh)
from fipy.terms.implicitSourceTerm import ImplicitSourceTerm
implicitSource_electrolyte = ImplicitSourceTerm(coeff = s1_electrolyte)


# boundary condition
from fipy.boundaryConditions.fixedValue import FixedValue
from fipy.boundaryConditions.fixedFlux import FixedFlux
bcs = (FixedValue(faces=mesh.getFacesRight(), value=Vref),
       FixedFlux(faces=mesh.getFacesLeft(), value=0))

from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm
diffCoeff = 1.
diffTerm = ImplicitDiffusionTerm(coeff=diffCoeff)

# poisson equation
samfet_eq = diffTerm + s0_semi + implicitSource_semi + s0_electrolyte + 
implicitSource_electrolyte == 0

# solve the equation
res = 1e+10
while res > 1e-6:
        res = samfet_eq.sweep(var=psy,boundaryConditions=bcs)

if __name__ == '__main__':
   from fipy.viewers import make
   viewer = make(vars=(psy))
   viewer.plot()

from fipy.viewers.tsvViewer import TSVViewer
TSVViewer(vars=(psy)).plot(filename=".\out\samfet.tsv")   



cg not converged
Traceback (most recent call last):
  File "C:\Documents and Settings\oo\My 
Documents\omer\Thesis\Fipy\work\samfet.py", line 65, in ?
    res = samfet_eq.sweep(var=psy,boundaryConditions=bcs)
  File "C:\Python23\Lib\site-packages\fipy\terms\term.py", line 149, in sweep
    matrix, RHSvector = self.__buildMatrix(var, boundaryConditions, dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\term.py", line 95, in 
__buildMatrix
    return self._buildMatrix(var, boundaryConditions, dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\binaryTerm.py", line 64, in 
_buildMatrix
    matrix, RHSvector = self.term1._buildMatrix(var, boundaryConditions, dt = 
dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\binaryTerm.py", line 64, in 
_buildMatrix
    matrix, RHSvector = self.term1._buildMatrix(var, boundaryConditions, dt = 
dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\binaryTerm.py", line 64, in 
_buildMatrix
    matrix, RHSvector = self.term1._buildMatrix(var, boundaryConditions, dt = 
dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\binaryTerm.py", line 66, in 
_buildMatrix
    termMatrix, termRHSvector = self.term2._buildMatrix(var, 
boundaryConditions, dt = dt)
  File "C:\Python23\Lib\site-packages\fipy\terms\cellTerm.py", line 121, in 
_buildMatrix
    inline._optionalInline(self._buildMatrixIn, self._buildMatrixPy, L, 
var.getOld(), b, dt, coeffVectors)
  File "C:\Python23\Lib\site-packages\fipy\tools\inline\inline.py", line 10, in 
_optionalInline
    return pythonFn(*args)
  File "C:\Python23\Lib\site-packages\fipy\terms\cellTerm.py", line 89, in 
_buildMatrixPy
    b += Numeric.ones([N]) * Numeric.array(coeffVectors['b vector'])
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 162, in 
__array__
    return Numeric.array(self.getValue(), t)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1702, 
in _calcValue
    val1 = self.var[1].getValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1702, 
in _calcValue
    val1 = self.var[1].getValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1708, 
in _calcValue
    return self.op(self.var[0].getValue(), val1)
  File "C:\Python23\Lib\site-packages\fipy\variables\cellVariable.py", line 
108, in getValue
    return Variable.getValue(self)
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 342, in 
getValue
    value = self._calcValue()
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 745, in 
_calcValue
    return self.op(self.var[0].getValue())
  File "C:\Python23\Lib\site-packages\fipy\variables\variable.py", line 1951, 
in <lambda>
    return self._getUnaryOperatorVariable(lambda a: numerix.exp(a))
  File "C:\Python23\Lib\site-packages\fipy\tools\numerix.py", line 767, in exp
    return NUMERIC.exp(arr)
ValueError: math domain error



   

Reply via email to