546   integer,              
intent(in)    :: n 
   547   real, 
dimension(:),   
intent(in)    :: h 
   548   real, 
dimension(:),   
intent(in)    :: u 
   549   real, 
dimension(:,:), 
intent(inout) :: ppoly_e            
   550   real, 
dimension(:,:), 
intent(inout) :: ppoly_s            
   551   real, 
dimension(:,:), 
intent(inout) :: ppoly_coefficients 
   555   integer       :: inflexion_l
   556   integer       :: inflexion_r
   559   real          :: a, b, c, d, e
   565   real          :: alpha1, alpha2, alpha3
   566   real          :: rho, sqrt_rho
   567   real          :: gradient1, gradient2
   581   slope = 2.0 * ( u1 - u0 ) / ( ( h0 + h1 ) + h_neglect )
   586   a = ppoly_coefficients(i1,1)
   587   b = ppoly_coefficients(i1,2)
   590   u1_r = b / (h1 + h_neglect) 
   595     beta = 2.0 * ( u0_r - um ) / ( (h0 + h_neglect)*u1_r) - 1.0
   599   br = u0_r + beta*u0_r - um
   600   ar = um + beta*um - br
   606   u_plm = um - 0.5 * slope
   612   if ( abs(um-u0_l) .lt. abs(um-u_plm) ) 
then   613     u1_l = 2.0 * ( br - ar*beta)
   614     u1_l = u1_l / (h0 + h_neglect)
   617     u1_l = slope / (h0 + h_neglect)
   625   c = 30.0 * um - 12.0*u0_r - 18.0*u0_l + 1.5*h0*(u1_r - 3.0*u1_l)
   626   d = -60.0 * um + h0 *(6.0*u1_l - 4.0*u1_r) + 28.0*u0_r + 32.0*u0_l
   627   e = 30.0 * um + 2.5*h0*(u1_r - u1_l) - 15.0*(u0_l + u0_r)
   633   rho = alpha2 * alpha2 - 4.0 * alpha1 * alpha3
   637   if (( alpha1 .ne. 0.0 ) .and. ( rho .ge. 0.0 )) 
then   639     sqrt_rho = sqrt( rho )
   641     x1 = 0.5 * ( - alpha2 - sqrt_rho ) / alpha1
   642     if ( (x1 .gt. 0.0) .and. (x1 .lt. 1.0) ) 
then   643       gradient1 = 4.0 * e * (x1**3) + 3.0 * d * (x1**2) + 2.0 * c * x1 + b
   644       if ( gradient1 * slope .lt. 0.0 ) 
then   649     x2 = 0.5 * ( - alpha2 + sqrt_rho ) / alpha1
   650     if ( (x2 .gt. 0.0) .and. (x2 .lt. 1.0) ) 
then   651       gradient2 = 4.0 * e * (x2**3) + 3.0 * d * (x2**2) + 2.0 * c * x2 + b
   652       if ( gradient2 * slope .lt. 0.0 ) 
then   659   if (( alpha1 .eq. 0.0 ) .and. ( alpha2 .ne. 0.0 )) 
then   661     x1 = - alpha3 / alpha2
   662     if ( (x1 .ge. 0.0) .and. (x1 .le. 1.0) ) 
then   663       gradient1 = 3.0 * d * (x1**2) + 2.0 * c * x1 + b
   664       if ( gradient1 * slope .lt. 0.0 ) 
then   671   if ( inflexion_l .eq. 1 ) 
then   675     u1_l = ( 10.0 * um - 2.0 * u0_r - 8.0 * u0_l ) / (3.0*h0 + h_neglect)
   676     u1_r = ( -10.0 * um + 6.0 * u0_r + 4.0 * u0_l ) / (h0 + h_neglect)
   682     if ( u1_l * slope .LT. 0.0 ) 
then   685       u0_r = 5.0 * um - 4.0 * u0_l
   686       u1_r = 20.0 * (um - u0_l) / ( h0 + h_neglect )
   688     else if ( u1_r * slope .LT. 0.0 ) 
