10 int l = pHIS->l[lnum];
11 #if defined (HERMITE_DO_PHI)|| defined (HERMITE_DO_D2PHI) 14 double yp=0, dyp=0, x;
19 #ifdef HERMITE_DO_DPHI 22 #ifdef HERMITE_DO_D2PHI 24 double d2ym = 0, d3yp=0;
25 double cotKm=0,sinKm=0;
28 #if defined (HERMITE_DO_DPHI) || defined (HERMITE_DO_D2PHI) 31 double cotKp=0,sinKp=0;
33 double *sinK = pHIS->sinK;
34 double *cotK = pHIS->cotK;
36 double lxlp1 = l*(l+1.0);
37 double beta = pHIS->beta;
38 double beta2 = beta*beta;
41 double xmin, xmax, deltax;
42 double left_border, right_border, next_border;
43 int j, nx, current_border_idx=0;
44 double *Phi_l, *dPhi_l;
45 int phisign = 1, dphisign = 1;
53 deltax = pHIS->delta_x;
55 Phi_l = pHIS->phi+lnum*nx;
56 dPhi_l = pHIS->dphi+lnum*nx;
65 for (j=0; j<nxi; j++){
69 ClosedModY(l, (
int)(pHIS->beta+0.2), &x, &phisign, &dphisign);
71 if ((x<xmin)||(x>xmax)){
76 #ifdef HERMITE_DO_DPHI 79 #ifdef HERMITE_DO_D2PHI 84 if ((x>right_border)||(x<left_border)){
85 if ((x>next_border)||(x<left_border)){
86 current_border_idx = ((int) ((x-xmin)/deltax))+1;
87 current_border_idx = MAX(1,current_border_idx);
88 current_border_idx = MIN(nx-1,current_border_idx);
93 #if defined (HERMITE_DO_PHI) || defined (HERMITE_DO_D2PHI) 94 ym = Phi_l[current_border_idx-1];
96 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 97 dym = dPhi_l[current_border_idx-1];
99 #ifdef HERMITE_DO_D2PHI 100 cotKm = cotK[current_border_idx-1];
101 sinKm = sinK[current_border_idx-1];
102 sinKm2 = sinKm*sinKm;
103 d2ym = -2*dym*cotKm+ym*(lxlp1/sinKm2-beta2+K);
108 current_border_idx++;
111 #if defined (HERMITE_DO_PHI) || defined (HERMITE_DO_D2PHI) 114 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 117 #ifdef HERMITE_DO_D2PHI 123 left_border = xvec[MAX(0,current_border_idx-1)];
124 right_border = xvec[current_border_idx];
125 next_border = xvec[MIN(nx-1,current_border_idx+1)];
127 yp = Phi_l[current_border_idx];
128 dyp = dPhi_l[current_border_idx];
129 #if defined HERMITE_DO_DPHI || defined HERMITE_DO_D2PHI 130 cotKp = cotK[current_border_idx];
131 sinKp = sinK[current_border_idx];
132 sinKp2 = sinKp*sinKp;
133 d2yp = -2*dyp*cotKp+yp*(lxlp1/sinKp2-beta2+K);
135 #ifdef HERMITE_DO_D2PHI 136 d3yp = -2*cotKp*d2yp-2*yp*lxlp1*cotKp/sinKp2+
137 dyp*(K-beta2+(2+lxlp1)/sinKp2);
140 #ifdef HERMITE_DO_PHI 141 a[0] = -dyp*deltax-2*ym+2*yp;
142 a[1] = dyp*deltax+ym-yp;
144 #ifdef HERMITE_DO_DPHI 145 b[0] = -d2yp*deltax-2*dym+2*dyp;
146 b[1] = d2yp*deltax+dym-dyp;
148 #ifdef HERMITE_DO_D2PHI 149 c[0] = -d3yp*deltax-2*d2ym+2*d2yp;
150 c[1] = d3yp*deltax+d2ym-d2yp;
154 z[0] = (x-left_border)/deltax;
156 #ifdef HERMITE_DO_PHI 157 Phi[j] = (ym+a[0]*z[0]+a[1]*z[1])*phisign;
159 #ifdef HERMITE_DO_DPHI 160 dPhi[j] = (dym+b[0]*z[0]+b[1]*z[1])*dphisign;
162 #ifdef HERMITE_DO_D2PHI 163 d2Phi[j] = (d2ym+c[0]*z[0]+c[1]*z[1])*phisign;