25 INTERFACE interpolator
27 MODULE PROCEDURE interp_oned_vector
28 MODULE PROCEDURE interp_threed_scalar
29 MODULE PROCEDURE interp_threed_vector
30 MODULE PROCEDURE interp_twod_scalar
31 MODULE PROCEDURE interp_twod_vector
32 MODULE PROCEDURE calc_weightderiv_threed
33 MODULE PROCEDURE calc_weightderiv_twod
36 INTERFACE array_dot_product
37 Module procedure array_dot_product_2d
38 Module procedure array_dot_product_3d
69 INTEGER,
PARAMETER :: prcn=8
70 INTEGER,
PARAMETER :: iprec=8
73 DOUBLE PRECISION,
PARAMETER :: two = 2.0_iprec
74 DOUBLE PRECISION,
PARAMETER :: three = 3.0_iprec
75 DOUBLE PRECISION,
PARAMETER :: four = 4.0_iprec
76 DOUBLE PRECISION,
PARAMETER :: six = 6.0_iprec
79 DOUBLE PRECISION,
PARAMETER :: fourth = 0.25_iprec
81 INTEGER,
PARAMETER :: maxorder=6
82 DOUBLE PRECISION,
DIMENSION(maxorder),
TARGET :: xval, yval, zval
83 DOUBLE PRECISION,
DIMENSION(maxorder-1) :: dx, dy, dz
84 DOUBLE PRECISION,
DIMENSION(maxorder,maxorder,maxorder),
TARGET :: weights
94 FUNCTION array_dot_product_3d(A,B) !3D Arrays
95 Real(prcn):: array_dot_product_3d
97 Integer:: j, k, s1, s2, s3
98 Real(prcn),
Dimension(:,:,:),
Intent(in):: a, b
104 array_dot_product_3d =
zero 107 array_dot_product_3d = array_dot_product_3d + dot_product(a(:,j,k), b(1:s1,j,k))
110 END FUNCTION array_dot_product_3d
112 FUNCTION array_dot_product_2d(A,B) !2D Arrays
113 Real(prcn):: array_dot_product_2d
116 Real(prcn),
Dimension(:,:),
Intent(in):: a, b
120 array_dot_product_2d =
zero 122 array_dot_product_2d = array_dot_product_2d + dot_product(a(:,j), b(:,j))
124 END FUNCTION array_dot_product_2d
128 isch,dimprob,ordernew)
139 INTEGER,
DIMENSION(3),
INTENT(in):: pc
140 INTEGER,
INTENT(out):: IW, IE, JS, JN, KB, KTP
141 CHARACTER(LEN=5),
INTENT(in) :: isch
142 INTEGER,
INTENT(in) :: dimprob
143 INTEGER,
OPTIONAL :: ordernew
145 INTEGER :: im, jm, km
146 INTEGER :: ob2rtmp, ob2ltmp, ordertemp, ordernewtmp
165 iw = max(1 ,pc(1) - (ob2l - 1))
167 ie = min(im,pc(1) + ob2r)
170 IF(.NOT.des_periodic_walls_x)
THEN 171 IF (iw.EQ.1 ) ie = iw + order - 1
172 IF (ie.EQ.im) iw = ie - order + 1
174 IF (iw.EQ.1 ) iw = ie - order + 1
175 IF (ie.EQ.im) ie = iw + order - 1
178 js = max(1 ,pc(2) - (ob2l - 1))
179 jn = min(jm,pc(2) + ob2r)
180 IF(.NOT.des_periodic_walls_y)
THEN 181 IF (js.EQ.1 ) jn = js + order - 1
182 IF (jn.EQ.jm) js = jn - order + 1
184 IF (js.EQ.1 ) js = jn - order + 1
185 IF (jn.EQ.jm) jn = js + order - 1
188 kb = max(1 ,pc(3) - (ob2l - 1))
189 ktp = min(km,pc(3) + ob2r)
190 IF(.NOT.des_periodic_walls_z)
THEN 191 IF (kb.EQ.1 ) ktp = kb + order - 1
192 IF (ktp.EQ.km) kb = ktp - order + 1
194 IF (kb.EQ.1 ) kb = ktp - order + 1
195 IF (ktp.EQ.km) ktp = kb + order - 1
205 iw = max(1 ,pc(1) - (ob2l - 1))
206 ie = min(im,pc(1) + ob2r)
207 IF(.NOT.des_periodic_walls_x)
THEN 208 IF (iw.EQ.1 ) ie = iw + order - 1
209 IF (ie.EQ.im) iw = ie - order + 1
211 IF (iw.EQ.1 ) iw = ie - order + 1
212 IF (ie.EQ.im) ie = iw + order - 1
215 js = max(1 ,pc(2) - (ob2l - 1))
216 jn = min(jm,pc(2) + ob2r)
217 IF(.NOT.des_periodic_walls_y)
THEN 218 IF (js.EQ.1 ) jn = js + order - 1
219 IF (jn.EQ.jm) js = jn - order + 1
221 IF (js.EQ.1 ) js = jn - order + 1
222 IF (jn.EQ.jm) jn = js + order - 1
225 kb = max(1 ,pc(3) - (ob2l - 1))
226 ktp = min(km,pc(3) + ob2r)
227 IF(.NOT.des_periodic_walls_z)
THEN 228 IF (kb.EQ.1 ) ktp = kb + order - 1
229 IF (ktp.EQ.km) kb = ktp - order + 1
231 IF (kb.EQ.1 ) kb = ktp - order + 1
232 IF (ktp.EQ.km) ktp = kb + order - 1
238 IF(dimprob == 2)
THEN 247 IF(
PRESENT(ordernew)) ordernew = ordernewtmp
272 INTEGER,
INTENT(IN) :: PC(3)
274 INTEGER,
INTENT(IN) :: NP
278 INTEGER,
INTENT(OUT) :: IW, JS, KB
280 LOGICAL,
INTENT(IN) :: FOCUS
286 INTEGER I_SHIFT, J_SHIFT, K_SHIFT, IE, JN, KTP
290 IF( des_pos_new(np,1) <= xe(pc(1))-
half*dx(pc(1)))
THEN 295 IF( des_pos_new(np,2) <= yn(pc(2))-
half*dy(pc(2)))
THEN 303 IF( des_pos_new(np,3) <= zt(pc(3))-
half*dz(pc(3)))
THEN 313 iw = max( 1, (pc(1) + i_shift-1))
315 ie = min(
imax2, pc(1) + i_shift)
316 IF(.NOT.des_periodic_walls_x)
THEN 325 IF (iw .EQ. 1) iw = ie - 1
331 js = max( 1, pc(2)+ j_shift - 1)
333 jn = min(
jmax2, pc(2) + j_shift)
334 IF(.NOT.des_periodic_walls_y)
THEN 339 IF (js .EQ. 1 ) js = jn - 1
349 kb = max( 1, pc(3)+k_shift-1)
351 ktp = min(
kmax2, pc(3) + k_shift)
352 IF(.NOT.des_periodic_walls_z)
THEN 354 IF (ktp .EQ.
kmax1) kb = ktp - 1
357 IF (kb .EQ. 1 ) kb = ktp - 1
388 INTEGER,
INTENT(IN) :: NP
390 LOGICAL,
INTENT(IN) :: FOCUS
394 INTEGER,
INTENT(INOUT) :: INTP_IJK(2**dimn)
396 DOUBLE PRECISION,
INTENT(INOUT) :: INTP_WEIGHTS(2**dimn)
408 DOUBLE PRECISION,
POINTER :: WEIGHTS_CC (:,:,:)
410 INTEGER I, J, K, II, JJ, KK
414 DOUBLE PRECISION STNCL_GEMTY (2, 2, max(1, 2*(dimn-2)), dimn)
415 DOUBLE PRECISION STNCL_FEILD (2, 2, max(1, 2*(dimn-2)))
421 DOUBLE PRECISION INTERP_scalar
424 CHARACTER(LEN=5) :: INTP_SCHM =
'LPI' 433 DO k = 1, (3-dimn)*1+(dimn-2)*2
443 IF (des_periodic_walls_x)
THEN 444 IF(ii .LT.
imin1)
THEN 447 stncl_gemty(i,j,k,1) = xe(ii) -
half*dx(ii) -
xlength 448 ELSEIF(ii .GT.
imax1)
THEN 451 stncl_gemty(i,j,k,1) =
xlength + xe(ii) -
half*dx(ii)
454 stncl_gemty(i,j,k,1) = xe(ii) -
half*dx(ii)
458 stncl_gemty(i,j,k,1) = xe(ii) -
half*dx(ii)
463 ELSEIF(ii .EQ.
imax2)
THEN 467 IF (des_periodic_walls_y)
THEN 468 IF(jj .LT.
jmin1)
THEN 471 stncl_gemty(i,j,k,2) = yn(jj) -
half*dy(jj) -
ylength 472 ELSEIF(jj .GT.
jmax1)
THEN 475 stncl_gemty(i,j,k,2) =
ylength + yn(jj) -
half*dy(jj)
478 stncl_gemty(i,j,k,2) = yn(jj) -
half*dy(jj)
482 stncl_gemty(i,j,k,2) = yn(jj) -
half*dy(jj)
487 ELSEIF(jj .EQ.
jmax2)
THEN 491 IF (dimn .EQ. 3)
THEN 492 IF (des_periodic_walls_z)
THEN 493 IF(kk .LT.
kmin1)
THEN 496 stncl_gemty(i,j,k,3) = zt(kk) -
half*dz(kk) -
zlength 497 ELSEIF(kk .GT.
kmax1)
THEN 500 stncl_gemty(i,j,k,3) =
zlength + zt(kk) -
half*dz(kk)
503 stncl_gemty(i,j,k,3) = zt(kk) -
half*dz(kk)
507 stncl_gemty(i,j,k,3) = zt(kk) -
half*dz(kk)
512 ELSEIF(kk .EQ.
kmax2)
THEN 520 intp_ijk(lc) = funijk(ii,jj,kk)
522 stncl_feild(i,j,k) = 1.0d0
531 CALL interpolator( stncl_gemty(1:2, 1:2, 1, 1:dimn), &
532 stncl_feild(1:2, 1:2, 1), des_pos_new(np,1:2), interp_scalar,&
533 2, intp_schm, weights_cc )
535 CALL interpolator( stncl_gemty(1:2, 1:2, 1:2, 1:dimn), &
536 stncl_feild(1:2, 1:2, 1:2), des_pos_new(np,:), interp_scalar,&
537 2, intp_schm, weights_cc )
541 DO k = 1, (3-dimn)*1+(dimn-2)*2
546 intp_weights(lc) = weights_cc(i,j,k)
552 IF(focus .AND. debug_des)
THEN 553 WRITE(*,
"(3X,A,1X,A3,4X,A,I2)") &
554 'Interpolation Scheme:',
'LPI',
'Interpolation Order:',2
555 WRITE(*,
"(3X,A,I5,3X,A,I6)")
'Particle: ',np,
'IJK: ',pijk(np,4)
556 WRITE(*,
"(/5X,'|',29('-'),'|')")
557 WRITE(*,
"(5X,A)")
'| Fluid Cell | Interp. Weight |' 558 WRITE(*,
"(5X,'|',12('-'),'|',16('-'),'|')")
560 WRITE(*,
"(5X,'|',2X,I8,2X,'|',2X,F13.10,2X,'|')")&
561 intp_ijk(lc), intp_weights(lc)
563 WRITE(*,
"(5X,'|',29('-'),'|'//)")
578 INTEGER,
DIMENSION(3),
INTENT(in):: pc
580 INTEGER,
INTENT(out):: ib, ie, jb, je, kb, ke
581 INTEGER,
INTENT(in) :: dimprob
582 INTEGER,
OPTIONAL :: ordernew
583 CHARACTER(LEN=5),
INTENT(in) :: isch
584 INTEGER :: ob2rtmp, ob2ltmp, ordertemp, ordernewtmp
602 ib = max(1 ,pc(1) - (ob2l - 1))
603 ie = min(im,pc(1) + ob2r)
604 IF (ib.EQ.1 ) ie = ib + order - 1
605 IF (ie.EQ.im) ib = ie - order + 1
608 jb = max(1 ,pc(2) - (ob2l - 1))
609 je = min(jm,pc(2) + ob2r)
611 IF (jb.EQ.1 ) je = jb + order - 1
612 IF (je.EQ.jm) jb = je - order + 1
615 kb = max(1 ,pc(3) - (ob2l - 1))
616 ke = min(km,pc(3) + ob2r)
618 IF (kb.EQ.1 ) ke = kb + order - 1
619 IF (ke.EQ.km) kb = ke - order + 1
636 ib = max(1 ,pc(1) - (ob2l - 1))
637 ie = min(im,pc(1) + ob2r)
639 IF (ib.EQ.1 ) ie = ib + order - 1
640 IF (ie.EQ.im) ib = ie - order + 1
643 jb = max(1 ,pc(2) - (ob2l - 1))
644 je = min(jm,pc(2) + ob2r)
646 IF (jb.EQ.1 ) je = jb + order - 1
647 IF (je.EQ.jm) jb = je - order + 1
650 kb = max(1 ,pc(3) - (ob2l - 1))
651 ke = min(km,pc(3) + ob2r)
653 IF (kb.EQ.1 ) ke = kb + order - 1
654 IF (ke.EQ.km) kb = ke - order + 1
658 IF(dimprob == 2)
THEN 663 IF(
PRESENT(ordernew)) ordernew = ordernewtmp
670 isch, weight_pointer)
677 REAL(prcn),
DIMENSION(:),
INTENT(in):: coor, scalar
678 REAL(prcn),
INTENT(in):: ppos
679 REAL(prcn),
INTENT(out):: interp_scl
680 INTEGER,
INTENT(in):: order
681 CHARACTER(LEN=5),
INTENT(in) :: isch
682 REAL(prcn),
DIMENSION(:),
POINTER,
OPTIONAL:: weight_pointer
684 REAL(prcn),
DIMENSION(:),
ALLOCATABLE:: zetacsi
690 dx(i) = coor(i+1) - coor(i)
700 zeta = (ppos - coor(iorig))/dx(iorig)
708 xval(i) = shape2(zeta,i)
712 xval(i) = shape3(zeta,i,dx)
716 xval(i) = shape4(zeta,i,dx)
720 xval(i) = shape5(zeta,i,dx)
724 xval(i) = shape6(zeta,i,dx)
733 ALLOCATE(zetacsi(order))
745 zetacsi(i) = (-ppos + coor(i))/dx(1)
748 xval(i) = shape4csi(zetacsi(i),i,dx,1)
761 interp_scl = interp_scl + scalar(i)*xval(i)
767 IF (
PRESENT(weight_pointer))
THEN 768 weight_pointer => xval
776 SUBROUTINE interp_oned_vector(coor,vector,ppos,interp_vec,order,&
787 REAL(prcn),
DIMENSION(:),
INTENT(in):: coor
788 REAL(prcn),
DIMENSION(:,:),
INTENT(in):: vector
789 REAL(prcn),
INTENT(in):: ppos
790 REAL(prcn),
DIMENSION(:),
INTENT(out):: interp_vec
791 INTEGER,
INTENT(in) :: order
792 CHARACTER(LEN=5) :: fun
793 REAL(prcn),
DIMENSION(:),
POINTER,
OPTIONAL:: weight_pointer
795 INTEGER:: vec_size, nv, i
796 REAL(prcn),
DIMENSION(:),
POINTER:: weights_scalar
801 vec_size =
SIZE(vector,2)
807 ,interp_vec(1),order, fun, weights_scalar)
815 interp_vec(nv) = interp_vec(nv) &
816 + vector(i,nv)*weights_scalar(i)
823 IF (
PRESENT(weight_pointer))
THEN 824 weight_pointer => weights_scalar
827 END SUBROUTINE interp_oned_vector
832 SUBROUTINE interp_twod_scalar(coor,scalar,ppos,interp_scl,order,&
842 REAL(prcn),
DIMENSION(:,:,:),
INTENT(in):: coor
843 REAL(prcn),
DIMENSION(:,:),
INTENT(in):: scalar
844 REAL(prcn),
DIMENSION(2),
INTENT(in):: ppos
845 REAL(prcn),
INTENT(out):: interp_scl
846 INTEGER,
INTENT(in):: order
847 CHARACTER(LEN=5),
INTENT(in) :: isch
848 REAL(prcn),
DIMENSION(:,:,:),
POINTER,
OPTIONAL:: weight_pointer
850 REAL(prcn),
DIMENSION(:,:),
ALLOCATABLE:: zetacsi
853 REAL(prcn),
DIMENSION(2):: zeta
862 dx(i) = coor(i+1,1,1)-coor(i,1,1)
863 dy(i) = coor(1,i+1,2)-coor(1,i,2)
880 zeta(1:2) = ppos(1:2) - coor(iorig,iorig,1:2)
881 zeta(1) = zeta(1)/dx(iorig)
882 zeta(2) = zeta(2)/dy(iorig)
890 xval(i) = shape2(zeta(1),i)
891 yval(i) = shape2(zeta(2),i)
896 xval(i) = shape3(zeta(1),i,dx)
897 yval(i) = shape3(zeta(2),i,dy)
903 xval(i) = shape4(zeta(1),i,dx)
904 yval(i) = shape4(zeta(2),i,dy)
914 xval(i) = shape5(zeta(1),i,dx)
915 yval(i) = shape5(zeta(2),i,dy)
920 xval(i) = shape6(zeta(1),i,dx)
921 yval(i) = shape6(zeta(2),i,dy)
933 ALLOCATE(zetacsi(2,order))
943 zetacsi(1,i) = (-ppos(1) + coor(i,1,1))/dx(1)
944 zetacsi(2,i) = (-ppos(2) + coor(1,i,2))/dy(1)
948 xval(i) = shape4csi(zetacsi(1,i),i,dx,1)
949 yval(i) = shape4csi(zetacsi(2,i),i,dy,2)
957 zetacsi(1,i) = ((-ppos(1) + coor(i,1,1))/dx(1))
958 zetacsi(2,i) =((-ppos(2) + coor(1,i,2))/dy(1))
968 if((xval(1)-coor(1,1,1)).lt.dx(1))
then 969 xval(i) = shape3csileft(zetacsi(1,i),i,dx,1)
971 xval(i) = shape3csiright(zetacsi(1,i),i,dx,1)
973 if((yval(1)-coor(1,1,2)).lt.dy(1))
then 975 yval(i) = shape3csileft(zetacsi(2,i),i,dy,2)
978 yval(i) = shape3csiright(zetacsi(2,i),i,dy,2)
981 print*,
'zeta = ',zetacsi(1,i), xval(i),i
1004 weights(i,j,1) = xval(i)*yval(j)
1005 interp_scl = interp_scl + scalar(i,j)*weights(i,j,1)
1013 IF (
PRESENT(weight_pointer))
THEN 1014 weight_pointer => weights
1017 END SUBROUTINE interp_twod_scalar
1022 SUBROUTINE interp_twod_vector(coor,vector,ppos,interp_vec,order,&
1033 REAL(prcn),
DIMENSION(:,:,:),
INTENT(in):: coor, vector
1034 REAL(prcn),
DIMENSION(2),
INTENT(in):: ppos
1035 REAL(prcn),
DIMENSION(:),
INTENT(out):: interp_vec
1036 INTEGER,
INTENT(in):: order
1037 CHARACTER(LEN=5) :: fun
1038 REAL(prcn),
DIMENSION(:,:,:),
POINTER,
OPTIONAL:: weight_pointer
1042 REAL(prcn),
DIMENSION(:,:,:),
POINTER:: weights_scalar
1049 vec_size =
SIZE(vector,3)
1052 CALL interp_twod_scalar(coor,vector(:,:,1),ppos &
1053 ,interp_vec(1),order,fun,weights_scalar)
1059 interp_vec(nv) = 0.0
1063 interp_vec(nv) = interp_vec(nv) &
1064 + vector(i,j,nv)*weights_scalar(i,j,1)
1073 IF (
PRESENT(weight_pointer))
THEN 1074 weight_pointer => weights_scalar
1077 END SUBROUTINE interp_twod_vector
1082 SUBROUTINE interp_threed_scalar(coor,scalar,ppos,interp_scl,order,&
1083 isch,weight_pointer)
1092 REAL(prcn),
DIMENSION(:,:,:,:),
INTENT(in):: coor
1093 REAL(prcn),
DIMENSION(:,:,:),
INTENT(in):: scalar
1094 REAL(prcn),
DIMENSION(3),
INTENT(in):: ppos
1095 REAL(prcn),
INTENT(out):: interp_scl
1096 INTEGER,
INTENT(in):: order
1097 CHARACTER(LEN=5),
INTENT(in) :: isch
1098 REAL(prcn),
DIMENSION(:,:,:),
POINTER,
OPTIONAL:: weight_pointer
1100 REAL(prcn),
DIMENSION(:,:),
ALLOCATABLE:: zetacsi
1103 REAL(prcn) :: zeta(3), zetasph, sigma, bandwidth
1113 dx(i) = coor(i+1,1,1,1)-coor(i,1,1,1)
1114 dy(i) = coor(1,i+1,1,2)-coor(1,i,1,2)
1115 dz(i) = coor(1,1,i+1,3)-coor(1,1,i,3)
1133 zeta(1:3) = ppos(1:3) - coor(iorig,iorig,iorig,1:3)
1134 zeta(1) = zeta(1)/dx(iorig)
1135 zeta(2) = zeta(2)/dy(iorig)
1136 zeta(3) = zeta(3)/dz(iorig)
1144 xval(i) = shape2(zeta(1),i)
1145 yval(i) = shape2(zeta(2),i)
1146 zval(i) = shape2(zeta(3),i)
1150 xval(i) = shape3(zeta(1),i,dx)
1151 yval(i) = shape3(zeta(2),i,dy)
1152 zval(i) = shape3(zeta(3),i,dz)
1157 xval(i) = shape4(zeta(1),i,dx)
1158 yval(i) = shape4(zeta(2),i,dy)
1159 zval(i) = shape4(zeta(3),i,dz)
1168 xval(i) = shape5(zeta(1),i,dx)
1169 yval(i) = shape5(zeta(2),i,dy)
1170 zval(i) = shape5(zeta(3),i,dz)
1174 xval(i) = shape6(zeta(1),i,dx)
1175 yval(i) = shape6(zeta(2),i,dy)
1176 zval(i) = shape6(zeta(3),i,dz)
1189 ALLOCATE(zetacsi(3,order))
1199 zetacsi(1,i) = (-ppos(1) + coor(i,1,1,1))/dx(1)
1200 zetacsi(2,i) = (-ppos(2) + coor(1,i,1,2))/dy(1)
1201 zetacsi(3,i) = (-ppos(3) + coor(1,1,i,3))/dz(1)
1204 xval(i) = shape4csi(zetacsi(1,i),i,dx,1)
1205 yval(i) = shape4csi(zetacsi(2,i),i,dy,2)
1206 zval(i) = shape4csi(zetacsi(3,i),i,dz,3)
1213 zetacsi(1,i) = ((-ppos(1) + coor(i,1,1,1))/dx(1))
1214 zetacsi(2,i) =((-ppos(2) + coor(1,i,1,2))/dy(1))
1215 zetacsi(3,i) = ((-ppos(3) + coor(1,1,i,3))/dz(1))
1224 if((xval(1)-coor(1,1,1,1)).lt.dx(1))
then 1225 xval(i) = shape3csileft(zetacsi(1,i),i,dx,1)
1227 xval(i) = shape3csiright(zetacsi(1,i),i,dx,1)
1229 if((yval(1)-coor(1,1,1,2)).lt.dy(1))
then 1231 yval(i) = shape3csileft(zetacsi(2,i),i,dy,2)
1234 yval(i) = shape3csiright(zetacsi(2,i),i,dy,2)
1236 if((zval(1)-coor(1,1,1,3)).lt.dz(1))
then 1237 zval(i) = shape3csileft(zetacsi(3,i),i,dz,3)
1240 zval(i) = shape3csiright(zetacsi(3,i),i,dz,3)
1243 print*,
'zeta = ',zetacsi(1,i), xval(i),i
1256 bandwidth =
one*(dx(1)*dy(1))**(
half)
1261 zetasph = (-ppos(1) + coor(i,j,k,1))**2.0
1262 zetasph = zetasph + (-ppos(2) + coor(i,j,k,2))**2.0
1264 zetasph = sqrt(zetasph)
1266 zetasph = zetasph/bandwidth
1268 if(zetasph.ge.
zero.and.zetasph.lt.
one)
then 1269 weights(i,j,k) =
one - (three/two)*zetasph**two&
1270 & + (three/four)*zetasph**three
1271 elseif(zetasph.ge.
one.and.zetasph.lt.two)
then 1272 weights(i,j,k) = fourth*(two-zetasph)**three
1274 weights(i,j,k) =
zero 1276 weights(i,j,k) = (sigma*weights(i,j,k))
1293 weights(i,j,k) = xval(i)*yval(j)*zval(k)
1308 interp_scl = interp_scl + scalar(i,j,k)*weights(i,j,k)
1317 IF (
PRESENT(weight_pointer))
THEN 1318 weight_pointer => weights
1320 END SUBROUTINE interp_threed_scalar
1326 SUBROUTINE interp_threed_vector(coor,vector,ppos,interp_vec,order,&
1337 REAL(prcn),
DIMENSION(:,:,:,:),
INTENT(in):: coor, vector
1338 REAL(prcn),
DIMENSION(3),
INTENT(in):: ppos
1339 REAL(prcn),
DIMENSION(:),
INTENT(out):: interp_vec
1340 INTEGER,
INTENT(in):: order
1341 CHARACTER(LEN=5) :: fun
1342 REAL(prcn),
DIMENSION(:,:,:),
POINTER,
OPTIONAL:: weight_pointer
1345 INTEGER:: i, j, k, nv
1346 REAL(prcn),
DIMENSION(:,:,:),
POINTER:: weights_scalar
1353 vec_size =
SIZE(vector,4)
1356 CALL interp_threed_scalar(coor,vector(:,:,:,1),ppos &
1357 ,interp_vec(1),order,fun,weights_scalar)
1363 interp_vec(nv) = 0.0
1367 interp_vec(nv) = interp_vec(nv) &
1368 + vector(i,j,k,nv)*weights_scalar(i,j,k)
1377 IF (
PRESENT(weight_pointer))
THEN 1378 weight_pointer => weights_scalar
1381 END SUBROUTINE interp_threed_vector
1386 SUBROUTINE calc_weightderiv_threed(coor,ppos,weight_pointer,order, isch)
1393 REAL(prcn),
DIMENSION(:,:,:,:),
INTENT(in):: coor
1394 REAL(prcn),
DIMENSION(3),
INTENT(in):: ppos
1395 REAL(prcn),
DIMENSION(:,:,:,:) :: weight_pointer
1396 INTEGER,
INTENT(in) :: order
1397 CHARACTER(len=5),
INTENT(in) :: isch
1399 INTEGER:: i, j, k, kk
1400 Real(prcn) :: dx1,dy1,dz1
1402 REAL(prcn):: zeta(3), zetasph, bandwidth, sigma, tmp
1403 REAL(prcn),
DIMENSION(3,order) :: zetacsi
1407 weight_pointer =
zero 1419 dx(i) = coor(i+1,1,1,1)-coor(i,1,1,1)
1420 dy(i) = coor(1,i+1,1,2)-coor(1,i,1,2)
1421 dz(i) = coor(1,1,i+1,3)-coor(1,1,i,3)
1445 zetacsi(1,i) = (-ppos(1) + coor(i,1,1,1))/dx(1)
1446 zetacsi(2,i) = (-ppos(2) + coor(1,i,1,2))/dy(1)
1447 zetacsi(3,i) = (-ppos(3) + coor(1,1,i,3))/dz(1)
1451 xval(i) = (shape4deriv_csi(zetacsi(1,i),i,dx))/dx(1)
1452 yval(i) = shape4csi(zetacsi(2,i),i,dy,2)
1453 zval(i) = shape4csi(zetacsi(3,i),i,dz,3)
1455 xval(i) = shape4csi(zetacsi(1,i),i,dx,1)
1456 yval(i) = (shape4deriv_csi(zetacsi(2,i),i,dy))/(dy(1))
1457 zval(i) = shape4csi(zetacsi(3,i),i,dz,3)
1459 xval(i) = shape4csi(zetacsi(1,i),i,dx,1)
1460 yval(i) = shape4csi(zetacsi(2,i),i,dy,2)
1461 zval(i) = (shape4deriv_csi(zetacsi(3,i),i,dz))/(dz(1))
1465 dx1 = coor(order,1,1,1)-coor(1,1,1,1)
1466 dy1 = coor(1,order,1,2)-coor(1,1,1,2)
1467 dz1 = coor(1,1,order,3)-coor(1,1,1,3)
1468 zetacsi(1,i) = (ppos(1) - coor(1,1,1,1))/dx1
1469 zetacsi(2,i) = (ppos(2) - coor(1,1,1,2))/dy1
1470 zetacsi(3,i) = (ppos(3) - coor(1,1,1,3))/dz1
1473 xval(i) = (shape3deriv_csi(zetacsi(1,i),i,dx))/dx1
1474 yval(i) = shape3csileft(zetacsi(2,i),i,dy,2)
1475 zval(i) = shape3csileft(zetacsi(3,i),i,dz,3)
1477 xval(i) = shape3csileft(zetacsi(1,i),i,dx,1)
1478 yval(i) = (shape3deriv_csi(zetacsi(2,i),i,dy))/(dy1)
1479 zval(i) = shape3csileft(zetacsi(3,i),i,dz,3)
1481 xval(i) = shape3csileft(zetacsi(1,i),i,dx,1)
1482 yval(i) = shape3csileft(zetacsi(2,i),i,dy,2)
1483 zval(i) = (shape3deriv_csi(zetacsi(3,i),i,dz))/(dz1)
1490 weight_pointer(i,j,kk,k) = xval(i)*yval(j)*zval(kk)
1497 zeta(1:3) = ppos(1:3) - coor(iorig,iorig,iorig,1:3)
1498 zeta(1) = zeta(1)/dx(iorig)
1499 zeta(2) = zeta(2)/dy(iorig)
1500 zeta(3) = zeta(3)/dz(iorig)
1506 xval(i) = (shape4deriv(zeta(1),i,dx))/dx(iorig)
1507 yval(i) = shape4(zeta(2),i,dy)
1508 zval(i) = shape4(zeta(3),i,dz)
1510 xval(i) = shape4(zeta(1),i,dx)
1511 yval(i) = (shape4deriv(zeta(2),i,dy))/(dy(iorig))
1512 zval(i) = shape4(zeta(3),i,dz)
1514 xval(i) = shape4(zeta(1),i,dx)
1515 yval(i) = shape4(zeta(2),i,dy)
1516 zval(i) = (shape4deriv(zeta(3),i,dz))/(dz(iorig))
1522 xval(i) = (shape2deriv(zeta(1),i))/dx(iorig)
1523 yval(i) = shape2(zeta(2),i)
1524 zval(i) = shape2(zeta(3),i)
1526 xval(i) = shape2(zeta(1),i)
1527 yval(i) = (shape2deriv(zeta(2),i))/(dy(iorig))
1528 zval(i) = shape2(zeta(3),i)
1530 xval(i) = shape2(zeta(1),i)
1531 yval(i) = shape2(zeta(2),i)
1532 zval(i) = (shape2deriv(zeta(3),i))/(dz(iorig))
1540 weight_pointer(i,j,kk,k) = -xval(i)*yval(j)*zval(kk)
1550 bandwidth = one*(dx(1)*dy(1))**(half)
1556 zetasph = (-ppos(1) + coor(i,j,k,1))**2.0
1557 zetasph = zetasph + (-ppos(2) + coor(i,j,k,2))**2.0
1559 zetasph = sqrt(zetasph)
1561 zetasph = zetasph/bandwidth
1563 if(zetasph.ge.zero.and.zetasph.lt.one)
then 1564 tmp = -two*(three/two)*zetasph &
1565 & + three*(three/four)*zetasph**two
1566 elseif(zetasph.ge.one.and.zetasph.lt.two)
then 1567 tmp = -three*fourth*(two-zetasph)**two
1572 weight_pointer(i,j,k,1) = (tmp/zetasph)*(-ppos(1) &
1574 weight_pointer(i,j,k,2) = (tmp/zetasph)*(-ppos(2) &
1576 weight_pointer(i,j,k,3) = (tmp/zetasph)*(-ppos(3) &
1578 weight_pointer(i,j,k,:) = (sigma*weight_pointer(i,j&
1589 END SUBROUTINE calc_weightderiv_threed
1594 SUBROUTINE calc_weightderiv_twod(coor,ppos,weight_pointer,order, isch)
1601 REAL(prcn),
DIMENSION(:,:,:),
INTENT(in):: coor
1602 REAL(prcn),
DIMENSION(2),
INTENT(in):: ppos
1603 REAL(prcn),
DIMENSION(:,:,:,:) :: weight_pointer
1604 INTEGER,
INTENT(in) :: order
1605 CHARACTER(len=5),
INTENT(in) :: isch
1608 REAL(prcn) :: dx1,dy1
1610 REAL(prcn):: zeta(3), zetasph, bandwidth, sigma, tmp
1611 REAL(prcn),
DIMENSION(2,order) :: zetacsi
1615 weight_pointer = zero
1627 dx(i) = coor(i+1,1,1)-coor(i,1,1)
1628 dy(i) = coor(1,i+1,2)-coor(1,i,2)
1652 zetacsi(1,i) = (-ppos(1) + coor(i,1,1))/dx(1)
1653 zetacsi(2,i) = (-ppos(2) + coor(1,i,2))/dy(1)
1658 xval(i) = (shape4deriv_csi(zetacsi(1,i),i,dx))/dx(1)
1659 yval(i) = shape4csi(zetacsi(2,i),i,dy,2)
1661 xval(i) = shape4csi(zetacsi(1,i),i,dx,1)
1662 yval(i) = (shape4deriv_csi(zetacsi(2,i),i,dy))/(dy(1))
1666 dx1 = coor(order,1,1)-coor(1,1,1)
1667 dy1 = coor(1,order,2)-coor(1,1,2)
1668 zetacsi(1,i) = (ppos(1) - coor(1,1,1))/dx1
1669 zetacsi(2,i) = (ppos(2) - coor(1,1,2))/dy1
1672 xval(i) = (shape3deriv_csi(zetacsi(1,i),i,dx))/dx1
1673 yval(i) = shape3csileft(zetacsi(2,i),i,dy,2)
1675 xval(i) = shape3csileft(zetacsi(1,i),i,dx,1)
1676 yval(i) = (shape3deriv_csi(zetacsi(2,i),i,dy))/(dy1)
1682 weight_pointer(i,j,1,k) = xval(i)*yval(j)
1688 zeta(1:2) = ppos(1:2) - coor(iorig,iorig,1:2)
1689 zeta(1) = zeta(1)/dx(iorig)
1690 zeta(2) = zeta(2)/dy(iorig)
1696 xval(i) = (shape4deriv(zeta(1),i,dx))/dx(iorig)
1697 yval(i) = shape4(zeta(2),i,dy)
1699 xval(i) = shape4(zeta(1),i,dx)
1700 yval(i) = (shape4deriv(zeta(2),i,dy))/(dy(iorig))
1706 xval(i) = (shape2deriv(zeta(1),i))/dx(iorig)
1707 yval(i) = shape2(zeta(2),i)
1709 xval(i) = shape2(zeta(1),i)
1710 yval(i) = (shape2deriv(zeta(2),i))/(dy(iorig))
1717 weight_pointer(i,j,1,k) = -xval(i)*yval(j)
1726 bandwidth = one*(dx(1)*dy(1))**(half)
1731 zetasph = (-ppos(1) + coor(i,j,1))**2.0
1732 zetasph = zetasph + (-ppos(2) + coor(i,j,2))**2.0
1734 zetasph = sqrt(zetasph)
1736 zetasph = zetasph/bandwidth
1738 if(zetasph.ge.zero.and.zetasph.lt.one)
then 1739 tmp = -two*(three/two)*zetasph &
1740 & + three*(three/four)*zetasph**two
1741 elseif(zetasph.ge.one.and.zetasph.lt.two)
then 1742 tmp = -three*fourth*(two-zetasph)**two
1747 weight_pointer(i,j,1,1) = (tmp/zetasph)*(-ppos(1) &
1749 weight_pointer(i,j,1,2) = (tmp/zetasph)*(-ppos(2) &
1753 weight_pointer(i,j,1,:) = (sigma*weight_pointer(i,j&
1764 END SUBROUTINE calc_weightderiv_twod
1769 FUNCTION justweights(coor,ppos)
1776 REAL(prcn),
DIMENSION(:,:,:),
POINTER:: justweights
1777 REAL(prcn),
DIMENSION(:,:,:,:),
INTENT(IN):: coor
1778 REAL(prcn),
DIMENSION(3),
INTENT(IN):: ppos
1780 INTEGER,
PARAMETER:: order=2
1781 INTEGER:: i, j, k, iorig
1782 REAL(prcn):: dxl, dyl, dzl
1783 REAL(prcn),
DIMENSION(3):: zeta
1788 dxl = coor(order,1,1,1)-coor(order-1,1,1,1)
1789 dyl = coor(1,order,1,2)-coor(1,order-1,1,2)
1790 dzl = coor(1,1,order,3)-coor(1,1,order-1,3)
1792 zeta(1:3) = ppos(1:3) - coor(iorig,iorig,iorig,1:3)
1793 zeta(1) = zeta(1)/dxl
1794 zeta(2) = zeta(2)/dyl
1795 zeta(3) = zeta(3)/dzl
1798 xval(i) = shape2(zeta(1),i)
1799 yval(i) = shape2(zeta(2),i)
1800 zval(i) = shape2(zeta(3),i)
1809 weights(i,j,k) = xval(i)*yval(j)*zval(k)
1815 justweights => weights
1816 END FUNCTION justweights
1821 FUNCTION shape2(zeta,i)
1843 FUNCTION shape3(zeta,i,dx)
1852 REAL(prcn),
DIMENSION(:):: dx
1854 REAL(prcn):: zh, num, denom
1860 denom = dx(1)*(dx(1)+dx(2))
1861 num = (zh - dx(1))*(zh - dx(1) - dx(2))
1865 denom = -dx(1)*dx(2)
1866 num = zh*(zh - dx(1) - dx(2))
1870 denom = dx(2)*(dx(1)+dx(2))
1871 num = zh*(zh - dx(1))
1879 FUNCTION shape4(zeta,i,dx)
1888 REAL(prcn),
DIMENSION(:):: dx
1890 REAL(prcn):: r1, r2, c1, c2, c3
1899 c3 = 1.0/(1.0 + r1 + r1*r2)
1900 shape4 = -c1*c3*(r1**3.0)*(zeta)*(zeta-1.0)*(zeta-(1.0+r2))
1904 shape4 = c2*(zeta-1.0)*(zeta*r1+1.0)*(zeta-(1.0+r2))
1908 shape4 = -(c1/r2)*(zeta)*(zeta*r1+1.0)*(zeta-(1.0+r2))
1912 c3 = 1.0/(1.0 + r1 + r1*r2)
1913 shape4 = (c3*c2/r2)*(zeta)*(zeta*r1+1.0)*(zeta-1.0)
1921 FUNCTION shape5(zeta,i,dx)
1930 REAL(prcn),
DIMENSION(:):: dx
1932 REAL(prcn):: d1, d2, d3, d4
1933 REAL(prcn):: num, denom, zh
1944 num = zh*(zh -dx(2))*(zh -dx(2) -dx(3)) &
1945 *(zh -dx(2) -dx(3) -dx(4))
1954 num = (zh +dx(1))*(zh -dx(2))*(zh -dx(2) -dx(3)) &
1955 *(zh -dx(2) -dx(3) -dx(4))
1964 num = (zh +dx(1))*(zh)*(zh -dx(2) -dx(3)) &
1965 *(zh -dx(2) -dx(3) -dx(4))
1968 d1 = dx(1) + dx(2) + dx(3)
1974 num = (zh +dx(1))*(zh)*(zh -dx(2)) &
1975 *(zh -dx(2) -dx(3) -dx(4))
1978 d1 = dx(1) + dx(2) + dx(3) + dx(4)
1984 num = (zh +dx(1))*(zh)*(zh -dx(2)) &
1993 FUNCTION shape6(zeta,i,dx)
2001 REAL(prcn),
DIMENSION(:):: dx
2003 REAL(prcn):: d1, d2, d3, d4, d5
2004 REAL(prcn):: num, denom, zh
2014 denom = d1*d2*d3*d4*d5
2016 num = (zh + dx(2))*(zh)*(zh - dx(3)) &
2017 *(zh -dx(3) -dx(4))*(zh - dx(3) -dx(4) -dx(5))
2025 denom = d1*d2*d3*d4*d5
2027 num = (zh +dx(1) +dx(2))*(zh)*(zh -dx(3)) &
2028 *(zh -dx(3) -dx(4))*(zh - dx(3) -dx(4) -dx(5))
2036 denom = d1*d2*d3*d4*d5
2038 num = (zh +dx(1) +dx(2))*(zh +dx(2))*(zh -dx(3)) &
2039 *(zh -dx(3) -dx(4))*(zh - dx(3) -dx(4) -dx(5))
2042 d1 = dx(1) + dx(2) + dx(3)
2047 denom = d1*d2*d3*d4*d5
2049 num = (zh +dx(1) +dx(2))*(zh +dx(2))*(zh) &
2050 *(zh -dx(3) -dx(4))*(zh - dx(3) -dx(4) -dx(5))
2053 d1 = dx(1) + dx(2) + dx(3) + dx(4)
2058 denom = d1*d2*d3*d4*d5
2060 num = (zh +dx(1) +dx(2))*(zh +dx(2))*(zh) &
2061 *(zh -dx(3))*(zh - dx(3) -dx(4) -dx(5))
2064 d1 = dx(1) + dx(2) + dx(3) + dx(4) + dx(5)
2069 denom = d1*d2*d3*d4*d5
2071 num = (zh +dx(1) +dx(2))*(zh +dx(2))*(zh) &
2072 *(zh -dx(3))*(zh - dx(3) -dx(4))
2079 FUNCTION shape3deriv_csi(zeta,i,dx)
2085 REAL(prcn):: shape3deriv_csi
2087 REAL(prcn),
DIMENSION(:):: dx
2104 shape3deriv_csi = -two*(1-zeta)
2106 shape3deriv_csi = -two*zeta+two*(1-zeta)
2108 shape3deriv_csi = two*zeta
2110 END FUNCTION shape3deriv_csi
2115 FUNCTION shape4deriv_csi(zeta,i,dx)
2121 REAL(prcn):: shape4deriv_csi
2123 REAL(prcn),
DIMENSION(:):: dx
2127 IF (zeta.GE.-two.AND.zeta.LE.-one)
THEN 2128 shape4deriv_csi = (half)*(two+zeta)**2.0
2129 ELSEIF(zeta.GT.-one.AND.zeta.LE.zero)
THEN 2130 shape4deriv_csi = (one/six)*(-9.0*zeta**2.0-12.0*zeta)
2131 ELSEIF(zeta.GT.zero.AND.zeta.LE.one)
THEN 2132 shape4deriv_csi = (one/six)*(9.0*zeta**2.0-12.0*zeta)
2133 ELSEIF(zeta.GT.one.AND.zeta.LE.two)
THEN 2134 shape4deriv_csi = (-half)*(two-zeta)**2.0
2136 shape4deriv_csi = zero
2138 END FUNCTION shape4deriv_csi
2142 FUNCTION shape4deriv(zeta,i,dx)
2148 REAL(prcn):: shape4deriv
2150 REAL(prcn),
DIMENSION(:):: dx
2153 REAL(prcn):: r1, r2, c1, c2, c3
2162 c3 = 1.0/(1.0 + r1 + r1*r2)
2163 tmp = -c1*c3*(r1**3.0)
2165 shape4deriv = (1.0)*(zeta-1.0)*(zeta-(1.0+r2))&
2166 + (zeta)*(1.0)*(zeta-(1.0+r2))&
2167 +(zeta)*(zeta-1.0)*(1.0)
2168 shape4deriv = tmp*shape4deriv
2172 shape4deriv = (1.0)*(zeta*r1+1.0)*(zeta-(1.0+r2)) &
2173 +(zeta-1.0)*(r1)*(zeta-(1.0+r2)) &
2174 +(zeta-1.0)*(zeta*r1+1.0)*(1.0)
2175 shape4deriv = c2*shape4deriv
2179 shape4deriv = (1.0)*(zeta*r1+1.0)*(zeta-(1.0+r2))&
2180 +(zeta)*(r1)*(zeta-(1.0+r2))&
2181 +(zeta)*(zeta*r1+1.0)*(1.0)
2182 shape4deriv = tmp*shape4deriv
2185 c3 = 1.0/(1.0 + r1 + r1*r2)
2187 shape4deriv = (1.0)*(zeta*r1+1.0)*(zeta-1.0)&
2188 +(zeta)*(r1)*(zeta-1.0)&
2189 +(zeta)*(zeta*r1+1.0)*(1.0)
2190 shape4deriv = tmp*shape4deriv
2192 END FUNCTION shape4deriv
2197 FUNCTION shape2deriv(zeta,i)
2203 REAL(prcn):: shape2deriv
2214 END FUNCTION shape2deriv
2219 FUNCTION shape4csi(zeta,i,dx,dim)
2225 REAL(prcn):: shape4csi
2226 REAL(prcn),
INTENT(in):: zeta
2227 REAL(prcn),
DIMENSION(:),
INTENT(in):: dx
2228 INTEGER,
INTENT(in):: i,dim
2231 IF (zeta.GE.-two.AND.zeta.LE.-one)
THEN 2232 shape4csi = (one/six)*(two+zeta)**3.0
2233 ELSEIF(zeta.GT.-one.AND.zeta.LE.zero)
THEN 2234 shape4csi = (one/six)*(-3.0*zeta**3.0-six*zeta**2.0+4.0)
2235 ELSEIF(zeta.GT.zero.AND.zeta.LE.one)
THEN 2236 shape4csi = (one/six)*(3.0*zeta**3.0-six*zeta**2.0+4.0)
2237 ELSEIF(zeta.GT.one.AND.zeta.LE.two)
THEN 2238 shape4csi = (one/six)*(two-zeta)**3.0
2244 END FUNCTION shape4csi
2249 FUNCTION shape3csileft(zeta,i,dx,dim)
2255 REAL(prcn):: shape3csileft
2256 REAL(prcn),
INTENT(in):: zeta
2257 REAL(prcn),
DIMENSION(:),
INTENT(in):: dx
2258 INTEGER,
INTENT(in):: i,dim
2261 IF (zeta.GE.-one.AND.zeta.LE.zero)
THEN 2262 shape3csileft = (half)*(zeta+one)**2.0
2263 ELSEIF(zeta.GT.zero.AND.zeta.LE.one)
THEN 2264 shape3csileft = (half)*(-two*zeta**2.+2.0*zeta+1.0)
2265 ELSEIF(zeta.GT.one.AND.zeta.LE.two)
THEN 2266 shape3csileft = (half)*(zeta-two)**2.0
2268 shape3csileft = zero
2293 END FUNCTION shape3csileft
2298 FUNCTION shape3csiright(zeta,i,dx,dim)
2304 REAL(prcn):: shape3csiright
2305 REAL(prcn),
INTENT(in):: zeta
2306 REAL(prcn),
DIMENSION(:),
INTENT(in):: dx
2307 INTEGER,
INTENT(in):: i,dim
2310 IF (zeta.GE.-two.AND.zeta.LE.-one)
THEN 2311 shape3csiright = (half)*(two+zeta)**2.0
2312 ELSEIF(zeta.GT.-one.AND.zeta.LE.zero)
THEN 2313 shape3csiright = (half)*(-two*zeta**2.-two*zeta+one)
2314 ELSEIF(zeta.GT.zero.AND.zeta.LE.one)
THEN 2315 shape3csiright = (half)*(one-zeta)**2.0
2317 shape3csiright = zero
2320 END FUNCTION shape3csiright
2325 FUNCTION shape4new(pos,x,i)
2331 REAL(prcn):: shape4new
2333 REAL(prcn),
DIMENSION(:):: x
2335 REAL(prcn):: num,den
2340 num = (pos-x(2))*(pos - x(3))*(pos - x(4))
2341 den = (x(1) - x(2))*(x(1) - x(3))*(x(1) - x(4))
2344 num = (pos-x(1))*(pos - x(3))*(pos - x(4))
2345 den = (x(2) - x(1))*(x(2) - x(3))*(x(2) - x(4))
2348 num = (pos-x(1))*(pos - x(2))*(pos - x(4))
2349 den = (x(3) - x(1))*(x(3) - x(2))*(x(3) - x(4))
2352 num = (pos-x(1))*(pos - x(2))*(pos - x(3))
2353 den = (x(4) - x(1))*(x(4) - x(2))*(x(4) - x(3))
2356 END FUNCTION shape4new
2370 INTEGER,
INTENT(in) :: choice
2371 INTEGER :: order_orig
2375 IF(choice.EQ.1)
THEN 2376 interp_scheme =
'lpi' 2378 ELSE IF(choice.EQ.2)
THEN 2379 interp_scheme =
'lpi' 2381 ELSE IF(choice.EQ.3)
THEN 2382 interp_scheme =
'csi' 2403 IF(.not.
allocated(gstencil))
THEN 2405 ALLOCATE(gstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2406 ELSEIF(
ALLOCATED(gstencil).AND.order_orig.NE.order)
THEN 2407 DEALLOCATE(gstencil)
2408 ALLOCATE(gstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2411 IF(.not.
allocated(vstencil))
THEN 2412 ALLOCATE(vstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2413 ELSEIF(
ALLOCATED(vstencil).AND.order_orig.NE.order)
THEN 2414 DEALLOCATE(vstencil)
2415 ALLOCATE(vstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2418 IF(.not.
allocated(pgradstencil))
THEN 2419 ALLOCATE(pgradstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2420 ELSEIF(
ALLOCATED(pgradstencil).AND.order_orig.NE.order)
THEN 2421 DEALLOCATE(pgradstencil)
2422 ALLOCATE(pgradstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2425 IF(.not.
allocated(psgradstencil))
THEN 2426 ALLOCATE(psgradstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2427 ELSEIF(
ALLOCATED(psgradstencil).AND.order_orig.NE.order)
THEN 2428 DEALLOCATE(psgradstencil)
2429 ALLOCATE(psgradstencil(order,order,max(1*(3-dimn), order*(dimn-2)),3))
2432 IF(.not.
allocated(vel_sol_stencil))
THEN 2433 ALLOCATE(vel_sol_stencil(order,order,max(1*(3-dimn), order*(dimn-2)),3,
dim_m))
2434 ELSEIF(
ALLOCATED(vel_sol_stencil).AND.order_orig.NE.order)
THEN 2435 DEALLOCATE(vel_sol_stencil)
2436 ALLOCATE(vel_sol_stencil(order,order,max(1*(3-dimn), order*(dimn-2)),3,
dim_m))
2439 IF(.not.
allocated(sstencil))
THEN 2440 ALLOCATE(sstencil(order,order,max(1*(3-dimn), order*(dimn-2))))
2441 ELSEIF(
ALLOCATED(sstencil).AND.order_orig.NE.order)
THEN 2442 DEALLOCATE(sstencil)
2443 ALLOCATE(sstencil(order,order,max(1*(3-dimn), order*(dimn-2))))
subroutine interp_oned_scalar(coor, scalar, ppos, interp_scl, order, isch, weight_pointer)
double precision, parameter one
subroutine, public set_interpolation_stencil(PC, IW, IE, JS, JN, KB, KTP, isch, dimprob, ordernew)
double precision, parameter half
subroutine, public set_interpolation_scheme(choice)
subroutine, public interpolate_cc(NP, INTP_IJK, INTP_WEIGHTS, FOCUS)
double precision, parameter pi
subroutine set_interpolation_stencil_cc(NP, PC, IW, JS, KB, FOCUS)
subroutine, public set_interpolation_pstencil(pc, ib, ie, jb, je, kb, ke, isch, dimprob, ordernew)
double precision, parameter zero