10 double ym=0, yp=0, dym=0, dyp=0, d2ym=0, d2yp=0, x, z, z2, z3, z4, z5;
11 double cotKm=0,cotKp=0,sinKm=0,sinKp=0, sinKm2, sinKp2;
13 double a1=0, a2=0, a3=0, a4=0, a5=0;
15 #ifdef HERMITE_DO_DPHI 16 double b1=0, b2=0, b3=0, b4=0, b5=0;
18 #ifdef HERMITE_DO_D2PHI 19 double c1=0, c2=0, c3=0, c4=0, c5=0;
20 double d4ym=0, d4yp=0;
22 #if defined (HERMITE_DO_DPHI) || defined (HERMITE_DO_D2PHI) 23 double d3ym = 0, d3yp=0;
25 double beta, beta2, *xvec, *sinK, *cotK;
26 double xmin, xmax, deltax, deltax2, lxlp1;
27 double left_border, right_border, next_border;
28 int K, l, j, nx, current_border_idx=0;
29 double *Phi_l, *dPhi_l;
30 int phisign = 1, dphisign = 1;
42 deltax = pHIS->delta_x;
43 deltax2 = deltax*deltax;
46 Phi_l = pHIS->phi+lnum*nx;
47 dPhi_l = pHIS->dphi+lnum*nx;
57 for (j=0; j<nxi; j++){
61 ClosedModY(pHIS->l[lnum], (
int)(pHIS->beta+0.2), &x, &phisign, &dphisign);
63 if ((x<xmin)||(x>xmax)){
68 #ifdef HERMITE_DO_DPHI 71 #ifdef HERMITE_DO_D2PHI 76 if ((x>right_border)||(x<left_border)){
77 if ((x>next_border)||(x<left_border)){
78 current_border_idx = ((int) ((x-xmin)/deltax))+1;
79 current_border_idx = MAX(1,current_border_idx);
80 current_border_idx = MIN(nx-1,current_border_idx);
85 cotKm = cotK[current_border_idx-1];
86 sinKm = sinK[current_border_idx-1];
88 ym = Phi_l[current_border_idx-1];
89 dym = dPhi_l[current_border_idx-1];
90 d2ym = -2*dym*cotKm+ym*(lxlp1/sinKm2-beta2+K);
91 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 92 d3ym = -2*cotKm*d2ym-2*ym*lxlp1*cotKm/sinKm2+
93 dym*(K-beta2+(2+lxlp1)/sinKm2);
95 #ifdef HERMITE_DO_D2PHI 96 d4ym = -2*cotKm*d3ym + d2ym*(K-beta2+(4+lxlp1)/sinKm2)+
97 dym*(-4*(1+lxlp1)*cotKm/sinKm2)+
98 ym*(2*lxlp1/sinKm2*(2*cotKm*cotKm+1/sinKm2));
103 current_border_idx++;
109 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 112 #ifdef HERMITE_DO_D2PHI 118 left_border = xvec[MAX(0,current_border_idx-1)];
119 right_border = xvec[current_border_idx];
120 next_border = xvec[MIN(nx-1,current_border_idx+1)];
122 cotKp = cotK[current_border_idx];
123 sinKp = sinK[current_border_idx];
124 sinKp2 = sinKp*sinKp;
125 yp = Phi_l[current_border_idx];
126 dyp = dPhi_l[current_border_idx];
127 d2yp = -2*dyp*cotKp+yp*(lxlp1/sinKp2-beta2+K);
128 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 129 d3yp = -2*cotKp*d2yp-2*yp*lxlp1*cotKp/sinKp2+
130 dyp*(K-beta2+(2+lxlp1)/sinKp2);
132 #ifdef HERMITE_DO_D2PHI 133 d4yp = -2*cotKp*d3yp + d2yp*(K-beta2+(4+lxlp1)/sinKp2)+
134 dyp*(-4*(1+lxlp1)*cotKp/sinKp2)+
135 yp*(2*lxlp1/sinKp2*(2*cotKp*cotKp+1/sinKp2));
138 #ifdef HERMITE_DO_PHI 140 a2 = 0.5*d2ym*deltax2;
141 a3 = (-1.5*d2ym+0.5*d2yp)*deltax2-(6*dym+4*dyp)*deltax-10*(ym-yp);
142 a4 = (1.5*d2ym-d2yp)*deltax2+(8*dym+7*dyp)*deltax+15*(ym-yp);
143 a5 = (-0.5*d2ym+0.5*d2yp)*deltax2-3*(dym+dyp)*deltax-6*(ym-yp);
145 #ifdef HERMITE_DO_DPHI 147 b2 = 0.5*d3ym*deltax2;
148 b3 = (-1.5*d3ym+0.5*d3yp)*deltax2-(6*d2ym+4*d2yp)*deltax-10*(dym-dyp);
149 b4 = (1.5*d3ym-d3yp)*deltax2+(8*d2ym+7*d2yp)*deltax+15*(dym-dyp);
150 b5 = (-0.5*d3ym+0.5*d3yp)*deltax2-3*(d2ym+d2yp)*deltax-6*(dym-dyp);
152 #ifdef HERMITE_DO_D2PHI 154 c2 = 0.5*d4ym*deltax2;
155 c3 = (-1.5*d4ym+0.5*d4yp)*deltax2-(6*d3ym+4*d3yp)*deltax-10*(d2ym-d2yp);
156 c4 = (1.5*d4ym-d4yp)*deltax2+(8*d3ym+7*d3yp)*deltax+15*(d2ym-d2yp);
157 c5 = (-0.5*d4ym+0.5*d4yp)*deltax2-3*(d3ym+d3yp)*deltax-6*(d2ym-d2yp);
161 z = (x-left_border)/deltax;
166 #ifdef HERMITE_DO_PHI 167 Phi[j] = (ym+a1*z+a2*z2+a3*z3+a4*z4+a5*z5)*phisign;
169 #ifdef HERMITE_DO_DPHI 170 dPhi[j] = (dym+b1*z+b2*z2+b3*z3+b4*z4+b5*z5)*dphisign;
172 #ifdef HERMITE_DO_D2PHI 173 d2Phi[j] = (d2ym+c1*z+c2*z2+c3*z3+c4*z4+c5*z5)*phisign;