5 subroutine ezhybrid_init2_r8(spline_o, n1, n2, hspline, ier, &
9 type(EZspline2_r8) spline_o
10 integer,
intent(in) :: n1, n2
11 integer,
intent(in) :: hspline(2)
16 integer,
intent(out) :: ier
18 integer,
intent(in),
OPTIONAL :: BCS1(2), BCS2(2)
20 integer i, iok, icoeff, idim1, idim2
21 logical :: spline_present, hermite_present
38 spline_o%isHermite = 0
41 spline_o%hspline = hspline
43 spline_present=.false.
44 hermite_present=.false.
47 if(hspline(i).lt.-1)
then
49 else if(hspline(i).gt.2)
then
51 else if(hspline(i).eq.1)
then
52 hermite_present=.true.
54 else if(hspline(i).eq.2)
then
59 if((ier.eq.0).and.spline_present.and.hermite_present) ier=55
63 if(hspline(1).eq.-1) idim1 = n1 - 1
65 if(hspline(2).eq.-1) idim2 = n2 - 1
68 allocate(spline_o%x1(n1), stat=iok)
70 allocate(spline_o%x2(n2), stat=iok)
72 allocate(spline_o%fspl(icoeff,idim1,idim2), stat=iok)
74 allocate(spline_o%bcval1min(idim2), stat=iok)
76 allocate(spline_o%bcval1max(idim2), stat=iok)
78 allocate(spline_o%bcval2min(idim1), stat=iok)
80 allocate(spline_o%bcval2max(idim1), stat=iok)
82 allocate(spline_o%x1pkg(n1, 4), stat=iok)
84 allocate(spline_o%x2pkg(n2, 4), stat=iok)
89 spline_o%bcval1min(1:idim2) = 0.0_ezspline_r8
90 spline_o%bcval1max(1:idim2) = 0.0_ezspline_r8
91 spline_o%ibctype1(i) = 0
92 if(
present(bcs1))
then
95 spline_o%ibctype1(i) = -1
97 spline_o%ibctype1(i) = 0
99 if(hspline(1).le.0)
then
100 spline_o%ibctype1(i) = 0
103 spline_o%ibctype1(i) = 1
106 if(hspline(1).le.1)
then
107 spline_o%ibctype1(i) = 0
110 spline_o%ibctype1(i) = 2
114 spline_o%ibctype1(i) = 0
118 spline_o%bcval2min(1:idim1) = 0.0_ezspline_r8
119 spline_o%bcval2max(1:idim1) = 0.0_ezspline_r8
120 spline_o%ibctype2(i) = 0
121 if(
present(bcs2))
then
124 spline_o%ibctype2(i) = -1
126 spline_o%ibctype2(i) = 0
128 if(hspline(2).le.0)
then
129 spline_o%ibctype2(i) = 0
132 spline_o%ibctype2(i) = 1
135 if(hspline(2).le.1)
then
136 spline_o%ibctype2(i) = 0
139 spline_o%ibctype2(i) = 2
143 spline_o%ibctype2(i) = 0
149 if(spline_o%ibctype1(1)==-1 .OR. spline_o%ibctype1(2)==-1)
then
150 spline_o%ibctype1(1)=-1
151 spline_o%ibctype1(2)=-1
153 if(spline_o%ibctype2(1)==-1 .OR. spline_o%ibctype2(2)==-1)
then
154 spline_o%ibctype2(1)=-1
155 spline_o%ibctype2(2)=-1
159 spline_o%x1min = 0.0_ezspline_r8
160 spline_o%x1max = 1.0_ezspline_r8
161 if(spline_o%ibctype1(1).eq.-1) spline_o%x1max = ezspline_twopi_r8
163 spline_o%x1 = spline_o%x1min + (spline_o%x1max - spline_o%x1min)* &
164 & (/ (real(i-1,ezspline_r8)/real(spline_o%n1-1, ezspline_r8), i=1,spline_o%n1 ) /)
165 spline_o%x2min = 0.0_ezspline_r8
166 spline_o%x2max = 1.0_ezspline_r8
167 if(spline_o%ibctype2(1).eq.-1) spline_o%x2max = ezspline_twopi_r8
168 spline_o%x2 = spline_o%x2min + (spline_o%x2max - spline_o%x2min)* &
169 & (/ (real(i-1,ezspline_r8)/real(spline_o%n2-1, ezspline_r8), i=1,spline_o%n2 ) /)
174 end subroutine ezhybrid_init2_r8
179 subroutine ezhybrid_init3_r8(spline_o, n1, n2, n3, hspline, ier, &
183 type(EZspline3_r8) spline_o
184 integer,
intent(in) :: n1, n2, n3
185 integer,
intent(in) :: hspline(3)
190 integer,
intent(out) :: ier
192 integer,
intent(in),
OPTIONAL :: BCS1(2), BCS2(2), BCS3(2)
194 integer i, iok, icoeff, idim1, idim2, idim3
195 logical :: spline_present, hermite_present
210 spline_o%klookup1 = 3
211 spline_o%klookup2 = 3
212 spline_o%klookup3 = 3
214 spline_o%isHermite = 0
215 spline_o%isLinear = 0
216 spline_o%isHybrid = 1
217 spline_o%hspline = hspline
219 spline_present=.false.
220 hermite_present=.false.
223 if(hspline(i).lt.-1)
then
225 else if(hspline(i).gt.2)
then
227 else if(hspline(i).eq.1)
then
228 hermite_present=.true.
230 else if(hspline(i).eq.2)
then
231 spline_present=.true.
235 if((ier.eq.0).and.spline_present.and.hermite_present) ier=55
239 if(hspline(1).eq.-1) idim1 = n1 - 1
241 if(hspline(2).eq.-1) idim2 = n2 - 1
243 if(hspline(3).eq.-1) idim3 = n3 - 1
246 allocate(spline_o%x1(n1), stat=iok)
248 allocate(spline_o%x2(n2), stat=iok)
250 allocate(spline_o%x3(n3), stat=iok)
252 allocate(spline_o%fspl(icoeff,idim1,idim2,idim3), stat=iok)
254 allocate(spline_o%bcval1min(idim2, idim3), stat=iok)
256 allocate(spline_o%bcval1max(idim2, idim3), stat=iok)
258 allocate(spline_o%bcval2min(idim1, idim3), stat=iok)
260 allocate(spline_o%bcval2max(idim1, idim3), stat=iok)
262 allocate(spline_o%bcval3min(idim1, idim2), stat=iok)
264 allocate(spline_o%bcval3max(idim1, idim2), stat=iok)
266 allocate(spline_o%x1pkg(n1, 4), stat=iok)
268 allocate(spline_o%x2pkg(n2, 4), stat=iok)
270 allocate(spline_o%x3pkg(n3, 4), stat=iok)
275 spline_o%bcval1min(1:idim2, 1:idim3) = 0.0_ezspline_r8
276 spline_o%bcval1max(1:idim2, 1:idim3) = 0.0_ezspline_r8
277 spline_o%ibctype1(i) = 0
278 if(
present(bcs1))
then
281 spline_o%ibctype1(i) = -1
283 spline_o%ibctype1(i) = 0
285 if(hspline(1).le.0)
then
286 spline_o%ibctype1(i) = 0
289 spline_o%ibctype1(i) = 1
292 if(hspline(1).le.1)
then
293 spline_o%ibctype1(i) = 0
296 spline_o%ibctype1(i) = 2
300 spline_o%ibctype1(i) = 0
304 spline_o%bcval2min(1:idim1, 1:idim3) = 0.0_ezspline_r8
305 spline_o%bcval2max(1:idim1, 1:idim3) = 0.0_ezspline_r8
306 spline_o%ibctype2(i) = 0
307 if(
present(bcs2))
then
310 spline_o%ibctype2(i) = -1
312 spline_o%ibctype2(i) = 0
314 if(hspline(2).le.0)
then
315 spline_o%ibctype2(i) = 0
318 spline_o%ibctype2(i) = 1
321 if(hspline(2).le.1)
then
322 spline_o%ibctype2(i) = 0
325 spline_o%ibctype2(i) = 2
329 spline_o%ibctype2(i) = 0
333 spline_o%bcval3min(1:idim1, 1:idim2) = 0.0_ezspline_r8
334 spline_o%bcval3max(1:idim1, 1:idim2) = 0.0_ezspline_r8
335 spline_o%ibctype3(i) = 0
336 if(
present(bcs3))
then
339 spline_o%ibctype3(i) = -1
341 spline_o%ibctype3(i) = 0
343 if(hspline(3).le.0)
then
344 spline_o%ibctype3(i) = 0
347 spline_o%ibctype3(i) = 1
350 if(hspline(3).le.1)
then
351 spline_o%ibctype3(i) = 0
354 spline_o%ibctype3(i) = 2
358 spline_o%ibctype3(i) = 0
364 if(spline_o%ibctype1(1)==-1 .OR. spline_o%ibctype1(2)==-1)
then
365 spline_o%ibctype1(1)=-1
366 spline_o%ibctype1(2)=-1
368 if(spline_o%ibctype2(1)==-1 .OR. spline_o%ibctype2(2)==-1)
then
369 spline_o%ibctype2(1)=-1
370 spline_o%ibctype2(2)=-1
372 if(spline_o%ibctype3(1)==-1 .OR. spline_o%ibctype3(2)==-1)
then
373 spline_o%ibctype3(1)=-1
374 spline_o%ibctype3(2)=-1
378 spline_o%x1min = 0.0_ezspline_r8
379 spline_o%x1max = 1.0_ezspline_r8
380 if(spline_o%ibctype1(1).eq.-1) spline_o%x1max = ezspline_twopi_r8
381 spline_o%x1 = spline_o%x1min + (spline_o%x1max - spline_o%x1min)* &
382 & (/ (real(i-1,ezspline_r8)/real(spline_o%n1-1, ezspline_r8), i=1,spline_o%n1 ) /)
384 spline_o%x2min = 0.0_ezspline_r8
385 spline_o%x2max = 1.0_ezspline_r8
386 if(spline_o%ibctype2(1).eq.-1) spline_o%x2max = ezspline_twopi_r8
387 spline_o%x2 = spline_o%x2min + (spline_o%x2max - spline_o%x2min)* &
388 & (/ (real(i-1,ezspline_r8)/real(spline_o%n2-1, ezspline_r8), i=1,spline_o%n2 ) /)
390 spline_o%x3min = 0.0_ezspline_r8
391 spline_o%x3max = 1.0_ezspline_r8
392 if(spline_o%ibctype3(1).eq.-1) spline_o%x3max = ezspline_twopi_r8
393 spline_o%x3 = spline_o%x3min + (spline_o%x3max - spline_o%x3min)* &
394 & (/ (real(i-1,ezspline_r8)/real(spline_o%n3-1, ezspline_r8), i=1,spline_o%n3 ) /)
399 end subroutine ezhybrid_init3_r8
405 subroutine ezhybrid_init2_r4(spline_o, n1, n2, hspline, ier, &
409 type(EZspline2_r4) spline_o
410 integer,
intent(in) :: n1, n2
411 integer,
intent(in) :: hspline(2)
416 integer,
intent(out) :: ier
418 integer,
intent(in),
OPTIONAL :: BCS1(2), BCS2(2)
420 integer i, iok, icoeff, idim1, idim2
421 logical :: spline_present, hermite_present
435 spline_o%klookup1 = 3
436 spline_o%klookup2 = 3
438 spline_o%isHermite = 0
439 spline_o%isLinear = 0
440 spline_o%isHybrid = 1
441 spline_o%hspline = hspline
443 spline_present=.false.
444 hermite_present=.false.
447 if(hspline(i).lt.-1)
then
449 else if(hspline(i).gt.2)
then
451 else if(hspline(i).eq.1)
then
452 hermite_present=.true.
454 else if(hspline(i).eq.2)
then
455 spline_present=.true.
459 if((ier.eq.0).and.spline_present.and.hermite_present) ier=55
463 if(hspline(1).eq.-1) idim1 = n1 - 1
465 if(hspline(2).eq.-1) idim2 = n2 - 1
468 allocate(spline_o%x1(n1), stat=iok)
470 allocate(spline_o%x2(n2), stat=iok)
472 allocate(spline_o%fspl(icoeff,idim1,idim2), stat=iok)
474 allocate(spline_o%bcval1min(idim2), stat=iok)
476 allocate(spline_o%bcval1max(idim2), stat=iok)
478 allocate(spline_o%bcval2min(idim1), stat=iok)
480 allocate(spline_o%bcval2max(idim1), stat=iok)
482 allocate(spline_o%x1pkg(n1, 4), stat=iok)
484 allocate(spline_o%x2pkg(n2, 4), stat=iok)
489 spline_o%bcval1min(1:idim2) = 0.0
490 spline_o%bcval1max(1:idim2) = 0.0
491 spline_o%ibctype1(i) = 0
492 if(
present(bcs1))
then
495 spline_o%ibctype1(i) = -1
497 spline_o%ibctype1(i) = 0
499 if(hspline(1).le.0)
then
500 spline_o%ibctype1(i) = 0
503 spline_o%ibctype1(i) = 1
506 if(hspline(1).le.1)
then
507 spline_o%ibctype1(i) = 0
510 spline_o%ibctype1(i) = 2
514 spline_o%ibctype1(i) = 0
518 spline_o%bcval2min(1:idim1) = 0.0
519 spline_o%bcval2max(1:idim1) = 0.0
520 spline_o%ibctype2(i) = 0
521 if(
present(bcs2))
then
524 spline_o%ibctype2(i) = -1
526 spline_o%ibctype2(i) = 0
528 if(hspline(2).le.0)
then
529 spline_o%ibctype2(i) = 0
532 spline_o%ibctype2(i) = 1
535 if(hspline(2).le.1)
then
536 spline_o%ibctype2(i) = 0
539 spline_o%ibctype2(i) = 2
543 spline_o%ibctype2(i) = 0
549 if(spline_o%ibctype1(1)==-1 .OR. spline_o%ibctype1(2)==-1)
then
550 spline_o%ibctype1(1)=-1
551 spline_o%ibctype1(2)=-1
553 if(spline_o%ibctype2(1)==-1 .OR. spline_o%ibctype2(2)==-1)
then
554 spline_o%ibctype2(1)=-1
555 spline_o%ibctype2(2)=-1
559 spline_o%x1min = 0.0_ezspline_r4
560 spline_o%x1max = 1.0_ezspline_r4
561 if(spline_o%ibctype1(1).eq.-1) spline_o%x1max = ezspline_twopi_r4
562 spline_o%x1 = spline_o%x1min + (spline_o%x1max - spline_o%x1min)* &
563 & (/ (real(i-1,ezspline_r4)/real(spline_o%n1-1, ezspline_r4), i=1,spline_o%n1 ) /)
565 spline_o%x2min = 0.0_ezspline_r4
566 spline_o%x2max = 1.0_ezspline_r4
567 if(spline_o%ibctype2(1).eq.-1) spline_o%x2max = ezspline_twopi_r4
568 spline_o%x2 = spline_o%x2min + (spline_o%x2max - spline_o%x2min)* &
569 & (/ (real(i-1,ezspline_r4)/real(spline_o%n2-1, ezspline_r4), i=1,spline_o%n2 ) /)
575 end subroutine ezhybrid_init2_r4
580 subroutine ezhybrid_init3_r4(spline_o, n1, n2, n3, hspline, ier, &
584 type(EZspline3_r4) spline_o
585 integer,
intent(in) :: n1, n2, n3
586 integer,
intent(in) :: hspline(3)
591 integer,
intent(out) :: ier
593 integer,
intent(in),
OPTIONAL :: BCS1(2), BCS2(2), BCS3(2)
595 integer i, iok, icoeff, idim1, idim2, idim3
596 logical :: spline_present, hermite_present
611 spline_o%klookup1 = 3
612 spline_o%klookup2 = 3
613 spline_o%klookup3 = 3
615 spline_o%isHermite = 0
616 spline_o%isLinear = 0
617 spline_o%isHybrid = 1
618 spline_o%hspline = hspline
620 spline_present=.false.
621 hermite_present=.false.
624 if(hspline(i).lt.-1)
then
626 else if(hspline(i).gt.2)
then
628 else if(hspline(i).eq.1)
then
629 hermite_present=.true.
631 else if(hspline(i).eq.2)
then
632 spline_present=.true.
636 if((ier.eq.0).and.spline_present.and.hermite_present) ier=55
640 if(hspline(1).eq.-1) idim1 = n1 - 1
642 if(hspline(2).eq.-1) idim2 = n2 - 1
644 if(hspline(3).eq.-1) idim3 = n3 - 1
647 allocate(spline_o%x1(n1), stat=iok)
649 allocate(spline_o%x2(n2), stat=iok)
651 allocate(spline_o%x3(n3), stat=iok)
653 allocate(spline_o%fspl(icoeff,idim1,idim2,idim3), stat=iok)
655 allocate(spline_o%bcval1min(idim2, idim3), stat=iok)
657 allocate(spline_o%bcval1max(idim2, idim3), stat=iok)
659 allocate(spline_o%bcval2min(idim1, idim3), stat=iok)
661 allocate(spline_o%bcval2max(idim1, idim3), stat=iok)
663 allocate(spline_o%bcval3min(idim1, idim2), stat=iok)
665 allocate(spline_o%bcval3max(idim1, idim2), stat=iok)
667 allocate(spline_o%x1pkg(n1, 4), stat=iok)
669 allocate(spline_o%x2pkg(n2, 4), stat=iok)
671 allocate(spline_o%x3pkg(n3, 4), stat=iok)
676 spline_o%bcval1min(1:idim2, 1:idim3) = 0.0
677 spline_o%bcval1max(1:idim2, 1:idim3) = 0.0
678 spline_o%ibctype1(i) = 0
679 if(
present(bcs1))
then
682 spline_o%ibctype1(i) = -1
684 spline_o%ibctype1(i) = 0
686 if(hspline(1).le.0)
then
687 spline_o%ibctype1(i) = 0
690 spline_o%ibctype1(i) = 1
693 if(hspline(1).le.1)
then
694 spline_o%ibctype1(i) = 0
697 spline_o%ibctype1(i) = 2
701 spline_o%ibctype1(i) = 0
705 spline_o%bcval2min(1:idim1, 1:idim3) = 0.0
706 spline_o%bcval2max(1:idim1, 1:idim3) = 0.0
707 spline_o%ibctype2(i) = 0
708 if(
present(bcs2))
then
711 spline_o%ibctype2(i) = -1
713 spline_o%ibctype2(i) = 0
715 if(hspline(2).le.0)
then
716 spline_o%ibctype2(i) = 0
719 spline_o%ibctype2(i) = 1
722 if(hspline(2).le.1)
then
723 spline_o%ibctype2(i) = 0
726 spline_o%ibctype2(i) = 2
730 spline_o%ibctype2(i) = 0
734 spline_o%bcval3min(1:idim1, 1:idim2) = 0.0
735 spline_o%bcval3max(1:idim1, 1:idim2) = 0.0
736 spline_o%ibctype3(i) = 0
737 if(
present(bcs3))
then
740 spline_o%ibctype3(i) = -1
742 spline_o%ibctype3(i) = 0
744 if(hspline(3).le.0)
then
745 spline_o%ibctype3(i) = 0
748 spline_o%ibctype3(i) = 1
751 if(hspline(3).le.1)
then
752 spline_o%ibctype3(i) = 0
755 spline_o%ibctype3(i) = 2
759 spline_o%ibctype3(i) = 0
765 if(spline_o%ibctype1(1)==-1 .OR. spline_o%ibctype1(2)==-1)
then
766 spline_o%ibctype1(1)=-1
767 spline_o%ibctype1(2)=-1
769 if(spline_o%ibctype2(1)==-1 .OR. spline_o%ibctype2(2)==-1)
then
770 spline_o%ibctype2(1)=-1
771 spline_o%ibctype2(2)=-1
773 if(spline_o%ibctype3(1)==-1 .OR. spline_o%ibctype3(2)==-1)
then
774 spline_o%ibctype3(1)=-1
775 spline_o%ibctype3(2)=-1
779 spline_o%x1min = 0.0_ezspline_r4
780 spline_o%x1max = 1.0_ezspline_r4
781 if(spline_o%ibctype1(1).eq.-1) spline_o%x1max = ezspline_twopi_r4
782 spline_o%x1 = spline_o%x1min + (spline_o%x1max - spline_o%x1min)* &
783 & (/ (real(i-1,ezspline_r4)/real(spline_o%n1-1, ezspline_r4), i=1,spline_o%n1 ) /)
785 spline_o%x2min = 0.0_ezspline_r4
786 spline_o%x2max = 1.0_ezspline_r4
787 if(spline_o%ibctype2(1).eq.-1) spline_o%x2max = ezspline_twopi_r4
788 spline_o%x2 = spline_o%x2min + (spline_o%x2max - spline_o%x2min)* &
789 & (/ (real(i-1,ezspline_r4)/real(spline_o%n2-1, ezspline_r4), i=1,spline_o%n2 ) /)
791 spline_o%x3min = 0.0_ezspline_r4
792 spline_o%x3max = 1.0_ezspline_r4
793 if(spline_o%ibctype3(1).eq.-1) spline_o%x3max = ezspline_twopi_r4
794 spline_o%x3 = spline_o%x3min + (spline_o%x3max - spline_o%x3min)* &
795 & (/ (real(i-1,ezspline_r4)/real(spline_o%n3-1, ezspline_r4), i=1,spline_o%n3 ) /)
800 end subroutine ezhybrid_init3_r4