Function solargeneration(x1,x2,eg)
跳至導覽
跳至搜尋
Function solargeneration(x1,x2,eg) is a command to generate the electron-hole generation. The program will give the program
to x1 and x2 section as well as the bandgap Eg. Then the user needs to return the generation value.
For example:
function solargeneration(x1,x2,eg)
use global
implicit none
real*8 ,external :: alpha ! call external function to obtained absorption coefficient alpha
real*8 :: x1,x2,eg ! x_min, x_max, bandgap
real*8 :: solargeneration ! returned value
real*8 :: i1,i2,i3
real*8 :: a,b,e
integer k,l,m,i,j,stat
stat=0
solargeneration=0.0d0
if(x1 < 0 .or. x2 <0) then
Print*, "Error, the location of x1 and x2 coordinate in calling solargeneration is smaller than 0"
print*, "Set the generation rate to be zero"
solargeneration=0.0d0
return
end if
do i=1,solarfilesize
e=1240.0d0/photonnum(i,1) ! get the wave number from length to eV
if(e>eg) then
i1=photonnum(i,5)*exp(-alpha(e,eg)*abs(x2-x1))
!i2=photonnum(i,5)*exp(-alpha(e,eg)*x2)
i3=photonnum(i,5)-i1
photonnum(i,5)=i1
if(i3>0.0) solargeneration=solargeneration+i3
end if
end do
solargeneration=solargeneration*1.0d-4/abs(x2-x1)
!print*, x1,x2,solargeneration
return
end
function alpha(e,eg)
use global , only : materialalpha, ifuseabsorptiontable, absorptiontablesize, absorbtable,maxlayers , nl , dz , gen
implicit none
real*8 :: a,e,eg
real*8 :: alpha
integer :: i,j
if(e> eg )then
alpha=materialalpha*((e-eg)/eg)**0.5
else
alpha=0.0d0
end if
return
end