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: }