@@ -6,8 +6,8 @@ SemiCircle(dlr, grid, type) = Sample.SemiCircle(dlr, type, grid, degree=24, regu
6
6
# using DoubleFloats
7
7
# rtol(x, y) = maximum(abs.(x - y)) / maximum(abs.(x))
8
8
9
- function L2normτ (value_dlr, dlr, case, poles= nothing , weight = nothing )
10
- function fine_τGrid (Λ:: Float ,degree,ratio:: Float ) where {Float}
9
+ function L2normτ (value_dlr, dlr, case, poles= nothing , weight= nothing )
10
+ function fine_τGrid (Λ:: Float , degree, ratio:: Float ) where {Float}
11
11
# ############# use composite grid #############################################
12
12
# Generating a log densed composite grid with LogDensedGrid()
13
13
npo = Int (ceil (log (Λ) / log (ratio))) - 2 # subintervals on [0,1/2] in tau space (# subintervals on [0,1] is 2*npt)
@@ -16,7 +16,7 @@ function L2normτ(value_dlr, dlr, case, poles=nothing, weight = nothing)
16
16
[0.0 , 1.0 ],# The grid is defined on [0.0, β]
17
17
[0.0 , 1.0 ],# and is densed at 0.0 and β, as given by 2nd and 3rd parameter.
18
18
npo,# N of log grid
19
- 0.5 / ratio^ (npo- 1 ), # minimum interval length of log grid
19
+ 0.5 / ratio^ (npo - 1 ), # minimum interval length of log grid
20
20
degree, # N of bottom layer
21
21
Float
22
22
)
@@ -25,7 +25,7 @@ function L2normτ(value_dlr, dlr, case, poles=nothing, weight = nothing)
25
25
# println("Composite expoential grid size: $(length(grid))")
26
26
# println("fine grid size: $(length(grid)) within [$(grid[1]), $(grid[end])]")
27
27
return grid
28
-
28
+
29
29
# ############ DLR based fine grid ##########################################
30
30
# dlr = DLRGrid(Euv=Float64(Λ), beta=1.0, rtol=Float64(rtol) / 100, isFermi=true, symmetry=:ph, rebuild=true)
31
31
# # println("fine basis number: $(dlr.size)\n", dlr.ω)
@@ -36,22 +36,22 @@ function L2normτ(value_dlr, dlr, case, poles=nothing, weight = nothing)
36
36
# uniform = [panel[i] + (panel[i+1] - panel[i]) / degree * j for j in 0:degree-1]
37
37
# append!(grid, uniform)
38
38
# end
39
-
39
+
40
40
# println("fine grid size: $(length(grid)) within [$(grid[1]), $(grid[2])]")
41
41
# return grid
42
42
end
43
43
fineGrid = fine_τGrid (dlr. Euv, 12 , typeof (dlr. Euv)(1.5 ))
44
- value = real (tau2tau (dlr, value_dlr, fineGrid, dlr. τ ))
44
+ value = real (tau2tau (dlr, value_dlr, fineGrid, dlr. τ))
45
45
if case == MultiPole
46
46
value_analy = case (dlr, fineGrid, :τ , poles, weight)
47
47
else
48
48
value_analy = case (dlr, fineGrid, :τ )
49
49
end
50
50
# print("value_analy $(value_analy[1:10])\n" )
51
- interp = Interp. integrate1D ( value , fineGrid)
52
- interp_analy = Interp. integrate1D ( value_analy , fineGrid)
51
+ interp = Interp. integrate1D (value, fineGrid)
52
+ interp_analy = Interp. integrate1D (value_analy, fineGrid)
53
53
# print("$(interp_analy) $(interp_analy)\n")
54
- return abs (interp_analy), abs (interp- interp_analy), maximum (abs .(value - value_analy))/ maximum (abs .(value_analy))
54
+ return abs (interp_analy), abs (interp - interp_analy), maximum (abs .(value - value_analy)) / maximum (abs .(value_analy))
55
55
end
56
56
# function MultiPole(dlr, grid, type)
57
57
# Euv = dlr.Euv
60
60
# return Sample.MultiPole(dlr, type, poles, grid; regularized=true)
61
61
# end
62
62
63
- function MultiPole (dlr, grid, type, coeff, weight = nothing )
63
+ function MultiPole (dlr, grid, type, coeff, weight= nothing )
64
64
Euv = dlr. Euv
65
65
poles = coeff * Euv
66
66
# return Sample.MultiPole(dlr.β, dlr.isFermi, grid, type, poles, dlr.symmetry; regularized = true)
@@ -71,32 +71,32 @@ function MultiPole(dlr, grid, type, coeff, weight = nothing)
71
71
end
72
72
end
73
73
74
- function test_dlr_coeff (case, isFermi, symmetry, Euv, β, eps, eff_poles, weight; dtype= Float64, output = false )
74
+ function test_dlr_coeff (case, isFermi, symmetry, Euv, β, eps, eff_poles, weight; dtype= Float64, output= false )
75
75
para = " fermi=$isFermi , sym=$symmetry , Euv=$Euv , β=$β , rtol=$eps "
76
76
dlr = DLRGrid (Euv, β, eps, isFermi, symmetry, dtype= dtype) # construct dlr basis
77
77
# dlr10 = DLRGrid(10Euv, β, eps, isFermi, symmetry) #construct denser dlr basis for benchmark purpose
78
78
dlr10 = DLRGrid (Euv, β, eps, isFermi, symmetry, dtype= dtype) # construct denser dlr basis for benchmark purpose
79
-
79
+
80
80
N_poles = 1000
81
81
N = 1000
82
-
82
+
83
83
Gndlr = case (dlr, dlr. n, :n , eff_poles, weight)
84
84
τSample = dlr10. τ
85
85
Gsample = case (dlr, τSample, :τ , eff_poles, weight)
86
86
87
87
Gfourier = matfreq2tau (dlr, Gndlr, τSample)
88
- dlreff = matfreq2dlr (dlr,Gndlr)
88
+ dlreff = matfreq2dlr (dlr, Gndlr)
89
89
dlreff = imag (dlreff)
90
90
print (" $(symmetry) $(Euv) $(eps) max $(maximum (abs .(dlreff) )) min $(minimum (abs .(dlreff ))) \n " )
91
91
end
92
- function test_err (case, isFermi, symmetry, Euv, β, eps, poles, weights; dtype= Float64, output = false )
92
+ function test_err (case, isFermi, symmetry, Euv, β, eps, poles, weights; dtype= Float64, output= false )
93
93
# println("Test $case with isFermi=$isFermi, Symmetry = $symmetry, Euv=$Euv, β=$β, rtol=$eps")
94
94
# N_poles = 100
95
95
para = " fermi=$isFermi , sym=$symmetry , Euv=$Euv , β=$β , rtol=$eps "
96
96
dlr = DLRGrid (Euv, β, eps, isFermi, symmetry, dtype= dtype) # construct dlr basis
97
97
# dlr10 = DLRGrid(10Euv, β, eps, isFermi, symmetry) #construct denser dlr basis for benchmark purpose
98
98
dlr10 = DLRGrid (Euv, β, eps, isFermi, symmetry, dtype= dtype) # construct denser dlr basis for benchmark purpose
99
-
99
+
100
100
N_poles = size (poles)[2 ]
101
101
N = size (poles)[1 ]
102
102
value_sum = 0.0
@@ -106,63 +106,64 @@ function test_err(case, isFermi, symmetry, Euv, β, eps, poles, weights; dtype=F
106
106
block = zeros (dtype, 10 )
107
107
if case == MultiPole
108
108
for i in 1 : N
109
- eff_poles = poles[i,:]
110
- weight = weights[i,:]
109
+ eff_poles = poles[i, :]
110
+ weight = weights[i, :]
111
111
Gndlr = case (dlr, dlr. n, :n , eff_poles, weight)
112
112
τSample = dlr10. τ
113
113
Gsample = case (dlr, τSample, :τ , eff_poles, weight)
114
114
115
115
Gfourier = matfreq2tau (dlr, Gndlr, τSample)
116
- dlreff = matfreq2dlr (dlr,Gndlr)
117
- value, err, max_err= L2normτ (Gfourier, dlr, case, eff_poles, weight)
116
+ dlreff = matfreq2dlr (dlr, Gndlr)
117
+ value, err, max_err = L2normτ (Gfourier, dlr, case, eff_poles, weight)
118
118
modulus = abs (sum (dlreff))
119
- value_sum += value/ modulus
120
- err_sum += err/ modulus
121
- eta += err/ value
119
+ value_sum += value / modulus
120
+ err_sum += err / modulus
121
+ eta += err / value
122
122
max_err_sum += max_err
123
- block[(i- 1 ) ÷ (N÷ 10 )+ 1 ] += err/ value/ N * 10
123
+ block[(i- 1 )÷ (N÷ 10 )+ 1 ] += err / value / N * 10
124
124
end
125
125
else
126
126
Gndlr = case (dlr, dlr. n, :n )
127
127
τSample = dlr10. τ
128
128
Gsample = case (dlr, τSample, :τ )
129
129
Gfourier = matfreq2tau (dlr, Gndlr, τSample)
130
- dlreff = matfreq2dlr (dlr,Gndlr)
130
+ dlreff = matfreq2dlr (dlr, Gndlr)
131
131
print (" max $(maximum (dlreff)) min $(minimum (dlreff)) \n " )
132
- value, err, max_err= L2normτ (Gfourier, dlr, case)
132
+ value, err, max_err = L2normτ (Gfourier, dlr, case)
133
133
modulus = abs (sum (dlreff))
134
134
print (" test Semi: $(modulus) \n " )
135
- value_sum += value/ modulus
136
- err_sum += err/ modulus
135
+ value_sum += value / modulus
136
+ err_sum += err / modulus
137
137
max_err_sum += max_err
138
138
end
139
139
if output
140
- file = open (" ./accuracy_test1.dat" , " a" )
140
+ file = open (" ./accuracy_test1.dat" , " a" )
141
141
# @printf(file, "%48.40g %48.40g %48.40g\n", eps, abs(b-c), )
142
142
# @printf(file, "%24.20g %24.20g %24.20g %24.20g %24.20g %24.20g\n", eps, value_sum/N, err_sum/N, err_sum /N/eps*Euv, max_err_sum/N, eta/N)
143
- @printf (file, " %24.20g %24.20g %24.20g\n " , eps, log10 (eta/ N / eps), std ( log10 .(block/ eps) ) )
143
+ @printf (file, " %24.20g %24.20g %24.20g\n " , eps, log10 (eta / N / eps), std (log10 .(block / eps)) )
144
144
close (file)
145
145
end
146
146
end
147
147
148
- cases = [MultiPole]
148
+ # cases = [MultiPole]
149
+ cases = [SemiCircle]
149
150
Λ = [1e4 ]
150
151
# rtol = [ 1e-12]
151
- rtol = [ 1e-4 , 1e-6 , 1e-8 , 1e-10 , 1e-12 ]
152
+ rtol = [1e-4 , 1e-6 , 1e-8 , 1e-10 , 1e-12 ]
152
153
N_poles = 1000
153
154
N = 1000
154
155
setprecision (128 )
155
156
dtype = Float64
156
157
# dtype = BigFloat
157
- poles = zeros (dtype,(N,N_poles) )
158
- weights = zeros (dtype, (N,N_poles))
158
+ poles = zeros (dtype, (N, N_poles))
159
+ weights = zeros (dtype, (N, N_poles))
159
160
for i in 1 : N
160
- poles[i,:] = 2.0 * rand (dtype, N_poles) .- 1.0
161
- weights[i,:] = 2.0 * rand (dtype, N_poles) .- 1.0
161
+ poles[i, :] = 2.0 * rand (dtype, N_poles) .- 1.0
162
+ weights[i, :] = 2.0 * rand (dtype, N_poles) .- 1.0
162
163
end
163
164
164
165
165
-
166
+
166
167
for case in cases
167
168
for l in Λ
168
169
for r in rtol
@@ -177,11 +178,11 @@ for case in cases
177
178
# test(case, false, :pha, l, 1.0, r,dtype=BigFloat)
178
179
# test(case, true, :pha, l, 1.0, r, dtype= BigFloat)
179
180
# end
180
-
181
- test_err (case, true , :none , l, 1.0 , r, poles , weights, dtype = Float64, output = true )
182
-
183
- test_err (case, true , :sym , l, 1.0 , r, poles, weights, dtype = Float64, output = true )
184
- # test_err(case, true, :sym, l, 1.0, r, poles, weights, dtype = BigFloat, output = true)
181
+
182
+ test_err (case, true , :none , l, 1.0 , r, poles, weights, dtype= Float64, output= true )
183
+
184
+ test_err (case, true , :sym , l, 1.0 , r, poles, weights, dtype= Float64, output= true )
185
+ # test_err(case, true, :sym, l, 1.0, r, poles, weights, dtype = BigFloat, output = true)
185
186
# test_err(case, false, :sym, l, 1.0, r, dtype = BigFloat, output = true)
186
187
# dtype =BigFloat
187
188
# N_poles = 1000
@@ -193,10 +194,10 @@ for case in cases
193
194
# test_dlr_coeff(case, true, :none, l, 1.0, r, eff_poles, weight, dtype = Float64, output = true)
194
195
# test_dlr_coeff(case, true, :sym, l, 1.0, r, eff_poles , weight, dtype = Float64, output = true)
195
196
196
-
197
+
197
198
end
198
199
end
199
200
end
200
-
201
+
201
202
202
203
0 commit comments