Function getmupbyET(ind,Ex,Ey,T,xp,yp)
跳至導覽
跳至搜尋
function getmupbyET(ind,Ex,Ey,T,xp,yp) is to return the program the hole's mobility according to electric field, temperature, x, y. If some more information is needed, such as carrier density, you can call the global variable.
The command to call this function is:
$useemufunc, $useemunfunc, $useemupfunc
function getmupbyET(ind,Ex,Ey,T,xp,yp)
use global2d
implicit none
integer*4 :: ind ! element's global index number
real*8 :: getmupbyET ! return value of mobility
integer*4 :: i,j,k,regionindex
real*8 :: Ex,Ey , T ,xp,yp, vsat, Esaturation ,Eslope ,mun_low, Esat
real*8 :: v , x
real*8 :: A, Asat, Amin, B, Bmax, Bstart,Bslope , nn(3),pp(3) , nave,pave,n0,p0 , orginalmun
do i=1,3
nn(i)= me%n( me%element(i,ind) ) ! carrier density is saved in node, not element
pp(i)= me%p( me%element(i,ind) ) ! mobility is for element. So we need to get the average value
end do
regionindex=me%parEL(ind) ! To obtained the region information for this node
nave=sum(nn)/3.0 ! average carrier density
pave=sum(pp)/3.0 ! average carrier density
if( xp < 1.0d-4 .and. yp < 1.0d-4) then
x=Ex
v= B+Bmax*exp((Bstart-Ex)/Bslope)
getmupbyET=v/Ex *(p0/pave)
else
getmupbyET=mun_low *(p0/pave)
end if
print*, " "
print*, "************************************************************************"
print*, " Error! This version does not support using external libemufunc.so module"
print*, " You might accidentally set $useemupfunc to activate using external module"
print*, " Please execute 2D-ddcc-dyna.exe instead."
Print*, " Program Stop! "
stop
end function getmupbyET