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)4PetscErrorCode 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