xref: /petsc/src/ksp/ksp/impls/cheby/betas.c (revision 970231d20df44f79b27787157e39d441e79f434b)
1 #include "chebyshevimpl.h"
2 
3 /* given the polynomial order, return tabulated beta coefficients for use in opt. 4th-kind Chebyshev smoother */
KSPChebyshevGetBetas_Private(KSP ksp)4 PetscErrorCode KSPChebyshevGetBetas_Private(KSP ksp)
5 {
6   const PetscInt       order = ksp->max_it;
7   const KSP_Chebyshev *cheb  = (KSP_Chebyshev *)ksp->data;
8 
9   PetscFunctionBegin;
10   PetscCheck(order >= 0 && order <= 16, PetscObjectComm((PetscObject)ksp), PETSC_ERR_ARG_OUTOFRANGE, "Chebyshev polynomial order %" PetscInt_FMT " must be in [0, 16]", order);
11 
12   switch (order) {
13   case 0:
14     /* no-op */
15     break;
16   case 1:
17     cheb->betas[0] = 1.12500000000000;
18     break;
19   case 2:
20     cheb->betas[0] = 1.02387287570313;
21     cheb->betas[1] = 1.26408905371085;
22     break;
23   case 3:
24     cheb->betas[0] = 1.00842544782028;
25     cheb->betas[1] = 1.08867839208730;
26     cheb->betas[2] = 1.33753125909618;
27     break;
28   case 4:
29     cheb->betas[0] = 1.00391310427285;
30     cheb->betas[1] = 1.04035811188593;
31     cheb->betas[2] = 1.14863498546254;
32     cheb->betas[3] = 1.38268869241000;
33     break;
34   case 5:
35     cheb->betas[0] = 1.00212930146164;
36     cheb->betas[1] = 1.02173711549260;
37     cheb->betas[2] = 1.07872433192603;
38     cheb->betas[3] = 1.19810065292663;
39     cheb->betas[4] = 1.41322542791682;
40     break;
41   case 6:
42     cheb->betas[0] = 1.00128517255940;
43     cheb->betas[1] = 1.01304293035233;
44     cheb->betas[2] = 1.04678215124113;
45     cheb->betas[3] = 1.11616489419675;
46     cheb->betas[4] = 1.23829020218444;
47     cheb->betas[5] = 1.43524297106744;
48     break;
49   case 7:
50     cheb->betas[0] = 1.00083464397912;
51     cheb->betas[1] = 1.00843949430122;
52     cheb->betas[2] = 1.03008707768713;
53     cheb->betas[3] = 1.07408384092003;
54     cheb->betas[4] = 1.15036186707366;
55     cheb->betas[5] = 1.27116474046139;
56     cheb->betas[6] = 1.45186658649364;
57     break;
58   case 8:
59     cheb->betas[0] = 1.00057246631197;
60     cheb->betas[1] = 1.00577427662415;
61     cheb->betas[2] = 1.02050187922941;
62     cheb->betas[3] = 1.05019803444565;
63     cheb->betas[4] = 1.10115572984941;
64     cheb->betas[5] = 1.18086042806856;
65     cheb->betas[6] = 1.29838585382576;
66     cheb->betas[7] = 1.46486073151099;
67     break;
68   case 9:
69     cheb->betas[0] = 1.00040960072832;
70     cheb->betas[1] = 1.00412439506106;
71     cheb->betas[2] = 1.01460212148266;
72     cheb->betas[3] = 1.03561113626671;
73     cheb->betas[4] = 1.07139972529194;
74     cheb->betas[5] = 1.12688273710962;
75     cheb->betas[6] = 1.20785219140729;
76     cheb->betas[7] = 1.32121930716746;
77     cheb->betas[8] = 1.47529642820699;
78     break;
79   case 10:
80     cheb->betas[0] = 1.00030312229652;
81     cheb->betas[1] = 1.00304840660796;
82     cheb->betas[2] = 1.01077022715387;
83     cheb->betas[3] = 1.02619011597640;
84     cheb->betas[4] = 1.05231724933755;
85     cheb->betas[5] = 1.09255743207549;
86     cheb->betas[6] = 1.15083376663972;
87     cheb->betas[7] = 1.23172250870894;
88     cheb->betas[8] = 1.34060802024460;
89     cheb->betas[9] = 1.48386124407011;
90     break;
91   case 11:
92     cheb->betas[0]  = 1.00023058595209;
93     cheb->betas[1]  = 1.00231675024028;
94     cheb->betas[2]  = 1.00817245396304;
95     cheb->betas[3]  = 1.01982986566342;
96     cheb->betas[4]  = 1.03950210235324;
97     cheb->betas[5]  = 1.06965042700541;
98     cheb->betas[6]  = 1.11305754295742;
99     cheb->betas[7]  = 1.17290876275564;
100     cheb->betas[8]  = 1.25288300576792;
101     cheb->betas[9]  = 1.35725579919519;
102     cheb->betas[10] = 1.49101672564139;
103     break;
104   case 12:
105     cheb->betas[0]  = 1.00017947200828;
106     cheb->betas[1]  = 1.00180189139619;
107     cheb->betas[2]  = 1.00634861907307;
108     cheb->betas[3]  = 1.01537864566306;
109     cheb->betas[4]  = 1.03056942830760;
110     cheb->betas[5]  = 1.05376019693943;
111     cheb->betas[6]  = 1.08699862592072;
112     cheb->betas[7]  = 1.13259183097913;
113     cheb->betas[8]  = 1.19316273358172;
114     cheb->betas[9]  = 1.27171293675110;
115     cheb->betas[10] = 1.37169337969799;
116     cheb->betas[11] = 1.49708418575562;
117     break;
118   case 13:
119     cheb->betas[0]  = 1.00014241921559;
120     cheb->betas[1]  = 1.00142906932629;
121     cheb->betas[2]  = 1.00503028986298;
122     cheb->betas[3]  = 1.01216910518495;
123     cheb->betas[4]  = 1.02414874342792;
124     cheb->betas[5]  = 1.04238158880820;
125     cheb->betas[6]  = 1.06842008128700;
126     cheb->betas[7]  = 1.10399010936759;
127     cheb->betas[8]  = 1.15102748242645;
128     cheb->betas[9]  = 1.21171811910125;
129     cheb->betas[10] = 1.28854264865128;
130     cheb->betas[11] = 1.38432619380991;
131     cheb->betas[12] = 1.50229418757368;
132     break;
133   case 14:
134     cheb->betas[0]  = 1.00011490538261;
135     cheb->betas[1]  = 1.00115246376914;
136     cheb->betas[2]  = 1.00405357333264;
137     cheb->betas[3]  = 1.00979590573153;
138     cheb->betas[4]  = 1.01941300472994;
139     cheb->betas[5]  = 1.03401425035436;
140     cheb->betas[6]  = 1.05480599606629;
141     cheb->betas[7]  = 1.08311420301813;
142     cheb->betas[8]  = 1.12040891660892;
143     cheb->betas[9]  = 1.16833095655446;
144     cheb->betas[10] = 1.22872122288238;
145     cheb->betas[11] = 1.30365305707817;
146     cheb->betas[12] = 1.39546814053678;
147     cheb->betas[13] = 1.50681646209583;
148     break;
149   case 15:
150     cheb->betas[0]  = 1.00009404750752;
151     cheb->betas[1]  = 1.00094291696343;
152     cheb->betas[2]  = 1.00331449056444;
153     cheb->betas[3]  = 1.00800294833816;
154     cheb->betas[4]  = 1.01584236259140;
155     cheb->betas[5]  = 1.02772083317705;
156     cheb->betas[6]  = 1.04459535422831;
157     cheb->betas[7]  = 1.06750761206125;
158     cheb->betas[8]  = 1.09760092545889;
159     cheb->betas[9]  = 1.13613855366157;
160     cheb->betas[10] = 1.18452361426236;
161     cheb->betas[11] = 1.24432087304475;
162     cheb->betas[12] = 1.31728069083392;
163     cheb->betas[13] = 1.40536543893560;
164     cheb->betas[14] = 1.51077872501845;
165     break;
166   case 16:
167     cheb->betas[0]  = 1.00007794828179;
168     cheb->betas[1]  = 1.00078126847253;
169     cheb->betas[2]  = 1.00274487974401;
170     cheb->betas[3]  = 1.00662291017015;
171     cheb->betas[4]  = 1.01309858836971;
172     cheb->betas[5]  = 1.02289448329337;
173     cheb->betas[6]  = 1.03678321409983;
174     cheb->betas[7]  = 1.05559875719896;
175     cheb->betas[8]  = 1.08024848405560;
176     cheb->betas[9]  = 1.11172607131497;
177     cheb->betas[10] = 1.15112543431072;
178     cheb->betas[11] = 1.19965584614973;
179     cheb->betas[12] = 1.25865841744946;
180     cheb->betas[13] = 1.32962412656664;
181     cheb->betas[14] = 1.41421360695576;
182     cheb->betas[15] = 1.51427891730346;
183     break;
184   }
185   PetscFunctionReturn(PETSC_SUCCESS);
186 }
187