then   691       u0_l = (5.0*um - 3.0*u0_r) / 2.0
   692       u1_l = 10.0 * (-um + u0_r) / (3.0 * h0 + h_neglect )
   706   c = 30.0 * um - 12.0*u0_r - 18.0*u0_l + 1.5*h0*(u1_r - 3.0*u1_l)
   707   d = -60.0 * um + h0 *(6.0*u1_l - 4.0*u1_r) + 28.0*u0_r + 32.0*u0_l
   708   e = 30.0 * um + 2.5*h0*(u1_r - u1_l) - 15.0*(u0_l + u0_r)
   711   ppoly_coefficients(i0,1) = a
   712   ppoly_coefficients(i0,2) = b
   713   ppoly_coefficients(i0,3) = c
   714   ppoly_coefficients(i0,4) = d
   715   ppoly_coefficients(i0,5) = e
   728   slope = 2.0 * ( u1 - u0 ) / ( h0 + h1 )
   733   a = ppoly_coefficients(i0,1)
   734   b = ppoly_coefficients(i0,2)
   735   c = ppoly_coefficients(i0,3)
   736   d = ppoly_coefficients(i0,4)
   737   e = ppoly_coefficients(i0,5)
   738   u0_l = a + b + c + d + e                  
   739   u1_l = (b + 2*c + 3*d + 4*e) / h0         
   743   if (um-u0_l.ne.0.) 
then    744     beta = 0.5*h1*u1_l / (um-u0_l) - 1.0
   748   br = beta*um + um - u0_l
   752   if (1+beta.ne.0.) 
then    753     u0_r = (ar + 2*br + beta*br ) / ((1+beta)*(1+beta))
   755     u0_r = um + 0.5 * slope 
   759   u_plm = um + 0.5 * slope
   765   if ( abs(um-u0_r) .lt. abs(um-u_plm) ) 
then   766     u1_r = 2.0 * ( br - ar*beta ) / ( (1+beta)*(1+beta)*(1+beta) )
   778   c = 30.0 * um - 12.0*u0_r - 18.0*u0_l + 1.5*h1*(u1_r - 3.0*u1_l)
   779   d = -60.0 * um + h1*(6.0*u1_l - 4.0*u1_r) + 28.0*u0_r + 32.0*u0_l
   780   e = 30.0 * um + 2.5*h1*(u1_r - u1_l) - 15.0*(u0_l + u0_r)
   786   rho = alpha2 * alpha2 - 4.0 * alpha1 * alpha3
   790   if (( alpha1 .ne. 0.0 ) .and. ( rho .ge. 0.0 )) 
then   792     sqrt_rho = sqrt( rho )
   794     x1 = 0.5 * ( - alpha2 - sqrt_rho ) / alpha1
   795     if ( (x1 .gt. 0.0) .and. (x1 .lt. 1.0) ) 
then   796       gradient1 = 4.0 * e * (x1**3) + 3.0 * d * (x1**2) + 2.0 * c * x1 + b
   797       if ( gradient1 * slope .lt. 0.0 ) 
then   802     x2 = 0.5 * ( - alpha2 + sqrt_rho ) / alpha1
   803     if ( (x2 .gt. 0.0) .and. (x2 .lt. 1.0) ) 
then   804       gradient2 = 4.0 * e * (x2**3) + 3.0 * d * (x2**2) + 2.0 * c * x2 + b
   805       if ( gradient2 * slope .lt. 0.0 ) 
then   812   if (( alpha1 .eq. 0.0 ) .and. ( alpha2 .ne. 0.0 )) 
then   814     x1 = - alpha3 / alpha2
   815     if ( (x1 .ge. 0.0) .and. (x1 .le. 1.0) ) 
then   816       gradient1 = 3.0 * d * (x1**2) + 2.0 * c * x1 + b
   817       if ( gradient1 * slope .lt. 0.0 ) 
then   824   if ( inflexion_r .eq. 1 ) 
then   828     u1_r = ( -10.0 * um + 8.0 * u0_r + 2.0 * u0_l ) / (3.0 * h1)
   829     u1_l = ( 10.0 * um - 4.0 * u0_r - 6.0 * u0_l ) / h1
   835     if ( u1_l * slope .lt. 0.0 ) 
then   838       u0_r = ( 5.0 * um - 3.0 * u0_l ) / 2.0
   839       u1_r = 10.0 * (um - u0_l) / (3.0 * h1)
   841     else if ( u1_r * slope .lt. 0.0 ) 
then   844       u0_l = 5.0 * um - 4.0 * u0_r
   845       u1_l = 20.0 * ( -um + u0_r ) / h1
   859   c = 30.0 * um - 12.0*u0_r - 18.0*u0_l + 1.5*h1*(u1_r - 3.0*u1_l)
   860   d = -60.0 * um + h1 *(6.0*u1_l - 4.0*u1_r) + 28.0*u0_r + 32.0*u0_l
   861   e = 30.0 * um + 2.5*h1*(u1_r - u1_l) - 15.0*(u0_l + u0_r)
   863   ppoly_coefficients(i1,1) = a
   864   ppoly_coefficients(i1,2) = b
   865   ppoly_coefficients(i1,3) = c
   866   ppoly_coefficients(i1,4) = d
   867   ppoly_coefficients(i1,5) = e