17 #include "../base/base_uses.f90"
21 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'structure_factors'
35 TYPE(structure_factor_type),
INTENT(INOUT) :: exp_igr
37 NULLIFY (exp_igr%ex, exp_igr%ey, exp_igr%ez)
38 NULLIFY (exp_igr%shell_ex, exp_igr%shell_ey, exp_igr%shell_ez)
39 NULLIFY (exp_igr%core_ex, exp_igr%core_ey, exp_igr%core_ez)
40 NULLIFY (exp_igr%centre, exp_igr%shell_centre, exp_igr%core_centre)
41 NULLIFY (exp_igr%delta, exp_igr%shell_delta, exp_igr%core_delta)
51 TYPE(structure_factor_type),
INTENT(INOUT) :: exp_igr
53 DEALLOCATE (exp_igr%ex)
54 DEALLOCATE (exp_igr%ey)
55 DEALLOCATE (exp_igr%ez)
56 IF (
ASSOCIATED(exp_igr%shell_ex))
THEN
57 DEALLOCATE (exp_igr%shell_ex)
58 DEALLOCATE (exp_igr%shell_ey)
59 DEALLOCATE (exp_igr%shell_ez)
61 IF (
ASSOCIATED(exp_igr%core_ex))
THEN
62 DEALLOCATE (exp_igr%core_ex)
63 DEALLOCATE (exp_igr%core_ey)
64 DEALLOCATE (exp_igr%core_ez)
66 IF (
ASSOCIATED(exp_igr%centre))
THEN
67 DEALLOCATE (exp_igr%centre, exp_igr%delta)
69 IF (
ASSOCIATED(exp_igr%shell_centre))
THEN
70 DEALLOCATE (exp_igr%shell_centre, exp_igr%shell_delta)
72 IF (
ASSOCIATED(exp_igr%core_centre))
THEN
73 DEALLOCATE (exp_igr%core_centre, exp_igr%core_delta)
89 allocate_centre, allocate_shell_e, &
90 allocate_shell_centre, nshell)
92 INTEGER,
DIMENSION(:, :),
INTENT(IN) :: bds
93 INTEGER,
INTENT(IN) :: nparts
94 TYPE(structure_factor_type),
INTENT(OUT) :: exp_igr
95 LOGICAL,
INTENT(IN),
OPTIONAL :: allocate_centre, allocate_shell_e, &
97 INTEGER,
INTENT(IN),
OPTIONAL :: nshell
99 ALLOCATE (exp_igr%ex(bds(1, 1):bds(2, 1) + 1, nparts))
100 ALLOCATE (exp_igr%ey(bds(1, 2):bds(2, 2) + 1, nparts))
101 ALLOCATE (exp_igr%ez(bds(1, 3):bds(2, 3) + 1, nparts))
102 NULLIFY (exp_igr%centre, exp_igr%delta)
104 exp_igr%lb(1) = lbound(exp_igr%ex, 1)
105 exp_igr%lb(2) = lbound(exp_igr%ey, 1)
106 exp_igr%lb(3) = lbound(exp_igr%ez, 1)
108 IF (
PRESENT(allocate_centre))
THEN
109 IF (allocate_centre)
THEN
110 ALLOCATE (exp_igr%centre(3, nparts), exp_igr%delta(3, nparts))
114 IF (
PRESENT(allocate_shell_e))
THEN
115 IF (allocate_shell_e)
THEN
116 ALLOCATE (exp_igr%shell_ex(bds(1, 1):bds(2, 1) + 1, nshell))
117 ALLOCATE (exp_igr%shell_ey(bds(1, 2):bds(2, 2) + 1, nshell))
118 ALLOCATE (exp_igr%shell_ez(bds(1, 3):bds(2, 3) + 1, nshell))
119 NULLIFY (exp_igr%shell_centre, exp_igr%shell_delta)
121 ALLOCATE (exp_igr%core_ex(bds(1, 1):bds(2, 1) + 1, nshell))
122 ALLOCATE (exp_igr%core_ey(bds(1, 2):bds(2, 2) + 1, nshell))
123 ALLOCATE (exp_igr%core_ez(bds(1, 3):bds(2, 3) + 1, nshell))
124 NULLIFY (exp_igr%core_centre, exp_igr%core_delta)
126 IF (
PRESENT(allocate_shell_centre))
THEN
127 IF (allocate_shell_centre)
THEN
128 ALLOCATE (exp_igr%shell_centre(3, nshell), exp_igr%shell_delta(3, nshell))
129 ALLOCATE (exp_igr%core_centre(3, nshell), exp_igr%core_delta(3, nshell))
134 NULLIFY (exp_igr%shell_ex, exp_igr%shell_ey, exp_igr%shell_ez)
135 NULLIFY (exp_igr%core_ex, exp_igr%core_ey, exp_igr%core_ez)
136 NULLIFY (exp_igr%shell_centre, exp_igr%core_centre)
137 NULLIFY (exp_igr%shell_delta, exp_igr%core_delta)
152 REAL(kind=
dp),
DIMENSION(:),
INTENT(in) :: delta
153 INTEGER,
DIMENSION(3),
INTENT(IN) :: lb
154 COMPLEX(KIND=dp),
DIMENSION(lb(1):),
INTENT(out) :: ex
155 COMPLEX(KIND=dp),
DIMENSION(lb(2):),
INTENT(out) :: ey
156 COMPLEX(KIND=dp),
DIMENSION(lb(3):),
INTENT(out) :: ez
158 COMPLEX(KIND=dp) :: fm, fp
159 INTEGER :: j, l0, l1, m0, m1, n0, n1
160 REAL(kind=
dp) :: vec(3)
170 vec(:) =
twopi*(delta(:) + 0.5_dp)
179 fp = cmplx(cos(vec(1)), -sin(vec(1)), kind=
dp)
182 ex(j + l0) = ex(j + l0 - 1)*fp
183 ex(-j + l1) = ex(-j + l1 + 1)*fm
186 fp = cmplx(cos(vec(2)), -sin(vec(2)), kind=
dp)
189 ey(j + m0) = ey(j + m0 - 1)*fp
190 ey(-j + m1) = ey(-j + m1 + 1)*fm
193 fp = cmplx(cos(vec(3)), -sin(vec(3)), kind=
dp)
196 ez(j + n0) = ez(j + n0 - 1)*fp
197 ez(-j + n1) = ez(-j + n1 + 1)*fm
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public twopi
subroutine, public structure_factor_deallocate(exp_igr)
...
subroutine, public structure_factor_allocate(bds, nparts, exp_igr, allocate_centre, allocate_shell_e, allocate_shell_centre, nshell)
...
subroutine, public structure_factor_evaluate(delta, lb, ex, ey, ez)
...
subroutine, public structure_factor_init(exp_igr)
...