MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Numerical evaluation is Mathematica bottleneck?!

  • To: mathgroup at smc.vnet.net
  • Subject: [mg69069] Re: [mg69045] Re: Numerical evaluation is Mathematica bottleneck?!
  • From: gregorc <gregor.cernivec at fe.uni-lj.si>
  • Date: Tue, 29 Aug 2006 03:26:09 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hello,

The problem consists of three coupled nonlinear equations: the Poisson 
equation and the countiniuty equations for electrons and holes. The 
countiniuty equations consist of convection-diffusion type equations for 
electrons and hole current and the generation-recombination terms.

The Poisson equation for non-uniform mesh at node 2:

FV[2]=(2*(-((-V[[1]] + V[[2]])/h[[1]]) + (-V[[2]] + 
V[[3]])/h[[2]]))/(h[[1]] + h[[2]])-(q*(nt[2] + n[[2]] + NA[[2]] - 
ND[[2]] - p[[2]]-pt[2]))/eps[[2]]

The electron and hole currents between nodes 1-2 and 2-3 and the 
countinuity equations, respectively:

Jn[1]=(Dn[[1]]*(-(B[(V[1] - V[2])/UT[[1]]]*n[[1]]) + B[(-V[1] + 
V[2])/UT[[1]]]*n[[2]]))/h[[1]]
Jn[2]=(Dn[[2]]*(-(B[(V[2] - V[3])/UT[[2]]]*n[[2]]) + B[(-V[2] + 
V[3])/UT[[2]]]*n[[3]]))/h[[2]]
FJn[2]=-2/(h[[2]]+h[[1]])*(Jn[1]-Jn[2])-R+GL

Jh[1]=(Dp[[1]]*(B[(-V[1] + V[2])/UT[[1]]]*p[[1]] - B[(V[1] - 
V[2])/UT[[1]]]*p[[2]]))/h[[1]]
Jh[2]=(Dp[[2]]*(B[(-V[2] + V[3])/UT[[2]]]*p[[2]] - B[(V[2] - 
V[3])/UT[[2]]]*p[[3]]))/h[[2]]
FJh[2]=2/(h[[2]]+h[[1]])*(Jp[1]-Jp[2])-R+GL

,where V[[2]] is the calculation variable for the electrical potential 
at node 2, n[[2]] and p[[2]] are the calculation varibles for electron 
and hole concentrations, respectively. The rest is material data, built 
in and/or trapped charge, recombination-generation terms, which might be 
also set to zero (R,GL) and constants. B is the Bernoulli function, 
which has to be approximated with Taylor series to avoid singularity 
with argument 0 - zero field (V[[1]]=V[[2]]). h[[1]], h[[2]]... is the 
discretization step.

Functions:FJn[2], FV[2], FJh[2]
variables:X={n[[1]],V[[1]],p[[1]],n[[2]],V[[2]],p[[2]],n[[3]],V[[3]],p[[3]]}

The Jacobian:

JFV=Map[D[FV[2],#]&,X]
JFJn=Map[D[FJn[2],#]&,X]
JFJp=Map[D[FJp[2],#]&,X]

Functions and the coresponding Jacobians are compiled:

JFVnum=Compile[{{n,_Real,1},{V,_Real,1},{p,_Real,1},{consts},...},Evaluate[JFV]].

Numerical evaluation:

JFVvar=MapThread[JFVnum,{var`n,var`V,var`p,...consts, mat. data}]

,where var`n=Partition[n,3,1] and same for the V and p and the rest of 
the material data and constants.

The numerical function is Threaded over the overlapping triplets of 
calculation variables and data. When the numerical function and the 
coresponding jacobians are calculated, the sparse array is formed with 
the SparseArray function and the system is solved with the LinearSolve. 
The majority of the computational time takes the MapThread of the 
compiled function on the partitioned data and varibles. The functions 
and jacobians are compiled for sure, since I have checked it with 
compiled_function[[-3]], which returns all real numbers.

Regards,

gregor.

Jens-Peer Kuska wrote:

>Hi,
>
>the C/C++ version may be faster -- or not, it depend on
>your programming skills and the numerical methods you are
>using.
>But as long as you don't tell more about the problem and
>how you have solved it in Mathematica, there is not defined answer.
>
>Regards
>   Jens
>
>gregorc wrote:
>  
>
>>Dear mathgroup members,
>>
>>I am solving a non-linear semiconductor PDE problem with finite 
>>difference discretization. The Compiled algebraic equation and its 
>>Jacobian  take as input central point and two adjacent neighbors and 
>>they are Threaded over the whole mesh. A LinearSolve and some damping 
>>schemes are used to obtain next step towards the solution. Typical mesh 
>>is about 300 points and the solution is usually found in 7 iterations, 
>>which takes about 7 seconds of computational time.This is already too 
>>slow, but since I plan to solve the problem in 2D this is much too 
>>slow!!! The bottleneck is the numerical evaluation of the compiled 
>>equation and its Jacobian. I am thinking of using MathLink and write the 
>>numerical evaluation routine in C++, which would take a list of data and 
>>return evaluated function and the Jacobian.
>> 
>>Is this the right way? Could the link itself be a timing bottleneck? Any 
>>other suggestions?
>>
>>Regards,
>>
>>Gregor
>>
>>    
>>
>
>
>__________ NOD32 1.1727 (20060826) Information __________
>
>This message was checked by NOD32 antivirus system.
>http://www.eset.com
>
>
>
>  
>


  • Prev by Date: RE: Re: General--Difficulties in Understanding Mathematica Syntax
  • Next by Date: Re: General--Exponential simplifications by default
  • Previous by thread: Re: Numerical evaluation is Mathematica bottleneck?!
  • Next by thread: Re: Re: Numerical evaluation is Mathematica bottleneck?!