Actual source code: betas.c
1: #include "chebyshevimpl.h"
3: /* given the polynomial order, return tabulated beta coefficients for use in opt. 4th-kind Chebyshev smoother */
4: PetscErrorCode KSPChebyshevGetBetas_Private(KSP ksp)
5: {
6: const PetscInt order = ksp->max_it;
7: const KSP_Chebyshev *cheb = (KSP_Chebyshev *)ksp->data;
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);
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: }