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 > > > > >