correct scaling for FWHM
FWHM was wrong by a factor of approx 2. Analytic expression can be found in https://en.wikipedia.org/wiki/Gaussian_function
This commit is contained in:
parent
9173d12d14
commit
5c908e44ec
12
src/math.f90
12
src/math.f90
|
@ -1773,7 +1773,7 @@ function math_sampleGaussOri(center,FWHM)
|
||||||
implicit none
|
implicit none
|
||||||
real(pReal), intent(in) :: FWHM
|
real(pReal), intent(in) :: FWHM
|
||||||
real(pReal), dimension(3), intent(in) :: center
|
real(pReal), dimension(3), intent(in) :: center
|
||||||
real(pReal) :: scatter, omega
|
real(pReal) :: omega
|
||||||
real(pReal), dimension(3) :: math_sampleGaussOri, axis
|
real(pReal), dimension(3) :: math_sampleGaussOri, axis
|
||||||
real(pReal), dimension(2) :: rnd
|
real(pReal), dimension(2) :: rnd
|
||||||
real(pReal), dimension(3,3) :: R
|
real(pReal), dimension(3,3) :: R
|
||||||
|
@ -1781,10 +1781,6 @@ function math_sampleGaussOri(center,FWHM)
|
||||||
noScatter: if (FWHM < 0.5_pReal*INRAD) then
|
noScatter: if (FWHM < 0.5_pReal*INRAD) then
|
||||||
math_sampleGaussOri = center
|
math_sampleGaussOri = center
|
||||||
else noScatter
|
else noScatter
|
||||||
! Helming uses different distribution with Bessel functions
|
|
||||||
! therefore the gauss scatter width has to be scaled differentlyuu
|
|
||||||
scatter = 0.95_pReal * FWHM
|
|
||||||
|
|
||||||
GaussConvolution: do
|
GaussConvolution: do
|
||||||
selectiveSampling: if (FWHM*INRAD < 90.0_pReal) then
|
selectiveSampling: if (FWHM*INRAD < 90.0_pReal) then
|
||||||
rnd = halton(2_pInt)
|
rnd = halton(2_pInt)
|
||||||
|
@ -1800,9 +1796,9 @@ function math_sampleGaussOri(center,FWHM)
|
||||||
else selectiveSampling
|
else selectiveSampling
|
||||||
R = math_EulerToR(math_sampleRandomOri())
|
R = math_EulerToR(math_sampleRandomOri())
|
||||||
endif selectiveSampling
|
endif selectiveSampling
|
||||||
exit
|
call random_number(rnd) ! no halton to avoid correlation
|
||||||
!if (rnd(3) <= exp(-(math_EulerMisorientation([0.0_pReal,0.0_pReal,0.0_pReal],&
|
omega = math_EulerMisorientation([0.0_pReal,0.0_pReal,0.0_pReal],math_RtoEuler(R))
|
||||||
! math_RtoEuler(R))/scatter)**2_pReal)) exit
|
if (rnd(1) <= exp(-4.0_pReal*log(2.0_pReal)*(omega/FWHM)**2_pReal)) exit
|
||||||
enddo GaussConvolution
|
enddo GaussConvolution
|
||||||
|
|
||||||
math_sampleGaussOri = math_RtoEuler(math_mul33x33(R,math_EulerToR(center)))
|
math_sampleGaussOri = math_RtoEuler(math_mul33x33(R,math_EulerToR(center)))
|
||||||
|
|
Loading…
Reference in New Issue