#set the parameters
array set $Base {Permittivity {Double 11.7}}

#from Martin Green's JAP paper
proc GreenBandGap {temp} {return [format {1.2060 - 2.73e-4 * %s - 1.4e-8 * %s * %s} $temp $temp $temp]}

proc SiliconNc {} {
    set h 6.62617e-34
    set m0 0.91095e-30

    set mdt [format {0.1905 * %s * ([GreenBandGap 0.0]) / ([GreenBandGap {(Temp+273.0)}])} $m0]
    set mdl [format {0.9163 * %s} $m0]
    set md [format {(exp( log( 36.0 * %s * %s * %s ) / 3.0 ))} $mdt $mdt $mdl]
    set val [format {(2 * 3.141592654 * %s  * 1.38066e-23 * (Temp+273.0) / (%s * %s))} $md $h $h]
    return [format {%s * sqrt(%s) * 2.0e-6} $val $val]
}

array set $Base {Nc {Double {[SiliconNc]}}}

proc SiliconNv {} {
    set h 6.62617e-34
    set m0 0.91095e-30
    set t1 [format {(0.4435870+(Temp+273.0)*(0.3609528e-2+(Temp+273.0)*(0.1173515e-3+(Temp+273.0)*(0.1263218e-5+(Temp+273.0)*0.3025581e-8))))} ]
    set t2 [format {(1.+(Temp+273.0)*(0.4683382e-2+(Temp+273.0)*(0.2286895e-3+(Temp+273.0)*(0.7469271e-6+(Temp+273.0)*0.1727481e-8))))} ]
    set md [format {(exp( log(%s/%s) * 2./3.) * %s) } $t1 $t2 $m0]
    set val [format {2 * 3.141592654 * %s * 1.38066e-23 * (Temp+273.0) / (%s * %s)} $md $h $h]
    return [format {%s * sqrt(%s) * 2.0e-6} $val $val]
}

array set $Base {Nv {Double {[SiliconNv]}}}

array set $Base {ni {Double {sqrt(([pdbGetDouble Si Potential Nc])*([pdbGetDouble Si Potential Nv])) * exp( -0.5 * ([GreenBandGap {(Temp+273.0)}]) / (8.61e-5 * (Temp+273.0))) }}}

return {Permittivity Nc Nv BandGap ni}

