8 subroutine ezspline_derivative1_r8(spline_o, i1, p1, f, ier)
11 type(EZspline1_r8) spline_o
12 integer,
intent(in) :: i1
13 real(ezspline_r8),
intent(in) :: p1
14 real(ezspline_r8),
intent(out) :: f
15 integer,
intent(out) :: ier
39 if(i1 >1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
40 ier = 24;
if(spline_o%isLinear==1) ier = 46
44 if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
52 if(spline_o%isLinear == 0)
then
54 & spline_o%x1(1), spline_o%n1, &
56 & spline_o%fspl(1,1), &
60 & spline_o%x1(1), spline_o%n1, &
62 & spline_o%fspl(1,1), &
68 call ezmake_ict1(i1,ict)
71 & spline_o%x1(1), spline_o%n1, &
73 & spline_o%fspl(1,1), &
77 if(ifail /= 0) ier = 96
79 end subroutine ezspline_derivative1_r8
81 subroutine ezspline_derivative1_array_r8(spline_o, i1, k1, p1, f, ier)
84 type(EZspline1_r8) spline_o
85 integer,
intent(in) :: i1
86 integer,
intent(in) :: k1
87 real(ezspline_r8),
intent(in) :: p1(k1)
88 real(ezspline_r8),
intent(out) :: f(k1)
89 integer,
intent(out) :: ier
114 if(i1 >1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
115 ier = 24;
if(spline_o%isLinear==1) ier = 46
119 if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
127 if(spline_o%isLinear == 0)
then
128 call r8vecherm1(ict_herm, k1, p1, k1, f, &
129 & spline_o%n1, spline_o%x1pkg(1,1), &
130 & spline_o%fspl(1,1), &
133 call r8vecpc1(ict_herm, k1, p1, k1, f, &
134 & spline_o%n1, spline_o%x1pkg(1,1), &
135 & spline_o%fspl(1,1), &
141 call ezmake_ict1(i1,ict)
143 call r8vecspline(ict, k1, p1, k1, f, &
144 & spline_o%n1, spline_o%x1pkg(1,1), &
145 & spline_o%fspl(1,1), &
150 if(ifail /= 0) ier = 96
152 end subroutine ezspline_derivative1_array_r8
160 subroutine ezspline_derivative2_r8(spline_o, i1, i2, p1, p2, f, ier)
163 type(EZspline2_r8) spline_o
164 integer,
intent(in) :: i1, i2
165 real(ezspline_r8),
intent(in) :: p1, p2
166 real(ezspline_r8),
intent(out) :: f
167 integer,
intent(out) :: ier
181 if(i1<0 .OR. i2<0)
then
185 if(max(i1,i2) > 3)
then
190 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
191 ier = 24;
if(spline_o%isLinear==1) ier = 46
195 if(spline_o%isHybrid == 1)
then
197 call ezmake_ict2(i1,i2,ict)
199 call r8evintrp2d(p1, p2, &
200 & spline_o%x1(1), spline_o%n1, &
201 & spline_o%x2(1), spline_o%n2, &
202 & spline_o%hspline, spline_o%fspl(1,1,1), &
203 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
204 &
size(spline_o%fspl,3), &
207 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
208 if(i1 == 1 .AND. i2 == 0)
then
209 ict_herm = (/0, 1, 0, 0/)
210 else if(i1 == 0 .AND. i2 == 1)
then
211 ict_herm = (/0, 0, 1, 0/)
212 else if(i1 == 1 .AND. i2 == 1)
then
213 ict_herm = (/0, 0, 0, 1/)
215 ict_herm = (/1, 0, 0, 0/)
218 if(spline_o%isLinear == 0)
then
219 call r8herm2ev(p1, p2, &
220 & spline_o%x1(1), spline_o%n1, &
221 & spline_o%x2(1), spline_o%n2, &
222 & spline_o%ilin1, spline_o%ilin2, &
223 & spline_o%fspl(1,1,1), spline_o%n1, &
224 & ict_herm, f, ifail)
226 call r8pc2ev(p1, p2, &
227 & spline_o%x1(1), spline_o%n1, &
228 & spline_o%x2(1), spline_o%n2, &
229 & spline_o%ilin1, spline_o%ilin2, &
230 & spline_o%fspl(1,1,1), spline_o%n1, &
231 & ict_herm, f, ifail)
236 call ezmake_ict2(i1,i2,ict)
238 call r8evbicub(p1, p2, &
239 & spline_o%x1(1), spline_o%n1, &
240 & spline_o%x2(1), spline_o%n2, &
241 & spline_o%ilin1, spline_o%ilin2, &
242 & spline_o%fspl(1,1,1), spline_o%n1, &
246 if(ifail /= 0) ier = 96
248 end subroutine ezspline_derivative2_r8
252 subroutine ezspline_derivative2_array_r8(spline_o, i1, i2, &
253 & k1, k2, p1, p2, f, ier)
256 type(EZspline2_r8) spline_o
257 integer,
intent(in) :: i1, i2, k1, k2
258 real(ezspline_r8),
intent(in) :: p1(k1), p2(k2)
259 real(ezspline_r8),
intent(out) :: f(k1,k2)
260 integer,
intent(out) :: ier
267 real(ezspline_r8),
dimension(:),
allocatable :: p1_cloud, p2_cloud
279 if(i1<0 .OR. i2<0)
then
283 if(max(i1,i2) > 3)
then
288 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
289 ier = 24;
if(spline_o%isLinear==1) ier = 46
294 allocate(p1_cloud(k12), p2_cloud(k12), stat=ifail)
300 p1_cloud = reshape( &
301 & source=spread(source=p1, dim=2, ncopies=k2), &
303 p2_cloud = reshape( &
304 & source=spread(source=p2, dim=1, ncopies=k1), &
307 if(spline_o%isHybrid == 1)
then
309 call ezmake_ict2(i1,i2,ict)
311 call r8vecintrp2d(ict, k12, p1_cloud, p2_cloud, k12, f, &
312 & spline_o%n1, spline_o%x1pkg(1,1), &
313 & spline_o%n2, spline_o%x2pkg(1,1), &
314 & spline_o%hspline, spline_o%fspl(1,1,1), &
315 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
316 &
size(spline_o%fspl,3), &
319 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
320 if(i1 == 1 .AND. i2 == 0)
then
321 ict_herm = (/0, 1, 0, 0/)
322 else if(i1 == 0 .AND. i2 == 1)
then
323 ict_herm = (/0, 0, 1, 0/)
324 else if(i1 == 1 .AND. i2 == 1)
then
325 ict_herm = (/0, 0, 0, 1/)
327 ict_herm = (/1, 0, 0, 0/)
330 if(spline_o%isLinear == 0)
then
331 call r8vecherm2(ict_herm, k12, p1_cloud, p2_cloud, k12, f, &
332 & spline_o%n1, spline_o%x1pkg(1,1), &
333 & spline_o%n2, spline_o%x2pkg(1,1), &
334 & spline_o%fspl(1,1,1), spline_o%n1, &
337 call r8vecpc2(ict_herm, k12, p1_cloud, p2_cloud, k12, f, &
338 & spline_o%n1, spline_o%x1pkg(1,1), &
339 & spline_o%n2, spline_o%x2pkg(1,1), &
340 & spline_o%fspl(1,1,1), spline_o%n1, &
346 call ezmake_ict2(i1,i2,ict)
348 call r8vecbicub(ict, k12, p1_cloud, p2_cloud, k12, f, &
349 & spline_o%n1,spline_o%x1pkg(1,1), &
350 & spline_o%n2,spline_o%x2pkg(1,1), &
351 & spline_o%fspl(1,1,1), spline_o%n1, &
357 if(ifail /= 0) ier = 96
359 deallocate(p1_cloud, p2_cloud, stat=ifail)
366 end subroutine ezspline_derivative2_array_r8
369 subroutine ezspline_derivative2_cloud_r8(spline_o, i1, i2, &
373 type(EZspline2_r8) spline_o
374 integer,
intent(in) :: i1, i2, k
375 real(ezspline_r8),
intent(in) :: p1(k), p2(k)
376 real(ezspline_r8),
intent(out) :: f(k)
377 integer,
intent(out) :: ier
393 if(i1<0 .OR. i2<0)
then
397 if(max(i1,i2) > 3)
then
402 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
403 ier = 24;
if(spline_o%isLinear==1) ier = 46
407 if(spline_o%isHybrid == 1)
then
409 call ezmake_ict2(i1,i2,ict)
411 call r8vecintrp2d(ict, k, p1, p2, k, f, &
412 & spline_o%n1, spline_o%x1pkg(1,1), &
413 & spline_o%n2, spline_o%x2pkg(1,1), &
414 & spline_o%hspline, spline_o%fspl(1,1,1), &
415 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
416 &
size(spline_o%fspl,3), &
419 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
420 if(i1 == 1 .AND. i2 == 0)
then
421 ict_herm = (/0, 1, 0, 0/)
422 else if(i1 == 0 .AND. i2 == 1)
then
423 ict_herm = (/0, 0, 1, 0/)
424 else if(i1 == 1 .AND. i2 == 1)
then
425 ict_herm = (/0, 0, 0, 1/)
427 ict_herm = (/1, 0, 0, 0/)
430 if(spline_o%isLinear == 0)
then
431 call r8vecherm2(ict_herm, k, p1, p2, &
433 & spline_o%n1, spline_o%x1pkg(1,1), &
434 & spline_o%n2, spline_o%x2pkg(1,1), &
435 & spline_o%fspl(1,1,1), spline_o%n1, &
438 call r8vecpc2(ict_herm, k, p1, p2, &
440 & spline_o%n1, spline_o%x1pkg(1,1), &
441 & spline_o%n2, spline_o%x2pkg(1,1), &
442 & spline_o%fspl(1,1,1), spline_o%n1, &
448 call ezmake_ict2(i1,i2,ict)
450 call r8vecbicub(ict, k, p1, p2, &
452 & spline_o%n1, spline_o%x1pkg(1,1), &
453 & spline_o%n2, spline_o%x2pkg(1,1), &
454 & spline_o%fspl(1,1,1), spline_o%n1, &
459 if(ifail /= 0) ier = 96
461 end subroutine ezspline_derivative2_cloud_r8
468 subroutine ezspline_derivative3_r8(spline_o, i1, i2, i3, p1, p2, p3, f, ier)
471 type(EZspline3_r8) spline_o
472 integer,
intent(in) :: i1, i2, i3
473 real(ezspline_r8),
intent(in) :: p1, p2, p3
474 real(ezspline_r8),
intent(out) :: f
475 integer,
intent(out) :: ier
490 if(i1<0 .OR. i2<0 .OR. i3<0)
then
494 if(max(i1,max(i2,i3)) > 3)
then
499 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
500 ier = 24;
if(spline_o%isLinear==1) ier = 46
504 if(spline_o%isHybrid == 1)
then
506 call ezmake_ict3(i1,i2,i3,ict)
508 call r8evintrp3d(p1, p2, p3, &
509 & spline_o%x1(1), spline_o%n1, &
510 & spline_o%x2(1), spline_o%n2, &
511 & spline_o%x3(1), spline_o%n3, &
512 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
513 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
514 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
517 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
518 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
519 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
520 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
521 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
522 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
523 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
524 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
525 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
526 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
527 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
528 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
529 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
530 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
531 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
533 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
536 if(spline_o%isLinear == 0)
then
537 call r8herm3ev(p1, p2, p3, &
538 & spline_o%x1(1), spline_o%n1, &
539 & spline_o%x2(1), spline_o%n2, &
540 & spline_o%x3(1), spline_o%n3, &
541 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
542 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
543 & ict_herm, f, ifail)
545 call r8pc3ev(p1, p2, p3, &
546 & spline_o%x1(1), spline_o%n1, &
547 & spline_o%x2(1), spline_o%n2, &
548 & spline_o%x3(1), spline_o%n3, &
549 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
550 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
551 & ict_herm, f, ifail)
556 call ezmake_ict3(i1,i2,i3,ict)
558 call r8evtricub(p1, p2, p3, &
559 & spline_o%x1(1), spline_o%n1, &
560 & spline_o%x2(1), spline_o%n2, &
561 & spline_o%x3(1), spline_o%n3, &
562 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
563 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
567 if(ifail /= 0) ier = 96
569 end subroutine ezspline_derivative3_r8
572 subroutine ezspline_derivative3_array_r8(spline_o, i1, i2, i3, &
573 & k1, k2, k3, p1, p2, p3, f, ier)
576 type(EZspline3_r8) spline_o
577 integer,
intent(in) :: i1, i2, i3, k1, k2, k3
578 real(ezspline_r8),
intent(in) :: p1(k1), p2(k2), p3(k3)
579 real(ezspline_r8),
intent(out) :: f(k1,k2,k3)
580 integer,
intent(out) :: ier
587 real(ezspline_r8),
dimension(:),
allocatable :: p1_cloud, p2_cloud, p3_cloud
599 if(i1<0 .OR. i2<0 .OR. i3<0)
then
603 if(max(i1,max(i2,i3)) > 3)
then
608 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
609 ier = 24;
if(spline_o%isLinear==1) ier = 46
614 allocate(p1_cloud(k123), p2_cloud(k123), p3_cloud(k123), stat=ifail)
620 p1_cloud = reshape(source=spread( &
621 & source=spread(source=p1, dim=2, ncopies=k2), &
622 & dim=3, ncopies=k3), shape=(/k123/))
623 p2_cloud = reshape(source=spread( &
624 & source=spread(source=p2, dim=1, ncopies=k1), &
625 & dim=3, ncopies=k3), shape=(/k123/))
626 p3_cloud = reshape(source=spread( &
627 & source=spread(source=p3, dim=1, ncopies=k1), &
628 & dim=2, ncopies=k2), shape=(/k123/))
630 if(spline_o%isHybrid == 1)
then
632 call ezmake_ict3(i1,i2,i3,ict)
634 call r8vecintrp3d(ict, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
635 & spline_o%n1, spline_o%x1pkg(1,1), &
636 & spline_o%n2, spline_o%x2pkg(1,1), &
637 & spline_o%n3, spline_o%x3pkg(1,1), &
638 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
639 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
640 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
643 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
644 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
645 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
646 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
647 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
648 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
649 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
650 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
651 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
652 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
653 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
654 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
655 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
656 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
657 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
659 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
662 if(spline_o%isLinear == 0)
then
663 call r8vecherm3(ict_herm, k123, p1_cloud, p2_cloud, p3_cloud, k123, &
665 & spline_o%n1, spline_o%x1pkg(1,1), &
666 & spline_o%n2, spline_o%x2pkg(1,1), &
667 & spline_o%n3, spline_o%x3pkg(1,1), &
668 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
671 call r8vecpc3(ict_herm, k123, p1_cloud, p2_cloud, p3_cloud, k123, &
673 & spline_o%n1, spline_o%x1pkg(1,1), &
674 & spline_o%n2, spline_o%x2pkg(1,1), &
675 & spline_o%n3, spline_o%x3pkg(1,1), &
676 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
682 call ezmake_ict3(i1,i2,i3,ict)
684 call r8vectricub(ict, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
685 & spline_o%n1,spline_o%x1pkg(1,1), &
686 & spline_o%n2,spline_o%x2pkg(1,1), &
687 & spline_o%n3,spline_o%x3pkg(1,1), &
688 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
694 if(ifail /= 0) ier = 96
696 deallocate(p1_cloud, p2_cloud, p3_cloud, stat=ifail)
703 end subroutine ezspline_derivative3_array_r8
705 subroutine ezspline_derivative3_cloud_r8(spline_o, i1, i2, i3, &
706 & k, p1, p2, p3, f, ier)
709 type(EZspline3_r8) spline_o
710 integer,
intent(in) :: i1, i2, i3, k
711 real(ezspline_r8),
intent(in) :: p1(k), p2(k), p3(k)
712 real(ezspline_r8),
intent(out) :: f(k)
713 integer,
intent(out) :: ier
729 if(i1<0 .OR. i2<0 .OR. i3<0)
then
733 if(max(i1,max(i2,i3)) > 3)
then
738 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
739 ier = 24;
if(spline_o%isLinear==1) ier = 46
743 if(spline_o%isHybrid == 1)
then
745 call ezmake_ict3(i1,i2,i3,ict)
747 call r8vecintrp3d(ict, k, p1, p2, p3, k, f, &
748 & spline_o%n1, spline_o%x1pkg(1,1), &
749 & spline_o%n2, spline_o%x2pkg(1,1), &
750 & spline_o%n3, spline_o%x3pkg(1,1), &
751 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
752 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
753 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
756 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
757 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
758 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
759 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
760 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
761 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
762 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
763 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
764 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
765 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
766 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
767 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
768 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
769 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
770 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
772 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
775 if(spline_o%isLinear == 0)
then
776 call r8vecherm3(ict_herm, k, p1, p2, p3, &
778 & spline_o%n1, spline_o%x1pkg(1,1), &
779 & spline_o%n2, spline_o%x2pkg(1,1), &
780 & spline_o%n3, spline_o%x3pkg(1,1), &
781 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
784 call r8vecpc3(ict_herm, k, p1, p2, p3, &
786 & spline_o%n1, spline_o%x1pkg(1,1), &
787 & spline_o%n2, spline_o%x2pkg(1,1), &
788 & spline_o%n3, spline_o%x3pkg(1,1), &
789 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
795 call ezmake_ict3(i1,i2,i3,ict)
797 call r8vectricub(ict, k, p1, p2, p3, &
799 & spline_o%n1, spline_o%x1pkg(1,1), &
800 & spline_o%n2, spline_o%x2pkg(1,1), &
801 & spline_o%n3, spline_o%x3pkg(1,1), &
802 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
807 if(ifail /= 0) ier = 96
809 end subroutine ezspline_derivative3_cloud_r8
817 subroutine ezspline_derivative1_r4(spline_o, i1, p1, f, ier)
820 type(EZspline1_r4) spline_o
821 integer,
intent(in) :: i1
822 real(ezspline_r4),
intent(in) :: p1
823 real(ezspline_r4),
intent(out) :: f
824 integer,
intent(out) :: ier
848 if(i1 >1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
849 ier = 24;
if(spline_o%isLinear==1) ier = 46
853 if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
861 if(spline_o%isLinear == 0)
then
863 & spline_o%x1(1), spline_o%n1, &
865 & spline_o%fspl(1,1), &
866 & ict_herm, f, ifail)
869 & spline_o%x1(1), spline_o%n1, &
871 & spline_o%fspl(1,1), &
872 & ict_herm, f, ifail)
877 call ezmake_ict1(i1,ict)
880 & spline_o%x1(1), spline_o%n1, &
882 & spline_o%fspl(1,1), &
886 if(ifail /= 0) ier = 96
888 end subroutine ezspline_derivative1_r4
890 subroutine ezspline_derivative1_array_r4(spline_o, i1, k1, p1, f, ier)
893 type(EZspline1_r4) spline_o
894 integer,
intent(in) :: i1
895 integer,
intent(in) :: k1
896 real(ezspline_r4),
intent(in) :: p1(k1)
897 real(ezspline_r4),
intent(out) :: f(k1)
898 integer,
intent(out) :: ier
923 if(i1 >1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
924 ier = 24;
if(spline_o%isLinear==1) ier = 46
928 if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
936 if(spline_o%isLinear == 0)
then
937 call vecherm1(ict_herm, k1, p1, k1, f, &
938 & spline_o%n1, spline_o%x1pkg(1,1), &
939 & spline_o%fspl(1,1), &
942 call vecpc1(ict_herm, k1, p1, k1, f, &
943 & spline_o%n1, spline_o%x1pkg(1,1), &
944 & spline_o%fspl(1,1), &
950 call ezmake_ict1(i1,ict)
952 call vecspline(ict, k1, p1, k1, f, &
953 & spline_o%n1, spline_o%x1pkg(1,1), &
954 & spline_o%fspl(1,1), &
959 if(ifail /= 0) ier = 96
961 end subroutine ezspline_derivative1_array_r4
969 subroutine ezspline_derivative2_r4(spline_o, i1, i2, p1, p2, f, ier)
972 type(EZspline2_r4) spline_o
973 integer,
intent(in) :: i1, i2
974 real(ezspline_r4),
intent(in) :: p1, p2
975 real(ezspline_r4),
intent(out) :: f
976 integer,
intent(out) :: ier
990 if(i1<0 .OR. i2<0)
then
994 if(max(i1,i2) > 3)
then
999 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1000 ier = 24;
if(spline_o%isLinear==1) ier = 46
1004 if(spline_o%isHybrid == 1)
then
1006 call ezmake_ict2(i1,i2,ict)
1008 call evintrp2d(p1, p2, &
1009 & spline_o%x1(1), spline_o%n1, &
1010 & spline_o%x2(1), spline_o%n2, &
1011 & spline_o%hspline, spline_o%fspl(1,1,1), &
1012 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1013 &
size(spline_o%fspl,3), &
1016 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1017 if(i1 == 1 .AND. i2 == 0)
then
1018 ict_herm = (/0, 1, 0, 0/)
1019 else if(i1 == 0 .AND. i2 == 1)
then
1020 ict_herm = (/0, 0, 1, 0/)
1021 else if(i1 == 1 .AND. i2 == 1)
then
1022 ict_herm = (/0, 0, 0, 1/)
1024 ict_herm = (/1, 0, 0, 0/)
1027 if(spline_o%isLinear == 0)
then
1028 call herm2ev(p1, p2, &
1029 & spline_o%x1(1), spline_o%n1, &
1030 & spline_o%x2(1), spline_o%n2, &
1031 & spline_o%ilin1, spline_o%ilin2, &
1032 & spline_o%fspl(1,1,1), spline_o%n1, &
1033 & ict_herm, f, ifail)
1035 call pc2ev(p1, p2, &
1036 & spline_o%x1(1), spline_o%n1, &
1037 & spline_o%x2(1), spline_o%n2, &
1038 & spline_o%ilin1, spline_o%ilin2, &
1039 & spline_o%fspl(1,1,1), spline_o%n1, &
1040 & ict_herm, f, ifail)
1045 call ezmake_ict2(i1,i2,ict)
1047 call evbicub(p1, p2, &
1048 & spline_o%x1(1), spline_o%n1, &
1049 & spline_o%x2(1), spline_o%n2, &
1050 & spline_o%ilin1, spline_o%ilin2, &
1051 & spline_o%fspl(1,1,1), spline_o%n1, &
1055 if(ifail /= 0) ier = 96
1057 end subroutine ezspline_derivative2_r4
1061 subroutine ezspline_derivative2_array_r4(spline_o, i1, i2, &
1062 & k1, k2, p1, p2, f, ier)
1065 type(EZspline2_r4) spline_o
1066 integer,
intent(in) :: i1, i2, k1, k2
1067 real(ezspline_r4),
intent(in) :: p1(k1), p2(k2)
1068 real(ezspline_r4),
intent(out) :: f(k1,k2)
1069 integer,
intent(out) :: ier
1076 real(ezspline_r4),
dimension(:),
allocatable :: p1_cloud, p2_cloud
1088 if(i1<0 .OR. i2<0)
then
1092 if(max(i1,i2) > 3)
then
1097 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1098 ier = 24;
if(spline_o%isLinear==1) ier = 46
1103 allocate(p1_cloud(k12), p2_cloud(k12), stat=ifail)
1109 p1_cloud = reshape( &
1110 & source=spread(source=p1, dim=2, ncopies=k2), &
1112 p2_cloud = reshape( &
1113 & source=spread(source=p2, dim=1, ncopies=k1), &
1116 if(spline_o%isHybrid == 1)
then
1118 call ezmake_ict2(i1,i2,ict)
1120 call vecintrp2d(ict, k12, p1_cloud, p2_cloud, k12, f, &
1121 & spline_o%n1, spline_o%x1pkg(1,1), &
1122 & spline_o%n2, spline_o%x2pkg(1,1), &
1123 & spline_o%hspline, spline_o%fspl(1,1,1), &
1124 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1125 &
size(spline_o%fspl,3), &
1128 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1129 if(i1 == 1 .AND. i2 == 0)
then
1130 ict_herm = (/0, 1, 0, 0/)
1131 else if(i1 == 0 .AND. i2 == 1)
then
1132 ict_herm = (/0, 0, 1, 0/)
1133 else if(i1 == 1 .AND. i2 == 1)
then
1134 ict_herm = (/0, 0, 0, 1/)
1136 ict_herm = (/1, 0, 0, 0/)
1139 if(spline_o%isLinear == 0)
then
1140 call vecherm2(ict_herm, k12, p1_cloud, p2_cloud, k12, f, &
1141 & spline_o%n1, spline_o%x1pkg(1,1), &
1142 & spline_o%n2, spline_o%x2pkg(1,1), &
1143 & spline_o%fspl(1,1,1), spline_o%n1, &
1146 call vecpc2(ict_herm, k12, p1_cloud, p2_cloud, k12, f, &
1147 & spline_o%n1, spline_o%x1pkg(1,1), &
1148 & spline_o%n2, spline_o%x2pkg(1,1), &
1149 & spline_o%fspl(1,1,1), spline_o%n1, &
1156 call ezmake_ict2(i1,i2,ict)
1158 call vecbicub(ict, k12, p1_cloud, p2_cloud, k12, f, &
1159 & spline_o%n1,spline_o%x1pkg(1,1), &
1160 & spline_o%n2,spline_o%x2pkg(1,1), &
1161 & spline_o%fspl(1,1,1), spline_o%n1, &
1167 if(ifail /= 0) ier = 96
1169 deallocate(p1_cloud, p2_cloud, stat=ifail)
1176 end subroutine ezspline_derivative2_array_r4
1179 subroutine ezspline_derivative2_cloud_r4(spline_o, i1, i2, &
1180 & k, p1, p2, f, ier)
1183 type(EZspline2_r4) spline_o
1184 integer,
intent(in) :: i1, i2, k
1185 real(ezspline_r4),
intent(in) :: p1(k), p2(k)
1186 real(ezspline_r4),
intent(out) :: f(k)
1187 integer,
intent(out) :: ier
1203 if(i1<0 .OR. i2<0)
then
1207 if(max(i1,i2) > 3)
then
1212 if(max(i1,i2) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1213 ier = 24;
if(spline_o%isLinear==1) ier = 46
1217 if(spline_o%isHybrid == 1)
then
1219 call ezmake_ict2(i1,i2,ict)
1221 call vecintrp2d(ict, k, p1, p2, k, f, &
1222 & spline_o%n1, spline_o%x1pkg(1,1), &
1223 & spline_o%n2, spline_o%x2pkg(1,1), &
1224 & spline_o%hspline, spline_o%fspl(1,1,1), &
1225 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1226 &
size(spline_o%fspl,3), &
1229 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1230 if(i1 == 1 .AND. i2 == 0)
then
1231 ict_herm = (/0, 1, 0, 0/)
1232 else if(i1 == 0 .AND. i2 == 1)
then
1233 ict_herm = (/0, 0, 1, 0/)
1234 else if(i1 == 1 .AND. i2 == 1)
then
1235 ict_herm = (/0, 0, 0, 1/)
1237 ict_herm = (/1, 0, 0, 0/)
1240 if(spline_o%isLinear == 0)
then
1241 call vecherm2(ict_herm, k, p1, p2, &
1243 & spline_o%n1, spline_o%x1pkg(1,1), &
1244 & spline_o%n2, spline_o%x2pkg(1,1), &
1245 & spline_o%fspl(1,1,1), spline_o%n1, &
1248 call vecpc2(ict_herm, k, p1, p2, &
1250 & spline_o%n1, spline_o%x1pkg(1,1), &
1251 & spline_o%n2, spline_o%x2pkg(1,1), &
1252 & spline_o%fspl(1,1,1), spline_o%n1, &
1258 call ezmake_ict2(i1,i2,ict)
1260 call vecbicub(ict, k, p1, p2, &
1262 & spline_o%n1, spline_o%x1pkg(1,1), &
1263 & spline_o%n2, spline_o%x2pkg(1,1), &
1264 & spline_o%fspl(1,1,1), spline_o%n1, &
1269 if(ifail /= 0) ier = 96
1271 end subroutine ezspline_derivative2_cloud_r4
1278 subroutine ezspline_derivative3_r4(spline_o, i1, i2, i3, p1, p2, p3, f, ier)
1281 type(EZspline3_r4) spline_o
1282 integer,
intent(in) :: i1, i2, i3
1283 real(ezspline_r4),
intent(in) :: p1, p2, p3
1284 real(ezspline_r4),
intent(out) :: f
1285 integer,
intent(out) :: ier
1300 if(i1<0 .OR. i2<0 .OR. i3<0)
then
1304 if(max(i1,max(i2,i3)) > 3)
then
1309 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1310 ier = 24;
if(spline_o%isLinear==1) ier = 46
1314 if(spline_o%isHybrid == 1)
then
1316 call ezmake_ict3(i1,i2,i3,ict)
1318 call evintrp3d(p1, p2, p3, &
1319 & spline_o%x1(1), spline_o%n1, &
1320 & spline_o%x2(1), spline_o%n2, &
1321 & spline_o%x3(1), spline_o%n3, &
1322 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
1323 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1324 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
1327 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1328 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
1329 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
1330 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
1331 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
1332 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
1333 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
1334 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
1335 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
1336 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
1337 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
1338 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
1339 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
1340 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
1341 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
1343 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
1346 if(spline_o%isLinear == 0)
then
1347 call herm3ev(p1, p2, p3, &
1348 & spline_o%x1(1), spline_o%n1, &
1349 & spline_o%x2(1), spline_o%n2, &
1350 & spline_o%x3(1), spline_o%n3, &
1351 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
1352 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1353 & ict_herm, f, ifail)
1355 call pc3ev(p1, p2, p3, &
1356 & spline_o%x1(1), spline_o%n1, &
1357 & spline_o%x2(1), spline_o%n2, &
1358 & spline_o%x3(1), spline_o%n3, &
1359 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
1360 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1361 & ict_herm, f, ifail)
1366 call ezmake_ict3(i1,i2,i3,ict)
1368 call evtricub(p1, p2, p3, &
1369 & spline_o%x1(1), spline_o%n1, &
1370 & spline_o%x2(1), spline_o%n2, &
1371 & spline_o%x3(1), spline_o%n3, &
1372 & spline_o%ilin1, spline_o%ilin2, spline_o%ilin3, &
1373 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1378 if(ifail /= 0) ier = 96
1380 end subroutine ezspline_derivative3_r4
1383 subroutine ezspline_derivative3_array_r4(spline_o, i1, i2, i3, &
1384 & k1, k2, k3, p1, p2, p3, f, ier)
1387 type(EZspline3_r4) spline_o
1388 integer,
intent(in) :: i1, i2, i3, k1, k2, k3
1389 real(ezspline_r4),
intent(in) :: p1(k1), p2(k2), p3(k3)
1390 real(ezspline_r4),
intent(out) :: f(k1,k2,k3)
1391 integer,
intent(out) :: ier
1398 real(ezspline_r4),
dimension(:),
allocatable :: p1_cloud, p2_cloud, p3_cloud
1410 if(i1<0 .OR. i2<0 .OR. i3<0)
then
1414 if(max(i1,max(i2,i3)) > 3)
then
1419 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1420 ier = 24;
if(spline_o%isLinear==1) ier = 46
1425 allocate(p1_cloud(k123), p2_cloud(k123), p3_cloud(k123), stat=ifail)
1431 p1_cloud = reshape(source=spread( &
1432 & source=spread(source=p1, dim=2, ncopies=k2), &
1433 & dim=3, ncopies=k3), shape=(/k123/))
1434 p2_cloud = reshape(source=spread( &
1435 & source=spread(source=p2, dim=1, ncopies=k1), &
1436 & dim=3, ncopies=k3), shape=(/k123/))
1437 p3_cloud = reshape(source=spread( &
1438 & source=spread(source=p3, dim=1, ncopies=k1), &
1439 & dim=2, ncopies=k2), shape=(/k123/))
1441 if(spline_o%isHybrid == 1)
then
1443 call ezmake_ict3(i1,i2,i3,ict)
1445 call vecintrp3d(ict, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
1446 & spline_o%n1, spline_o%x1pkg(1,1), &
1447 & spline_o%n2, spline_o%x2pkg(1,1), &
1448 & spline_o%n3, spline_o%x3pkg(1,1), &
1449 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
1450 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1451 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
1454 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1455 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
1456 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
1457 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
1458 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
1459 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
1460 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
1461 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
1462 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
1463 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
1464 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
1465 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
1466 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
1467 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
1468 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
1470 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
1473 if(spline_o%isLinear == 0)
then
1474 call vecherm3(ict_herm, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
1475 & spline_o%n1, spline_o%x1pkg(1,1), &
1476 & spline_o%n2, spline_o%x2pkg(1,1), &
1477 & spline_o%n3, spline_o%x3pkg(1,1), &
1478 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1481 call vecpc3(ict_herm, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
1482 & spline_o%n1, spline_o%x1pkg(1,1), &
1483 & spline_o%n2, spline_o%x2pkg(1,1), &
1484 & spline_o%n3, spline_o%x3pkg(1,1), &
1485 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1491 call ezmake_ict3(i1,i2,i3,ict)
1493 call vectricub(ict, k123, p1_cloud, p2_cloud, p3_cloud, k123, f, &
1494 & spline_o%n1,spline_o%x1pkg(1,1), &
1495 & spline_o%n2,spline_o%x2pkg(1,1), &
1496 & spline_o%n3,spline_o%x3pkg(1,1), &
1497 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1503 if(ifail /= 0) ier = 96
1505 deallocate(p1_cloud, p2_cloud, p3_cloud, stat=ifail)
1512 end subroutine ezspline_derivative3_array_r4
1514 subroutine ezspline_derivative3_cloud_r4(spline_o, i1, i2, i3, &
1515 & k, p1, p2, p3, f, ier)
1518 type(EZspline3_r4) spline_o
1519 integer,
intent(in) :: i1, i2, i3, k
1520 real(ezspline_r4),
intent(in) :: p1(k), p2(k), p3(k)
1521 real(ezspline_r4),
intent(out) :: f(k)
1522 integer,
intent(out) :: ier
1538 if(i1<0 .OR. i2<0 .OR. i3<0)
then
1542 if(max(i1,max(i2,i3)) > 3)
then
1547 if(maxval((/i1,i2,i3/)) > 1 .AND. (spline_o%isHermite==1 .or. spline_o%isLinear==1))
then
1548 ier = 24;
if(spline_o%isLinear==1) ier = 46
1552 if(spline_o%isHybrid == 1)
then
1554 call ezmake_ict3(i1,i2,i3,ict)
1556 call vecintrp3d(ict, k, p1, p2, p3, k, f, &
1557 & spline_o%n1, spline_o%x1pkg(1,1), &
1558 & spline_o%n2, spline_o%x2pkg(1,1), &
1559 & spline_o%n3, spline_o%x3pkg(1,1), &
1560 & spline_o%hspline, spline_o%fspl(1,1,1,1), &
1561 &
size(spline_o%fspl,1),
size(spline_o%fspl,2), &
1562 &
size(spline_o%fspl,3),
size(spline_o%fspl,4), &
1565 else if(spline_o%isHermite==1 .or. spline_o%isLinear==1)
then
1566 if(i1 == 1 .AND. i2 == 0 .AND. i3 == 0)
then
1567 ict_herm = (/0, 1, 0, 0, 0, 0, 0, 0/)
1568 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 0)
then
1569 ict_herm = (/0, 0, 1, 0, 0, 0, 0, 0/)
1570 else if(i1 == 0 .AND. i2 == 0 .AND. i3 == 1)
then
1571 ict_herm = (/0, 0, 0, 1, 0, 0, 0, 0/)
1572 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 0)
then
1573 ict_herm = (/0, 0, 0, 0, 1, 0, 0, 0/)
1574 else if(i1 == 1 .AND. i2 == 0 .AND. i3 == 1)
then
1575 ict_herm = (/0, 0, 0, 0, 0, 1, 0, 0/)
1576 else if(i1 == 0 .AND. i2 == 1 .AND. i3 == 1)
then
1577 ict_herm = (/0, 0, 0, 0, 0, 0, 1, 0/)
1578 else if(i1 == 1 .AND. i2 == 1 .AND. i3 == 1)
then
1579 ict_herm = (/0, 0, 0, 0, 0, 0, 0, 1/)
1581 ict_herm = (/1, 0, 0, 0, 0, 0, 0, 0/)
1584 if(spline_o%isLinear == 0)
then
1585 call vecherm3(ict_herm, k, p1, p2, p3, &
1587 & spline_o%n1, spline_o%x1pkg(1,1), &
1588 & spline_o%n2, spline_o%x2pkg(1,1), &
1589 & spline_o%n3, spline_o%x3pkg(1,1), &
1590 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1593 call vecpc3(ict_herm, k, p1, p2, p3, &
1595 & spline_o%n1, spline_o%x1pkg(1,1), &
1596 & spline_o%n2, spline_o%x2pkg(1,1), &
1597 & spline_o%n3, spline_o%x3pkg(1,1), &
1598 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1604 call ezmake_ict3(i1,i2,i3,ict)
1606 call vectricub(ict, k, p1, p2, p3, &
1608 & spline_o%n1, spline_o%x1pkg(1,1), &
1609 & spline_o%n2, spline_o%x2pkg(1,1), &
1610 & spline_o%n3, spline_o%x3pkg(1,1), &
1611 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
1616 if(ifail /= 0) ier = 96
1618 end subroutine ezspline_derivative3_cloud_r4