@@ -154,10 +154,16 @@ contains
154154 integer, parameter :: wp = ${k1}$
155155 type(tridiagonal_${s1}$_type) :: A
156156 ${t1}$, allocatable :: Amat(:,:)
157- ! Maintainer suggested using parameter for constant values
158- ${t1}$, parameter :: dl(0) = [${t1}$ ::]
159- ${t1}$, parameter :: du(0) = [${t1}$ ::]
157+
158+ #:if t1.startswith('complex')
159+ ${t1}$, parameter :: dl(0) = [(cmplx(0.0_wp, 0.0_wp, kind=wp), i=1,0)]
160+ ${t1}$, parameter :: du(0) = [(cmplx(0.0_wp, 0.0_wp, kind=wp), i=1,0)]
161+ ${t1}$, parameter :: dv(1) = [cmplx(5.0_wp, 0.0_wp, kind=wp)]
162+ #:else
163+ ${t1}$, parameter :: dl(0) = [(0.0_wp, i=1,0)]
164+ ${t1}$, parameter :: du(0) = [(0.0_wp, i=1,0)]
160165 ${t1}$, parameter :: dv(1) = [5.0_wp]
166+ #:endif
161167
162168 A = tridiagonal(dl, dv, du)
163169 Amat = dense(A)
@@ -182,14 +188,24 @@ contains
182188 integer, parameter :: n = 3
183189 type(tridiagonal_${s1}$_type) :: A, B, C
184190
185- ! Define components as parameters as suggested by maintainer
186- ${t1}$, parameter :: dl1(n-1) = [1.0_wp, 1.0_wp]
187- ${t1}$, parameter :: dv1(n) = [2.0_wp, 2.0_wp, 2.0_wp]
188- ${t1}$, parameter :: du1(n-1) = [3.0_wp, 3.0_wp]
191+ ! Explicitly separate real vs complex to satisfy strict compile-time type checks
192+ #:if t1.startswith('complex')
193+ ${t1}$, parameter :: dl1(n-1) = [(cmplx(1.0_wp, 0.0_wp, kind=wp), i=1,n-1)]
194+ ${t1}$, parameter :: dv1(n) = [(cmplx(2.0_wp, 0.0_wp, kind=wp), i=1,n)]
195+ ${t1}$, parameter :: du1(n-1) = [(cmplx(3.0_wp, 0.0_wp, kind=wp), i=1,n-1)]
196+
197+ ${t1}$, parameter :: dl2(n-1) = [(cmplx(4.0_wp, 0.0_wp, kind=wp), i=1,n-1)]
198+ ${t1}$, parameter :: dv2(n) = [(cmplx(5.0_wp, 0.0_wp, kind=wp), i=1,n)]
199+ ${t1}$, parameter :: du2(n-1) = [(cmplx(6.0_wp, 0.0_wp, kind=wp), i=1,n-1)]
200+ #:else
201+ ${t1}$, parameter :: dl1(n-1) = [(1.0_wp, i=1,n-1)]
202+ ${t1}$, parameter :: dv1(n) = [(2.0_wp, i=1,n)]
203+ ${t1}$, parameter :: du1(n-1) = [(3.0_wp, i=1,n-1)]
189204
190- ${t1}$, parameter :: dl2(n-1) = [4.0_wp, 4.0_wp]
191- ${t1}$, parameter :: dv2(n) = [5.0_wp, 5.0_wp, 5.0_wp]
192- ${t1}$, parameter :: du2(n-1) = [6.0_wp, 6.0_wp]
205+ ${t1}$, parameter :: dl2(n-1) = [(4.0_wp, i=1,n-1)]
206+ ${t1}$, parameter :: dv2(n) = [(5.0_wp, i=1,n)]
207+ ${t1}$, parameter :: du2(n-1) = [(6.0_wp, i=1,n-1)]
208+ #:endif
193209
194210 A = tridiagonal(dl1, dv1, du1)
195211 B = tridiagonal(dl2, dv2, du2)
0 commit comments