10 int l = pHIS->l[lnum];
11 double ym=0, yp=0, dym=0, dyp=0, x;
12 double z[3]={0.,0.,0.};
14 double a[3]={0.,0.,0.};
16 #ifdef HERMITE_DO_DPHI 17 double b[3]={0.,0.,0.};
19 #ifdef HERMITE_DO_D2PHI 20 double c[3]={0.,0.,0.};
21 double d3ym=0, d3yp=0;
23 #if defined (HERMITE_DO_DPHI) || defined (HERMITE_DO_D2PHI) 24 double *sinK = pHIS->sinK;
25 double *cotK = pHIS->cotK;
26 double cotKm=0,cotKp=0,sinKm=0,sinKp=0;
27 double sinKm2, sinKp2;
28 double d2ym = 0, d2yp=0;
30 double lxlp1 = l*(l+1.0);
31 double beta = pHIS->beta;
32 double beta2 = beta*beta;
35 double xmin, xmax, deltax;
36 double left_border, right_border, next_border;
37 int j, nx, current_border_idx=0;
38 double *Phi_l, *dPhi_l;
39 int phisign = 1, dphisign = 1;
47 deltax = pHIS->delta_x;
49 Phi_l = pHIS->phi+lnum*nx;
50 dPhi_l = pHIS->dphi+lnum*nx;
59 for (j=0; j<nxi; j++){
63 ClosedModY(l, (
int)(pHIS->beta+0.2), &x, &phisign, &dphisign);
65 if ((x<xmin)||(x>xmax)){
70 #ifdef HERMITE_DO_DPHI 73 #ifdef HERMITE_DO_D2PHI 78 if ((x>right_border)||(x<left_border)){
79 if ((x>next_border)||(x<left_border)){
80 current_border_idx = ((int) ((x-xmin)/deltax))+1;
81 current_border_idx = MAX(1,current_border_idx);
82 current_border_idx = MIN(nx-1,current_border_idx);
87 ym = Phi_l[current_border_idx-1];
88 dym = dPhi_l[current_border_idx-1];
89 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 90 cotKm = cotK[current_border_idx-1];
91 sinKm = sinK[current_border_idx-1];
93 d2ym = -2*dym*cotKm+ym*(lxlp1/sinKm2-beta2+K);
95 #ifdef HERMITE_DO_D2PHI 96 d3ym = -2*cotKm*d2ym-2*ym*lxlp1*cotKm/sinKm2+
97 dym*(K-beta2+(2+lxlp1)/sinKm2);
102 current_border_idx++;
107 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 112 #ifdef HERMITE_DO_D2PHI 116 left_border = xvec[MAX(0,current_border_idx-1)];
117 right_border = xvec[current_border_idx];
118 next_border = xvec[MIN(nx-1,current_border_idx+1)];
120 yp = Phi_l[current_border_idx];
121 dyp = dPhi_l[current_border_idx];
122 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 123 cotKp = cotK[current_border_idx];
124 sinKp = sinK[current_border_idx];
125 sinKp2 = sinKp*sinKp;
126 d2yp = -2*dyp*cotKp+yp*(lxlp1/sinKp2-beta2+K);
128 #ifdef HERMITE_DO_D2PHI 129 d3yp = -2*cotKp*d2yp-2*yp*lxlp1*cotKp/sinKp2+
130 dyp*(K-beta2+(2+lxlp1)/sinKp2);
133 #ifdef HERMITE_DO_PHI 135 a[1] = -2*dym*deltax-dyp*deltax-3*ym+3*yp;
136 a[2] = dym*deltax+dyp*deltax+2*ym-2*yp;
138 #ifdef HERMITE_DO_DPHI 140 b[1] = -2*d2ym*deltax-d2yp*deltax-3*dym+3*dyp;
141 b[2] = d2ym*deltax+d2yp*deltax+2*dym-2*dyp;
143 #ifdef HERMITE_DO_D2PHI 145 c[1] = -2*d3ym*deltax-d3yp*deltax-3*d2ym+3*d2yp;
146 c[2] = d3ym*deltax+d3yp*deltax+2*d2ym-2*d2yp;
150 z[0] = (x-left_border)/deltax;
153 #ifdef HERMITE_DO_PHI 154 Phi[j] = (ym+a[0]*z[0]+a[1]*z[1]+a[2]*z[2])*phisign;
156 #ifdef HERMITE_DO_DPHI 157 dPhi[j] = (dym+b[0]*z[0]+b[1]*z[1]+b[2]*z[2])*dphisign;
159 #ifdef HERMITE_DO_D2PHI 160 d2Phi[j] = (d2ym+c[0]*z[0]+c[1]*z[1]+c[2]*z[2])*phisign;